mirror of https://github.com/wwarthen/RomWBW.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
435 lines
16 KiB
435 lines
16 KiB
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 the use 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 number of lines (rows) on your
|
|
; console relative to zero. Most systems default this
|
|
; value to 23. 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.
|
|
; Note that raw input (function 6 and function 2 raw)
|
|
; will not set these bits.
|
|
|
|
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 sets 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 messages
|
|
; 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 the word at 0006h unless a
|
|
; transient changes (0006h) without knowing about
|
|
; this word
|
|
|