home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
kaypro
/
trompat1.lbr
/
AMPATCH.AQM
/
AMPATCH.ASM
Wrap
Assembly Source File
|
1986-07-13
|
3KB
|
116 lines
; AMPATCH.ASM PATCH FOR AUTOMITE.COM VERSION 1.61 6/6/86 GSD
;
; THIS PATCH:
;
; 1. ENSURES THAT THE 25th LINE ON THE SCREEN IS ERASED
; 2. ASSEMBLES WITH DRI'S MAC ASSEMBLER
;
; USE DDT TO PATCH AUTOMITE.COM:
;
; A>DDT AUTOMITE.COM
; NEXT PC
; 7600 0100
; #IAMPATCH.HEX
; #R
; #G0
; A>SAVE 117 AUTOMITE.COM
;
;
BDOS equ 0005H ; BDOS ENTRY
ESC equ 01BH ; ASCII ESCAPE CHARACTER
CTRLX equ 'X'-40H ; CONTROL X (ERASE TO END OF LINE)
CTRLZ equ 'Z'-40H ; CONTROL Z (HOME CURSOR, THEN ERASE SCREEN)
;
djnz macro addr ; Z80 djnz macro
db 10h
db low addr-($+1)
endm
;
org 011bh ; id string
db '1.61'
;
ORG 100H ; start of TPA
;
JMP PATCH ; branch to patch code
;
org 7206H ; end of program pointer
DW ENDPRG ; change pointer to protect patch
ORG 759dH ; start of patch area
;
patch: lxi sp,endprg
call swap ; exchange BIOS Warm Boot vector
lxi h,line25 ; turn off status line
call prnstr
jmp 7208H ; execute AUTOMITE
;
; This code intercepts the Warm Boot following the exit
; from Automite. This code:
;
; 1. Resotres the orginal Warm Boot vector at the BIOS
; jump table level.
; 2. Ensures that the 25th line is cleared
; 3. Exits to the orginal Warm Boot routine
;
WBPATCH:
lxi sp,endprg
call swap ; restore BIOS Warm Boot vector
lxi h,line24 ; restore status line
call prnstr
rst 0 ; Warm Boot
;
; This code exchanges the BIOS jump table Warm Boot vector
; for the vector stored locally. This code is used to
; insert a Warm Boot patch into Automite and then restore
; the orginal Warm Boot vector.
;
swap: lhld 0001 ; get BIOS Warm BootJMP ADDR
push h ; save jmp addr
lxi d,0ch-3 ; offset to conout routine
dad d
shld conout+1
pop h ; restore jmp addr
inx h ; hl --> BIOS Warm Boot vector
lxi d,table ; de --> local Warm Boot handler
mvi b,2 ; vector size in bytes
;
; exchange the contents pointed to by hl with those
; pointed to by de.
;
loop: ; repeat
mov c,m ; swap *hl,*de
ldax d
mov m,a
mov a,c
stax d
inx h ; hl++, de++
inx d
djnz loop ; unitl bytes swaped
ret
;
prnstr: mov a,m ; while character is not 0
ora a ;
rz
mov c,a ; set up to pass char in c
push h ; save pointer
call conout ; output to screen
pop h ; restore pointer
inx h ; and advance to next char
jmp prnstr ; end while
conout: jmp 0 ; dummy jump to BIOS CONOUT routine
;
table: DW wbpatch ; replacement Warm Boot Vector
;
line25: DB ESC,'C7',0
line24: DB ESC,'B7',0
;
ds 16 ; temp stack area
;
ENDPRG equ $ ; end marker
;
END