Memory card

From NeoGeo Development Wiki
Revision as of 00:44, 26 January 2018 by Furrtek (talk | contribs) (→‎Header)
Jump to navigation Jump to search
SRAM memory card, showing the SRAM chip and voltage detection circuit. Picture by HPMAN

The NeoGeo (AES and some MVS) uses JEIDA V3 memory cards to store game saves and/or high scores. The original SNK-branded card could only hold 2KiB of data.

The official SNK memory card was a battery-based 2KiB card using a LH5116 CMOS SRAM chip and voltage switching circuitry. Data retention voltage: 2V. The SP-S2 system ROM can handle memory cards up to 16KiB. The card is embedded in CD systems as a 8KiB battery-backed RAM chip.

See the CARD call description for memory card operations.

Data format

The system ROM can handle 8 different card sizes (2K, 4K, 6K, 8K, 10K, 14K and 16K) and 4 different card types (8 bits wide, 16 bits wide, 16 bits wide "doubled", and "SNK ROM" cards).

All cards use the same format regardless of capacity.

The data is split into 5 regions:

Header

Always 128 bytes.

Address Name Size Description
$0~$9 10 bytes Zeros or "SNK ROM " (development unit ?)

For 16 bits "doubled" cards, $6 is set to $0001

$A CARD_SIZE word Card capacity
$C byte 0
$D CARD_FAT_1_CHKSUM byte Checksum of FAT 1
$E CARD_FAT_2_CHKSUM byte Checksum of FAT 2
$F CARD_USERNAME_AVAILABLE byte 0 : Username unavailable, !0 : Username available
$10 CARD_USERNAME 16 bytes Card holder's username
$20 CARD_MAGIC 16 bytes $4E $XX $45 $XX $4F $XX $2D $XX $47 $XX $45 $XX $4F $XX $80 $XX ("NEO-GEO", $80)
$30 CARD_REGION byte Region of the system that formated the card, 0 = Japan, 1 = USA, 2 = Europe

Directory

List of saves of 32, 64, 96, 128, 160, 192, 224 or 256 entries. The size depends on the card's capacity.

Each entry has the following format:

Address Size Description
$0 byte Save sub number (CARD_SUB), 0 to 15. $FF if entry is free.
$1 word Game's NGH number
$3 byte FAT entry number (see below)

FAT 1

List of used blocks, of 64, 128, 192, or 256 entries. The size depends on the card's capacity.

  • $02 is a block reservd by the system ROM
  • $01 is a block used by a game
  • $00 is a free block

FAT 2

FAT 2 is simply a mirror of FAT 1.

Game Data

Many games use 64 bytes, but some might use more.

The first 20 bytes are the data title (usually the game and stage name).

Registers

Card pinout (top)

LH5116 pinout
Pin # Name Signal Description Goes to
1 GND
2 D3 CDD3 Data bus NEO-G0
3 D4 CDD4
4 D5 CDD5
5 D6 CDD6
6 D7 CDD7
7 /CE1 CRDC Chip enable 1 NEO-C1
8 A10 CDA10 Address NEO-E0
9 /OE CRDO Output enable NEO-C1
10 A11 CDA11 Address bus NEO-E0
11 A9 CDA9
12 A8 CDA8
13 A13 CDA13
14 A14 CDA14
15 /WE Write enable HC32
16 /BUSY Low when card is busy Not used
17 VCC
18 VPP
19 A16 CDA16 Address bus NEO-E0
20 A15 CDA15
21 A12 CDA12
22 A7 CDA7
23 A6 CDA6
24 A5 CDA5
25 A4 CDA4
26 A3 CDA3
27 A2 CDA2
28 A1 CDA1
29 A0 CDA0
30 D0 CDD0 Data bus NEO-G0
31 D1 CDD1
32 D2 CDD2
33 WP WP High if card is write-protected NEO-C1
34 GND

Card pinout (bottom)

Pin # Name Signal Description Goes to
35 GND
36 /CD1 CD1 Card detect NEO-C1
37 D11 CDD11 Data bus NEO-G0
38 D12 CDD12
39 D13 CDD13
40 D14 CDD14
41 D15 CDD15
42 /CE2 CRDC Chip enable 2 NEO-C1
43 /VS1 Not used
44 /IORD
45 /IOWR
46 A17 CDA17 Address bus NEO-E0
47 A18 CDA18
48 A19 CDA19
49 A20 CDA20
50 A21 CDA21
51 VCC
52 VCC
53 A22 CDA22 Address bus NEO-E0
54 A23 CDA23
55 A24 Not used
56 A25
57 /VS2
58 RESET
59 /WAIT
60 NC Reserved
61 /REG Select attribute memory HC32
62 BVD2 Battery voltage detect Not used
63 BVD1
64 D8 CDD8 Data bus NEO-G0
65 D9 CDD9
66 D10 CDD10
67 /CD2 CD2 Card detect NEO-C1
68 GND