You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

78 lines
2.7 KiB

;==================================================================================================
; MEMORY BANK MANAGEMENT
;==================================================================================================
;
; SELECT THE REQUESTED 32K BANK OF RAM/ROM INTO THE LOWER 32K OF CPU ADDRESS SPACE.
; BANK INDEX IN A, BIT 7 IS SET TO TO SELECT RAM, OTHERWISE ROM
; MUST BE INVOKED FROM HIGH 32K AND STACK MUST BE IN HIGH 32K
;______________________________________________________________________________________________________________________
;
#IF ((PLATFORM == PLT_SBC) | (PLATFORM == PLT_ZETA))
BNKSEL:
OUT (MPCL_ROM),A ; SET ROM PAGE SELECTOR
OUT (MPCL_RAM),A ; SET RAM PAGE SELECTOR
RET
#ENDIF
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ZETA SBC V2 USES 16K PAGES. ANY PAGE CAN BE MAPPED TO ONE OF FOUR BANKS:
; BANK_0: 0K - 16K; BANK_1: 16K - 32K; BANK_2: 32K - 48K; BANK_3: 48K - 64K
; THIS BNKSEL EMULATES SBC / ZETA BEHAVIOR BY SETTING BANK_0 and BANK_1 TO
; TWO CONSECUTIVE PAGES
#IF (PLATFORM == PLT_ZETA2)
BNKSEL:
BIT 7,A ; BIT 7 SET REQUESTS RAM PAGE
JR Z,BNKSEL_ROM ; NOT SET, SELECT ROM PAGE
RES 7,A ; RAM PAGE REQUESTED: CLEAR ROM BIT
ADD A,16 ; ADD 16 x 32K - RAM STARTS FROM 512K
;
BNKSEL_ROM:
RLCA ; TIMES 2 - GET 16K PAGE INSTEAD OF 32K
OUT (MPGSEL_0),A ; BANK_0: 0K - 16K
INC A ;
OUT (MPGSEL_1),A ; BANK_1: 16K - 32K
RET
#ENDIF
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#IF (PLATFORM == PLT_N8)
BNKSEL:
BIT 7,A ; TEST BIT 7 FOR RAM VS. ROM
JR Z,BNKSEL_ROM ; IF NOT SET, SELECT ROM PAGE
;
BNKSEL_RAM: ; SELECT RAM PAGE
RES 7,A ; CLEAR BIT 7 FROM ABOVE
RLCA ; SCALE SELECTOR TO
RLCA ; ... GO FROM Z180 4K PAGE SIZE
RLCA ; ... TO DESIRED 32K PAGE SIZE
OUT0 (Z180_BBR),A ; WRITE TO BANK BASE
LD A,N8_DEFACR | 80H ; SELECT RAM BY SETTING BIT 7
OUT0 (N8_ACR),A ; ... IN N8 ACR REGISTER
RET ; DONE
;
BNKSEL_ROM: ; SELECT ROM PAGE
OUT0 (N8_RMAP),A ; BANK INDEX TO N8 RMAP REGISTER
XOR A ; ZERO ACCUM
OUT0 (Z180_BBR),A ; ZERO BANK BASE
LD A,N8_DEFACR ; SELECT ROM BY CLEARING BIT 7
OUT0 (N8_ACR),A ; ... IN N8 ACR REGISTER
RET ; DONE
;
#ENDIF
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#IF (PLATFORM == PLT_MK4)
BNKSEL:
RLCA ; RAM FLAG TO CARRY FLAG AND BIT 0
JR NC,BNKSEL_ROM ; IF NC, WANT ROM PAGE, SKIP AHEAD
XOR %00100001 ; SET BIT FOR HI 512K, CLR BIT 0
BNKSEL_ROM:
RLCA ; CONTINUE SHIFTING TO SCALE SELECTOR
RLCA ; FOR Z180 4K PAGE -> DESIRED 32K PAGE
OUT0 (Z180_BBR),A ; WRITE TO BANK BASE
RET ; DONE
#ENDIF