Register | Login
Views: 19364387
Main | Memberlist | Active users | ACS | Commons | Calendar | Online users
Ranks | FAQ | Color Chart | Photo album | IRC Chat
11-02-05 12:59 PM
1 user currently in Rom Hacking: hukka | 2 guests
Acmlm's Board - I2 Archive - Rom Hacking - X-Band Revival project | |
Pages: 1 2 3Add to favorites | "RSS" Feed | Next newer thread | Next older thread
User Post
neviksti

Goomba
Level: 8

Posts: 5/25
EXP: 1510
For next: 677

Since: 06-09-05

Since last post: 36 days
Last activity: 30 days
Posted on 06-16-05 01:37 PM Link | Quote
Hello, for those that don't know of me, I love playing with old hardware. Half the fun is learning how it works ... or in some cases, just getting it to work.

I have considered this for quite some time now, and decided I want to work on the SNES X-Band. I am looking for people to help.

For those that don't know, the X-Band was a device for the SNES that:
- in essence was a massive "Game Genie", it is a hacker's dream come true, allowing fairly massive patching of almost any game
- the "main program" on the device itself was updatable
- it contained a modem
- there used to be a service that you could call into and download updates, and hacks ... Which allowed many games to be turned into multi-player modem games!
- the US user base was fairly large and enthralled with it, but when the company was bought out the service was shut down (I'm probably getting history a bit wrong here, but they were bought out ... eventually leading to Qualcomm as the owners I think)
- From the sounds of it, the programmers were a close knit group of hard working youngsters just out of college. They disassembled and gutted many a game to hack it and over came the obstacles to make games 2-player modem games ... which they obviously weren't originally designed to be!
- You could also send mail and read news "online".

and finally
- There is actually a secret built in memory viewer/hexeditor! (This means if we can get something working, by making just a couple changes, ie the dialup number in memory, anyone with an X-Band could try out what we create... they don't need a copier or any other special equipment.)


This thing has plenty of potential. Who's interested in helping?

What would really help:
- If you own an X-Band, check if the memory (battery backed SRAM) is still good by starting it up. If so, I'd love to get a copy of some real patches (haven't found any X-Bands with good bateries yet).
- Try checking local used game stores and seeing if they have some X-Bands that still have the saved memory.
- If you have an X-Band and can't help, but would like to donate it ... well, it would be very much appreciated

Side oddities that would be fun to fiddle with:
- If you own an X-Band keyboard (or know where to get one), I'd be interested seeing how it works. (This was added later in its life, and I'm not sure if it got beyond the proto-type phase.)


For those interested in helping with the hacking, some skills that would be helpful (not required though):

Code readers:
- understand SNES asm
- understand C at a low level (We will be looking at the code in asm, but it was originally written in C and then compiled ... so it looks kinda weird unless you understand C at a low level.)
- goals are to figure out software protocals and hardware features so that we can make this puppy do whatever we want

Code writers:
- can write a modem program for a PC (I have done this in DOS in C with asm thrown in as well, but I used direct register writes and swapped interrupt vectors ... I'm not sure how to do it "the modern way" in Windows)
- this is for eventually making a new "server" ... which will depend on info from the code readers above, but I'd like to have at least the fundemental communication routines setup so we can play with / test info as it comes in.

- also plenty of test programs to figure out the hardware will be necessary (SNES programs)
- ultimately, it would be fun to do a proof of concept with MarioWorld (It's two player, but you take turns ... so there are no synchronizing issues). Then try out MarioKart.

- maybe someone that could write a crude "decompiler" to turn the X-Band code back into a crude form of C (would make reading it much quicker).


Hardware skills:
- even if you don't understand asm, you may be able to help interpret strange findings from the code ... a good understanding of the memory map and chips involved will help us figure out the hardware (I already have a rough sketch of the memory map, and have a datasheet explaining the modem chip used in this cartridge)
- For testing purposes, it would be nice to connect the X-Band directly to the modem of a PC. There appears to be a mode of the modem chip on the X-Band that supports this ... however, I have no idea how to get the PC modem to do this. Help here will be nice as well.
- help with understanding the theory behind how they overcame the lag in a phone line to make a synchonous multiplayer modem game


Basically, there are plenty of fun things to work on.
After this progresses a bit, I can supply the following to big helpers that need it:
- a SF3 or SF7 (an SNES copier) which is versatile enough to use the XBand on pass through and still allow modifying the ROM
- an X-Band for testing


So who's up for the thrill of conquering this rom hacking challenge?
People with all ranges and levels of interest are welcome!

Thanks,
-nevisti...

P.S. If you guys know other places to pull in friends to work on this, feel free to ask them as well.


(edited by neviksti on 06-16-05 04:41 AM)
(edited by neviksti on 06-16-05 04:42 AM)
(edited by neviksti on 06-16-05 04:45 AM)
(edited by neviksti on 06-16-05 04:47 AM)
blackhole89

LOLSEALS
Moderator of ROM hacking
EmuNET IRC network admin
Head GM of TwilightRO
Level: 47

Posts: 722/971
EXP: 739208
For next: 26995

Since: 03-15-04
From: Dresden/Germany

Since last post: 14 hours
Last activity: 12 hours
Posted on 06-16-05 04:09 PM Link | Quote


This sounds fairly interesting.


Code readers:
- understand SNES asm
- understand C at a low level (We will be looking at the code in asm, but it was originally written in C and then compiled ... so it looks kinda weird unless you understand C at a low level.)
- goals are to figure out software protocals and hardware features so that we can make this puppy do whatever we want

I may help you. PM me if you want to know something particular, or have a ROM image which I can analyze.
Sokarhacd

Ball and Chain Trooper
Resistance is Futile
You Will Be Assimilated
Hab SoSlI' Quch
Level: 61

Posts: 1288/1757
EXP: 1799888
For next: 76708

Since: 03-15-04

Since last post: 6 days
Last activity: 4 hours
Posted on 06-16-05 09:50 PM Link | Quote
wow...sounds like a really cool project...I never even heard of an X-Band until now...sounds like it would be awesome....

MathOnNapkins

Math n' Hacks
Level: 67

Posts: 1995/2189
EXP: 2495887
For next: 96985

Since: 03-18-04
From: Base Tourian

Since last post: 1 hour
Last activity: 32 min.
Posted on 06-17-05 01:07 AM Link | Quote
wow.... you like read my mind. I was just thinking about the Xband the other day, and if it had any potential. Didn't know it had thaaaaaat much potential though.
XcomGS

Red Paragoomba
Level: 14

Posts: 31/60
EXP: 11183
For next: 1888

Since: 04-02-04

Since last post: 11 days
Last activity: 10 days
Posted on 06-17-05 01:52 AM Link | Quote
Alrighty, this sounds like big news. Do you suppose we could add Broadband play also? I might be a bit confused. Are you going to start producing these again? It would be nice to buy one. Maybe modify it a bit to allow modem and broadband play. I will try to find one so I can try it out. Idea for new design.


(edited by XcomGS on 06-16-05 05:00 PM)
Setzer

Popo
Level: 36

Posts: 329/532
EXP: 290182
For next: 17928

Since: 04-22-04
From: Not Florida. because I'm going to sink it.

Since last post: 5 hours
Last activity: 48 min.
Posted on 06-17-05 02:24 AM Link | Quote
Never make another design as long as you live. as for the whole XBand project, I'd be interested in some 2-player modem patches, thats about it.
neviksti

Goomba
Level: 8

Posts: 6/25
EXP: 1510
For next: 677

Since: 06-09-05

Since last post: 36 days
Last activity: 30 days
Posted on 06-17-05 02:28 AM Link | Quote
Originally posted by XcomGS
Alrighty, this sounds like big news. Do you suppose we could add Broadband play also? I might be a bit confused.

No, broadband would require an entirely different chipset (and programming). So that is not within the scope of this project.
Originally posted by XcomGS
Are you going to start producing these again? It would be nice to buy one. Maybe modify it a bit to allow modem and broadband play. I will try to find one so I can try it out.

I will not be producing these. Once the service shut down people had no need for the device, so it is often easy to pick up (and cheap!). Just check around your local used game shops, or even better ... E-bay, Amazon, other auctions and used-goods places online, etc.

========

Okay, for those willing to help:
I looked into this briefly several years ago, but not intensively. So please bear with me while I search through all my old stuff to revive this project.

First thing, I had contact with one X-Band employee for awhile. He gave me some confidential files which I can share with other helpers. These are helpful, but aren't a "solve all". If you want to help and need the files, just PM me.

Here is a comment he made though:
We called an 800 number and we picked off caller ID to then
redial into your local X.25 POP. As long as your SRAM was good, we'd
keep using the X.25 dialup (this was cheaper for us than an 800# call
everytime). The protocol is custom of top of ADSP. It has specific
commands followed by data. You can probably find a big dispatch table
somewhere in the ROM for dispatching the commands. The server could
pretty much control everything on the box.


This is the "SNES X-Band <--> Server" software protocal that I would like to understand. Do whatever you feel is best, but I suggest finding the data first, then worrying about the format of it (I'm not 100% sure the final implementation was as he remembers it above... this was not the part he worked on ... so keep this in mind).

So please code readers, try attacking that first.

=======

The ROM in question (that I've been working on) is: "XBand Modem BIOS (U)"

Here's the memory map as I see it (the employee wasn't able to help me with this):

The code expects 64kBytes (yes bytes) of SRAM in bank $E0. The "modem registers" or whatnot seem to be located in bank $FB,

The BIOS is HiROM. Strangely, the bios runs its code from banks $Dx (instead of $Cx). So, if it doesn't already, any emulator you use has to correctly mirror the ROM (it repeats every $10 banks in this case).

On a side note, the code is horribly written in many places (and I mean horribly), so I can only assume that they used a higher level language (to make coding easier), and that didn't optimize very well and converted the code a little strangely sometimes. This hunch was confirmed by the XBand employee.


bank $E0.... 64kBytes of SRAM (battery backed)

banks $E1-$FA.... mirror of bank $E0

bank $FB
0000-BFFF ... mirror of bank $E0

C000-C1FF
even and odd addresses are equivalent

C0F8 ........unknown register
C0FA ........unknown register
C108 ........unknown register (deals with card register, bit0 = card insterted)
C110 ........unknown register (changing rapidly)
C112 ........unknown register (changing rapidly)
C130 ........unknown register (changing rapidly)
C138 ........unknown register (changing rapidly)
C140 ........unknown register
C168 ........unknown register
C180-C1BF ...modem registers
C1C0-C1FF ...modem registers

all addresses in this range not listed return FF
(if a register is write only, or defaults to FF, I probably
passed it up in this test)

C200-C3FF - same as C000-C1FF
C400-C5FF - "
C600-C7FF - "
C800-C9FF - "
FA00-FBFF - "

FC00-FDFF - this is all FF's
FE00-FFFF - this is all FF's

banks $FC-$FF ... mirror of bank $E0

--------------

the lower banks $60-$7D mirror bank $E0

everything else appears normal (normal rom mapping)

NOTE: This was done by glancing through the data, using
the onboard memory viewer/hex-editor, but I believe it to be
correct. However, the $FB:FC00-FFFF section caught me
off guard. So maybe there's something else I missed.


========

I have the modem datasheet which I can send to anyone interested. But I found some old notes of mine and believe I just got it from here:


The Conexant RC2324DPL is a 2400 bps, low power, full-duplex, OEM, modem data pump in a single VLSI device. The RC2324DPL operates over the public switched telephone network (PSTN), as well as on point to point leased lines.
The RC2324DPL modem meets the requirements specified in ITU V22 bis, V.22 A/B, V.23, and V.21, as well as Bell 21 and Bell 103.

In addition, the SDLC/HDLC support eliminates the cost of an external serial Input/Output (SIO) device in products incorporating error correction protocols. The modem includes two CMOS VLSI functions - a digital signal processor (DSP) and an integrated analogue (IA). The RC2324DPL integrates these functions into a single device. The RC2324DPL is available in a 68-pin plastic leaded chip carrier (PLCC) or a 100-pin plastic Quad flat-pack (PQFP).

------------

http://www.comprel.it/Semiconduttori/conexant/CModem/LSpeed.HTM

ftp://ftp.esprinet.com/Componenti/DataSheet/Conexant/

http://cb-pr-highspeed.de.vu/highspeed/PDF-Dateien/D96V24~2.PDF


=========

I don't remember the "button sequences" that allowed secret things like the hex-editor to appear. I remember finding the code that did this and all the sequences, so it must be in my notes here somewhere. I'll let you know when I find it.

=========

For those playing with the ROM in an emulator to figure it out, I've really come to enjoy the debugging/browsing process in Super Sleuth. I you haven't tried it yet, I suggest giving it a chance.

It has no sound currently, so I'd also suggest at least seeing it in another emulator though ... so you can enjoy the fun X-Band music .

=========

EDIT: I may have had to hack the ROM to get it to run on the emulators. (Yes, my memory really is that bad.) If you are having trouble, let me know.


(edited by neviksti on 06-16-05 05:33 PM)
HyperLamer
<||bass> and this was the soloution i thought of that was guarinteed to piss off the greatest amount of people

Sesshomaru
Tamaranian

Level: 118

Posts: 5036/8210
EXP: 18171887
For next: 211027

Since: 03-15-04
From: Canada, w00t!
LOL FAD

Since last post: 2 hours
Last activity: 2 hours
Posted on 06-17-05 08:13 AM Link | Quote
That's a hell of a nice idea. I was thinking quite a while ago of doing similar with Pok
spoondiddly

Goomba
Level: 7

Posts: 2/22
EXP: 1235
For next: 213

Since: 06-12-05

Since last post: 14 days
Last activity: 17 hours
Posted on 06-17-05 11:22 PM Link | Quote
Very nifty idea. The thing always seemed to have a lot of potential, but never even thought for a second it was this nifty.
Ideally, you could pickyback on an existing service such as kaillera.

Hmm... yes, you probably did use a hack to get it to run on emulator. At the least it won't run in snes9x debug. Shame too, since it would probably be rather easy to hack out those button codes again.
neviksti

Goomba
Level: 8

Posts: 7/25
EXP: 1510
For next: 677

Since: 06-09-05

Since last post: 36 days
Last activity: 30 days
Posted on 06-18-05 06:00 PM Link | Quote
Hmm... yes, you probably did use a hack to get it to run on emulator. At the least it won't run in snes9x debug. Shame too, since it would probably be rather easy to hack out those button codes again.
Okay, I remember now.
I used Super Sleuth since the author quickly added support for it when I posted the above info years ago. I thought (or at least hoped) that the other emulators followed suit (especially since I posted it on the ZSNES boards). Oh well, I guess we won't be able to listen to the songs on the emulators for now. But I really prefer Super Sleuth's debugger anyway. (The trace dump features aren't as nice as some, but the "in game" debugging is great!)

-------
EDIT: Apparrently, an offshoot of the Snes9x sources (UOsnes) did incorporate the X-Band info I posted a couple years ago. I don't know if you can get a copy with debug support though.
--------

I can try to add support to snes9x myself if you think it will really help. If someone more familiar with the Snes9x source can put in a "game specific hack" with the above memory map (all that really matters is the bank $E0 SRAM, I can fiddle with the ROM for the rest) please let us know.

Oops forgot to lookup those button press sequences. I'll do that in the morning. Goodnight everyone!
spoondiddly

Goomba
Level: 7

Posts: 3/22
EXP: 1235
For next: 213

Since: 06-12-05

Since last post: 14 days
Last activity: 17 hours
Posted on 06-19-05 08:44 AM Link | Quote
Hah! no biggie. Super Sleuth is fine, I'm just not as used to it.

Do you remember when/where you needed to use the button codes? That would save an enormous amount of time.
neviksti

Goomba
Level: 8

Posts: 9/25
EXP: 1510
For next: 677

Since: 06-09-05

Since last post: 36 days
Last activity: 30 days
Posted on 06-19-05 02:25 PM Link | Quote
Originally posted by spoondiddly
Do you remember when/where you needed to use the button codes? That would save an enormous amount of time.
I found more of my old notes --

I used the tracer and figured out some sections where it looked for button sequences. I only checked for sequences on the main screen, so these need to be entered there:

Maze mini-game: down(2),left(2),right,B
Snake mini-game: up(2),left,right,left,right, L

font green cycle - up(2),right(2),down(2),left
font clear cycle - down(2),left(2),up(2),right
font rainbow cycle - left(2),up(2),right(2),down

unknown - up,right,down,left,B
normally pressing B selects the item you're on ... this sequence doesn't ... so it must be doing SOMETHING ... maybe it unlocks another secret?

+ four "impossible" sequences that I don't understand yet.
(Impossible because they don't correspond to actual button values. I tried hacking the rom to make them valid sequences, and a couple appear to be a messed up font and others just didn't work. FAQs for the X-Band online appear to suggest that some sequences were removed/changed between the different versions (japanese version as well as the genesis version) ... so maybe this is just a remenant of that.)

=============================

Originally found by searching the internet:

Done from the options menu:
debugger: up,right,down,left,up,up,left,right,left,right,down,L

Just play with the buttons, and it isn't too hard to figure out. Except for maybe what commands can be entered on the "command line". I think I figured this out as well, by reading the disassembled code. I don't remember seeing anything that great in there, but I'll look again to refresh my memory.

Here's a quick run down in case it helps:

left,right - move cursor
up,down - scroll memory address by "one line" of hex data

A - change "view mode" between: hex + ASCII / hex only / ASCII only

B - increase address digit that cursor is on
X - decrease address digit that cursor is on

Y - jump to address pointed to (by cursor, or top of data shown) when on memory viewer
- executes command when on command line

Start - leave debugger
Select - change "input mode" between: hex part / ascii part / command part

L/R - increase or decrease address by one when on memory viewer
- increase or decrease letter by one when on command line


EDIT: Okay, I looked up my old disassembly of the "command line" stuff. Here are valid commands:

(a fairly large chunk of the code at bank $D7 is used for the command line stuff)

Results in [] mean I didn't try to understand the specifics of the code here,
and just tried out the command in the emulator.

The following are handled special (letters are capitalized before testing):
command starts with
null - does nothing
@ - do nothing leave with error
B - no arguments, set memory viewer address = $E0FD98
C - no arguments, [print register info and set viewer address to $E07438 ?]
D - needs two arguments, [? moves viewer, not sure what arguments do yet ]
E - takes one argument
; "EXIT" function ...
; type "E?" where ? = any character
; the ? character does not appear to be used, but is necessary
G - takes one argument
; "GOTO" function ...
; type "G 1124" convert hex number to addr, go there
; type "G #1234" convert decimal number to addr, go there
H - no arguments, set memory viewer address = $E0FCE8
M - no arguments, [changes "view mode", like pressing A]
Q - no arguments, quit
U - no arguments, code doesn't do much [? don't see much]
V - no arguments, [? does some kind of check, prints "DB OK / BOXID OK" ]
W - takes one argument, [? I was guessing this was some kind of write command
but I have not been able to figure it out yet]

=============================

I still don't have anything big (new anyways) to report yet. How is everyone else doing?


(edited by neviksti on 06-19-05 05:31 AM)
(edited by neviksti on 06-19-05 05:40 AM)
(edited by neviksti on 06-19-05 05:55 AM)
(edited by neviksti on 06-19-05 07:03 AM)
(edited by neviksti on 06-19-05 07:05 AM)
The Great Guy

Octoballoon
Level: 22

Posts: 157/170
EXP: 53084
For next: 5266

Since: 04-08-04

Since last post: 130 days
Last activity: 73 days
Posted on 06-19-05 05:09 PM Link | Quote
Wow, this looks like a very interesting project. I wish I could help, but I haven't learned anywhere near enough programming yet, and none of it in SNES ASM. But it looks like this project could turn out very nice. Good luck with this thing!
spoondiddly

Goomba
Level: 7

Posts: 4/22
EXP: 1235
For next: 213

Since: 06-12-05

Since last post: 14 days
Last activity: 17 hours
Posted on 06-21-05 07:23 AM Link | Quote
Hah! spent the time to hack that out and you already got it up - yesterday!

Did you use the service back when it was around? Would you call the service, they would read the header for the cart, and upload the patch needed to run it if you didn't have it already? Its hard to put together exactly what they would be doing without ever seeing it...
Depending, the patches could be almost generic "handles" into the currently running routine, set to execute their code and modem support in place of a common exception handler or something. If the same patch could be used for multiple games, then you certainly wouldn't need to load it every time. Then again, you could just as easily have load times if it didn't store patches at all. Hard to say without just completely dissassembling it. So the horror begins...
neviksti

Goomba
Level: 8

Posts: 10/25
EXP: 1510
For next: 677

Since: 06-09-05

Since last post: 36 days
Last activity: 30 days
Posted on 06-21-05 09:47 AM Link | Quote
> Did you use the service back when it was around?

Sadly no.

As for the "patching system", the "game patches" sound like they work like this:
- there is hardware that can hold up to 16 addresses
- if the game accessed any of these addresses, the memory map switched to something that put in code from the X-Band memory
- there is some register that the X-Band patch writes to to say that it's done and return the memory map to normal

I know that is fairly vague, but it is a start.

The X-Band could also patch its "Operating System". This worked a different way. When they wrote the code, they made sure that many routines were called using a kind of jump table in SRAM. This way the service could download "updates" by just putting some data/code into specific spots in the SRAM. If you fiddle with the code for a bit, you'll see these routines real quick. They are all over. Most are "called" through $E00040.

Here's my comments on the memory so far while reading through the code (so it might be wrong), but hopefully it is useful:

;-------------------------------
64kB mem

$E0001A - 1 byte - $4200 setting

E00040:
5CCE02D000 JML $D002CE

$E02DDC: table of routines???
$E02ED0 - addr of GetJoyPad Data routine

$E02FF4 - 4 bytes - NMI, saved return address and P from stack
$E02FF0 - 2 bytes - NMI, a saved stack pointer ?

$E02FD4 - buffer end index
$E02F74 - 16 word buffer (routine request)
$E02F94 - 16 dword (24bit pointer + extra byte) buffer
- this buffer basically holds a list of what routines were requested
- and where they were called from
(So you may be able to use this as a "stack trace" of sorts.)

$E039F7 - JoyPad1 reading
$E039F9 - JoyPad2 reading


$E03E4A - 10 byte buffer, holds results of reading modem registers FBC1B2-FBC1A0 (every other one)

$E03FD8 - 8 byte buffer holding results of test (multiple readings $FBC168 bit 2)


$E0ED16 - table of routine offsets (-1 since RTL adds 1)
$E0F7A2 - table of routine banks

$E0FDA0 - "dialing prefix" setting... 0 = none, 1-A = 0-9
;-------------------------------





If you are interested in the info the X-Band employee shared with me, just let me
know. Also, it looks like those links for the modem datasheet are down as well. I
can send it all to you if you want, just let me know where an appropriate place to
send several attachments is.



(edited by neviksti on 06-21-05 01:03 AM)
HyperLamer
<||bass> and this was the soloution i thought of that was guarinteed to piss off the greatest amount of people

Sesshomaru
Tamaranian

Level: 118

Posts: 5169/8210
EXP: 18171887
For next: 211027

Since: 03-15-04
From: Canada, w00t!
LOL FAD

Since last post: 2 hours
Last activity: 2 hours
Posted on 06-21-05 11:56 PM Link | Quote
I know I'm interested even though I'll probably never see one of these devices. How big are the attatchments?
neviksti

Goomba
Level: 8

Posts: 11/25
EXP: 1510
For next: 677

Since: 06-09-05

Since last post: 36 days
Last activity: 30 days
Posted on 06-22-05 01:14 PM Link | Quote
HyperHacker wrote:
> I know I'm interested even though I'll probably never see one of these devices.
> How big are the attatchments?

Compressed, the data is about 5 MB.
If this is a problem, I can host it temporarily and send you a link.

X-bands are getting harder to find (probably more because people think no one will buy it ... not due to lack of them "laying around"). Just seeing this thing run on a real SNES makes one wish it worked again. Besides, it's a shame to work on hacking this thing unless you have one in hand. So, two options:

Option one:
- If you are willing to help, and find someone selling one (usually just posting on a gamer's board will bring a couple XBander's to the surface) I will buy it for you. I don't expect miracles from you, but please people ... don't rip me off. This really is for those interested in helping.

Option two:
- I have two X-Bands. I want this so I can do testing later. However, it may be best at this early stage to loan one out to another helper. I really hesitate on this, since I do need it back later. But I'll consider this if we can't find anyone selling X-Bands.


spoondiddly wrote:
> Hah! spent the time to hack that out and you already got it up - yesterday!

Can we compare notes on this?
I did more work trying to figure out the "button sequences", and there are still some things that are confusing me.

Also, notice the: "Remote Diagnostic Screen" !! (I forgot about that in the previous posts)
If we ever get an 'X-Band server' working, this may be an even better way for people to get their X-Band working again. (No need to fiddle with anything in the onboard hex-editor now, because (I believe at least) that the customer service could dial in and run any routine in the OS and/or modify the SRAM, etc.)

Anyway, here is the raw info I have about the button sequences. I tried entering the "impossible" sequences on the second controller input hoping that's how it was encoded. No luck. Also tried on first controller just in case. No luck. (Also, don't bother disassembling/commenting the routine mentioned here ... I already have done that, so if you want that as well, just let me know.)

Routine that checks key patterns: $D391A6
;------------------------------------------
; Found requested pattern in key presses?
; parm
; push pointer (example D8:1C5E)
; return
; A = 0(false), 1(true)
;
; routine #$03A0 from $E00040
;

Data at pointer:
first byte - number of button presses in the sequence
15 bytes - ??
list of words - button sequence data
4 words - ??
guessing, looking at structure of data
1 word - ??
1 dword - address / pointer
1 word - ??

===========================================================================

breakpoint on $D391A6, the following sequences were checked:

logo screen -
$D8:1BFA
$D8:1A82

player select -
$D8:1B8C
$D8:1B66
$D8:1B40
$D8:1B1A
$D8:1BFA
/enter a code name
$D8:1BFA
/choose a character
$D8:1BFA

main menu -
$D8:1C5E
$D8:1BB2
$D8:1AF8
$D8:1AA2
$D8:1A5E
$D8:1B66
$D8:1B40
$D8:1B1A
$D8:1B8C
$D8:1BFA

$D8:1BD6 <-- direct address changed,
probably means called from a different routine than those above

challenge / "are you sure you want to register" screen -
$D8:1C22

player list -
$D8:1BFA
/"enter a code name" -
$D8:1BFA

mailbox menu -
$D8:1A0E
$D8:1BFA
/X-Mail -
/write message -
$D8:1BFA
/are you sure you want to connect
$D8:1C22

Stats -
$D8:1BFA

Options -
$D8:1AC8
$D8:1A30
$D8:1BFA
/XBAND Setup
$D8:1BFA
/Phone Setup
$D8:1BFA
/Sound Setup
$D8:1BFA
/Account Info
$D8:1BFA
/Player ID
$D8:1BFA
/Code Name
$D8:1BFA
/Character
$D8:1BFA
/Enter your taunt
$D8:1BFA
/Personal Info
$D8:1BFA
/Password
$D8:1BFA

===========================================================================

Okay, now looking at the ROM...

$D8:1A0E - 00 - left,right,down(2),R
$D8:1A30 - 01 - up(2),down(3),right,left,right,left,down,L
$D8:1A5E - 02 - up(3),down,up,B
$D8:1A82 - 03 - up(2),left,right
$D8:1AA2 - 04 - up(2),left,right,left,right,L
$D8:1AC8 - 05 - up,right,down,left,up,up,left,right,left,right,down,L
$D8:1AF8 - 06 - up,right,down,left,B
$D8:1B1A - 07 - impossible?
structure looks fine, but button press bytes are reversed?
0400,0400,0400,0400,0800,0800,0400
would be: down(4),up(2),down
$D8:1B40 - 08 - down(2),left(2),up(2),right
$D8:1B66 - 09 - up(2),right(2),down(2),left
$D8:1B8C - 0A - left(2),up(2),right(2),down
$D8:1BB2 - 0B - down(2),left(2),right,B
$D8:1BD6 - 0C - impossible??
structure looks fine, but button press bytes are reversed?
bytes are reversed? 0400,0800,0400,0100,0100,0100
would be: down,up,down,right(3)
$D8:1BFA - 0D - impossible??
structure looks fine, but button press bytes are reversed?
0100,0100,0100,0400,0800,0400,0800,0100
would be: right(3),down,up,down,up,right
$D8:1C22 - 0E - up(2),down
$D8:1C40 - 0F - up(3) ... the "pointer data" is empty,
but the rest of the structure looks okay
(Notice, no menu found yet where this one was used.)
$D8:1C5E - 10 - impossible?
structure looks fine, but button press bytes are reversed?
0100,0100,0100,0100,0800,1000
would be: right(4),up,start

===========================================================================
Identified sequences

-logo-
#03 - vomit vision

-main menu-
#04 - snake game
#08 - clear cycle font
#09 - green cycle font
#0A - rainbow cycle font
#0B - maze game

#06 - font test (removed? ... this showed up in an old X-Band FAQ)

-mail menu-
#00 - screen saver

-connecting screen-
#0E - brings up maze game while trying to connect?

-options menu-
#05 - memory viewer
#01 - remote diagnostic screen

======
Remote Diagnostic Screen.

Press any button to exit.

Your modem is waiting for a call from
XBAND Customer Service. If you were not
directed here by XBAND Customer
Service, please exit this screen.
======



(edited by neviksti on 06-22-05 04:16 AM)
(edited by neviksti on 06-22-05 04:18 AM)
spoondiddly

Goomba
Level: 7

Posts: 5/22
EXP: 1235
For next: 213

Since: 06-12-05

Since last post: 14 days
Last activity: 17 hours
Posted on 06-23-05 02:40 AM Link | Quote
At least two of those unknowns are genesis button codes, so the others probably are too.

10 - Genesis: fish pong minigame
would be: right(4),up,start
actual: up(4),right,B

0D - Genesis: sound test
would be: right(3),down,up,down,up,right
actual: up(3),left,right,left,right,up

07 - Genesis: unknown...
would be: down(4),up(2),down
actual: left(4),right(2),left
0C - Genesis: unknown...
would be: down,up,down,right(3)
actual: left,right,left,up(3)

Yeah, diagnosic mode was probably a failsafe in case one was finicky or they ever had to move their phone service.
HyperLamer
<||bass> and this was the soloution i thought of that was guarinteed to piss off the greatest amount of people

Sesshomaru
Tamaranian

Level: 118

Posts: 5208/8210
EXP: 18171887
For next: 211027

Since: 03-15-04
From: Canada, w00t!
LOL FAD

Since last post: 2 hours
Last activity: 2 hours
Posted on 06-23-05 07:42 AM Link | Quote
Why not just edit the button sequences and see what happens?
neviksti

Goomba
Level: 8

Posts: 12/25
EXP: 1510
For next: 677

Since: 06-09-05

Since last post: 36 days
Last activity: 30 days
Posted on 06-23-05 11:31 AM Link | Quote
HyperHacker wrote:
> Why not just edit the button sequences and see what happens?

If they are supposed to be there, then there should be a legitimate way to activate them.
But, like you, I was curious what would happen if I just put in a different button sequence. So I actually did this a couple years ago when I first looked into it. Unfortunately, I don't remember anything interesting happening.

But, just to be complete I decided to redo that test:

I modified the "impossible" sequence to just be all right button
presses (modifying only one at a time of course), and I saw the following:

$D8:1B1A - garbled color font
$D8:1BD6 - nothing happenned
$D8:1BFA - nothing happenned
$D8:1C5E - nothing happenned

The code in this ROM is all over the place. Comments from X-Band employees themselves was that they tried to use the same C code between all the systems as much as possible.

So, while in "normal" cases I'd feel like we're missing something big here ... I really think we are just seeing "defunct" junk that wasn't fully commented out. That being said, I'd love to be proven wrong if someone finds out how to correctly activate them.
Pages: 1 2 3Add to favorites | "RSS" Feed | Next newer thread | Next older thread
Acmlm's Board - I2 Archive - Rom Hacking - X-Band Revival project | |


ABII


AcmlmBoard vl.ol (11-01-05)
© 2000-2005 Acmlm, Emuz, et al



Page rendered in 0.017 seconds.