@ -87,6 +87,20 @@ MODCNT .SET MODCNT + 1
! ! ! ; FORCE AN ASSEMBLY ERROR
# ENDIF
;
; SOME HARDWARE REQUIRES A SPECIFIC ROMSIZE (NOTABLY ZZRCC) OR THE
; RESULTING BUILD IMAGES WILL BE CORRUPT. ROMSIZE_CHK IS SPECIFIED
; IN THE CONFIG FILE AND IS VERIFIED AGAINST THE ROMSIZE BEING USED
; BY THE BUILD. A ROMSIZE_CHK VALUE OF 0 INDICATES THE VERFICATION
; IS DISABLED (WHICH IT USUALLY IS).
;
# IF ( ROMSIZE_CHK ! = 0 ) & ( ROMSIZE ! = ROMSIZE_CHK )
.ECHO "*** ERROR: ROMSIZE VALUE VERIFICATION FAILURE.\n"
.ECHO "THIS CONFIGURATION REQUIRES A ROMSIZE OF " \ .ECHO ROMSIZE_CHK \ .ECHO ".\n"
.ECHO "BUILD IS USING A ROMSIZE OF " \ .ECHO ROMSIZE \ .ECHO ".\n"
.ECHO "SEE COMMENTS IN HBIOS.ASM.\n"
! ! ! ; FORCE AN ASSEMBLY ERROR
# ENDIF
;
;
;
# IF ( DI AGENABLE )
@ -129,7 +143,7 @@ MODCNT .SET MODCNT + 1
# IF ( INTMODE = = 3 )
; Z280 MODE 3 INTERRUPT HANDLING (INTA, C/T 0, & UART RCVR ENABLED)
# DEFINE HB_DI DI
# DEFINE HB_EI .DB $ ED , $ 7 F , $ 0B
# DEFINE HB_EI EI $ 0B
# ELSE
; Z280 MODE 1/2 INTERRUPT HANDLING
# DEFINE HB_DI DI
@ -352,8 +366,7 @@ HBX_INVOKE:
LD A , BID_BIOS ; HBIOS BANK
LD ( HB_CURBNK ), A ; SET AS CURRENT BANK
;
.DB $ ED , $ 71 ; SC
.DW HB_DISPATCH ; SC PARAMETER
SC HB_DISPATCH
;
PUSH AF
LD A ,( HB_INVBNK )
@ -490,8 +503,7 @@ HBX_BNKSEL1:
PUSH BC ; SAVE BC
PUSH HL ; SAVE HL
LD B , $ 00 ; FIRST USER PDR
.DB $ ED , $ 71 ; SC
.DW Z280_BNKSEL ; SC PARAMETER
SC Z280_BNKSEL ; SYSCALL
POP HL ; RESTORE HL
POP BC ; RESTORE BC
RET ; DONE
@ -560,9 +572,11 @@ HBX_MMA .DB 0 ; TEMPORARY STORAGE FOR REG A
;
HBX_BNKCPY:
# IF ( MEMMGR = = MM_Z280 )
.DB $ ED , $ 71 ; SC
.DW Z280_BNKCPYX ; SC PARAMETER
SC Z280_BNKCPYX ; SYSCALL TO BNKCPYX
RET
;
IOPRVAL .DW 0 ; TEMP STORAGE FOR IOPR
;
# ELSE
# IF ( CPUFAM = = CPU_Z280 )
PUSH HL
@ -651,8 +665,7 @@ HBX_BNKCALL:
# IF ( MEMMGR = = MM_Z280 )
CP BID_BIOS ; CALLING HBIOS?
JR NZ , HBX_BNKCALL3 ; NOPE, DO NORMAL PROCESSING
.DB $ ED , $ 71 ; SC
.DW HBX_BNKCALL2 ; CALL HERE IN SYSTEM MODE
SC HBX_BNKCALL2 ; SYSCALL TO BNKCALL2
RET ; THEN RETURN
;
HBX_BNKCALL2:
@ -1127,7 +1140,7 @@ Z280_BOOTERR .TEXT "\r\n\r\n*** Application mode boot not supported under Z280 n
LD HL , Z280_BOOTPDRTBL ; START OF PDR VALUES TABLE
LD C , Z280_MMUBLKMOV ; PDR BLOCK MOVE PORT
LD B , 16 ; PROGRAM 16 PDRS
.DB $ ED , $ 93 ; OTIRW
OTIRW ; OTIRW
;
; INITIALIZE ALL OF THE USER PAGE DESCRIPTORS WITH BLOCK MOVE
LD A , $ 10 ; FIRST SYSTEM PDR
@ -1135,7 +1148,7 @@ Z280_BOOTERR .TEXT "\r\n\r\n*** Application mode boot not supported under Z280 n
LD HL , Z280_BOOTPDRTBL ; START OF PDR VALUES TABLE
LD C , Z280_MMUBLKMOV ; PDR BLOCK MOVE PORT
LD B , 16 ; PROGRAM 16 PDRS
.DB $ ED , $ 93 ; OTIRW
OTIRW ; OTIRW
;
; ENABLE MMU (SYSTEM AND USER TRANSLATION)
LD C , Z280_MMUMCR ; MMU MASTER CONTROL REGISTER
@ -1532,7 +1545,11 @@ MBC_SINGLE:
LD HL , 0
LD DE , 0
LD BC , $ 8000
# IF ( MEMMGR = = MM_Z280 )
CALL Z280_BNKCPY
# ELSE
CALL HBX_BNKCPY
# ENDIF
;
; TRANSITION TO HBIOS IN RAM BANK
;
@ -1621,9 +1638,9 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK
; ASSUME THAT CB_RAMBANKS IS THE NUMBER OF 32K RAM BANKS THAT HAS BEEN SET EITHER
; AT ASSEMBLY TIME OR BY PROBING THE ACTUAL AVAILABLE MEMORY (NOT IMPLEMENTED YET).
;
LD A ,( CB_RAMBANKS ) ; CALCULATE START
DEC A ; RAMBANK AFTER
ADD A ,( $ 80 + ( PLT_RAM_R / 32 )) ; RESERVED BANKS
LD A ,( CB_RAMBANKS ) ; CALCULATE TOP RAMBANK
ADD A , BID_RAM0 ; AS FIRST RAMBANK +
DEC A ; #RAMBANKS - 1
;
LD HL , CB_BIDCOM
LD B , 4
@ -1631,12 +1648,12 @@ CB_IDS: LD (HL),A ; POPULATE CB_BIDCOM
INC HL ; POPULATE CB_BIDUSR
DEC A ; POPULATE CB_BIDBIOS
DJNZ CB_IDS ; POPULATE CB_BIDAUX
;
LD A ,( CB_BIDUSR )
LD ( HB_SRCBNK ), A ; POPULATE HB_SRCBNK
LD ( HB_DSTBNK ), A ; POPULATE HB_DSTBNK
;
LD A , + ( $ 80 + ( PLT_RAM_R / 32 )) ; POPULATE CB_BIDRAMD0 ; START RAMBANK
LD A , BID_RAM0 ; POPULATE CB_BIDRAMD0 ; START RAMBANK
LD ( HL ), A
INC HL
;
@ -2471,7 +2488,13 @@ HB_CKBNK:
LD BC , 1 ; DECREMENT VALUE
XOR A ; ZERO ACCUM
HB_CKBNK1:
# IF ( MEMMGR = = MM_Z280 )
LD D , A ; WORKING VALUE TO D
LDUD A ,( HL ) ; GRAB NEXT BYTE FROM USER SPACE
ADD A , D ; ADD NEXT BYTE
# ELSE
ADD A ,( HL ) ; ADD NEXT BYTE
# ENDIF
OR A ; CLEAR CARRY
SBC HL , BC ; DECREMENT
JR NC , HB_CKBNK1 ; LOOP TILL DONE
@ -4782,7 +4805,7 @@ Z280_BADINT:
CALL PRTHEXWORDHL ; DUMP MSR
EX ( SP ), HL ; MSR TO STK, RECOVER HL
;
.DB $ ED , $ 55 ; RETIL
RETIL ; RETURN FROM INT
;
Z280_SSTEP:
; SAVE HL AND MSR FOR POSSIBLE RETURN VIA RETIL
@ -4876,7 +4899,7 @@ Z280_PRIVINST:
PUSH BC
PUSH DE
;
.DB $ ED , $ 96 ; LDUP A,(HL)
LDUP A ,( HL ) ; BYTE FROM USER SPACE
;
; HANDLE DI
CP $ F3 ; DI?
@ -4904,7 +4927,7 @@ Z280_PRIVINST3:
CALL PC_LBKT
LD B , $ 10
Z280_PRIVINST4:
.DB $ ED , $ 96 ; LDUP A,(HL)
LDUP A ,( HL ) ; BYTE FROM USER SPACE
CALL PRTHEXBYTE
INC HL
DJNZ Z280_PRIVINST4
@ -4925,7 +4948,7 @@ Z280_PRIVINSTX:
PUSH HL ; SAVE HL
LD HL ,( HB_MSRSAV ) ; GET SAVED MSR
EX ( SP ), HL ; MSR TO STK, RECOVER HL
.DB $ ED , $ 55 ; RETIL
RETIL ; RETURN FROM INT
;
HB_MSRSAV .DW 0 ; SAVED MSR
HB_RCSAV .DW 0 ; SAVED REASON CODE
@ -5230,7 +5253,7 @@ Z280_BNKSEL2:
;
; SET LOW NIBBLE
LD A , $ 0 A ; VALUE FOR LOW NIBBLE
.DB $ ED , $ 6 D ; ADD HL,A ; HL=0000 RBBB B000 1010
ADD HL , A ; ADD HL,A ; HL=0000 RBBB B000 1010
;
; POINT TO FIRST PDR TO PROGRAM
LD A , B ; INITIAL PDR TO PROG
@ -5427,7 +5450,7 @@ Z280_BNKCPY:
;
; WAIT FOR XFER TO COMPLETE
Z2DMALOOP:
.DB $ ED , $ B7 ; INW HL,(C)
INW HL ,( C ) ; WORD INPUT
BIT 7 , H ; CHECK EN BIT OF TDR
JR NZ , Z2DMALOOP ; LOOP WHILE ACTIVE
;
@ -5510,7 +5533,7 @@ Z280_SYSCALL:
POP HL
Z280_SYSCALL_GO:
CALL $ FFFF ; PARM SET ABOVE
.DB $ ED , $ 55 ; RETIL
RETIL ; RETURN FROM INT
# ENDIF
;
;==================================================================================================
@ -6288,7 +6311,7 @@ PS_PRTDC:
RET ; DONE
;
PS_PRTDC1:
; PRINT ROM/RO M DISK CAPACITY IN KB
; PRINT ROM/RA M DISK CAPACITY IN KB
LD B , BF_DIOCAP ; HBIOS FUNC: GET CAPACTIY
RST 08 ; DE:HL := BLOCKS
JP NZ , PS_PRTNUL ; MEDIA PROBLEM
@ -6933,8 +6956,6 @@ HB_SECS .FILL 4,0 ; 32 BIT SECONDS COUNTER
HB_CPUTYPE .DB 0 ; 0=Z80, 1=80180, 2=SL1960, 3=ASCI BRG
HB_CPUOSC .DW CPUOSC ; ACTUAL CPU HARDWARE OSC FREQ IN KHZ
;
IOPRVAL .DW 0 ; TEMP STORAGE FOR IOPR
;
HB_BATCOND .DB 0 ; BATTERY CONDITION (0=LOW, 1=OK)
;
RTCDEFVAL .DB RTCDEF ; STORAGE FOR RTC DEFAULT VALUE