@ -756,6 +756,12 @@ INT_IM1:
HBX_INT: ; COMMON INTERRUPT ROUTING CODE
;
# IF ( MEMMGR = = MM_Z280 )
;
; THIS CODE ASSUMES Z280 IM 3. IM 1 AND IM 2 ON Z280
; DO NOT SAVE MSR AT INTERRUPT MAKING IT VIRTUALLY IMPOSSIBLE
; TO RETURN FROM THE INTERRUPT TO THE CORRECT MODE (SYSTEM
; OR USER). THIS IS BECAUSE THERE IS NO WAY TO KNOW WHETHER
; SYSTEM OR USER MODE WAS ACTIVE AT THE TIME OF THE INTERRUPT.
;
EX ( SP ), HL ; SAVE HL AND GET INT JP TABLE OFFSET
@ -1097,9 +1103,9 @@ Z280_INITZ:
; SET DEFAULT CPU CLOCK MULTIPLIERS (XTAL / 2)
;
; IT HAS BEEN REPORTED THAT CMR NEEDS TO BE SET PRIOR TO CCR
; SEEMS COUNTER-INTUITIVE AND I NEVER EXPERIENCED A PROBLEM
; RELATED TO ORDER, BUT JUST FOR GOOD MEASURE, CMR
; IS SET PRIOR TO CCR BELOW.
; WHEN USING AN INPUT FREQUENCY THAT IS XTAL / 2.
; I NEVER EXPERIENCED A PROBLEM RELATED TO ORDER, BUT JUST
; FOR GOOD MEASURE, CMR IS SET PRIOR TO CCR BELOW.
; https://www.retrobrewcomputers.org/forum/index.php?t=msg&th=316&#msg_5045
XOR A
OUT0 ( Z180_CMR ), A
@ -1610,7 +1616,7 @@ HB_CPU2:
;
# IF ( CPUFAM = = CPU_Z280 )
;
# IF ( INT MOD E = = 3 )
# IF ( MEMMGR = = MM_Z280 )
;
Z280_TC .EQU CPUOSC / 4 / 50 / 2 ; TIME CONSTANT
;
@ -1668,26 +1674,9 @@ Z280_TC .EQU CPUOSC / 4 / 50 / 2 ; TIME CONSTANT
;
; PRE-CONSOLE INITIALIZATION
;
LD A , FORCECON ; CALCULATE PRE-INIT TABLE ; A IS INDEX OF CONSOLE DEVICE ENTRY
RLCA ; ENTRY THAT WE WANT TO ; A IS OFFSET OF CONSOLE DEVICE ENTRY
LD DE ,( HB_PCINITTBL ) ; EXECUTE FIRST ; DE IS VALUE OF TOP ENTRY
LD HL , HB_PCINITTBL ; HL IS ADDRESS OF TOP OF TABLE
PUSH HL ; PUSH (1) TOP OF TABLE
PUSH DE ; PUSH (2) VALUE OF TOP ENTRY
PUSH HL ; PUSH (3) TOP OF TABLE
CALL ADDHLA ; HL IS ADDRESS OF DESIRED CONSOLE ENTRY
POP DE ; PLACE IT AT THE TOP OF THE ; POP (3) DE IS TOP OF TABLE
PUSH HL ; TABLE BY SWAPPING IT ; PUSH (3) ADDRESS OF DESIRED CONSOLE ENTRY
LDI ; WITH THE FIRST (DUMMY) ; COPY DESIRED ENTRY
LDI ; ENTRY ; ... TO TOP OF TABLE
POP HL ; POP (3) HL IS ADDRESS OF DESIRED CONSOLE ENTRY
POP DE ; POP (2) DE IS VALUE OF ORIGINAL TOP ENTRY
LD ( HL ), E ; SAVE DE OVER ORIGINAL ENTRY
INC HL
LD ( HL ), D
LD B , HB_PCINITTBLLEN
POP DE ; POP (1) DE IS ADDRESS OF TOP OF TABLE
LD DE , HB_PCINITTBL ; POINT TO PRECONSOLE INIT TABLE
LD B , HB_PCINITTBLLEN ; NUMBER OF ENTRIES
;
# IF ( BT_REC_TYPE ! = BT_REC_NONE )
LD A ,( HB_BOOT_REC ) ; IF WE ARE IN RECOVERY MODE
OR A ; POINT TO THE RECOVER MODE
@ -1695,7 +1684,7 @@ Z280_TC .EQU CPUOSC / 4 / 50 / 2 ; TIME CONSTANT
LD B , HB_PCINITRLEN
LD DE , HB_PCINIT_REC
NOT_REC_M0:
;
# ENDIF
CALL CALLLIST ; PROCESS THE PRE-INIT CALL TABLE
;
@ -1717,8 +1706,15 @@ NOT_REC_M0:
; NOW THAT HBIOS IS READY, SET THE CONSOLE UNIT TO ACTIVATE CONSOLE I/O
; VIA HBIOS.
;
XOR A ; INITIALLY, FIRST SERIAL UNIT IS CONSOLE
LD ( CB_CONDEV ), A ; SAVE IT, ACTIVATES CONSOLE ON HBIOS
XOR A ; FAILSAFE VALUE FOR BOOT CONSOLE DEVICE
LD ( CB_CONDEV ), A ; SAVE IT
;
LD A ,( CIO_CNT ) ; GET COUNT OF CHAR DEVICES
CP BOOTCON + 1 ; COUNT - (DEVICE + 1)
JR C , HB_CONRDY ; IF TOO HIGH, JUST USE FAILSAFE
LD A , BOOTCON ; GET REQUESTED CONSOLE DEV
LD ( CB_CONDEV ), A ; SAVE IT
HB_CONRDY:
# IF ( WBWDEBUG = = USEMIO ) ; OUTPUT ANY CACHED DEBUG TEXT
LD HL , MIOOUTPTR
@ -2179,7 +2175,6 @@ HB_INITRLEN .EQU (($ - HB_INIT_REC) / 2)
;==================================================================================================
;
HB_PCINITTBL:
.DW CALLDUMMY ; RESERVED FOR FORCING PRIMARY CONSOLE
# IF ( ASCIENABLE )
.DW ASCI_PREINIT
# ENDIF
@ -4199,6 +4194,11 @@ Z280_IVT:
; REGISTERS AF, BC, HL DESTROYED
;
Z280_BNKSEL:
; *DEBUG*
;CALL PC_LBKT
;CALL PRTHEXBYTE
;CALL PC_RBKT
; SELECT I/O PAGE $FE (SAVING PREVIOUS VALUE)
LD C , Z280_IOPR ; REG C POINTS TO I/O PAGE REGISTER
LDCTL HL ,( C ) ; GET CURRENT I/O PAGE