Originally posted by Vitor VilelaOriginally posted by absentCrownedSo, about 6/8MB ROMs...
They should be technically allowed. They work with bsnes and ZSNES (6MB), the only emulator which currently does not work is snes9x 1.53; however it's already fixed in 1.54, which will get released at... some day.
And it works in real hardware.
Since 1.54 isn't released yet (and probably never will, from what I've gathered), are we allowed to consider FuSoYa's unofficial build as the most up-to-date one? Otherwise, sticking to the rules would mean rejecting 6/8MB hacks. An old, hypotethical update from dead devs hardly counts as the "up-to-date" version.
Originally posted by Vitor VilelaFor who is wondering, probably I will get SA-1 GPS working around this week. Now that I have university and stuff my time is been a bit limited but I will see if I can come with this since it's a thing that people were been wanting for ages.
No stress, don't do like me, focus on your studies.
EDIT: Need help converting the Minimalistic Status Bar (top version). I tried a bunch of things, but I can't get it to work. Of course, I don't understand either the SA-1 nor the status bar patch, so it's pretty hard for me.
I thought this part of the readme would be useful:
CodeOther enhancement chips may work like a slave, because the
SNES sends a command to the chip, which then sends back the
result. But with SA-1 is different story, since both chips
can have interrupts so there's no slave in this case!
How can this be useful? When you can't access something from SA-1 side,
of course. Using this method, you can make a quick access on something
from SNES side, then come back with the value. Example: SA-1 wants to
read from an APU port, but it can't access it. To make it accessible,
call the the SNES so you can read from the APU port and then send
the value to SA-1. See below:
LDA.B #.SNES ; \ Put the SNES pointer to run
STA $0183 ; | in $0183-$0185.
LDA.B #.SNES/256 ; |
STA $0184 ; | (Remember that $0000-$07FF
LDA.B #.SNES/65536 ; | is same as $3000-$37FF).
STA $0185 ; /
LDA #$D0 ; \ Invoke/Call SNES
STA $2209 ; /
.Wait ; \ Wait for SNES.
LDA $018A ; |
BEQ .Wait ; |
STZ $018A ; /
; Now APU value is at $0100-$0103, because:
.SNES ; SNES code
;PHB ; \ Set Bank (not really required to access RAM)
;PHK ; |
;PLB ; /
LDA $2140 ; \ Read $2140-$2143
STA $3100 ; | and save in $3100-$3103
LDA $2141 ; | (Remember that $0000-$07FF is
STA $3101 ; | NOT same as $3000-$37FF in SNES!)
LDA $2142 ; |
STA $3102 ; |
LDA $2143 ; |
STA $3103 ; /
;PLB ; Restore Bank
RTL ; Return.
Using said method you can get rid of almost all SA-1
limitations, but remember that the SNES's speed is 2 MHz,
so if you call it too many times, you may waste some time.
...But I've been blindly trying to comprehend and apply it and I'm having no success so far.
For example, I tried to change this:
CodePreStatusBar: ;status bar
LDA $6D9B
BNE +
LDA #$00 : STA $2111 ;static layer 3
LDA #$00 : STA $2111
LDA #$FF : STA $2112
LDA #$01 : STA $2112
LDA #$04 : STA $212C ;layer 3 on main+sub
STZ $212E
STZ $2130
STZ $2131
STZ $2121
LDA.b #!bgcolor : STA $2122
LDA.b #!bgcolor>>8 : STA $2122
LDA #$09 : STA $2105 ;gfx mode 1 + layer 3 priority
JML $0082B0
+
STZ $2111
STZ $2111
STZ $2112
STZ $2112
JML $0082B0
...to this:
CodePreStatusBar: ;status bar
LDA.B #PreStatusBarCode ; \ Put the SNES pointer to run
STA $0183 ; | in $0183-$0185.
LDA.B #PreStatusBarCode/256 ; |
STA $0184 ; | (Remember that $0000-$07FF
LDA.B #PreStatusBarCode/65536 ; | is same as $3000-$37FF).
STA $0185 ; /
LDA #$D0 ; \ Invoke/Call SNES
STA $2209 ; /
.Wait ; \ Wait for SNES.
LDA $018A ; |
BEQ .Wait ; |
STZ $018A ; /
JML $0082B0
PreStatusBarCode:
PHB
PHK
PLB
LDA $6D9B
BNE +
LDA #$00 : STA $2111 ;static layer 3
LDA #$00 : STA $2111
LDA #$FF : STA $2112
LDA #$01 : STA $2112
LDA #$04 : STA $212C ;layer 3 on main+sub
STZ $212E
STZ $2130
STZ $2131
STZ $2121
LDA.b #!bgcolor : STA $2122
LDA.b #!bgcolor>>8 : STA $2122
LDA #$09 : STA $2105 ;gfx mode 1 + layer 3 priority
PLB
RTL
;;JML $0082B0
+
STZ $2111
STZ $2111
STZ $2112
STZ $2112
PLB
RTL
;;JML $0082B0
...and applied the same kind of shit on every chunk of code that messes with these kind of $2XXX addresses, but the game flat out crashes.
...Yeah, I know you're laughing at my code right now. Continue, it's fine.
I know there's something I'm not getting here and that my code is wrong beyond repair, I simply wanted to show that I'm actually trying. But I can't do it until someone explains how the whole thing works.