Skip to content

Commit 95f2262

Browse files
committed
Mmu wip
1 parent f498b91 commit 95f2262

2 files changed

Lines changed: 167 additions & 0 deletions

File tree

lib/mmu-global.asm

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,3 +130,53 @@
130130
* @since 1.1.0
131131
*/
132132
.macro @c128lib_SetMMULoadConfiguration(config) { SetMMULoadConfiguration(config) }
133+
134+
/**
135+
* @brief Set banking. Only main banking are available.
136+
*
137+
* @param[in] config Values for Mmu confiuration
138+
*
139+
* @remark Register .A will be modified.
140+
* @remark Flags N and Z will be affected.
141+
*
142+
* @note Use Basic banking, see reference https://c128lib.github.io/Reference/MemoryMap
143+
* Only banking 0, 1, 4, 5, 12, 13, 14 and 15 are supported.
144+
*
145+
* @since 1.2.0
146+
*/
147+
.macro @c128lib_SetBankConfiguration(id) { SetBankConfiguration(id) }
148+
149+
/**
150+
* @brief Set mode configuration register.
151+
*
152+
* @param[in] config Values for configuration register
153+
*
154+
* @note Config parameter can be filled with Mmu.CPU_*, Mmu.FASTSERIAL*, Mmu.GAME_*, Mmu.EXROM_*, Mmu.KERNAL_*, Mmu.COLS_*
155+
*
156+
* @remark Register .A will be modified.
157+
* @remark Flags N and Z will be affected.
158+
*
159+
* @since 1.2.0
160+
*/
161+
.macro c128lib_SetModeConfig(config) { SetModeConfig(config) }
162+
163+
/**
164+
* @brief Configure common RAM amount.
165+
*
166+
* RAM Bank 0 is always the visible RAM bank.
167+
* Valid values are 1,4,8 and 16.
168+
* For ex. if you choose 4K common ram at top and bottom
169+
* you'll have 4K up and 4K bottom.
170+
*
171+
* @param[in] config Values for common ram configuration
172+
*
173+
* @remark Register .A will be modified.
174+
* @remark Flags N and Z will be affected.
175+
*
176+
* @note Config parameter can be filled with Mmu.COMMON_RAM_*
177+
*
178+
* @note Use c128lib_SetCommonRAM in mmu-global.asm
179+
*
180+
* @since 1.2.0
181+
*/
182+
.macro c128lib_SetCommonRAM(config) { SetCommonRAM(config) }

lib/mmu.asm

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,3 +146,120 @@
146146
.assert "SetMMULoadConfiguration(RAM1 | ROM_HI_RAM | ROM_MID_RAM | ROM_LOW_RAM | IO_RAM) sets accumulator to 7f", { SetMMULoadConfiguration(Mmu.RAM1 | Mmu.ROM_HI_RAM | Mmu.ROM_MID_RAM | Mmu.ROM_LOW_RAM | Mmu.IO_RAM) }, {
147147
lda #%01111111; sta $ff00
148148
}
149+
150+
/**
151+
* @brief Set banking. Only main banking are available.
152+
*
153+
* @param[in] config Values for Mmu confiuration
154+
*
155+
* @remark Register .A will be modified.
156+
* @remark Flags N and Z will be affected.
157+
*
158+
* @note Use Basic banking, see reference https://c128lib.github.io/Reference/MemoryMap
159+
* Only banking 0, 1, 4, 5, 12, 13, 14 and 15 are supported.
160+
*
161+
* @note Use c128lib_SetBankConfiguration in mmu-global.asm
162+
*
163+
* @since 1.2.0
164+
*/
165+
.macro SetBankConfiguration(id) {
166+
.if (id==0) {
167+
SetMMULoadConfiguration(Mmu.RAM0 | Mmu.ROM_HI_RAM | Mmu.ROM_MID_RAM | Mmu.ROM_LOW_RAM | Mmu.IO_RAM)
168+
}
169+
.if (id==1) {
170+
SetMMULoadConfiguration(Mmu.RAM1 | Mmu.ROM_HI_RAM | Mmu.ROM_MID_RAM | Mmu.ROM_LOW_RAM | Mmu.IO_RAM)
171+
}
172+
.if (id==4) {
173+
SetMMULoadConfiguration(Mmu.RAM0 | Mmu.ROM_HI_INT | Mmu.ROM_MID_INT | Mmu.ROM_LOW_RAM | Mmu.IO_ROM)
174+
}
175+
.if (id==5) {
176+
SetMMULoadConfiguration(Mmu.RAM1 | Mmu.ROM_HI_INT | Mmu.ROM_MID_INT | Mmu.ROM_LOW_RAM | Mmu.IO_ROM)
177+
}
178+
.if (id==12) {
179+
SetMMULoadConfiguration(Mmu.RAM0 | Mmu.ROM_HI | Mmu.ROM_MID_INT | Mmu.ROM_LOW_RAM | Mmu.IO_ROM)
180+
}
181+
.if (id==13) {
182+
SetMMULoadConfiguration(Mmu.RAM0 | Mmu.ROM_HI | Mmu.ROM_MID_EXT | Mmu.ROM_LOW_RAM | Mmu.IO_ROM)
183+
}
184+
.if (id==14) {
185+
SetMMULoadConfiguration(Mmu.RAM0 | Mmu.ROM_HI | Mmu.ROM_MID_ROM | Mmu.ROM_LOW_ROM | Mmu.IO_RAM)
186+
}
187+
.if (id==15) {
188+
SetMMULoadConfiguration(Mmu.RAM0 | Mmu.ROM_HI | Mmu.ROM_MID_ROM | Mmu.ROM_LOW_ROM | Mmu.IO_ROM)
189+
}
190+
}
191+
.assert "SetBankConfiguration(0)", { SetBankConfiguration(0) }, {
192+
lda #%00111111; sta $ff00
193+
}
194+
.assert "SetBankConfiguration(1)", { SetBankConfiguration(1) }, {
195+
lda #%01111111; sta $ff00
196+
}
197+
.assert "SetBankConfiguration(4)", { SetBankConfiguration(4) }, {
198+
lda #%00010110; sta $ff00
199+
}
200+
.assert "SetBankConfiguration(5)", { SetBankConfiguration(5) }, {
201+
lda #%01010110; sta $ff00
202+
}
203+
.assert "SetBankConfiguration(12)", { SetBankConfiguration(12) }, {
204+
lda #%00000110; sta $ff00
205+
}
206+
.assert "SetBankConfiguration(13)", { SetBankConfiguration(13) }, {
207+
lda #%00001010; sta $ff00
208+
}
209+
.assert "SetBankConfiguration(14)", { SetBankConfiguration(14) }, {
210+
lda #%00000001; sta $ff00
211+
}
212+
.assert "SetBankConfiguration(15)", { SetBankConfiguration(15) }, {
213+
lda #%00000000; sta $ff00
214+
}
215+
216+
/**
217+
* @brief Set mode configuration register.
218+
*
219+
* @param[in] config Values for configuration register
220+
*
221+
* @note Config parameter can be filled with Mmu.CPU_*, Mmu.FASTSERIAL*, Mmu.GAME_*, Mmu.EXROM_*, Mmu.KERNAL_*, Mmu.COLS_*
222+
*
223+
* @remark Register .A will be modified.
224+
* @remark Flags N and Z will be affected.
225+
*
226+
* @note Use c128lib_SetModeConfig in mmu-global.asm
227+
*
228+
* @since 1.2.0
229+
*/
230+
.macro SetModeConfig(config) {
231+
lda #config
232+
sta Mmu.MODE_CONFIG
233+
}
234+
.assert "SetModeConfig(CPU_8502 | FASTSERIALOUTPUT | GAME_HI | EXROM_HI | KERNAL_64 | COLS_40) sets accumulator to 0f", {
235+
SetModeConfig(Mmu.CPU_8502 | Mmu.FASTSERIALOUTPUT | Mmu.GAME_HI | Mmu.EXROM_HI | Mmu.KERNAL_64 | Mmu.COLS_40)
236+
}, {
237+
lda #%11111001; sta $d505
238+
}
239+
240+
/**
241+
* @brief Configure common RAM amount.
242+
*
243+
* RAM Bank 0 is always the visible RAM bank.
244+
* Valid values are 1,4,8 and 16.
245+
* For ex. if you choose 4K common ram at top and bottom
246+
* you'll have 4K up and 4K bottom.
247+
*
248+
* @param[in] config Values for common ram configuration
249+
*
250+
* @remark Register .A will be modified.
251+
* @remark Flags N and Z will be affected.
252+
*
253+
* @note Config parameter can be filled with Mmu.COMMON_RAM_*
254+
*
255+
* @note Use c128lib_SetCommonRAM in mmu-global.asm
256+
*
257+
* @since 1.2.0
258+
*/
259+
.macro SetCommonRAM(config) {
260+
lda #config
261+
sta Mmu.RAM_CONFIG
262+
}
263+
.assert "SetCommonRAM(COMMON_RAM_16K | COMMON_RAM_BOTH) sets accumulator to 0f", { SetCommonRAM(Mmu.COMMON_RAM_16K | Mmu.COMMON_RAM_BOTH) }, {
264+
lda #%00001111; sta $d506
265+
}

0 commit comments

Comments
 (0)