161-in-1 Series 1: Difference between revisions

From NeoGeo Development Wiki
Jump to navigation Jump to search
(Created page with "Relatively recent multicart with a software menu. =Programming= Infos by Razoola. Games have their v-blank interrupt code...")
 
Line 5: Line 5:
Infos by [[User:Razoola|Razoola]].
Infos by [[User:Razoola|Razoola]].


Games have their [[68k interrupts|v-blank]] interrupt code patched to allow going back to the menu. The button press check is flawed: it assumes no memory card is present. If a memory card is present, the check will never pass and the menu won't appear.
Games have their [[68k interrupts|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), a memory card is present or either 1UP select, 2UP start or 2UP select is also pressed.  


Address [[68k memory map|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.
Address [[68k memory map|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 seems to be done through a set of 3 registers (0x2FFF00, 0x2FFFF2, and 0x2FFFF6), where only the game number is written.
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;
 
[[68k memory map|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).
 
[[68k memory map|0x2FFFF2]]
*Number of game to be selected always written by the UI.
*purpose unknown
[[68k memory map|0x2FFFF4]]
*Number of game to be selected always written by the UI.
*purpose unknown
 
[[68k memory map|0x2FFFF6]]
*Number of game to be selected always written by the UI.
*Purpose unknown but a value must be written!
 
[[68k memory map|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 is 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 congigure a single ROM region to a different game than whats held in the other regions. Based on whats 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=
=Boards=

Revision as of 08:50, 5 March 2018

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), 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

  • Number of game to be selected always written by the UI.
  • purpose unknown

0x2FFFF4

  • 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 is 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 congigure a single ROM region to a different game than whats held in the other regions. Based on whats 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

55LV100S draft pinout

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 PCM 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 NEO-ZMC.

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