EEPROM: Difference between revisions

From WSdev Wiki
Jump to navigationJump to search
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 - ?
1 - Male
2 - Female

$75 1 Owner blood type:

0 - ?
1 - A
2 - B
3 - AB
4 - 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.

Links