EEPROM: Difference between revisions
No edit summary |
No edit summary |
||
Line 124: | Line 124: | ||
+--------- Internal EEPROM write protection: | +--------- Internal EEPROM write protection: | ||
0 = disabled, 1 = enabled | 0 = disabled, 1 = enabled | ||
</pre> | |||
== Internal EEPROM Layout == | |||
{| class="wikitable" | |||
|- | |||
! Offset !! Length !! Contents | |||
|- | |||
| $00 || 96 || Program data. Can be written by programs even if write protection has been enabled. | |||
|- | |||
| $60 || 16 || Owner name, custom character set. | |||
|- | |||
| $70 || 1 || Owner birthday year, BCD, first/higher two digits | |||
|- | |||
| $71 || 1 || Owner birthday year, BCD, last/lower two digits | |||
|- | |||
| $72 || 1 || Owner birthday month, BCD | |||
|- | |||
| $73 || 1 || Owner birthday day, BCD | |||
|- | |||
| $74 || 1 || Owner gender:<br/> | |||
0 - ?<br/> | |||
1 - Male<br/> | |||
2 - Female | |||
|- | |||
| $75 || 1 || Owner blood type:<br/> | |||
0 - ?<br/> | |||
1 - A<br/> | |||
2 - B<br/> | |||
3 - AB<br/> | |||
4 - 0 | |||
|- | |||
| $76 || 1 | Last booted cartridge developer/publisher ID | |||
|- | |||
| $77 || 1 | Last booted cartridge game ID | |||
|- | |||
| $78 || 1 | Last booted cartridge game version | |||
|- | |||
| $7C || 1 | Stored cartridge ID/version change counter | |||
|- | |||
| $7D || 1 | Owner name change counter | |||
|- | |||
| $7E || 2 | System startup counter | |||
|- | |||
| $83 || 1 | Color console configuration | |||
|- | |||
| $84 || ? | [[Splash animation|Custom splash animation]], if present | |||
|} | |||
=== Owner name character set === | |||
{| class="wikitable" | |||
|- | |||
! | |||
! <code>.0</code> | |||
! <code>.1</code> | |||
! <code>.2</code> | |||
! <code>.3</code> | |||
! <code>.4</code> | |||
! <code>.5</code> | |||
! <code>.6</code> | |||
! <code>.7</code> | |||
! <code>.8</code> | |||
! <code>.9</code> | |||
! <code>.A</code> | |||
! <code>.B</code> | |||
! <code>.C</code> | |||
! <code>.D</code> | |||
! <code>.E</code> | |||
! <code>.F</code> | |||
|- | |||
! <code>0.</code> | |||
| || 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || A || B || C || D || E | |||
|- | |||
! <code>1.</code> | |||
| F || G || H || I || J || K || L || M || N || O || P || Q || R || S || T || U | |||
|- | |||
! <code>2.</code> | |||
| V || W || X || Y || Z || ♥ || ♪ || + || - || ? || . | |||
! | |||
! | |||
! | |||
! | |||
! | |||
|} | |||
=== Color console configuration === | |||
<pre> | |||
7 bit 0 | |||
---- ---- | |||
sc.. ..vv | |||
|| || | |||
|| ++- Volume level | |||
|+-------- Contrast (WSC): 0 = Low, 1 = High | |||
+--------- Custom splash animation enabled | |||
</pre> | </pre> | ||
Revision as of 19:17, 22 August 2023
The WonderSwan utilizes M93LCx6-compatible EEPROMs:
- in the SoC:
- 1 Kbit internal EEPROM (M93LC46-compatible) on the WonderSwan,
- 16 Kbit internal EEPROM (M93LC86-compatible) on the WonderSwan Color,
- on cartridges:
- 1 Kbit cartridge EEPROM (M93LC46-compatible)
- 8 Kbit cartridge EEPROM (M93LC76-compatible)
- 16 Kbit cartridge EEPROM (M93LC86-compatible)
Additional variants exists which were not seen on any production cartridge:
- 2 Kbit EEPROM (M93LC56-compatible)
- 4 Kbit EEPROM (M93LC66-compatible)
Commands
READ - Read Word
The READ command takes an address of a word (address 0 => bytes 0, 1; address 1 => bytes 2, 3; ...) and returns the word at that address.
WRITE - Write Word
The WRITE command takes an address of a word (address 0 => bytes 0, 1; address 1 => bytes 2, 3; ...) and the word to write to it, then writes the word.
ERASE - Erase Word
The ERASE command takes an address of a word (address 0 => bytes 0, 1; address 1 => bytes 2, 3; ...) and erases the word at that address, setting it to 0xFFFF.
WDS - Write Disable
TODO
WRAL - Write All
TODO
ERAL - Erase All
TODO
WEN - Write Enable
TODO
I/O ports
The I/O ports listed refer to the internal EEPROM; for the cartridge EEPROM port numbers, refer to the mapper documentation.
Internal EEPROM Data ($BA, $BB)
15 bit 8 7 bit 0 ---- ---- ---- ---- dddd dddd dddd dddd |||| |||| |||| |||| ++++-++++--++++-++++- Data read from/written to the EEPROM.
This port functions as a shared buffer for both "read" and "write" modes. (TODO: Verify)
Internal EEPROM Command ($BC, $BD)
Command Pattern 1 15 bit 8 7 bit 0 ---- ---- ---- ---- 0000 0001 ooaa aaaa (1 Kbit - M93LC46) 0000 01oo aaaa aaaa (2, 4 Kbit - M93LC56/66) 0001 ooaa aaaa aaaa (8, 16 Kbit - M93LC76/86) |||| |||| |||| ||++--++++-++++- Address (MSb .. LSb) ++-------------- Opcode: 01 - WRITE 10 - READ 11 - ERASE
Command Pattern 2 15 bit 8 7 bit 0 ---- ---- ---- ---- 0000 0001 00ss .... (1 Kbit - M93LC46) 0000 0100 ss.. .... (2, 4 Kbit - M93LC56/66) 0001 00ss .... .... (8, 16 Kbit - M93LC76/86) || ++------------ Sub-Opcode: 00 - WDS 01 - WRAL 01 - ERAL 11 - WEN
Internal EEPROM Control ($BE, $BF write)
15 bit 8 7 bit 0 ---- ---- ---- ---- .... .... pewr .... |||| |||+------ 1 for READ command, 0 otherwise ||+------- 1 for WRITE and WRAL command, 0 otherwise |+-------- 1 for ERASE, WDS, ERAL and WEN command, 0 otherwise +--------- 1 to enable internal EEPROM write protection. Cannot be cleared once set.
Internal EEPROM Status ($BE, $BF read)
15 bit 8 7 bit 0 ---- ---- ---- ---- .... .... p... ..RD | || | |+- 1 if a READ command has completed. | +-- 0 if the EEPROM is busy, | 1 if a command can be accepted (idle). +--------- Internal EEPROM write protection: 0 = disabled, 1 = enabled
Internal EEPROM Layout
Offset | Length | Contents |
---|---|---|
$00 | 96 | Program data. Can be written by programs even if write protection has been enabled. |
$60 | 16 | Owner name, custom character set. |
$70 | 1 | Owner birthday year, BCD, first/higher two digits |
$71 | 1 | Owner birthday year, BCD, last/lower two digits |
$72 | 1 | Owner birthday month, BCD |
$73 | 1 | Owner birthday day, BCD |
$74 | 1 | Owner gender: 0 - ? |
$75 | 1 | Owner blood type: 0 - ? |
$76 | Last booted cartridge developer/publisher ID | |
$77 | Last booted cartridge game ID | |
$78 | Last booted cartridge game version | |
$7C | Stored cartridge ID/version change counter | |
$7D | Owner name change counter | |
$7E | System startup counter | |
$83 | Color console configuration | |
$84 | Custom splash animation, if present |
Owner name character set
.0
|
.1
|
.2
|
.3
|
.4
|
.5
|
.6
|
.7
|
.8
|
.9
|
.A
|
.B
|
.C
|
.D
|
.E
|
.F
| |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0.
|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | |
1.
|
F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U |
2.
|
V | W | X | Y | Z | ♥ | ♪ | + | - | ? | . |
Color console configuration
7 bit 0 ---- ---- sc.. ..vv || || || ++- Volume level |+-------- Contrast (WSC): 0 = Low, 1 = High +--------- Custom splash animation enabled
Hardware notes
EEPROM command bits are shifted out starting from the most significant bit of the port.
+----> EEPROM Serial Data | [0] <= [0000 0001 ooaa aaaa] EEPROM Command Port
While the M93LCx6 family supports byte organization, the WonderSwan always uses word organization. As such, this implementation detail is omitted in this documentation.