memory detection all working and sets bank defaults

This commit is contained in:
Dagen Brock 2015-09-23 16:11:12 -05:00
parent bbfc1a7a76
commit c7c86025ab
2 changed files with 804 additions and 656 deletions

View File

@ -860,3 +860,4 @@ BINBCDVARDUMP
jsr RDKEY
rts

157
src/mmt.s
View File

@ -20,6 +20,12 @@ Init
lda $C034 ; save border color
sta BorderColor
jsr DetectRam
lda BankExpansionLowest
sta StartBank
lda BankExpansionHighest
sta EndBank
lda #MainMenuDefs
ldx #>MainMenuDefs
jsr Menu_InitMenu
@ -28,6 +34,7 @@ Init
Main
:menuLoop jsr DrawMenuBackground
jsr DrawRomMessage
jsr DrawRamMessages
:menuDrawOptionsLoop jsr MenuUpdateWordSize ;always update this before draw in case of change
lda #MainMenuDefs
ldy #>MainMenuDefs
@ -49,8 +56,12 @@ Main
beq :nextItem
:unknownKey bra :menuNoDrawLoop
:prevItem jsr Menu_PrevItem
jsr Menu_UndrawSelectedAll ;hack for blinky cursor
stz _ticker
bra :menuNoDrawLoop
:nextItem jsr Menu_NextItem
jsr Menu_UndrawSelectedAll ;hack for blinky cursor
stz _ticker
bra :menuNoDrawLoop
* Main loop end ^^^
@ -132,11 +143,46 @@ DrawMenuBackground jsr HOME
DrawRomMessage
PRINTXY #55;#05;Mesg_Rom
PRINTXY #55;#06;Mesg_Rom
lda GSROM
jsr PRBYTE
rts
DrawRamMessages
lda GSROM
cmp #3
bne :rom0or1
:rom3 PRINTXY #55;#07;Mesg_InternalRam1024
bra :drawExpansionMessage
:rom0or1 PRINTXY #55;#07;Mesg_InternalRam256
:drawExpansionMessage PRINTXY #55;#08;Mesg_ExpansionRam
lda BankExpansionRam ;number of banks
clc
xce
rep #$30
and #$00FF ;clear artifacts? can't remember state of B
asl ;*2
asl ;*4
asl ;*8
asl ;*16
asl ;*32
asl ;*64
sta _stash
sep #$30
ldx _stash
ldy _stash+1
jsr BINtoBCD
phx
tya
jsr PRBYTE
pla
jsr PRBYTE
lda #"K"
jsr COUT
rts
LOG MAC
lda #]1
ldy #>]1
@ -238,7 +284,7 @@ BeginTestPass PRINTXY #38;#05;Mesg_TestPass
clc ; WRITE START
xce
rep $10 ; long x, short a
lda TestStartBank
lda StartBank
sta CurBank
ldy #0 ; update interval counter
:bankloop lda CurBank
@ -278,7 +324,7 @@ BeginTestPass PRINTXY #38;#05;Mesg_TestPass
clc ; READ START
xce
rep $10 ; long x, short a
lda TestStartBank
lda StartBank
sta CurBank
ldy #0 ; update interval counter
:bankrloop lda CurBank
@ -328,6 +374,11 @@ BeginTestPass PRINTXY #38;#05;Mesg_TestPass
_testIteration ds 8
_errorCounter ds 8
UpdateScanInterval equ #$1000
Mesg_InternalRam256 asc "Built-In RAM 256K",00
Mesg_InternalRam1024 asc "Built-In RAM 1024K",00
Mesg_ExpansionRam asc "Expansion RAM ",00
Mesg_Rom asc "Apple IIgs ROM ",00
Mesg_UserManual asc "USE ARROW KEYS TO MOVE - USE ENTER TO SELECT/EDIT",00
Mesg_Starting asc $8D,"Starting Test",$8D,"Press P to pause, ESC to stop.",$8D,$8D,00
@ -623,7 +674,7 @@ MenuStr_JSR da BeginTest ; MUST PRECEDE MENU S
MenuStr_BeginTest asc " BEGIN TEST "
MenuStr_BeginTestL equ #*-MenuStr_BeginTest
MenuStr_BeginTestE db 00
TestStartBank db #$06
StartBank db #$06
EndBank db #$1F
CurBank db #0
StartAddr dw #$0000
@ -653,7 +704,7 @@ MainMenuDefs
:StartBank hex 19,05 ; x,y
db Menu_TypeHex ; 1=hex input
db 01 ; memory size (bytes)
da TestStartBank ; variable storage
da StartBank ; variable storage
:EndBank hex 22,05 ; x,y
db Menu_TypeHex ; 1=hex input
db 01 ; memory size (bytes)
@ -800,6 +851,7 @@ CheckKey lda KEY
rts
WaitKey
:kloop
jsr ColorizeMenu
@ -819,3 +871,98 @@ BorderColor db 0
_stash ds 255
ds \
* Creates a 256 byte map of each bank, "BankRam"
* The map shows whether it's Built-in RAM, ROM, Expansion RAM, etc.
DetectRam
lda #BankRAMFastBuiltIn ;these are universal to all IIgs
sta BankMap+$00 ;bank 00
sta BankMap+$01 ;bank 01
lda #BankRAMSlowBuiltIn ;
sta BankMap+$e0 ;bank e0
sta BankMap+$e1 ;bank e1
lda #BankROMUsed
sta BankMap+$FE ;bank FE
sta BankMap+$FF ;bank FF
lda GSROM
cmp #3 ;check for ROM3 IIgs
bne :rom0or1
:rom3 lda #BankRAMFastBuiltIn
ldx #$02 ;bank 02
:builtinram sta BankMap,x ;bank 02
inx
cpx #$10 ;stop after bank 0F
bcc :builtinram
lda #BankROMUsed ;ROM 3 is 256KB, so 4 banks (2 additional)
sta BankMap+$FC ;
sta BankMap+$FD ;
ldx #$10 ;ROM3 starts scan at bank 10
bra :detectloop
:rom0or1 ;no additional mappings
lda #$FE ;ROM1 end bank FE
sta :endbankscan+1 ;but change our max scan bank
ldx #$02 ;ROM0/1 starts scan at bank 02
:detectloop txa ;we'll store the bank number
sta :writer+3 ;overwrite bank address
sta :reader+3
sta :compare+1
:writer stal $000000 ;should overwrite first byte
:reader ldal $000000
:compare cmp #$00
bne :notused
inc BankExpansionRam ;TotalMB++
lda #BankRAMFastExpansion ;store mapping
sta BankMap,x
:continue inx
cpx #$E0 ;skip banks $E0-$EF
bcc :endbankscan ; <E0
cpx #$F0
bcs :endbankscan ; >= F0 (>EF)
ldx #$F0 ;skip to bank F0
bra :detectloop
:endbankscan cpx #$FC ;ROM3 end bank (default)
bcc :detectloop ;blt
;let's find low/high to simplify things
ldx #$ff
:lowloop lda BankMap,x
cmp #BankRAMFastExpansion
beq :isRam
dex
cpx #$ff
bne :lowloop
bra :checkhigh
:isRam stx BankExpansionLowest
dex
bra :lowloop
:checkhigh ldx #$00
:highloop lda BankMap,x
cmp #BankRAMFastExpansion
beq :isRam2
inx
bne :highloop
bra :done
:isRam2 stx BankExpansionHighest
inx
bra :highloop
:done rts
:notused lda #BankNoRAM
sta BankMap,x
bra :continue
BankExpansionRam ds 1
BankExpansionLowest ds 1
BankExpansionHighest ds 1
ds \
BankMap ds 256 ;
BankROMUsed = 1
BankROMReserved = 2
BankRAMSlowBuiltIn = 3
BankRAMFastBuiltIn = 4
BankRAMFastExpansion = 5
BankNoRAM = 0