home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
CCP
/
PROTCCP.LBR
/
PROTCCP.ZZ0
/
PROTCCP.Z80
Wrap
Text File
|
2000-06-30
|
3KB
|
85 lines
; This program changes the BDOS entry vector at address 6 so that a program
; running after it will not overwrite the command processor. This program
; is useful when one wants to debug the operation of the command processor and
; wants to force a debugger such as DDT or DSD to load below rather than over
; the command processor.
; The program works by reading the current BDOS and BIOS vectors in page 0.
; The command processor address is calculated by subtracting 1603h from the
; BIOS warmboot address stored at 0001h. If the current BDOS vector stored at
; 0006h is less than this, then no further protection is needed. If it is not,
; then an address just below the command processor is calculated. A jump
; instruction is placed three bytes below the command processor, and the BDOS
; vector is changed to point to that instruction. Until the next warm boot
; restores the page-0 vectors, programs that run after PROTCCP will think that
; the usable TPA extends only as far as the command processor (actually,
; slightly below it).
org 100h
ld a,(05dh) ; See if anything in command tail
cp ' '
jr nz,help ; If so, display built-in help
ld hl,(1) ; Get BIOS warmboot address
ld de,-1606h ; Calculate address three bytes below
add hl,de ; ..the command processor
ex de,hl ; Put it into DE
ld hl,(6) ; Get BDOS entry address
ld a,h ; See if BDOS already points below CPR
cp d ; If carry, CPR address is above protected
jr c,noneed ; ..address, and we're all set
jr nz,prot1 ; If nonzero, we have work to do
ld a,l ; If zero, we have to check low bytes
cp e
noneed: ; CPR already safe
ld de,noneedmsg ; Tell the user
jr print
prot1: ; We have to work to protect CPR
ex de,hl ; Now HL has address for new BDOS vectoring
ld (6),hl ; Put it in place in page zero
; Put jump instruction at vector address
ld (hl),0c3h ; JP opcode
inc hl
ld (hl),e ; Store low byte of real BDOS address
inc hl
ld (hl),d ; Save high byte of real address
ld de,protmsg ; Tell user that CPR is protected
jr print
ret
help:
ld de,helpmsg
print:
ld c,9 ; BDOS print-string function
jp 5 ; Invoke BDOS and quit
helpmsg:
db 13,10,10 ; CR,LF,LF
db 'This program protects the command processor until the'
db 13,10
db 'next warm boot. Use it just before running a debugger'
db 13,10
db 'if you want to examine the command processor.'
db 13,10,10
db '$'
noneedmsg:
db 13,10,10
db 'Command processor already protected.'
db 13,10,10
db '$'
protmsg:
db 13,10,10
db 'Command processor now protected until next warm boot.'
db 13,10,10
db '$'
end