Add init code for mapper
init_mapper now remaps so that it can change irq vectors
This commit is contained in:
38
sw/kernel/devices/mapper.s
Normal file
38
sw/kernel/devices/mapper.s
Normal file
@@ -0,0 +1,38 @@
|
||||
.MACPACK generic
|
||||
|
||||
.autoimport
|
||||
|
||||
.export _init_mapper
|
||||
.export _map
|
||||
|
||||
MAPPER_BASE = $200
|
||||
|
||||
.code
|
||||
|
||||
; void init_paging();
|
||||
; This should be identity mapped at reset, but we can do it again anyway
|
||||
.proc _init_mapper
|
||||
ldx #$00
|
||||
L1:
|
||||
txa
|
||||
lsr
|
||||
sta MAPPER_BASE,x
|
||||
lda #$00
|
||||
sta MAPPER_BASE+1,x
|
||||
inx
|
||||
inx
|
||||
cpx #$20
|
||||
blt L1
|
||||
rts
|
||||
.endproc
|
||||
|
||||
; void map(uint16_t p_page, uint8_t v_page);
|
||||
.proc _map
|
||||
asl
|
||||
tax ; x = v_page * 2
|
||||
jsr popa ; low byte of p_page
|
||||
sta MAPPER_BASE,x ; write low byte to mm_low
|
||||
jsr popa ; high byte of p_page
|
||||
sta MAPPER_BASE+1,x ; write high byte to mm_high
|
||||
rts
|
||||
.endproc
|
||||
Reference in New Issue
Block a user