View Full Version: Random things about Satellaview

BS Zelda > BS-X > Random things about Satellaview

Pages: [1] 2 3

Title: Random things about Satellaview
Description: Discoveries inside !


LuigiBlood - July 30, 2010 11:13 PM (GMT)
Well, i decided to see how the BS-X ROM worked, and i do hacks in the interesting places to see if something interesting happens.

Let me talk about unreleased things.
BS-X supports up to 32M Data Pack.
No joke.

Proof :
user posted image
(Mario ExciteBike 4 in one Data Cart !)

I made a 32M Data ROM for BS-X, this screen is taken from bsnes.
But unfortunately, it can only start the first game.

I had to do a little hack on the BS-X to make this working.
But it could work for real, if you can make a 32M Data Pack with inside info saying to the BS-X : "It's a 32M Data Cart, read it all !"

Well, you want technical explaination ?
Here it is :
First of all, the Data Pack is directly accessible from the software.
32M of Data directly accessible.
But the BS-X actually CAN make use of all, but the Data Pack must give informations to the BS-X.

Here's a disassembly of the Data Pack Header Info Reading process :
CODE
00/C1F2: AF 00 FF C0  LDA $C0FF00
00/C1F6: 8F D6 99 7E  STA $7E99D6
00/C1FA: AF 02 FF C0  LDA $C0FF02
00/C1FE: 8F D7 99 7E  STA $7E99D7
00/C202: AF 04 FF C0  LDA $C0FF04
00/C206: 8F D8 99 7E  STA $7E99D8
00/C20A: AF 06 FF C0  LDA $C0FF06
00/C20E: 8F D9 99 7E  STA $7E99D9
00/C212: AF 08 FF C0  LDA $C0FF08
00/C216: 8F DA 99 7E  STA $7E99DA
00/C21A: AF 0A FF C0  LDA $C0FF0A
00/C21E: 8F DB 99 7E  STA $7E99DB
00/C222: AF 0C FF C0  LDA $C0FF0C
00/C226: 8F DC 99 7E  STA $7E99DC
00/C22A: AF 0E FF C0  LDA $C0FF0E
00/C22E: 8F DD 99 7E  STA $7E99DD
00/C232: AF 10 FF C0  LDA $C0FF10
00/C236: 8F DE 99 7E  STA $7E99DE
00/C23A: AF 12 FF C0  LDA $C0FF12
00/C23E: 8F DF 99 7E  STA $7E99DF


It reads bytes that the Data Pack is actually giving, DON'T EVEN TRY TO SEARCH FOR THEM IN BS ROMS. They are not there.
But what we are interested the most, is this :
CODE
00/C20A: AF 06 FF C0  LDA $C0FF06


What is that ? It's the reading process of the Size Byte.
It's the 7th byte in the Header Info of the Data Cart.
bsnes actually forces the Header Info to have 8M.
So i had to hack the ROM to see how it can work.
I changed this :
CODE
00/C20A: AF 06 FF C0  LDA $C0FF06

TO :
CODE
00/C20A: A9 2C  LDA #$2C
00/C20C  EA  NOP
00/C20D  EA  NOP


Instead of reading the Size Info byte, i did fake it by instead loading another byte.
How that Size Data works :
Let's see "2C" in detail :
$2C = %00101100

Here's what is needed to closely watch :
$2C = %00101100

It's the Size Info.
By changing it, you can make it :
000 = 2M Data Cart
001 = 4M Data Cart
010 = 8M Data Cart
011 = 16M Data Cart
100 = 32M Data Cart

I don't try to do more, because i don't think it would be good, as 32M is the REAL limit.
I don't know the use of the other Info bytes.

Well, this is it. It was long to write, but i'm happy.

Con - July 31, 2010 08:37 AM (GMT)
that might be interesting for mottzilla's real hardware project.

For emulation sram save place is not imprortant, I think tq,fq and restoration use even 64 k saveplace (I also enlarged it once). For rh emulation, there is of course problem how big the sram in the rom is.

LuigiBlood - July 31, 2010 02:55 PM (GMT)
Apparently, this is the [strike]Channel Number request[/strike] (?) :
CODE
00/C2AD: A9 01        LDA #$01
00/C2AF: 8D 94 21     STA $2194
00/C2B2: A9 AA        LDA #$AA
00/C2B4: 8D 88 21     STA $2188
00/C2B7: CD 88 21     CMP $2188
00/C2BA: D0 22        BNE $C2DE
00/C2BC: A9 55        LDA #$55
00/C2BE: 8D 88 21     STA $2188
00/C2C1: CD 88 21     CMP $2188
00/C2C4: D0 18        BNE $C2DE
00/C2C6: 9C 88 21     STZ $2188
00/C2C9: 9C 89 21     STZ $2189
00/C2CC: 9C 8E 21     STZ $218E
00/C2CF: 9C 8F 21     STZ $218F
00/C2D2: AD 88 21     LDA $2188
00/C2D5: 0D 89 21     ORA $2189
00/C2D8: 0D 8E 21     ORA $218E
00/C2DB: 0D 8F 21     ORA $218F
00/C2DE: 6B           RTL


[strike]From what i see, it gets the Channel Number via the register $2188.[/strike][/strike]

No, it's something else, and most of all, it's used to get some signal, but what signal ? It's even only used one time.

LuigiBlood - July 31, 2010 08:51 PM (GMT)
Ok, i know what's this code.
It's a check on the Hardware.

I did a hack of this code, it did a "01" in the bottom right. And a message says a little later "There's no signal."
Without the hack, on bsnes, and the Hardware emulation, the message "There's no signal." appeared much later than with the "01".

I actually tested on bsnes, with the original BS-X ROM, and removed the "Satellaview" Addon via the Config.
"01" appears.

Remember this ?
https://docs.google.com/Doc?docid=0AQ4eABCh...3ZzM4Z2Mz&hl=en

Well, it suddenly makes sense. "01" appears if there's no Satellaview hardware connected. Like in the message with the Error Code 01-01.

Vehiek - August 1, 2010 06:20 AM (GMT)
QUOTE (LuigiBlood @ Jul 31 2010, 12:51 PM)
Well, it suddenly makes sense. "01" appears if there's no Satellaview hardware connected. Like in the message with the Error Code 01-01.

So that's why the number appears and what it's for...
I've tried several times in the past to find things about how the BIOS reads the signals, but I haven't gotten much out of it. It'd probably help if we knew how the registers were affected by the modem when it was operational.

LuigiBlood - August 1, 2010 01:07 PM (GMT)
CODE
00/C2E8: E2 20        SEP #$20    ;Set Accumulator 8-bits
00/C2EA: AD 96 21     LDA $2196  ;Read Register $2196
00/C2ED: 29 02        AND #$02    ;A AND #$02
00/C2EF: 6B           RTL        ;Return


I did a hack of this code, and seems to do a "02" in the Bottom right.
Error "02" is about the Bitstream Cable, is the register $2196 a Data Reciever ?
EDIT : It's not a Data Reciever. Or else it would be used more than one time in the ROM.

The register must not give a byte with :
%00000000

This bit must be 0 or Error 02 is given.

LuigiBlood - August 3, 2010 11:22 AM (GMT)
Here's the SRAM Checksum Code :
CODE
80/C9AA: 08       PHP
80/C9AB: C230     REP #$30
80/C9AD: A90000   LDA #$0000
80/C9B0: 8F045010 STA $105004
80/C9B4: 3A       DEC A
80/C9B5: 8F025010 STA $105002
80/C9B9: 9C0000   STZ $0000
80/C9BC: A2FF0F   LDX #$0FFF
80/C9BF: BF005010 LDA $105000,X
80/C9C3: 29FF00   AND #$00FF
80/C9C6: 18       CLC
80/C9C7: 6500     ADC $00
80/C9C9: 8500     STA $00
80/C9CB: BF005011 LDA $115000,X
80/C9CF: 29FF00   AND #$00FF
80/C9D2: 18       CLC
80/C9D3: 6500     ADC $00
80/C9D5: 8500     STA $00
80/C9D7: BF005012 LDA $125000,X
80/C9DB: 29FF00   AND #$00FF
80/C9DE: 18       CLC
80/C9DF: 6500     ADC $00
80/C9E1: 8500     STA $00
80/C9E3: CA       DEX
80/C9E4: 10D9     BPL $C9BF
80/C9E6: 8F045010 STA $105004
80/C9EA: 49FFFF   EOR #$FFFF
80/C9ED: 8F025010 STA $105002
80/C9F1: 28       PLP
80/C9F2: 221BCA80 JSR $80CA1B
80/C9F6: 6B       RTL


The Checksum works like this :
It sums all the bytes in the SRAM.

LuigiBlood - August 3, 2010 01:51 PM (GMT)
Here's a little program i did :
BS-X SRAM Checksum Fixer 0.2 :
Usage :
CHKFIX.py [-f] <SRAM File>
-f = Fix Checksum.

Source Code (Uses Python Programming Language) :
CODE
from struct import *
import sys
print "BS-X SRAM Checksum Fixer v0.2"
print "By LuigiBlood/Seru-kun"

#12287
if sys.argv[1] == "-f" and sys.argv[2] <> "" :
   FILE = sys.argv[2]
elif sys.argv[1] <> "-f" and sys.argv[1] <> "" :
   FILE = sys.argv[1]

if FILE <> "" and sys.argv[1] == FILE :
   SRAM = open(FILE,"r+b")
   CHK = 0
   CHK2 = 0
   OFFSET = int("2fff", 16)
   SRAM.seek(4)
   OLD=ord(SRAM.read(1))+ord(SRAM.read(1))*256
   print "Checksum : " + hex(OLD)
   SRAM.seek(2)
   OLDR=ord(SRAM.read(1))+ord(SRAM.read(1))*256
   print "Reversed Checksum : " + hex(OLDR)
elif FILE <> "" and sys.argv[1] == "-f" and sys.argv[2] == FILE :
   SRAM = open(FILE,"r+b")
   CHK = 0
   CHK2 = 0
   A = 0
   OFFSET = int("fff", 16)
   SRAM.seek(4)
   OLD=ord(SRAM.read(1))+ord(SRAM.read(1))*256
   print "Checksum : " + hex(OLD)
   SRAM.seek(2)
   OLDR=ord(SRAM.read(1))+ord(SRAM.read(1))*256
   print "Reversed Checksum : " + hex(OLDR)
   SRAM.seek(2)
   SRAM.write(chr(255))
   SRAM.write(chr(255))
   SRAM.write(chr(0))
   SRAM.write(chr(0))
   print "Checksum Removed, calculating..."
   while OFFSET >= 0:
       SRAM.seek(OFFSET)
       A = ord(SRAM.read(1))
       A += CHK
       CHK = A
       SRAM.seek(OFFSET + int("1000", 16))
       A = ord(SRAM.read(1))
       A += CHK
       CHK = A
       SRAM.seek(OFFSET + int("2000", 16))
       A = ord(SRAM.read(1))
       A += CHK
       CHK = A
       OFFSET -= 1

   SRAM.seek(2)
   CHK2 = CHK & int("ffff", 16)
   print "NEW Checksum : " + hex(CHK2)
   RCHK = CHK2 ^ int("ffff", 16)
   print "NEW Reversed Checksum : " + hex(RCHK)
   print "Replacing Checksums..."
   SRAM.write(pack("H", RCHK))
   SRAM.write(pack("H", CHK2))
   print "Done !"

LuigiBlood - August 3, 2010 07:34 PM (GMT)
Here's some infos from the wiki :
This is the SRAM Map. Everything is Little Endian, unless is said so.

Offset - Size (Bytes) - Description
$0000 - 2 - Always $4753
$0002 - 2 - Reversed Checksum
$0004 - 2 - Checksum
$0006 - 20 - Name (Shift-JIS)
$001C - 2 - Gender (0 = Boy, more than 0 = Girl)
$001E - 6 - Money
$0024 - 2 - Number of Items

LuigiBlood - August 3, 2010 10:03 PM (GMT)
Do you want items ?
Check here :
http://wiki.superfamicom.org/snes/show/Satellaview+SRAM+Info

$0026 - ? - Items

How to get Items ? It’s a Pointer. Point it to a Item Name, and it will recognize it. Each pointer does 3 bytes, and needs to be pointed at the Memory Map. It’s little endian, and also, before the pointer, a $00 is needed. I don’t know why. Or just copy what’s on the list :

CODE
Pointer - Item
0029C288 - Transfer Device
00B8C288 - Telephone Card (5)
...


Why i didn't continue the list ?
I DON'T KNOW JAPANESE !!

Vehiek - August 4, 2010 04:04 AM (GMT)
QUOTE (LuigiBlood @ Aug 3 2010, 02:03 PM)
Why i didn't continue the list ?
I DON'T KNOW JAPANESE !!

I made a list of item name offsets earlier.
http://z9.invisionfree.com/bszelda/index.p...dpost&p=1405808

LuigiBlood - September 13, 2010 07:43 PM (GMT)
Something got me into my eye, i don't know what, but it gets more interesting...

CODE
80c30e lda $218a     [80218a] A:fe00 X:0006 Y:0000 S:1e78 D:0000 DB:80 nvMxdIZC V:237 H:1046
80c311 sta $143d     [80143d] A:fe00 X:0006 Y:0000 S:1e78 D:0000 DB:80 nvMxdIZC V:237 H:1076
80c314 beq $c34f     [80c34f] A:fe00 X:0006 Y:0000 S:1e78 D:0000 DB:80 nvMxdIZC V:237 H:1108


From the Trace Log, while trying to get a signal.
I tried to change the loaded value to #$FF, it's the same thing.
But #$7F...

CODE
80c30e lda #$7f               A:0100 X:0006 Y:0000 S:1e78 D:0000 DB:80 nvMxdIZC V:239 H: 648
80c310 nop                    A:017f X:0006 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzC V:239 H: 664
80c311 sta $143d     [80143d] A:017f X:0006 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzC V:239 H: 678
80c314 beq $c34f     [80c34f] A:017f X:0006 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzC V:239 H: 710
80c316 bmi $c350     [80c350] A:017f X:0006 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzC V:239 H: 726
80c318 cmp #$14               A:017f X:0006 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzC V:239 H: 742
80c31a bcc $c31e     [80c31e] A:017f X:0006 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzC V:239 H: 758
80c31c lda #$14               A:017f X:0006 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzC V:239 H: 774
80c31e sta $143d     [80143d] A:0114 X:0006 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzC V:239 H: 790
80c321 sta $47       [000047] A:0114 X:0006 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzC V:239 H: 822
80c323 stz $48       [000048] A:0114 X:0006 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzC V:239 H: 846
80c325 stz $143c     [80143c] A:0114 X:0006 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzC V:239 H: 870
80c328 ldx #$0000             A:0114 X:0006 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzC V:239 H: 902
80c32b lda $218b     [80218b] A:0114 X:0000 Y:0000 S:1e78 D:0000 DB:80 nvMxdIZC V:239 H: 926
80c32e sta $7e9a20,x [7e9a20] A:0121 X:0000 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzC V:239 H: 956
80c332 inx                    A:0121 X:0000 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzC V:239 H: 996
80c333 cpx $47       [000047] A:0121 X:0001 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzC V:239 H:1010
80c335 bne $c32b     [80c32b] A:0121 X:0001 Y:0000 S:1e78 D:0000 DB:80 NvMxdIzc V:239 H:1042
80c32b lda $218b     [80218b] A:0121 X:0001 Y:0000 S:1e78 D:0000 DB:80 NvMxdIzc V:239 H:1064
80c32e sta $7e9a20,x [7e9a21] A:0121 X:0001 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzc V:239 H:1094
80c332 inx                    A:0121 X:0001 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzc V:239 H:1134
80c333 cpx $47       [000047] A:0121 X:0002 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzc V:239 H:1148
80c335 bne $c32b     [80c32b] A:0121 X:0002 Y:0000 S:1e78 D:0000 DB:80 NvMxdIzc V:239 H:1180
80c32b lda $218b     [80218b] A:0121 X:0002 Y:0000 S:1e78 D:0000 DB:80 NvMxdIzc V:239 H:1202
80c32e sta $7e9a20,x [7e9a22] A:0121 X:0002 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzc V:239 H:1232
80c332 inx                    A:0121 X:0002 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzc V:239 H:1272
80c333 cpx $47       [000047] A:0121 X:0003 Y:0000 S:1e78 D:0000 DB:80 nvMxdIzc V:239 H:1286
80c335 bne $c32b     [80c32b] A:0121 X:0003 Y:0000 S:1e78 D:0000 DB:80 NvMxdIzc V:239 H:1318


It takes the value from a BS-X Register and WRITES IT TO THE WRAM ? !
It might get interesting... Stay tuned...

LuigiBlood - September 14, 2010 05:31 AM (GMT)
My thoughts about BS-X Registers :
$218A - Number of byte blocks (Max = $14)
$218B - Number of bytes in a block
$218C - Data ?

I think we're about to find how the BS-X Downloads Data.

LuigiBlood - September 15, 2010 06:44 PM (GMT)
This is getting exciting !

I got No signal message to never appear.
All because of a change on $218D.
So, $218A to D, are Signal Related.

[20:40] > $7E9A20 = $218B Data.
[20:40] > $7E9A34 = $218C Data.

RAM 0x143C : Contains the value of $218D

For record purposes.

I'm on something there, maybe it's almost time !

Con - September 15, 2010 07:34 PM (GMT)
I do want to share your excitement, however I'm too long off-coding yet and do not understand what you are trying to find out and what's the purpose of it... could you explain, it sounds interesting

LuigiBlood - September 15, 2010 07:43 PM (GMT)
I'm trying to find out, how the Satellaview gets a signal.

Con - September 15, 2010 08:02 PM (GMT)
ah ok, might be interesting for technical history of BS-X... is there any practical use (real hardware or such)?

LuigiBlood - September 15, 2010 08:17 PM (GMT)
Actually, i got the idea of a Satellaview Server System, but i don't want this to be possible on real hardware (for various reasons). But i need to know how the BS-X gets a signal so i can work on something.

Duke Serkol - September 15, 2010 10:55 PM (GMT)
In before Zero Wing joke.

Tre - September 16, 2010 05:40 AM (GMT)
*Sighs* All your base (code) are belong to us. *Walks out, knowing my job here is complete...*

LuigiBlood - October 16, 2010 03:08 PM (GMT)
It downloads data.

But recognizing it, is another story.
It's just getting complicated.

But you know, the fight between me and BS-X, has just started.

Remember that this part of the wiki : http://wiki.superfamicom.org/snes/show/Satellaview+(Meta)
Is getting updated by myself.

Right now, i found out about some checksum on the download data header, and some other things that i didn't get yet.

Duke Serkol - October 16, 2010 05:31 PM (GMT)
Sounds like progress. Good ^_^

LuigiBlood - October 19, 2010 11:16 AM (GMT)
Not related much to BS-X Project, but it needs a show :
user posted image

Yeah. I made it work ! And i didn't hack the game at all.

Here's the thing :
I tried a XML Memory Map, with the Mapping that RPG Tsukuru 2 actually expect (Slot = Bank C0-FF:8000-FFFF)
RPG Tsukuru 2 tried to access the Vendor Info, which it expects it to be at Bank C1:FF00.
The Vendor Info does not appear there, which is probably why it doesn't work.

After writing $38 and $d0 at $c08000, it expects a negative number at $c08004.
So i edited the Data Pack Data, to make RPG Tsukuru 2 see that there's a Data Pack here.
But it doesn't see anything since i have maybe corrupt it with just a $FF on 0x4 and Fake Vendor Info at 0xFF00.

EDIT:
With hacking the Loads in the ROM this time :
user posted image

But there's another problem...
It reads them, but i can't play them.

MadHatter - October 19, 2010 11:47 AM (GMT)
So this is the screen that you get when you try to load memory pack data from RPG Tsukuru 2 or is this some sort of Memory Pack file manager/debug mode that you discovered?

Also this may be a silly question but what's Shinki Sakusei? Is that the default savename or is that actually the name of an official Nintendo level for RPG Tsukuru 2?

LuigiBlood - October 19, 2010 12:18 PM (GMT)
It's the screen for managing Memory Pack Data, it can save your own RPGs, load others, and delete all kinds of data.

Also, i managed to play some RPGs. Just don't load anything, don't make anything, go to the Game Menu (1st choice), it will give you a choice between present RPGs, the one included, and the others on the Memory Pack.

About Shinki Sakusei :
I don't know.

LuigiBlood - October 19, 2010 03:44 PM (GMT)
RPG Tsukuru 2 Data Pack support IPS Patch + XML Map :
http://www.mediafire.com/?45pspv25mqw6sy5

Sound Novel Tsukuru Data Pack support IPS Patch + XML Map :
http://www.mediafire.com/?qukpotymaj67fib

Here.

SmashManiac - October 19, 2010 05:12 PM (GMT)
I'm not familiar with RPG Tsukuru, what do the above patches allow exactly?

LuigiBlood - October 19, 2010 05:33 PM (GMT)
These patches makes the ROM read Data Packs, as bsnes doesn't do full support of it.

SmashManiac - October 19, 2010 06:14 PM (GMT)
So it's a workaround for an emulation issue?

LuigiBlood - October 19, 2010 06:23 PM (GMT)
Yeah. And about Ongaku Tsukuru, i can't do anything about it.

Update :

RPG Tsukuru 2 Data Pack support patch + XML Map :
http://www.mediafire.com/?45pspv25mqw6sy5 (IPS)
http://www.mediafire.com/?mk8gej426r2vtw4 (UPS)

Sound Novel Tsukuru Data Pack support patch + XML Map :
http://www.mediafire.com/?qukpotymaj67fib (IPS)
http://www.mediafire.com/?w2bn1yh32sd2541 (UPS)

SmashManiac - October 19, 2010 06:55 PM (GMT)
Ah I see. I suggest you contact byuu about this.

Videogamer555 - January 27, 2011 03:54 AM (GMT)
QUOTE (LuigiBlood @ Jul 30 2010, 03:13 PM)
Well, i decided to see how the BS-X ROM worked, and i do hacks in the interesting places to see if something interesting happens.

Let me talk about unreleased things.
BS-X supports up to 32M Data Pack.
No joke.

Proof :
user posted image
(Mario ExciteBike 4 in one Data Cart !)

I made a 32M Data ROM for BS-X, this screen is taken from bsnes.
But unfortunately, it can only start the first game.

I had to do a little hack on the BS-X to make this working.
But it could work for real, if you can make a 32M Data Pack with inside info saying to the BS-X : "It's a 32M Data Cart, read it all !"

Well, you want technical explaination ?
Here it is :
First of all, the Data Pack is directly accessible from the software.
32M of Data directly accessible.
But the BS-X actually CAN make use of all, but the Data Pack must give informations to the BS-X.

Here's a disassembly of the Data Pack Header Info Reading process :
CODE
00/C1F2: AF 00 FF C0  LDA $C0FF00
00/C1F6: 8F D6 99 7E  STA $7E99D6
00/C1FA: AF 02 FF C0  LDA $C0FF02
00/C1FE: 8F D7 99 7E  STA $7E99D7
00/C202: AF 04 FF C0  LDA $C0FF04
00/C206: 8F D8 99 7E  STA $7E99D8
00/C20A: AF 06 FF C0  LDA $C0FF06
00/C20E: 8F D9 99 7E  STA $7E99D9
00/C212: AF 08 FF C0  LDA $C0FF08
00/C216: 8F DA 99 7E  STA $7E99DA
00/C21A: AF 0A FF C0  LDA $C0FF0A
00/C21E: 8F DB 99 7E  STA $7E99DB
00/C222: AF 0C FF C0  LDA $C0FF0C
00/C226: 8F DC 99 7E  STA $7E99DC
00/C22A: AF 0E FF C0  LDA $C0FF0E
00/C22E: 8F DD 99 7E  STA $7E99DD
00/C232: AF 10 FF C0  LDA $C0FF10
00/C236: 8F DE 99 7E  STA $7E99DE
00/C23A: AF 12 FF C0  LDA $C0FF12
00/C23E: 8F DF 99 7E  STA $7E99DF


It reads bytes that the Data Pack is actually giving, DON'T EVEN TRY TO SEARCH FOR THEM IN BS ROMS. They are not there.
But what we are interested the most, is this :
CODE
00/C20A: AF 06 FF C0  LDA $C0FF06


What is that ? It's the reading process of the Size Byte.
It's the 7th byte in the Header Info of the Data Cart.
bsnes actually forces the Header Info to have 8M.
So i had to hack the ROM to see how it can work.
I changed this :
CODE
00/C20A: AF 06 FF C0  LDA $C0FF06

TO :
CODE
00/C20A: A9 2C  LDA #$2C
00/C20C  EA  NOP
00/C20D  EA  NOP


Instead of reading the Size Info byte, i did fake it by instead loading another byte.
How that Size Data works :
Let's see "2C" in detail :
$2C = %00101100

Here's what is needed to closely watch :
$2C = %00101100

It's the Size Info.
By changing it, you can make it :
000 = 2M Data Cart
001 = 4M Data Cart
010 = 8M Data Cart
011 = 16M Data Cart
100 = 32M Data Cart

I don't try to do more, because i don't think it would be good, as 32M is the REAL limit.
I don't know the use of the other Info bytes.

Well, this is it. It was long to write, but i'm happy.

WOH! How did you put 4 games in one file? I've tried putting 2 different BS compatible games into a zip file and play in BSNES, but only the 1st game in the zip file showed up in the BS-X game launcher menu. I'm confused.

SmashManiac - January 27, 2011 05:29 AM (GMT)
QUOTE (Videogamer555 @ Jan 26 2011, 11:54 PM)
I've tried putting 2 different BS compatible games into a zip file

user posted image

Wow, I feel as if a high school student still struggling with fractions just asked something about calculus.

Anyway, I'll tell you what you did wrong: you're supposed to append the data into one big file by using a hex editor, not compress the files together.

KiddoCabbusses - January 27, 2011 05:30 AM (GMT)
VG555.... *coughcoughcough*

.... let me just put it this way; A real Super Famicom never read .zip files that way, and neither would BSNES.

There are a select few ROM dumps going around of 8M Packs with more than one bit of data, most notably the "Kouryaku Casino Bar Roulette/Game Tora no Ooana SPECIAL Magazine" combo. Besides that, while it'd be theoretically possible to combine ROMs, no one really bothers with it because it's harder to work with in emulation - Callis even prefers -splitting- ROMs if there's more than one application in an 8M Pack dump.

... but, VG555, I suggest digging up on the basics before trying to get into all this.

Videogamer555 - January 27, 2011 06:00 AM (GMT)
QUOTE (KiddoCabbusses @ Jan 26 2011, 09:30 PM)
VG555.... *coughcoughcough*

.... let me just put it this way; A real Super Famicom never read .zip files that way, and neither would BSNES.

There are a select few ROM dumps going around of 8M Packs with more than one bit of data, most notably the "Kouryaku Casino Bar Roulette/Game Tora no Ooana SPECIAL Magazine" combo. Besides that, while it'd be theoretically possible to combine ROMs, no one really bothers with it because it's harder to work with in emulation - Callis even prefers -splitting- ROMs if there's more than one application in an 8M Pack dump.

... but, VG555, I suggest digging up on the basics before trying to get into all this.

Well to make 4 games show up on that game start list then, I'm gonna have to make a single file containing all 4 roms. Now do I also need code to tell the emu that there's more than one game in the data stream that is the file? Or does it automatically scan the whole file and then recognize the end of one game and the beginning of the one? What about the SMC header on each rom? Before I concatinate them into a single file should I leave the SMC headers in place, remove all but the SMC header on the first rom, or remove all SMC headers?

Or is it even more complex than concatenating roms? Will I need to know ASM programming to write code that tells it that it's a multi-game cart, and write this loader program as it's own game rom and then append the actual game roms to the end of this file?

KiddoCabbusses - January 27, 2011 02:33 PM (GMT)
*eh-hem!*

While I don't know the specifics of how the packs store data, I will say ta few of these;

1) Don't expect to be able to combine any 1mb games together, because BSNES will not read a ROM as BS-X/Satellaview if it's above 1mb. You won't be able to combine Soundlink games or game demos.

2) From what I remember Callis telling me, there is some degree of interleaving or some such in Memory Packs with multiple pieces of data. I assume this makes it a tad more complicated.

3) The only real function this iwll end up having is having 2-8 games on the menu. derp.

SmashManiac - January 27, 2011 03:47 PM (GMT)
QUOTE (LuigiBlood @ Jul 30 2010, 07:13 PM)
But unfortunately, it can only start the first game.

QUOTE (Videogamer555 @ Jan 27 2011, 02:00 AM)
loader

user posted image

Seriously, did you even read what you originally quoted or just looked at the picture?

MadHatter - January 27, 2011 03:56 PM (GMT)
Haha. I originally posted basically the same thing and then I deleted it because I thought that maybe VG555 was hoping to go hacking beyond where LuigiBlood left off. If so, then best of luck to him.

If on the other hand VG555 was just asking us to spoon-feed yet another answer to him because he doesn't like reading previous posts then double triple facepalm to all of us for even answering him...

EDIT: striking - it was already double facepalm. : P

Terra Branford - January 27, 2011 05:35 PM (GMT)
Let's try to tone the "mockery" down, just a touch, yeah? VG5³ may be frustrating you guys with discoveries that we all knew already for years, but let's not squash his enthusiasm just yet.

That said, VG5³, you do need to read more carefully, what has been posted, before you just reply to whatever catches your interest most. And research what has already been on the site. We've got people here who have been living BS Zelda and Satellaview for a decade now... and if asked correctly, will likely point you into the right direction for new information you'd never have discovered on your own.

I'm just saying.

MadHatter - January 27, 2011 08:24 PM (GMT)
You are of course right, Terra. There's no need to turn people off of BS Zelda or the Satellaview games or to try to diminish their enthusiasm. I think the frustration over VG555 comes from the fact that he has been very rude since the start. If he could listen to the repeated advice to stop typing in ALL CAPS and to do a bit of rudimentary research before asking silly questions or accusing people of violating his (often incorrect) understanding about how the games and the system historically worked then it would be much easier to be nice to him. I for one would be happy to welcome a reformed VG555.




* Hosted for free by InvisionFree