Memory card

From NeoGeo Development Wiki
Jump to navigation Jump to search

JEIDA V3 memory cards used in AES and some MVS systems to store game saves and/or high scores. The original SNK card could only hold 2KiB of data.

Picture by HPMAN

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

Replaced by a 8KiB fixed battery-backed RAM chip in the CD systems.

See the CARD BIOS call description for memory card operations.

Data format

BIOS can handle 8 different card size (2K, 4K, 6K, 8K, 10K, 14K and 16K) and different card type (8 bits wide, 16 bits wide, 16 bits doubled wide and SNK ROM card).

All the data here are for all the card, it's just a matter on how to read the data between different type of card.

The internal card data are splitted into 5 regions.

Header

Always $80 bytes.

Address Name Size Description
$0~$9 10 bytes Zero or "SNK ROM " (Development unit I think)

For 16bits doubled card, $6 is set to $0001

$A CARD_SIZE word Size of the memcard
$C byte 0
$D CARD_FAT_1_CHKSUM byte Checksum of the FAT 1
$E CARD_FAT_2_CHKSUM byte Checksum of the FAT 2
$F CARD_USERNAME_AVAILABLE byte 0 : Username available, !0 : Username unavailable
$10 CARD_USERNAME 16 bytes Card holder 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 slot that formated the card, 0 = Japan, 1 = USA, 2 = Europe

Directory

List of saves. Size depends on card size, it can hold 32, 64, 96, 128, 160, 192, 224 or 256 entries.

Each entry have this format :

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

FAT 1

List of used blocks. Size depends on card size, it can hold 64, 128 192 or 256 entries.

  • $02 is a BIOS reserved block
  • $01 is a game used block
  • $00 is a free block

FAT 2

FAT 2 is simply a mirror of FAT 1.

Game Data

Normally 64 bytes but maybe some games use more that one block ?

The first 20 bytes are the data title (generally the game name + the stage name).

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