Browse Source

Z280 Interrupt Mode 3 Work in Progress

pull/199/head
Wayne Warthen 5 years ago
parent
commit
e9ae0a8e6d
  1. 3
      Source/Apps/RTC.asm
  2. 4
      Source/HBIOS/Config/RCZ280_nat.asm
  3. 304
      Source/HBIOS/hbios.asm
  4. 8
      Source/HBIOS/romldr.asm
  5. 6
      Source/HBIOS/sio.asm
  6. 4
      Source/HBIOS/std.asm

3
Source/Apps/RTC.asm

@ -1331,9 +1331,6 @@ DELAY_LOOP: ; LOOP IS 26TS
OR L ; 4TS OR L ; 4TS
JR NZ,DELAY_LOOP ; 12TS JR NZ,DELAY_LOOP ; 12TS
; RESTART SYSTEM FROM ROM BANK 0, ADDRESS $0000 ; RESTART SYSTEM FROM ROM BANK 0, ADDRESS $0000
;LD A,BID_BOOT ; BOOT BANK
;LD HL,0 ; ADDRESS ZERO
;CALL HB_BNKCALL ; DOES NOT RETURN
LD B,BF_SYSRESET ; SYSTEM RESTART LD B,BF_SYSRESET ; SYSTEM RESTART
LD C,BF_SYSRES_COLD ; COLD START LD C,BF_SYSRES_COLD ; COLD START
CALL $FFF0 ; CALL HBIOS CALL $FFF0 ; CALL HBIOS

4
Source/HBIOS/Config/RCZ280_nat.asm

@ -32,14 +32,14 @@ CPUOSC .SET 24000000 ; CPU OSC FREQ IN MHZ
; ;
MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280] MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280]
; ;
INTMODE .SET 1
INTMODE .SET 3
; ;
Z280_MEMWAIT .SET 0 ; Z280: MEMORY WAIT STATES (0-3) Z280_MEMWAIT .SET 0 ; Z280: MEMORY WAIT STATES (0-3)
Z280_IOWAIT .SET 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) Z280_IOWAIT .SET 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)
Z280_INTWAIT .SET 0 ; Z280: INT ACK WAIT STATUS (0-3) Z280_INTWAIT .SET 0 ; Z280: INT ACK WAIT STATUS (0-3)
; ;
UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
ACIAENABLE .SET TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM)
ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM)
SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
; ;
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)

304
Source/HBIOS/hbios.asm

@ -113,12 +113,12 @@ MODCNT .SET MODCNT + 1
#DEFINE HB_DI ; #DEFINE HB_DI ;
#DEFINE HB_EI ; #DEFINE HB_EI ;
#ENDIF #ENDIF
#IF ((INTMODE == 1) | (INTMODE == 2))
; MODE 1 OR 2 INTERRUPT HANDLING
#IF ((INTMODE == 1) | (INTMODE == 2) | (INTMODE == 3))
; MODE 1 OR 2 OR 3 INTERRUPT HANDLING
#DEFINE HB_DI DI #DEFINE HB_DI DI
#DEFINE HB_EI EI #DEFINE HB_EI EI
#ENDIF #ENDIF
#IF (INTMODE > 2)
#IF (INTMODE > 3)
.ECHO "*** ERROR: INVALID INTMODE SETTING!!!\n" .ECHO "*** ERROR: INVALID INTMODE SETTING!!!\n"
!!! ; FORCE AN ASSEMBLY ERROR !!! ; FORCE AN ASSEMBLY ERROR
#ENDIF #ENDIF
@ -377,6 +377,25 @@ HBX_INVOKE:
POP HL ; RESTORE HL POP HL ; RESTORE HL
#ENDIF #ENDIF
;#IF (MEMMGR == MM_Z280)
#IF 0
LD A,(HB_CURBNK) ; GET CURRENT BANK
LD (HB_INVBNK),A ; SAVE INVOCATION BANK
LD A,BID_BIOS ; HBIOS BANK
LD (HB_CURBNK),A ; SET AS CURRENT BANK
.DB $ED,$71 ; SC
.DW HB_DISPATCH ; SC PARAMETER
PUSH AF ; SAVE AF (FUNCTION RETURN)
LD A,(HB_INVBNK) ; LOAD ORIGINAL BANK
LD (HB_CURBNK),A
POP AF ; RESTORE AF
#ELSE
LD (HBX_INVSP),SP ; SAVE ORIGINAL STACK FRAME LD (HBX_INVSP),SP ; SAVE ORIGINAL STACK FRAME
LD SP,HBX_BUF_END ; BORROW HBX_BUF FOR TEMP STACK LD SP,HBX_BUF_END ; BORROW HBX_BUF FOR TEMP STACK
@ -398,6 +417,8 @@ HBX_INVOKE:
LD SP,0 ; RESTORE ORIGINAL STACK FRAME LD SP,0 ; RESTORE ORIGINAL STACK FRAME
HBX_INVSP .EQU $ - 2 HBX_INVSP .EQU $ - 2
#ENDIF
#IF (HBIOS_MUTEX == TRUE) #IF (HBIOS_MUTEX == TRUE)
PUSH HL ; SAVE HL PUSH HL ; SAVE HL
LD HL,HB_LOCK ; POINT TO LOCK LD HL,HB_LOCK ; POINT TO LOCK
@ -496,7 +517,17 @@ HBX_BNKSEL1:
RET ; DONE RET ; DONE
#ENDIF #ENDIF
#IF (MEMMGR == MM_Z280) #IF (MEMMGR == MM_Z280)
JP Z280_BNKSEL ; DO THE REAL WORK
.DB $ED,$71 ; SC
.DW Z280_BNKSEL ; SC PARAMETER
RET
;
Z280_SYSCALL:
EX (SP),HL
LD (Z280_SCADR),HL
POP HL
Z280_SCADR .EQU $ + 1
CALL $FFFF
.DB $ED,$55 ; RETIL
#ENDIF #ENDIF
#IF (MEMMGR == MM_ZRC) #IF (MEMMGR == MM_ZRC)
BIT 7,A ; BIT 7 SET REQUESTS RAM PAGE BIT 7,A ; BIT 7 SET REQUESTS RAM PAGE
@ -524,19 +555,9 @@ HBX_ROM:
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; ;
HBX_BNKCPY: HBX_BNKCPY:
#IF (CPUFAM == CPU_Z280)
PUSH IY
PUSH BC
LD C,Z280_MSR
.DB $FD,$ED,$66 ; LDCTL IY,(C)
POP BC
PUSH IY
DI
#ELSE
LD A,I LD A,I
DI DI
PUSH AF PUSH AF
#ENDIF
LD (HBX_BC_SP),SP ; PUT STACK LD (HBX_BC_SP),SP ; PUT STACK
LD SP,HBX_TMPSTK ; ... IN HI MEM LD SP,HBX_TMPSTK ; ... IN HI MEM
@ -566,18 +587,9 @@ HBX_BC_LAST:
LD SP,$FFFF ; RESTORE STACK LD SP,$FFFF ; RESTORE STACK
HBX_BC_SP .EQU $ - 2 ; ... TO ORIGINAL VALUE HBX_BC_SP .EQU $ - 2 ; ... TO ORIGINAL VALUE
#IF (CPUFAM == CPU_Z280)
POP IY
PUSH BC
LD C,Z280_MSR
.DB $FD,$ED,$6E ; LDCTL (C),IY
POP BC
POP IY
#ELSE
POP AF POP AF
JP PO,$+4 JP PO,$+4
EI EI
#ENDIF
RET RET
; ;
HBX_BC_ITER: HBX_BC_ITER:
@ -678,7 +690,7 @@ HBX_INTSTK .EQU $
!!! ; FORCE AN ASSEMBLY ERROR !!! ; FORCE AN ASSEMBLY ERROR
#ENDIF #ENDIF
; ;
#IF (INTMODE == 2)
#IF ((INTMODE == 2) | (INTMODE == 3))
; ;
; HBIOS INTERRUPT SLOT ASSIGNMENTS ; HBIOS INTERRUPT SLOT ASSIGNMENTS
; ;
@ -750,47 +762,83 @@ INT_IM1:
; ;
#IF (INTMODE > 0) #IF (INTMODE > 0)
; ;
; COMMON INTERRUPT DISPATCHING CODE
; SETUP AND CALL HANDLER IN BIOS BANK
;
HBX_INT: ; COMMON INTERRUPT ROUTING CODE HBX_INT: ; COMMON INTERRUPT ROUTING CODE
;
#IF (MEMMGR == MM_Z280)
; ;
EX (SP),HL ; SAVE HL AND GET INT JP TABLE OFFSET EX (SP),HL ; SAVE HL AND GET INT JP TABLE OFFSET
; SAVE STATE (HL SAVED PREVIOUSLY ON ORIGINAL STACK FRAME)
PUSH AF ; SAVE AF
PUSH BC ; SAVE BC
PUSH DE ; SAVE DE
PUSH IY ; SAVE IY
;
; HANDLE INT VIA JP TABLE IN HBIOS
LD L,(HL) ; OFFSET INTO JP TABLE FOR THIS INT
LD H,HB_IVT >> 8 ; MSB OF HBIOS INT JP TABLE
CALL JPHL ; CALL HANDLER VIA INT JP TABLE
;
; RESTORE STATE
POP IY ; RESTORE IY
POP DE ; RESTORE DE
POP BC ; RESTORE BC
POP AF ; RESTORE AF
POP HL ; RESTORE HL
;
; BURN THE REASON CODE
EX (SP),HL ; HL TO STK, RC TO HL
POP HL ; RESTORE HL
CALL HBX_RETI ; RETI FOR Z80 PERIPHERALS
.DB $ED,$55 ; BACK TO USER LAND
;
HBX_RETI:
RETI
;
#ELSE
;
; COMMON INTERRUPT DISPATCHING CODE
; SETUP AND CALL HANDLER IN BIOS BANK
;
EX (SP),HL ; SAVE HL AND GET INT JP TABLE OFFSET
;
LD (HBX_INT_SP),SP ; SAVE ORIGINAL STACK FRAME LD (HBX_INT_SP),SP ; SAVE ORIGINAL STACK FRAME
LD SP,HBX_INTSTK ; USE DEDICATED INT STACK FRAME IN HI MEM LD SP,HBX_INTSTK ; USE DEDICATED INT STACK FRAME IN HI MEM
;
; SAVE STATE (HL SAVED PREVIOUSLY ON ORIGINAL STACK FRAME) ; SAVE STATE (HL SAVED PREVIOUSLY ON ORIGINAL STACK FRAME)
PUSH AF ; SAVE AF PUSH AF ; SAVE AF
PUSH BC ; SAVE BC PUSH BC ; SAVE BC
PUSH DE ; SAVE DE PUSH DE ; SAVE DE
PUSH IY ; SAVE IY PUSH IY ; SAVE IY
;
LD A,BID_BIOS ; HBIOS BANK LD A,BID_BIOS ; HBIOS BANK
CALL HBX_BNKSEL_INT ; SELECT IT CALL HBX_BNKSEL_INT ; SELECT IT
;
LD L,(HL) ; OFFSET INTO JP TABLE FOR THIS INT LD L,(HL) ; OFFSET INTO JP TABLE FOR THIS INT
LD H,HB_IVT >> 8 ; MSB OF HBIOS INT JP TABLE LD H,HB_IVT >> 8 ; MSB OF HBIOS INT JP TABLE
;
CALL JPHL ; CALL HANDLER VIA INT JP TABLE CALL JPHL ; CALL HANDLER VIA INT JP TABLE
;
LD A,(HB_CURBNK) ; GET PRE-INT BANK LD A,(HB_CURBNK) ; GET PRE-INT BANK
CALL HBX_BNKSEL ; SELECT IT CALL HBX_BNKSEL ; SELECT IT
;
; RESTORE STATE ; RESTORE STATE
POP IY ; RESTORE IY POP IY ; RESTORE IY
POP DE ; RESTORE DE POP DE ; RESTORE DE
POP BC ; RESTORE BC POP BC ; RESTORE BC
POP AF ; RESTORE AF POP AF ; RESTORE AF
;
LD SP,$FFFF ; RESTORE ORIGINAL STACK FRAME LD SP,$FFFF ; RESTORE ORIGINAL STACK FRAME
HBX_INT_SP .EQU $ - 2 HBX_INT_SP .EQU $ - 2
;
POP HL ; RESTORE HL POP HL ; RESTORE HL
;
HB_EI ; ENABLE INTERRUPTS HB_EI ; ENABLE INTERRUPTS
RETI ; AND RETURN RETI ; AND RETURN
; ;
#ENDIF
#ENDIF #ENDIF
; ;
; SMALL TEMPORARY STACK FOR USE BY HBX_BNKCPY ; SMALL TEMPORARY STACK FOR USE BY HBX_BNKCPY
@ -899,7 +947,7 @@ HB_IVT:
; NOTE THAT EACH ENTRY HAS A FILLER BYTE OF VALUE ZERO. THIS BYTE ; NOTE THAT EACH ENTRY HAS A FILLER BYTE OF VALUE ZERO. THIS BYTE
; HAS NO FUNCTION. IT IS JUST USED TO MAKE ENTRIES AN EVEN 4 BYTES. ; HAS NO FUNCTION. IT IS JUST USED TO MAKE ENTRIES AN EVEN 4 BYTES.
; ;
#IF (INTMODE == 2)
#IF ((INTMODE == 2) | (INTMODE == 3))
; ;
HB_IVT: HB_IVT:
HB_IVT00: JP HB_BADINT \ .DB 0 HB_IVT00: JP HB_BADINT \ .DB 0
@ -982,8 +1030,21 @@ HB_START:
; LD BC,Z280_BNKSELZ-Z280_BNKSEL ; BYTE COUNT TO COPY ; LD BC,Z280_BNKSELZ-Z280_BNKSEL ; BYTE COUNT TO COPY
; LDIR ; COPY ; LDIR ; COPY
; ;
DIAG(%11111110)
; JP XZ280_BNKSELZ ; JUMP TO CODE CONTINUATION
; CONFIGURE Z280 INT/TRAP VECTOR TABLE POINTER REGISTER
LD C,Z280_VPR
LD HL,$0010 ; TOP 16 BITS OF PHYSICAL ADR OF IVT
.DB $ED,$6E ; LDCTL (C),HL
;; TEST SYSTEM CALL
;.DB $ED,$71 ; SC
;.DW Z280_BNKSEL ; SC PARAMETER
;
;LD A,%10101010
;OUT (DIAGPORT),A
;DI
;HALT
JR Z280_INITZ ; JUMP TO CODE CONTINUATION JR Z280_INITZ ; JUMP TO CODE CONTINUATION
; ;
Z280_PDRTBL: Z280_PDRTBL:
@ -1006,6 +1067,58 @@ Z280_PDRTBL:
.DW ($0FE << 4) | $A .DW ($0FE << 4) | $A
.DW ($0FF << 4) | $A .DW ($0FF << 4) | $A
; ;
Z280_PRIVINST:
EX (SP),HL ; GET MSR, SAVE HL
LD (HB_MSRSAV),HL ; SAVE IT
POP HL ; RECOVER HL, POP STACK
EX (SP),HL ; GET ADR, SAVE HL
PUSH AF
PUSH BC
PUSH DE
LD A,(HL)
INC HL ; BUMP PAST PRIV INST
; HANDLE DI
CP $F3 ; DI?
JR NZ,Z280_PRIVINST2
DI ; DO THE DI
JR Z280_PRIVINSTX
Z280_PRIVINST2:
; HANDLE EI
CP $FB ; EI?
JR NZ,Z280_PRIVINST_HALT
EI ; DO THE EI
JR Z280_PRIVINSTX
Z280_PRIVINST_HALT:
; SOMETHING ELSE, DIAGNOSE & HALT SYSTEM
CALL NEWLINE
LD DE,Z280_PRIVSTR
CALL WRITESTR
CALL PRTHEXWORDHL
DI
HALT
Z280_PRIVINSTX:
POP DE
POP BC
POP AF
EX (SP),HL ; RECOVER HL, ADR TO STK
PUSH HL ; SAVE HL
LD HL,(HB_MSRSAV) ; GET SAVED MSR
EX (SP),HL ; MSR TO STK, RECOVER HL
.DB $ED,$55 ; RETIL
;
HB_MSRSAV .DW 0
;
Z280_PRIVSTR .TEXT "\n\n*** Privileged Instruction @$"
;
Z280_INITZ: Z280_INITZ:
; ;
#ENDIF #ENDIF
@ -1443,6 +1556,17 @@ HB_CPU2:
IM 2 ; SWITCH TO INT MODE 2 IM 2 ; SWITCH TO INT MODE 2
#ENDIF #ENDIF
; ;
#IF (INTMODE == 3)
;
; SETUP Z280 INT A FOR VECTORED INTERRUPTS
LD HL,%0010000000000000
LD C,Z280_ISR
.DB $ED,$6E ; LDCTL (C),HL
;
.DB $ED,$4E ; IM 3
;
#ENDIF
;
#IF (PLATFORM == PLT_SBC) #IF (PLATFORM == PLT_SBC)
; ;
#IF (HTIMENABLE) ; SIMH TIMER #IF (HTIMENABLE) ; SIMH TIMER
@ -1858,6 +1982,63 @@ IS_REC_M1:
#ENDIF #ENDIF
; ;
INITSYS3: INITSYS3:
;
#IF (MEMMGR == MM_Z280)
; LEAVE SYSTEM MODE STACK POINTING TO AN OK PLACE
LD SP,HB_STACK - $40 ; *** FIX ***
HB_DI
; FIXUP BNKSEL TO WORK ON USER MODE PDRS
XOR A
LD (W_MMU0+1),A
LD (W_MMU1+1),A
;DIAG(%10000001)
;DI
;HALT
; MAKE USER MODE BANK CORRECT
LD A,(HB_CURBNK) ; GET CURRENT BANK
CALL HBX_BNKSEL
;DIAG(%10000011)
;DI
;HALT
;LD C,Z280_TCR
;.DB $ED,$66 ; LDCTL HL,(C)
;LD A,L
;CALL PC_SPACE
;CALL PRTHEXBYTE
LD HL,HBX_LOC
.DB $ED,$8F ; LDCTL USP,HL
;DIAG(%10000111)
;DI
;HALT
HB_EI
; SWITCH TO USER MODE NOW
LD C,Z280_MSR
LD HL,$407F
.DB $ED,$6E ; LDCTL (C),HL
;LD A,%10001111
;OUT (DIAGPORT),A
;DI
;HALT
LD SP,HBX_LOC ; SETUP INITIAL STACK JUST BELOW HBIOS PROXY
;DIAG(%10001111)
;CALL LDELAY
;DIAG(%10011111)
;CALL LDELAY
#ENDIF
; ;
CALL PRTSUM ; PRINT UNIT/DEVICE SUMMARY TABLE CALL PRTSUM ; PRINT UNIT/DEVICE SUMMARY TABLE
; ;
@ -2107,6 +2288,11 @@ IDLE:
; ;
HB_DISPATCH: HB_DISPATCH:
; ;
#IF (MEMMGR == MM_Z280)
HB_EI
#ENDIF
;
;
#IF 0 ; *DEBUG* START #IF 0 ; *DEBUG* START
; ;
CALL HB_DISPATCH1 ; DO THE WORK CALL HB_DISPATCH1 ; DO THE WORK
@ -3541,6 +3727,46 @@ HB_TMPSZ .DW 0
HB_TMPREF .DW 0 HB_TMPREF .DW 0
; ;
;================================================================================================== ;==================================================================================================
; Z280 INTERRUPT VECTOR TABLE
;==================================================================================================
;
#IF (MEMMGR = MM_Z280)
;
.FILL $1000 - ($ & $FFF) ; MUST BE 4K ALIGNED!
;
Z280_IVT:
.DW 0, 0 ; RESERVED
.DW 0 ; NMI MSR
.DW 0 ; NMI VECTOR
.DW $0000 ; INT A MSR
.DW 0 ; INT A VECTOR
.FILL $50 - ($ - Z280_IVT),0 ; SKIP TO SYS CALL TRAP VECTOR
.DW $0000 ; SYS CALL, NEW MSR
.DW Z280_SYSCALL ; SYS CALL, VECTOR ADR
.DW $0000 ; PRIV INST TRAP, NEW MSR
.DW Z280_PRIVINST ; PRIV INST, VECTOR ADR
.FILL $70 - ($ - Z280_IVT),0 ; SKIP TO START OF NMI/INTA VECTORS
.DW HBX_IV00
.DW HBX_IV01
.DW HBX_IV02
.DW HBX_IV03
.DW HBX_IV04
.DW HBX_IV05
.DW HBX_IV06
.DW HBX_IV07
.DW HBX_IV08
.DW HBX_IV09
.DW HBX_IV0A
.DW HBX_IV0B
.DW HBX_IV0C
.DW HBX_IV0D
.DW HBX_IV0E
.DW HBX_IV0F
.FILL $370 - ($ - Z280_IVT),0 ; FILL REMAINDER OF Z280 IVT
;
#ENDIF
;
;==================================================================================================
; DEVICE DRIVERS ; DEVICE DRIVERS
;================================================================================================== ;==================================================================================================
; ;

8
Source/HBIOS/romldr.asm

@ -571,13 +571,9 @@ reboot:
call DSKY_SHOWSEG ; display message call DSKY_SHOWSEG ; display message
#endif #endif
; ;
;; switch to rom bank 0 and jump to address 0
;ld a,BID_BOOT ; boot bank
;ld ix,0 ; address zero
;call HB_BNKCALL ; does not return
; cold boot system ; cold boot system
LD B,BF_SYSRESET ; SYSTEM RESTART
LD C,BF_SYSRES_COLD ; COLD START
ld b,BF_SYSRESET ; system restart
ld c,BF_SYSRES_COLD ; cold start
rst 08 ; do it, no return rst 08 ; do it, no return
#endif #endif
; ;

6
Source/HBIOS/sio.asm

@ -30,7 +30,7 @@ SIO_WR1VAL .EQU $00 ; WR1 VALUE FOR NO INTS
SIO_WR1VAL .EQU $18 ; WR1 VALUE FOR INT ON RECEIVED CHARS SIO_WR1VAL .EQU $18 ; WR1 VALUE FOR INT ON RECEIVED CHARS
#ENDIF #ENDIF
; ;
#IF (INTMODE == 2)
#IF ((INTMODE == 2) | (INTMODE == 3))
; ;
SIO0_IVT .EQU IVT(INT_SIO0) SIO0_IVT .EQU IVT(INT_SIO0)
SIO1_IVT .EQU IVT(INT_SIO1) SIO1_IVT .EQU IVT(INT_SIO1)
@ -144,7 +144,7 @@ SIO_PREINIT2:
CALL HB_ADDIM1 ; ADD TO IM1 CALL LIST CALL HB_ADDIM1 ; ADD TO IM1 CALL LIST
#ENDIF #ENDIF
; ;
#IF (INTMODE == 2)
#IF ((INTMODE == 2) | (INTMODE == 3))
; SETUP IM2 VECTORS ; SETUP IM2 VECTORS
LD HL,SIO_INT0 LD HL,SIO_INT0
LD (SIO0_IVT),HL ; IVT INDEX LD (SIO0_IVT),HL ; IVT INDEX
@ -831,7 +831,7 @@ SIO_INITGO:
; ;
; SET INTERRUPT VECTOR OFFSET WR2 ; SET INTERRUPT VECTOR OFFSET WR2
; ;
#IF (INTMODE == 2)
#IF ((INTMODE == 2) | (INTMODE == 3))
LD A,(IY+2) ; CHIP / CHANNEL LD A,(IY+2) ; CHIP / CHANNEL
SRL A ; SHIFT AWAY CHANNEL BIT SRL A ; SHIFT AWAY CHANNEL BIT
LD L,SIO0_VEC ; ASSUME CHIP 0 LD L,SIO0_VEC ; ASSUME CHIP 0

4
Source/HBIOS/std.asm

@ -501,9 +501,9 @@ MON_SERIAL .EQU MON_LOC + (1 * 3) ; MONITOR ENTRY (SERIAL PORT)
; ;
; INTERRUPT MODE 2 SLOT ASSIGNMENTS ; INTERRUPT MODE 2 SLOT ASSIGNMENTS
; ;
#IF (INTMODE == 2)
#IF ((INTMODE == 2) | (INTMODE == 3))
#IF (CPUFAM == CPU_Z180)
#IF ((CPUFAM == CPU_Z180) | (CPUFAM == CPU_Z280))
; Z180-BASED SYSTEMS ; Z180-BASED SYSTEMS

Loading…
Cancel
Save