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
Acmlm's Board - I2 Archive - - Posts by neviksti
Pages: 1 2
User Post
neviksti

Goomba
Level: 8

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

Since: 06-09-05

Since last post: 36 days
Last activity: 30 days
Posted on 06-09-05 03:39 PM, in Complete F-Zero tracks images (at last!) Link
Hello, I was curious about the F-Zero data and people suggested I look here.

I am by no means a rom hacker, more of a rom programmer I guess. So my main methods for trying to understand a rom are to look at the code. This is usually slow and inefficent, but eventually leads to a fairly complete understanding of what the game is doing during xyz.

In short, I'd like to help... but be patient as my methods are slower.

I figured out how the game keeps track of its state and goes through menus etc. So I tracked down this...

Here is the "grand prix mode" track loading routine:
80/88FC:    20D589      JSR $89D5
80/88FF: 20E397 JSR $97E3
80/8902: 20C489 JSR $89C4
80/8905: 207FAB JSR $AB7F
80/8908: A558 LDA $58
80/890A: D006 BNE $8912
80/890C: 20C8B0 JSR $B0C8
80/890F: 2064B1 JSR $B164
80/8912: A901 LDA #$01
80/8914: 8598 STA $98
80/8916: A902 LDA #$02
80/8918: 8581 STA $81
80/891A: A902 LDA #$01
80/891C: 648E STZ $8E
80/891E: 858F STA $8F
80/8920: 207BA2 JSR $A27B
80/8923: 4B PHK
80/8924: 20EC9E JSR $9EEC
80/8927: 20E0F7 JSR $F7E0
80/892A: A901 LDA #$01
80/892C: 8560 STA $60
80/892E: E656 INC $56
80/8930: 60 RTS




Here is the "practice mode" (or title screen) track loading routine:
80/8ACD:    20D589      JSR $89D5
80/8AD0: 20E397 JSR $97E3
80/8AD3: 208AAB JSR $AB8A
80/8AD6: A901 LDA #$01
80/8AD8: 8598 STA $98
80/8ADA: 8581 STA $81
80/8ADC: 855C STA $5C
80/8ADE: 207BA2 JSR $A27B
80/8AE1: 20E6A2 JSR $A2E6
80/8AE4: 4B PHK
80/8AE5: 20E89E JSR $9EE8
80/8AE8: 20E6A2 JSR $A2E6
80/8AEB: 4B PHK
80/8AEC: 20E89E JSR $9EE8
80/8AEF: A92F LDA #$2F
80/8AF1: 8DA00E STA $0EA0
80/8AF4: 8DB00E STA $0EB0
80/8AF7: A9E0 LDA #$E0
80/8AF9: 8D270E STA $0E27
80/8AFC: 8D280E STA $0E28
80/8AFF: 8D290E STA $0E29
80/8B02: 8D2A0E STA $0E2A
80/8B05: 8D2B0E STA $0E2B
80/8B08: 8D2C0E STA $0E2C
80/8B0B: A901 LDA #$01
80/8B0D: 8561 STA $61
80/8B0F: 8560 STA $60
80/8B11: E656 INC $56
80/8B13: 60 RTS




Hopefully this will quicken the search for others reading the code.

I would love to see a fully functional track editor, so if you tell me what is most needed, I can try to focus my efforts on that. In the mean time, I'll continue reading through the code.
neviksti

Goomba
Level: 8

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

Since: 06-09-05

Since last post: 36 days
Last activity: 30 days
Posted on 06-10-05 10:52 AM, in Searching Link
Hello, if I am blind and there is a big "search" button that I am overlooking, I appologize. There is a lot of great info on this board, and I was wondering if there is some way to search through all the posts/threads to see if a particular question/topic was already discussed without having to read every single one.

Thanks.
neviksti

Goomba
Level: 8

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

Since: 06-09-05

Since last post: 36 days
Last activity: 30 days
Posted on 06-11-05 03:01 PM, in SPC bootstrap rom Link
The MOVZ and INCZ aren't part of the "standard" spc700 opcode list that I am used to. What did you use to disassemble it? (Or where did you get the list of opcodes if you did it by hand?)

Anyway, it appears they are using "Z" to denote "byte" (as opposed to the MOVW opcode, etc). Also, the ending of the boot rom isn't code, it's just the reset vector. So don't worry about trying to interpret that.

Anyway, here is the code I commented up for myself:

Start:
MOV X, #$EF ;setup the stack to 0x01EF
MOV SP, X

MOV A, #$00 ;Note: on reset DP=0
ClearLoop:
MOV (X), A ;save $00 --> 0x0001 - 0x00EF
DEC X ;
BNE ClearLoop ;

MOV $AA, #$F4 ;make initial value port $F4 = 0xAA
MOV $BB, #$F5 ;make initial value port $F5 = 0xBB
WaitForInit:
CMP $CC, #$F4 ;Is there a 0xCC on port $F4?
BNE WaitForInit ; no -> look again
BRA StartBlock ; yes -> goto StartBlock

GetMem:
MOV Y, $F4 ;wait for $F4 to be set to zero, saying that the first byte is ready
BNE GetMem ;if $F4 != 0x00 goto GetMem
NextByte:
CMP Y, $F4 ;Y = current count, $F4 tells current data byte # that is on $F5
BNE Blah ;if the byte we need isn't there yet, goto Blah
MOV A, $F5 ; get data
MOV $F4, Y ; echo count
MOV [$00]+Y, A ; store data
INC Y ; count++
BNE NextByte ; if count didn't roll over then goto NextByte
INC $01 ; else increase the address pointer (the high byte)
Blah:
BPL NextByte ;=blah= if >= 0 goto NextByte
CMP Y, $F4 ;
BPL NextByte ;if Y >= $F4 goto NextByte

StartBlock:
MOVW YA, $F6 ;get address from $F6-$F7 (2142H-2143H from SNES side)
MOVW $00, YA ; store address at 0x0000-0x0001
MOVW YA, $F4 ; read $F4-$F5
MOV $F4, A ;echo the $F4 read, back into $F4 (tell SNES we got the value)

MOV A, Y ;
MOV X, A ; put $F5 into x
BNE GetMem ; if $F5 != $#00, then this isn't the terminal block, goto "GetMem"

JMP [$0000+X] ;run program...

ResetVector:
.dw $FFC0



Edit: grr... the board keeps clipping my post (the lines don't wrap around). Should I
not be using "pre" tags? It seems to mess everything up after it, even though I've
closed the tag. Oh well, for now I'll just manually enter the line breaks.

Edit: The point of the "blah" section is to check if the bootstrap is being signalled
to move onto the next block (this is done by changing the counter by more than 1,
ie not just incrementing it). As I said, the above is just comments I wrote for
myself ... so you may want to comment it up yourself for it to be more useful.

Hope it helps though.


(edited by neviksti on 06-10-05 10:07 PM)
(edited by neviksti on 06-10-05 10:10 PM)
(edited by neviksti on 06-10-05 10:11 PM)
neviksti

Goomba
Level: 8

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

Since: 06-09-05

Since last post: 36 days
Last activity: 30 days
Posted on 06-13-05 03:18 AM, in 65816 code problem. Link
First of all, I suggest using a nice debugger, as these problems can be quickly figured out that way.

Lately, I really like Super Sleuth, http://users.tpg.com.au/trauma/spx/
It has nice breakpoint features, and you can single step through your code. Rarely, I still use zsnes (dos with debugger), since it still has other helpful features.

That being said, I can probably guess what the problem is here.
Your code is basically:

wait till auto-joyread has completed
check button presses
if anything pressed, start game
else go back and wait again

(Your original post was fine, I'm not sure where all the confusion is coming from.)

Anyway, the problem is that auto-joyread isn't always enabled. You need to request the system to do this task (set bit0, reg $4200 ... you only need to do this once, unless other code clears it). This is because some games use the manual read method, and if the system was trying read the joypads at the same time ... well, obviously both reads would fail.

Also, a long time ago, I remember some emulators having a problem with auto-joyread not working unless NMI was also enabled. I checked it out on the real system ... but my memory is really bad, and I can't remember the result. I think the real system didn't need the NMI enabled for auto-joyread. Regardless, I suggest testing your hack out on the real system before you get too much farther. (I or others can do that for you if you don't have the equipment.)


(edited by neviksti on 06-12-05 10:21 AM)
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, in X-Band Revival project Link
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)
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, in X-Band Revival project Link
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)
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, in X-Band Revival project Link
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!
neviksti

Goomba
Level: 8

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

Since: 06-09-05

Since last post: 36 days
Last activity: 30 days
Posted on 06-18-05 07:01 PM, in Complete F-Zero tracks images (at last!) Link
Well, it looks like it gets the row data after at least two "unpackings".

- somehow the rows for the "track panels" as you called them (32x32 tiles, or 16 rows) are put into ram
- then the rom data holding all the track panels are unpacked (using the above ram table) into just row data in ram

I have not found that first part yet (or more accurately, I may have found it, but have not made sense of it yet ... it jumps all over).

Here is the routine for the second part:
Notice there is no compression ... so this step is easy.

80/A30D: C230 REP #$30
80/A30F: ADF50C LDA $0CF5 ; ?? track #
80/A312: 29FF00 AND #$00FF
80/A315: 0A ASL A
80/A316: AA TAX ; X = 2 * track #
80/A317: A9000C LDA #$0C00
80/A31A: 8521 STA $21 ; rom source bank: $0C
80/A31C: BF80E80C LDA $0CE880,X
80/A320: 8520 STA $20 ; rom source offset: $0CE880,X
80/A322: A9007F LDA #$7F00
80/A325: 850A STA $0A ; ram source bank: $7F
80/A327: A00000 LDY #$0000
80/A32A: BB TYX ; clear x,y
;"unpack row data" loop
80/A32B: B720 LDA [$20],Y ;get word for rom
80/A32D: F01A BEQ $A349 ; $0000 means done unpacking
80/A32F: 8509 STA $09 ;otherwise rom word = ram source offset
80/A331: 5A PHY
80/A332: A00000 LDY #$0000
80/A335: B709 LDA [$09],Y ;get word from ram
80/A337: 9F00407F STA $7F4000,X ;move to $7F4000 table
80/A33B: E8 INX
80/A33C: E8 INX
80/A33D: C8 INY
80/A33E: C8 INY
80/A33F: C02000 CPY #$0020
80/A342: D0F1 BNE $A335 ;get 16 of these
80/A344: 7A PLY
80/A345: C8 INY
80/A346: C8 INY
80/A347: 80E2 BRA $A32B
80/A349: E210 SEP #$10
80/A34B: A20E LDX #$0E
80/A34D: BD7BA3 LDA $A37B,X ; copy data directly, $10 bytes
80/A350: 9FF03F7F STA $7F3FF0,X ; $00A37B -> $7F3FF0
80/A354: CA DEX
80/A355: CA DEX
80/A356: 10F5 BPL $A34D
80/A358: A212 LDX #$12
80/A35A: BD67A3 LDA $A367,X ; copy data directly, $14 bytes
80/A35D: 9DC00E STA $0EC0,X ; $00A367 -> $7E0EC0
80/A360: CA DEX
80/A361: CA DEX
80/A362: 10F6 BPL $A35A
80/A364: E220 SEP #$20
80/A366: 60 RTS

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, in X-Band Revival project Link
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)
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, in X-Band Revival project Link
> 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)
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, in X-Band Revival project Link
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)
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, in X-Band Revival project Link
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.
neviksti

Goomba
Level: 8

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

Since: 06-09-05

Since last post: 36 days
Last activity: 30 days
Posted on 06-29-05 03:51 AM, in X-Band Revival project Link
Originally posted by Overload
I found an X-Band for you. Check your private messages.

Is the X-Band's SRAM mirrored at Bank 60H-7DH?


Thank you for pointing that out. I got it just a couple hours before it expired... that was close. So now I have an extra X-Band to fiddle with.

And yes, the SRAM is mirrored at Bank $60-$7D.

Would you like the X-Band to work on?
It goes without saying that you know how to reverse-engineer with the best of them. I'd definitely enjoy working on it with you.

I have a rough idea of how the server works now. There's some "checksum" business that I'm not very sure about yet. I'm going to write a small server program to test out the ideas soon.

Originally posted by Geiger
You would probably be better off buying one for the SNES9x and ZSNES development teams (and since so much of the code work is shared nowadays, you may literally only have to buy one). I would suggest posting on the SNES9x boards and see what they have to say about it.

The information necessary to get the X-Band rom to load and run has already been known for about two years. It involves the SRAM mapping already described here, and the modem regs set to always return some constants (I don't remember this, as Overload was the one that figured it out and posted it on the old Zsnes board). Anyway, Overload was the only one that incorporated the info into his emulator. (Well, and the UOsnes emulator which I've never used.) So support for loading the X-Band rom is not missing in Snes9x / Zsnes due to lack of information.

I don't think it's reasonable to include all the features of the X-Band into an emulator (it would be neat, but way too much effort would be required). So the only purpose the emulators play in this is just to give us a quick way to see how the code fits together (and to see directly the code that is pertinent to a particular situation).

Since I prefer Overload's emulator for debugging anyway... I'm already quite happy. However, if you want the X-Band ROM to load/run on Snes9x and/or ZSNES, feel free to remind them about it.


(edited by neviksti on 06-28-05 09:04 PM)
neviksti

Goomba
Level: 8

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

Since: 06-09-05

Since last post: 36 days
Last activity: 30 days
Posted on 07-05-05 12:07 PM, in Working on a disassembler for 65816 Link
Somethings I'd love to see in a disassembler:

1] For massive disassembly / reverse-engineering of the code, it would be nice if the disassembler could use the information the user has learned from the code to make sections more readible. For example, as I read through the code I could make a table of variable names, routine names, and even "macros" (some code was obviously generated with macros and it's annoying to see similar chunks again and again ... when the only info you'd really need is just the macro name).

Then when dissassembling other sections of the ROM (or even re-disassembling the same sections to make it more readible), the code will be much much more readible.

To some extent the variable and routine names thing can often be done manually by find/replace in a text editor. But this gets quite time consuming for each new disassembly as the list gets longer. I am particularly interested in the notice "macro" feature, as it would make code much much easier to read, and currently there is no easy way to do this. I have to do it entirely by hand.


2] If you are using tracing abilities ... I'd love something that notices DMA loads and marks that section of the rom as data (and maybe even mention where it is loaded to, so we have an idea of what the data is).

-----------
Comments on previous posts:

Branches to labels that are not internal to the routine I just write as follows "BRANCH_$XXXXX". Now I use Rom-addresses for those. But you're saying you would prefer snes memory mapped addresses?

Yes, I would prefer snes memory addresses as well. These are the addresses in the actual opcode data (except for relative jumps), and for debugging purposes (putting in a breakpoint) this is the address needed. In short, the system address is usually the relavent address.


> php/plp inside the current routine would be nice, yeah.

Well the only reason I was considering it was to keep a more accurate eye on the A and X/Y register width. But I've never seen it used that way. Of course, I wouldn't rule out that someone might have used it for changing register widths.


I have seen this used. Not often within a routine, but quite often between routines.

In most coding styles that choses to change the register widths frequently, I see something like: routines will php, set to the widths they need for that routine, and then plp at the end of the routine ... for "linear" disassemblers this often messes up the widths for the code after that routine (since they don't do any tracing, or handle php/plp stuff).

The worst rom I've ever looked through as far as trying to keep track of the reg widths was the SF7 Bios. The coding style used there had no "standard" width and the routines didn't even always return with the same widths as when they were called. I'm not sure how the programmer kept that all straight in his mind. It was a horror to disassemble.

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

There are a couple projects I am working on now that require large disassembly of 65816 code. I can test your disassembler by using it, however I don't really have time to come up with extensive tests specifically to look for bugs.

The code I'm working on understanding right now was actually written in C, so there are all the lovely stack frames, pushed parameters, standard regs to return stuff in, etc. It takes quite awhile to go through since the code is not nice compact asm ... but sprawling "translated to asm" C code. If you could write a crude "decompiler" instead of just a disassembler, that would be incredible. But that's pretty much a different project entirely.

Anyway, good luck on your project. I look forward to seeing how it turns out, and if you want me to help test it, just let me know.


(edited by neviksti on 07-05-05 03:28 AM)
neviksti

Goomba
Level: 8

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

Since: 06-09-05

Since last post: 36 days
Last activity: 30 days
Posted on 07-06-05 11:55 AM, in Working on a disassembler for 65816 Link
Originally posted by MathOnNapkins
2] If you are using tracing abilities ... I'd love something that notices DMA loads and marks that section of the rom as data (and maybe even mention where it is loaded to, so we have an idea of what the data is).

As I said to d4s I'd be happy to implement something that advanced users would appreciate. But, I would need to have some idea how to implement it.
...
It doesn't load values into an accumulator or store things in memory. Please e-mail me or PM me to give details b/c I want to know how feasible these things are.
Well, you'd have to keep track of values stored to memory.
For the regular DMA, you need to keep track of data written to the $43xx registers. Then when $420B is written, just grab the source/destination addresses as well as length info of the DMA from your saved $43xx registers.

This information can be used to mark portions of the ROM as data, as well as allowing the user to know where the data is sent (what it is used for).


I do a lot of testing myself. And when I think I've found a stable version I try it out on my own disassembly and I generally trust it.

Okay. I was just offering to test it since you asked for beta testers and input. Sounds like you got it handled already.

---------------
EDIT:

HyperHacker:
Wouldn't a game with an expansion chip actually use the COP instruction?

That's not really how expansion chips are communicated with.
The real point is, that some programs may use BRK, COP, or STP. But they should be used rarely. If programs use them regularly, then a feature to select which opcodes to consider "rare" would indeed be nice. (If I remember correctly, LordTech's SNES C compiler used the COP instruction a lot due to his implementation choices.)


(edited by neviksti on 07-06-05 03:06 AM)
neviksti

Goomba
Level: 8

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

Since: 06-09-05

Since last post: 36 days
Last activity: 30 days
Posted on 07-08-05 11:48 AM, in X-Band Revival project Link
AN XBAND THAT STILL HAS A GOOD BATTERY / SRAM HAS BEEN FOUND!!

I can't believe it. I'm almost scared to fiddle with it right now.

I tried for hours to dump the SRAM and kept failing. Reading $E0:8000-FFFF on the cartridge from a SNES program was just returning the same data as from $E0:0000-7FFF. Eventually I figured out the following:

Using the following sequence:
	lda $FBC0F8
ora #$01
sta $FBFC02

would change the memory map so all the SRAM is accessible. I don't understand the purpose of this, and it drove me nuts to figure out ... but we now have a copy of the X-Band Sram that should still have patches and other goodies in it!!

Anyone that wants the SRAM, just let me know.

I'll try to figure out what patches are on it and let you guys know
---------
EDIT:

Here are all the games that there are "stats" for on this X-Band, so were probably played at least once.

Mortal Kombat 3
Killer Instinct
WeaponLord
Super Mario Kart
Super Street Fighter II
Zelda (test)
Mortal Kombat II

I've been starting it up with a random game (you need to have a game inserted since the X-Band doesn't have a CIC of its own). It would tell me at the beginning that the game might not be supported and I'd have to connect to check for a patch. However, with Mario Kart inserted, it doesn't say this. Hopefully this means the patch is still there (but it may mean nothing more than that it knows a patch exists).


Kind of off topic, but check out what I found when searching for X-Band stuff:
http://www.aep-emu.de/index.php?name=PNphpBB2&file=viewtopic&t=1593&postdays=0&postorder=asc&start=19

Someone posted about this thread on a German emulation site ... and took the time to translate the first post!
It's both odd and flattering.


(edited by neviksti on 07-08-05 06:01 AM)
neviksti

Goomba
Level: 8

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

Since: 06-09-05

Since last post: 36 days
Last activity: 30 days
Posted on 07-09-05 03:27 AM, in X-Band Revival project Link
Overload and d4s, the files have been sent.

If patches are still present in this device, then I shouldn't have to figure out as much about the hardware to get the first "connected game" running. However, I still haven't decided on the appropriate "short cut" / path to take now.

I still need to learn more about the communication protocal, but I know enough now that it may be advantageous to make a small server and start testing things. However, I have no place I can connect up the X-Band and PC server to phone lines in close vicinity to each other. Does anyone have some suggestions on how to proceed from here? (It will probably take a long time to get the first connect to work, so at this point, giving someone an X-Band and trying to connect to each other for testing would be way too slow for debugging purposes. I need a way to have quick / easy control over both sides.)


Overload:
> I had a feeling this was a good one.

And, thank you very much for pointing out that auction


> Try it with your other X-band and see what happens?

Apparently, until you connect to the server the first time, it doesn't really check about the cartridge/patches. Even on your emulator, it comments on the cartridge with the good SRAM. If instead I delete the SRAM and have the x-band software notice it is "corrupt" and fill out a new one (with a new character, etc), then the programs doesn't comment about the cartridge (not even after resetting it).


d4s:
> oh, just found one on yj.
> it comes with a small card, too.
> i assume these cards contain credits to use the service, yes?

Yes, that is what the cards are for. I have never seen one in person though.
I have also heard vague references to that being used as a "debug" port as well (some device with a ribbon cable and card like end was attached to the X-Band during operation). I do not know how likely the truth of that is though.

I took apart the X-Band and the card receptor ... the card slot is nothing but some metal contacts. So the card must have an IC chip on it, so the X-Band can communicate with it. I know which register the X-Band checks to see if a card is inserted, or at least here is what my old notes say:

$FBC108 bit 0 ... appears to say whether a card is inserted or not

So you probably can track down the card communication software if you are curious.


(edited by neviksti on 07-08-05 06:30 PM)
neviksti

Goomba
Level: 8

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

Since: 06-09-05

Since last post: 36 days
Last activity: 30 days
Posted on 07-09-05 07:25 AM, in X-Band Revival project Link
Originally posted by HyperHacker
Isn't there a way you could just connect the X-Band directly to your modem instead of using a phone line? Would save on phone bills too.


There may be (and I intend to do that at some point), but I hesitate to start with that method. That is because I need to hack around stuff in the ROM to not look for the dial-tone and enable the "straight-connect" mode (or whatever it is called) since the lines are now free-floating. (Also, unlike the X-Band, I'm not sure if my PC modem supports that type of connection.)

So if there are any problems, I won't know if it is with the data, or my hack (the settings I choose, the code I skip, etc).

I fully expect the initial steps of the server to be quite difficult to debug and reverse-engineer. Once we surmount that hill though, it should get easier. And then I'll feel much more comfortable adventuring out into more complicated methods (albeit, methods that will ultimately be easier on me).
neviksti

Goomba
Level: 8

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

Since: 06-09-05

Since last post: 36 days
Last activity: 30 days
Posted on 07-10-05 03:09 PM, in X-Band Revival project Link
Okay, I sent the SRAM to you as well.

As for help with the code... I'm really getting lost in it. However, I have learned a great deal in the last few days. Enough, that we may be able to just skip looking at much more of the code.

Here's what a packet looks like:

--------------
"IBM's BiSync" like framing
special characters:
STX = start of text / data = $02
ETX = end of text / data = $03
DLE = data link escape = $10

packet looks like:
STX ...data... DLE ETX

Any DLE characters in the data itself are "padded" with an extra DLE.

The code seems to ignore the STX character (doesn't even check it), but it does expect a character there.
---------------
The data in that last packet is actually a crude AppleTalk like packet.
(I've been told they used a form of ADSP, and have also seen interviews where people have re-iterated this as well.)

this "inner" packet looks like:
ADSP header ...data... crc

The crc is a checksum of all the packet data before it, INCLUDING the STX character, and the ADSP header, and BEFORE padding the data with any DLE characters.

ADSP header, $0D bytes long
how the code treats the data -
(word), (two dword entries - treated as a pair?), (word), ?flags? (byte)

header data is in network byte order (most significant byte first)
--------------------------------

As for the actual data itself, I've only looked at the server mode (not game mode) stuff so far. It looks like the server controls everything. It basically sends a command and parameters which the X-Band then executes and responds.

I found the crc algorithm in the ROM, and it is easy to follow.
As for the ADSP header stuff, and actual data handling ... I know where the "main controlling routine" is for this. But it calls many routines and I'm getting lost trying to understand everything.

Googling for a bit-level explanation of the ADSP header has not turned up anything useful. I obviously haven't hit upon the correct keywords to search for.

Anyone that can help me understand this header by looking for info ... it would really be appreciated. We're getting closer!
================
EDIT:

Okay, this seems to explain what is in the ADSP header:
http://www.lex-con.com/protocols/apple.htm

Source Connection ID, (Send Sequence Number, Receive Sequence Number), Receive Window, Descriptor

Here's some other pages:
http://www.networksorcery.com/enp/protocol/adsp.htm (has the RFC)
http://www.protocols.com/pbook/appletalk.htm#ADSP (not much better info, but explains what the receive window means)

Still nothing that explains the bits (not even the RFC? Am I missing something obvious?).

EDIT(2):
Okay, found more:
http://darcs.brianweb.net/vendor/powerpc-apple-darwin/include/netat/adsp.h

I don't really understand it right now. I think I'll get some sleep and read it again tomorrow.


(edited by neviksti on 07-10-05 06:45 AM)
(edited by neviksti on 07-10-05 06:57 AM)
neviksti

Goomba
Level: 8

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

Since: 06-09-05

Since last post: 36 days
Last activity: 30 days
Posted on 07-11-05 08:33 AM, in X-Band Revival project Link
I do not have the tools to dump the Genesis data. But if anyone here does, I agree ... it should be done as soon as possible.

From what I've heard, the protocal was the same for both systems (well, at least nearly the same). Therefore if I get the server working for the SNES version, it probably will work (maybe with minor modifications) for the Genesis version as well!

Also, I should point out that I would still like more dumps of the SNES XBand SRAMs as well. We should collect as many patches as possible before all the batteries die.


(edited by neviksti on 07-11-05 11:20 PM)
Pages: 1 2
Acmlm's Board - I2 Archive - - Posts by neviksti


ABII


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



Page rendered in 0.026 seconds.