Browse Source

More BPBIOS Cleanup

patch
Wayne Warthen 9 years ago
parent
commit
939a822f65
  1. 6
      Source/BPBIOS/Build.cmd
  2. 3
      Source/BPBIOS/Clean.cmd
  3. 7
      Source/BPBIOS/ZCPR33/Build.cmd
  4. 1
      Source/BPBIOS/ZCPR33/z33hdr.lib
  5. 539
      Source/BPBIOS/ZCPR33/z33hdr.lib.sav
  6. 128
      Source/BPBIOS/ZCPR33/z3basen.lib
  7. 126
      Source/BPBIOS/ZCPR33/z3baset.lib
  8. BIN
      Source/BPBIOS/ZCPR33/zcpr33.bin
  9. 6
      Source/BPBIOS/byteio.z80
  10. 140
      Source/BPBIOS/cboot-ww.z80
  11. 4
      Source/BPBIOS/dpbm-ww.lib
  12. 0
      Source/BPBIOS/dph.lib.sav
  13. 48
      Source/BPBIOS/fdc-ww.z80
  14. 26
      Source/BPBIOS/hardhb.z80
  15. 2
      Source/BPBIOS/icfg-ww.z80
  16. 163
      Source/BPBIOS/iio-ww.z80
  17. 187
      Source/BPBIOS/tim-ww.z80
  18. 14
      Source/BPBIOS/wboot-ww.z80
  19. 13
      Source/BPBIOS/z3basen.lib
  20. 5
      Source/BPBIOS/z3baset.lib
  21. BIN
      Source/BPBIOS/zcpr33n.rel
  22. BIN
      Source/BPBIOS/zcpr33t.rel
  23. 1
      Source/Build.cmd
  24. 4
      Source/BuildBP.cmd
  25. 4
      Tools/simh/Sim.cfg

6
Source/BPBIOS/Build.cmd

@ -2,16 +2,14 @@
setlocal
setlocal & cd ZCPR33 && call Build || exit /b 1 & endlocal
set PATH=%PATH%;..\..\Tools\zx;..\..\Tools\cpmtools;
set ZXBINDIR=../../tools/cpm/bin/
set ZXLIBDIR=../../tools/cpm/lib/
set ZXINCDIR=../../tools/cpm/include/
pushd ZCPR33 && call Build.cmd && popd
rem pause
call :makebp 33t
call :makebp 33tbnk
call :makebp 33n

3
Source/BPBIOS/Clean.cmd

@ -7,4 +7,7 @@ if exist *.img del *.img
if exist bp*.rel del bp*.rel
if exist *.bak del *.bak
if exist zcpr33t.rel del zcpr33t.rel
if exist zcpr33n.rel del zcpr33n.rel
setlocal & cd ZCPR33 && call Clean.cmd & endlocal

7
Source/BPBIOS/ZCPR33/Build.cmd

@ -1,5 +1,4 @@
@echo off
setlocal
set PATH=%PATH%;..\..\..\Tools\zx;..\..\..\Tools\cpmtools;
@ -10,8 +9,10 @@ set ZXINCDIR=../../../tools/cpm/include/
copy ..\z3baset.lib .
zx ZMAC -zcpr33t.z80 -/P
copy zcpr33t.rel ..
del z3baset.lib
move zcpr33t.rel ..
copy ..\z3basen.lib .
zx ZMAC -zcpr33n.z80 -/P
copy zcpr33n.rel ..
del z3basen.lib
move zcpr33n.rel ..

1
Source/BPBIOS/ZCPR33/z33hdr.lib

@ -17,7 +17,6 @@ rel equ yes ; This equate MUST be set to YES if assembling
; to a REL file, and it MUST be set to NO if
; assembling to a HEX or COM file.
base equ 0
;=============================================================================
;

539
Source/BPBIOS/ZCPR33/z33hdr.lib.sav

@ -1,539 +0,0 @@
; Z33HDR.LIB
; This is the configuration file for the ZCPR Version 3.3 command processor.
; You should read through this file and set the equates according to the
; features you want to implement. Since the command processor is limited to
; no more than 2K (2048 bytes), it is impossible to include all features.
; Basic definitions
no equ 0
yes equ not no
off equ no
on equ yes
rel equ yes ; This equate MUST be set to YES if assembling
; to a REL file, and it MUST be set to NO if
; assembling to a HEX or COM file.
;=============================================================================
;
; R E S I D E N T C O M M A N D S S E L E C T I O N
;
;=============================================================================
; Commands to include in the command processor
; The primary function of the command processor is to interpret user commands.
; Providing resident command functions is secondary. As the command processor
; has evolved to provide ever more advanced command processing functions, there
; has been correspondingly less room for resident command code in the
; processor. We recommend that you opt for most if not all of the advanced
; processing features and leave the resident command code to the resident
; command processor (RCP) module and to transient programs (COM files).
;
; There are some interrelations between a number of the possible resident
; commands. Some are so close (LIST and TYPE) that a single equate controls
; both functions. Others like DIR and ERA share code (both display file
; listings). It is efficient to select or deselect them together. The RCP
; has the room to provide more elaborate capabilities. Therefore, it makes
; sense to choose for the CPR those resident commands that are intrinsically
; simple, (e.g., NOTE) or which depend on intrinsic command processing code
; (e.g., GET, GO, JUMP).
diron equ no ; DIR command to display disk directory
eraon equ no ; ERA command for deleting files
geton equ yes ; GET command for loading a file to a general address
goon equ yes ; GO command to execute code in TPA (at 100h)
jumpon equ yes ; JUMP command to execute code at a general address
lton equ no ; LIST and TYPE commands for file printing and display
noteon equ no ; NOTE command for comments in multiple command lines
renon equ no ; REN command for changing names of files
saveon equ no ; SAVE command for saving TPA to files
;-----------------------------------------------------------------------------
; Wheel control over accessibility of commands
; To prevent unauthorized users from performing certain dangerous or sensitive
; operations on the computer, ZCPR33 provides the capability of disabling the
; operation of certain commands when the wheel byte is off. In ZCPR30, an
; attempt to use one of these wheel-protected commands when the wheel byte was
; off resulted in an error message. In ZCPR33 things work differently. In the
; same situation, the command simply disappears. In this way a transient
; program or extended command processor function can take over and deal with
; the attempt to use the command in a much more flexible way.
;
; Wheel-protected commands in ZCPR30 had extra code to intercept the function
; and disable it. In ZCPR33, wheel protection is enabled and disabled in a
; different way. To wheel-protect a command the high bit of the first
; character in the command name is set. The command table scanner in ZCPR33
; will not recognize these commands when the wheel byte is off. Since the same
; command scanner is used to scan the commands in the RCP and FCP (flow control
; package), commands there can be wheel protected in the same way. For skilled
; computer operators it is very easy to use a debugger, file patcher, or disk
; utility to enable and disable wheel protection without having to reassemble
; the CPR, RCP, or FCP.
;
; Because of the way the command scanner works, once one command is wheel
; protected, there is no further code penalty in protecting other commands.
; Therefore, we recommend protecting all possibly sensitive commands or none.
wdir equ no ; Wheel-protect DIR
wera equ yes ; " " ERA
wget equ yes ; " " GET
wgo equ yes ; " " GO
wjump equ yes ; " " JUMP
wren equ yes ; " " REN
wsave equ yes ; " " SAVE
wlt equ yes ; " " LIST and TYPE
;-----------------------------------------------------------------------------
; Command names
; The CTABLE macro, which constructs the command dispatch table, includes a
; line for each command, the first parameter of which is the name of the
; command. These names may be changed if you wish. But make sure that you
; do not use a name that is longer than the maximum allowed length. If you
; do, the name will be truncated and a nonfatal error will occur during
; assembly. DO NOT CHANGE ANY PARAMETER OTHER THAN THE COMMAND NAME. Lower
; case letters will be converted to upper case. The macro COMMAND is defined
; in Z33MAC.LIB.
cmdsize equ 4 ; Maximum length of command names
; Command table name, enable, wheel, jump_addr
; [ DO NOT CHANGE THESE PARAMETERS ]
ctable macro
command DIR, diron, wdir, dir
command ERA, eraon, wera, era
command GET, geton, wget, get
command GO, goon, wgo, go
command JUMP, jumpon, wjump, jump
command LIST, lton, wlt, list
command NOTE, noteon, false, note
command REN, renon, wren, ren
command SAVE, saveon, wsave, save
command TYPE, lton, wlt, type
endm
;-----------------------------------------------------------------------------
; DIR command options
wide equ yes ; Wide display for 80-column terminals
fence equ '|' ; Separator to use between columns of names
allchar equ 'A' ; Option letter (must be upper case) for
; showing SYS and DIR files
syschar equ 'S' ; Option letter (must be upper case) for
; showing only SYS files
slashfl equ yes ; Allow forms "DIR /S" and "DIR /A"?
whldir equ yes ; Allow display of SYS files only if wheel set
; Do not change
whldir defl whldir and diron
;-----------------------------------------------------------------------------
; ERA command options
; There are options that control whether or not and in what way the user will
; be prompted before files are erased. If ERAOK is off, then there will never
; by any prompting. If ERAOK is on and INSPFL is off, then the user will be
; prompted before all deletions. If INSPFL is also on, then the user will be
; prompted only when the prompt option character is included on the command
; line. If this character is defined to be a blank space, then any character
; will turn on prompting.
eraok equ on ; Enable prompting before files are erased
inspfl equ on ; Enable command-line inspection flag
inspch equ ' ' ; Character to use (must be upper case) to
; invoke inspection. If this is set to
; ' ' (space character), then any character
; after the files spec will turn on the
; inspect option.
;-----------------------------------------------------------------------------
; GET command options
fullget equ yes ; If yes, no memory checks are performed with
; the GET command (files can even overwrite the
; command processor or page 0).
;-----------------------------------------------------------------------------
; SAVE command options
sectch equ ' ' ; Option character (must be upper case) to
; select saving of sectors. If set to ' '
; (space), then any character will select the
; sector-save option.
bellfl equ yes ; If yes, bell will ring for SAVE and REN
; commands when the file already exists.
;-----------------------------------------------------------------------------
; TYPE command options
pagefl equ yes ; If enabled, normally page the output. If not
; enabled, page output only when paging toggle
; character is present.
pagech equ 'P' ; Option character (must be upper case) to
; toggle paging. If it is set to ' '
; (space), then any character will toggle
; the paging mode
;=============================================================================
;
; C O M M A N D P R O C E S S I N G O P T I O N S
;
;=============================================================================
; ZCPR33 has many more command processing options than did ZCPR30. These are
; controlled by the following equates.
;-----------------------------------------------------------------------------
; Environment access
; In ZCPR30 the command processor knew about its environment only at the time
; it was assembled. Therefore, all aspects of the environment were fixed.
; Loading a new ENV module might change the way a transient program would
; function (for example by changing the maximum drive and user values that
; would be accepted), but the command processor would not recognize these
; changes. ZCPR33 can be made to recognize dynamically several possible
; changes in the environment.
duenv equ yes ; If enabled, the CPR will get the values of
; the maximum drive and user to recognize from
; the environment descriptor
aduenv equ yes ; If enabled, the CPR will use the DUOK flag
; byte in the environment to determine
; whether or not to accept DU: references
inclenv equ no ; If enabled, inclusion of the DU in the
; prompt will be controlled by the DUOK flag
; The following three functions, if enabled, allow one to dynamically trade off
; buffer space between named directories, resident commands, and flow control.
; By executing a command like "LDR NEW.ENV,NEW.RCP,NEW.FCP,NEW.NDR" one can
; temporarily expand the capabilities of one module at the expense of another.
; To use these capabilities, the three buffers must be contiguous in memory.
; Since making such changes can be risky, it is recommended that it be done
; only with aliases, so that all necessary changes get made automatically and
; at the same time.
fcpenv equ yes ; If enabled, the CPR will determine the address
; of the FCP (flow command package) from the
; environment descriptor.
rcpenv equ yes ; If enabled, the CPR will determine the address
; of the RCP (resident command package) from
; the environment descriptor.
ndrenv equ yes ; If enabled, the CPR will determine the address
; of the NDR (named directory registers) from
; the environment descriptor.
;-----------------------------------------------------------------------------
; Control over types of files to load and run as transient programs.
comtyp macro ; The file type for executable files (this will
db 'COM' ; be changed only in the most unusual
endm ; situtations). This file type will also apply
; to the extended command processor.
attchk equ no ; If enabled, the command processor can be made
; to recognize as executable files only those
; with particular attributes (defined by the
; COMATT equate below).
comatt equ 0 ; 0 = system, 80h = DIR (01h will give both,
; but in that case setting ATTCHK to false will
; give the same result with less code).
;-----------------------------------------------------------------------------
; Batch processing using the submit facility. This takes up quite a bit of
; space in the command processor, and you may wish to omit it. Most of the
; type of processing that submit can do can be accomplished using either the
; the memory-based ZEX batch processor or command-line scripts (aliases).
subon equ yes ; If enabled, the command processor will
; process submit files.
subnoise equ 0 ; If 0, submit lines, like command lines
; generated by aliases, will not be echoed
; to the screen. If 1, then echoing will
; be controlled by the ENV QUIET flag. If more
; than 1, submit command lines will always
; be echoed.
subclue equ no ; If yes, use the flag returned by the DOS
; as a clue to the existence of a submit file
; (some versions of ZRDOS -- including 1.7 --
; do not return the correct value, in which
; case 'no' should be used here). The speed
; advantage to using 'yes' is probably not
; great.
sprmpt equ ']' ; CPR prompt indicating submit command
subtyp macro ; The file type for the '$$$' file used by the
db 'SUB' ; submit processor (this will very rarely be
endm ; changed)
; WARNING -- the following equate should not be changed from 'A' unless you
; know what you are doing!
subdrv equ 'A' ; Drive to use for submit file (normally this
; will be 'A', but in special cases, such as
; when there is a RAM disk, you might want to
; specify another drive)
;-----------------------------------------------------------------------------
; PATH options -- ZCPR searches for user programs along a path of directories
; specified in the path buffer. Because of the efficiency it adds, the
; minpath (minimum path) is not an option in ZCPR33 but is always in effect.
; This minimum path eliminates duplicate references that can arise in several
; ways and otherwise cause a useless search of a directory a second or third
; time.
drvprefix equ yes ; If enabled, an explicit DU: or DIR: prefix on
; a command verb will be recognized and made
; the first element of the command search path.
scancur equ no ; If enabled, the currently logged directory
; will always be added to the beginning of the
; symbolic path (we advise disabling this
; option -- you can always include '$$' in the
; path, but then you can omit it when you wish
; and you can control its position in the path,
; searching your main directories first). See
; the Z33 User Guide for special precautions
; required when SCANCUR is off.
; In order to save space in the CPR for valuable code, the minpath can be
; built in a memory buffer external to the CPR. If your symbolic path has
; no more than 10 elements, the minpath will automatically be built at the
; bottom of the external stack. Otherwise, if you want an external minpath,
; you must set the EXTMPATH symbol to yes and supply the address of the memory
; to use. The memory requirement is twice the length of the symbolic path
; (see Z3BASE.LIB or run SHOW to get this value) plus 2 if SCANCUR is enabled
; plus 2 if DRVPREFIX is enabled, plus 1 for the ending null.
extmpath equ no ; If yes, the minpath will be built in a buffer
; external to the command processor at an
; address supplied in the next definition.
extmpathadr equ 0 ; If EXPMPATH is enabled, provide the address
; of the external buffer here.
; Do not change the following code
if [ expaths le 10 ]
extmpath defl yes ; Automatic placement of minpath
extmpathadr defl extstk ; ..at bottom of external stack
endif
;-----------------------------------------------------------------------------
; Control over the acceptance and display of drive/user and named directory
; forms. With the options provided in ZCPR33 it is quite easy to provide a
; fully secure system with the DU form enabled. The DU form is often the only
; one recognized by non-ZCPR programs and is often more convenient and natural
; to use. We, therefore, recommend that both DU and DIR forms be allowed and
; displayed. Processing of DIR forms will not be carried out, obviously, if
; the named directory register (NDR) is not implemented in the system.
accptdu equ yes ; Accept DU: form in command lines
accptdir equ yes ; Accept DIR: form in command lines
dufirst equ no ; If enabled, the DU form will be checked
; before the DIR form.
incldu equ yes ; Include DU in prompt
incldir equ yes ; Include DIR in prompt
; Do not change the following
incldir defl incldir and [z3ndir ne 0]
accptdir defl accptdir and [z3ndir ne 0]
;-----------------------------------------------------------------------------
; Security matters
pwcheck equ yes ; If enabled, passwords on named directories
; will be checked for DIR forms in the command
; verb and the first two command-line tokens.
; If disabled, passwords will not be checked
; even if a directory has a password defined.
pwnoecho equ yes ; If yes, the BIOS conout routine will be
; disabled during password input so that the
; password will not be echoed to the screen.
; This does involves poking in the BIOS and
; could in rare instances cause problems.
wdu equ no ; If enabled, the DU: and DIR: forms will not
; be allowed for changing the logged directory
; unless the wheel byte is set.
wpass equ yes ; If enabled, password checking of named
; directories is bypassed when the wheel byte
; is set.
wprefix equ no ; If set, this option will effectively turn
; off DRVPREFIX when the wheel byte is off.
; Explicit drive prefixes will then be allowed
; only when the wheel byte is set. Otherwise
; they will be ignored except that ECPs will
; not be invoked if a prefix was present.
; Do not change the next lines
pwcheck defl pwcheck and [ z3ndir ne 0 ]
pwnoecho defl pwnoecho and pwcheck
;-----------------------------------------------------------------------------
; Advanced command processing options
highuser equ no ; If yes, the command processor will log into
; user numbers higher than 15 (up to 31).
; WARNING: BECAUSE CP/M USES A SINGLE BYTE AT
; ADDRESS 0004H TO KEEP BOTH DRIVE AND USER,
; PROGRAMS THAT USE THAT BYTE TO DETERMINE
; THE DEFAULT DU MAY NOT RUN PROPERLY WHEN ONE
; IS LOGGED INTO A USER NUMBER ABOVE 15.
skippath equ yes ; If yes, command verbs with an explicit DU: or
; DIR: prefix will not use the search path; if
; the command is not found in the specified
; directory, the error handler will be invoked
; immediately (no path and no ECP).
fastecp equ yes ; If yes, command verbs with leading spaces will
; be executed directly by the ECP (saves the
; time of searching the path for a COM file
; when one knows the command is for the ECP).
altspace equ yes ; If yes, the alternate character, ECPCHAR, can
; also be used to invoke ECP processing
; immediately (FASTECP must be enabled).
altonly equ no ; If ALTSPACE is on, then if ALTONLY is also
; on, the alternate character the only one that
; will invoke fast ECP processing (spaces will
; not).
ecpchar equ '/' ; Alternate (or required) character for fast ECP
; invocation.
altcolon equ yes ; If enabled, an alternate character (period
; recommended) can be used in place of a colon
; to make the CPR skip resident commands and
; add the current directory to the search path.
altchar equ '.' ; Character that serves as an alias for leading
; colon if it is the first non-blank character
; in the command.
badduecp equ yes ; If yes, pass commands that try to log into a
; bad directory to the ECP for processing; if
; set to NO, invoke the error handler
; immediately under these circumstances.
; WARNING -- do not change the following equate from 'no' unless you
; know what you are doing!
shellif equ no ; If yes, flow control processing can take
; place in shell aliases (complex command
; sequences being used as a shell). The
; penalty is that each time the shell runs,
; the entire flow control system is
; reinitialized. Flow control information
; will not persist across shell invocations.
; If SHELLIF is off, flow commands in shell
; aliases will not be recognized as FCP
; commands (they will be flushed) and,
; therefore, should not be used.
; Do not change the following
skippath defl skippath and drvprefix
;-----------------------------------------------------------------------------
; Extended command processing
; The extended command processor comes into effect when a way to process a
; command verb has still not been found after the entire search path for a
; COM file has been exhausted. The entire user command is taken as the
; command tail on the extended command processor. In ZCPR30 one could either
; have extended command processing OR error handling. In ZCPR33 one can, and
; should, have both.
rootonly equ yes ; If yes, the command processor looks for the
; ECP only in the directory specified as the
; last one in the path instead of scanning the
; entire path for the ECP.
; The following macro defines the name of the ECP. Rename your favorite
; ECP (ours is ARUNZ) to CMDRUN.COM or whatever name you put in below.
ecpname macro
db 0 ; Drive (do not change this from 0)
db 'CMDRUN ' ; Name of ECP program (exactly 8 characters)
; '--------' ; (Eight-character space marker)
endm
;-----------------------------------------------------------------------------
; Miscellaneous equates
cmdsep equ ';' ; Separator between multiple commands
; The following two equates are used only if the equates to get this
; information from the environment descriptor are not enabled.
maxusr equ 31 ; Maximum user number accessible
maxdisk equ 4 ; Maximum number of disks accessible
supres equ false ; Supresses user number in prompt for user 0
cprmpt equ '>' ; CPR prompt indicating user command
numbase equ 'H' ; Character used to designate a hexadecimal
; number in the SAVE command
curind equ '$' ; Symbol in symbolic path for current disk
; or user
comment equ ';' ; Lines beginning with this character are
; treated as comments
; Definition equates
wheel defl wera or wren or wlt or wgo or wsave or wget or wjump or wdir
path equ expath ; Definition from Z3BASE.LIB
; End of Z33HDR.LIB


128
Source/BPBIOS/ZCPR33/z3basen.lib

@ -1,128 +0,0 @@
; B/P Bios System Z3 Definition File.
; This file is adapted from the basic Z3BASE.LIB configuration file used for
; most ZCPR33 systems. It has added the new definitions for the Resident
; User Space defined in B/P Bios descriptions.
;=========================================================================
;== NOTE: The Starting Address of the User Space marks the lower ==
;== base of memory and MUST be entered. B/P Bios Utilities use ==
;== this address to locate many portions of the operating system. ==
;=========================================================================
; To change your systems definition, first sketch out the memory map in the
; comment table, then set the equates to reflect the memory map, doing any
; required calculations for element sizes and required spaces. As an
; alternative, just leave this file alone and configure everything with
; the utilities provided.
; FFE0 - FFFF 32 Bytes HBIOS Reserved
; FFB0 - FFDF 48 Bytes ZCPR3 External Stack
; FF00 - FFAF 176 Bytes Multiple Command Line Buffer
; FE00 - FEFF 256 Bytes Environment Descriptor
; Bytes 00H-7FH: Z3 Parameters
; Bytes 80H-FFH: Z3 TCAP
; FDFF 1 Byte Wheel byte
; FDF4 - FDFE 11 Bytes Path (5 elements)
; FDD0 - FDF3 36 Bytes ZCPR3 External FCB
; FD80 - FDCF 80 Bytes ZCPR3 Message Buffers
; FD00 - FD7F 128 Bytes ZCPR3 Shell Stack
; FC00 - FCFF 256 Bytes Named Directory Buffer
; FA00 - FBFF 512 Bytes Flow Command Package
; F200 - F9FF 2.0 KBytes Resident Command Package
; EC00 - F1FF 1.5 KBytes IO Package
; E900 - EBFF .75 KBytes Resident User Space
; The remainder is for the Operating System. Exact sizes vary depending
; primarily on the Number and sizes of Hard Drive Partitions, but may be:
; D100 - EBFF 5.0 KBytes B/P BIOS (unbanked version)
; C300 - D0FF 3.5 KBytes ZSDOS 1.0 BDOS
; BB00 - C2FF 2 KBytes ZCPR 3.3 Command Processor
; 0100 - BAFF ~46 KBytes Transient Program Area
; 0000 - 00FF 256 Bytes Standard CP/M Buffers
;========================================================================
FALSE EQU 0
TRUE EQU NOT FALSE
YES EQU TRUE
NO EQU FALSE
; The External Stack is placed in the very top position in memory. It is
; mandatory for B/P Bios and ZCPR 3.3.
;EXTSTK EQU 0FFD0H ; ZCPR3 External Stack
EXTSTK EQU 0FFB0H ; ZCPR3 External Stack
EXTSTKS EQU YES
; The Multiple Command Line Buffer is placed in the Top Page of Memory to
; place it above the Environment. It is mandatory for ZCPR 3.3.
Z3CL EQU 0FF00H ; ZCPR3 Command Line Buffer
;Z3CLS EQU 208-5 ; Size of Command Line Buffer-5
Z3CLS EQU 176-5 ; Size of Command Line Buffer-5
; The ZCPR3 External Environment Descriptor is mandatory B/P Bios & ZCPR 3.3.
; The Environment Descriptor MUST begin on an even Page Boundary (xx00H).
Z3ENV EQU 0FE00H ; Environment Descriptors
Z3ENVS EQU 2 ; Size of Env Descriptor in 128-Byte Blks
; The ZCPR3 Wheel Byte is mandatory for ZCPR 3.3.
Z3WHL EQU 0FDFFH ; Wheel Byte Address
Z3WHLS EQU YES
; The Path is mandatory for ZCPR 3.3.
EXPATH EQU 0FDF4H ; External Path starting Address
EXPATHS EQU 5 ; (Path Size = EXPATHS*2 + 1 = 11 bytes)
; This defines 5 2-byte Path Elements
; The ZCPR3 External FCB is mandatory for ZCPR 3.3.
EXTFCB EQU 0FDD0H ; 36-Byte ZCPR3 External FCB
EXTFCBS EQU YES
; The ZCPR3 Message Buffers are mandatory for ZCPR 3.3.
Z3MSG EQU 0FD80H ; 80-Byte ZCPR3 Message Buffer
Z3MSGS EQU YES
; Shell Stack definition. Set SHSTKS to 0 to eliminate Shell Stack
SHSTK EQU 0FD00H ; Shell Stack Starting Address
SHSTKS EQU 4 ; Number of SHSIZE-Byte Shell Stack entries
SHSIZE EQU 32 ; (Stack Size = SHSTKS * SHSIZE = 128 Bytes)
; ZCPR3 Named Directory Buffer definition. Set Z3NDIRS to 0 to eliminate
; the named directory buffer.
Z3NDIR EQU 0FC00H ; Start of Named Directory Buffer
Z3NDIRS EQU 14 ; Number of Named Directory Elements
; (NDIR Size = Z3NDIRS * 18 + 1 = 253 Bytes)
; Flow Command Package definition. Set FCPS to 0 to eliminate FCP
FCP EQU 0FA00H ; Start of Flow Command Package
FCPS EQU 4 ; (FCP Size = 128 * FCPS = 512 Bytes)
; Resident Command Processor Definition. Set RCPS to 0 to eliminate RCP
RCP EQU 0F200H ; Start of Resident Command Processor
RCPS EQU 16 ; (RCP Size = 128 * RCPS = 2 kBytes)
; IO Package definition. Set IOPS to 0 to eliminate IOP
IOP EQU 0EC00H ; Start of IO Package
IOPS DEFL 12 ; (IOP Size = 128 * IOPS = 1.5 kBytes)
;=========================================================================
; Resident User Space Definition. Set USPCS to 0 to eliminate USPC.
; The USPC Value marks the Lower Limit of Reserved Common High Memory and
; MUST BE PRESENT!
USPC EQU 0E900H ; Start of Resident User Space (MANDATORY)
USPCS EQU 6 ; (USPC Size = 128 * USPCS = 0.75 kBytes)
;--- End of Z3BASE.LIB ---


126
Source/BPBIOS/ZCPR33/z3baset.lib

@ -1,126 +0,0 @@
; B/P Bios System Z3 Definition File.
; This file is adapted from the basic Z3BASE.LIB configuration file used for
; most ZCPR33 systems. It has added the new definitions for the Resident
; User Space defined in B/P Bios descriptions.
;=========================================================================
;== NOTE: The Starting Address of the User Space marks the lower ==
;== base of memory and MUST be entered. B/P Bios Utilities use ==
;== this address to locate many portions of the operating system. ==
;=========================================================================
; To change your systems definition, first sketch out the memory map in the
; comment table, then set the equates to reflect the memory map, doing any
; required calculations for element sizes and required spaces. As an
; alternative, just leave this file alone and configure everything with
; the utilities provided.
; FE00 - FFFF 512 Bytes HBIOS Reserved
; FDFF 1 Byte Wheel byte
; FDF4 - FDFE 11 Bytes Path (5 elements)
; FDD0 - FDF3 36 Bytes ZCPR3 External FCB
; FD80 - FDCF 80 Bytes ZCPR3 Message Buffers
; FD00 - FD7F 128 Bytes ZCPR3 Shell Stack
; FC00 - FCFF 256 Bytes Named Directory Buffer
; FA00 - FBFF 512 Bytes Flow Command Package
; F200 - F9FF 2.0 KBytes Resident Command Package
; EC00 - F1FF 1.5 KBytes IO Package
; EBD0 - EBFF 48 Bytes ZCPR3 External Stack
; EB00 - EBAF 176 Bytes Multiple Command Line Buffer
; EA00 - EAFF 256 Bytes Environment Descriptor
; Bytes 00H-7FH: Z3 Parameters
; Bytes 80H-FFH: Z3 TCAP
; E700 - E9FF .75 KBytes Resident User Space
; The remainder is for the Operating System. Exact sizes vary depending
; primarily on the Number and sizes of Hard Drive Partitions, but may be:
; D300 - E6FF 5.0 KBytes B/P BIOS (unbanked version)
; C500 - D2FF 3.5 KBytes ZSDOS 1.0 BDOS
; BD00 - C4FF 2 KBytes ZCPR 3.3 Command Processor
; 0100 - BCFF ~47 KBytes Transient Program Area
; 0000 - 00FF 256 Bytes Standard CP/M Buffers
;========================================================================
FALSE EQU 0
TRUE EQU NOT FALSE
YES EQU TRUE
NO EQU FALSE
; The External Stack is placed in the very top position in memory. It is
; mandatory for B/P Bios and ZCPR 3.3.
EXTSTK EQU 0EBD0H ; ZCPR3 External Stack
EXTSTKS EQU YES
; The Multiple Command Line Buffer is placed in the Top Page of Memory to
; place it above the Environment. It is mandatory for ZCPR 3.3.
Z3CL EQU 0EB00H ; ZCPR3 Command Line Buffer
Z3CLS EQU 208-5 ; Size of Command Line Buffer-5
; The ZCPR3 External Environment Descriptor is mandatory B/P Bios & ZCPR 3.3.
; The Environment Descriptor MUST begin on an even Page Boundary (xx00H).
Z3ENV EQU 0EA00H ; Environment Descriptors
Z3ENVS EQU 2 ; Size of Env Descriptor in 128-Byte Blks
; The ZCPR3 Wheel Byte is mandatory for ZCPR 3.3.
Z3WHL EQU 0FDFFH ; Wheel Byte Address
Z3WHLS EQU YES
; The Path is mandatory for ZCPR 3.3.
EXPATH EQU 0FDF4H ; External Path starting Address
EXPATHS EQU 5 ; (Path Size = EXPATHS*2 + 1 = 11 bytes)
; This defines 5 2-byte Path Elements
; The ZCPR3 External FCB is mandatory for ZCPR 3.3.
EXTFCB EQU 0FDD0H ; 36-Byte ZCPR3 External FCB
EXTFCBS EQU YES
; The ZCPR3 Message Buffers are mandatory for ZCPR 3.3.
Z3MSG EQU 0FD80H ; 80-Byte ZCPR3 Message Buffer
Z3MSGS EQU YES
; Shell Stack definition. Set SHSTKS to 0 to eliminate Shell Stack
SHSTK EQU 0FD00H ; Shell Stack Starting Address
SHSTKS EQU 4 ; Number of SHSIZE-Byte Shell Stack entries
SHSIZE EQU 32 ; (Stack Size = SHSTKS * SHSIZE = 128 Bytes)
; ZCPR3 Named Directory Buffer definition. Set Z3NDIRS to 0 to eliminate
; the named directory buffer.
Z3NDIR EQU 0FC00H ; Start of Named Directory Buffer
Z3NDIRS EQU 14 ; Number of Named Directory Elements
; (NDIR Size = Z3NDIRS * 18 + 1 = 253 Bytes)
; Flow Command Package definition. Set FCPS to 0 to eliminate FCP
FCP EQU 0FA00H ; Start of Flow Command Package
FCPS EQU 4 ; (FCP Size = 128 * FCPS = 512 Bytes)
; Resident Command Processor Definition. Set RCPS to 0 to eliminate RCP
RCP EQU 0F200H ; Start of Resident Command Processor
RCPS EQU 16 ; (RCP Size = 128 * RCPS = 2 kBytes)
; IO Package definition. Set IOPS to 0 to eliminate IOP
IOP EQU 0EC00H ; Start of IO Package
IOPS DEFL 12 ; (IOP Size = 128 * IOPS = 1.5 kBytes)
;=========================================================================
; Resident User Space Definition. Set USPCS to 0 to eliminate USPC.
; The USPC Value marks the Lower Limit of Reserved Common High Memory and
; MUST BE PRESENT!
USPC EQU 0E700H ; Start of Resident User Space (MANDATORY)
USPCS EQU 6 ; (USPC Size = 128 * USPCS = 0.75 kBytes)
;--- End of Z3BASE.LIB ---


BIN
Source/BPBIOS/ZCPR33/zcpr33.bin

Binary file not shown.

6
Source/BPBIOS/byteio.z80

@ -130,7 +130,13 @@ PSTR: LD A,(HL) ; General purpose print 0 or Hi-bit
OR A
JR Z,PSTRX ; Exit if null found in string
LD C,A
PUSH BC
PUSH DE
PUSH HL
CALL CONOUT ; Send to console device
POP HL
POP DE
POP BC
BIT 7,C ; Test for Hi-bit terminator
JR Z,PSTR ; ..loop if Not finished
PSTRX: EX (SP),HL ; Else swap Ptr to next instr for entry HL val

140
Source/BPBIOS/cboot-ww.z80

@ -24,57 +24,10 @@
; beginning of B2RAM and DSEG.
CBOOT: DI ; Disable interrupt system
; IN0 A,(DDRA) ; Get Data Definition of Port A
; SET 4,A ; Bit 4 is Input for SCSI "Int" input
; OUT0 (DDRA),A ; and reset bits
; LD A,(HICOMM) ; Set Common Bank start to Header locn
; OUT0 (CBAR),A
; CALL FDRst ; Reset FDC Controller, Re-Initialize
; (Needed in case ROM Timed out for HD Boot)
; CALL MOTOFF ; Turn Floppy motors Off, clear timer
; XOR A ; Get a Byte of Zeros
; OUT0 (SCR),A ; and activate ASCI0/ASCI1 vs MIMIC
LD HL,(IOBYT) ; Get IOBYTE, Default Drive & User
LD (3),HL ; Set values in TPA bank
; Set BIOS Bank Numbers to the RAM base Number as set by Boot ROM. In-context
; RAM will be reflected in CBR which is base. We adjust other bank numbers
; based on configured differences, except for MaxBnk which remains as config'd.
; Since the bootable systems (MOVCPM set to YES) are not banked, the Fast Boot
; option should be OFF, and only the TPABNK will necessarily be Accurate.
; IN0 C,(CBR) ; Read Current 4k base of RAM
; RR C ; divide
; RR C ; by
; RR C ; 8 for 32k Bank base
; LD HL,TPABNK
; LD B,(HL) ; Get configured TPA Bank #
; LD (HL),C ; (Store actual)
; IF NOT MOVCPM
; DEC HL
; LD A,(HL) ; Get Any User Bank
; SUB B ; (compute difference from TPA)
; JR C,NoUsrB ; ..jump if None
; ADD A,C ; Else Compute new User Bank #
; LD (HL),A ; (save)
;NoUsrB: INC HL ; advance to System Bank #
; INC HL
; LD A,(HL) ; fetch
; SUB B ; Compute diff from System Bnk to TPA Bnk
; ADD A,C ; add new base
; LD (HL),A ; (save)
; INC HL ; Advance to RAM Drive Start Bank #
; LD A,(HL)
; SUB B ; compute difference
; ADD A,C ; Add true base
; LD (HL),A ; (save)
; ENDIF ;~Movcpm. Max Bank # Stays as configured
;
IF BANKED
LD SP,USP ; Set to User Stack in High memory
CALL HBX_INIT ; WW
@ -286,71 +239,15 @@ BMOVE:
RR L ; to give HL = CPR length in bytes
ENDIF ;~Movcpm
; ;
; ; SETUP FOR FASTWB
; ;
; ; BTTBL IS USED TO SAVE ORIGINAL CPR
; ; SARL IS USED TO RESTORE CPR
; ;
; ; 0-2: SRC ADDRESS (LLHHB)
; ; 3-5: DEST ADDRESS (LLHHB)
; ; 6-7: LEN (LLHH)
; ;
; ; SET TRANSFER LENGTH IN BTTBL AND SARL
; LD (BTTBL+6),HL ; Save length in boot block
; LD (SARL+6),HL ; and DMA WB block
; ;
; ; L=TPA BANK, H=SYS BANK
; LD HL,(TPABNK) ; Get TPA (L) and System (H) Banks
; ;
; ; CONVERT BANK:DE -> BHHLL, SAVE AS SRC IN BTTBL AND DEST IN SARL
; LD A,L ; Load TPA Bank #
; RL D ; Move MSB of Address to Carry
; ADC A,0 ; Add Carry to Bank # (in case cross banks)
; RRA ; shift for DMA Bank #
; LD (SARL+5),A ; save in Warm Boot DMA Block
; LD (BTTBL+2),A ; and initial move to bank
; RR D ; Move Bank # LSB (Carry) to MSB of Address
; LD (SARL+3),DE ; Save CPR logical address in WB DMA block
; LD (BTTBL),DE ; and initial move to bank
; ;
; ; CONVERT BANK:$0100 -> BHHLL, SAVE AS DEST IN BTTBL AND SRC IN SARL
; LD A,H ; Load System Bank #
; LD HL,100H ; Load Bank Address of CPR Image Start
; RL H ; get rid of MSB
; ; Since we know the MSB=0, bypass adc 0
; RRA ; Shift for DMA Bank #
; LD (BTTBL+5),A ; save as initial dest bank byte
; LD (SARL+2),A ; and DMA Source Bank byte
; RR H ; Rotate Carry (Bank LSB) to MSB of Address
; LD (SARL),HL ; Save Source Addr in WB DMA block
; LD (BTTBL+3),HL ; and initial move block
;
; SETUP FOR FASTWB
;
LD (CPLEN),HL ; Save command processor length
LD (CPADR),DE ; Save command processor address (in TPA)
ENDIF ;fastwb
; IF BANKED
; ;
; ; SETUP CPYVEC TO COPY IMAGE OF TPA BANK PAGE ZERO TO SYS BANK PAGE ZERO
; LD HL,0000 ; If we are banked, set to copy Page 0
; LD A,(TPABNK) ; of TPA to System Bank
; OR A
; RRA ; Shift TPA Bank #
; LD (CPYVEC+2),A ; store in DMA Block
; RR H ; adjust Address by Bank LSB (Carry)
; LD (CPYVEC),HL ; and store
; LD H,0
; LD A,(SYSBNK)
; RRA ; Shift System Bank #
; LD (CPYVEC+5),A ; store in DMA Block
; RR H ; adjust Address by Bank LSB (Carry)
; LD (CPYVEC+3),HL ; and store
; LD HL,40H ; Set length of move
; LD (CPYVEC+6),HL ; and store in DMA Block
; ENDIF ;banked
LD (STKSAV),SP ; Save entry stack since we alter it here
LD A,(BLOCKE-BLOCK)/6
LD SP,BLOCK
@ -381,11 +278,6 @@ BLKMV: POP BC ; And number of bytes to move
LD (BIOSJT+1),HL
ENDIF ;haviop
; LD HL,INTTBL ; Set the Interrupt Vector
; LD A,H ; first the page
; LD I,A ; to CPU Register
; OUT0 (IL),L ; then the segment addr
IF BANKED
CALL JDVINI ; Call directly because we are in High Stack
ELSE
@ -514,25 +406,25 @@ PTHPTR: DEFW EXPATH
IOPPTR: DEFW IOP
ENDIF
IF HARDDSK AND HDDMA AND (NOT IDE)
DEFW DMALEN
DEFW DMADAT
DEFW DMATBL
ENDIF
; IF HARDDSK AND HDDMA AND (NOT IDE)
; DEFW DMALEN
; DEFW DMADAT
; DEFW DMATBL
; ENDIF
BLOCKE EQU $
;.....
; Initial HD DMA Control Block data
IF HARDDSK AND HDDMA
DMADAT: DEFW HSTBUF ; Physical sector address
DEFB 00 ; BNK2 SHR 1 if banked, BNK0 SHR 1 If not
DEFW DMAACK ; Dack port address
DEFB 0
DEFW 400H ; Number of bytes to transfer (1Sct+slop=2Scts)
DMALEN EQU $-DMADAT
ENDIF
; IF HARDDSK AND HDDMA
;DMADAT: DEFW HSTBUF ; Physical sector address
; DEFB 00 ; BNK2 SHR 1 if banked, BNK0 SHR 1 If not
; DEFW DMAACK ; Dack port address
; DEFB 0
; DEFW 400H ; Number of bytes to transfer (1Sct+slop=2Scts)
;DMALEN EQU $-DMADAT
; ENDIF
CMDSET: DEFW Z3CL+4 ; Point to first character in command buffer
DEFB Z3CLS ; Command buffer size

4
Source/BPBIOS/dpbm-ww.lib

@ -32,8 +32,8 @@ DPBRAM: DEFW 32 ; Sectors/Track
DEFB 0FH ; Block Mask
DEFB 1 ; Extent Mask
DEFW MSIZ-1 ; Disk Size-1 256 kB 512 kB 1024 kB
DEFW 128 - 1 ; Dir Max -or- 64 128 256
DEFB 0C0H, 00 ; Alloc 0, 1 80H,0 0C0H,0 0F0H,0
DEFW 256 - 1 ; Dir Max -or- 64 128 256
DEFB 0F0H, 00 ; Alloc 0, 1 80H,0 0C0H,0 0F0H,0
DEFW 0000 ; Check Size
DEFW 0000 ; Trk Offset from beginning of Ram Bank base

0
Source/BPBIOS/dph.sav → Source/BPBIOS/dph.lib.sav

48
Source/BPBIOS/fdc-ww.z80

@ -166,9 +166,9 @@ READID: CALL PANIC
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
RETDST: CALL PANIC
LD HL,ST0 ; Point to Status Byte (Reg 3 contents)
LD A,(HL) ; fetch it
LD BC,765 ; load Controller ID
;LD HL,ST0 ; Point to Status Byte (Reg 3 contents)
;LD A,(HL) ; fetch it
;LD BC,765 ; load Controller ID
RET
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@ -187,7 +187,7 @@ RETDST: CALL PANIC
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
FMTTRK: CALL PANIC
XOR A
;XOR A
RET
;=============================================================================
@ -198,8 +198,8 @@ FMTTRK: CALL PANIC
; Uses : AF,BC
FDCMD: CALL PANIC
LD A,(ST0) ; Else get first byte of Status
AND 0C0H ; check for Normal termination
;LD A,(ST0) ; Else get first byte of Status
;AND 0C0H ; check for Normal termination
RET ; ..return w/Error Flags set
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@ -212,7 +212,7 @@ FDCMD: CALL PANIC
; Return: Head Delay bit set in Command in A if needed
; Uses : None. All Registers Preserved/Not Affected
;MOTOR: CALL PANIC
MOTOR: CALL PANIC
XOR A
RET
@ -231,7 +231,7 @@ FDCMD: CALL PANIC
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
FHDRW: CALL PANIC
XOR A
;XOR A
RET
@ -271,35 +271,35 @@ HDR: DEFS 1 ; Head (B2), Drive (B0,1) (** Global **)
; FDC Operation Result Storage Area
ST0: DEFS 1 ; Status Byte 0
ST1: DEFS 1 ; Status Byte 1 (can also be PCN)
ST2: DEFS 1 ; Status Byte 2
;ST0: DEFS 1 ; Status Byte 0
;ST1: DEFS 1 ; Status Byte 1 (can also be PCN)
;ST2: DEFS 1 ; Status Byte 2
RC: DEFS 1 ; Track # (** Global **)
RH: DEFS 1 ; Head # (0/1)
;RH: DEFS 1 ; Head # (0/1)
RR: DEFS 1 ; Sector # (** Global **)
RN: DEFS 1 ; Sector Size (** Global **)
;-->>> Do NOT re-order the following two bytes !! <<<--
MTM: DEFS 1 ; Floppy Time down-counter
MOTIM: DEFS 1 ; Motor On Time Counter
;MTM: DEFS 1 ; Floppy Time down-counter
;MOTIM: DEFS 1 ; Motor On Time Counter
; DISK Subsystem Variable Storage
FDMOT: DEFS 1 ; Motor on required flag
;FDMOT: DEFS 1 ; Motor on required flag
RDOP: DEFS 1 ; Read/write flag
RETRYS: DEFS 1 ; Number of times to try Opns
RWRTRY: DEFS 1 ; Number of read/write tries
DRVSPD: DEFS 1 ; Drive Speed
DRVSIZ: DEFS 1 ; Drive Size
;RETRYS: DEFS 1 ; Number of times to try Opns
;RWRTRY: DEFS 1 ; Number of read/write tries
;DRVSPD: DEFS 1 ; Drive Speed
;DRVSIZ: DEFS 1 ; Drive Size
STEP2: DEFS 1 ; <> 0 for Double Step (** Global **)
MODE: DEFS 1 ; Bit 6 = 1 if MFM, 0 = FM
ACTIVE: DEFS 1 ; Current bits written to Dev Contr Reg (DCR)
DLYCNT: DEFS 1 ; Delay value reading Main Status Reg
FSPT: DEFS 1 ; Format Sectors/Track value
;MODE: DEFS 1 ; Bit 6 = 1 if MFM, 0 = FM
;ACTIVE: DEFS 1 ; Current bits written to Dev Contr Reg (DCR)
;DLYCNT: DEFS 1 ; Delay value reading Main Status Reg
;FSPT: DEFS 1 ; Format Sectors/Track value
TSBSCF: DEFS 1 ; 0=Hd always 0 (TSBSC) (** Global **)
TTRK: DEFS 1 ; Storage for Track (** Global **)
TRKARY: DEFS 4 ; Track storage locations for four drives
;TRKARY: DEFS 4 ; Track storage locations for four drives
;=========================== End of FDC-DX ==============================

26
Source/BPBIOS/hardhb.z80

@ -38,8 +38,7 @@
; Uses : A,HL
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
HDVALS: LD (DATADR),DE ; Save the Users Data Area
LD A,CMDSIZ
HDVALS: CALL PANIC ; NOT IMPLEMENTED!!!!
RET
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@ -49,8 +48,7 @@ HDVALS: LD (DATADR),DE ; Save the Users Data Area
; Uses : AF
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
HDSLCT: AND 01H ; Strip any garbage
LD (hdUnit),A ; save in Command Block
HDSLCT: CALL PANIC ; NOT IMPLEMENTED!!!!
RET
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@ -120,26 +118,6 @@ HDREAD:
DSEG
ENDIF
HRTrys: DEFS 1 ; Retry counter storage
hdUnit: DEFS 1 ; IDE Drive (0 = Master, 1 = Slave)
hdTrks: DEFS 2 ; Number of Tracks on IDE Drive
hdHds: DEFS 1 ; Number of Heads on IDE Drive
hdSPT: DEFS 1 ; Number of Sectors-Per-Track on IDE Drive
; IDE Command Block for User Direct Driver Access
hdComd: DEFS 1 ; Command Byte
hdBMap: DEFS 1 ; Bit Map (B6..0) of Following Bytes to Set
hdHead: DEFS 1 ; Head Number/Number of Heads in B3..0
hdTrkH: DEFS 1 ; Hi-Track (Cylinder) Byte
hdTrkL: DEFS 1 ; Lo-Track (Cylinder) Byte
hdSec: DEFS 1 ; Sector Number
hdSCnt: DEFS 1 ; Sector Count
hdErr: DEFS 1 ; Error Reg Value
hdDigO: DEFS 1 ; Digital Output Reg Value
CMDSIZ EQU $-hdComd ; Size of Command Block
DATADR: DEFS 2 ; Pointer to User Buffer Space (user bank)
;======================= End of HARDIDE ===========================

2
Source/BPBIOS/icfg-ww.z80

@ -113,7 +113,7 @@ MONTIM: DEFB 100 ; Motor On Time (1 to 255) in tenths-of-seconds
SPINUP: DEFB 8 ; Spinup delay (1 to 255) in tenths-of-seconds
MXRTRY: DEFB 4 ; Maximum Number of retries on Floppy Opns
IVCT: DEFW INTTBL ; Pointer to interrupt vectors
IVCT: DEFW 0 ; Pointer to interrupt vectors
;-------- Physical Hard Drive Configuration Information ----------
; Hard Disk data begins w/Controller Type, followed by data for 3 drives.

163
Source/BPBIOS/iio-ww.z80

@ -2,26 +2,6 @@
; Byte I/O Routines *** Hardware Specific ***
; - D-X Designs Pty Ltd P112 - *************************
;
; Several serial and parallel options exist on the P112, with two serial
; ports available at RS-232 signalling levels. The primary port defined here
; as COM1 uses SCC Channel A of the Z80182. A 16550-compatible serial port
; on the SMC FDC37C665 is used as COM2. Three other serial ports (the two
; ACSI ports in the Z180 core, and SCC Channel B) are available at TTL
; voltage levels on a single header and may be defined as COM3-5 if the pins
; from the Z182 are not otherwise used.
; This code supports the additional serial channels if the MORDEV equate
; is set to YES. If any of the three additional serial ports are defined
; (ESCC_B, ASCI_0, ASCI_1), then the System Configuration Register is set to
; Zero activating the additional signals in the conditions specified herein
; as activated by options in DEF-DX.LIB.
; A full Parallel port on the SMC FDC37C655 (in Normal Centronics mode) is
; used as the primary List (Printer) Device.
;
; NOTE: At the present time, it appears that port 0D9H (ENH182) cannot be set
; so ESCC operation at 24 MHz will occur at the full clock rate instead
; of being divided by Two as specified in Zilog documentation. Code
; managing ENH182 is commented out with ";;--" markers (HFB).
;
; 1.2 - 28 Aug 01 - Final scrub for GPL release. HFB
; 1.1a- 11 May 97 - Cleaned code, fixed added port accesses. HFB
; 1.1 - 25 Jan 97 - Revised ESCC Baud rate calcs, added COM3-5. HFB
@ -30,24 +10,13 @@
; Place constants for Expansions here
CSEG
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; Byte Device Control Tables
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
DEVCFG:
; The Clock Rate for the SCC channels on the Z80182 is based on a divider
; constant loaded in extended registers, the Processor Crystal frequency,
; and the setting of the divider in the SCC Register (1FH).
;
; NOTE: Divisor values are computed based on a compromise between the Crystal
; rates considered "standard" (6.144, 9.216, 12.288 MHz, etc) and the
; 16.000 MHz initially placed on the P112. Higher data rates (38.4 kbps
; and higher) may be out of tolerance, particularly at low CPU speeds.
;
; Clock rates for the serial port on the SMC 37C655 are based on a software
; programmable divider from the 24 MHz crystal driving the chip.
COM1: DEFB 'COM1' ; 4-Char ID
DEFB 11101011B ; Baud Rate
; ||||++++--- Baud Rate setting (19.2 kbps)
@ -121,20 +90,13 @@ DEVTBL: LD HL,DEVCFG ; BYTE device table
; COM1 Drivers
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
IF HBIOS
; Uses HBIOS
;.....
; COM1 Input Status Test
COM1IS:
PUSH BC
PUSH DE
PUSH HL
LD BC,0200H + HB_IODEV ; Func=$02 (IS), Device/Unit=HB_IODEV
CALL HBX_INVOKE
POP HL
POP DE
POP BC
RET
;.....
@ -142,130 +104,67 @@ COM1IS:
; Remain in Loop until Char ready, then Return Char in A
COM1IN:
PUSH BC
PUSH DE
PUSH HL
LD BC,0000H + HB_IODEV ; Func=$00 (IN), Device/Unit=HB_IODEV
CALL HBX_INVOKE
LD A,E
POP HL
POP DE
POP BC
RET
;.....
; COM1 Output Status Test
COM1OS:
PUSH BC
PUSH DE
PUSH HL
LD BC,0300H + HB_IODEV ; Func=$03 (OS), Device/Unit=HB_IODEV
CALL HBX_INVOKE
POP HL
POP DE
POP BC
RET
;.....
; COM1 Output Routine (Byte to Send in C)
COM1OT:
PUSH BC
PUSH DE
PUSH HL
LD E,C ; Character to E
LD BC,0100H + HB_IODEV ; Func=$01 (OT), Device/Unit=HB_IODEV
CALL HBX_INVOKE
POP HL
POP DE
POP BC
RET
ELSE
;.....
; COM1 Input Status Test
COM1IS: IN A,(_LSR) ; Input Status Reg Byte
RRA ; Rcv Rdy Bit[0] -> Carry
SBC A,A ; A=00 if Not Ready, FF if Char received
RET
;.....
; COM1 Input Routine
COM1IN: CALL COM1IS ; Char Ready?
JR Z,COM1IN ; ..loop if Not
IN A,(_RBR) ; Else Read Receive Buffer
LD C,A ; Save byte
LD A,(COM1+6) ; .get mask
AND C ; ..apply it
RET
;.....
; COM1 Output Status Test
COM1OS:
IN A,(_LSR) ; Read Status Reg
AND 20H ; Mask Bit of interest
RET Z ; ..return if nothing valid
OR 0FFH ; Else set flags for Ready
RET
;.....
; COM1 Output Routine
COM1OT: CALL COM1OS ; Test if ready
JR Z,COM1OT ; ..loop if not
LD A,(COM1+7) ; Get output mask
AND C ; apply
OUT (_THR),A ; and send char to Xmt Holding Reg
RET
ENDIF
PAGE
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; COM2 Drivers
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; Uses generic 16550 UART
; Uses HBIOS
;.....
; COM2 Input Status Test
COM2IS: IN A,(_LSR) ; Input Status Reg Byte
RRA ; Rcv Rdy Bit[0] -> Carry
SBC A,A ; A=00 if Not Ready, FF if Char received
COM2IS:
LD BC,0200H + HB_IODEV + 1 ; Func=$02 (IS), Device/Unit=HB_IODEV
CALL HBX_INVOKE
RET
;.....
; COM2 Input Routine
; Remain in Loop until Char ready, then Return Char in A
COM2IN: CALL COM2IS ; Char Ready?
JR Z,COM2IN ; ..loop if Not
IN A,(_RBR) ; Else Read Receive Buffer
LD C,A ; Save byte
LD A,(COM2+6) ; .get mask
AND C ; ..apply it
COM2IN:
LD BC,0000H + HB_IODEV + 1 ; Func=$00 (IN), Device/Unit=HB_IODEV
CALL HBX_INVOKE
LD A,E
RET
;.....
; COM2 Output Status Test
COM2OS:
IN A,(_LSR) ; Read Status Reg
SOSTV: AND 20H ; Mask Bit of interest
RETST: RET Z ; ..return if nothing valid
ISTRUE: OR 0FFH ; Else set flags for Ready
LD BC,0300H + HB_IODEV + 1 ; Func=$03 (OS), Device/Unit=HB_IODEV
CALL HBX_INVOKE
RET
;.....
; COM2 Output Routine
; COM2 Output Routine (Byte to Send in C)
COM2OT: CALL COM2OS ; Test if ready
JR Z,COM2OT ; ..loop if not
LD A,(COM2+7) ; Get output mask
AND C ; apply
OUT (_THR),A ; and send char to Xmt Holding Reg
COM2OT:
LD E,C ; Character to E
LD BC,0100H + HB_IODEV + 1 ; Func=$01 (OT), Device/Unit=HB_IODEV
CALL HBX_INVOKE
RET
PAGE
@ -294,28 +193,12 @@ PIO1OS: JP ISTRUE ; Not implemented
PIO1OT: JP ISFALSE ; Not implemented
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;:: I n t e r r u p t T a b l e ::
;:: Helper Functions ::
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; The Z80182 Interrupt Vector table is placed here on a 32-byte
; boundary for internal peripherals.
DEFS 32-[$-BIOSJT AND 31] ; Align
INTTBL:
DEFW BADINT ; FDC Controller w/Ints (FDCINT if Real Ints)
DEFW BADINT ; Parallel output port (INTPIO if Real Ints)
DEFW TIMER ; Timer0
DEFW BADINT ; Timer1
DEFW BADINT ; DMA Channel 0
DEFW BADINT ; DMA Channel 1
DEFW BADINT ; Clocked Serial IO
DEFW BADINT ; ASCI 0 if Not Interrupt/Mordev
DEFW BADINT ; ASCI 1 if Not Interrupt/Mordev
; Error trap for unimplemented Interrupts
BADINT: CALL PRINT
DEFC CR,LF,'Bad Int.'
JP WBOOT
ISTRUE: OR 0FFH ; Else set flags for Ready
RET
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;:: D e v i c e I n i t i a l i z a t i o n ::

187
Source/BPBIOS/tim-ww.z80

@ -28,132 +28,8 @@
CSEG
; Come here every 50 milliseconds from Programmable Reload Timer 0
TIMER: DI ; Don't Interrupt from here
LD (TIMSTK),SP ; Save entry Stack Pointer
LD SP,TIMSTK ; ..set up Local Interrupt Stack
PUSH HL
PUSH AF ; Save the registers
IN0 A,(TCR)
IN0 A,(TMDR0L)
IN0 A,(TMDR0H) ; Clear the interrupt
LD HL,FLAG50 ; Point to 50 mS Flag
LD A,(HL) ; fetch
XOR 01H ; and toggle LSB
LD (HL),A ; Re-save
JR NZ,TDONE ; ..exit if Odd 50 mS Tick
LD HL,DCNTR ; Adjust User GP Down-Counter
DEC (HL)
LD HL,MTM ; Adjust Bios GP Down-Counter
DEC (HL)
INC HL ; Point to Motor On-timer (MOTIM)
LD A,(HL)
OR A ; Already Timed Out?
JR Z,TIMER0 ; ..jump if So
DEC (HL) ; Else count down
CALL Z,MOTOFF ; turning Motors Off if timed out
TIMER0:
; Adjust the Interrupt-driven Real Clock (if no Real Time Clock exists).
; This "Clock" maintains Date and Time in a DateStamper(C) compatible
; string per ZSDOS specifications.
IF CLOCK AND [NOT DS1202]
LD HL,TENTHS ; 100ms counter
INC (HL) ; Bump Tenths-of-Seconds
LD A,(HL) ; get the value
SUB 10 ; Subtract limit value (in decimal times 2)
JR NZ,TDONE ; jump to exit if no rollover
LD (HL),A ; Else save a zero
DEC HL ; back down time string
LD A,(HL) ; Get Seconds
INC A ; bump
DAA ; in BCD
LD (HL),A ; and save
SUB 60H ; Subtract limit value
JR NZ,TDONE ; ..jump to exit if no rollover
LD (HL),A ; Else save a zero
DEC HL ; back down time string
LD A,(HL) ; Get Minutes
INC A ; bump
DAA ; in BCD
LD (HL),A ; and save
SUB 60H ; Subtract limit value
JR NZ,TDONE ; ..jump to exit if no rollover
LD (HL),A ; Else save a zero
DEC HL ; back down time string
LD A,(HL) ; Get Hours
INC A ; bump
DAA ; in BCD
LD (HL),A ; and save
SUB 24H ; Subtract limit value
JR NZ,TDONE ; ..jump to exit if no rollover
LD (HL),A ; Else save a zero
DEC HL ; back down time string
LD A,(HL) ; Get Day
INC A ; bump
DAA ; in BCD
LD (HL),A ; and save
PUSH DE ; Save regs
PUSH AF
EX DE,HL
LD HL,DPM-1 ; Point to days per month table indexed base 1
DEC DE ; back up to Months byte
LD A,(DE)
INC DE ; move ptr back
CP 10 ; >Sept?
JR C,TIMER1 ; ..jump if Not
SUB 6 ; Else convert BCD to binary
TIMER1: CALL ADDAHL ; Offset into table based on Month
POP AF ; Get current day count
CP (HL) ; Time for new month?
EX DE,HL ; (put regs back)
POP DE
JR C,TDONE ; ..exit here if not time
LD (HL),1 ; Else start out on first of month
DEC HL ; back down to month
LD A,(HL) ; Get month
INC A ; Bump
DAA ; in BCD
LD (HL),A ; and save
SUB 13H ; Time for new year?
JR C,TDONE ; ..exit if not
LD (HL),1 ; Else start at month 1 (Jan)
DEC HL ; back up to Years byte
LD A,(HL) ; Get Year
INC A ; bump
DAA ; in BCD
LD (HL),A ; and save
SUB 99H ; Time for next century?
JR NZ,TDONE ; ..exit if not
LD (HL),A ; Else save 0 year
ENDIF ;Clock & Not DS1202
TDONE: POP AF
POP HL ; Restore registers
LD SP,(TIMSTK) ; and Stack Pointer
; EI ; allow Ints again
RET
IF CLOCK AND [NOT DS1202] ; Table of Days-per-Month
DPM: DEFB 31H+1, 28H+1, 31H+1 ; January, February, March
DEFB 30H+1, 31H+1, 30H+1 ; April, May, June
DEFB 31H+1, 31H+1, 30H+1 ; July, August, September
DEFB 31H+1, 30H+1, 31H+1 ; October, November, December
ENDIF ;Clock & Not Ds1202
TIMER:
RET ; NOT IMPLEMENTED FOR HBIOS
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; TIME - Set or Return the time string as defined for ZSDOS. If Reading,
@ -177,7 +53,7 @@ DPM: DEFB 31H+1, 28H+1, 31H+1 ; January, February, March
; YR MO DA HH MM SS TT
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
IF CLOCK AND DS1202
IF CLOCK
IF SIMHCLK
SIMHPORT EQU 0FEH
@ -258,66 +134,23 @@ WRCLK:
ENDIF ; HBCLK
ENDIF ;Clock & Ds1202
JP ISTRUE ; Handle fall thru if no clock driver
IF HBCLK
TIMBUF DEFS 6
ENDIF
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
IF CLOCK AND [NOT DS1202] ; Not Dallas, make Intrpt Code
TIME: LD A,C ; Get Clock Operation Flag
LD BC,5 ; and set up for ZSDOS Read/Write
LD HL,YEAR ; Pointing to Clock String
OR A ; Is it a Read?
JR Z,TIMES ; ..jump it so
EX DE,HL ; Else swap pointers for write
TIMES: DI ; disable Interrupts
LDIR ; and move 5 bytes of 6 bytes (.1 Sec = 7)
LD C,(HL) ; Get the Seconds byte
INC HL ; bump to 1/10th Seconds
LD H,(HL) ; and Get
; EI ; Re-enable Interrupts
EX DE,HL ; Swap pointers
LD E,(HL) ; Preserve original Sec field contents in E
LD (HL),C ; and store the Seconds byte (.1 Sec in D)
LD BC,DCNTR ; Get Address of User Down-Counter
LD A,01 ; Set Ok exit value of 1
RET
ENDIF ;Clock & Not Ds1202
IF NOT CLOCK ; If No Clock..
XOR A ; Set Error Return
RET ; and exit
ELSE
DSEG
; Real Time Clock Buffer
IF NOT DS1202 ; Don't need this if D-X Designs P112
YEAR: DEFS 1 ; Year - packed BCD
DEFS 1 ; Month - packed BCD
DEFS 1 ; Day - packed BCD
DEFS 1 ; Hour - packed BCD
DEFS 1 ; Minute - packed BCD
DEFS 1 ; Seconds - packed BCD
TENTHS: DEFS 1 ; Tenths of Seconds - Binary (Int, else..)
ENDIF
ENDIF ; Clock
;.....
; Save some space in the Common RAM Area for a local stack
DSEG
DCNTR: DEFS 1 ; User 100 mS General-Purpose Down-Counter
FLAG50: DEFS 1 ; Flag for dividing 50mS to 100mS ticks
DEFS 12 ; We use 6 levels of stack (worst case)
TIMSTK: DEFS 2 ; Store the entry Stack pointer here
IF HBCLK
TIMBUF DEFS 6
ENDIF
CSEG ; End up by restoring CSEG
;=========================== END of TIM-DX ==================================


14
Source/BPBIOS/wboot-ww.z80

@ -152,20 +152,6 @@ GOZSYS: LD BC,80H ; Default DMA address is 80H
JP (HL) ; Go to Z-System for further processing
;.....
; Common DMA move sequence placed here in CSEG for Common access
; Enter with HL pointing to a DMA definition block
IF [BANKED OR FASTWB OR RAMDSK]
DMAMOV: LD BC,8*256+SAR0L ; Send 8 bytes to Ports SAR0L
OTIMR
LD A,00000010B ; Set DMA Mode control to Burst Mode
OUT0 (DMODE),A
LD A,40H ; Enable DMA0
OUT0 (DSTAT),A ; ..and move the block
RET
ENDIF
IF [Z3 AND HAVIOP]
; Aux Jump Table so IOP's can find routines. After Cold Boot, the
; address of this table is placed in BIOSJT+1.

13
Source/BPBIOS/z3basen.lib

@ -34,10 +34,10 @@
; The remainder is for the Operating System. Exact sizes vary depending
; primarily on the Number and sizes of Hard Drive Partitions, but may be:
; D100 - EBFF 5.0 KBytes B/P BIOS (unbanked version)
; C300 - D0FF 3.5 KBytes ZSDOS 1.0 BDOS
; BB00 - C2FF 2 KBytes ZCPR 3.3 Command Processor
; 0100 - BAFF ~46 KBytes Transient Program Area
; CE00 - E8FF 5.0 KBytes B/P BIOS (unbanked version)
; C000 - CDFF 3.5 KBytes ZSDOS 1.0 BDOS
; B800 - BFFF 2 KBytes ZCPR 3.3 Command Processor
; 0100 - B7FF ~46 KBytes Transient Program Area
; 0000 - 00FF 256 Bytes Standard CP/M Buffers
;========================================================================
@ -47,6 +47,10 @@ TRUE EQU NOT FALSE
YES EQU TRUE
NO EQU FALSE
BASE EQU 0
CCP EQU 0C000H ; ZCPR3 COMMAND PROCESSOR
; The External Stack is placed in the very top position in memory. It is
; mandatory for B/P Bios and ZCPR 3.3.
@ -125,4 +129,3 @@ USPC EQU 0E900H ; Start of Resident User Space (MANDATORY)
USPCS EQU 6 ; (USPC Size = 128 * USPCS = 0.75 kBytes)
;--- End of Z3BASE.LIB ---


5
Source/BPBIOS/z3baset.lib

@ -47,6 +47,10 @@ TRUE EQU NOT FALSE
YES EQU TRUE
NO EQU FALSE
BASE EQU 0
CCP EQU 0BD00H ; ZCPR3 COMMAND PROCESSOR
; The External Stack is placed in the very top position in memory. It is
; mandatory for B/P Bios and ZCPR 3.3.
@ -123,4 +127,3 @@ USPC EQU 0E700H ; Start of Resident User Space (MANDATORY)
USPCS EQU 6 ; (USPC Size = 128 * USPCS = 0.75 kBytes)
;--- End of Z3BASE.LIB ---


BIN
Source/BPBIOS/zcpr33n.rel

Binary file not shown.

BIN
Source/BPBIOS/zcpr33t.rel

Binary file not shown.

1
Source/Build.cmd

@ -5,4 +5,5 @@ setlocal & call BuildDoc || exit /b 1 & endlocal
setlocal & call BuildHardware || exit /b 1 & endlocal
setlocal & call BuildImages || exit /b 1 & endlocal
setlocal & call BuildShared || exit /b 1 & endlocal
setlocal & call BuildBP || exit /b 1 & endlocal
setlocal & call BuildROM %* || exit /b 1 & endlocal

4
Source/BuildBP.cmd

@ -0,0 +1,4 @@
@echo off
setlocal
setlocal & cd BPBIOS && call Build || exit /b 1 & endlocal

4
Tools/simh/Sim.cfg

@ -23,8 +23,8 @@ attach n8vem0 %1
; hard disks
;set hdsk debug=read;write;verbose
attach hdsk0 Output\hd0.img
attach hdsk1 Output\hd1.img
attach hdsk0 ..\..\Binary\hd0.img
attach hdsk1 ..\..\Binary\hd1.img
set hdsk0 format=HDSK
set hdsk1 format=HDSK
set hdsk0 geom=T:520/N:256/S:512

Loading…
Cancel
Save