forked from MirrorRepos/RomWBW
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.
599 lines
18 KiB
599 lines
18 KiB
;*****************************************************************************
|
|
; BP-BIOS. Banked, Portable BIOS.
|
|
; Copyright (c) 1989-93 by Cameron W. Cotrill and Harold F. Bower
|
|
;
|
|
; This program is free software; you can redistribute it and/or modify
|
|
; it under the terms of the GNU General Public License as published by
|
|
; the Free Software Foundation; either version 2 of the License, or (at
|
|
; your option) any later version.
|
|
;
|
|
; This program is distributed in the hope that it will be useful, but
|
|
; WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
; General Public License for more details.
|
|
;
|
|
; You should have received a copy of the GNU General Public License
|
|
; along with this program; if not, write to the Free Software
|
|
; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
;
|
|
;----------------------------------------------------------------------------
|
|
; This BIOS is broken into modules that allow it to be ported across a
|
|
; wide variety of Z80 compatible systems. All hardware specific drivers
|
|
; are isolated to separate modules. All hardware independent modules (such
|
|
; as deblocking and IO redirection) are similarly broken out.
|
|
;
|
|
; The BP BIOS supports IOBYTE, but in a unique manner. Four physical devices
|
|
; are defined - COM1, COM2, PIO, and NULL. These are assigned to the CON,
|
|
; AUXIN, AUXOUT, and LST logical devices by the I/O byte. The NULL device is
|
|
; a bit bucket for output, and returns nulls for input.
|
|
;
|
|
; IOBYTE DESCRIPTION: LIST AUXOUT AUXIN CON
|
|
; D7->D0 XX XX XX XX
|
|
;
|
|
; XX: 00=COM1 01=COM2 10=PIO 11=NULL
|
|
;
|
|
;+++++++++++++++++ D-X Designs Pty Ltd P112 Version ++++++++++++++++++
|
|
;
|
|
; This configuration of the B/P Bios is for Dave Brooks' Project 112 Single
|
|
; board computer. Multifunction chips on the board provide the services
|
|
; needed by a CP/M BIOS. The primary chips and the functions provided are:
|
|
;
|
|
; Zilog Z80182 Z180 Core CPU, MMU, DMA
|
|
; ESCC #1 COM1 Serial Port w/handshake signals, RS-232
|
|
; ESCC #2 (available on header, coded as expansion)
|
|
; ASCI0, ASCI1 (Serial async, available on header, expansion)
|
|
; CTC1 Optional 'heartbeat' clock, GP timer
|
|
;
|
|
; SMC FDC37C665 Enhanced 765-derivative Floppy Disk Controller
|
|
; COM2 - 16550-compatible Serial, RS-232
|
|
; PAR1 - Centronics Parallel port (Printer)
|
|
;
|
|
; Dallas DS-1202 Primary Realtime clock
|
|
; Non-volatile battery-backed RAM (config data)
|
|
;
|
|
; 28F256 Flash ROM Boot code, device initialization
|
|
; (onboard programmable)
|
|
; 32/128/512 KB Static RAM
|
|
;
|
|
; Ver Date Revision Description
|
|
; --- --------- ------------------------
|
|
; 1.3 28 Aug 01 - Scrubbed for GPL Release. HFB
|
|
; 1.2 - 30 Aug 97 - Expanded SCSI CDB length to 12 bytes for CDROM. HFB
|
|
; 1.1 - 11 May 97 - Added IDE Hard Drive instead of Normal SCSI, updated
|
|
; files to latest version. HFB
|
|
; 1.0 - 13 Aug 96 - Initial Release for P112 from YASBEC release. HFB
|
|
;*****************************************************************************
|
|
|
|
NAME BPBIO
|
|
|
|
FALSE EQU 0
|
|
TRUE EQU NOT FALSE
|
|
NO EQU FALSE
|
|
YES EQU TRUE
|
|
; << ****** SYSTEM SPECIFIC ****** >>
|
|
; << Insert DEF-xxxx.LIB definition >>
|
|
INCLUDE DEF-WW.LIB ; << file for your configuration. >>
|
|
|
|
; << ****** SYSTEM SPECIFIC ****** >>
|
|
; << Insert DEF-xxxx.LIB definition >>
|
|
INCLUDE ROMWBW.LIB ; << file for your configuration. >>
|
|
|
|
CSEG
|
|
;.....
|
|
; Ascii Character Equates
|
|
|
|
ETX EQU 03H ; End-of-Text
|
|
ACK EQU 06H ; Acknowledge
|
|
BELL EQU 07H ; Bell Character
|
|
CR EQU 0DH
|
|
LF EQU 0AH
|
|
XON EQU 11H ; X-On (Control-Q)
|
|
XOFF EQU 13H ; X-Off (Control-S)
|
|
ESC EQU 1BH
|
|
|
|
; Miscellaneous Equates
|
|
|
|
WRUAL EQU 2 ; DOS code for unallocated write
|
|
|
|
LOCKF EQU LOW [NOT AUTOSL] ;Lock flag for format default
|
|
ALONE EQU FALSE ; Boot code equate
|
|
IF Z3
|
|
MACLIB Z3BASE.LIB ; Include ENV definitions
|
|
ENDIF
|
|
PAGE
|
|
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
; BIOS Entry Jump Table - This MUST be in Common Memory
|
|
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
|
|
CSEG
|
|
|
|
BIOSJT: JP CBOOT ; 00 Cold Boot
|
|
JP WBOOT ; 01 Warm Boot
|
|
JP CONST ; 02 console input status * (IOP+12)
|
|
JP CONIN ; 03 console input * (IOP+15)
|
|
JP CONOUT ; 04 console output * (IOP+18)
|
|
JP LIST ; 05 list output * (IOP+21)
|
|
JP AUXOUT ; 06 aux out (punch) * (IOP+24)
|
|
JP AUXIN ; 07 aux in (reader) * (IOP+27)
|
|
JP HOME ; 08 seek track 0
|
|
JP SELDSK ; 09 select logical drive
|
|
JP SETTRK ; 10 select track
|
|
JP SETSEC ; 11 select sector
|
|
JP SETDMA ; 12 set dma address for disk xfer
|
|
JP READ ; 13 disk read
|
|
JP WRITE ; 14 disk write
|
|
JP LISTST ; 15 list output status * (IOP+30)
|
|
JP SECTRN ; 16 logical -> physical sector xlate
|
|
|
|
; --- <<< End of CP/M 2.2 Vectors >>>
|
|
|
|
JP CONOST ; 17 Console Output Status
|
|
JP AUXIST ; 18 Aux Input Status
|
|
JP AUXOST ; 19 Aux Output Status
|
|
JP DEVTBL ; 20 CP/M 3 Device Table
|
|
JP DEVINI ; 21 Character Device Init (Near CP/M 3)
|
|
JP DRVTBL ; 22 DPH Pointer Table for A-P
|
|
JP 0 ; 23 RESERVED FOR MULTIO
|
|
JP FLUSH ; 24 Flush Deblocker
|
|
JP MOVE ; 25 Perform possible Inter-Bank Move
|
|
IF CLOCK
|
|
JP TIME ; 26 Get/Set RTC (Zsdos params)
|
|
ELSE
|
|
JP ISTRUE ; 26..return 0FFH (No Clock) if No code
|
|
ENDIF ;clock
|
|
JP SELMEM ; 27 Select Alternate Memory Bank
|
|
JP SETBNK ; 28 Select DMA Memory bank
|
|
JP XMOVE ; 29 Set Source/Destination Banks for Move
|
|
|
|
; --- <<< End of CP/M 3 Vectors >>>
|
|
|
|
JP RETBIO ; 30 Return BIOS Addresses
|
|
JP DIRDIO ; 31 Direct Disk I/O
|
|
JP STFARC ; 32 Set Bank for FRJP and FRCALL
|
|
JP FRJP ; 33 Jump to (HL) in Alternate Bank
|
|
JP FRCLR ; 34 Clear Stack switcher from Alt Bank Jumps
|
|
; (used for error exits)
|
|
JP FRGETB ; 35 Load A,(HL) from Alternate Bank
|
|
JP FRGETW ; 36 Load DE,(HL) from Alternate Bank
|
|
JP FRPUTB ; 37 Load (HL),A to Alternate Bank
|
|
JP FRPUTW ; 38 Load (HL),DE to Alternate Bank
|
|
JP RETMEM ; 39 Return Current Active Memory Bank
|
|
|
|
CPR EQU BIOSJT-800H-0E00H
|
|
DOS EQU BIOSJT-0E00H
|
|
|
|
; End of BIOS Jump Table
|
|
PAGE
|
|
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
; Boot / Banked Routine Linkage
|
|
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
|
|
IF BANKED
|
|
COMMON /BANK2/
|
|
ROMJT:
|
|
IF INROM
|
|
JP INSYNC
|
|
INSYNC: JP BOOTER ; Cold start loader
|
|
ELSE
|
|
JP 0 ; Reserved
|
|
JP 0
|
|
ENDIF ; Inrom
|
|
JDIRIO: JP DIRIO ; Low Level HDC/FDC Functions
|
|
JHDCIO: JP DIRIO ; Low Level HDC Functions (combined w/FDCIO)
|
|
JBREAD: JP BREAD ; BIOS Read
|
|
JBWRT: JP BWRT ; BIOS Write
|
|
JBSTRN: JP BSTRN ; BIOS Sectran
|
|
IF INROM
|
|
INCLUDE BOOTROM.Z80 ; Boot Routines
|
|
ENDIF ; Inrom
|
|
ENDIF ; Banked
|
|
PAGE
|
|
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
; C o n f i g u r a t i o n A r e a
|
|
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
; << ****** HARDWARE SPECIFIC ****** >>
|
|
; << Insert ICFG-xxx to initialize >>
|
|
INCLUDE ICFG-WW.Z80 ; << your computer's IO system >>
|
|
PAGE
|
|
; << ****** Hardware Specific ****** >>
|
|
; << Enter Low level Byte I/O driver >>
|
|
INCLUDE IIO-WW.Z80 ; << routines in file IIO-xxxx.Z80 >>
|
|
PAGE
|
|
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
; Cold Start Code
|
|
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
|
|
DSEG
|
|
; << ***** Hardware Specific ***** >>
|
|
; << Insert the Cold boot routines >>
|
|
INCLUDE CBOOT-WW.Z80 ; << in file CBOOT-xx.Z80 >>
|
|
|
|
; Deblocking Buffer Allocation
|
|
|
|
IF [BANKED OR INROM]
|
|
COMMON /B2RAM/
|
|
IF INROM
|
|
HSTBUF: DEFS INITCS ; Use a 1k buffer w/below
|
|
ELSE
|
|
HSTBUF EQU CBOOT0 ; Use CBOOT0 code for part of buffer w/below
|
|
ENDIF ;inrom
|
|
ELSE
|
|
DSEG
|
|
HSTBUF EQU CBOOT
|
|
ENDIF ;not banked
|
|
DEFS 1024-(INITCS) ; Use a 1 k buffer
|
|
|
|
HSTSIZ EQU HSTBUF+1024 ; Added label for Hard Drive ext. interface
|
|
PAGE
|
|
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
; Disk Data Structures
|
|
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
|
|
MXFDIR EQU 255 ; Max number of dir entries-1 for floppy
|
|
|
|
MXFALC EQU 880 ; If High Density or 8" drives can be handled,
|
|
; set this for 880 (1.76 MB), otherwise the
|
|
; value can be reduced to 400 (800 KB), the
|
|
; maximum for 80 track, Double-Sided formats.
|
|
CSEG
|
|
IF BANKED
|
|
COMMON /BANK2/
|
|
ENDIF
|
|
DPB: ; Marker for DPB start
|
|
;.XLIST ; Don't print these due to size
|
|
IF AUTOSL
|
|
INCLUDE DPB.LIB ; Default selection of common DD formats
|
|
IF FLOPYH
|
|
INCLUDE DPB-H.LIB ; If "High-Density" Disk formats desired,
|
|
ENDIF
|
|
IF FLOPY8
|
|
INCLUDE DPB-8.LIB ; If 8" or HD Floppy Disks can be handled,
|
|
ENDIF ; add default Autoselect DPB's
|
|
IF MORDPB
|
|
INCLUDE DPB2.LIB ; Additional assignable DPB's (4+4 unused)
|
|
ENDIF ;mordpb
|
|
|
|
ELSE ;Not autosl
|
|
INCLUDE DPBRAM.LIB ; RAM-based DPB's, 1 per physical Format
|
|
ENDIF
|
|
|
|
NRDPB EQU [$-DPB]/DPBSIZ ; Calc number of DPB's
|
|
|
|
CSEG ; Hard & Ramdisk DPBs and DPHs go in Code Seg
|
|
;.xlist
|
|
IF HARDDSK
|
|
; << ****** Hardware Specific ****** >>
|
|
; << Insert DPB Info for Hard Disk >>
|
|
INCLUDE DPBHD-WW.LIB ; << Drives as DPBHD-xx.LIB >>
|
|
ENDIF
|
|
;.list
|
|
IF RAMDSK
|
|
; << ****** Hardware Specific ****** >>
|
|
; << Insert DPB Info for RAM Disk >>
|
|
INCLUDE DPBM-WW.LIB ; << in file DPBM-xxx.LIB >>
|
|
ENDIF
|
|
PAGE
|
|
INCLUDE DPH.LIB ; Disk parameter headers
|
|
;.xlist
|
|
IF HARDDSK
|
|
INCLUDE DPHHD.LIB ; Insert DPH Info for Hard Disk Partitions
|
|
ENDIF
|
|
;.list
|
|
IF RAMDSK
|
|
INCLUDE DPHM.LIB ; Insert DPH Info for RAM Disk
|
|
ENDIF
|
|
.LIST
|
|
PAGE
|
|
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
; Disk Driver Low - Level Function Links
|
|
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
; Direct Disk I / O
|
|
; Call with: Function Number in C, Driver number in B,
|
|
; Args in A, DE, HL
|
|
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
CSEG
|
|
DIRDIO:
|
|
; CALL PRTSTRD
|
|
; DEFB '[DIRDIO',']$'
|
|
|
|
IF BANKED
|
|
CALL BIOSTK
|
|
CALL GOSYSB ; Bank in the system bank
|
|
JP JDIRIO ; And jump to Banked-BIOS function
|
|
|
|
COMMON /BANK2/
|
|
ENDIF
|
|
|
|
DIRIO: PUSH HL ; Save user's HL
|
|
PUSH AF ; ..and A reg for range checks
|
|
LD A,B
|
|
CP MAXDDA ; Legal Driver #?
|
|
JR NC,DIRIOX ; ..jump Error Exit if Not
|
|
PUSH BC
|
|
LD HL,DDIOTB
|
|
LD C,B ; Driver number
|
|
LD B,0
|
|
ADD HL,BC
|
|
ADD HL,BC ; Index into table
|
|
ADD HL,BC
|
|
LD A,(HL) ; Max call number
|
|
INC HL
|
|
LD C,(HL)
|
|
INC HL
|
|
LD H,(HL)
|
|
LD L,C ; Service vector table address in HL
|
|
POP BC ; Requested call
|
|
DEC A ; Correct Max Call # for Testing
|
|
JP M,DIRIOX ; ..jump Error exit if 0 --> FF (No Calls)
|
|
CP C ; Greater than Maximum Function?
|
|
JR C,DIRIOX ; ..jump Error exit if so
|
|
PUSH BC ; Else Save BC
|
|
LD B,0
|
|
ADD HL,BC
|
|
ADD HL,BC ; Add twice for Word index
|
|
LD B,(HL)
|
|
INC HL
|
|
LD H,(HL)
|
|
LD L,B ; Put vector in HL
|
|
POP BC ; Restore User's BC register
|
|
POP AF ; .Restore A and Flags
|
|
EX (SP),HL ; ..restore HL, Vector to TOS
|
|
RET ; Jump to Routine
|
|
|
|
DIRIOX: POP AF ; Clear stack
|
|
POP HL
|
|
OR 0FFH ; Set Error return
|
|
RET ; ..and quit
|
|
|
|
; Direct Disk Access Table Pointer Table
|
|
|
|
DDIOTB: DEFB 0
|
|
DEFW 00 ; No Driver 0
|
|
DEFB MAXFFN
|
|
DEFW FDFUNC ; 1 is Primary Floppy Driver
|
|
IF HARDDSK
|
|
DEFB MAXHFN
|
|
DEFW HDFUNC ; 2 is Primary Hard Disk Driver
|
|
ENDIF ;harddsk
|
|
IF [RAMDSK AND NOT HARDDSK]
|
|
DEFB 0
|
|
DEFW 00 ; (Dummy 2 if not installed)
|
|
ENDIF ;ramdsk and not harddsk
|
|
IF RAMDSK
|
|
DEFB 0
|
|
DEFW 00 ; 3 is Primary RAM Disk Driver (No Functions)
|
|
ENDIF ;ramdsk
|
|
|
|
MAXDDA EQU ($-DDIOTB)/3 ; Number of entries in pointer table
|
|
|
|
; Floppy Drive Function Table and Numbers
|
|
|
|
FDFUNC: DEFW STMODE ; 00 set mode
|
|
DEFW STSIZE ; 01 set drive size
|
|
DEFW STHDRV ; 02 set head and drive
|
|
DEFW STSECT ; 03 set sector #, size and eot
|
|
DEFW SPEC ; 04 specify srt, hlt, hut
|
|
DEFW RECAL ; 05 home the floppy
|
|
DEFW SEEK ; 06 seek track
|
|
DEFW SREAD ; 07 read
|
|
DEFW SWRITE ; 08 write
|
|
DEFW READID ; 09 read id
|
|
DEFW RETDST ; 10 return drive status & result ptr
|
|
DEFW FMTTRK ; 11 format a track
|
|
MAXFFN EQU [$-FDFUNC]/2
|
|
|
|
; Hard Disk Function Table and Numbers
|
|
|
|
IF HARDDSK
|
|
HDFUNC: DEFW HDVALS ; 00 Set Xfer Address, Return Interface Parms
|
|
DEFW HDSLCT ; 01 Select Device (& Logical Unit w/SCSI)
|
|
DEFW HD_RW ; 02 Direct Hard Disk Driver
|
|
MAXHFN EQU [$-HDFUNC]/2
|
|
ENDIF ;harddsk
|
|
PAGE
|
|
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
; Banked Memory Support Routines
|
|
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
; Bank Control Routines. Used only in Banked Systems
|
|
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
|
|
IF BANKED ; << ****** HARDWARE SPECIFIC ****** >>
|
|
; << Enter the Inter-Bank Movement >>
|
|
INCLUDE IBMV-WW.Z80 ; << routines in IBMV-xxx.Z80 >>
|
|
|
|
ELSE ; If Not Banked, Use these hooks
|
|
|
|
MOVE: LDIR
|
|
RET
|
|
|
|
SETBNK:
|
|
SELMEM:
|
|
RETMEM:
|
|
XMOVE:
|
|
GOSYSB:
|
|
FRCLR:
|
|
STFARC: RET
|
|
|
|
FRJP: JP (HL)
|
|
|
|
FRGETB: LD A,(HL)
|
|
RET
|
|
|
|
FRGETW: LD E,(HL)
|
|
INC HL
|
|
LD D,(HL)
|
|
DEC HL
|
|
RET
|
|
|
|
FRPUTB: LD (HL),A
|
|
RET
|
|
|
|
FRPUTW: LD (HL),E
|
|
INC HL
|
|
LD (HL),D
|
|
DEC HL
|
|
RET
|
|
|
|
ENDIF ;(not) banked
|
|
PAGE
|
|
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
; Core BIOS Code
|
|
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
; Return BIOS Addresses
|
|
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
|
|
CSEG
|
|
|
|
RETBIO: LD BC,BIOSJT ; Get address of bios base
|
|
LD DE,CONFIG ; Point to configuration area
|
|
LD HL,DEVCFG ; Point to Char IO Device Table
|
|
LD A,VERS ; Return BIOS Version
|
|
RET
|
|
|
|
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
; Return DPH Table Address
|
|
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
|
|
INCLUDE UTIL.Z80
|
|
|
|
DRVTBL: LD HL,DPHTBL ; Point to DPH table
|
|
RET
|
|
|
|
PAGE
|
|
INCLUDE BYTEIO.Z80 ; Con:, aux:, lst: redirection
|
|
PAGE
|
|
INCLUDE SELRWD.Z80 ; Physical driver link for disks
|
|
PAGE
|
|
INCLUDE DEBLOCK.Z80 ; Hstbuf deblocker
|
|
PAGE
|
|
INCLUDE SECTRAN.Z80 ; Sector translation
|
|
PAGE
|
|
IF AUTOSL
|
|
INCLUDE SELFLP2.Z80 ; Floppy disk select
|
|
ELSE
|
|
INCLUDE SELFLP1.Z80
|
|
ENDIF
|
|
PAGE
|
|
INCLUDE FLOPPY.Z80 ; Hardware independent floppy routines
|
|
PAGE
|
|
; << ****** Hardware Specific ****** >>
|
|
; << This Driver is for the Standard >>
|
|
INCLUDE FDC-WW.Z80 ; << MicroSystems (SMC) FDC37C665 >>
|
|
PAGE
|
|
; << ****** Hardware Specific ****** >>
|
|
; << Enter routines for your timer >>
|
|
INCLUDE TIM-WW.Z80 ; << and clock in TIM-xxxx.Z80 >>
|
|
PAGE
|
|
|
|
IF HARDDSK ; << ****** Hardware Specific ****** >>
|
|
IF SCSI ; << Enter driver routines for your >>
|
|
INCLUDE HARD-WW.Z80 ; << Hard Disk in HARD-xxx.Z80 >>
|
|
ENDIF
|
|
IF IDE
|
|
INCLUDE HARDIDE.Z80
|
|
ENDIF
|
|
IF HDSK
|
|
IF HBIOS
|
|
INCLUDE HARDHB.Z80
|
|
ELSE
|
|
INCLUDE HARDSIM.Z80
|
|
ENDIF
|
|
ENDIF
|
|
PAGE
|
|
ENDIF
|
|
|
|
IF RAMDSK ; << ****** Hardware Specific ****** >>
|
|
INCLUDE RAMD-WW.Z80 ; << Enter driver routines for RAM >>
|
|
PAGE ; << Disk in RAMD-xxx.Z80 >>
|
|
ENDIF
|
|
|
|
; << ****** Hardware Specific ****** >>
|
|
; << Enter Warm Boot routines in >>
|
|
INCLUDE WBOOT-WW.Z80 ; << WBOOT-xx.Z80 >>
|
|
|
|
; << ****** Hardware Specific ****** >>
|
|
; << HBIOS interface routines in >>
|
|
INCLUDE HBIOS.Z80 ; << HBIOS.Z80 >>
|
|
;.....
|
|
; Status bytes of general use placed at end of Data area
|
|
|
|
DSEG
|
|
|
|
HDONE: DEFS 1 ; HDC Flag 0=Ready, 1=Busy, 0FFH=Done
|
|
ERFLAG: DEFS 1 ; Disk Operation Error Code
|
|
DEFS 3 ; Reserved
|
|
|
|
; Add Character IO buffers here to insure they are at end of DSEG
|
|
|
|
IF BUFFA0 AND MORDEV AND NOT MOVCPM
|
|
COM4Q: DEFS 1 ; Char count in Queue
|
|
DEFS QSIZE ; 1 to 255 character type-ahead buffer
|
|
ENDIF
|
|
|
|
IF BUFFA1 AND MORDEV AND NOT MOVCPM
|
|
COM5Q: DEFS 1 ; Char count in Queue
|
|
DEFS QSIZE ; 1 to 255 character type-ahead buffer
|
|
ENDIF
|
|
|
|
IF (BUFFA0 OR BUFFA1) AND MORDEV AND NOT MOVCPM
|
|
DEFS 12 ; Stack for Buffered char IO routines
|
|
INTSP: DEFS 2 ; Storage for entry Stack Ptr
|
|
ENDIF
|
|
|
|
; Flags Bytes for Com1/Com2 Flow Control
|
|
IF XONOFF
|
|
COM1WT: DEFS 1 ; B7=0 - Output Ok, B7=1 - Output Stopped
|
|
COM2WT: DEFS 1 ; B0=0 - Input Ok, B0=1 - Input Halted
|
|
IF ESCC_B AND MORDEV AND NOT MOVCPM
|
|
COM3WT: DEFS 1 ; Flags for Expansion devices
|
|
ENDIF
|
|
IF ASCI_0 AND MORDEV AND NOT MOVCPM
|
|
COM4WT: DEFS 1
|
|
ENDIF
|
|
IF ASCI_1 AND MORDEV AND NOT MOVCPM
|
|
COM5WT: DEFS 1
|
|
ENDIF
|
|
ENDIF ;XonOff
|
|
|
|
PAOR: DEFS 1 ; Parallel Output Ready Flag
|
|
|
|
IF [BANKED AND ZSDOS2]
|
|
COMMON /B2RAM/ ; Put this label in Banked Memory
|
|
ENDIF ; ..else in Dseg
|
|
BRAME: DEFS 2 ; Use as dynamic sizing label for Hard Drive
|
|
; ALV buffers, and storage area for sizing.
|
|
; ALV Buffers build up from here in memory
|
|
CSEG
|
|
|
|
; Display warning if we are assembling for MOVCPM integration and the
|
|
; combined CSEG/Initialized DSEG size exceeds 1 or 2 Boot Records
|
|
|
|
PRINTX MACRO %NN
|
|
.printx %NN
|
|
ENDM
|
|
|
|
LIMIT EQU $-BIOSJT+INITCS
|
|
|
|
IF MOVCPM AND LIMIT > 4480
|
|
.printx
|
|
.printx **** BIOS too big (>4480) for Boot Tracks! ****
|
|
PRINTX %LIMIT
|
|
.printx
|
|
ELSE
|
|
IF MOVCPM AND LIMIT > 4352
|
|
.printx
|
|
.printx ++++ BIOS exceeds (>4352) 2-Sector Boot Record ++++
|
|
PRINTX %LIMIT
|
|
.printx
|
|
ENDIF
|
|
ENDIF
|
|
|
|
NSECTS EQU ($+INITCS-BIOSJT)/128+1
|
|
IF INROM
|
|
INCLUDE BOOTRAM.Z80
|
|
ENDIF
|
|
END
|
|
|