;================================================================================================== ; 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