The following has been taken direct from the ZPM3 source and is provided as a reference. No guarantees are made with regard to its accuracy. The only SCB entries that you should manipulate in CP/M 3.0 are the ones published by its authors. ;------------------------------------------------------------------------------- ;68 TRAPS FOR WARM BOOT and CONSOLE FUNCTIONS ;------------------------------------------------------------------------------- ; This table allows you to replace certain BIOS functions with new ones in the ; TPA. Because of the banked nature of CP/M 3, simply changing the BIOS ; vector could cause a problem as some BIOS functions need to be in the ; system bank. If you redirect any of these functions, you should replace ; the first jump (0c3h) in each group with a LD HL, (21h). When restoring ; the jumps check first that the BIOS vectors you are restoring are in ; fact to the BIOS and not to another redirection. To do this, make sure ; that the BIOS jumps are pointing above themselves, not down into TPA. ; For ZPM, the need for the traps has been eliminated. ; Because pre-ZPM programs may attempt to write to the first byte of each ; trap, these bytes can only be used for other things with some caution! ; Warm boot trap jp ?wboot ;68 jp dotpa ;6b ; Console status trap jp ?const ;6e jp dotpa ;71 ; Console input trap jp ?conin ;74 jp dotpa ;77 ; Console output trap jp ?conout ;7a jp dotpa ;7d ;;; List output trap ;; jp ?list ;80 ;; jp dotpa ;83 db 0c3h ;80 This first byte should not be used as it ; could get changed by programs which attempt to ; redirect the printer db 0 ;81 Not used yet db 0 ;82 Function 59 load user number. Normally ; function 59 loads from the current user ; however by setting this byte to a user ; number + 1, function 59 will load from ; that user area instead (only works with ; the ZCCP loader RSX). 0=current user number. dw 0 ; -19 83 ; This word is set to the address of the ; ZCPR system environment. If it is 0000h ; the BDOS assumes that the normal CP/M 3 ; CCP system is running. Otherwise, the BDOS ; will perform certain functions differently. ; For example function 152 will use named ; directories if available, function 10 ; will use the message buffers for CCP running ; flag and wheel protection of files is enabled. ; Note that Z3PLUS users can set this word ; once Z3PLUS is installed to enable the ; extra functions. ZCCP users need not worry ; as it will be done automatically. db 0 ; -17 85 ; This byte holds control flags for various ZPM3 ; functions. ; bit 7: Setting this bit will clear the function ; 10 history buffer. Write only. ; bit 6: Controls enabling of the function 10 AUTO ; COMMAND facility. If set, control-Q toggles ; the facility on and off. If clear, control-Q ; has no effect. Read/Write. ; bit 5: After function 152 has been called, if a DU: ; D:,U: or DIR: spec has been found, this ; bit is set and the drive and user is ; set in the FCB. ; bit 4: This flag is for system use only. It is ; set after a function 55 call, but is reset ; after any other call. ; bit 3: After function 152 has been called, if a ; DIR: spec has been parsed, this bit is set ; and the user and drive is set in the FCB. ; bits 2-0: Not used yet ;------------------------------------------------------------------------------- ; SYSTEM CONTROL BLOCK (unofficial) ;------------------------------------------------------------------------------- ; None of these is accessed by the resident BDOS or the user dw 0 ; -16 86 dw 0 ; -14 88 dw 0 ; -12 8a dw 0 ; -10 8c dw 0 ; -e 8e dw 0 ; Bit mapped vector of drives -c 90 ; with open files since last warm boot. dw 0 ; Bit mapped vector of drives -a 92 ; accessed since last warm boot. dw 0 ; -8 94 dw 07h ; -6 96 dw base+6 ; This word is the address -4 98 ; of the entry to the BDOS. ; It can be used to find the ; actual BDOS as opposed to ; the top of TPA. db 0 ; -2 9a db 0 ; -1 9b ;------------------------------------------------------------------------------ ;9c SYSTEM CONTROL BLOCK ;------------------------------------------------------------------------------ ; The official system control block starts here. In reality, the control block ; begins before this point, but this is the data section that we are ; told about in the DRI literature ; In this section, a code is used to signify which sections of the code ; access the bytes: a * means that that user may read and write the bytes ; a + means that the resident portion of the BDOS accesses the bytes ; a ~ means the banked portion of the BDOS accesses the bytes ; a ~~ means the banked portion of ZPM3 accesses the bytes, but CPM doesn't scb: db 0 ;+ Reserved 0 9c dw 0 ;+ Reserved 1 9d db 0 ; Reserved 3 9f db 0 ; Reserved 4 a0 db 31h ; BDOS version number (in BCD) 5 a1 ; The following four bytes may be used for any purpose. ; Note that CCP104 used 8 and 9. ZCCP and ZPM3 do not ; affect these bytes at all. db 0 ;* Reserved for user 6 a2 db 0 ;* Reserved for user 7 a3 db 0 ;* Reserved for user 8 a4 db 0 ;* Reserved for user 9 a5 db 0 ; Reserved 0a a6 db 0 ; Reserved 0b a7 db 0 ; Reserved 0c a8 db 0 ; Reserved 0d a9 db 0 ; Reserved 0e aa db 0 ; Reserved 0f ab dw 0 ;* Program Error Return Code. 10 ac ; This 2-byte field can be used by a program to pass ; an error code or value to chained programs. CP/M 3's ; conditional command facility also uses this field to ; determine if a program executes successfuly. The ; BDOS Function 108 (Get/SET Program Return Code) is ; used to get/set this value ; Following byte holds the base page of the top ; multiple command RSX (only used by CCP). db 0 ; Reserved 12 ae ; The following bytes are the default disk and user ; of the CCP. When the CCP is run, the disk and user ; is restored to these values unless flagged not to ; by the chain command. db 0 ; CCP disk 13 af db 0 ; CCP user number 14 b0 ; The following word holds the address of the next ; command to get if running multiple commands or ; shells. It should not be set by the user. dw 0 ; Multiple command pointer. CCP 15 b1 db 0 ; System flag CCP use 17 b3 ; This byte is bit mapped as follows: ; Bit 0 Submit flag (set if a file beginning with '$' ; is found, cleared by CCP) ; 1 RSX flag (set by loader when it loads a null ; file with RSXs attached (indicates to CCP ; not to attempt to remove the RSXs until the ; second warm boot). May be set by RSXs ; 2-5 unknown (probably used by utilities) ; 6 Change default DU to last program's DU ; when chaining. ; 7 Chain flag. Set to indicate to CCP that ; there is a command to chain to at 080h. db 0 ; System flag CCP use 18 b4 ; This byte is bit mapped as follows: ; Bit 0 Display command flag ; 1 Display command flag ; 2 Unknown ; 3 File type search order ; 4 File type search order ; 5 Reset disk system ; 6 "GET" RSX flag (set if GET RSX is redirecting) ; 7 CCP running flag ; Bit 7 is the only one used by the BDOS (in function 10) db 0 ; System flag CCP use 19 b5 ; This byte is bit mapped as follows: ; Bit 0 Unknown ; 1 Cold boot flag ; 2-7 Unknown db 0 ;* Console Width 1a b6 ; This byte contains the number of columns ; (characters) per line on your console relative ; to zero. Most systems default this value to ; 79. You can set this default value by using ; GENCPM or the DEVICE utility. The console width ; value is used by CP/M 3 in BDOS function 10. It ; is not used by ZPM3. Typing a character into the ; last position of the screen, as specified by the ; Console Width field, must not cause the terminal ; to advance to the next line. db 0 ; Console Column Position 1b b7 ; This byte contains the current console column postion db 0 ;* Console Page Length 1c b8 ; This byte contains the page length lines per page, of ; your console. Most systems default this value to ; 24 lines per page. This default value may be changed ; by using GENCPM or the DEVICE utility. db 0 ; Reserved 1d b9 ; The following word is used by function 10 and points ; to the next character to get in an initialised ; function 10 buffer. If a ^C termination occurs or ; if a null terminator is found before a CR or LF, ; this word is set 0. By setting DE NZ and pointing ; this word to a buffer before calling it, you ; can have it initialize buffers other than ; the default DMA. dw 0 ;+~Reserved 1e ba ; The following word is used by multiple commands and ; shells. When function 10 retrieves information from ; an initialised buffer, it stores the next character ; position at offset 1e and here at 20. If a ^C ; termination occurs, 1e is set to 00, but 20 is left ; as it was so that the next command can be retrieved. ; Therefore, if 1e is 00 and 20 is NZ it means that ; a ^C termination happened dw 0 ;~ Reserved 20 bc ; Redirection flags (following) for each of the five ; logical character devices. If your system's BIOS ; supports assignment of logical devices to physical ; devices, you can direct each of the five logical ; character devices to any combination of up to 12 ; physical devices. The 16 bit word for each device ; represents the following: ; ; Each bit represents a physical device where bit 15 ; corresponds to device zero and bit 4 corresponds to ; device 11. Bits zero through 3 are reserved for ; system use and are used for redirection to disk files. ; dw 0 ;* CONIN Redirection Flag 22 be dw 0 ;* CONOUT Redirection Flag 24 c0 dw 0 ;* AUXIN Redirection Flag 26 c2 dw 0 ;* AUXOUT Redirection Flag 28 c4 dw 0 ;* LIST Redirection Flag 2a c6 db 0 ;* Page Mode 2c c8 ; If this byte is set to zero, some CP/M 3 utilities ; and CCP built in commands display one page of data ; at a time; you display the next page by pressing ; any key. If this byte is not set to zero, the system ; displays data on the screen without stopping. To ; stop and start the display, you can press CTRL-S and ; CTRL-Q respectively. db 0 ; Default page mode 2d c9 db 0 ;* ~~ 2e ca ; Determines if CTRL-H is interpreted as a rub/del ; character. If this byte is set to 0, then CTRL-H is ; a backspace character (moves back and deletes). If ; this byte is set to 0ffh, then CTRL-H is a rub/del ; character, echoes the deleted character. ; Under ZPM3, the byte has no effect. It should not ; be used however as it may be written to by ; applications. db 0 ;* 2f cb ; Determines if rub/del is interpreted as CTRL-H ; character. If this byte is set to 0, then rub/del ; echoes the deleted character. If this byte is ; set to 0ffh, then rub/del is interpreted as a ; CTRL-H character (moves back and deletes). ; Under ZPM3, the byte has no effect. It should not ; be used however as it may be written to by ; applications. db 0 ;~ Reserved 30 cc ; Following two bytes are probably used by CP/M3 utilities db 0 ; Reserved 31 cd db 0 ; Reserved 32 ce dw 0 ;*+ Console Mode 33 cf ; This is a 16 bit system parameter that determines ; the action of certain BDOS Console I/O functions. dw bnkbuf ; Address of 128 byte buffer 35 d1 db '$' ;*+ Output delimiter character. 37 d3 ; The default output delimiter character is $, but ; you can change this value by using the BDOS Function ; 110 Get/Set Output Delimiter. db 0 ;* List Output Flag 38 d4 ; If this byte is reset to 0, console output is not ; echoed to the list device. If this byte is set ; to 1, console output is echoed to the list device. db 0 ; Scroll flag 39 d5 ; Following bits set when in system bank and: ; Bit 7 is set when function 11 is checking the status. ; Bit 6 is set when function 2 is checking input. dw scb ; Holds the address of the SCB 3a d6 dw 0080h ;+ Current DMA Address. 3c d8 ; This address can be set by BDOS Function 26. The ; CCP initializes this value to 0080h. BDOS Function ; 13, Reset Disk System also set the DMA address to ; 0080h. db 0 ; Current Disk. 3e da ; This byte contains the currently selected default ; disk number. This value ranges from 0-15 ; corresponding to drives a-p, respectively. BDOS ; Function 24, Return Current Disk, can be used to ; determine the current disk value. dw 0 ; BDOS variable 'INFO' 3f db ; This word is used by the banked portion of the ; BDOS. It is normally an entry parameter. db 0 ; FCB flag 41 dd ; If this byte = 0ffh, the word at 03fh is a valid ; FCB address. db 0 ; Same drive flag 42 de db 0 ;+ BDOS function for error 43 df db 0 ; Current User Number. 44 e0 ; This byte contains the current user number. This ; value ranges from 0-15. BDOS Function 32, ; Get/Set User Code can change or interrogate ; the currently active user number. Under ZPM3 you may ; change the currently active user number directly ; by writing to this byte. dw 0 ;+ Reserved 45 e1 ; Holds the current directory entry number. Lower ; two bits are the search return code. dw 0 ;+ Search FCB address 47 e3 ; Holds the FCB address of the last search for ; first/next operation. db 0 ;+ Search type flag 49 e5 ; 0=? in drive code search. ; 0fh=normal search. db 01 ;* BDOS Multi-Sector Count. 4a e6 ; This field is set by BDOS Function 44, Set Multi- ; Sector Count. db 0 ;* BDOS Error Mode. 4b e7 ; This field is set by BDOS Function 45, Set BDOS ; Error Mode. If this byte is set to 0ffh, the ; system returns to the current program without ; displaying any error messages. db 0 ;* Drive Search Chain 1 4c e8 db 0ffh ;* Drive Search Chain 2 4d e9 db 0ffh ;* Drive Search Chain 3 4e ea db 0ffh ;* Drive Search Chain 4 4f eb db 0 ;* Temporary File Drive 50 ec db 0 ; Error Drive. 51 ed ; This byte contains the drive number of the selected ; drive when the last physical or extended error ; occured. db 0 ; Reserved 52 ee db 0 ; Reserved 53 ef db 0 ; Media Flag 54 f0 ; This flag may be set by the BIOS to indicate that ; a drive door has opened thus signalling the BDOS ; to relog the drive if required. db 0 ; Reserved 55 f1 db 0 ; Reserved 56 f2 db 080h ; BDOS Flags. 57 f3 ; bit 7= expanded error message ; 6= single byte allocation vectors dw 0ffffh ;* Date in days in binary since 1 Jan 78 58 f4 db 0ffh ;* Hour in BCD 5a f6 db 0ffh ;* Minutes in BCD 5b f7 db 0ffh ;* Seconds in BCD 5c f8 COMBASE: dw 0 ; Common Memory Base address 5d f9 ; This value is zero for nonbanked systems, and ; nonzero for banked systems. Because the base ; address must reside on a page boundary, the ; first byte will always be 0. The second byte ; is the important one being the common memory ; base page. jp bnkdos2 ; Pointer to second entry in banked DOS 5f fb ; This entry handles the displaying of errors to ; the user dw start ; Top of user TPA 62 fe ; This word always reflects the top of TPA and ; should be the same as word at 0006h unless a ; transient changes (0006h) without knowing about ; this word