home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
cpm
/
ccp
/
22public.asm
< prev
next >
Wrap
Assembly Source File
|
1983-09-09
|
2KB
|
79 lines
;Date: 22 Jun 1981 (Monday) 1041-PST
;From: Neil Maron
;To: All
;Re: A safe public USER 0 for .COM files patch for CP/M 2.2
;
;This patch includes CCPPATCH so that the system will look on
;drive A: if your .COM file isn't on the logged in drive. In
;addition, it makes "USER 0" public. I consider it safer than
;the "BDOS22.PAT" which makes "USER 0" public but also may have
;certain bad side effects. This of course is tested and is up
;in my system.
;
;This is for CP/M 2.2 .
;
;Patchfile>>>
;
;N.Maron 19jun81
;Patch to look on A: for .COM file then look on USER 0
;or look on USER 0 if d: given explicitly in command.
;
msize equ 54 ;CP/M system size in kilobytes
;
;Set for your system
;
delta equ 0000h ;offset from standard CP/M size (probably 0 in
; your case
bias equ (msize-20)*1024-delta ; offset from 20k CP/M
ccp equ 3400h+bias
;
coa equ ccp+8ch ;CCP console output routine from A
gtusr equ CCP+113h ;CCP get user number routine
stusr equ CCP+115h ;CCP set user number routine
ocpmfcb equ ccp+0d0h ;CCP open file @ cpmfcb$ routine
cpmtype$ equ ccp+7d6h ;type field in cpmfcb$
cmdsk$ equ ccp+7f0h ;loc of disk given in command
cmderr equ ccp+76bh ;loc to type error in command
win equ ccp+6deh ;go here if we get file open
;
patcharea equ ????? ;patch area in your CBIOS
;(not in CCP or BDOS)
;
org ccp+6dbh
jz patch ;replace "jz cpm+76bh"=jz cmderr
;
org ccp+7f2h ;replaces an unused area of NOP's
;
patch: lxi h,cmdsk$ ;get drive from current command
ora m ;A=0 on entry, so fetches drive
jnz patch1 ;if explicit drive given go try USER 0
;(this will be escape even if we force A:)
inr m ;force explicit reference to drive A
lxi d,cpmtype$ ;need DE set up to this on entry to CCP
jmp ccp+6cdh ;now go reenter CCP
;
;This is the addition to the above patch
;
org patcharea ;patch area in memory
;
;Arrive here because explicit drive set or can't find file on A:
;
patch1: call gtusr ;get user code
ora a ;set flags
jz cmderr ;already user 0 so lose
mov e,a ;get old value into E for later
push d ;save it
mvi e,0 ;set USER=0
call stusr
call ocpmfcb ;try open again
pop d ;get old user code back before we save flags
push psw ;now save flags from call
call stusr ;now go set back to old user number
pop psw ;get flags back from OPEN call
jnz win ;go to win if we won
jmp cmderr ;too bad we lose
;
end
;
;<<<<End of patch file