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