|
|
|
@ -124,7 +124,7 @@ MODCNT .SET MODCNT + 1 |
|
|
|
RET |
|
|
|
.FILL (038H - $),0FFH ; RST 38 / IM1 INT |
|
|
|
#IF (INTMODE == 1) |
|
|
|
JP INT_IM1 ; JP TO INTERRUPT HANDLER IN HI MEM |
|
|
|
JP INT_IM1 ; JP TO INTERRUPT HANDLER IN HI MEM |
|
|
|
#ELSE |
|
|
|
RETI ; RETURN W/ INTS DISABLED |
|
|
|
#ENDIF |
|
|
|
@ -237,12 +237,12 @@ HBX_INVOKE: |
|
|
|
LD A,BID_BIOS ; HBIOS BANK |
|
|
|
CALL HBX_BNKSEL ; SELECT IT |
|
|
|
LD SP,HB_STACK ; NOW USE FULL HBIOS STACK IN HBIOS BANK |
|
|
|
|
|
|
|
|
|
|
|
CALL HB_DISPATCH ; CALL HBIOS FUNCTION DISPATCHER |
|
|
|
|
|
|
|
LD SP,HBX_TMPSTK ; USE SMALL TEMP STACK FRAME IN HI MEM FOR BANK SWITCH |
|
|
|
PUSH AF ; SAVE AF (FUNCTION RETURN) |
|
|
|
|
|
|
|
|
|
|
|
LD A,(HB_INVBNK) ; LOAD ORIGINAL BANK |
|
|
|
CALL HBX_BNKSEL ; SELECT IT |
|
|
|
POP AF ; RESTORE AF |
|
|
|
@ -479,43 +479,66 @@ HBX_STACK .EQU $ |
|
|
|
; |
|
|
|
; HBIOS INTERRUPT VECTOR TABLE (16 ENTRIES) |
|
|
|
; |
|
|
|
; # SBC N8,MK4 ZETA ZETA2 |
|
|
|
; --- -------------- -------------- -------------- -------------- |
|
|
|
; 0 CTC0A Z180/INT1 CTC0A/PRESCL |
|
|
|
; 1 CTC0B Z180/INT2 CTC0B/TIMER |
|
|
|
; 2 CTC0C Z180/TIM0 CTC0C/UART |
|
|
|
; 3 CTC0D Z180/TIM1 CTC0D/FDC |
|
|
|
; 4 Z180/DMA0 |
|
|
|
; 5 Z180/DMA1 |
|
|
|
; 6 Z180/CSIO |
|
|
|
; 7 SIO0 Z180/SER0 |
|
|
|
; 8 SIO1 Z180/SER1 |
|
|
|
; 9 PIO0A PIO0A |
|
|
|
; 10 PIO0B PIO0B |
|
|
|
; 11 PIO1A PIO1A |
|
|
|
; 12 PIO1B PIO1B |
|
|
|
; 13 |
|
|
|
; 14 |
|
|
|
; 15 |
|
|
|
; 16 |
|
|
|
; |
|
|
|
; # RC RC180 EZZ80 |
|
|
|
; --- -------------- -------------- ------------- |
|
|
|
; 0 CTC0A Z180/INT1 CTC0A/SIO0CLK |
|
|
|
; 1 CTC0B Z180/INT2 CTC0B/SIO1CLK |
|
|
|
; 2 CTC0C Z180/TIM0 CTC0C/PRESCL |
|
|
|
; 3 CTC0D Z180/TIM1 CTC0D/TIMER |
|
|
|
; 4 Z180/DMA0 |
|
|
|
; 5 Z180/DMA1 |
|
|
|
; 6 Z180/CSIO |
|
|
|
; 7 SIO0 Z180/SER0 SIO0 |
|
|
|
; 8 SIO1 Z180/SER1 SIO1 |
|
|
|
; 9 PIO0A PIO0A PIO0A |
|
|
|
; 10 PIO0B PIO0B PIO0B |
|
|
|
; 11 PIO1A PIO1A PIO1A |
|
|
|
; 12 PIO1B PIO1B PIO1B |
|
|
|
; 13 |
|
|
|
; 14 |
|
|
|
; 15 |
|
|
|
; 16 |
|
|
|
; |
|
|
|
HBX_IVT: |
|
|
|
.DW INT_BAD ; IVT_INT1 |
|
|
|
.DW INT_BAD ; IVT_INT2 |
|
|
|
.DW INT_BAD ; IVT_TIM0 |
|
|
|
.DW INT_BAD ; IVT_TIM1 |
|
|
|
.DW INT_BAD ; IVT_DMA0 |
|
|
|
.DW INT_BAD ; IVT_DMA1 |
|
|
|
.DW INT_BAD ; IVT_CSIO |
|
|
|
.DW INT_BAD ; IVT_SER0 |
|
|
|
.DW INT_BAD ; IVT_SER1 |
|
|
|
.DW INT_BAD ; IVT_PIO0 |
|
|
|
.DW INT_BAD ; IVT_PIO1 |
|
|
|
.DW INT_BAD ; IVT_PIO2 |
|
|
|
.DW INT_BAD ; IVT_PIO3 |
|
|
|
.DW INT_BAD ; |
|
|
|
.DW INT_BAD ; |
|
|
|
.DW INT_BAD ; |
|
|
|
.DW INT_BAD |
|
|
|
.DW INT_BAD |
|
|
|
.DW INT_BAD |
|
|
|
.DW INT_BAD |
|
|
|
.DW INT_BAD |
|
|
|
.DW INT_BAD |
|
|
|
.DW INT_BAD |
|
|
|
.DW INT_BAD |
|
|
|
.DW INT_BAD |
|
|
|
.DW INT_BAD |
|
|
|
.DW INT_BAD |
|
|
|
.DW INT_BAD |
|
|
|
.DW INT_BAD |
|
|
|
.DW INT_BAD |
|
|
|
.DW INT_BAD |
|
|
|
.DW INT_BAD |
|
|
|
; |
|
|
|
HBX_IVTCNT .EQU ($ - HBX_IVT) / 2 |
|
|
|
; |
|
|
|
HBX_ITBL: |
|
|
|
.DW HB_BADINT |
|
|
|
.DW HB_BADINT |
|
|
|
.DW HB_BADINT |
|
|
|
.DW HB_BADINT |
|
|
|
.DW HB_BADINT |
|
|
|
.DW HB_BADINT |
|
|
|
.DW HB_BADINT |
|
|
|
.DW HB_BADINT |
|
|
|
.DW HB_BADINT |
|
|
|
.DW HB_BADINT |
|
|
|
.DW HB_BADINT |
|
|
|
.DW HB_BADINT |
|
|
|
.DW HB_BADINT |
|
|
|
.DW HB_BADINT |
|
|
|
.DW HB_BADINT |
|
|
|
.DW HB_BADINT |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; INTERRUPT HANDLER STUBS |
|
|
|
@ -592,7 +615,7 @@ HBX_INT: ; COMMON INTERRUPT ROUTING CODE |
|
|
|
PUSH BC ; SAVE BC |
|
|
|
PUSH DE ; SAVE DE |
|
|
|
PUSH IY ; SAVE IY |
|
|
|
|
|
|
|
|
|
|
|
LD A,BID_BIOS ; HBIOS BANK |
|
|
|
CALL HBX_BNKSEL_INT ; SELECT IT |
|
|
|
|
|
|
|
@ -600,7 +623,7 @@ HBX_INT: ; COMMON INTERRUPT ROUTING CODE |
|
|
|
|
|
|
|
LD A,(HB_CURBNK) ; GET PRE-INT BANK |
|
|
|
CALL HBX_BNKSEL ; SELECT IT |
|
|
|
|
|
|
|
|
|
|
|
; RESTORE STATE |
|
|
|
POP IY ; RESTORE IY |
|
|
|
POP DE ; RESTORE DE |
|
|
|
@ -679,12 +702,12 @@ HB_STACK .EQU $ ; TOP OF HBIOS STACK |
|
|
|
HB_START: |
|
|
|
DI ; NO INTERRUPTS |
|
|
|
IM 1 ; INTERRUPT MODE 1 |
|
|
|
; |
|
|
|
; |
|
|
|
#IFDEF DIAGP |
|
|
|
LD A,%00000001 |
|
|
|
OUT (DIAGP),A |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; |
|
|
|
LD SP,HBX_LOC ; SETUP INITIAL STACK JUST BELOW HBIOS PROXY |
|
|
|
; |
|
|
|
#IF ((PLATFORM == PLT_N8) | (PLATFORM == PLT_MK4) | (PLATFORM == PLT_RC180)) |
|
|
|
@ -693,7 +716,7 @@ HB_START: |
|
|
|
OUT0 (Z180_ICR),A |
|
|
|
|
|
|
|
DIAG(%00000010) |
|
|
|
|
|
|
|
|
|
|
|
; DISABLE REFRESH |
|
|
|
XOR A |
|
|
|
OUT0 (Z180_RCR),A |
|
|
|
@ -912,7 +935,7 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK |
|
|
|
PRTX(STR_BANNER) |
|
|
|
; |
|
|
|
DIAG(%11111111) |
|
|
|
; |
|
|
|
; |
|
|
|
; IO PORT SCAN |
|
|
|
; |
|
|
|
#IF 0 |
|
|
|
@ -956,7 +979,7 @@ PSCNX .EQU $ + 1 |
|
|
|
; SETUP Z80 IVT AND INT MODE 2 |
|
|
|
LD A,HBX_IVT >> 8 ; SETUP HI BYTE OF IVT ADDRESS |
|
|
|
LD I,A ; ... AND PLACE IT IN I REGISTER |
|
|
|
|
|
|
|
|
|
|
|
#IF ((PLATFORM == PLT_N8) | (PLATFORM == PLT_MK4) | (PLATFORM == PLT_RC180)) |
|
|
|
; SETUP Z180 IVT |
|
|
|
XOR A ; SETUP LO BYTE OF IVT ADDRESS |
|
|
|
@ -1446,7 +1469,7 @@ CIO_DISPATCH: |
|
|
|
|
|
|
|
LD IY,CIO_TBL ; POINT IY TO START OF DIO TABLE |
|
|
|
CALL HB_DISPCALL ; GO TO GENERIC API CALL CODE |
|
|
|
|
|
|
|
|
|
|
|
POP IY ; RESTORE IY |
|
|
|
RET ; AND DONE |
|
|
|
; |
|
|
|
@ -1479,7 +1502,7 @@ CIO_ADDENT: |
|
|
|
CIO_FNCNT .EQU 7 ; NUMBER OF CIO FUNCS (FOR RANGE CHECK) |
|
|
|
CIO_MAX .EQU 32 ; UP TO 32 UNITS |
|
|
|
CIO_SIZ .EQU CIO_MAX * 4 ; EACH ENTRY IS 4 BYTES |
|
|
|
; |
|
|
|
; |
|
|
|
.DB CIO_FNCNT ; CIO FUNCTION COUNT (FOR RANGE CHECK) |
|
|
|
.DB CIO_MAX ; MAX ENTRY COUNT TABLE PREFIX |
|
|
|
CIO_CNT .DB 0 ; ENTRY COUNT PREFIX |
|
|
|
@ -1518,7 +1541,7 @@ DIO_DISPCALL: |
|
|
|
|
|
|
|
LD IY,DIO_TBL ; POINT IY TO START OF DIO TABLE |
|
|
|
CALL HB_DISPCALL ; GO TO GENERIC API CALL CODE |
|
|
|
|
|
|
|
|
|
|
|
POP IY ; RESTORE IY |
|
|
|
RET ; AND DONE |
|
|
|
; |
|
|
|
@ -1542,7 +1565,7 @@ DIO_ADDENT: |
|
|
|
DIO_FNCNT .EQU 12 ; NUMBER OF DIO FUNCS (FOR RANGE CHECK) |
|
|
|
DIO_MAX .EQU 16 ; UP TO 16 UNITS |
|
|
|
DIO_SIZ .EQU DIO_MAX * 4 ; EACH ENTRY IS 4 BYTES |
|
|
|
; |
|
|
|
; |
|
|
|
.DB DIO_FNCNT ; DIO FUNCTION COUNT (FOR RANGE CHECK) |
|
|
|
.DB DIO_MAX ; MAX ENTRY COUNT TABLE PREFIX |
|
|
|
DIO_CNT .DB 0 ; ENTRY COUNT PREFIX |
|
|
|
@ -1577,7 +1600,7 @@ VDA_DISPATCH: |
|
|
|
|
|
|
|
LD IY,VDA_TBL ; POINT IY TO START OF DIO TABLE |
|
|
|
CALL HB_DISPCALL ; GO TO GENERIC API CALL CODE |
|
|
|
|
|
|
|
|
|
|
|
POP IY ; RESTORE IY |
|
|
|
RET ; AND DONE |
|
|
|
; |
|
|
|
@ -1951,7 +1974,7 @@ SYS_INTINFO: |
|
|
|
; ROUTINE SHARED BY INT GET/SET. RETURNS ADDRESS OF VECTOR FOR SPECIFIED LIST / TABLE |
|
|
|
; POSITION. ZF SET ON RETURN FOR SUCCESS, ELSE ERROR. |
|
|
|
; |
|
|
|
SYS_INTVECADR: |
|
|
|
SYS_INTVECADR: |
|
|
|
#IF (INTMODE == 0) |
|
|
|
CALL PANIC ; INVALID FOR INT MODE 0 |
|
|
|
OR $FF |
|
|
|
@ -2965,10 +2988,10 @@ PS_SERIAL: |
|
|
|
PUSH BC ; SAVE UNIT INDEX FOR LATER |
|
|
|
; |
|
|
|
; UNIT COLUMN |
|
|
|
PRTS("Char $" |
|
|
|
PRTS("Char $") |
|
|
|
LD A,C ; MOVE UNIT NUM TO A |
|
|
|
CALL PRTDECB ; PRINT IT, ASSUME SINGLE DIGIT |
|
|
|
PRTS(" $") ; PAD TO NEXT COLUMN |
|
|
|
PRTS(" $") ; PAD TO NEXT COLUMN |
|
|
|
; |
|
|
|
; DEVICE COLUMN |
|
|
|
LD B,BF_CIODEVICE ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C |
|
|
|
|