161-in-1 Series 1

Relatively recent multicart with a software menu.

=Programming=

Infos by Razoola.

Games have their v-blank interrupt code patched to allow going back to the game list menu by holding 1UP start down for 5 seconds. This button check however is quite flawed given it tests the entire byte of REG_STATUS_B and not bit 0 only. The result of this oversight by the coders means the game list menu will not reappear if running on AES hardware (via converter), if a memory card is present, or either 1UP select, 2UP start or 2UP select is also pressed.

Address 0x2FFFE0 (word) is used to communicate with the mcu for storage and retrieval of the game's software DIPs settings and the menu's current position.

Game selection is done through a set of 5 registers; 0x2FFFF0, 0x2FFFF2, 0x2FFFF4, 0x2FFFF6 and 0x2FFF00 (in that order). Each game is identified by a single word value (hex format) which is its position in the game list, KOF99 is 0x0015 for example. What is currently known about these registers is as follows;

0x2FFFF0
 * 0x0F0F is always written by the UI but testing seems to show any value will have the same effect.
 * Prep MCU to receive game change info (must be written first).

0x2FFFF2 0x2FFFF4
 * Number of game to be selected always written by the UI.
 * purpose unknown
 * Number of game to be selected always written by the UI.
 * purpose unknown

0x2FFFF6
 * Number of game to be selected always written by the UI.
 * Purpose unknown but a value must be written!

0x2FFF00
 * Number of game to be selected always written by the UI.
 * Swaps ROM regions to new game (must be written).

Some notes about game swapping.


 * To get back into the 161-in-1 game list the game number is set to 0x0000.
 * Looking at Art of Fighting 2, register 0x2FFFF4 is not used when jumping back to the game list (unsure if this is true for all games).
 * ROM regions (P,S,F,M and V) switch to the game based on the value written to 0x2FFF00 regardless of the values written to either 0x2FFFF2, 0x2FFFF4 or 0x2FFFF6.
 * A game can be chosen by writing to registers 0x2FFFF0, 0x2FFFF6 and 0x2FFF00 only. Unknown if all games would function correctly however (lots of play testing required).
 * No way is currently known to instruct the cart to configure a single ROM region to a different game than whats held in the other regions. Based on what is known already this is probably not possible unless there are registers unused by the UI coding that can be used to instruct the MCU to do it.

=Boards=



Uses a bunch of uncommon Fujitsu SSOP70 55LV100S 128MB flash chips, which some say were salvaged from other arcade machines.


 * 3 for P (384MB)
 * 5 for V (640MB)
 * 16 for C (2GB)
 * 1 for S
 * 1 for M

PROG board

 * UP1: EPM3256 CPLD for P ROM and mcu control. Full 68k address and data bus connected. Address bus for the P ROMs comes only from the CPLD. Connected to RESET, PORTWE, PORTOE, ROMOE, AS, RW. JTAG port is JP1.


 * UV1: EPM3256 CPLD for V ROM bankswitching and replacement. JTAG port is JV1.


 * U3: Microcontroller (sanded-off PIC ?). 5V-powered, 8bit input bus (3.3V pullups in SIL array) and 8bit output bus to UP1. Not present on earlier multicarts of the same origin with less games. Programming port is J8.

CHA board
Another EPM3256 CPLD for the C, S and M ROMs. A smaller CPLD is used to replace.

Uses a daughterboard with 14 flash chips. Lots of unused footprints for additional chips.