; ; title Wordmaster patch for VDM-1 ; filename wmpat.asm ; author Robert A. Van Valzah 3/14/79 ; last revisor R. A. V. 11/11/79 ; reason revised for word master 1.06, added routine ; to actually do a carriage return when needed ; screen equ 0cc00h ; ; These equates must be set by disassembling a virgin copy ; of wordmaster to find present values. ; pastwm equ 29b8h ;value dw'd in pbegmem ; ; org 180h ;clear screen and home push h ;save wm reg h lxi h,screen shld cursor clr: mvi m,' ' inx h mov a,h cpi (screen shr 8)+4 jnz clr jmp morclr ;cont'd below ; org 196h tcursor: push h ;save line & cold call csoff pop h push h push d lxi d,screen mov a,h ;save col mvi h,0 ;multiply line by 64 rept 6 dad h endm dad d ;add displacement to screen base add l ;add col to line mov l,a call cson pop d pop h ret ; org 1b7h ;patch in new end of memory to take into account dw neweom ;added code db 16 ;patch in new hight of 25 lines db 64 ;patch in new line length db 0 ;no erase to end of line ; org 1c1h ;patch out all delays db 0, 0, 0 ; org pastwm ;org to patch area morclr: lxi h,screen call cson pop h ;restore wm's reg h lda initdone ora a rnz push h ;save wm's reg h mvi a,0ffh ;set init done flag sta initdone lhld 1 inx h push h ;save address of address field of mov a,m ;boot jmp in cbios table inx h mov h,m mov l,a shld oldboot ;save old boot routine address pop h mvi m,low(boot) ;poke address of out boot routine inx h mvi m,high(boot) lhld 1 ;as above for co jump mvi l,0dh push h ;save address of co jump mov a,m inx h mov h,m mov l,a shld oldco pop h mvi m,low(outch) inx h mvi m,high(outch) pop h ;restore wm's reg h ret ; boot: ;resore old boot and co jumps lhld oldboot xchg lhld 1 inx h mov m,e inx h mov m,d lhld oldco xchg lhld 1 mvi l,0dh mov m,e inx h mov m,d jmp 0 ; outch: push h ;save wm's reg h call csoff ;off with old cursor mov a,c cpi 10 ;new line? jz lf ;yes cpi 13 ;carriage return? jz cr mov m,c ;no put new chr on screen inx h onret: ;turn on cursor & return call cson pop h ;restore wm's reg h ret cr: mov a,l ;move cursor to start of line ani 255-63 mov l,a jmp onret ;and return lf: ;process line feed char inx h ;move cursor to start of next line mov a,l ani 63 jnz lf mov a,h ;off end of screen? cpi (screen shr 8)+4 jnz onret ;no - just return push d ;yes - scroll lxi h,screen lxi d,screen+40h movup: ldax d mov m,a inx d inx h mov a,d cpi (screen shr 8)+4 jnz movup push h ;blank new line blnk: mvi m,' ' inx h mov a,h cpi (screen shr 8)+4 jnz blnk pop h pop d jmp onret ; csoff: lhld cursor mov a,m ani 7fh mov m,a ret ; cson: shld cursor mov a,m ori 80h mov m,a ret ; initdone db 0 oldco ds 2 oldboot ds 2 cursor ds 2 ; neweom: ; end