home *** CD-ROM | disk | FTP | other *** search
- ;
- ; 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
-