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.
 
 
 
 
 
 

791 lines
22 KiB

;:::::::::::::::::::::::::::::::::::::::::::::::::::***********************
; CBOOT. B/P BIOS Cold Boot Module. ** Hardware Specific **
; This MUST be the Last Module in the BIOS because ** for prompts, Env **
; it is overwritten by RAM Data. No Dflt Termcap. ** and Termcap Dflts **
; - Retro-Brew Boards W/ RomWBW HBIOS ***********************
;
; 1.5 - 04 Sep 16 - Mods to work with HBIOS V 2.8 LWN+WW
; 1.4 - 15 Apr 15 - Mods to work with HBIOS V 2.7.1 WW+LN_
; 1.3 - 24 Mar 14 - Initial N8VEM HBIOS test release WW+LN
; 1.2 - 30 Aug 01 - Cleaned up for GPL release, Set Bank Numbers on boot
; (TPABNK only if MOVCPM) by reading Regs set by ROM. HFB
; 1.1 - 8 May 97 - Added code to activate ASCI channels. HFB
; 1.0 - 13 Aug 96 - Initial Release for P112. HFB
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
DSEG
;.....
; Cold boot entry. This code is executed only once and so may be
; overwritten subsequently by the BIOS. In Non-banked systems, this code
; is placed in the Host Buffer, HSTBUF, allowing up to 1024 bytes in the
; section, although much less will fit on the boot tracks. In Banked
; systems, a small resident part (up to 128 bytes) occupies the Directory
; Sector Buffer, DIRBUF, while the remainder is placed in the banked
; HSTBUF, allowing both sectors to be overwritten without penalty.
; To insure minimum disruption in assembling and linking the BIOS, this
; module must be one of the first linked to place HSTBUF/DIRBUF at the
; beginning of B2RAM and DSEG.
CBOOT:
DI ; Disable interrupt system
IF BANKED
LD SP,USP ; Set to User Stack in High memory
ELSE
LD SP,80H ; Set stack in Low memory
ENDIF ; BANKED
LD HL,(IOBYT) ; Get IOBYTE, Default Drive & User
LD (3),HL ; Set values in TPA bank
IF BANKED
; Copy vectors from TPA page zero to SYS page zero
; This is done very early to ensure interrupt mode 1
; vector is available.
LD BC,(TPABNK) ; C := TPABNK, B := SYSBNK
CALL XMOVE ; Set source/dest banks for copy
LD HL,0 ; Source address is zero
LD DE,0 ; Destination address is zero
LD BC,40H ; Copy 40H bytes
CALL MOVE ; Do it
ENDIF ; BANKED
IF BANKED
CALL GOSYSB ; Turn on the System bank
XOR A
LD (BIOSTK),A ; Init bank switcher
LD (3),HL ; Set IOBYTE and Default DU in System bank
CALL HB_INIT ; Do HBIOS initialization
CALL CBOOT0 ; Execute main part of Cold Setup
LD A,(TPABNK)
CALL SELBNK ; Insure TPA is in context
ELSE
CALL HB_INIT ; Do HBIOS initialization
CALL CBOOT0 ; Execute main part of Cold Setup
ENDIF ; Banked
IF NOT MOVCPM
LD HL,003CH ; Point to ZMP Flag
LD (HL),0E5H ; say this is first time run
ENDIF
IF FASTWB
; Grab a copy of command processor from TPA and
; cache it in (SYSBNK):100H. We assume that the
; original copy of command processor is in high memory.
;
; It is critical that we use the HB variants of MOVE and XMOVE
; because we are moving between banks even in a non-banked
; system!
LD A,(TPABNK) ; Source bank is TPABNK
LD C,A ; Put it in C
LD A,(SYSBNK) ; Destination bank is SYSBNK
LD B,A ; Put it in B
CALL HB_XMOVE ; Set banks for extended copy
LD HL,(CPADR) ; Copy from start of command processor
LD DE,100H ; .. to $100 in system bank
LD BC,(CPLEN) ; Length of command processor
CALL HB_MOVE ; Do it
JP WBOOTV ; move it and commence execution
ELSE
JP GOZSYS ; Otherwise just go to Command Processor
ENDIF ;FASTWB
IF BANKED
COMMON /B2RAM/
ENDIF
;.....
; If this system is Banked and set for Zsdos2, then ALV Buffers are in the
; system bank and will be dynamically sized during Cold Boot. This permits
; BPCNFG to configure a generic IMG file for specific Hard Drive Partitions.
CBOOT0:
LD HL,BRAME ; Get end of banked RAM
LD (HISAV),HL ; and save for later use
IF HARDDSK
LD HL,DPHTBL ; Point to start of DPH Table
LD B,16 ; do all DPHs
DYNLP: LD E,(HL)
INC HL
LD D,(HL) ; Get the pointer for this one
INC HL ; advance to next
LD A,D ; Anything there?
OR E
JR Z,DYNCHK ; jump to end if Nothing
DEC DE ; Else back up Ptr to Driver
DEC DE
LD A,(DE) ; Get driver #
; IF RAMDSK
; DEC A
; DEC A ; Hard Disk (Driver 2)?
; JR Z,ADDSIZ ; ..jump if so
; DEC A ; RAM Disk (Driver 3)?
; ELSE
CP 2 ; Hard Disk (Driver 2)?
; ENDIF ; Ramdsk
JR NZ,DYNCHK ; ..jump to end if Not
ADDSIZ: PUSH BC ; Save loop counter
PUSH HL ; and ptr to DPH
EX DE,HL
LD DE,12 ; Offset to DPB Ptr (+2 for Decs)
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL) ; Get Addr of this DPB
INC HL
INC HL
INC HL ; Advance to ALV Addr location
LD BC,(HISAV) ; get end of used RAM
LD (HL),C ; and save
INC HL
LD (HL),B ; in DPH
LD HL,5
ADD HL,DE ; Advance to Size in DPB
LD E,(HL)
INC HL
LD D,(HL) ; and fetch Size-1
INC DE ; Make = Size in Block
PUSH BC ; (save End Addr in BC)
LD B,3
DVRAME: SRL D ; Divide by 2
RR E
DJNZ DVRAME ; *3 = Div 8
INC DE ; +1
EX DE,HL
POP BC ; Restore Ram End
ADD HL,BC ; Add size to Starting Location
LD (HISAV),HL ; save for next drive/overflow check
POP HL ; Restore DPH ptr
POP BC ; and loop ctr
DYNCHK: DJNZ DYNLP ; Loop til all 16 tested
ENDIF ;harddsk
IF BANKED
LD DE,USP ; Point above critical Bios Ram storage
ELSE
LD DE,DIRBUF
ENDIF
IF Z3
LD HL,(ENVADR) ; And top of memory
ELSE
LD HL,MEMTOP
ENDIF
SBC HL,DE ; Calculate # bytes to clear (CF already clr)
EX DE,HL ; Ptr to HL, Cnt to DE
Clr0: LD (HL),0
INC HL
DEC DE
LD A,D
OR E
JR NZ,Clr0 ; ..loop til all cleared
; In systems where we have enough space, we clear unused High Memory too
IF NOT MOVCPM
LD HL,(ENVADR) ; Clear above the ENV as well
LD DE,100H ; Assuming a 2-record ENV
ADD HL,DE ; Are we already at the top of memory?
JR C,ATTOP ; ..bypass clearing if so
EX DE,HL ; Else we must calculate how much to clear
LD HL,MEMTOP ; From the TOP
SBC HL,DE ; subtract the start
LD C,L
LD B,H ; and use for count
LD L,E ; Copy Start to Source
LD H,D
INC DE ; dest is same + 1
LD (HL),0 ; we fill with Zeros
LDIR ; Do it!
ATTOP:
ENDIF ; ~Movcpm
; Initialize the ZCPR3 buffers
IF NOT MOVCPM
LD HL,(ENVADR) ; Should we move our local ENV block?
LD A,H
OR L
JR NZ,BMOVE ; ..jump if we already have one
ENDIF ; NOT MOVCPM ; (Always move Env if using MOVCPM type load)
LD HL,Z3ENV ; Else set up pointers
LD (ENVADR),HL
LD DE,ENV
EX DE,HL
LD BC,ENVEND-ENV ; count
LDIR ; and move
IF MOVCPM ; Instead of storing Termcap bytes, Zeroize
LD H,D
LD L,E ; Dupe dest addr
LD (HL),0 ; Clear current byte
LD BC,37-1 ; Set count to remaining Termcap area
INC DE ; Dest is next byte
LDIR ; move Zero along
ENDIF ;Movcpm
BMOVE:
IF NOT MOVCPM ; No need to set values on Boot Track System
LD DE,(ENVADR) ; Get pointer to ENV
IF HAVIOP
LD HL,0FH ; Set offset to IOP Addr in ENV
CALL CALCOF ; get the addr and size
LD (IOPPTR),HL ; and set addr
ENDIF ;haviop
LD HL,18H ; Set offset to Mult Comnd Line in ENV
CALL CALCOF ; get addr and size
LD (CLPTR),HL ; set addr
INC HL
INC HL
INC HL ; Advance to CL+3
LD (CL3PTR),HL ; and set
INC HL ; Advance to CL+4
LD (CMDSET),HL ; set addr in Command Line ptr
LD (CMDSET+2),A ; and CL Size byte
LD HL,09H ; Set offset to Path addr in ENV
CALL CALCOF ; get addr
LD (PTHPTR),HL ; and set
ENDIF ;Movcpm
IF FASTWB ; Do we restore CPR from Bank?
IF MOVCPM
LD DE,BIOSJT-1600H ; Get CPR Starting Addr
LD HL,0800H ; and Default Length
ELSE
LD HL,(ENVADR) ; Get pointer to ENV start
LD DE,3FH ; offset to CPR start
ADD HL,DE
LD E,(HL) ; and get CPR starting address
INC HL
LD D,(HL)
INC HL ; (advance to length)
LD H,(HL) ; Get length in blocks (*2 at this point)
LD L,0 ; convert to Word
SRL H ; Compute Blks * 128
RR L ; to give HL = CPR length in bytes
ENDIF ; Movcpm
;
; SETUP FOR FASTWB
;
LD (CPLEN),HL ; Save command processor length
LD (CPADR),DE ; Save command processor address (in TPA)
ENDIF ;fastwb
LD (STKSAV),SP ; Save entry stack since we alter it here
LD A,(BLOCKE-BLOCK)/6
LD SP,BLOCK
BLKMV: POP BC ; And number of bytes to move
POP HL ; Source
POP DE ; Get destination
LDIR
DEC A ; Another block moved
JR NZ,BLKMV ; Do more as required
LD SP,(STKSAV) ; Get entry Stack Pointer back so we can return
; All Buffers above BIOS have been cleared already at this point
DEC A ; 0 --> FF
LD (Z3WHL),A ; Set the Wheel Byte
; Allocate disk buffer in HBIOS bank and
; save it for use later in disk access.
LD B,HBF_ALLOC ; HBIOS Func: ALLOCATE Heap Memory
LD HL,512 ; 1 Sector, 512 Bytes
CALL HBX_INVOKE ; Do it
CALL NZ,PANIC ; Handle error
LD (HB_DSKBUF),HL ; Record the buffer address
IF HAVIOP
LD HL,IOPRET
LD (BIOSJT+1),HL
ENDIF ;haviop
IF BANKED
CALL JDVINI ; Call directly because we are in High Stack
ELSE
CALL DEVINI ; Initialize the I/O system
ENDIF ; And any device specific ram
IF [BANKED AND ZSDOS2]
LD DE,8000H ; If ALVs in Bank, size against Bank2 Top
ELSE
LD DE,(USRSP) ; else against base of User Space
ENDIF
LD HL,(HISAV) ; Load Highest RAM Address used
OR A
SBC HL,DE ; Is Needed Space > Limit?
JR C,MEMOK ; ..jump if So
CALL PRINT ; Else Warn user
DEFB CR,LF,7,'++ Mem Ovfl +','+'+80H
; Sign on the system
MEMOK:
CALL PRINT
IF MOVCPM ; Space is critical for boot tracks
DEFB CR,LF,'RetroB' ; Save all bytes possible
ELSE ; Otherwise sign on with complete name
DEFB CR,LF,'Retro-Brew '
; IF SBC
; DEFB ' SBC V1/2 '
; ENDIF ;SBC
; IF SIMH
; DEFB 'ON SimH '
; ENDIF ;SIMH
; IF ZETA
; DEFB ' ZETA '
; ENDIF ;ZETA
; IF N8
; DEFB ' N8 '
; ENDIF ;N8
; IF MK4
; DEFB ' Mark IV '
; ENDIF ;MK4
ENDIF ; MOVCPM
DEFB 'B/P 50.00k Bios' ;**** Do NOT alter this string ****
DEFB ' V',VERS/16+'0','.',VERS MOD 16+'0',' ' ; Vers in BCD
DATE
IF BANKED
DEFB ' (Banked) '
ELSE
IF NOT MOVCPM
DEFB ' (Non-Banked) ' ; Nothing for boot track system
ENDIF ;NOT MOVCPM
ENDIF ; Banked
DEFB ' with:',CR,LF,LF
DEFB ' ZCPR3+ Env'
IF CLOCK
DEFB CR,LF,' RomWBW HBIOS Clock, '
IF CLKSET
DEFB 'with '
ELSE
DEFB 'NO '
ENDIF ; CLKSET
DEFB 'Set'
ENDIF ; Clock
DEFB CR,LF,' High-Density Floppy'
IF FDDMA
DEFB ' (DMA-driven IO)'
ELSE
DEFB ' (Polled IO)'
ENDIF ; FDDMA
IF HARDDSK
DEFB CR,LF,' HBIOS Hard Disk Driver'
IF HDDMA
DEFB ' (DMA-driven IO)'
ELSE
DEFB ' (Polled IO)'
ENDIF ;HDDMA
ENDIF ; HARDDSK
IF FASTWB
DEFB CR,LF,' Warm Boot from RAM'
ENDIF ;FASTWB
; IF RAMDSK
DEFB CR,LF,' RAM Disk (A:)'
; ENDIF ;RAMDSK
IF BIOERM
DEFB CR,LF,' Full Error Messages'
ENDIF ;BIOERM
DEFB CR,LF+80H
EI ; Turn Interrupts back on
RET ; ..and return
;.....
; Offset to and get ENV Address and respective element size
CALCOF: ADD HL,DE ; Add offset to Base ENV Addr
LD C,(HL) ; get low byte
INC HL
INC HL ; advance to size byte
LD A,(HL) ; get size
DEC HL ; Back down to Addr hi byte
LD H,(HL) ; and grab
LD L,C ; Ptr to Segment now in HL
RET ; return to caller
;.....
; HBIOS Initialization
HB_INIT:
IF HB_DEBUG AND FALSE
CALL PRTSTRD
DEFB '[HB_INIT]',CR,LF,'$'
ENDIF
;; Setup RST 08 vector
;LD A,0C3H ; $C3 = JP
;LD (08H),A
;LD HL,HBX_INVOKE
;LD (09H),HL
;IF BANKED
;
;; Copy vectors from TPA page zero to SYS page zero
;LD BC,(TPABNK) ; C := TPABNK, B := SYSBNK
;CALL XMOVE ; Set source/dest banks for copy
;LD HL,0 ; Source address is zero
;LD DE,0 ; Destination address is zero
;LD BC,40H ; Copy 40H bytes
;CALL MOVE ; Do it
;
;ENDIF ;BANKED
IF HB_DEBUG
CALL NEWLINE2
LD DE,HB_STR_TAG
CALL WRITESTR
LD DE,HB_STR_CSEG
CALL WRITESTR
LD BC,ORG_CSEG
CALL PRTHEXWORD
LD DE,HB_STR_DSEG
CALL WRITESTR
LD BC,ORG_DSEG
CALL PRTHEXWORD
IF BANKED
LD DE,HB_STR_BANK2
CALL WRITESTR
LD BC,ORG_BANK2
CALL PRTHEXWORD
LD DE,HB_STR_B2RAM
CALL WRITESTR
LD BC,ORG_B2RAM
CALL PRTHEXWORD
LD DE,HB_STR_RESVD
CALL WRITESTR
LD BC,ORG_RESVD
CALL PRTHEXWORD
ENDIF ;BANKED
CALL NEWLINE
ENDIF ; [HB_DEBUG]
; Update RAM and ROM DPB for true RAM/ROM sizes
LD BC,HBF_MEMINFO ; HBIOS Memory Information
CALL HBX_INVOKE ; Do it, D=ROM Banks, E=RAM Banks
PUSH DE ; Save results
LD HL,DPBROM+4 ; EXM byte of ROM DPB
LD A,D ; ROM bank count to accum
SUB HB_ROMRESV ; Less reserved ROM banks
CALL HB_FIXDPB ; Adjust ROM DPB
POP DE ; Recover memory info
LD HL,DPBRAM+4 ; EXM byte of RAM DPB
LD A,E ; ROM bank count to accum
SUB HB_RAMRESV ; Less reserved RAM banks
CALL HB_FIXDPB ; Adjust RAM DPB
RET
HB_FIXDPB:
CP 16 ; 16 banks = 256 blocks
LD E,0 ; Init EXM value to zero
RL E ; Put CF in E
LD (HL),E ; Save EXM
LD D,0 ; Init blk cnt to bank cnt
LD E,A ; "
LD B,4 ; Multiply by 4
HB_FIXDPB1:
SLA E ; ... to convert to
RL D ; ... 2K block cnt
DJNZ HB_FIXDPB1 ; Loop
DEC DE ; Convert to blk cnt - 1
INC HL ; Point to LSB of DSM
LD (HL),E ; Save LSB
INC HL ; Point to MSB of DSM
LD (HL),D ; Save it
RET
IF HB_DEBUG
HB_STR_TAG: DB "HBIOS: $"
HB_STR_CSEG: DB "CSEG=$"
HB_STR_DSEG: DB ", DSEG=$"
HB_STR_BANK2: DB ", BANK2=$"
HB_STR_B2RAM: DB ", B2RAM=$"
HB_STR_RESVD: DB ", RESVD=$"
ENDIF ; HB_DEBUG
; Block Move Parameters
BLOCK: DEFW PATH-CMDSET ; # to move
DEFW CMDSET ; Source
CLPTR: DEFW Z3CL ; Destination
DEFW 10
DEFW AUTOCMD
CL3PTR: DEFW Z3CL+3
DEFW PATHE-PATH
DEFW PATH
PTHPTR: DEFW EXPATH
IF HAVIOP
DEFW IOPLEN+2
DEFW IOPENT
IOPPTR: DEFW IOP
ENDIF ;HAVIOP
; IF HARDDSK AND HDDMA AND (NOT IDE)
; DEFW DMALEN
; DEFW DMADAT
; DEFW DMATBL
; ENDIF ;HARDDSK AND HDDMA AND (NOT IDE)
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
CMDSET: DEFW Z3CL+4 ; Point to first character in command buffer
DEFB Z3CLS ; Command buffer size
DEFW 0 ; Clear the command line
PATH: DEFB '$','$',1,15 ; Current, A15:
DEFB 0 ; End of initial path
PATHE EQU $
; Environment Descriptor for ZCPR34
ENV: JP 0 ; Leading jump (address is CBIOS when NZCOM)
ENV1: ; ZCPR3 enviornment descriptor ...
DEFB 'Z3ENV' ; Environment id
DEFB 90H ; Env type (=>80H means extended ENV). YASBEC
; uses 90H to show User Area instead of Prt2
DEFW EXPATH ; External path (path)
DEFB EXPATHS ;
DEFW RCP ; Resident command package (rcp)
DEFB RCPS ;
DEFW IOP ; Input/output package (iop)
DEFB IOPS ;
DEFW FCP ; Flow command package (fcp)
DEFB FCPS ;
DEFW Z3NDIR ; Named directories (ndr)
DEFB Z3NDIRS ;
DEFW Z3CL ; Command line (cl)
DEFB Z3CLS ;
DEFW Z3ENV ; Environment (env)
DEFB Z3ENVS ;
DEFW SHSTK ; Shell stack (sh)
DEFB SHSTKS ;
DEFB SHSIZE ;
DEFW Z3MSG ; Message buffer (msg)
DEFW EXTFCB ; External fcb (fcb)
DEFW EXTSTK ; External stack (stk)
DEFB 0 ; Quiet flag (1=quiet, 0=not quiet)
DEFW Z3WHL ; Wheel byte (whl)
DEFB 16 ; Processor speed (mhz)
DEFB 'P'-'@' ; Max disk letter
DEFB 31 ; Max user number
DEFB 1 ; 1 = Ok to accept DU:, 0 = Not Ok
DEFB 0 ; Crt selection ()
DEFB 0 ; Printer selection ()
DEFB 80 ; Crt 0: width
DEFB 25 ; # of lines
DEFB 22 ; # of text lines
; In Extended ENV, CRT 1 is replaced by System Info
;; DEFB 132 ; . CRT 1: Width
;; DEFB 24 ; # of lines
;; DEFB 22 ; # of text lines
; The Drive Vector is a 16-bit word in which a "1" bit indicates that a drive
; is active in the system. The bits are arranged as: PONMLKJIHGFEDCBA. When
; stored in memory, it is in normal form with the Low byte stored first.
E_DRVL DEFL [DRV_A & 1] + [DRV_B & 2] + [DRV_C & 4] + [DRV_D & 8]
E_DRVL DEFL E_DRVL + [DRV_E & 16] + [DRV_F & 32] + [DRV_G & 64]
E_DRVL DEFL E_DRVL + [DRV_H & 128] ; Low Byte Formed
E_DRVH DEFL [DRV_I & 1] + [DRV_J & 2] + [DRV_K & 4] + [DRV_L & 8]
E_DRVH DEFL E_DRVH + [DRV_M & 16] + [DRV_N & 32] + [DRV_O & 64]
E_DRVH DEFL E_DRVH + [DRV_P & 128] ; High Byte Formed
DEFW E_DRVH * 256 + E_DRVL
DEFB 0 ; (Reserved)
DEFB 80 ; Prt 0: width
DEFB 66 ; # of lines
DEFB 58 ; # of text lines
DEFB 1 ; Ff flag (1=can form feed)
;========= Usurped Prt1 storage for Resident User Space Vectors =========
;; DEFB 96 ; Prt 1: width
;; DEFB 66 ; # of lines
;; DEFB 58 ; # of text lines
;; DEFB 1 ; Ff flag (1=can form feed)
DEFB USPCS ; Remaining Free User Space (recs)
USRSP: DEFW USPC ; Res. User Space base Address (xx00h/xx80h)
DEFB USPCS ; Size of Res. User Space in 128-byte recs
;========================================================================
; In Extended ENV, Printers 2 and 3 are gone, replaced by System Info
;; DEFB 132 ; . PRT 2: Width
;; DEFB 66 ; # of lines
;; DEFB 58 ; # of text lines
;; DEFB 1 ; FF flag (1=can form feed)
;; DEFB 132 ; . PRT 3: Width
;; DEFB 88 ; # of lines
;; DEFB 82 ; # of text lines
;; DEFB 1 ; FF flag (1=can form feed)
DEFW CPR ; Ccp base address
DEFB [DOS-CPR]/128 ; Size of ccp in 128 byte records
DEFW DOS ; Bdos base address (xx00h or xx80h)
DEFB [BIOSJT-DOS]/128 ; Bdos buffer size in 128 byte records
DEFW BIOSJT ; Bios base address (nzbio if nzcom running)
DEFB 'SH ' ; Shell variable filename
DEFB 'VAR' ; Shell variable filetype
DEFB ' ' ; File 1
DEFB ' ' ;
DEFB ' ' ; File 2
DEFB ' ' ;
DEFB ' ' ; File 3
DEFB ' ' ;
DEFB ' ' ; File 4
DEFB ' ' ;
DEFB 0 ; Public drive area (zrdos +)
DEFB 0 ; Public user area (zrdos +)
; Env 128 bytes long
;***************************************************************************
; This TermCap Data for the New Z-System complies with VLIB4D specs and more
; fully describes the terminal and its capabilities. Edit the fields with
; values for your terminal characteristics, or use it as a template for an
; outboard definition loaded from the Startup file.
ENV2: DEFB ' ' ; Terminal Name (13 bytes, space terminated)
IF MOVCPM ; Dummies for boot track systems
B13: DEFB 0
B14: DEFB 0 ; Bit 7 = Normal TCAP
ELSE
B13: DEFB GOELD-ENV2 ; Offset to GOELD in graphics section
B14: DEFB 10000000B ; Bit 7 = Extended TCAP, remainder undefined
ENDIF ;~Movcpm
; B15 b0 Standout 0 = Half-Intensity, 1 = Reverse Video
; B15 b1 Power Up Delay 0 = None, 1 = 10-second delay
; B15 b2 No Wrap 0 = Line Wrap, 1 = No Wrap if char written
; to last character in line
; B15 b3 No Scroll 0 = Scroll, 1 = No Scroll if char written
; to last char in last line of diplay
; B15 b4 ANSI 0 = ASCII, 1 = ANSI
B15: DEFB 00000000B ; Reverse Vid, Wrap, Scroll, ASCII
; Additional single character cursor motion bytes
DEFB 'E'-'@' ; Cursor Up
DEFB 'X'-'@' ; Cursor Down
DEFB 'D'-'@' ; Cursor Right
DEFB 'S'-'@' ; Cursor Left
IF NOT MOVCPM ; Omit in boot systems to save space
; Instead, we simply zero remainder.
DEFB 0 ; CL Delay for Screen Clear
DEFB 0 ; CM Delay for Cursor Motion
DEFB 0 ; CE Delay for Clear to End-of-Line
; Strings start here
DEFB 0 ; (CL) Home Cursor and Clear Screen
DEFB 0 ; (CM) Cursor Motion
DEFB 0 ; (CE) Clear to End-of-Line
DEFB 0 ; (SO) Reverse On
DEFB 0 ; (SE) Reverse Off
DEFB 0 ; (TO) Terminal Init
DEFB 0 ; (TE) Terminal De-init
; Extensions to Standard Z3TCAP
DEFB 0 ; (LD) Delete Line
DEFB 0 ; (LI) Insert Line
DEFB 0 ; (CD) Clear from Cursor to End-of-Scr
; Attributes setting parameters
DEFB 0 ; Set Attributes
DEFB 0 ; Attributes String
; Read items from screen
DEFB 0 ; Report Cursor Pos'n (ESC Y Pn Pn)
DEFB 0 ; Read Line Under Cursor
GOELD: DEFB 0 ; On/Off Delay
; Graphics strings offset from Delay value.
DEFB 0 ; Graphics On
DEFB 0 ; Graphics Off
DEFB 0 ; Cursor Off
DEFB 0 ; Cursor On
; Graphics Characters
DEFB '*' ; Upper-Left corner [*]
DEFB '*' ; Upper-right corner [*]
DEFB '*' ; Lower-Left corner [*]
DEFB '*' ; Lower-right corner [*]
DEFB '-' ; Horizontal Line [-]
DEFB '|' ; Vertical Line [|]
DEFB '#' ; Full Block (hashed block) [*]
DEFB 'X' ; Hashed Block (big X) [#]
DEFB '+' ; Upper Intersect (Upside down "T") [+]
DEFB '+' ; Lower Intersect ("T") [+]
DEFB '+' ; Mid Intersect (Crossing Lines) [+]
DEFB '+' ; Right Intersect ("T" rotated left) [+]
DEFB '+' ; Left Intersect ("T" rotated right) [+]
DEFB 0
DEFB 0
ENDIF ;~Movcpm
ENVEND:
; IOP initial data
IF HAVIOP
IOPENT: JP IOPEND
JP IOPEND
JP IOPEND
JP IOPEND
JP CONST
JP CONIN
JP CONOUT
JP LIST
JP AUXOUT
JP AUXIN
JP LISTST
JP IOPEND
JP IOPEND
JP IOPEND
JP IOPEND
JP IOPEND
DEFB 'Z3IOP'
DEFB 'DUMMY '
IOPLEN EQU $-IOPENT
IOPEND EQU IOP+IOPLEN
XOR A
RET
ENDIF ;haviop
BCODEE EQU $
IF BANKED
INITCS EQU BCODEE-CBOOT0 ; Size of Banked (B2RAM) part of Init Code
ELSE
INITCS EQU BCODEE-CBOOT ; Size of Complete Init Code in DSEG
ENDIF
STKSAV: DEFS 2 ; Storage for Pointer while moving
HISAV: DEFS 2 ; Storage for Hi-ALV address
IF FASTWB
DSEG
BTTBL: DEFS 8 ; Initial WB DMA Block
ENDIF
;======================== End of CBOOT =============================