|
|
|
@ -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 (INTMODE == 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 |
|
|
|
|