memory detection all working and sets bank defaults
This commit is contained in:
parent
bbfc1a7a76
commit
c7c86025ab
|
@ -860,3 +860,4 @@ BINBCDVARDUMP
|
|||
jsr RDKEY
|
||||
rts
|
||||
|
||||
|
||||
|
|
157
src/mmt.s
157
src/mmt.s
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue