home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol073
/
wmpat.asm
< prev
Wrap
Assembly Source File
|
1984-04-29
|
3KB
|
185 lines
;
; 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