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
/
ENTERPRS
/
CPM
/
UTILS
/
A
/
BIOS-R62.LZH
/
SCB.TXT
< prev
next >
Wrap
Text File
|
2000-06-30
|
16KB
|
433 lines
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