#39046 - denopqrihg - Sun Apr 03, 2005 8:29 pm
I've been playing around with this thing (though I don't have it :D ) for quite a long time now, so I decided to share my investigations:
Initialization:
1) Output SD=low, SO=low
2) Output SD=high, SO=low for about 18500 clocks
3) Output SD=low, SO=low
4) Using Normal mode with external clock, send the following data:
Send Receive
0xgggg494e 0x494egggg
0xb6b1494e 0x494eb6b1
0xb6b1544e 0x544eb6b1
0xabb1544e 0x544eabb1
0xabb14e45 0x4e45abb1
0xb1ba4e45 0x4e45b1ba
0xb1ba4f44 0x4f44b1ba
0xb0bb4f44 0x4f44b0bb
0xb0bb8001 0x8001b0bb
5) Shift to 2Mhz Normal mode with internal clock and send:
Send Receive
0x9966003d 0x80000000
0x80000000 0x996600bd
(gggg = garbage)
Basically, you send the text "NINTENDO/x01/x80" in the lower halfword 2 bytes at a time in little endian form and 1's complement of the higher halfword received last time.
Using the adapter:
The adapter uses 2Mbps Normal mode for communication with the GBA (select internal clock).
You can send various commands to the adapter (the purpose of most of them is unknown).
The format is:
Send Receive
0x9966wwcc 0x80000000
data... 0x80000000
0x80000000 0x9966wwaa
0x80000000 data...
where ww is the number of words (4byte units) following the command, cc is the command, and aa is ackowledged command (cc|0x80).
Also, each transmission (sending of EVERY 4 bytes) is followed by an ackowledge procedure:
Set SO = high, wait until SI = low
Then set SO = low, wait until SI = high
(can be done in normal mode)
The meaning of following commands is known (=I have an interpretation for them):
Command 0x3d and 0x10:
Last step of the initialization procedure. Difference between 0x3d and 0x10 is unknown.
Command 0x16:
Followed by any number of data words (Nintendo games usually use 6 words = 24 bytes).
Send broadcast data. This data will be received by all adapters in range.
Command 0x1d:
Receive broadcast data.
The adapter sends broadcast data from all other adapters to the GBA using the following structure:
1 word: ID of the sending adapter (or maybe just the lower halfword)
n words: data
This structure is repeated for each adpater.
Command 0x1f:
Select which adapter you want to communicate with (identified by its ID).
Partly known commands:
Command 0x17:
Followed by 1 word of data. Most likely some kind of setup (used once at the beginning).
Usage of other commands is completely unknown.
Commands used by Nintendo include: 0x11, 0x13, 0x19, 0x1a, 0x26 and more, some of which I believe are for direct communication between two adapters.
This info should be sufficient for making a simple broadcasting game.
It's in no way complete or confirmed, if you find something that doesn't work or find out some new information, go ahead and post.
This is a copy of the same topic at vbalink http://vbalink.wz.cz/phpbb2/viewtopic.php?t=565
You can download the document here.
Initialization:
1) Output SD=low, SO=low
2) Output SD=high, SO=low for about 18500 clocks
3) Output SD=low, SO=low
4) Using Normal mode with external clock, send the following data:
Send Receive
0xgggg494e 0x494egggg
0xb6b1494e 0x494eb6b1
0xb6b1544e 0x544eb6b1
0xabb1544e 0x544eabb1
0xabb14e45 0x4e45abb1
0xb1ba4e45 0x4e45b1ba
0xb1ba4f44 0x4f44b1ba
0xb0bb4f44 0x4f44b0bb
0xb0bb8001 0x8001b0bb
5) Shift to 2Mhz Normal mode with internal clock and send:
Send Receive
0x9966003d 0x80000000
0x80000000 0x996600bd
(gggg = garbage)
Basically, you send the text "NINTENDO/x01/x80" in the lower halfword 2 bytes at a time in little endian form and 1's complement of the higher halfword received last time.
Using the adapter:
The adapter uses 2Mbps Normal mode for communication with the GBA (select internal clock).
You can send various commands to the adapter (the purpose of most of them is unknown).
The format is:
Send Receive
0x9966wwcc 0x80000000
data... 0x80000000
0x80000000 0x9966wwaa
0x80000000 data...
where ww is the number of words (4byte units) following the command, cc is the command, and aa is ackowledged command (cc|0x80).
Also, each transmission (sending of EVERY 4 bytes) is followed by an ackowledge procedure:
Set SO = high, wait until SI = low
Then set SO = low, wait until SI = high
(can be done in normal mode)
The meaning of following commands is known (=I have an interpretation for them):
Command 0x3d and 0x10:
Last step of the initialization procedure. Difference between 0x3d and 0x10 is unknown.
Command 0x16:
Followed by any number of data words (Nintendo games usually use 6 words = 24 bytes).
Send broadcast data. This data will be received by all adapters in range.
Command 0x1d:
Receive broadcast data.
The adapter sends broadcast data from all other adapters to the GBA using the following structure:
1 word: ID of the sending adapter (or maybe just the lower halfword)
n words: data
This structure is repeated for each adpater.
Command 0x1f:
Select which adapter you want to communicate with (identified by its ID).
Partly known commands:
Command 0x17:
Followed by 1 word of data. Most likely some kind of setup (used once at the beginning).
Usage of other commands is completely unknown.
Commands used by Nintendo include: 0x11, 0x13, 0x19, 0x1a, 0x26 and more, some of which I believe are for direct communication between two adapters.
This info should be sufficient for making a simple broadcasting game.
It's in no way complete or confirmed, if you find something that doesn't work or find out some new information, go ahead and post.
This is a copy of the same topic at vbalink http://vbalink.wz.cz/phpbb2/viewtopic.php?t=565
You can download the document here.