|
|
|
@ -64,11 +64,12 @@ |
|
|
|
; - dsky.asm |
|
|
|
; - unlzsa2s.asm |
|
|
|
; |
|
|
|
; TOTO |
|
|
|
; TODO |
|
|
|
; - Add remaining service routine stubs for IM3 (NMI, etc.) |
|
|
|
; - Review PEEK/POKE code for Z280 |
|
|
|
; - Review bank selection code (selectable user/sys bank?) |
|
|
|
; - Check app boot under Z280 |
|
|
|
; - Relocate Z280_PRIVINST |
|
|
|
; |
|
|
|
; |
|
|
|
; INCLUDE GENERIC STUFF |
|
|
|
@ -128,6 +129,26 @@ MODCNT .SET MODCNT + 1 |
|
|
|
.ECHO "*** ERROR: INVALID INTMODE SETTING!!!\n" |
|
|
|
!!! ; FORCE AN ASSEMBLY ERROR |
|
|
|
#ENDIF |
|
|
|
#IF (INTMODE == 3) |
|
|
|
#IF (CPUFAM != CPU_Z280) |
|
|
|
.ECHO "*** ERROR: INTMODE 3 REQUIRES Z280 FAMILY CPU!!!\n" |
|
|
|
!!! ; FORCE AN ASSEMBLY ERROR |
|
|
|
#ENDIF |
|
|
|
#IF (MEMMGR != MM_Z280) |
|
|
|
.ECHO "*** ERROR: INTMODE 3 REQUIRES Z280 MEMORY MANAGER!!!\n" |
|
|
|
!!! ; FORCE AN ASSEMBLY ERROR |
|
|
|
#ENDIF |
|
|
|
#ENDIF |
|
|
|
#IF (MEMMGR == MM_Z280) |
|
|
|
#IF (INTMODE != 3) |
|
|
|
.ECHO "*** ERROR: Z280 MEMORY MANAGER REQUIRES INTMODE 3!!!\n" |
|
|
|
!!! ; FORCE AN ASSEMBLY ERROR |
|
|
|
#ENDIF |
|
|
|
#IF (CPUFAM != CPU_Z280) |
|
|
|
.ECHO "*** ERROR: Z280 MEMORY MANAGER REQUIRES Z280 FAMILY CPU!!!\n" |
|
|
|
!!! ; FORCE AN ASSEMBLY ERROR |
|
|
|
#ENDIF |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
@ -485,6 +506,16 @@ HBX_ROM: |
|
|
|
; |
|
|
|
HBX_BNKCPY: |
|
|
|
#IF (MEMMGR == MM_Z280) |
|
|
|
.DB $ED,$71 ; SC |
|
|
|
.DW Z280_BNKCPY ; SC PARAMETER |
|
|
|
RET |
|
|
|
|
|
|
|
; |
|
|
|
; Z280 BANK SELECTION (CALLED FROM PROXY) |
|
|
|
; |
|
|
|
#IF (MEMMGR == MM_Z280) & FALSE |
|
|
|
; |
|
|
|
Z280_BNKCPY: |
|
|
|
; Z280 MEMORY TO MEMORY DMA |
|
|
|
; USE FLOW THROUGH MODE DMA |
|
|
|
; SINGLE BYTE TRANSFER |
|
|
|
@ -495,6 +526,10 @@ HBX_BNKCPY: |
|
|
|
; - SINGLE TRANSACTION |
|
|
|
; - 1 BYTE XFER SIZE |
|
|
|
|
|
|
|
PUSH HL |
|
|
|
PUSH DE |
|
|
|
PUSH BC |
|
|
|
|
|
|
|
PUSH BC ; SAVE COUNT |
|
|
|
PUSH HL ; SAVE SOURCE ADDRESS |
|
|
|
|
|
|
|
@ -529,7 +564,17 @@ Z2DMALOOP: |
|
|
|
XOR A ; I/O PAGE ZERO |
|
|
|
LD C,Z280_IOPR ; I/O PAGE REGISTER |
|
|
|
.DB $ED,$6E ; LDCTL (C),HL |
|
|
|
|
|
|
|
|
|
|
|
; SETUP RETURN VALUES |
|
|
|
POP BC ; RECOVER ORIGINAL BC |
|
|
|
POP DE ; RECOVER ORIGINAL DE |
|
|
|
POP HL ; RECOVER ORIGINAL HL |
|
|
|
ADD HL,BC ; INCREMENT SRC ADR BY COUNT |
|
|
|
EX DE,HL ; SWAP |
|
|
|
ADD HL,BC ; INCREMENT DST ADR BY COUNT |
|
|
|
EX DE,HL ; SWAP BACK |
|
|
|
LD BC,0 ; COUNT IS NOW ZERO |
|
|
|
|
|
|
|
RET |
|
|
|
|
|
|
|
Z2DMAADR: |
|
|
|
@ -574,6 +619,8 @@ Z2DMAADR1: |
|
|
|
INC C ; BUMP TO NEXT REG |
|
|
|
|
|
|
|
RET |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
#ELSE |
|
|
|
LD A,I |
|
|
|
DI |
|
|
|
@ -1050,7 +1097,7 @@ HB_START: |
|
|
|
LD HL,$0010 ; TOP 16 BITS OF PHYSICAL ADR OF IVT |
|
|
|
.DB $ED,$6E ; LDCTL (C),HL |
|
|
|
; |
|
|
|
JR Z280_INITZ ; JUMP TO CODE CONTINUATION |
|
|
|
JP Z280_INITZ ; JUMP TO CODE CONTINUATION |
|
|
|
; |
|
|
|
Z280_PDRTBL: |
|
|
|
; LOWER 32 K (BANKED) |
|
|
|
@ -1082,9 +1129,13 @@ Z280_PRIVINST: |
|
|
|
PUSH BC |
|
|
|
PUSH DE |
|
|
|
|
|
|
|
LD A,(HL) |
|
|
|
.DB $ED,$96 ; LDUP A,(HL) |
|
|
|
INC HL ; BUMP PAST PRIV INST |
|
|
|
|
|
|
|
;CALL PC_LBKT |
|
|
|
;CALL PRTHEXBYTE |
|
|
|
;CALL PC_RBKT |
|
|
|
|
|
|
|
; HANDLE DI |
|
|
|
CP $F3 ; DI? |
|
|
|
JR NZ,Z280_PRIVINST2 |
|
|
|
@ -1101,9 +1152,21 @@ Z280_PRIVINST2: |
|
|
|
Z280_PRIVINST_HALT: |
|
|
|
; SOMETHING ELSE, DIAGNOSE & HALT SYSTEM |
|
|
|
|
|
|
|
PUSH HL |
|
|
|
CALL PC_LBKT |
|
|
|
CALL PRTHEXBYTE |
|
|
|
.DB $ED,$96 ; LDUP A,(HL) |
|
|
|
CALL PRTHEXBYTE |
|
|
|
INC HL |
|
|
|
.DB $ED,$96 ; LDUP A,(HL) |
|
|
|
CALL PRTHEXBYTE |
|
|
|
CALL PC_RBKT |
|
|
|
POP HL |
|
|
|
|
|
|
|
CALL NEWLINE |
|
|
|
LD DE,Z280_PRIVSTR |
|
|
|
CALL WRITESTR |
|
|
|
DEC HL |
|
|
|
CALL PRTHEXWORDHL |
|
|
|
|
|
|
|
DI |
|
|
|
@ -3977,6 +4040,116 @@ W_MMU2: |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; Z280 BANK SELECTION (CALLED FROM PROXY) |
|
|
|
; |
|
|
|
#IF (MEMMGR == MM_Z280) |
|
|
|
; |
|
|
|
Z280_BNKCPY: |
|
|
|
; Z280 MEMORY TO MEMORY DMA |
|
|
|
; USE FLOW THROUGH MODE DMA |
|
|
|
; SINGLE BYTE TRANSFER |
|
|
|
; TRANSACTION DESCRIPTION REGISTER (TDR) |
|
|
|
; %0000 0000 0000 0000 |
|
|
|
; - AUTO INCREMENT MEMORY |
|
|
|
; - FLOWTHROUGH OPERATION |
|
|
|
; - SINGLE TRANSACTION |
|
|
|
; - 1 BYTE XFER SIZE |
|
|
|
|
|
|
|
PUSH HL |
|
|
|
PUSH DE |
|
|
|
PUSH BC |
|
|
|
|
|
|
|
PUSH BC ; SAVE COUNT |
|
|
|
PUSH HL ; SAVE SOURCE ADDRESS |
|
|
|
|
|
|
|
; SELECT I/O PAGE $FF |
|
|
|
LD L,$FF ; I/O PAGE $FF |
|
|
|
LD C,Z280_IOPR ; I/O PAGE REGISTER |
|
|
|
.DB $ED,$6E ; LDCTL (C),HL |
|
|
|
|
|
|
|
LD C,Z280_DMA0_DSTL ; START WITH DEST REG LO |
|
|
|
|
|
|
|
LD A,(HB_DSTBNK) ; DEST BANK TO ACCUM |
|
|
|
CALL Z2DMAADR ; SETUP DEST ADR REGS |
|
|
|
|
|
|
|
POP DE ; SRC ADR TO DE |
|
|
|
LD A,(HB_SRCBNK) ; DEST BANK TO ACCUM |
|
|
|
CALL Z2DMAADR ; SETUP SOURCE ADR REGS |
|
|
|
|
|
|
|
POP HL ; COUNT TO HL |
|
|
|
.DB $ED,$BF ; OUTW (C),HL |
|
|
|
INC C ; BUMP TO TDR |
|
|
|
|
|
|
|
LD HL,$8000 ; ENABLE DMA0 TO RUN! |
|
|
|
.DB $ED,$BF ; OUTW (C),HL |
|
|
|
|
|
|
|
; WAIT FOR XFER TO COMPLETE |
|
|
|
Z2DMALOOP: |
|
|
|
.DB $ED,$B7 ; INW HL,(C) |
|
|
|
BIT 7,H ; CHECK EN BIT OF TDR |
|
|
|
JR NZ,Z2DMALOOP ; LOOP WHILE ACTIVE |
|
|
|
|
|
|
|
; RETURN TO I/O PAGE $00 |
|
|
|
XOR A ; I/O PAGE ZERO |
|
|
|
LD C,Z280_IOPR ; I/O PAGE REGISTER |
|
|
|
.DB $ED,$6E ; LDCTL (C),HL |
|
|
|
|
|
|
|
; SETUP RETURN VALUES |
|
|
|
POP BC ; RECOVER ORIGINAL BC |
|
|
|
POP DE ; RECOVER ORIGINAL DE |
|
|
|
POP HL ; RECOVER ORIGINAL HL |
|
|
|
ADD HL,BC ; INCREMENT SRC ADR BY COUNT |
|
|
|
EX DE,HL ; SWAP |
|
|
|
ADD HL,BC ; INCREMENT DST ADR BY COUNT |
|
|
|
EX DE,HL ; SWAP BACK |
|
|
|
LD BC,0 ; COUNT IS NOW ZERO |
|
|
|
|
|
|
|
RET |
|
|
|
|
|
|
|
Z2DMAADR: |
|
|
|
; SET ADDRESS REGISTERS, BANK IN A, ADDRESS IN DE |
|
|
|
; C POINTS TO FIRST DMA ADR PORT TO SET |
|
|
|
BIT 7,D ; HIGH RAM? |
|
|
|
JR Z,Z2DMAADR0 ; NO, SKIP |
|
|
|
LD A,$8F ; SUBSTITUTE COMMON RAM BANK ID |
|
|
|
|
|
|
|
Z2DMAADR0: |
|
|
|
BIT 7,A ; RAM? |
|
|
|
JR Z,Z2DMAADR1 ; NO, SKIP |
|
|
|
RES 7,A ; CLEAR RAM BIT |
|
|
|
SET 4,A ; SET BIT FOR 512K OFFSET |
|
|
|
|
|
|
|
Z2DMAADR1: |
|
|
|
; ADR HI FROM A:DE |
|
|
|
LD L,D ; L=XAAA AAAA |
|
|
|
LD H,A ; H=BBBB BBBB |
|
|
|
SLA L ; L=AAAA AAA0 |
|
|
|
SRL H ; H=0BBB BBBB B |
|
|
|
RR L ; L=BAAA AAAA |
|
|
|
LD A,$0F ; A=0000 1111 |
|
|
|
OR L ; A=BAAA 1111 |
|
|
|
LD L,A ; L=BAAA 1111 |
|
|
|
PUSH HL ; SAVE IT FOR NOW |
|
|
|
|
|
|
|
; ADR LO FROM DE: |
|
|
|
LD L,E ; L= AAAA AAAA |
|
|
|
LD A,$F0 ; A= 1111 0000 |
|
|
|
OR D ; A= 1111 AAAA |
|
|
|
LD H,A ; HL=1111 AAAA AAAA AAAA |
|
|
|
|
|
|
|
; SET ADR LO REG |
|
|
|
.DB $ED,$BF ; OUTW (C),HL |
|
|
|
INC C ; BUMP TO ADR HI REG |
|
|
|
|
|
|
|
; SET ADR HI REG |
|
|
|
POP HL ; RECOVER THE HI VAL |
|
|
|
|
|
|
|
.DB $ED,$BF ; OUTW (C),HL |
|
|
|
INC C ; BUMP TO NEXT REG |
|
|
|
|
|
|
|
RET |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
; DEVICE DRIVERS |
|
|
|
;================================================================================================== |
|
|
|
|