|
|
|
@ -463,9 +463,14 @@ HBX_BNKSEL1: |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (MEMMGR == MM_Z280) |
|
|
|
PUSH BC ; SAVE BC |
|
|
|
PUSH HL ; SAVE HL |
|
|
|
LD B,$00 ; FIRST USER PDR |
|
|
|
.DB $ED,$71 ; SC |
|
|
|
.DW Z280_BNKSEL ; SC PARAMETER |
|
|
|
RET |
|
|
|
POP HL ; RESTORE HL |
|
|
|
POP BC ; RESTORE BC |
|
|
|
RET ; DONE |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (MEMMGR == MM_ZRC) |
|
|
|
@ -1223,6 +1228,7 @@ Z280_INITZ: |
|
|
|
; |
|
|
|
#IF (MEMMGR == MM_Z280) |
|
|
|
LD A,BID_BIOS |
|
|
|
LD B,$10 ; FIRST SYSTEM PDR |
|
|
|
CALL Z280_BNKSEL |
|
|
|
#ELSE |
|
|
|
LD A,BID_BIOS ; BIOS BANK ID |
|
|
|
@ -2005,11 +2011,7 @@ INITSYS4: |
|
|
|
|
|
|
|
HB_DI ; NOT SURE THIS IS NEEDED |
|
|
|
|
|
|
|
; FIXUP BNKSEL TO WORK ON USER MODE PDRS |
|
|
|
XOR A |
|
|
|
LD (Z280_BNKSEL2+1),A |
|
|
|
|
|
|
|
; MAKE USER MODE BANK CORRECT |
|
|
|
; ACTIVATE THE CORRECT USER MODE BANK |
|
|
|
LD A,(HB_CURBNK) ; GET CURRENT BANK |
|
|
|
CALL HBX_BNKSEL |
|
|
|
|
|
|
|
@ -2900,6 +2902,7 @@ SYS_SETBNK: |
|
|
|
PUSH AF ; SAVE IT |
|
|
|
LD A,C ; NEW BANK TO A |
|
|
|
LD (HB_INVBNK),A ; UPDATE INVBNK |
|
|
|
LD B,$00 ; FIRST USER PDR |
|
|
|
CALL Z280_BNKSEL ; DO IT |
|
|
|
POP AF ; RECOVER PREV BANK |
|
|
|
LD C,A ; PREVIOUS BANK TO C |
|
|
|
@ -4070,11 +4073,10 @@ Z280_IVT: |
|
|
|
; |
|
|
|
#IF (MEMMGR == MM_Z280) & FALSE |
|
|
|
; |
|
|
|
; REG A HAS BANK ID |
|
|
|
; REG A HAS BANK ID, REG B HAS INITIAL PDR TO PROGRAM |
|
|
|
; REGISTERS AF, BC, HL DESTROYED |
|
|
|
; |
|
|
|
Z280_BNKSEL: |
|
|
|
PUSH BC |
|
|
|
PUSH HL |
|
|
|
; |
|
|
|
; SELECT I/O PAGE FOR MMU |
|
|
|
LD L,$FF ; MMU AT I/O PAGE $FF |
|
|
|
@ -4094,13 +4096,8 @@ Z280_BNKSEL1: |
|
|
|
LD L,A |
|
|
|
; |
|
|
|
Z280_BNKSEL2: |
|
|
|
; POINT TO FIRST PDR TO PROGRAM ($00=USER, $10=SYSTEM) |
|
|
|
; THIS CODE USES $10 (FIRST SYSTEM PDR) INITIALLY FOR |
|
|
|
; SYSTEM STARTUP. ONCE WE HAVE TRANSITIONED TO THE |
|
|
|
; RAM PAGE CODE OF HBIOS, THE LINE BELOW IS MODIFIED |
|
|
|
; IN MEMORY TO POINT TO THE FIRST USER PDR. THIS IS |
|
|
|
; DONE NEAR INITSYS4. |
|
|
|
LD A,$10 ; FIRST SYSTEM PDR |
|
|
|
; POINT TO FIRST PDR TO PROGRAM |
|
|
|
LD A,B ; FIRST PDR TO PROG |
|
|
|
OUT (Z280_MMUPDRPTR),A ; SET THE PDR POINTER |
|
|
|
; |
|
|
|
; PROGRAM 8 PDRS |
|
|
|
@ -4113,8 +4110,6 @@ Z280_BNKSEL2: |
|
|
|
LD C,Z280_IOPR ; I/O PAGE REGISTER TO C |
|
|
|
.DB $ED,$6E ; LDCTL (C),HL |
|
|
|
; |
|
|
|
POP HL |
|
|
|
POP BC |
|
|
|
RET |
|
|
|
; |
|
|
|
#IF (($ & $FF) != 0) |
|
|
|
@ -4422,17 +4417,15 @@ Z280_PDRTBL: |
|
|
|
; |
|
|
|
; Z280 BANK SELECTION (CALLED FROM PROXY) |
|
|
|
; |
|
|
|
; THIS VERSION IS SLOWER, BUT ABOIDS THE USE OF THE 512 |
|
|
|
; THIS VERSION IS SLOWER, BUT AVOIDS THE USE OF THE 512+ |
|
|
|
; BYTE TABLE. |
|
|
|
; |
|
|
|
#IF (MEMMGR == MM_Z280) |
|
|
|
; |
|
|
|
; REG A HAS BANK ID |
|
|
|
; REG A HAS BANK ID, REG B HAS INITIAL PDR TO PROGRAM |
|
|
|
; REGISTERS AF, BC, HL DESTROYED |
|
|
|
; |
|
|
|
Z280_BNKSEL: |
|
|
|
PUSH BC |
|
|
|
PUSH HL |
|
|
|
; |
|
|
|
; SELECT I/O PAGE FOR MMU |
|
|
|
LD L,$FF ; MMU AT I/O PAGE $FF |
|
|
|
LD C,Z280_IOPR ; I/O PAGE REGISTER TO C |
|
|
|
@ -4445,44 +4438,52 @@ Z280_BNKSEL: |
|
|
|
; |
|
|
|
; IF R BIT (RAM/ROM) IS SET, WE WANT TO CONVERT |
|
|
|
; FROM R000 BBBB -> 000R BBBB |
|
|
|
BIT 7,A ; CHECK BIT |
|
|
|
JR Z,Z280_BNKSEL1 ; NOT SET, SKIP AHEAD |
|
|
|
XOR %10010000 ; FIX IT |
|
|
|
RLCA ; A=R 000B BBBR |
|
|
|
JP NC,Z280_BNKSEL1 |
|
|
|
XOR %00100001 ; A=00RB BBB0 |
|
|
|
; |
|
|
|
Z280_BNKSEL1: |
|
|
|
;MULTU A,$80 ; HL=0000 RBBB B000 0000 |
|
|
|
.DB $FD,$ED,$F9,$80 ; MULTU A,$80 |
|
|
|
;MULTU A,$40 ; HL=0000 RBBB B000 0000 |
|
|
|
.DB $FD,$ED,$F9,$40 ; MULTU A,$40 |
|
|
|
; |
|
|
|
LD A,$0A ; VALUE FOR LOW NIBBLE |
|
|
|
OR L ; COMBINE WITH L |
|
|
|
LD L,A ; PUT IT BACK |
|
|
|
.DB $ED,$6D ; ADD HL,A ; HL=0000 RBBB B000 1010 |
|
|
|
; |
|
|
|
Z280_BNKSEL2: |
|
|
|
; POINT TO FIRST PDR TO PROGRAM ($00=USER, $10=SYSTEM) |
|
|
|
; THIS CODE USES $10 (FIRST SYSTEM PDR) INITIALLY FOR |
|
|
|
; SYSTEM STARTUP. ONCE WE HAVE TRANSITIONED TO THE |
|
|
|
; RAM PAGE CODE OF HBIOS, THE LINE BELOW IS MODIFIED |
|
|
|
; IN MEMORY TO POINT TO THE FIRST USER PDR. THIS IS |
|
|
|
; DONE NEAR INITSYS4. |
|
|
|
LD A,$10 ; FIRST SYSTEM PDR |
|
|
|
; POINT TO FIRST PDR TO PROGRAM |
|
|
|
LD A,B ; INITIAL PDR TO PROG |
|
|
|
OUT (Z280_MMUPDRPTR),A ; SET THE PDR POINTER |
|
|
|
; |
|
|
|
; PROGRAM 8 PDRS |
|
|
|
LD C,Z280_MMUBLKMOV ; PDR BLOCK MOVE PORT |
|
|
|
LD B,8 ; PROGRAM 8 PDRS |
|
|
|
;LD B,8 ; PROGRAM 8 PDRS |
|
|
|
LD A,$10 ; PDR VALUE INCREMENT |
|
|
|
Z280_BNKSEL3: |
|
|
|
; PROGRAM 8 PDR VALUES |
|
|
|
; LOOP UNROLLED FOR SPEED |
|
|
|
.DB $ED,$BF ; OUTW (C),HL |
|
|
|
.DB $ED,$6D ; ADD HL, A ; BUMP VALUE |
|
|
|
DJNZ Z280_BNKSEL3 ; DO ALL PDRS |
|
|
|
.DB $ED,$BF ; OUTW (C),HL |
|
|
|
.DB $ED,$6D ; ADD HL, A ; BUMP VALUE |
|
|
|
.DB $ED,$BF ; OUTW (C),HL |
|
|
|
.DB $ED,$6D ; ADD HL, A ; BUMP VALUE |
|
|
|
.DB $ED,$BF ; OUTW (C),HL |
|
|
|
.DB $ED,$6D ; ADD HL, A ; BUMP VALUE |
|
|
|
.DB $ED,$BF ; OUTW (C),HL |
|
|
|
.DB $ED,$6D ; ADD HL, A ; BUMP VALUE |
|
|
|
.DB $ED,$BF ; OUTW (C),HL |
|
|
|
.DB $ED,$6D ; ADD HL, A ; BUMP VALUE |
|
|
|
.DB $ED,$BF ; OUTW (C),HL |
|
|
|
.DB $ED,$6D ; ADD HL, A ; BUMP VALUE |
|
|
|
.DB $ED,$BF ; OUTW (C),HL |
|
|
|
.DB $ED,$6D ; ADD HL, A ; BUMP VALUE |
|
|
|
;DJNZ Z280_BNKSEL3 ; DO ALL PDRS |
|
|
|
; |
|
|
|
; RESTORE I/O PAGE TO $00 |
|
|
|
LD L,$00 ; NORMAL I/O PAGE $00 |
|
|
|
LD C,Z280_IOPR ; I/O PAGE REGISTER TO C |
|
|
|
.DB $ED,$6E ; LDCTL (C),HL |
|
|
|
; |
|
|
|
POP HL |
|
|
|
POP BC |
|
|
|
; |
|
|
|
RET |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
|