fix for memory detection

This commit is contained in:
Dagen Brock 2015-10-25 14:49:28 -05:00
parent 07e635e613
commit 8601f35783
1 changed files with 52 additions and 37 deletions

View File

@ -43,8 +43,8 @@ Init
jsr DetectRam jsr DetectRam
jsr PrintMemoryMap jsr PrintMemoryMap
jsr RDKEY jsr RDKEY
lda BankExpansionLowest lda BankExpansionLowest
sta StartBank sta StartBank
lda BankExpansionHighest lda BankExpansionHighest
@ -1745,10 +1745,6 @@ MainMenuStrs
hex 00,00 hex 00,00
* Creates a 256 byte map of each bank, "BankRam" * Creates a 256 byte map of each bank, "BankRam"
* The map shows whether it's Built-in RAM, ROM, Expansion RAM, etc. * The map shows whether it's Built-in RAM, ROM, Expansion RAM, etc.
DetectRam DetectRam
@ -1775,18 +1771,35 @@ DetectRam
sta BankMap+$FC ; sta BankMap+$FC ;
sta BankMap+$FD ; sta BankMap+$FD ;
ldx #$10 ;ROM3 starts scan at bank 10 ldx #$10 ;ROM3 starts scan at bank 10
bra :detectloop txy
bra :writeloop
:rom0or1 ;no additional mappings :rom0or1 ;no additional mappings
lda #$FE ;ROM1 end bank FE lda #$FE ;ROM1 end bank FE
sta :endbankscan+1 ;but change our max scan bank sta :endbankscan+1 ;but change our max scan bank
sta :endbankscan2+1 ;but change our max scan bank
ldx #$02 ;ROM0/1 starts scan at bank 02 ldx #$02 ;ROM0/1 starts scan at bank 02
txy
:detectloop txa ;we'll store the bank number
:writeloop txa ;we'll store the bank number
sta :writer+3 ;overwrite bank address sta :writer+3 ;overwrite bank address
sta :reader+3
sta :compare+1 eor #$FF ;INVERT
:writer stal $000000 ;should overwrite first byte :writer stal $000000 ;should overwrite first byte
inx
cpx #$E0
bne :endbankscan
ldx #$F0 ;skip to bank F0 (skip banks E0-EF)
:endbankscan cpx #$FC ;ROM3 end bank (default)
bcc :writeloop ;blt
tyx ;restore start bank
:detectloopread txa
sta :reader+3
eor #$FF
sta :compare+1
:reader ldal $000000 :reader ldal $000000
:compare cmp #$00 :compare cmp #$00
bne :notused bne :notused
@ -1794,15 +1807,17 @@ DetectRam
lda #BankRAMFastExpansion ;store mapping lda #BankRAMFastExpansion ;store mapping
sta BankMap,x sta BankMap,x
:continue inx :continue inx
cpx #$E0 ;skip banks $E0-$EF cpx #$E0
bcc :endbankscan ; <E0 bne :endbankscan2
cpx #$F0 ldx #$F0 ;skip to bank F0 (skip banks E0-EF)
bcs :endbankscan ; >= F0 (>EF)
ldx #$F0 ;skip to bank F0
bra :detectloop
:endbankscan cpx #$FC ;ROM3 end bank (default)
bcc :detectloop ;blt
:endbankscan2 cpx #$FC ;ROM3 end bank (default)
bcc :detectloopread ;blt
* This part looks for the lowest and highest banks to pre-populate
* the Start Bank and End Bank for the tests.
;let's find low/high to simplify things ;let's find low/high to simplify things
ldx #$ff ldx #$ff
:lowloop lda BankMap,x :lowloop lda BankMap,x
@ -1862,27 +1877,27 @@ DetectRam
PrintMemoryMap PrintMemoryMap
jsr CROUT jsr CROUT
ldx #$0 ldx #$0
ldy #$0 ldy #$0
:loop lda BankMap,x :loop lda BankMap,x
phy phy
phx phx
jsr PRBYTE jsr PRBYTE
lda #" " lda #" "
jsr COUT jsr COUT
plx plx
ply ply
iny iny
cpy #16 cpy #16
bne :noty bne :noty
jsr CROUT jsr CROUT
ldy #0 ldy #0
:noty :noty
inx inx
bne :loop bne :loop
rts rts
* Takes address in X/Y and prints out Int stored there * Takes address in X/Y and prints out Int stored there