Permalink
Fetching contributors…
Cannot retrieve contributors at this time
11171 lines (9405 sloc) 622 KB
// license:LGPL-2.1+
// copyright-holders: Samuele Zannoli, R. Belmont, ElSemi, David Haywood, Angelo Salese, Olivier Galibert, MetalliC
/*
Sega Naomi / Naomi 2 / Atomiswave
Sega, 1998-2005
Driver by Samuele Zannoli, R. Belmont, ElSemi,
David Haywood, Angelo Salese and Olivier Galibert
Special thanks to CaH4e3, Deunan Knute, drkIIRaziel, Guru, Psyman and ZeZu for the help given.
Notes:
Several early Naomi games are running on an earlier revision mainboard (HOTD2 etc.) which appears to have an earlier
revision of the graphic chip. Attempting to run these games on the later board results in graphical glitches and/or
other problems.
Naomi 2 is backwards compatible with Naomi 1
The later revision games (released after GD-ROM had been discontinued) require the 'h' revision bios, which checks the SH-4 ID register.
Error 51 means that you need to change the cabinet to a different player arrangement in main test mode (usually 1p)
Sega Naomi is Dreamcast based Arcade hardware.
TODO (general):
- all games that uses YUV just updates one frame then dies, why?
- Some SH to ARM sound streaming doesn't work (used by ADX compression system)
- ngdup23a, ngdup23c: missing DIMM emulation, hence they can't possibly work, emulate the DIMM means to add an extra SH-4 ...
- Following games don't boot, any attempt makes it to return to the system test mode (note these are also "m4" type games)
* Akatsuki Blitzkampf Ausf. Achse
- Boots and accepts coin, but won't accept start button
* Usagi Yamashiro Hen
- missing inputs (needs rotary channels):
* Crakin' DJ
* Dynamic Golf
* Inu no Osampo
- wrong JVS I/O specs, doesn't boot because of it:
* Derby Owners Club II
* Kick '4' Cash (hopper)
* Sega Marine Fishing
* Wave Runner GP
* Shootout Pool
* Shootout Pool Medal
* Shootout Pool Prize
- other issues:
* Death Crimson OX (boots now, but dies in YUV-mode movie; coining up before it appears to freeze the game)
* La Keyboard (boots fine & attract mode looks OK, but no keyboard)
TODO (game-specific):
- 18 Wheeler (deluxe): "MOTOR NETWORK ERR IN 01 OUT FF" msg pops up during gameplay;
- Airline Pilots (deluxe): returns error 03
- Capcom vs. SNK Pro: doesn't accept start input (REGRESSION)
- Derby Owner Club: if you try to start a game, it moans about something and enters into some kind of JP test mode, pretty bogus behaviour;
- Ferrari 355 Challenge: dies at the network check;
- Giant Gram 2: no VMU emulation;
- Gun Survivor 2: crashes during game loading;
- Lupin the Shooting: "com. error between Naomi BD and i/o BD" after some secs. of gameplay;
- marstv: temporary lock ups during anchor talking (does same in Demul);
- marstv: missing graphics at stage select, renderer fault or something else?
- monkeyba: CPU jumps to la la land when attempts to load a stage (bp c09e950, uses FPU opcodes for calculating the return address?);
- Oinori-Daimyoujin Matsuri: reports "B. RAM error" in test mode, inputs doesn't seem to work after that point;
- OutTrigger: crashes on naomibd_r();
- puyofev: hangs after pressing start (bp 0C03F490, similar if not same snippet as Tetris 4d on DC).
- Ringout 4x4: needs cabinet set to 4p, moans about not having two jamma i/o boards;
- Super Major League '99: attract mode/gameplay bogusly have stop-motions from time to time;
- sfz3ugd: currently dies at disclaimer screen (regression);
- shangril: swapped mahjong inputs (M -> N, C -> B etc.);
- sprtjam: garbage on initial attract mode screen (regression).
- The House of the Dead 2: game uses an earlier PVR so it has extra gfx issues;
- The Typing of the Dead: missing keyboard inputs, doesn't enter into attract/test mode anymore (JVS issue);
- vtennisg: crashes after stage screen or the attract mode (PVR or SH-4 bug, most likely);
- World Kicks (both sets): "NAOMIM2: unhandled board write a0800600, 0000" after Naomi logo
- sl2007:
0C04697A: MOV.L @($28,R14),R0 ;8c167734
0C04697C: TST R0,R0
0C04697E: BT $0C046998
0C046980: BRA $0C046990
0C04698E: BT $0C046998
0C046990: MOV.L @($28,R14),R3
0C046992: MOV #$FD,R5
0C046994: JSR R3
0C046608: NOP
0C04660A: BRA $0C04660A ;tight loops there, NOP-ing this opcode makes to go further, perhaps not supposed to go here in the first place?
0C046608: NOP
---------------------------------------------------------------------------------------------------------------------------------------------------
Guru's Readmes
--------------
Sega NAOMI Mainboard PCB Layout
-------------------------------
837-13544-01
171-7772F
837-13707 (sticker)
(C) SEGA 1999
|---------------------------------------------------|
| CN1 CN3 |
|PC910 62256 EPF8452AQC160-3 |
| BATTERY EPC1064 JP4 3771 93C46 |
|A179B 315-6188.IC31 3771 3773|
|ADM485 BIOS.IC27 5264165 5264165 |
| 5264165 |-----| 5264165 |
| CN2 | SH4 | |
| | | 33.3333MHz |
|CN26 |-----| 27MHz|
| CY2308SC-3|
| KM416S4030 |------| HY57V161610 |
| | POWER| HY57V161610 |
| C844 315-6232 | VR2 | 32MHz |
| 33.8688MHz |------| HY57V161610 |
| 32.768MHz HY57V161610 |
| PCM1725 JP1 62256 |
| HY57V161610 |
| HY57V161610 |
| 315-6145 |
|CN25 CY2308SC-3 315-6146 |
| LED1 93C46 |
| LED2 14.7456MHz |
|---------------------------------------------------|
Notes:
SH4 - Hitachi HD6417091 SH4 CPU (BGAxxx, with heatsink)
POWERVR2 - VideoLogic/NEC 'CLX2/HOLLY' chipset and PowerVR2 GPU (large BGAxxx, with heatsink and fan)
EPF8452AQC160-3 - Altera FLEX EPF8452AQC160-3 FPGA (QFP160)
93C46 - 128 bytes serial EEPROM (SOIC8)
BIOS.IC27 - 27C160 EPROM (DIP42)
5264165 - Hitachi 5264165FTTA60 1M x 16-bit x 4-banks (64Mbit) SDRAM (TSOPII-54)
HY57V161610 - Hynix HY57V161610DTC-8 512k x 16-bit x 2-banks (16Mbit) SDRAM (TSOPII-50)
KM416S4030 - Samsung KM416S4030 1M x 16-bit x 4 Banks SDRAM (TSOPII-54)
62256 - 32k x8-bit SRAM (SOP28)
315-6145 - video DAC/encoder, BU1426KS equivalent (QFP56)
315-6146 - Sega Custom Z80-based MCU (QFP176)
315-6188 - Altera EPC1064PC8 FPGA Configuration Device with sticker '315-6188' at IC31 (DIP8)
315-6232 - Yamaha AICA SPU (QFP100)
CY2308SC-3 - Cypress CY2308SC-3 2-Bank 4-Output Tri-state PLL Programmable Clock Generator IC with 2X or 4X outputs and Zero Delay Buffer (SOIC16)
C844 - NEC uPC844 Quad Operational Amplifier (SOIC14)
A179B - TI SN75179B Differential Driver and Receiver Pair (DIP8)
ADM485 - Analog Devices ADM485 +5 V Low Power EIA RS-485 Transceiver (SOIC8)
PCM1725 - Burr-Brown PCM1725 Stereo Audio Digital to Analog Converter 16 Bits, 96kHz Sampling (SOIC14)
JP1 - set to 2-3. Alt setting is 1-2
JP4 - set to 2-3. Alt setting is 1-2
CN1/2/3 - Connectors for ROM cart or GDROM DIMM Unit
CN25/26 - Connectors for Filter Board
Sega NAOMI 2 Mainboard PCB Layout
---------------------------------
837-14009-01
171-8082C
837-14123 (sticker)
(C) SEGA 1999
|---------------------------------------------------|
| CN1 32MHz BATTERY CN3 |
|PC910 315-6146 S-CAP 62256 315-6188.IC31|
|A179B 62256 *93C46 BIOS.IC27 EPF8452 |
| ADM485 14.7456MHz D4721|
| 5264165 315-6232 315-6268 93C46 |
|PCM1725 33.8688MHz 33.3333MHz |
| 32.768kHz |
| CN2 CY2308 |-----| |
| | SH4 | |
|CN26 | | |
| C844 *CY2308 |-----| |
| 315-6258 5264165 5264165 |
| 315-6269 *5264165 *5264165 16M 16M |
| 315-6258 *16M *16M |
| 16M|--------| |--------| |--------| |
| 16M|315-6267| |315-6289| |315-6267|16M|
| *16M| | | | | |16M|
| *16M| | | | | |*16M
|MC33470 |--------| |--------| |--------|*16M
|CN25 16M 16M 64M 64M |
|*3771 *16M *16M *64M *64M 3771 |
| 27MHz 3771 |
| LED2 LED1 *CY2308 CY2292 3773|
|---------------------------------------------------|
Notes: (* - these parts on other side of PCB)
SH4 - Hitachi HD6417091 SH4 CPU (BGAxxx, with heatsink)
BIOS.IC27 - 27C160 EPROM (DIP42)
EPF8452 - Altera FLEX EPF8452AQC160-3 FPGA (QFP160)
93C46 - 128 bytes serial EEPROM (SOIC8)
5264165 - Hitachi 5264165FTTA60 1M x 16-bit x 4-banks (64Mbit) SDRAM (TSOP-II 54)
16M - Hynix HY57V161610DTC-8 512k x 16-bit x 2-banks (16Mbit) SDRAM (TSOP-II 50)
64M - NEC D4564323 512k x 32-bit x 4-banks (64Mbit) SDRAM (TSOP-II 86)
62256 - 32k x8-bit SRAM (SOP28)
315-6146 - Sega Custom Z80-based MCU (QFP176)
315-6188 - Altera EPC1064PC8 FPGA Configuration Device with sticker '315-6188' at IC31 (DIP8)
315-6232 - Yamaha AICA SPU (QFP100)
315-6258 - video DAC/encoder, BU1426KS equivalent (QFP56, x2)
315-6267 - VideoLogic/NEC 'CLX2/HOLLY' chipset and PowerVR2 GPU (large BGAxxx, with heatsink and fan, x2)
315-6268 - Altera EPM7032AELC44-10 CPLD with sticker '315-6268' (PLCC44)
315-6269 - Altera MAX EPM7064AETC100-10 CPLD with sticker '315-6269' (TQFP100)
315-6289 - VideoLogic/NEC 'ELAN' T&L coprocessor (large BGAxxx, with heatsink)
MC33470 - ON Semiconductor MC33470 Synchronous Rectification DC/DC Converter Programmable Integrated Controller (SOIC20)
CY2308 - Cypress CY2308SC-3 2-Bank 4-Output Tri-state PLL Programmable Clock Generator IC with 2X or 4X outputs and Zero Delay Buffer (SOIC16)
CY2292 - Cypress CY2292SL Three-PLL General-Purpose EPROM Programmable Clock Generator IC (SOIC16)
A179B - TI SN75179B Differential Driver and Receiver Pair (SOIC8)
ADM485 - Analog Devices ADM485 +5 V Low Power EIA RS-485 Transceiver (SOIC8)
PC910 - Sharp PC910 Ultra-high Speed Response OPIC Photocoupler (DIP8)
D4721 - NEC uPD4721GS RS-232 Line Driver/Receiver at 3.3V / 5V (TSSOP20)
3771 - Fujitsu MB3771 Power Supply Monitor (i.e. reset) IC (SOIC8)
3773 - Fujitsu MB3773 Power Supply Monitor with Watch-Dog Timer (SOIC8)
C844 - NEC uPC844 Quad Operational Amplifier (SOIC14)
PCM1725 - Burr-Brown PCM1725 Stereo Audio Digital to Analog Converter 16 Bits, 96kHz Sampling (SOIC14)
BATTERY - 3v Coin Battery
S-CAP - 5.5v 0.1f Supercap
LED1 / LED2 - Red LED / Green LED
CN1/2/3 - Connectors for ROM cart or GDROM DIMM Unit
CN25/26 - Connectors for Filter Board
JP9-JP13 - JUMPERs set CN8 connector function: 1-2 = RS422 (315-6146 "MIE"), 2-3 = RS232C (SH4 SCIF)
CN8 1-2 2-3
JP9 1 RXD+ RXD
JP10 4 TXD+ RTS
JP11 2 RXD- TXD
JP12 5 TXD- CTS
JP13 3/6 422 232 (GND)
Filter Board
------------
839-1069
|----------------------------------------------------|
|SW2 SW1 DIPSW CN5 CN12 CN10|
| |
| |
| DIN1 DIN2 |
| |
| CNTX CNRX |
| CN9 CN8 |
| CN7 CN6 CN4 CN3 CN2 CN1|
|----------------------------------------------------|
Notes:
CN1/CN2 - Power input
CN3 - HD15 (i.e. VGA connector) RGB Video Output @ 15kHz or 31.5kHz
CN4 - RCA Audio Output connectors
CN5 - USB connector (connection to I/O board)
CN6 - 10 pin connector labelled 'MAPLE 0-1'
CN7 - 11 pin connector labelled 'MAPLE 2-3'
CN8 - RS422 connector
CN9 - Midi connector
CNTX/CNRX - Network connectors
DIN1/DIN2 - Connectors joining to mainboard CN25/26
SW1 - Test Switch
SW2 - Service Switch
DIPSW - 4-position DIP switch block
CN10 - 12 volt output for internal case exhaust fan
CN11 - RGB connector (not populated)
CN12 - 5 volt output connector
------------------------------------------------------------------------------------------------------------
Bios Version Information |
------------------------------------------------------------------------------------------------------------
Bios Label | Support | mobo s/n | 171-7978B | Support | Support | 171-8346C |
---------------------------- | Multi-Board | EEPROM type | M1-type | DIMM | Net-DIMM | M4-type |
NAOMI | Naomi 2 | | | ROM board | | | ROM board |
------------------------------------------------------------------------------------------------------------
EPR-21576B (and earlier) | No | X76F100 | No | No | No | No |
EPR-21576C | | Yes | X76F100 | No | No | No | No |
EPR-21576D | | Yes | Any | Yes | No | No | No |
EPR-21576E | EPR-23605 | Yes | Any | Yes | Yes | No | No |
| EPR-23605A | Yes | Any | Yes | Yes | Yes | No |
EPR-21576G | EPR-23605B | Yes | Any | Yes | Yes | Yes | No |
EPR-21576H | EPR-23605C | Yes | Any | Yes | Yes | Yes | Yes |
------------------------------------------------------------------------------------------------------------
NAOMI ROM cart usage
-------------------------
There are 6 known types of carts manufactured by Sega: 171-7885A, 171-7919A, 171-7930B, 171-7978B, 171-8132B, 171-8346C
There are also 2 types of carts manufactured by Namco: MASK-B, MASK-C
PFSB Flash ROM board
837-13591 171-7885A (C) Sega 1998
|------------------------------------------------------------|
| ----CN2---- -|
| JJ |
| IC44 PP |
| 21 |
| OSC1 |
| IC41 IC42 IC22 | male side
| IC45 |
| JJ |
| PP |
| 34 IC37 |
| ----CN3---- ----CN1---- |
|-------------------------------------------------------------|
|------------------------------------------------------------|
|- ----CN2---- |
| |
|IC11S IC10S IC9S IC8S IC7S IC6S IC5S IC4S IC3S IC2S IC1S |
|ROM11 ROM10 ROM9 ROM8 ROM7 ROM6 ROM5 ROM4 ROM3 ROM2 ROM1 |
| |
| IC21S IC20S IC19S IC18S IC17S IC16S IC15S IC14S IC13S IC12S | female side
| ROM21 ROM20 ROM19 ROM18 ROM17 ROM16 ROM15 ROM14 ROM13 ROM12 |
| |
| |
| |
| ----CN1---- ----CN3---- |
|-------------------------------------------------------------|
Notes:
OSC1 - oscillator 28.000MHz
JP1 - JUMPER ROM0 (IC22) size: 1-2 = 32M, 2-3 = 16M
JP2 - JUMPER ROM0 write: 1-2 = Enabled, 2-3 = Disabled
JP3,4 - JUMPERS Bank select: 1-2 1-2 = Master, 2-3 2-3 = Slave (slave data accessed at +0x10000000 at cart address space)
IC1S-IC21S - FlashROM (SOP56), either 32Mb or 64Mb. Not all positions are populated
IC22 - EPROM (DIP42), either 27C160 or 27C322
IC37 - FlashROM (SOIC8) Xicor X76F100 Secure SerialFlash
IC41 - Sega 315-6206 Altera MAX EPM7064S (QFP100)
IC42 - SEGA 315-5881 (QFP100). Probably some kind of FPGA or CPLD. Usually different per game
On the end of the number, -JPN means it requires Japanese BIOS, -COM will run with any BIOS
IC44-IC45 - SRAM (SOJ28) 32kx8, either IDT71256 or CY7C199
CN1/2/3 - connectors joining to main board
Games known to use this PCB include....
Sticker EPROM FLASHROMs X76F100 EPM7064S 315-5881
Game on cart IC22# # of SOP56 IC37# IC41# IC42# Notes
----------------------------------------------------------------------------------------------------------------------------------
Club Kart: European Session (2003, prototype) no cart * 21 (64Mb) present 315-6206 not present * instead of EPROM have tiny PCB with 2 flashroms on it
Crackin' DJ part 2 840-0068C 23674 20 (64Mb) present 315-6206 317-0311-COM PCB have label 840-0068B-01 837-14124, requires regular 837-13551 and 837-13938 rotary JVS boards, and turntable simulation
Crazy Taxi 840-0002C ? 13 (64Mb) ? 315-6206 ? not dumped, likely same as regular 171-7919A cart
Ferrari F355 Challenge (twin/deluxe, preview) no cart 22848P* 21 (64Mb) present 315-6206 317-0267-COM * other ROM board we've seen had 2x flashroms PCB instead of IC22 EEPROM, contents is the same.
/Ferrari F355 Challenge 2 - International
\Course Edition (twin/deluxe, prototype) no cart 23399 21 (64Mb) present 315-6206 317-0287-COM content is the same as regular 171-7919A cart
Mushiking (2K3 2ND ?, prototype) no cart none 11 (64Mb) present 315-6206 not present PCB have label 840-0150B-FLS, not dumped.
Inu No Osanpo / Dog Walking (Rev A) 840-0073C 22294A 16 (64Mb) present 315-6206 317-0316-JPN requires 837-13844 JVS IO with DIPSW 1 ON
Samba de Amigo (prototype) no cart * 21*(64Mb) present 315-6206 317-0270-COM * only first 14 flash roms contain game data, instead of EPROM have tiny PCB with 2 flashroms on it
Shootout Pool Prize Ver.B -P 840-0136C ** 21*(64Mb) present 317-6206 not present * only first 4 flash roms contain game data, ** instead of EPROM have tiny PCB with 2 flashroms on it
Soul Surfer (Rev A) 840-0095C 23838C 21 (64Mb) present 315-6206 not present
Star Horse (live and backup) 840-0055B 23626 17 (64Mb) present 315-6206 not present requires 837-13785 ARCNET&IO BD
Horse Data 840-0034B - 2 (64Mb) present 315-6206 not present not contain game data, used in stack with 840-0121(sound&backup) ROM board as game backup data storage, have JP3 and JP4 in position 2-3
The House of the Dead 2 (prototype) no cart A1E2 21 (64Mb) present 315-6206 present no label on IC42
The King of Route 66 (Rev A) 840-0087C 23819A 20 (64Mb) present 315-6206 not present content is the same as regular 171-8132A cart
The Maze of the Kings (prototype) no cart * 21 (64Mb) present 315-6206 FRI * flash-PCB, not dumped but known to exist
Tokyo Bus Guide (Rev A) 840-0045C 23468A 18 (64Mb) present 315-6206 317-0290-COM requires 837-13844 JVS IO
Virtua Athletics (prototype) no cart none 21*(64Mb) present 315-6206 present * only first 14 flash roms contain game data, have Japan text label "Overseas sales (NA & EU)"
Virtua NBA (prototype) no cart * 21 (64Mb) present 315-6206 317-0271-COM * instead of EPROM have tiny PCB with 2 flashroms on it
Virtua Tennis / Power Smash (prototype) no cart * 21 (64Mb) present 315-6206 317-0263-COM * flash-PCB, title screen have label "SOFT R&D Dept.#3", not dumped but known to exist
Wave Runner GP (USA, Rev A) 840-0064C 23725A 12 (64Mb) present 315-6206 317-0306-COM PCB s/n is 840-0064B-01
PFSB 64M Mask ROM board
837-13668 171-7919A (C) Sega 1998
|---------------------------------------------------------|
| ----CN2---- -|
|IC1 IC2 IC3 IC4 IC5 IC6 JP1|
|ROM1 ROM2 ROM3 ROM4 ROM5 ROM6 IC42 |
| IC45 |
| IC44 IC22 |
| IC7 IC8 IC9 IC10 IC11 | male side
| ROM7 ROM8 ROM9 ROM10 ROM11 IC41 |
| |
| 28MHz |
| |
| ----CN3---- IC37 ----CN1---- |
|----------------------------------------------------------|
Notes:
The other side of the cart PCB just has more locations for
SOP44 MASKROMs... IC12S to IC21S (ROM12 to ROM21)
IC1-IC21S - MaskROM (SOP44), either 32Mb or 64Mb. Not all positions are populated
IC22 - EPROM (DIP42), either 27C160 or 27C322
JP1 - JUMPER Sets the size of the EPROM. 1-2 = 32M, 2-3 = 16M
IC37 - FlashROM (SOIC8) Xicor X76F100 Secure SerialFlash
IC41 - Sega 315-6213 Xilinx XC9536 (PLCC44)
IC42 - SEGA 315-5881 (QFP100). Probably some kind of FPGA or CPLD. Usually different per game
On the end of the number, -JPN means it requires Japanese BIOS, -COM will run with any BIOS
IC44-IC45 - SRAM (SOJ28) 32kx8, either IDT71256 or CY7C199
CN1/2/3 - connectors joining to main board
Games known to use this PCB include....
Sticker EPROM MASKROMs X76F100 XC9536 315-5881
Game on cart IC22# # of SOP44 IC37# IC41# IC42# Notes
------------------------------------------------------------------------------------------------------------------------------
18 Wheeler (deluxe) (Rev A) 840-0023C 22185A 20 (64Mb) present 315-6213 317-0273-COM
18 Wheeler (standard) 840-0036C 23298 20 (64Mb) present 315-6213 317-0273-COM
18 Wheeler (upright) 840-0037C 23299 20 (64Mb) present 315-6213 317-0273-COM
Airline Pilots (World, Rev B) ? 21787B 11 (64Mb) present 315-6213 317-0251-COM 2 known BIOS 21801 (USA), 21802 (EXP)
Airline Pilots (Japan, Rev A) 840-0005C 21739A 11 (64Mb) present 315-6213 317-0251-COM
Cosmic Smash 840-0044C 23428 8 (64Mb) ? 315-6213 317-0289-COM joystick + 2 buttons
Cosmic Smash (Rev A) 840-0044C 23428A 8 (64Mb) present 315-6213 317-0289-COM joystick + 2 buttons
Crazy Taxi 840-0002C 21684 13 (64Mb)* present 315-6213 317-0248-COM * ic8 and ic9 are not present
Dead Or Alive 2 (Rev A) 841-0003C 22121A 21 (64Mb) present 315-6213 317-5048-COM joystick + 3 buttons
Dead Or Alive 2 841-0003C-01 22207 21 (64Mb) present 315-6213 317-5048-COM have unlocked Tag and Survival game modes, possible USA or international release
Dead Or Alive 2 Millennium 841-0003C DOA2 Ver.M 21 (64Mb) present 315-6213 317-5048-COM joystick + 3 buttons
Death Crimson OX 841-0016C 23524 10 (64Mb) present 315-6213 317-5066-COM
Death Crimson OX 841-0016C 23524A 10 (64Mb) present 315-6213 317-5066-COM cart case had no revision label
Dengen Tenshi Taisen Janshi Shangri-La 841-0004C 22060 12 (64Mb) ? 315-6213 317-5050-JPN
Derby Owners Club (Japan) (Rev B) 840-0016C 22099B 14 (64Mb) ? 315-6213 317-0262-JPN touch panel + 2 buttons + card reader
Derby Owners Club 2000 (Japan) * 22222 16 (64Mb) present 315-6213 not present * no cart, master unit stickers: 833-13937-01, DOC 4050-01, DOC S. not dumped.
Derby Owners Club 2000 Ver.2 (Japan) (Rev A) 840-0052C 22284A 16 (64Mb) present 315-6213 not present
Dynamite Baseball '99 (Japan) (Rev B) 840-0019C 22141B 19 (64Mb) ? 315-6213 317-0269-JPN requires special panel (joystick + 2 buttons + bat controller for each player)
Dynamite Baseball NAOMI (Japan) 840-0001C 21575 21 (64Mb) ? 315-6213 317-0246-JPN requires special panel (joystick + 2 buttons + bat controller for each player)
Ferrari F355 Challenge (deluxe, no link) 834-13842 21902 21 (64Mb) present 315-6213 317-0254-COM BIOS 21862 (JPN), 21863 (USA), 21864 (EXP)
Ferrari F355 Challenge (twin/deluxe) 834-13950 22848 21 (64Mb) present 315-6213 317-0267-COM BIOS 22849 (JPN), 22850 (USA), 22851 (EXP)
Ferrari F355 Challenge 2 (twin/deluxe) 840-0042C 23399 21 (64Mb) present 315-6213 317-0287-COM BIOS 22849 (JPN), 22850 (USA), 22851 (EXP)
Giant Gram: All Japan Pro Wrestling 2 840-0007C 21820 9 (64Mb) ? 315-6213 317-0253-JPN joystick + 3 buttons
Guilty Gear X 841-0013C 23356 14 (64Mb) present 315-6213 317-5063-COM
Gun Spike 841-0012C 23210 12 (64Mb) present 315-6213 317-5060-COM \same ROM board
Cannon Spike 841-0012C-01 23210 12 (64Mb) present 315-6213 317-5060-COM /
Heavy Metal Geomatrix (Rev B) HMG016007 23716A 11 (64Mb) present 315-6213 317-5071-COM joystick + 2 buttons
Idol Janshi Suchie-Pai 3 841-0002C 21979 14 (64Mb) ? 315-6213 317-5047-JPN requires mahjong panel
Jambo! Safari (Rev A) 840-0013C 22826A 8 (64Mb) ? 315-6213 317-0264-COM
Mars TV 840-0025C 22993 15 (64Mb) present 315-6213 317-0274-JPN
Marvel Vs. Capcom 2 (USA) (Rev A) 841-0007C-01 23062A 14 (64Mb) present 315-6213 317-5053-COM
OutTrigger 840-0017C 22163 19 (64Mb) ? 315-6213 317-0266-COM requires regular 837-13551 and 837-13938 rotary JVS boards, and special panel
Power Stone 841-0001C 21597 8 (64Mb) present 315-6213 317-5046-COM joystick + 3 buttons
Power Stone 2 841-0008C 23127 9 (64Mb) present 315-6213 317-5054-COM joystick + 3 buttons
Puyo Puyo Da! 841-0006C 22206 20 (64Mb) ? 315-6213 317-5052-COM
Ring Out 4x4 840-0004C 21779 10 (64Mb) present 315-6213 317-0250-COM requires 2 JVS boards
Samba de Amigo (Rev B) (Rev A) 840-0020C 22966B 16 (64Mb) present 315-6213 317-0270-COM will boot but requires special controller to play it
Sega Marine Fishing 840-0027C 22221 10 (64Mb) ? 315-6213 not present ROM 3&4 not present. Requires 837-13844 JVS IO with all DIPSW Off and fishing controller
Sega Strike Fighter (Rev A) 840-0035C 23323A 20 (64Mb) present 315-6213 317-0281-COM have "Rev. A" label on case
Sega Strike Fighter (Rev A, no training mode) 840-0035C 23786A 20 (64Mb) present 315-6213 317-0281-COM have no training mode, "Rev. A" label on PCB, cart case have no revision label
Sega Tetris 840-0018C 22909 6 (64Mb) present 315-6213 317-0268-COM
Slashout 840-0041C 23341 17 (64Mb) ? 315-6213 317-0286-COM joystick + 4 buttons
Spawn In the Demon's Hand (Rev B) 841-0005C 22977B 10 (64Mb) ? 315-6213 317-5051-COM joystick + 4 buttons
World Series 99 840-0012C 22059 21 (64Mb) ? 315-6213 317-0259-COM \same ROM board
Super Major League 99 840-0012C-01 22059 21 (64Mb) ? 315-6213 317-0259-COM /
The House of the Dead 2 834-13636 21385 20 (64Mb) not present not present \ ROM board type is 837-13390
The House of the Dead 2 (USA) 834-13636-01 21585 20 (64Mb) not present not present / uses Lattice ispLSI 2032 80LJ instead of Xilinx
The Typing of the Dead 840-0026C 23021 20 (64Mb) present 315-6213 not present
The Typing of the Dead (Rev A) 840-0026C 23021A 20 (64Mb) present 315-6213 not present
Touch de UNO! / Unou Nouryoku Check Machine 840-0008C 22073 4 (64Mb) present 315-6213 317-0255-JPN requires 837-13844 JVS IO with DIPSW 5 On, ELO AccuTouch-compatible touch screen controller and special printer.
Toy Fighter 840-0011C 22035 10 (64Mb) present 315-6212 317-0257-COM joystick + 3 buttons
Virtua NBA 840-0021C 22949 21 (64Mb) present 315-6213 317-0271-COM
Virtua NBA (USA) 840-0021C-01 23073 21 (64Mb) present 315-6213 not present PCB s/n is 840-0021B-01
Virtua Striker 2 Ver. 2000 (Rev C) 840-0010C 21929C 14 (64Mb)* present 315-6213 317-0258-COM joystick + 3 buttons *(+1x 32Mb)
Virtua Tennis / Power Smash 840-0015C 22927 11 (64Mb) present 315-6213 317-0263-COM
Virtual On Oratorio Tangram M.S.B.S. ver5.66 840-0028C 23198 13 (64Mb) ? 315-6213 317-0279-COM
Zombie Revenge 840-0003C 21707 19 (64Mb) ? 315-6213 317-0249-COM joystick + 3 buttons
Zombie Revenge (Rev A) 840-0003C 21707A 19 (64Mb) present 315-6213 317-0249-COM joystick + 3 buttons
NRS Flash ROM board
837-14011 171-7930B (C) Sega 1998
|------------------------------------------------------------------|
| JJJJJJ SW2 ----CN2---- -|
| SW1 PPPPPP |
| 134567 |
| C |
| N |
| D IC16 | male side
| B OSC1 IC41 IC44 |
| 2 SCSI IC40 |
| 5 CTRL |
| |
| ----CN3---- |
|-------------------------------------------------------------------|
|------------------------------------------------------------------|
|- ----CN2---- |
| |
| IC37S IC35S IC33S IC31S IC29S IC27S IC25S IC23S IC21S IC19S IC17S |
| |
| |
| IC36S IC34S IC32S IC30S IC28S IC26S IC24S IC22S IC20S IC18S | female side
| |
| |
| IC38S |
| |
| ----CN1---- ----CN3---- |
|-------------------------------------------------------------------|
Notes:
OSC1 - oscillator 20.000MHz
JP1 - JUMPER ROM0 (IC16) size: 1-2 = 32M, 2-3 = 16M
JP2 - JUMPER ROM0 write: 1-2 = Enabled, 2-3 = Disabled
JP3 - JUMPER ROM board Bank: 1-2 = Slave, 2-3 = Master
JP4,5,7 - JUMPERS SCSI function: 1-2 2-3 1-2 = Enabled, 2-3 1-2 2-3 = Disabled
JP6 - JUMPER Unknown function (1-2)
SW1 - PUSHBUTTON
SW2 - 8X2 DIPswitch
SCSI-CTRL - SCSI-II controller MB86604A
CNDB25 - DB-25 SCSI-II connector
IC17S-IC38S - Intel DA28F640J5 FlashROM (SOP56), 64Mb.
IC16 - EPROM (DIP42), not populated.
IC40 - FPGA ACTEL A54SX32A (QFP208) SEGA part number 315-6257A
IC41 - 8bit CMOS Microcontroller (DIP8) Microchip PIC12C508A (internal EPROM memory 512x12)
IC44 - SRAM (SOJ28) 32kx8, CY7C199
CN1/2/3 - connectors joining to main board
Games known to use this PCB include....
Sticker EPROM FLASHROMs
Game on cart IC16# # of SOP56 Notes
-----------------------------------------------------------------------------------------------------
Puyo Puyo Fever (prototype ver 0.01) * not present 22 (64Mb) no cart, only development PCB
NRS Mask ROM board
837-13801 171-7978B (C) Sega 1999
|---------------------------------------------------------|
| ----CN2---- -|
| JP1 |
|IC18 IC20 IC22 IC24 IC26 IC28 OSC1 |
|ROM2 ROM4 ROM6 ROM8 ROM10 ROM12 |
| ---- IC11 |
| |IC1 | | male side
| IC29 IC31 IC33 IC35 IC37 | | |
| ROM13 ROM15 ROM17 ROM19 ROM21 ---- |
| IC14 IC15 |
| |
| ----CN3---- ----CN1---- |
|----------------------------------------------------------|
|---------------------------------------------------------|
|- ----CN2---- |
| |
| IC27S IC25S IC23S IC21S IC19S IC17S |
| ROM11 ROM9 ROM7 ROM5 ROM3 ROM1 |
| |
| | female side
| IC38S IC36S IC34S IC32S IC30S |
| IC13S ROM22 ROM20 ROM18 ROM16 ROM14 |
| |
| |
| ----CN1---- ----CN3---- |
|----------------------------------------------------------|
Notes:
OSC1 - oscillator 50.0000MHz
IC1 - FPGA ACTEL A54SX32A (QFP208) SEGA part number 317-xxxx-yyy
On the end of the number, -JPN means it requires Japanese BIOS, -COM will run with any BIOS
IC11 - EPROM (DIP42), either 27C160 or 27C322
JP1 - JUMPER Sets the size of the EPROM. 1-2 = 32M, 2-3 = 16M
IC13S - EEPROM (SOIC8) 25LC040 serial EEPROM
IC14 - 256 x 9 AsyncFIFO, 5.0V (SOP28)
IC15 - SRAM (SOJ28) 32kx8, IDT71256
IC17S-IC38S - MaskROM (SOP44), either 32Mb or 64Mb. Not all positions are populated
CN1/2/3 - connectors joining to main board
Despite the fact this ROM board have SPI-type EEPROM, containing cartridge serial number,
from NAOMI side it read as X76F100-type, probably simulated by ACTEL FPGA.
Actual data is shuffled, address bits 3 to 6 have reversed order, i.e. 8 7 3 4 5 6 2 1 0.
Games known to use this PCB include....
Sticker EPROM MASKROMs 25LC040 A54SX32
Game on cart IC11# # of SOP44 IC13S# IC1# Notes
-----------------------------------------------------------------------------------------------------------------------------------------------
Club Kart: European Session (2003, Rev A) 840-0139C 24173A 18 (64Mb) present 317-0382-COM
Club Kart Prize (Rev A) 840-0129C 24082A 16 (64Mb) present 317-0368-COM requires Naomi-based hopper controller (Naomi bd + 840-0130 cart + 837-14381 "G2 EXPANSION BD")
Club Kart Prize Version B 840-0137C 24149 16 (64Mb) present 317-0368-COM requires Naomi-based or 837-14438 hopper controller (selected by P1 BUTTON1 bit)
Giant Gram 2000 840-0039C 23377 20 (64Mb) present 317-0296-COM
Kick '4' Cash 840-0140C 24212 16 (64Mb) present 317-0397-COM requires 837-14438 "SH I/O BD" hopper controller
Marvel Vs. Capcom 2 New Age of Heroes (Export) (Rev A) 841-0007C-02 23085A 14 (64Mb)* present 317-5058-COM *(+2x 32Mb) have factory wire-mod connecting IC13S serial EEPROM CLK pin to IC11 ROM /OE pin
Marvel Vs. Capcom 2 New Age of Heroes (Korea) (Rev A) 841-0007C-03 23085A 14 (64Mb)* present 317-5058-COM *(+2x 32Mb) have factory wire-mod connecting IC13S serial EEPROM CLK pin to IC11 ROM /OE pin
MushiKing The King of Beetles 2K3 2ND 840-0150C 24217 6 (64Mb) present 317-0394-COM requires 610-0669 barcode reader, 838-14245-92 "MAPLE/232C CONVERT BD" (MIE-based), 838-14243 "RFID CHIP R/W BD" and RFID chip
Quiz Ah Megamisama 840-0030C 23227 16 (64Mb) present 317-0280-JPN
Shootout Pool 840-0098C 23844 4 (64Mb) present 317-0336-COM requires regular 837-13551 and 837-13938 rotary JVS boards
Shootout Pool Prize / Shootout Pool The Medal (Rev A) 840-0128C 24065A 4 (64Mb) present 317-0367-COM requires Naomi-based hopper controller
Shootout Pool Prize Ver. B / Shootout Pool The Medal Ver. B 840-0136C 24148 4 (64Mb) present 317-0367-COM requires Naomi-based or 837-14438 hopper controller (selected by P1 BUTTON1 bit)
SWP Hopper Board 840-0130C 24083 20 (64Mb) present 317-0339-COM reused VF4 Evo ROM board with all maskroms still in place; there is an additional 837-14381 IO board
Touch de UNO! 2 840-0022C 23071 6 (64Mb) present 317-0276-JPN requires 837-13844 JVS IO with DIPSW 5 On, ELO AccuTouch-compatible touch screen controller and special printer.
Virtua Fighter 4 Evolution 840-0106B 23934 20 (64Mb) present 317-0339-COM
Virtua Tennis 2 / Power Smash 2 (Rev A) 840-0084C 22327A 18 (64Mb) present 317-0320-COM
PFSB 128M Mask ROM board
837-14114-01 171-8132B (C) Sega 2000
|---------------------------------------------------------|
| IC11 IC10 IC9 ----CN2---- -|
| 21/22 19/20 17/18 IC44 IC45 |
| IC27 |
| |
|IC8 IC7 IC6 IC5 JP2 IC22 |
|15/16 13/14 11/12 9/10 | male side
| IC41 OSC1 |
|IC4 IC3 IC2 IC1 IC42 JP1 |
|7/8 5/6 3/4 1/2 |
| IC46 |
| ----CN3---- ----CN1---- |
|----------------------------------------------------------|
Notes:
The female side of the cart PCB only has traces
OSC1 - oscillator 28.000MHz
IC1-IC11 - MaskROM (TSOP48), 128Mb. Not all positions are populated
IC22 - EPROM (DIP42), either 27C160 or 27C322
JP1 - JUMPER Sets the size of the EPROM. 1-2 = 32M, 2-3 = 16M
IC27 - PLD Sega 315-6319A ALTERA EPM7032 (PLCC44)
IC41 - Sega 315-6213 Xilinx XC9536 (PLCC44)
IC42 - SEGA 315-5881 (QFP100). Probably some kind of FPGA or CPLD. Usually different per game
On the end of the number, -JPN means it requires Japanese BIOS, -COM will run with any BIOS
IC44-IC45 - SRAM (SOJ28) 32kx8, either IDT71256 or CY7C199
IC46 - FlashROM (SOIC8) Xicor X76F100 Secure SerialFlash
JP2 - JUMPER unknown function
CN1/2/3 - connectors joining to main board
Games known to use this PCB include....
Sticker EPROM MASKROMs EPM7032 XC9536 315-5881 X76F100
Game on cart IC22# # of SOP44 IC27# IC41# IC42# IC46# Notes
-----------------------------------------------------------------------------------------------------------------------------------------
Alien Front (Rev A) 840-0048C 23586A 5 (128Mb) 315-6319A 315-6213 317-0293-COM present
Alien Front (Rev T) 840-0048C 23586T 5 (128Mb) 315-6319A 315-6213 317-0293-COM ?
Capcom Vs. SNK Millennium Fight 2000 841-0011C 23511 7 (128Mb) 315-6219 315-6213 317-5059-COM present Date on screen: 000802
Capcom Vs. SNK Millennium Fight 2000 (Rev A) 841-0011C 23511A 7 (128Mb) 315-6219 315-6213 317-5059-COM ? Date on screen: 000804
Capcom Vs. SNK Millennium Fight 2000 (Rev C) 841-0011C 23511C 7 (128Mb) 315-6319 315-6213 317-5059-COM ? Date on screen: 000904
Club Kart: European Session 840-0062C 23704 11 (128Mb) 315-6319A 315-6213 317-0313-COM present
Club Kart: European Session (Rev C) 840-0062C * 11 (128Mb) 315-6319A 315-6213 317-0313-COM present * EPR have handwritten Japanese label possibly readable as 'teteto 74 lcl'
Club Kart: European Session (Rev D) 840-0062C 23704D 11 (128Mb) 315-6319A 315-6213 317-0313-COM present
Crackin' DJ 840-0043C 23450 10 (128Mb) 315-6319 315-6213 317-0288-COM ? requires regular 837-13551 and 837-13938 rotary JVS boards, and turntable simulation
Derby Owners Club II Ver.2.1 (Japan) (Rev B) 840-0083C 22306B 11 (128Mb) 315-6319A 315-6213 317-0327-JPN present
Derby Owners Club World Edition (Rev B) 840-0088C 22336B 7 (128Mb) 315-6319A 315-6213 not present present
Derby Owners Club World Edition (Rev C) 840-0088C 22336C 7 (128Mb) 315-6319A 315-6213 not present not present
Derby Owners Club World Edition EX (Rev D) 840-0088C 22336D 7 (128Mb) 315-6319A 315-6213 not present not present 2 MaskROM are different from Rev C
Giga Wing 2 841-0014C 22270 5 (128Mb) 315-6319A 315-6213 317-5064-COM ?
Mobile Suit Gundam: Federation Vs. Zeon 841-0017C 23638 10 (128Mb) 315-6319A 315-6213 317-5070-COM not present
Moero! Justice Gakuen / Project Justice (Rev A) 841-0015C 23548A 11 (128Mb) 315-6319A 315-6213 317-5065-COM present
MushiKing The King Of Beetles 2004 Second (Jpn) 840-0152C 24241 5 (128Mb) 315-6319A 315-6213 not present not present requires 610-0669 barcode reader
MushiKing The King Of Beetles 2005 First (Jpn) 840-0158C 24286 7 (128Mb) 315-6319A 315-6213 not present not present requires 610-0669 barcode reader
Oinori-daimyoujin Matsuri 840-0126B 24053 5 (128Mb) 315-6319A 315-6213 not present not present requires 837-14274 "G2 EXPANSION BD" (similar to hopper 837-14381 but with ARC NET chip)
Samba de Amigo Ver. 2000 840-0047C 23600 11 (128Mb) 315-6319A 315-6213 317-0295-COM ?
Star Horse (main screens) 840-0054C 23625 4 (128Mb) 315-6319 315-6213 not present present requires 837-13785 ARCNET&IO BD
Star Horse (satellite) 840-0056C 23627 6 (128Mb)* 315-6319 315-6213 not present present * +1 (64Mb), requires 837-13785 ARCNET&IO BD
Star Horse 2001 (satellite) (Rev B) 840-0078B 23739B 7 (128Mb) 315-6319 315-6213 not present present requires 837-13785 ARCNET&IO BD
Star Horse Progress (main screen, Rev B) 840-0120B 24087B 6 (128Mb) 315-6319A 315-6213 not present not present requires 837-13785 ARCNET&IO BD
Star Horse Progress (sound & backup, Rev A) 840-0121B 24097A 6 (128Mb) 315-6319A 315-6213 not present not present requires 837-13785 ARCNET&IO BD
Star Horse Progress (live, Rev A) 840-0122B 24107A 11 (128Mb) 315-6319A 315-6213 not present not present requires 837-13785 ARCNET&IO BD
Star Horse Progress (satellite, Rev A) 840-0123B 24122A 7 (128Mb) 315-6319A 315-6213 not present not present requires 837-13785 ARCNET&IO BD
The King of Route 66 (Rev A) 840-0087C 23819A 10 (128Mb) 315-6319A 315-6213 not present present
Virtua Fighter 4 840-0080C 23785 11 (128Mb) ? ? 317-0324-COM ?
Virtua Striker 3 840-0061C 23663 11 (128Mb) 315-6319A 315-6213 317-0310-COM ?
Virtua Striker 3 (Rev B) 840-0061C 23663B 11 (128Mb) 315-6319A 315-6213 317-0310-COM present
Wave Runner GP 840-0064C 24059 6 (128Mb) 315-6319A 315-6213 not present present
Wild Riders 840-0046C 23622 10 (128Mb) 315-6319A 315-6213 317-0301-COM ?
WWF Royal Rumble 840-0040C 22261 8 (128Mb) 315-6319 315-6213 317-0285-COM ?
Zero Gunner 2 841-0020C 23689 5 (128Mb) 315-6319A 315-6213 317-5073-COM present
NFS Flash ROM board
171-8346C (C) Sega 2005
|---------------------------------------------------------|
| IC12 IC8 ----CN2---- -|
| (IC22,1-7) IC7 |
| IC6 |
| IC13 IC9 IC4 |
| (IC8-15) |
| IC5 IC2 IC3 | male side
| IC14 IC10 JP1 IC16 |
| (IC16-21) JP2 |
| IC1 |
| IC15 IC11 |
| ----CN3---- ----CN1---- |
|----------------------------------------------------------|
Notes:
The female side of the cart PCB only has traces
IC1 - 74LVCH16245A (16bit transceiver with direction pin)
IC2 - XC3S50 Xilinx Spartan FPGA (TQFP144)
IC3 - PIC16C621A EPROM-Based 8-Bit CMOS Microcontroller (PDIP18) with internal memory
On the end of the number, -JPN means it requires Japanese BIOS, -COM will run with any BIOS
IC4 - XCF01SVG Xilinx Platform Flash In-System Programmable Configuration PROMS (TSSOP20)
IC5 - 74LVC08A (Quad 2-input AND gate)
IC6 - 74LVCH16245A (16bit transceiver with direction pin)
IC7 - socket for EPROM (DIP42), either 27C160 or 27C322
IC8-IC15 - S29GL512N FlashROM (TSOP56), 512Mb. Not all positions are populated
IC16 - R3112N431A Low voltage detector with output delay (SOT-23-5)
JP1 - JUMPER ROM board Bank: 1-2 = Master, 2-3 = Slave
JP2 - JUMPER IC7 EPROM: 1-2 = Enabled, 2-3 = Disabled
CN1/2/3 - connectors joining to main board
CN4 - 6 legs connector for ISP programming
Games known to use this PCB include....
Sticker EPROM FLASHROMs XC3S50 PIC16C621A XCF01S
Game on cart IC7# # of SOP56 IC2# IC3# IC4# Notes
-------------------------------------------------------------------------------------------------------------------------------------------
Akatsuki Blitzkampf Ausf. Achse 841-0058C not present 4 (512Mb) present 317-5130-JPN present IC2# is labeled "VER.2" - IC4# is marked "5A" - IC#10 & IC#11 are empty
Dynamite Deka EX / Asian Dynamite 840-0175C not present 4 (512Mb) present 317-0495-COM present IC2# is labeled "VER.2"
Dynamite Deka EX / Asian Dynamite (older) 840-0175C not present 4 (512Mb) present 317-0495-COM present 2x PCBs dumped, 840-0175B and 840-0168B, contents is the same.
Illvelo (Illmatic Envelope) 841-0059C not present 4 (512Mb) present 317-5131-JPN present IC2# is labeled "VER.2" - IC#11 is empty
Mamoru-kun wa Norowarete Shimatta 841-0060C not present 4 (512Mb) present 317-5132-JPN present IC2# is labeled "VER.2"
Manic Panic Ghost! (USA) 840-0170C-01 not present 5 (512Mb) present 317-0461-COM present requires 837-14672 sensor board (SH4 based) - PCB s/n is 840-0170B-01
Melty Blood Actress Again 841-0061C not present 6 (512Mb) present 317-5133-JPN present IC2# is labeled "REV.A" - IC4# is marked "5A"
Melty Blood Actress Again Version A (Rev A) 841-0061C 24455 6 (512Mb) present 317-5133-JPN present IC2# is labeled "REV.A" - IC4# is marked "5A"
Mushiking - The King Of Beetles II ENG (Ver. 1.001) 840-0164C not present 2 (512Mb) present 317-0437-COM present requires 610-0669 barcode reader, 838-14245-92 "MAPLE/232C CONVERT BD" (MIE-based), 838-14243 "RFID CHIP R/W BD" and RFID chip
Mushiking - The King Of Beetles II ENG (Ver. 2.001) 840-0164C 24357 2 (512Mb) present 317-0437-COM present IC4# is marked "18"
Mushiking - The King Of Beetles IV ENG 840-0180C not present 2 (512Mb) present 317-0437-COM present IC2# is labeled "VER.1", IC4# is marked "8A", requires 610-0669 barcode reader, 838-14245-92 "MAPLE/232C CONVERT BD" (MIE-based), 838-14243 "RFID CHIP R/W BD" and RFID chip
Pokasuka Ghost! 840-0170C not present 5 (512Mb) present 317-0461-COM present requires 837-14672 sensor board (SH4 based)
Radirgy Noa 841-0062C not present 4 (512Mb) present 317-5138-JPN present IC2# is labeled "VER.2" - IC4# is marked "8A"
Rhythm Tengoku 841-0177C not present 4 (512Mb) present 317-0503-JPN present IC2# is labeled "VER.2" - IC4# is marked "8A"
Star Horse Progress Returns (satellite) 840-0186C not present 2 (512Mb) present not present present IC2# is labeled "VER.2", requires 837-13785 ARCNET&IO BD
Shooting Love 2007 841-0057C not present 4 (512Mb) present 317-5129-JPN present IC2# is labeled "VER.2"
Touch De Zunou (Rev A) 840-0166C not present 2 (512Mb) present 317-0435-JPN present IC4# is marked "18", requires 837-14672 sensor board (SH4 based)
MASK B (C) Namco 2000
|-------------------------------------------------------------------------------------|
| ----CN2---- -|
| |
|7 LED1 |
| |
|6 MA23 MA22 MA21 MA20 MA19 MA18 MA17 MA16 MA15 MA14 MA13 MA12 |
| |
|5 ISSI |
| |
|4 MA11 MA10 MA9 MA8 MA7 MA6 MA5 MA4 MA3 MA2 MA1 ISSI | male side
| |
|3 OSC1 |
| |
|2 FLASH FLASH FLASH FLASH NAOD |
| FL3 FL2 FL1 FL0 EC1B |
|1 J J J X76F NAOD SEGA |
| P P P 100 EC2A 315-5881 |
| 3 2 1 |
| A B C D E F H J K L M N P R |
| ----CN3---- ----CN1---- |
|---------------------------------------------------------------------------------------|
Notes:
The female side of the cart PCB only has traces
JP1 - JUMPER silkscreened USE - NOT USE
JP2 - JUMPER silkscreened 64M - 128M
JP3 - JUMPER silkscreened BANK0 - BANK1
1F - FLASHROM (SOIC8) Xicor X76F100 Secure SerialFlash. Silkscreened X76F100
1H - NAODEC2A (QFP100) Altera MAX EPM7064S. Silkscreened NAODEC2A
1M - SEGA 315-5881 (QFP100). Probably some kind of FPGA or CPLD. Usually different per game
On the end of the number, -JPN means it requires Japanese BIOS, -COM will run with any BIOS
2B,2C,2D,2F - DA28F640J5 FlashROM (SSOP56), either 32Mb or 64Mb. Not all positions are populated.
Silkscreened VOYAGER64. Looks like the equivalent of IC11/22 on Sega carts
2K - NAODEC1B (QFP100) Altera MAX EPM7064S. Silkscreened NAODEC1A
3J - oscillator 28.000MHz
4B-4N,6B-6P - MASKROM (TSOP48), 128Mb. Not all positions are populated. Silkscreened MASK128MT
4P,5P - SRAM (SOJ28) 32kx8, ISSI IS61C256AH-15J
CN1/2/3 - connectors joining to main board
Games known to use this PCB include....
Cart Sticker FL0-FL3 FLASHROMs X76F100 EPM7064 EPM7064 315-5881 Known Game
Game Type on cart FLASHROM # of SOP48 IC @ 1F IC @ 1H IC @ 2K IC @ 1M code (1) Notes
-------------------------------------------------------------------------------------------------------------------------------------------------------------
/Gun Survivor 2 Biohazard
\Code: Veronica (Japan, Ver.E) F1X 25709801 1 (64Mb) 14 (128Mb) not present NAODEC2A NAODEC1B 317-5075-COM BHF1 uses Namco FCA JVS I/O (not dumped), will crash if COMM.BOARD not present
/Gun Survivor 2 Biohazard
\Code: Veronica (World, Ver.E) F1X 25709801 1 (64Mb) 14 (128Mb) not present NAODEC2A NAODEC1B 317-5075-COM BHF2
/Shin Nihon Prowrestling Toukon /FL0 & FL1 have pin55 raised from PCB.
\Retsuden 4 Arcade Edition (Japan, Ver.A) F2X 25349801 2 (64Mb) 15 (128Mb) not present NAODEC2A NAODEC1B 317-5040-COM TRF1 \They are connected together and go to pin89 on 2K.
World Kicks PCB (Japan, WKC1 Ver.A) F2 25509801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1B 317-5040-COM WKC1 uses Namco V226 JVS I/O (not dumped)
World Kicks PCB (World, WKC2 Ver.A) F2 25509801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1B 317-5040-COM WKC2
World Kicks (Japan, WK1 Ver.A) F2 25209801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1A 317-5040-COM WK1
World Kicks (World, WK2 Ver.A) F2 25209801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1A 317-5040-COM WK2
World Kicks (US, WK3 Ver.A) F2 25209801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1A 317-5040-COM WK3
(1) note: the number in the game code has the following meaning: 1 = Japan, 2 = Asia, 3 = US, 4 = World.
MASK C (C) Namco 2000
|-------------------------------------------------------------------------------------|
| ----CN2---- -|
| |
|7 LED1 LED2 |
| |
|6 MA21 MA20 MA19 MA18 MA17 MA16 MA15 MA14 MA13 MA12 MA11 |
| |
|5 I I |
| S S |
|4 MA10 MA9 MA8 MA7 MA6 MA5 MA4 MA3 MA2 MA1 S S | male side
| I I |
|3 JP1 |
| |
|2 FLASH FLASH FLASH FLASH OSC1 NAOD |
| FL3 FL2 FL1 FL0 EC3 |
|1 X76F SEGA |
| 100 315-5881 |
| |
| A B C D E F H J K L M N P R S |
| ----CN3---- ----CN1---- |
|---------------------------------------------------------------------------------------|
Notes:
The female side of the cart PCB only has traces
JP1 - JUMPER silkscreened VPEN
1F - FLASHROM (SOIC8) Xicor X76F100 Secure SerialFlash. Silkscreened X76F100
2H - oscillator 28.000MHz
2J - NAODEC3 (QFP100) Cypres CY37128. Silkscreened NAODEC3
1M - SEGA 315-5881 (QFP100). Probably some kind of FPGA or CPLD. Usually different per game
On the end of the number, -JPN means it requires Japanese BIOS, -COM will run with any BIOS
2B,2C,2D,2F - DA28F640J5 FlashROM (SSOP56), either 32Mb or 64Mb. Not all positions are populated.
Silkscreened VOYAGER64. Looks like the equivalent of IC11/22 on Sega carts
4B-4M,6B-6N - MASKROM (TSOP48), 128Mb. Not all positions are populated. Silkscreened MASK128MT
4N,4P - SRAM (SOJ28) 32kx8, ISSI IS61C256AH-15J
CN1/2/3 - connectors joining to main board
Games known to use this PCB include....
Cart Sticker FL0-FL3 FLASHROMs X76F100 CY37128 315-5881 Known Game
Game Type on cart FLASHROM # of SOP48 IC @ 1F IC @ 2J IC @ 1M code (1) Notes
----------------------------------------------------------------------------------------------------------------------------------------
Mazan: Flash of the Blade (World, Ver.A) F1X 25869812 1 (64Mb) 8 (128Mb) present NAODEC3 317-0266-COM MAZ2 uses 2x Namco FCB JVS I/O (not dumped)
Mazan: Flash of the Blade (US, Ver.A) F1X 25869812 1 (64Mb) 8 (128Mb) present NAODEC3 317-0266-COM MAZ3
Ninja Assault (Japan, Ver.A) F3 25469801 3 (64Mb) 9 (128Mb) present NAODEC3 317-5068-COM NJA1 uses Namco JYU JVS I/O
Ninja Assault (World, Ver.A) F3 25469801 3 (64Mb) 9 (128Mb) present NAODEC3 317-5068-COM NJA2
Ninja Assault (US, Ver.A) F3 25469801 3 (64Mb) 9 (128Mb) present NAODEC3 317-5068-COM NJA3
Ninja Assault (Asia, Ver.A) F3 25469801 3 (64Mb) 9 (128Mb) present NAODEC3 317-5068-COM NJA4
(1) note: the number in the game code has the following meaning: 1 = Japan, 2 = Asia, 3 = US, 4 = World.
Note! Generally, games that require a special I/O board or controller will not boot at all with a
standard NAOMI I/O board. Usually they display a message saying the I/O board is not acceptable
or not connected properly.
Sega I/O boards
---------------
These are used on NAOMI and all other Sega games from 1999 onwards.
Not all I/O boards are listed here. If you know of others, please let us know.
838-13683
838-13683-91 (sticker)
838-13683-92 (sticker)
838-13683-93 (sticker)
|-----------------------------|
| CN6 CN7 CN2 CN1 RELAY|
| IC4 IC7 IC5 CN5 |
| IC3 IC6 |
|CN3 IC1 IC2 IC9|
| OSC1 JP1 |
|CN4 |
| IC8 IC10 |
|--| JAMMA |----|
|---------------------|
Notes:
JVS to JAMMA I/O board. Has both digital and analog inputs
JVS test mode strings
---------------------
NAME SEGA ENTERPRISES,LTD.
I/O 838-13683B
Ver1.07
99/06
CMD VER 1.1
JVS VER 2.0
COM VER 1.0
SWITCH 2 PLAYER(S) 11 BITS
COIN 2 SLOT
ANALOG 8 CH
ROTARY 0 CH
KEYCODE 0
SCREEN X:0 Y:0 CH:0
CARD 0 SLOT
HOPPER OUT 0 CH
DRIVER OUT 8 SLOT
ANALOG OUT 0 CH
CHARACTER CHARA:0 LINE:0
BACKUP 0
CN1 - USB connector type A
CN2 - USB connector type B
CN3 - 14 pin connector used for switch input or lamp output via jumper setting
1-2 +5V
3 NC
4-6 1P SW6-SW8
7 NC
8-10 2P SW6-SW8
11-12 NC
13-14 GND
CN4 - 2 pin connector
CN5 - 15 pin VGA connector
CN6 - 6 pin connector used for 5 volt and 12 volt power input/output
1-2 +5V
3-4 +12V
5-6 GND
CN7 - 26 pin analog controls connector
1-2 +5V 15 Reserved
3 1P Analog Y 16 Reserved
4 2P Analog Y 21 Reserved
9 1P Analog X 22 Reserved
10 2P Analog X 23-24 GND
IC1 - Toshiba TMP90PH44 microcontroller with sticker 'SP5001-B' (SDIP64)
IC2 - location for TMP90PH44 QFP64 (not used)
IC3 - 74HC541 (SOIC20)
IC4 - BA6212 (DIP20)
IC5 - Analog Devices ADM485 (SOIC8)
IC6 - 5W393 (SOIC8)
IC7 - 74HC4052 (SOIC16)
IC8 - Toshiba TD62384 (SOIC16)
IC9 - A7666FS (SOIC16)
IC10 - 74F86 (SOIC14)
JP1 - Set in position A to use CN3 as input for switches. Set in position B to use as output (for lamps etc)
When in position A, in the JVS test mode, 'SWITCH' becomes '2 PLAYER(S) 15 BITS' and 'DRIVER OUT' becomes '0 SLOT'
RELAY - Omron G6S-2 relay
OSC1 - 14.74MHz
837-13551
837-13551-92 (sticker)
837-13551-93 (sticker)
|-----------------------------|
|CN4 CN5 CN6 CN7 CN8|
|LED ADM485 |
| RELAY IC1A * |
| |
| 14.745MHz|
| PS2801-4(x8) |
| LED|
|CN1 CN2 CN3 |
|-----------------------------|
Notes:
JVS I/O board. Has both digital and analogue inputs.
This is the most common type. Used on Sega driving games, NAOMI, Hikaru, Triforce, Chihiro etc
JVS test mode strings
---------------------
NAME SEGA ENTERPRISES,LTD.
I/O BD JVS
837-13551
Ver1.00
CMD VER 1.1
JVS VER 2.0
COM VER 1.0
SWITCH 2 PLAYER(S) 13 BITS
COIN 2 SLOT(S)
ANALOG 8 CH
ROTARY 0 CH
KEYCODE 0
SCREEN X:0 Y:0 CH:0
CARD 0 SLOT(S)
HOPPER OUT 0 CH
DRIVER OUT 6 CH
ANALOG OUT 0 CH
CHARACTER CHARA:0 LINE:0
BACKUP 0
IC1A - Toshiba TMP90PH44 microcontroller marked '315-6215' (SDIP64)
* - location under the PCB for TMP90PH44 QFP64 (not used)
RELAY - NEC EB2-4.5NU relay
ADM485 - Analog Devices ADM485
CN1 - 5 pin connector 12 volt power input
1-2 +12V
3 NC
4-5 GND
CN2 - 5 pin connector 12 volt power output
1-2 +12V
3 NC
4-5 GND
CN3 - 60 pin digital input connector
1-8 +5V 33 1P SW4
9-15 GND 34 2P SW4
16 NC 35 1P SW5
17 1P Start 36 2P SW5
18 2P Start 37 1P SW6
19 1P Right 38 2P SW6
20 2P Right 39 1P SW7
21 1P Left 40 2P SW7
22 2P Left 41 1P Service Credit
23 1P Up 42 2P Service Credit
24 2P Up 43 Test SW
25 1P Down 44 Tilt SW
26 2P Down 45 Coin SW1
27 1P SW1 46 Coin SW2
28 2P SW1 47-48 NC
29 1P SW2 49-50 Coin Meter 1 & 2
30 2P SW2 51-56 Output 1-6
31 1P SW3 57-60 +12V
32 2P SW3
Note: For coin input to work, the coin meters need to be connected to
pins 49 and 50, or tie +5 volts to pin 49 and 50 via a resistor.
CN4 - USB connector type B
CN5 - USB connector type A
CN6 - Analog I/O connector
1-2 VCC 15 AD 2
3 AD 0 16 AD 6
4 AD 4 17-18 NC
5 GND 19-20 VCC
6 GND 21 AD 3
7-8 NC 22 AD 7
9 AD 1 23 GND
10 AD 5 24 GND
11-14 NC 25-26 NC
CN7 - 4 pin connector 5V power input
1-2 +5v 3-4 GND
CN8 - 4 pin connector 5V power out
1-2 +5v 3-4 GND
837-13741
837-13844-02 (sticker)
837-14645
|-----------------------------|
| CN8 CN9 |
|DB9 CN1|
|RESET_SW |----| |
| |IC6 | OSC1 CN5|
| |----| |
|CN7 LED DSW1(5) CN2|
| OSC2 RELAY |
|CNx USB USB IC7 LED CN6|
|-----------------------------|
Notes: (most info taken from poor quality pics/scans, better info is needed)
JVS I/O board 2. Supports digital and analogue inputs, rotary input,
touch screens (ELO AccuTouch-compatible) and printer output using
extended JVS commands. This features can be enabled or disabled
by switching DIPSW 1-5.
This board is used with F355, Ghost Squad, and many
others including network/satellite games.
JVS test mode strings
---------------------
NAME SEGA ENTERPRISES,LTD.;837-13741
I/O CONTROL BD2;Ver0.15;99/06
CMD VER 1.1
JVS VER 2.0
COM VER 1.0
SWITCH 2 PLAYERS 12BITS
COIN 2 SLOTS
ANALOG 8CH
DRIVER OUT 22CH
IC6 - Sega 315-6146 custom IC (QFP176)
IC7 - 27C512 EPROM with label 'EPR-22082' (DIP28)
On plain 837-13844 (no -02) this is 'EPR-21868' (DIP28)
On later 837-14645 it is 'EPR-24354'
IC8 - Sharp LH52256 32k x8 SRAM (SOP28)
IC10 - NEC D71054GB programmable counter/timer (QFP44)
OSC1 - 14.7456MHz
OSC2 - 32MHz
CNx - 6 pin connector
CN1 - 5 pin connector 12 volt power input
1-2 +12V
3 NC
4-5 GND
CN2 - 4 pin connector 5V power input
1-2 +5v
3-4 GND
CN5 - 5 pin connector 12 volt power output
1-2 +12V
3 NC
4-5 GND
CN6 - 4 pin connector 5V power output
1-2 +5v
3-4 GND
CN7 - 26 pin connector (many pins unknown)
1 +5V 14
2 15 Analog Output
3 Analog Output 16
4 17 GND
5 GND 18
6 19 +5V
7 +5V 20
8 21 Analog Output
9 Analog Output 22
10 23 GND
11 GND 24
12 25
13 +5V 26
CN8 - 40 pin connector (many pins unknown)
3-5 +5V 21 Switch
7-9 GND 22 Switch
13-14 Coin SW1/2 23 Switch
15 Test SW 24 Switch
17 1P Start SW 25 2P Start SW
18 Service SW 31 Switch
19 Switch 32 Switch
20 Switch 33-40 RX1-RX8 (for communications)
CN9 - 34 pin connector (some pins unknown)
1-4 +5V
5-8 GND
9-10 Coin Meter 1 & 2
11 Lamp
12 Lamp
13 Lamp
14 Lamp
15 Lamp
16 Lamp
17 Lamp
18 Lamp
19 Lamp
20 Lamp
21 Coin LED
22-24 ?
25-32 TX1-TX8 (for communications)
33-34 12V
837-13938
171-7807A
|--------------------|
|CN2 CN1 IC9S|
| OSC1 |
| |-----| |
| | IC2 |OSC2 |
| CN3 | | |
| IC7S|-----| IC3|
|LED CN4 IC4 |
|--------------------|
Notes:
This is the I/O board used in Dynamic Golf, Out Trigger, Shootout Pool,
Shootout Pool Prize, Kick'4'Cash, Crackin' DJ 1&2
for the trackballs and other rotary type game controls.
It must be daisy-chained to the normal I/O board with a USB cable.
CN1 - 24 pin connector (not used on Dynamic Golf, other use unknown)
CN2 - 4 pin connector used for 5 volt power input
CN3 - USB connector type B
CN4 - 16 pin connector used for buttons and trackball
IC1 - HC240 logic IC (SOIC20)
IC2 - Sega 315-6146 custom IC (QFP176)
IC3 - 27C512 EPROM with label 'EPR-22084' (DIP28)
IC4 - HC4020 logic IC (SOIC16)
These parts on the other side of the PCB....
IC7S - Analog Devices ADM485 (SOIC8)
IC9S - Sharp LH52256 32k x8 SRAM (SOP28)
OSC1 - 14.7456MHz
OSC2 - 32MHz
Not shown above.... Sharp PC410 (x8, at PC9S to PC16S)
HC74 at IC8S
34164 (?) at IC10S (SOIC8)
Sega's I/O board has:
- spare output of 5V, 12V, and GND (from JAMMA power input via noise filter)
- analog input
- USB input (connect to NAOMI motherboard)
- USB output (not used)
- D-sub 15pin VGA-compatible connector (connect JVS video output, the signal is routed to JAMMA connector, signal is amplified to 3Vp-p and H/V sync signal is mixed (composite))
- external I/O connector (JST 12pin)
- switch to select function of external I/O connector (extra button input or 7-seg LED(x2) output of total wins for 'Versus City' cabinet)
- spare audio input (the signal goes to JAMMA speaker output)
- JAMMA connector
external I/O connector
old version
1 +5V
2 +5V
3 +5V
4 1P PUSH 4
5 1P PUSH 5
6 1P PUSH 6
7 1P PUSH 7
8 2P PUSH 4
9 2P PUSH 5
10 2P PUSH 6
11 2P PUSH 7
12 GND
13 GND
14 GND
(PUSH4 and 5 are common to JAMMA)
new version
1 +5V
2 +5V
3 +5V
4 1P PUSH 6
5 1P PUSH 7
6 1P PUSH 8
7 1P PUSH 9
8 2P PUSH 6
9 2P PUSH 7
10 2P PUSH 8
11 2P PUSH 9
12 GND
13 GND
14 GND
mahjong panel uses ext. I/O 4-8 (regardless of I/O board version)
key matrix is shown in below
+------------------------------------ ext. I/O 8
| +------------------------------ ext. I/O 7
| | +------------------------ ext. I/O 6
| | | +------------------ ext. I/O 5
| | | | +------------ ext. I/O 4
(LST)-( D )-( C )-( B )-( A )---------- JAMMA 17 (1p start)
| | | | |
| ( H )-( G )-( F )-( E )---------- JAMMA 18 (1p up)
| | | | |
| ( L )-( K )-( J )-( I )---------- JAMMA 19 (1p down)
| | | | |
(F/F)-(PON)-(CHI)-( N )-( M )---------- JAMMA 20 (1p left)
| | | |
+---(RON)-(RCH)-(KAN)---------- JAMMA 21 (1p right)
| | |
+---(BET)-(STR)---------- JAMMA 22 (1p push1)
* LST = Last chance, F/F = Flip flop, STR = Start
---------------------------------------------------------------------------------------------------------------------------------------------------
Guru's Readme
-------------
Sammy Atomiswave (codename SYSTEM X) system overview
(high likely) developed by SI Electroncs Ltd, former Sammy subsidiary
released April 2003
The Atomiswave System is basically just a Sega Dreamcast using ROM carts.
PCB Layout
----------
Sammy AM3AGA-04 Main PCB 2002 (top side)
1111-00006701 (bottom side)
|--------------------------------------------|
|- TA8210AH D4721 3V_BATT|
|VGA BS62LV1023TC|
|VOL |
|SER |-----| PCM1725U |
|- |ROMEO| D4516161 |
|CN3 | | BIOS.IC23|
|--|SW1 |-----| |
| |-----| |-----| |
| 33.8688MHz|315- | |ROMEO| |
| |-----| |6232 | | | |
| |315- | |-----| |-----| |
| |6258 | 32.768kHz |
|J |-----| |
|A |-------------| D4564323 |
|M | | |
|M | | |--------| |
|A D4516161 | 315-6267 | | | |
| | | | SH4 | |
| | | | | |
| TD62064 | | | | |
| D4516161 | | |--------| |
| |-------------| |
| D4564323 |
|--| D4516161 D4516161 |
| W129AG 13.5MHz|
|--------------------------------------------|
Notes:
------
BS62LV1023TC-70 - Brilliance Semiconductor Low Power 128k x8 CMOS SRAM (TSOP32)
TA8210AH - Toshiba 19W x 2 Channel Power Amplifier
D4516161AG5 - NEC uPD4516161AG5-A80 1M x16 (16MBit) SDRAM (SSOP50)
D4564323 - NEC uPD4564323G5-A10 512K x 32 x 4 (64MBit) SDRAM (SSOP86)
D4721 - NEC uPD4721 RS232 Line Driver Receiver IC (SSOP20)
PCM1725U - Burr-Brown PCM1725U 16Bit Digital to Analog Converter (SOIC14)
2100 - New Japan Radio Co. Ltd. NJM2100 Dual Op Amp (SOIC8)
ROMEO - Sammy AX0201A01 'ROMEO' 4111-00000501 0250 K13 rebadged Fujitsu MBCG61723P-102 TP2H50 - CG61P series CMOS Gate Array ASIC (TQFP100)
315-6232 - SEGA 315-6232 custom ASIC (QFP100)
315-6258 - SEGA 315-6258 custom ASIC (QFP56)
315-6267 - SEGA 315-6267 custom ASIC (BGAxxx)
TD62064 - Toshiba TD62064 NPN 50V 1.5A Quad Darlington Driver (SOIC16)
SH4 - Hitachi SH-4 HD6417091RA CPU (BGA256)
BIOS.IC23 - Macronix 29L001MC-10 3.3volt (1MBit) FlashROM (SOP44, byte mode, reverse pinout: use reverse adapter or "dead bug" method, pinout equivalent to reversed MX29LV160 with four high address lines unused)
W129AG - IC Works W129AG Programmable Clock Frequency Generator, clock input of 13.5MHz (SOIC16)
SW1 - 2-position Dip Switch
VGA - 15 pin VGA out connector @ 31.5kHz
SER - 9 pin Serial connector \
VOL - Volume pot / These are on a small daughterboard that plugs into the main PCB via a multi-wire cable.
CN3 - 10 pin Speaker output & Extension serial connector
3V_BATT - Panasonic ML2020 3 Volt Coin Battery
CN3 Pinout
Pin Function I/O Pin Function I/O
----------------------------------------------
1 Stereo L (+) Out | 2 TXD Out
3 Stereo L (-) Out | 4 RXD In
5 Stereo R (+) Out | 6 GND -
7 Stereo R (-) Out | 8 +5V Out
9 No Connection | 10 No Connection
The bottom of the PCB contains nothing significant except some connectors. One for the game cart, one for special controls
or I/O, one for a communication module, one for a cooling fan and one for the serial connection daughterboard.
Atomiswave cart PCB layout and game usage (revision 1.0 26/2/2011 5:59pm)
-----------------------------------------
Type 1 ROM Board:
AM3AGB-04
MROM PCB
2002
|----------------------------|
| XC9536 |
| IC18 IC17* IC10 |
| |
| |
| IC16* IC11 |
| |
| |
||-| IC15* IC12 |
|| | |
|| | |
|| |CN1 IC14* IC13 |
|| | |
||-| |
|----------------------------|
Notes:
* - Denotes those devices are on the other side of the PCB
CN1 - This connector plugs into the main board.
XC9536 - Xilinx XC9536 in-system programmable CPLD (PLCC44), stamped with a
game code. This code is different for each different game.
The last 3 digits seems to be for the usage.
F01 = CPLD/protection device and M01 = MASKROM
Game (sorted by code) Code
-----------------------------------------------
Sports Shooting USA AX0101F01
Dolphin Blue AX0401F01
Maximum Speed AX0501F01
Demolish Fist AX0601F01
Guilty Gear X Ver. 1.5 AX0801F01
Guilt Gear Isuka AX1201F01
Knights Of Valour Seven Spirits AX1301F01
Salaryman Kintaro AX1401F01
Ranger Mission AX1601F01
Faster Than Speed AX1701F01
Rumble Fish AX1801F01
Fist Of The North Star AX1901F01
Victory Furlong : Horse Racing AX2001F01
King Of Fighters NEOWAVE AX2201F01
Extreme Hunting AX2401F01
IC18 - Fujitsu 29DL640E 64M TSOP48 FlashROM. This ROM has no additional custom markings
The name in the archive has been devised purely for convenience.
This ROM holds the main program.
IC10 to IC17 - Custom-badged 128M TSOP48 mask ROMs.
IC10 - Not Populated for 7 ROMs or less (ROM 01 if 8 ROMs are populated)
IC11 - ROM 01 (or ROM 02 if 8 ROMs are populated)
IC12 - ROM 02 (or ROM 03 if 8 ROMs are populated)
IC13 - ROM 03 (or ROM 04 if 8 ROMs are populated)
IC14 - ROM 04 (or ROM 05 if 8 ROMs are populated)
IC15 - ROM 05 (or ROM 06 if 8 ROMs are populated)
IC16 - ROM 06 (or ROM 07 if 8 ROMs are populated)
IC17 - ROM 07 (or ROM 08 if 8 ROMs are populated)
ROM Codes
---------
Number
Game (sorted by code) Code of ROMs
-----------------------------------------------------------------------
Sports Shooting USA AX0101M01 to AX0104M01 4
Dolphin Blue AX0401M01 to AX0405M01 5
Maximum Speed AX0501M01 to AX0505M01 5
Demolish Fist AX0601M01 to AX0607M01 7
Guilty Gear X Ver. 1.5 AX0801M01 to AX0807M01 7
Guilty Gear Isuka AX1201M01 to AX1208M01 8
Knights Of Valour Seven Spirits AX1301M01 to AX1307M01 7
Salaryman Kintaro AX1401M01 to AX1407M01 7
Ranger Mission AX1601M01 to AX1605M01 5
Faster Than Speed AX1701M01 to AX1706M01 6
Rumble Fish AX1801M01 to AX1807M01 7
Fist Of The North Star AX1901M01 to AX1907M01 7
Victory Furlong : Horse Racing AX2001M01 to AX2007M01 7
King Of Fighters NEOWAVE AX2201M01 to AX2206M01 6
Extreme Hunting AX2401M01 to AX2406M01 6
Type 2 ROM Board:
AM3ALW-02
MROM2 PCB
2005
|----------------------------|
| FMEM1 |
| FMEM2* MROM12 |
| MROM11* |
| MROM9 |
| MROM10 MROM8*|
| XCR3128XL* MROM7* |
| |
||-| MROM6 |
|| | MROM3* MROM4 |
|| | MROM5*|
|| |CN1 MROM2 |
|| | MROM1* |
||-| |
|----------------------------|
Notes:
* - Denotes those devices are on the other side of the PCB
CN1 - This connector plugs into the main board.
XCR3128XL - Xilinx XCR3128XL in-system programmable 128 Macro-cell CPLD (TQFP100)
stamped with a game code. This code is different for each different game.
The last 3 digits seems to be for the usage.
F01 = CPLD/protection device and M01 = MASKROM
Game (sorted by code) Code
-----------------------------------------------
Samurai Spirits Tenkaichi Kenkakuden AX2901F01
Metal Slug 6 AX3001F01
The King Of Fighters XI AX3201F01
Neogeo Battle Coliseum AX3301F01
Rumble Fish 2 AX3401F01
FMEM1/FMEM2 - Fujitsu 29DL640E 64M TSOP48 FlashROM. This ROM has no additional custom markings
The name in the archive has been devised purely for convenience.
This ROM holds the main program.
This location is wired to accept TSOP56 ROMs, however the actual chip populated
is a TSOP48, using the middle pins. The other 2 pins on each side of the ROM
are not connected to anything.
MROM* - Custom-badged 256M SSOP70 mask ROMs
ROM Codes
---------
Number
Game (sorted by code) Code of ROMs
-----------------------------------------------------------------------
Samurai Spirits Tenkaichi Kenkakuden AX2901M01 to AX2907M01 7
Metal Slug 6 AX3001M01 to AX3004M01 4
The King Of Fighters XI AX3201M01 to AX3207M01 7
Neogeo Battle Coliseum AX3301M01 to AX3307M01 7
Rumble Fish 2 AX3401M01 to AX3405M01 5
Type 3 ROM Board:
This type is manufactured by Sega when Sammy merged with Sega.
171-8355A
PC BD A/W 128M FLASH
837-14608 (sticker for Extreme Hunting 2 Tournament Edition, Sega Bass Fishing Challenge, Sega Clay Challenge)
837-14695 (sticker for Dirty Pigskin Football)
|----------------------------|
| XC9536* U16 U2* |
| |
|J2 |
| |
| U4* U14 |
| |
| |
||-| |
|| | U17 U1* |
|| | |
|| |J1* |
|| | |
||-| U3* U15 |
|----------------------------|
Notes:
* - Denotes those parts are on the other side of the PCB
J1 - This connector plugs into the main board.
J2 - 6 pin connector for programming the XC9536 CPLD and/or the flash ROMs
XC9536 - Xilinx XC9536 in-system programmable CPLD (PLCC44), stamped with a
Sega 315-xxxx part number with a sticker over the top of it.
all known games on this type ROM BD have the same part# and decryption key.
Game Part# Sticker
---------------------------------------------------------
Extreme Hunting 2 Tournament Edition 315-6428P 315-6248
Dirty Pigskin Football 315-6248 -
Sega Bass Fishing Challenge 315-6248 -
Sega Bass Fishing Challenge Version A 315-6248 -
Sega Clay Challenge 315-6248 -
Animal Basket VM2001F01 -
Block Pong-Pong VM2001F01 -
WaiWai Drive VM2001F01 -
U* - Fujitsu MBM29PL12LM-10PCN 128M MirrorFlash TSOP56 flash ROM.
(configured as 16Mbytes x8bit or 8Mwords x16bit)
This ROM has no additional custom markings. The name in the archive has been devised
purely for convenience using the Sega 837- sticker number. The number of ROMs may vary
between games. So far all 8 positions have been seen populated. It's also possible all
positions are present when manufactured, each board is programmed to requirements and
depending on the total data length, some ROMs may be empty.
Development ROM board:
There are a few unreleased and many prototype game versions known to exist on this ROM board.
Currently Rumble Fish 1, Rumble Fish 2 prototypes and Sushi Bar are dumped.
PC BD SYSTEMX 3MODE FLASH Rev.B
1111-00001402
|--------------------------------------------|
| CN3 |
| |
||-| IC14 IC17 IC20 IC23 |
|| | XC9536 |
|| | |
|| | |
||CN1 IC12 IC15 IC18 IC21 IC24 IC26 |
|| | |
|| | |
|| | XC2S30 |
||-| IC13 IC16 IC19 IC22 IC25 IC27 |
| 17S30 |
| CN2 |
|--------------------------------------------|
Notes:
CN1 - This connector plugs into the main board through 'PC RELAY BD SX CRTG V1' adapter.
CN2 - 8 pin connector
CN3 - 6 pin connector for programming the XC9536 CPLD
XC9536 - Xilinx XC9536XL in-system programmable CPLD (PLCC44), stamped JULIE_DEV on RF2 proto
XC2S30 - Xilinx XC2S30 Spartan-II FPGA (TQFP144), Rumble Fish 2 have printed sticker A08
17S30 - Xilinx 17S30APC OTP Configuration PROM, stamped SXFLS
IC12-IC27 - Fujitsu MBM29DL640E 64M TSOP48 flash ROMs
Network Board
-------------
This board is required for Extreme Hunting 2 Tournament Edition (and possibly some other Sega-made Atomiswave carts)
although it doesn't need to be connected to a network or another Atomiswave unit to boot up. However it must be
plugged into the PCB in the communication slot or the game will not go in-game. It will boot but then displays
NETWORK BOARD ERROR if not present. Externally there's a hole for an RJ45 network cable and a slot for a
PIC16C621/PIC16C622 PIC enclosed in a black plastic housing. This is the same type as used in NAOMI etc. This
board probably acts like the NAOMI network DIMM board minus the on-board DIMM RAM storage.
837-14508R
171-8324C
(C) SEGA 2005
|-----------------------------------|
| RJ45 24LC0241* IC2 CN3 |
|LLLL K4S643232* IC14 |
| RTL8201 LLLL |
|25MHz |
| 6417710 IC4S* |
| XC3S200 |
|MAX3221 JP1 XCF01S* |
|CN5 33.333MHz JP2 CN2*|
|-----------------------------------|
Notes:
* - Denotes those parts are on the other side of the PCB
L - LED
RJ45 - RJ45 network connector
24LC0241 - EEPROM (SOIC8)
K4S643232- Samsung K4S643232 512k x 32bit x 4 banks synchronous DRAM (TSOPII-86)
RTL8201 - Realtek RTL8201 Single Port 10/100M Fast Ethernet IC (QFP48)
6417710 - Renesas HD6417710BPV SH3-DSP 32-Bit RISC Microcomputer SuperHTM RISC engine Family / SH7700 Series (BGA256)
XC3S200 - Xilinx Spartan XC3S200 FPGA (QFP100)
XCF01S - Xilinx XCF01S In-System Programmable 1Mbit PROM for Configuration of Xilinx FPGAs (TSSOP20)
MAX3221 - Maxim MAX3221 3.0V to 5.5V, 250kbps, RS-232 Transceivers with Auto Shutdown (TSSOP16)
JP1/2 - Jumpers, both set to 1-2
CN2 - This connector plugs into the main board
CN3 - 6 pin connector
CN5 - 3 position connector
IC2 - ST M29DW324DB 32M flash ROM (TSOP48)
IC4S - Spartan S29GL128N10TFIO1 128M flash ROM (TSOP56)
IC14 - socket for PIC16C621 mounted in a plastic plug-in case
PIC Usage:
Game Sega Part#
---------------------------------------------------
Extreme Hunting 2 Tournament Edition 317-0445-COM
AW-NET Network Board
--------------------
Sammy
AM3AJG-01
LAN PCB
2003
SAMLAN Rev: D
|-----------------------------------|
| RJ45 |
|PULSE |
| 25Mz |
| |
| RTL8139CL+* CN* |
| 315-6310* |
| |
| L46R |
|-----------------------------------|
Notes:
* - Denotes those parts are on the other side of the PCB
RJ45 - RJ45 network connector
PULSE - Pulse H0011 10/100 LAN Magnetics Module (SOIC16)
L46R - 93C46 compatible 128x8 EEPROM (SOIC8)
RTL8139CL+ - Realtek RTL8139CL+ 3.3 volt Single Chip Fast Ethernet Controller with Power Management (QFP120)
315-6310 - Sega 315-6310 Custom IC (QFP100)
CN - This connector plugs into the main board
Gun Sub Board
-------------
AM3AGT-02 GUN SUB PCB
|------------------|
|CN5 CN4 CN3 CN2|
| 74HC74 |
| |
| 74HC74 7CHC74 |
| 74HC74 |
| |
| CN1 |
|------------------|
Notes:
CN1 - 8 pin connector joining to I/O Expansion Module (which is plugged into main board)
CN2 - Gun connection for player 2 trigger and optical
CN3 - Gun connection for player 2 pump switch
CN4 - Gun connection for player 1 trigger and optical
CN5 - Gun connection for player 1 pump switch
Other games not dumped
----------------------
Miracle Stadium
Cancelled, prototypes known to exists
----------------------
Chase 1929
Force Five
Kenju
Premier Eleven
*/
#include "emu.h"
#include "includes/naomi.h"
#include "emupal.h"
#include "screen.h"
#include "speaker.h"
#define CPU_CLOCK (200000000)
READ16_MEMBER(naomi_state::naomi_g2bus_r )
{
// G2 bus is 16bit wide, "floating bus" value is 16 most significant address bits
u32 address = 0x01000000 + offset * 2;
return address >> 16;
}
/*
* Non-volatile memories
*/
READ64_MEMBER(naomi_state::eeprom_93c46a_r )
{
int res;
// bit 0 - EEPROM type: 0 - 93C46, 1 - X76F100 TODO
/* bit 3 is EEPROM data */
res = m_eeprom->do_read() << 4;
return res;
}
WRITE64_MEMBER(naomi_state::eeprom_93c46a_w )
{
/* bit 4 is data */
/* bit 2 is clock */
/* bit 5 is cs */
m_eeprom->di_write((data & 0x8) >> 3);
m_eeprom->cs_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE);
m_eeprom->clk_write((data & 0x4) ? ASSERT_LINE : CLEAR_LINE);
}
/* Dreamcast MAP
0 0x00000000 - 0x001FFFFF MPX System/Boot ROM
0 0x00200000 - 0x0021FFFF Flash Memory
0 0x00400000 - 0x005F67FF Unassigned
0 0x005F6800 - 0x005F69FF System Control Reg.
0 0x005F6C00 - 0x005F6CFF Maple i/f Control Reg.
0 0x005F7000 - 0x005F70FF GD-ROM
0 0x005F7400 - 0x005F74FF G1 i/f Control Reg.
0 0x005F7800 - 0x005F78FF G2 i/f Control Reg.
0 0x005F7C00 - 0x005F7CFF PVR i/f Control Reg.
0 0x005F8000 - 0x005F9FFF TA / PVR Core Reg.
0 0x00600000 - 0x006007FF MODEM
0 0x00600800 - 0x006FFFFF G2 (Reserved)
0 0x00700000 - 0x00707FFF AICA- Sound Cntr. Reg.
0 0x00710000 - 0x0071000B AICA- RTC Cntr. Reg.
0 0x00800000 - 0x00FFFFFF AICA- Wave Memory
0 0x01000000 - 0x01FFFFFF Ext. Device
0 0x02000000 - 0x03FFFFFF Image Area (Mirror Area)
1 0x04000000 - 0x04FFFFFF MPX Tex.Mem. 64bit Acc.
1 0x05000000 - 0x05FFFFFF Tex.Mem. 32bit Acc.
1 0x06000000 - 0x07FFFFFF Image Area*
2 0x08000000 - 0x0BFFFFFF Unassigned
3 0x0C000000 - 0x0CFFFFFF System Memory
3 0x0D000000 - 0x0DFFFFFF (Mirror on DC, Extra RAM on Naomi)
3 0x0E000000 - 0x0FFFFFFF Image Area (Mirror Area)
4 0x10000000 - 0x107FFFFF MPX TA FIFO Polygon Cnv.
4 0x10800000 - 0x10FFFFFF TA FIFO YUV Conv.
4 0x11000000 - 0x11FFFFFF Tex.Mem. 32/64bit Acc.
4 0x12000000 - 0x13FFFFFF Image Area (Mirror Area)
5 0x14000000 - 0x17FFFFFF MPX Ext.
6 0x18000000 - 0x1BFFFFFF Unassigned
7 0x1C000000 - 0x1FFFFFFF(SH4 Internal area)
*/
/*
* Common address map for Naomi 1, Naomi GD-Rom, Naomi 2, Atomiswave ...
*/
/*
* Naomi 1 address map
*/
void naomi_state::naomi_map(address_map &map)
{
/* Area 0 */
map(0x00000000, 0x001fffff).rom().region("maincpu", 0).share("rombase"); // BIOS
map(0x00200000, 0x00207fff).ram().share("sram");
map(0x005f6800, 0x005f69ff).mirror(0x02000000).rw(FUNC(naomi_state::dc_sysctrl_r), FUNC(naomi_state::dc_sysctrl_w));
map(0x005f6c00, 0x005f6cff).mirror(0x02000000).m(m_maple, FUNC(maple_dc_device::amap));
map(0x005f7000, 0x005f70ff).mirror(0x02000000).m(m_naomig1, FUNC(naomi_g1_device::submap)).umask64(0x0000ffff0000ffff);
map(0x005f7018, 0x005f702f).mirror(0x02000000).rw("comm_board", FUNC(m3comm_device::naomi_r), FUNC(m3comm_device::naomi_w)).umask64(0x0000ffff0000ffff);
map(0x005f7400, 0x005f74ff).mirror(0x02000000).m(m_naomig1, FUNC(naomi_g1_device::amap));
map(0x005f7800, 0x005f78ff).mirror(0x02000000).rw(FUNC(naomi_state::dc_g2_ctrl_r), FUNC(naomi_state::dc_g2_ctrl_w));
map(0x005f7c00, 0x005f7cff).mirror(0x02000000).m(m_powervr2, FUNC(powervr2_device::pd_dma_map));
map(0x005f8000, 0x005f9fff).mirror(0x02000000).m(m_powervr2, FUNC(powervr2_device::ta_map));
map(0x00600000, 0x006007ff).mirror(0x02000000).rw(FUNC(naomi_state::dc_modem_r), FUNC(naomi_state::dc_modem_w));
map(0x00700000, 0x00707fff).mirror(0x02000000).rw(FUNC(naomi_state::dc_aica_reg_r), FUNC(naomi_state::dc_aica_reg_w));
map(0x00710000, 0x0071000f).mirror(0x02000000).rw("aicartc", FUNC(aicartc_device::read), FUNC(aicartc_device::write)).umask64(0x0000ffff0000ffff);
map(0x00800000, 0x00ffffff).mirror(0x02000000).rw(FUNC(naomi_state::sh4_soundram_r), FUNC(naomi_state::sh4_soundram_w)); // sound RAM (8 MB)
/* External Device */
map(0x01000000, 0x01ffffff).mirror(0x02000000).r(FUNC(naomi_state::naomi_g2bus_r));
/* Area 1 */
map(0x04000000, 0x04ffffff).mirror(0x02000000).ram().share("dc_texture_ram"); // texture memory 64 bit access
map(0x05000000, 0x05ffffff).mirror(0x02000000).ram().share("frameram"); // apparently this actually accesses the same memory as the 64-bit texture memory access, but in a different format, keep it apart for now
/* Area 2*/
map(0x08000000, 0x09ffffff).mirror(0x02000000).noprw(); // 'Unassigned'
/* Area 3 */
map(0x0c000000, 0x0dffffff).mirror(0xa2000000).ram().share("dc_ram");
/* Area 4 */
map(0x10000000, 0x107fffff).mirror(0x02000000).w(m_powervr2, FUNC(powervr2_device::ta_fifo_poly_w));
map(0x10800000, 0x10ffffff).w(m_powervr2, FUNC(powervr2_device::ta_fifo_yuv_w));
map(0x11000000, 0x11ffffff).w(m_powervr2, FUNC(powervr2_device::ta_texture_directpath0_w)); // access to texture / framebuffer memory (either 32-bit or 64-bit area depending on SB_LMMODE0 register - cannot be written directly, only through dma / store queue)
/* 0x12000000 -0x13ffffff Mirror area of 0x10000000 -0x11ffffff */
map(0x13000000, 0x13ffffff).w(m_powervr2, FUNC(powervr2_device::ta_texture_directpath1_w)); // access to texture / framebuffer memory (either 32-bit or 64-bit area depending on SB_LMMODE1 register - cannot be written directly, only through dma / store queue)
/* Area 5 */
//AM_RANGE(0x14000000, 0x17ffffff) AM_NOP // MPX Ext.
/* Area 6 */
//AM_RANGE(0x18000000, 0x1bffffff) AM_NOP // Unassigned
/* Area 7 */
//AM_RANGE(0x1c000000, 0x1fffffff) AM_NOP // SH4 Internal
}
/*
* Naomi 2 address map
*/
// example hookup for accessing both PVRs, to be extended to everything else.
WRITE32_MEMBER(naomi2_state::both_pvr2_ta_w)
{
space.write_dword(0x005f8000|offset*4,data,mem_mask);
space.write_dword(0x025f8000|offset*4,data,mem_mask);
}
void naomi2_state::naomi2_map(address_map &map)
{
/* Area 0 */
map(0x00000000, 0x001fffff).rom().region("maincpu", 0).share("rombase"); // BIOS
map(0x00200000, 0x00207fff).ram().share("sram");
map(0x005f6800, 0x005f69ff).mirror(0x02000000).rw(FUNC(naomi2_state::dc_sysctrl_r), FUNC(naomi2_state::dc_sysctrl_w));
map(0x005f6c00, 0x005f6cff).mirror(0x02000000).m(m_maple, FUNC(maple_dc_device::amap));
map(0x005f7000, 0x005f70ff).mirror(0x02000000).m(m_naomig1, FUNC(naomi_g1_device::submap)).umask64(0x0000ffff0000ffff);
map(0x005f7400, 0x005f74ff).mirror(0x02000000).m(m_naomig1, FUNC(naomi_g1_device::amap));
map(0x005f7800, 0x005f78ff).mirror(0x02000000).rw(FUNC(naomi2_state::dc_g2_ctrl_r), FUNC(naomi2_state::dc_g2_ctrl_w));
map(0x005f7c00, 0x005f7cff).m(m_powervr2, FUNC(powervr2_device::pd_dma_map));
map(0x005f8000, 0x005f9fff).m(m_powervr2, FUNC(powervr2_device::ta_map));
map(0x00600000, 0x006007ff).mirror(0x02000000).rw(FUNC(naomi2_state::dc_modem_r), FUNC(naomi2_state::dc_modem_w));
map(0x00700000, 0x00707fff).mirror(0x02000000).rw(FUNC(naomi2_state::dc_aica_reg_r), FUNC(naomi2_state::dc_aica_reg_w));
map(0x00710000, 0x0071000f).mirror(0x02000000).rw("aicartc", FUNC(aicartc_device::read), FUNC(aicartc_device::write)).umask64(0x0000ffff0000ffff);
map(0x00800000, 0x00ffffff).mirror(0x02000000).rw(FUNC(naomi2_state::sh4_soundram_r), FUNC(naomi2_state::sh4_soundram_w)); // sound RAM (8 MB)
/* External Device */
map(0x01000000, 0x01ffffff).mirror(0x02000000).r(FUNC(naomi2_state::naomi_g2bus_r));
map(0x025f7c00, 0x025f7cff).m(m_powervr2_slave, FUNC(powervr2_device::pd_dma_map));
map(0x025f8000, 0x025f9fff).m(m_powervr2_slave, FUNC(powervr2_device::ta_map));
// AM_RANGE(0x025f6800, 0x025f69ff) AM_READWRITE(dc_sysctrl_r, dc_sysctrl_w ) // second PVR DMA!
// AM_RANGE(0x025f7c00, 0x025f7cff) AM_DEVREADWRITE32("powervr2", powervr2_device, pvr_ctrl_r, pvr_ctrl_w, 0xffffffffffffffffU)
// AM_RANGE(0x005f8000, 0x005f9fff) AM_MIRROR(0x02000000) AM_DEVICE32("powervr2", powervr2_device, ta_map, 0xffffffffffffffffU)
/* Area 1 */
map(0x04000000, 0x04ffffff).ram().share("dc_texture_ram"); // texture memory 64 bit access
map(0x05000000, 0x05ffffff).ram().share("frameram"); // apparently this actually accesses the same memory as the 64-bit texture memory access, but in a different format, keep it apart for now
map(0x06000000, 0x06ffffff).ram().share("textureram2"); // 64 bit access 2nd PVR RAM
map(0x07000000, 0x07ffffff).ram().share("frameram2");// 32 bit access 2nd PVR RAM
/* Area 2*/
map(0x085f6800, 0x085f69ff).w(FUNC(naomi2_state::dc_sysctrl_w)); // TODO: writes to BOTH PVRs
map(0x085f8000, 0x085f9fff).w(FUNC(naomi2_state::both_pvr2_ta_w));
map(0x08800000, 0x088000ff).rw(m_powervr2, FUNC(powervr2_device::elan_regs_r), FUNC(powervr2_device::elan_regs_w)); // T&L chip registers
// AM_RANGE(0x09000000, 0x09??????) T&L command processing
map(0x0a000000, 0x0bffffff).ram().share("elan_ram"); // T&L chip RAM
/* Area 3 */
map(0x0c000000, 0x0dffffff).mirror(0xa2000000).ram().share("dc_ram");
/* Area 4 */
map(0x10000000, 0x107fffff).w(m_powervr2, FUNC(powervr2_device::ta_fifo_poly_w));
map(0x10800000, 0x10ffffff).w(m_powervr2, FUNC(powervr2_device::ta_fifo_yuv_w));
map(0x11000000, 0x11ffffff).w(m_powervr2, FUNC(powervr2_device::ta_texture_directpath0_w)); // access to texture / framebuffer memory (either 32-bit or 64-bit area depending on SB_LMMODE0 register - cannot be written directly, only through dma / store queue)
/* 0x12000000 -0x13ffffff Mirror area of 0x10000000 -0x11ffffff */
map(0x13000000, 0x13ffffff).w(m_powervr2, FUNC(powervr2_device::ta_texture_directpath1_w)); // access to texture / framebuffer memory (either 32-bit or 64-bit area depending on SB_LMMODE1 register - cannot be written directly, only through dma / store queue)
/* Area 5 */
//AM_RANGE(0x14000000, 0x17ffffff) AM_NOP // MPX Ext.
/* Area 6 */
//AM_RANGE(0x18000000, 0x1bffffff) AM_NOP // Unassigned
/* Area 7 */
//AM_RANGE(0x1c000000, 0x1fffffff) AM_NOP // SH4 Internal
}
void naomi_state::naomi_port(address_map &map)
{
map(0x00, 0x0f).rw(FUNC(naomi_state::eeprom_93c46a_r), FUNC(naomi_state::eeprom_93c46a_w));
}
/*
* Atomiswave address map, almost identical to Dreamcast
*/
READ64_MEMBER(atomiswave_state::aw_flash_r)
{
return (uint64_t)m_awflash->read(space, offset*8) | (uint64_t)m_awflash->read(space, (offset*8)+1)<<8 | (uint64_t)m_awflash->read(space, (offset*8)+2)<<16 | (uint64_t)m_awflash->read(space, (offset*8)+3)<<24 |
(uint64_t)m_awflash->read(space, (offset*8)+4)<<32 | (uint64_t)m_awflash->read(space, (offset*8)+5)<<40 | (uint64_t)m_awflash->read(space, (offset*8)+6)<<48 | (uint64_t)m_awflash->read(space, (offset*8)+7)<<56;
}
WRITE64_MEMBER(atomiswave_state::aw_flash_w)
{
int i;
uint32_t addr = offset * 8;
for (i = 0; i < 8; i++)
{
if (mem_mask & ((uint64_t)0xff)<< (i*8))
{
addr += i;
break;
}
}
data >>= (i*8);
m_awflash->write(space, addr, data);
}
// TODO: don't we have a common function for this?
inline int atomiswave_state::decode_reg32_64(uint32_t offset, uint64_t mem_mask, uint64_t *shift)
{
int reg = offset * 2;
*shift = 0;
// non 32-bit accesses have not yet been seen here, we need to know when they are
if ((mem_mask != 0xffffffff00000000U) && (mem_mask != 0x00000000ffffffffU))
{
osd_printf_verbose("%s:Wrong mask!\n", machine().describe_context().c_str());
//machine().debug_break();
}
if (mem_mask == 0xffffffff00000000U)
{
reg++;
*shift = 32;
}
return reg;
}
READ64_MEMBER(atomiswave_state::aw_modem_r )
{
int reg;
uint64_t shift;
reg = decode_reg32_64(offset, mem_mask, &shift);
if (reg == 0x280/4)
{
/*
0x00600280 r 0000dcba
a/b - 1P/2P coin inputs (JAMMA), active low
c/d - 3P/4P coin inputs (EX. IO board), active low
(ab == 0) -> BIOS skip RAM test
*/
return 0xffffffff00000000U | (ioport("COINS")->read() & 0x0F);
} else
if (reg == 0x284/4)
return 0xffffffff00000000U | aw_ctrl_type;
osd_printf_verbose("MODEM: Unmapped read %08x\n", 0x600000+reg*4);
return 0;
}
WRITE64_MEMBER(atomiswave_state::aw_modem_w )
{
int reg;
uint64_t shift;
uint32_t dat;
reg = decode_reg32_64(offset, mem_mask, &shift);
dat = (uint32_t)(data >> shift);
if (reg == 0x284/4)
{
aw_ctrl_type = dat & 0xF0;
}
/*
0x00600284 rw ddcc0000
cc/dd - set type of Maple devices at ports 2/3 (EX. IO board)
0 - regular Atomiswave controller
1 - DC lightgun
2,3 - DC mouse/trackball
TODO: hook this then MAME have such devices emulated
0x00600288 rw 0000dcba
a - 1P coin counter
b - 2P coin counter
c - 1P coin lockout
d - 2P coin lockout
0x0060028C rw POUT CN304 (EX. IO board)
*/
osd_printf_verbose("%s",string_format("MODEM: [%08x=%x] write %x to %x, mask %x\n", 0x600000+reg*4, dat, data, offset, mem_mask).c_str());
}
void atomiswave_state::aw_map(address_map &map)
{
/* Area 0 */
map(0x00000000, 0x0001ffff).rw(FUNC(atomiswave_state::aw_flash_r), FUNC(atomiswave_state::aw_flash_w)).region("awflash", 0);
map(0xa0000000, 0xa001ffff).rw(FUNC(atomiswave_state::aw_flash_r), FUNC(atomiswave_state::aw_flash_w)).region("awflash", 0);
map(0x00200000, 0x0021ffff).ram().share("sram"); // battery backed up RAM
map(0x005f6800, 0x005f69ff).rw(FUNC(atomiswave_state::dc_sysctrl_r), FUNC(atomiswave_state::dc_sysctrl_w));
map(0x005f6c00, 0x005f6cff).mirror(0x02000000).m(m_maple, FUNC(maple_dc_device::amap));
map(0x005f7000, 0x005f70ff).mirror(0x02000000).m(m_naomig1, FUNC(naomi_g1_device::submap)).umask64(0x0000ffff0000ffff);
map(0x005f7400, 0x005f74ff).mirror(0x02000000).m(m_naomig1, FUNC(naomi_g1_device::amap));
map(0x005f7800, 0x005f78ff).rw(FUNC(atomiswave_state::dc_g2_ctrl_r), FUNC(atomiswave_state::dc_g2_ctrl_w));
map(0x005f7c00, 0x005f7cff).mirror(0x02000000).m(m_powervr2, FUNC(powervr2_device::pd_dma_map));
map(0x005f8000, 0x005f9fff).mirror(0x02000000).m(m_powervr2, FUNC(powervr2_device::ta_map));
map(0x00600000, 0x006007ff).rw(FUNC(atomiswave_state::aw_modem_r), FUNC(atomiswave_state::aw_modem_w));
map(0x00700000, 0x00707fff).rw(FUNC(atomiswave_state::dc_aica_reg_r), FUNC(atomiswave_state::dc_aica_reg_w));
map(0x00710000, 0x0071000f).mirror(0x02000000).rw("aicartc", FUNC(aicartc_device::read), FUNC(aicartc_device::write)).umask64(0x0000ffff0000ffff);
map(0x00800000, 0x00ffffff).rw(FUNC(atomiswave_state::sh4_soundram_r), FUNC(atomiswave_state::sh4_soundram_w)); // sound RAM (8 MB)
/* Area 1 - half the texture memory, like dreamcast, not naomi */
map(0x04000000, 0x047fffff).ram().mirror(0x00800000).share("dc_texture_ram"); // texture memory 64 bit access
map(0x05000000, 0x057fffff).ram().mirror(0x00800000).share("frameram"); // apparently this actually accesses the same memory as the 64-bit texture memory access, but in a different format, keep it apart for now
/* Area 2*/
map(0x08000000, 0x0bffffff).noprw(); // 'Unassigned'
/* Area 3 */
map(0x0c000000, 0x0cffffff).ram().share("dc_ram");
map(0x0d000000, 0x0dffffff).ram().share("dc_ram"); // extra ram on Naomi (mirror on DC)
map(0x0e000000, 0x0effffff).ram().share("dc_ram"); // mirror
map(0x0f000000, 0x0fffffff).ram().share("dc_ram"); // mirror
map(0x8c000000, 0x8cffffff).ram().share("dc_ram"); // RAM access through cache
map(0x8d000000, 0x8dffffff).ram().share("dc_ram"); // RAM access through cache
/* Area 4 - half the texture memory, like dreamcast, not naomi */
map(0x10000000, 0x107fffff).mirror(0x02000000).w(m_powervr2, FUNC(powervr2_device::ta_fifo_poly_w));
map(0x10800000, 0x10ffffff).w(m_powervr2, FUNC(powervr2_device::ta_fifo_yuv_w));
map(0x11000000, 0x117fffff).w(m_powervr2, FUNC(powervr2_device::ta_texture_directpath0_w)).mirror(0x00800000); // access to texture / framebuffer memory (either 32-bit or 64-bit area depending on SB_LMMODE0 register - cannot be written directly, only through dma / store queue
/* 0x12000000 -0x13ffffff Mirror area of 0x10000000 -0x11ffffff */
map(0x13000000, 0x137fffff).w(m_powervr2, FUNC(powervr2_device::ta_texture_directpath1_w)).mirror(0x00800000); // access to texture / framebuffer memory (either 32-bit or 64-bit area depending on SB_LMMODE1 register - cannot be written directly, only through dma / store queue
/* Area 5 */
//AM_RANGE(0x14000000, 0x17ffffff) AM_NOP // MPX Ext.
/* Area 6 */
//AM_RANGE(0x18000000, 0x1bffffff) AM_NOP // Unassigned
/* Area 7 */
//AM_RANGE(0x1c000000, 0x1fffffff) AM_NOP // SH4 Internal
}
void atomiswave_state::aw_port(address_map &map)
{
// ???
}
void dc_state::dc_audio_map(address_map &map)
{
map.unmap_value_high();
map(0x00000000, 0x007fffff).ram().share("dc_sound_ram"); /* shared with SH-4 */
map(0x00800000, 0x00807fff).rw(FUNC(dc_state::dc_arm_aica_r), FUNC(dc_state::dc_arm_aica_w));
}
/*
* Input ports
*/
INPUT_PORTS_START( naomi_debug )
PORT_START("MAMEDEBUG")
PORT_CONFNAME( 0x01, 0x00, "Bilinear Filtering" )
PORT_CONFSETTING( 0x00, DEF_STR( No ) )
PORT_CONFSETTING( 0x01, DEF_STR( Yes ) )
PORT_CONFNAME( 0x02, 0x00, "Disable Render Calls" )
PORT_CONFSETTING( 0x00, DEF_STR( No ) )
PORT_CONFSETTING( 0x02, DEF_STR( Yes ) )
INPUT_PORTS_END
static INPUT_PORTS_START( naomi_mie )
PORT_START("MIE.3")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("mie_eeprom", eeprom_serial_93cxx_device, di_write)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("mie_eeprom", eeprom_serial_93cxx_device, cs_write)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("mie_eeprom", eeprom_serial_93cxx_device, clk_write)
PORT_START("MIE.5")
PORT_DIPNAME( 0x01, 0x00, "Monitor" ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x01, "31 kHz" )
PORT_DIPSETTING( 0x00, "15 kHz" )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3")
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_SERVICE_NO_TOGGLE( 0x10, IP_ACTIVE_LOW )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("mie_eeprom", eeprom_serial_93cxx_device, do_read)
INPUT_PORTS_END
/* 2 players with 1 joystick and 6 buttons each */
static INPUT_PORTS_START( naomi )
PORT_INCLUDE( naomi_mie )
PORT_INCLUDE( naomi_debug )
PORT_START("TILT")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_TILT )
PORT_BIT( 0x7f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P1")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY
PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY
PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY
PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON2 )
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON3 )
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON4 )
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON5 )
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON6 )
PORT_BIT( 0x400f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P2")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_PLAYER(2)
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_PLAYER(2)
PORT_BIT( 0x400f, IP_ACTIVE_HIGH, IPT_UNUSED )
/* Dummy so we can easily get the analog ch # */
PORT_START("A0")
PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("A1")
PORT_BIT( 0x01ff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("A2")
PORT_BIT( 0x02ff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("A3")
PORT_BIT( 0x03ff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("A4")
PORT_BIT( 0x04ff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("A5")
PORT_BIT( 0x05ff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("A6")
PORT_BIT( 0x06ff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("A7")
PORT_BIT( 0x07ff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( marstv )
PORT_INCLUDE( naomi )
PORT_MODIFY("P1")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START1 ) PORT_PLAYER(1) PORT_NAME("P1 Start")
PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME(u8"P1 Red Large Button \u5927")
PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME(u8"P1 Yellow Medium Button \u4E2D")
PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME(u8"P1 Blue Small Button \u5C0F")
PORT_BIT( 0x53ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_MODIFY("P2")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START2 ) PORT_PLAYER(2) PORT_NAME("P2 Start")
PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME(u8"P2 Red Large Button \u5927")
PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME(u8"P2 Yellow Medium Button \u4E2D")
PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME(u8"P2 Blue Small Button \u5C0F")
PORT_BIT( 0x53ff, IP_ACTIVE_HIGH, IPT_UNUSED )
// TODO: Player 3
INPUT_PORTS_END
static INPUT_PORTS_START( hotd2 )
PORT_INCLUDE( naomi_mie )
PORT_INCLUDE( naomi_debug )
PORT_START("TILT")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_TILT )
PORT_BIT( 0x7f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P1")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Trigger") PORT_PLAYER(1)
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Screen-In") PORT_PLAYER(1) //reload
PORT_BIT( 0x7cff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P2")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P2 Trigger") PORT_PLAYER(2)
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P2 Screen-In") PORT_PLAYER(2) //reload
PORT_BIT( 0x7cff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A0")
PORT_BIT( 0xff00, 0x8000, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) PORT_PLAYER(1)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A1")
PORT_BIT( 0xff00, 0x8000, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) PORT_PLAYER(1)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A2")
PORT_BIT( 0xff00, 0x8000, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) PORT_PLAYER(2)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A3")
PORT_BIT( 0xff00, 0x8000, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) PORT_PLAYER(2)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( crzytaxi )
PORT_INCLUDE( naomi_mie )
PORT_INCLUDE( naomi_debug )
PORT_START("TILT")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_TILT )
PORT_BIT( 0x7f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P1")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Drive Gear")
PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Reverse Gear")
PORT_BIT( 0x4fff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P2")
PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A0")
PORT_BIT( 0xff00, 0x8000, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(30)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A1")
PORT_BIT( 0xff00, 0x0000, IPT_PEDAL ) PORT_MINMAX(0x00,0xff00) PORT_SENSITIVITY(100) PORT_KEYDELTA(40)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A2")
PORT_BIT( 0xff00, 0x0000, IPT_PEDAL2 ) PORT_MINMAX(0x00,0xff00) PORT_SENSITIVITY(100) PORT_KEYDELTA(40)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( dybbnao )
PORT_INCLUDE( naomi_mie )
PORT_INCLUDE( naomi_debug )
PORT_START("TILT")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_TILT )
PORT_BIT( 0x7f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P1")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON2 )
PORT_BIT( 0x7cff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P2")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x7cff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A0")
PORT_BIT( 0xff00, 0x8000, IPT_AD_STICK_Y ) PORT_MINMAX(0x00, 0xff00) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_REVERSE PORT_PLAYER(1)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A1")
PORT_BIT( 0xff00, 0x8000, IPT_AD_STICK_X ) PORT_MINMAX(0x00, 0xff00) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_REVERSE PORT_PLAYER(1)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A2")
PORT_BIT( 0xff00, 0x0000, IPT_PEDAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_REVERSE PORT_PLAYER(1)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A4")
PORT_BIT( 0xff00, 0x8000, IPT_AD_STICK_Y ) PORT_MINMAX(0x00, 0xff00) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_REVERSE PORT_PLAYER(2)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A5")
PORT_BIT( 0xff00, 0x8000, IPT_AD_STICK_X ) PORT_MINMAX(0x00, 0xff00) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_REVERSE PORT_PLAYER(2)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A6")
PORT_BIT( 0xff00, 0x0000, IPT_PEDAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_REVERSE PORT_PLAYER(2)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( zombrvn )
PORT_INCLUDE( naomi_mie )
PORT_INCLUDE( naomi_debug )
PORT_START("TILT")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_TILT )
PORT_BIT( 0x7f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P1")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON2 )
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON3 )
PORT_BIT( 0x7c7f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P2")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x7c7f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A0")
PORT_BIT( 0xff00, 0x8000, IPT_AD_STICK_Y ) PORT_MINMAX(0x00, 0xff00) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_REVERSE PORT_PLAYER(1)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A1")
PORT_BIT( 0xff00, 0x8000, IPT_AD_STICK_X ) PORT_MINMAX(0x00, 0xff00) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_REVERSE PORT_PLAYER(1)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A4")
PORT_BIT( 0xff00, 0x8000, IPT_AD_STICK_Y ) PORT_MINMAX(0x00, 0xff00) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_REVERSE PORT_PLAYER(2)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A5")
PORT_BIT( 0xff00, 0x8000, IPT_AD_STICK_X ) PORT_MINMAX(0x00, 0xff00) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_REVERSE PORT_PLAYER(2)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( jambo )
PORT_INCLUDE( naomi_mie )
PORT_INCLUDE( naomi_debug )
PORT_START("TILT")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_TILT )
PORT_BIT( 0x7f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P1")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x7fff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P2")
PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Shift Down")
PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Shift Up")
PORT_BIT( 0xcfff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A0")
PORT_BIT( 0xff00, 0x8000, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(30)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A1")
PORT_BIT( 0xff00, 0x0000, IPT_PEDAL ) PORT_MINMAX(0x00,0xff00) PORT_SENSITIVITY(100) PORT_KEYDELTA(40)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A2")
PORT_BIT( 0xff00, 0x0000, IPT_PEDAL2 ) PORT_MINMAX(0x00,0xff00) PORT_SENSITIVITY(100) PORT_KEYDELTA(40)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( 18wheelr )
PORT_INCLUDE( naomi_mie )
PORT_INCLUDE( naomi_debug )
PORT_START("TILT")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_TILT )
PORT_BIT( 0x7f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P1")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("View")
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Horn")
PORT_BIT( 0x6dff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P2")
// TODO: this is a tri-state shift lever, arrangement can be better.
PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Shift H")
PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Shift L")
PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Shift R")
PORT_BIT( 0xc7ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A0")
PORT_BIT( 0xff00, 0x8000, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(30)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A1")
PORT_BIT( 0xff00, 0x0000, IPT_PEDAL ) PORT_MINMAX(0x00,0xff00) PORT_SENSITIVITY(100) PORT_KEYDELTA(40)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A2")
PORT_BIT( 0xff00, 0x0000, IPT_PEDAL2 ) PORT_MINMAX(0x00,0xff00) PORT_SENSITIVITY(100) PORT_KEYDELTA(40)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( alpilota )
PORT_INCLUDE( naomi_mie )
PORT_INCLUDE( naomi_debug )
PORT_START("TILT")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_TILT )
PORT_BIT( 0x7f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P1")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Landing Gear Switch") PORT_TOGGLE
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("View Change")
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Flap Switch") PORT_TOGGLE
PORT_BIT( 0x7c7f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P2")
PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A0")
PORT_BIT( 0xff00, 0x8000, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(30) PORT_NAME("Elevator Wheel")
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A1")
PORT_BIT( 0xff00, 0x8000, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(30) PORT_NAME("Aileron Wheel") PORT_PLAYER(2)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A3")
PORT_BIT( 0xff00, 0x0000, IPT_PEDAL ) PORT_MINMAX(0x00,0xff00) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_NAME("Rudder Pedal")
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A4")
PORT_BIT( 0xff00, 0x8000, IPT_AD_STICK_Y ) PORT_MINMAX(0x00, 0xff00) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_NAME("Thrust Lever L")
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A5")
PORT_BIT( 0xff00, 0x8000, IPT_AD_STICK_Y ) PORT_MINMAX(0x00, 0xff00) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_NAME("Thrust Lever R") PORT_PLAYER(2)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( sstrkfgt )
PORT_INCLUDE( naomi_mie )
PORT_INCLUDE( naomi_debug )
PORT_START("TILT")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_TILT )
PORT_BIT( 0x7f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P1")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Gun Trigger")
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Missile Button")
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Air Break")
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("View Change")
PORT_BIT( 0x7c3f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P2")
PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A0")
PORT_BIT( 0xff00, 0x8000, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(30) PORT_NAME("Elevator Wheel")
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A1")
PORT_BIT( 0xff00, 0x8000, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(30) PORT_NAME("Aileron Wheel") PORT_PLAYER(2)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A2")
PORT_BIT( 0xff00, 0x8000, IPT_AD_STICK_Y ) PORT_MINMAX(0x00, 0xff00) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_NAME("Thrust Lever")
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A3")
PORT_BIT( 0xff00, 0x0000, IPT_PEDAL ) PORT_MINMAX(0x00,0xff00) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_NAME("Rudder Pedal")
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( crackndj )
PORT_INCLUDE( naomi_mie )
PORT_INCLUDE( naomi_debug )
PORT_START("TILT")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_TILT )
PORT_BIT( 0x7f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P1")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x7fff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P2")
PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A0")
PORT_BIT( 0xff00, 0x8000, IPT_AD_STICK_X ) PORT_MINMAX(0x00, 0xff00) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_REVERSE PORT_NAME("Fader")
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( monkeyba )
PORT_INCLUDE( naomi_mie )
PORT_INCLUDE( naomi_debug )
PORT_START("TILT")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_TILT )
PORT_BIT( 0x7f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P1")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x7fff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P2")
PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A0")
PORT_BIT( 0xff00, 0x8000, IPT_AD_STICK_Y ) PORT_MINMAX(0x00, 0xff00) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_REVERSE
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A1")
PORT_BIT( 0xff00, 0x8000, IPT_AD_STICK_X ) PORT_MINMAX(0x00, 0xff00) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_REVERSE
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( shaktamb )
PORT_INCLUDE( naomi_mie )
PORT_INCLUDE( naomi_debug )
PORT_START("TILT")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_TILT )
PORT_BIT( 0x7f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P1")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Knock Switch")
PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P1 Down")
PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("P1 Up")
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Shake L Switch")
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P1 Shake R Switch")
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("P1 Screen-In")
PORT_BIT( 0x607f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P2")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P2 Knock Switch") PORT_PLAYER(2)
PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P2 Down") PORT_PLAYER(2)
PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("P2 Up") PORT_PLAYER(2)
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P2 Shake L Switch") PORT_PLAYER(2)
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P2 Shake R Switch") PORT_PLAYER(2)
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("P2 Screen-In") PORT_PLAYER(2)
PORT_BIT( 0x607f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A0")
PORT_BIT( 0xff00, 0x8000, IPT_AD_STICK_X ) PORT_MINMAX(0x00, 0xff00) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_REVERSE
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A1")
PORT_BIT( 0xff00, 0x8000, IPT_AD_STICK_Y ) PORT_MINMAX(0x00, 0xff00) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_REVERSE
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A3")
PORT_BIT( 0xff00, 0x8000, IPT_AD_STICK_X ) PORT_MINMAX(0x00, 0xff00) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_REVERSE PORT_PLAYER(2)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("A4")
PORT_BIT( 0xff00, 0x8000, IPT_AD_STICK_Y ) PORT_MINMAX(0x00, 0xff00) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_REVERSE PORT_PLAYER(2)
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
/* JVS mahjong panel */
static INPUT_PORTS_START( naomi_mp )
PORT_INCLUDE( naomi_mie )
PORT_INCLUDE( naomi_debug )
PORT_START("OUTPUT")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_OUTPUT) PORT_CHANGED_MEMBER(DEVICE_SELF, naomi_state,naomi_mp_w, nullptr)
PORT_START("P1")
PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, naomi_state,naomi_mp_r, "KEY1\0KEY2\0KEY3\0KEY4\0KEY5")
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("KEY1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_FLIP_FLOP )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_MAHJONG_LAST_CHANCE )
PORT_START("KEY2")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_KAN )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_M )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_I )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_MAHJONG_E )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_MAHJONG_A )
PORT_START("KEY3")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_BET )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_REACH )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_N )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_J )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_MAHJONG_F )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_MAHJONG_B )
PORT_START("KEY4")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_RON )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_CHI )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_K )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_MAHJONG_G )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_MAHJONG_C )
PORT_START("KEY5")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_PON )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_L )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_MAHJONG_H )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_MAHJONG_D )
INPUT_PORTS_END
static INPUT_PORTS_START( suchie3 )
PORT_INCLUDE( naomi_mp )
PORT_MODIFY("P1")
PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, naomi_state,naomi_mp_r, "KEY5\0KEY2\0KEY3\0KEY4\0KEY1")
INPUT_PORTS_END
static INPUT_PORTS_START( naomi_kb )
PORT_INCLUDE( naomi_mie )
PORT_INCLUDE( naomi_debug )
PORT_START("P1.M")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LCONTROL) PORT_NAME("P1 Left Control") PORT_PLAYER(1)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_NAME("P1 Left Shift") PORT_PLAYER(1)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LALT) PORT_NAME("P1 Left Alt") PORT_PLAYER(1)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LWIN) PORT_NAME("P1 S1") PORT_PLAYER(1)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RCONTROL) PORT_NAME("P1 Right Control") PORT_PLAYER(1)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("P1 Right Shift") PORT_PLAYER(1)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RALT) PORT_NAME("P1 Right Alt") PORT_PLAYER(1)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RWIN) PORT_NAME("P1 S2") PORT_PLAYER(1)
PORT_START("P1.LD")
// TODO: LED information
// x--- ---- shift
// -x-- ---- power
// --x- ---- kana
// ---x x--- reserved
// ---- -x-- scroll lock
// ---- --x- caps lock
// ---- ---x num lock
PORT_START("P1.KC1")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, naomi_state, naomi_kb_r, 0)
PORT_START("P1.KC2")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P1.KC3")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P1.KC4")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P1.KC5")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P1.KC6")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P1.ROW0")
PORT_BIT(0x00000001, IP_ACTIVE_HIGH, IPT_UNUSED ) // no operation
PORT_BIT(0x00000002, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // rollover error
PORT_BIT(0x00000004, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // POST error
PORT_BIT(0x00000008, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // Undefined error
PORT_BIT(0x00000010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_A) PORT_NAME("P1 a / A")
PORT_BIT(0x00000020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_B) PORT_NAME("P1 b / B")
PORT_BIT(0x00000040, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_C) PORT_NAME("P1 c / C")
PORT_BIT(0x00000080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_D) PORT_NAME("P1 d / D")
PORT_BIT(0x00000100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_E) PORT_NAME("P1 e / E")
PORT_BIT(0x00000200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_F) PORT_NAME("P1 f / F")
PORT_BIT(0x00000400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_G) PORT_NAME("P1 g / G")
PORT_BIT(0x00000800, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_H) PORT_NAME("P1 h / H")
PORT_BIT(0x00001000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_I) PORT_NAME("P1 i / i")
PORT_BIT(0x00002000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_J) PORT_NAME("P1 j / J")
PORT_BIT(0x00004000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_K) PORT_NAME("P1 k / K")
PORT_BIT(0x00008000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_L) PORT_NAME("P1 l / L")
PORT_BIT(0x00010000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_M) PORT_NAME("P1 m / M")
PORT_BIT(0x00020000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_N) PORT_NAME("P1 n / N")
PORT_BIT(0x00040000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_O) PORT_NAME("P1 o / O")
PORT_BIT(0x00080000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_P) PORT_NAME("P1 p / P")
PORT_BIT(0x00100000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_Q) PORT_NAME("P1 q / Q")
PORT_BIT(0x00200000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_R) PORT_NAME("P1 r / R")
PORT_BIT(0x00400000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_S) PORT_NAME("P1 s / S")
PORT_BIT(0x00800000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_T) PORT_NAME("P1 t / T")
PORT_BIT(0x01000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_U) PORT_NAME("P1 u / U")
PORT_BIT(0x02000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_V) PORT_NAME("P1 v / V")
PORT_BIT(0x04000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_W) PORT_NAME("P1 w / W")
PORT_BIT(0x08000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_X) PORT_NAME("P1 x / X")
PORT_BIT(0x10000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_Y) PORT_NAME("P1 y / Y")
PORT_BIT(0x20000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_Z) PORT_NAME("P1 z / Z")
PORT_BIT(0x40000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_1) PORT_NAME("P1 1 / !")
PORT_BIT(0x80000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_2) PORT_NAME("P1 2 / \"")
PORT_START("P1.ROW1")
PORT_BIT(0x00000001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_3) PORT_NAME("P1 3 / #")
PORT_BIT(0x00000002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_4) PORT_NAME("P1 4 / $")
PORT_BIT(0x00000004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_5) PORT_NAME("P1 5 / %")
PORT_BIT(0x00000008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_6) PORT_NAME("P1 6 / &")
PORT_BIT(0x00000010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_7) PORT_NAME("P1 7 / '")
PORT_BIT(0x00000020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_8) PORT_NAME("P1 8 / (")
PORT_BIT(0x00000040, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_9) PORT_NAME("P1 9 / )")
PORT_BIT(0x00000080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_0) PORT_NAME("P1 0 / ~")
PORT_BIT(0x00000100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_ENTER) PORT_NAME("P1 Enter")
PORT_BIT(0x00000200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_ESC) PORT_NAME("P1 ESC")
PORT_BIT(0x00000400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("P1 BackSpace")
PORT_BIT(0x00000800, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 TAB")
PORT_BIT(0x00001000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_SPACE) PORT_NAME("P1 Space")
PORT_BIT(0x00002000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_MINUS) PORT_NAME("P1 - / =")
PORT_BIT(0x00004000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 ^ / ¯")
PORT_BIT(0x00008000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 @ / `")
PORT_BIT(0x00010000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("P1 [ / {")
PORT_BIT(0x00020000, IP_ACTIVE_HIGH, IPT_UNUSED ) // unused for jp keyboard
PORT_BIT(0x00040000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME("P1 ] / }")
PORT_BIT(0x00080000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 ; / +")
PORT_BIT(0x00100000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 : / *")
PORT_BIT(0x00200000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 Hankaku/Zenkaku")
PORT_BIT(0x00400000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 , / <")
PORT_BIT(0x00800000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 . / >")
PORT_BIT(0x01000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 / / ?")
PORT_BIT(0x02000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_CAPSLOCK)*/ PORT_NAME("P1 Caps Lock")
PORT_BIT(0x04000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_F1) PORT_NAME("P1 F1")
PORT_BIT(0x08000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_F2) PORT_NAME("P1 F2")
PORT_BIT(0x10000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_F3) PORT_NAME("P1 F3")
PORT_BIT(0x20000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_F4) PORT_NAME("P1 F4")
PORT_BIT(0x40000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_F5) PORT_NAME("P1 F5")
PORT_BIT(0x80000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_F6) PORT_NAME("P1 F6")
PORT_START("P1.ROW2")
PORT_BIT(0x00000001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_F7) PORT_NAME("P1 F7")
PORT_BIT(0x00000002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_F8) PORT_NAME("P1 F8")
PORT_BIT(0x00000004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_F9) PORT_NAME("P1 F9")
PORT_BIT(0x00000008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_F10) PORT_NAME("P1 F10")
PORT_BIT(0x00000010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_F11) PORT_NAME("P1 F11")
PORT_BIT(0x00000020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_F12) PORT_NAME("P1 F12")
PORT_BIT(0x00000040, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 Print Screen")
PORT_BIT(0x00000080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 Scroll Lock")
PORT_BIT(0x00000100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 Pause")
PORT_BIT(0x00000200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_INSERT) PORT_NAME("P1 Insert")
PORT_BIT(0x00000400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_HOME) PORT_NAME("P1 Home")
PORT_BIT(0x00000800, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 Page Up")
PORT_BIT(0x00001000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 Delete Forward")
PORT_BIT(0x00002000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 End")
PORT_BIT(0x00004000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 Page Down")
PORT_BIT(0x00008000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("P1 Right")
PORT_BIT(0x00010000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_LEFT) PORT_NAME("P1 Left")
PORT_BIT(0x00020000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_DOWN) PORT_NAME("P1 Down")
PORT_BIT(0x00040000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) PORT_CODE(KEYCODE_UP) PORT_NAME("P1 Up")
PORT_BIT(0xfff80000, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P1.ROW3")
PORT_BIT(0x0000001f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT(0x00000020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_F1)*/ PORT_NAME("P1 S3")
PORT_BIT(0xffffffc0, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P1.ROW4")
PORT_BIT(0x0000007f, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT(0x00000080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 Kanji \\ / _")
PORT_BIT(0x00000100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 Kanji Katakana / Hiragana")
PORT_BIT(0x00000200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 Kanji \xC2\xA5 / |")
PORT_BIT(0x00000400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 Kanji Henkan")
PORT_BIT(0x00000800, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_PLAYER(1) /*PORT_CODE(KEYCODE_?)*/ PORT_NAME("P1 Kanji Muhenkan")
PORT_BIT(0xfffff000, IP_ACTIVE_HIGH, IPT_UNUSED )
// TODO: keyboard for player 2
PORT_START("P2.M")
PORT_DIPNAME( 0x01, 0x00, "P2.ROW0" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x01, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x02, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x10, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
PORT_START("P2.LD")
// TODO: same as above
PORT_START("P2.KC1")
PORT_DIPNAME( 0x01, 0x00, "P2.ROW2" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x01, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x02, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x10, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
PORT_START("P2.KC2")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P2.KC3")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P2.KC4")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P2.KC5")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P2.KC6")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
// Atomiswave - inputs are read as standard Dreamcast controllers.
// Controller bit patterns:
//
// SHOT3 (1<<0)
// SHOT2 (1<<1)
// SHOT1 (1<<2)
// START (1<<3)
// UP (1<<4)
// DOWN (1<<5)
// LEFT (1<<6)
// RIGHT (1<<7)
// SHOT5 (1<<9)
// SHOT4 (1<<10)
// SERVICE (1<<13)
// TEST (1<<14)
// 2 joysticks variant
static INPUT_PORTS_START( aw2c )
PORT_START("P1.0")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_START("P1.1")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_SERVICE_NO_TOGGLE( 0x40, IP_ACTIVE_LOW )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1)
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1)
PORT_START("P2.0")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_START("P2.1")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2)
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2)
PORT_START("COINS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x0C, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_INCLUDE( naomi_debug )
INPUT_PORTS_END
// Single-player wheel variant
static INPUT_PORTS_START( aw1w )
PORT_START("P1.0")
PORT_BIT( 0xf1, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_START("P1.1")
PORT_SERVICE_NO_TOGGLE( 0x40, IP_ACTIVE_LOW )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x9f, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("P2.A0") /* steering */
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(100) PORT_KEYDELTA(4)
PORT_START("P2.A1") /* gas pedal */
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(20)
PORT_START("P2.A2") /* brake */
PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(100) PORT_KEYDELTA(40)
PORT_START("P2.A3") /* steering */
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(100) PORT_KEYDELTA(4)
PORT_START("P2.A4") /* gas pedal */
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(20)
PORT_START("P2.A5") /* brake */
PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(100) PORT_KEYDELTA(40)
PORT_START("COINS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x0C, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_INCLUDE( naomi_debug )
INPUT_PORTS_END
MACHINE_RESET_MEMBER(naomi_state,naomi)
{
naomi_state::machine_reset();
m_aica->set_ram_base(dc_sound_ram, 8*1024*1024);
}
/*
* Common for Naomi 1, Naomi GD-Rom, Naomi 2, Atomiswave ...
*/
// TODO: merge with Dreamcast base machine
MACHINE_CONFIG_START(dc_state::naomi_aw_base)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", SH4LE, CPU_CLOCK) // SH4!!!
MCFG_SH4_MD0(1)
MCFG_SH4_MD1(0)
MCFG_SH4_MD2(1)
MCFG_SH4_MD3(0)
MCFG_SH4_MD4(0)
MCFG_SH4_MD5(1)
MCFG_SH4_MD6(0)
MCFG_SH4_MD7(1)
MCFG_SH4_MD8(0)
MCFG_SH4_CLOCK(CPU_CLOCK)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", dc_state, dc_scanline, "screen", 0, 1)
MCFG_DEVICE_ADD("soundcpu", ARM7, ((XTAL(33'868'800)*2)/3)/8) // AICA bus clock is 2/3rds * 33.8688. ARM7 gets 1 bus cycle out of each 8.
MCFG_DEVICE_PROGRAM_MAP(dc_audio_map)
MCFG_MAPLE_DC_ADD( "maple_dc", "maincpu", dc_maple_irq )
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(13458568*2, 820, 0, 640, 532, 0, 480) /* TODO: where pclk actually comes? */
MCFG_SCREEN_UPDATE_DEVICE("powervr2", powervr2_device, screen_update)
MCFG_PALETTE_ADD("palette", 0x1000)
MCFG_POWERVR2_ADD("powervr2", WRITE8(*this, dc_state, pvr_irq))
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
MCFG_DEVICE_ADD("aica", AICA, (XTAL(33'868'800)*2)/3) // 67.7376MHz(2*33.8688MHz), div 3 for audio block
MCFG_AICA_MASTER
MCFG_AICA_IRQ_CB(WRITELINE(*this, dc_state, aica_irq))
MCFG_AICA_MAIN_IRQ_CB(WRITELINE(*this, dc_state, sh4_aica_irq))
MCFG_SOUND_ROUTE(0, "lspeaker", 2.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 2.0)
AICARTC(config, "aicartc", XTAL(32'768));
MACHINE_CONFIG_END
MACHINE_CONFIG_START(naomi_state::naomi_base)
naomi_aw_base(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(naomi_map)
MCFG_DEVICE_IO_MAP(naomi_port)
EEPROM_93C46_16BIT(config, "main_eeprom").default_value(0);
// high probable this MCU uses one of "fast Z80" cores, like ASCII R800, Kawasaki KC80 or similar, where clocks per instructions is much different from regular Z80.
// was made few attempts to measure CPU core clock using different methods (in term of "regular Z80" clock and cycles):
// - GPIO toggle in a loop - 13.499Mhz,
// - using UART as timer - 13.260MHz,
// - unrolled NOPs then GPIO toggle - 12.76MHz (or 3.19M NOP instructions per second)
// for now we use higher clock, otherwise earlier NAOMI BIOS revisions will not boot (see MT#06552).
MCFG_MIE_ADD("mie", 16000000, "maple_dc", 0, nullptr, nullptr, nullptr, ":MIE.3", nullptr, ":MIE.5", nullptr, nullptr)
MCFG_SEGA_837_13551_DEVICE_ADD("837_13551", "mie", ":TILT", ":P1", ":P2", ":A0", ":A1", ":A2", ":A3", ":A4", ":A5", ":A6", ":A7", ":OUTPUT")
EEPROM_93C46_8BIT(config, "mie_eeprom");
X76F100(config, "naomibd_eeprom");
MCFG_M3COMM_ADD("comm_board")
MCFG_MACHINE_RESET_OVERRIDE(naomi_state,naomi)
NVRAM(config, "sram", nvram_device::DEFAULT_ALL_0);
MACHINE_CONFIG_END
/*
* Naomi 1, unprotected ROM sub-board
*/
MACHINE_CONFIG_START(naomi_state::naomi)
naomi_base(config);
MCFG_NAOMI_ROM_BOARD_ADD("rom_board", "naomibd_eeprom", WRITE8(*this, dc_state, g1_irq))
MACHINE_CONFIG_END
/*
* Naomi 1 GD-Rom
*/
MACHINE_CONFIG_START(naomi_state::naomigd)
naomi_base(config);
MCFG_NAOMI_GDROM_BOARD_ADD("rom_board", ":gdrom", ":pic", "naomibd_eeprom", WRITE8(*this, dc_state, g1_irq))
MACHINE_CONFIG_END
/*
* Naomi 1, M1 sub-board
*/
MACHINE_CONFIG_START(naomi_state::naomim1)
naomi_base(config);
MCFG_NAOMI_M1_BOARD_ADD("rom_board", "naomibd_eeprom", WRITE8(*this, dc_state, g1_irq))
MACHINE_CONFIG_END
/*
* Naomi 1, M2/3 sub-board
*/
MACHINE_CONFIG_START(naomi_state::naomim2)
naomi_base(config);
MCFG_NAOMI_M2_BOARD_ADD("rom_board", "naomibd_eeprom", WRITE8(*this, dc_state, g1_irq))
MACHINE_CONFIG_END
/*
* Naomi 1, M4 sub-board
*/
MACHINE_CONFIG_START(naomi_state::naomim4)
naomi_base(config);
MCFG_NAOMI_M4_BOARD_ADD("rom_board", "pic_readout", "naomibd_eeprom", WRITE8(*this, dc_state, g1_irq))
MACHINE_CONFIG_END
/*
* Naomi M2 with Keyboard controllers
*/
MACHINE_CONFIG_START(naomi_state::naomim2_kb)
naomim2(config);
MCFG_DC_KEYBOARD_ADD("dcctrl0", "maple_dc", 1, ":P1.M", ":P1.LD", ":P1.KC1", ":P1.KC2", ":P1.KC3", ":P1.KC4", ":P1.KC5", ":P1.KC6")
MCFG_DC_KEYBOARD_ADD("dcctrl1", "maple_dc", 2, ":P2.M", ":P2.LD", ":P2.KC1", ":P2.KC2", ":P2.KC3", ":P2.KC4", ":P2.KC5", ":P2.KC6")
MACHINE_CONFIG_END
/*
* Naomi GD with Keyboard controllers
*/
MACHINE_CONFIG_START(naomi_state::naomigd_kb)
naomigd(config);
MCFG_DC_KEYBOARD_ADD("dcctrl0", "maple_dc", 1, ":P1.M", ":P1.LD", ":P1.KC1", ":P1.KC2", ":P1.KC3", ":P1.KC4", ":P1.KC5", ":P1.KC6")
MCFG_DC_KEYBOARD_ADD("dcctrl1", "maple_dc", 2, ":P2.M", ":P2.LD", ":P2.KC1", ":P2.KC2", ":P2.KC3", ":P2.KC4", ":P2.KC5", ":P2.KC6")
MACHINE_CONFIG_END
/*
* Naomi 2
*/
/*
MACHINE_CONFIG_START((naomi2_state::naomi2)
naomi(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(naomi2_map)
MCFG_DEVICE_IO_MAP(naomi_port)
MACHINE_CONFIG_END
*/
/*
* Naomi 2 GD-Rom
*/
MACHINE_CONFIG_START(naomi2_state::naomi2_base)
MCFG_POWERVR2_ADD("powervr2_slave", WRITE8(*this, dc_state, pvr_irq))
// TODO: ELAN device
MACHINE_CONFIG_END
MACHINE_CONFIG_START(naomi2_state::naomi2gd)
naomigd(config);
naomi2_base(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(naomi2_map)
MACHINE_CONFIG_END
/*
* Naomi 2, M1 sub-board
*/
MACHINE_CONFIG_START(naomi2_state::naomi2m1)
naomim1(config);
naomi2_base(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(naomi2_map)
MACHINE_CONFIG_END
/*
* Naomi 2, M2/3 sub-board
*/
MACHINE_CONFIG_START(naomi2_state::naomi2m2)
naomim2(config);
naomi2_base(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(naomi2_map)
MACHINE_CONFIG_END
/*
* Atomiswave
*/
MACHINE_CONFIG_START(atomiswave_state::aw_base)
naomi_aw_base(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(aw_map)
MCFG_DEVICE_IO_MAP(aw_port)
MACRONIX_29L001MC(config, "awflash");
MCFG_AW_ROM_BOARD_ADD("rom_board", "rom_key", WRITE8(*this, dc_state, g1_irq))
MCFG_MACHINE_RESET_OVERRIDE(dc_state,dc_console)
NVRAM(config, "sram", nvram_device::DEFAULT_ALL_0);
MACHINE_CONFIG_END
MACHINE_CONFIG_START(atomiswave_state::aw1c)
aw_base(config);
MCFG_DC_CONTROLLER_ADD("dcctrl0", "maple_dc", 0, ":P1.0", ":P1.1", ":P1.A0", ":P1.A1", ":P1.A2", ":P1.A3", ":P1.A4", ":P1.A5")
// TODO: isn't it supposed to be just one controller?
MCFG_DC_CONTROLLER_ADD("dcctrl1", "maple_dc", 1, ":P2.0", ":P2.1", ":P2.A0", ":P2.A1", ":P2.A2", ":P2.A3", ":P2.A4", ":P2.A5")
MACHINE_CONFIG_END
MACHINE_CONFIG_START(atomiswave_state::aw2c)
aw_base(config);
MCFG_DC_CONTROLLER_ADD("dcctrl0", "maple_dc", 0, ":P1.0", ":P1.1", ":P1.A0", ":P1.A1", ":P1.A2", ":P1.A3", ":P1.A4", ":P1.A5")
MCFG_DC_CONTROLLER_ADD("dcctrl1", "maple_dc", 1, ":P2.0", ":P2.1", ":P2.A0", ":P2.A1", ":P2.A2", ":P2.A3", ":P2.A4", ":P2.A5")
MACHINE_CONFIG_END
#define ROM_LOAD16_WORD_SWAP_BIOS(bios,name,offset,length,hash) \
ROMX_LOAD(name, offset, length, hash, ROM_GROUPWORD | ROM_BIOS(bios))
/* BIOS info:
Revisions through C supports only motherboards with X76F100 seral number eeprom
Revisions through D can handle game carts only
Revisions C and later can also handle Multi-board
Revisions E and later can also handle DIMM board
Revisions G and later can also handle DIMM board and or the network DIMM board
Revision H can also handle M4-type ROM-boards
F355 has it's own BIOS (3 screen version)
To determine BIOS version: on test mode title screen press Service button 51 times
Info from roms starting at 0x1ffd60
EPR-21576 - NAOMI BOOT ROM 1998 12/18 1.00 (Japan) only Japan ver was released
EPR-21576a - NAOMI BOOT ROM 1999 01/14 1.10 (Japan) Japan 1.10 BOOT ROM was labeled "A", all the rest had no revision character.
EPR-21579 - NAOMI BOOT ROM 1999 01/14 1.10 (Korea)
USA, Export and Australia is missing.
EPR-21576b - NAOMI BOOT ROM 1999 02/15 1.20 (Japan) Japan 1.20 BOOT ROM was labeled "B", all the rest - "A".
EPR-21577a - NAOMI BOOT ROM 1999 02/15 1.20 (USA)
EPR-21578a - NAOMI BOOT ROM 1999 02/15 1.20 (Export)
Korea and Australia is missing.
EPR-21576c - NAOMI BOOT ROM 1999 03/11 1.30 (Japan) only Japan ver was released
EPR-21801 - NAOMI BOOT ROM 1999 03/11 1.30 (USA) (Airline Pilots)
EPR-21802 - NAOMI BOOT ROM 1999 03/11 1.30 (Export) (Airline Pilots)
EPR-21576d - NAOMI BOOT ROM 1999 06/04 1.40 (Japan)
EPR-21577d - NAOMI BOOT ROM 1999 06/04 1.40 (USA)
EPR-21578d - NAOMI BOOT ROM 1999 06/04 1.40 (Export)
EPR-21579d - NAOMI BOOT ROM 1999 06/04 1.40 (Korea)
Australia is missing.
EPR-21576e - NAOMI BOOT ROM 2000 08/25 1.50 (Japan)
EPR-21577e - NAOMI BOOT ROM 2000 08/25 1.50 (USA)
EPR-21578e - NAOMI BOOT ROM 2000 08/25 1.50 (Export)
Korea and Australia is missing.
EPR-21578f - NAOMI BOOT ROM 2001 06/20 1.60 (Export) had critical bugs, was quickly replaced by 1.70
Japan, USA, Korea and Australia is missing.
EPR-21576g - NAOMI BOOT ROM 2001 09/10 1.70 (Japan)
EPR-21577g - NAOMI BOOT ROM 2001 09/10 1.70 (USA)
EPR-21578g - NAOMI BOOT ROM 2001 09/10 1.70 (Export)
Korea and Australia is missing.
EPR-21576h - NAOMI BOOT ROM 2002 07/08 1.8- (Japan)
EPR-21577h - NAOMI BOOT ROM 2002 07/08 1.8- (USA)
EPR-21578h - NAOMI BOOT ROM 2002 07/08 1.8- (Export)
Korea and Australia is missing.
EPR-21336 - No known dumps (Development BOOT ROM)
EPR-21580 - No known dumps (Australia)
House of the Dead 2 specific Naomi BIOS roms:
Info from roms starting at 0x1ff060
EPR-21329 - HOUSE OF THE DEAD 2 IPL ROM 1998 11/14 (Japan)
EPR-21330 - HOUSE OF THE DEAD 2 IPL ROM 1998 11/14 (USA)
EPR-21331 - HOUSE OF THE DEAD 2 IPL ROM 1998 11/14 (Export)
EPR-21329 & EPR-21330 & EPR-21331 differ by 7 bytes:
0x40000 is the region byte (only one region byte)
0x1ffffa-0x1fffff is the BIOS checksum
Ferrari F355 specific Naomi BIOS roms:
EPR-21862P- NAOMI BOOT ROM 1999 05/07 1.31 (Japan) preview / prototype
EPR-21864P- NAOMI BOOT ROM 1999 05/07 1.31 (Export) preview / prototype
EPR-21862 - NAOMI BOOT ROM 1999 07/02 1.34 (Japan)
EPR-21863 - NAOMI BOOT ROM 1999 07/02 1.34 (USA)
EPR-21864 - NAOMI BOOT ROM 1999 07/02 1.34 (Export)
EPR-22849 - NAOMI BOOT ROM 1999 08/30 1.35 (Japan)
EPR-22850 - NAOMI BOOT ROM 1999 08/30 1.35 (USA)
EPR-22851 - NAOMI BOOT ROM 1999 08/30 1.35 (Export)
EPR-22850 & EPR-22851 differ by 7 bytes:
0x52F08 is the region byte (only one region byte)
0x1ffffa-0x1fffff is the BIOS checksum
Region byte encoding is as follows:
0x00 = Japan
0x01 = USA
0x02 = Export
0x03 = Korea
0x04 = Australia
Scan ROM for the text string "LOADING TEST MODE NOW" back up four (4) bytes for the region byte.
NOTE: this doesn't work for the HOTD2 or multi screen boot roms
Dev BIOS: older version, from about mid November 1998 (some sources call it "NAOMI Test BIOS ROM")
Dev BIOS v1.10: NAOMI DEVELOP 1999 01/10 1.10
have been added support of: 93C46 SN# EEPROM, RTC, VMU and NRS (M1/Actel) type Flash ROM boards.
to boot into BIOS menu DIPSW 1-4 must be ON
with other values various tests will be run instead
with DIPSW 1 3 OFF, 2 4 ON MultiBoard hardware tests will be run (not present in menu)
Warning !!!
"SECURITY TEST" and "FLASH TEST" will test "M2-type" 171-7885A ROM boards Flash-ROMs, erasing its contents.
"FLASH COPY" : 2x 171-7885A ROM boards must be connected and configured as Bank 0 and 1, contents of one will be flashed to another.
"NEW FLASH TEST" and "NEW SECURITY TEST" - tests for "M1-type" 171-7930B ROM boards (Actel-based), flash roms contents will be erased.
Security tests uses hard coded encrypted/decrypted data, so all development ROM boards must be have same hardcoded security keys.
no valid 315-5881 key can be found using current decryption routine.
M1-type security key is ff9d4d3c
other points of interest:
000ADFB8 - 000AF7CB - HTML with Japanese SDK/Kit change log, used in M1 security test as plaintext data.
"INPUT TEST" : tests inputs connected to MIE GPIO ports (active low):
0 - Player 1 input
1 - Player 2 input
2 - Coins 1/2, Test, Service, Start 1/2
4 - Port E
6 - Port G
F - 8x analogue inputs
Probably at some stage of development NAOMI was planned as non-JVS system as well, and inputs must be wired to CN19-21, unpopulated on retail hardware.
Multi-region hack notes:
These hacks uses 1KB "NAOMIHAT" IPL from HOTD2 proto BIOS to bypass hardware checksum protection and make the rest of ROM moddable.
Besides IPL it is 2 bytes patch (4 for Naomi2), which enables region-switching function implemented by Sega itself, but left it disabled
(original enable trigger: if text at 001FFD00 will be NOT equal to "COPYRIGHT (C) SEGA etc...").
DIP switch settings:
DSW2 DSW3 DSW4
OFF OFF OFF Japan
ON OFF OFF USA
OFF ON OFF Export
ON ON OFF Korea
OFF OFF ON Australia
*/
// game specific bios roms quite clearly don't belong in here.
// Japan bios is default, because most games require it.
#define NAOMI_BIOS \
ROM_REGION( 0x200000, "maincpu", 0) \
ROM_SYSTEM_BIOS( 0, "bios0", "epr-21576h (Japan)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 0, "epr-21576h.ic27", 0x000000, 0x200000, CRC(d4895685) SHA1(91424d481ff99a8d3f4c45cea6d3f0eada049a6d) ) \
ROM_SYSTEM_BIOS( 1, "bios1", "epr-21576g (Japan)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 1, "epr-21576g.ic27", 0x000000, 0x200000, CRC(d2a1c6bf) SHA1(6d27d71aec4dfba98f66316ae74a1426d567698a) ) \
ROM_SYSTEM_BIOS( 2, "bios2", "epr-21576e (Japan)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 2, "epr-21576e.ic27", 0x000000, 0x200000, CRC(08c0add7) SHA1(e7c1a7673cb2ccb21748ef44105e46d1bad7266d) ) \
ROM_SYSTEM_BIOS( 3, "bios3", "epr-21576d (Japan)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 3, "epr-21576d.ic27", 0x000000, 0x200000, CRC(3b2afa7b) SHA1(d007e1d321c198a38c5baff86eb2ab84385d150a) ) \
ROM_SYSTEM_BIOS( 4, "bios4", "epr-21576c (Japan)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 4, "epr-21576c.ic27", 0x000000, 0x200000, BAD_DUMP CRC(4599ad13) SHA1(7e730e9452a792d76f210c33a955d385538682c7) ) \
ROM_SYSTEM_BIOS( 5, "bios5", "epr-21576b (Japan)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 5, "epr-21576b.ic27", 0x000000, 0x200000, CRC(755a6e07) SHA1(7e8b8ccfc063144d89668e7224dcd8a36c54f3b3) ) \
ROM_SYSTEM_BIOS( 6, "bios6", "epr-21576a (Japan)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 6, "epr-21576a.ic27", 0x000000, 0x200000, CRC(cedfe439) SHA1(f27798bf3d890863ef0c1d9dcb4e7782249dca27) ) \
ROM_SYSTEM_BIOS( 7, "bios7", "epr-21576 (Japan)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 7, "epr-21576.ic27", 0x000000, 0x200000, CRC(9dad3495) SHA1(5fb66f9a2b68d120f059c72758e65d34f461044a) ) \
ROM_SYSTEM_BIOS( 8, "bios8", "epr-21578h (Export)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 8, "epr-21578h.ic27", 0x000000, 0x200000, CRC(7b452946) SHA1(8e9f153bbada24b37066dc45b64a7bf0d4f26a9b) ) \
ROM_SYSTEM_BIOS( 9, "bios9", "epr-21578g (Export)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 9, "epr-21578g.ic27", 0x000000, 0x200000, CRC(55413214) SHA1(bd2748365a9fc1821c9369aa7155d7c41c4df43e) ) \
ROM_SYSTEM_BIOS( 10, "bios10", "epr-21578f (Export)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 10, "epr-21578f.ic27", 0x000000, 0x200000, CRC(628a27fd) SHA1(dae7add616b1a2478f00608823e88c3b82a0e78f) ) \
ROM_SYSTEM_BIOS( 11, "bios11", "epr-21578e (Export)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 11, "epr-21578e.ic27", 0x000000, 0x200000, CRC(087f09a3) SHA1(0418eb2cf9766f0b1b874a4e92528779e22c0a4a) ) \
ROM_SYSTEM_BIOS( 12, "bios12", "epr-21578d (Export)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 12, "epr-21578d.ic27", 0x000000, 0x200000, CRC(dfd5f42a) SHA1(614a0db4743a5e5a206190d6786ade24325afbfd) ) \
ROM_SYSTEM_BIOS( 13, "bios13", "epr-21578a (Export)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 13, "epr-21578a.ic27", 0x000000, 0x200000, CRC(6c9aad83) SHA1(555918de76d8dbee2a97d8a95297ef694b3e803f) ) \
ROM_SYSTEM_BIOS( 14, "bios14", "epr-21577h (USA)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 14, "epr-21577h.ic27", 0x000000, 0x200000, CRC(fdf17452) SHA1(5f3e4b677f0046ce690a4f096b0481e5dd8bb6e6) ) \
ROM_SYSTEM_BIOS( 15, "bios15", "epr-21577g (USA)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 15, "epr-21577g.ic27", 0x000000, 0x200000, CRC(25f64af7) SHA1(99f9e6cc0642319bd2da492611220540add573e8) ) \
ROM_SYSTEM_BIOS( 16, "bios16", "epr-21577e (USA)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 16, "epr-21577e.ic27", 0x000000, 0x200000, CRC(cf36e97b) SHA1(b085305982e7572e58b03a9d35f17ae319c3bbc6) ) \
ROM_SYSTEM_BIOS( 17, "bios17", "epr-21577d (USA)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 17, "epr-21577d.ic27", 0x000000, 0x200000, CRC(60ddcbbe) SHA1(58b15096d269d6df617ca1810b66b47deb184958) ) \
ROM_SYSTEM_BIOS( 18, "bios18", "epr-21577a (USA)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 18, "epr-21577a.ic27", 0x000000, 0x200000, CRC(969dc491) SHA1(581d1eae328b87b67508a7586ffc60cee256f70f) ) \
ROM_SYSTEM_BIOS( 19, "bios19", "epr-21579d (Korea)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 19, "epr-21579d.ic27", 0x000000, 0x200000, CRC(33513691) SHA1(b1d8c7c516e1471a788fcf7a02a794ad2f05aeeb) ) \
ROM_SYSTEM_BIOS( 20, "bios20", "epr-21579 (Korea)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 20, "epr-21579.ic27", 0x000000, 0x200000, CRC(71f9c918) SHA1(d15af8b947f41eea7c203b565cd403e3f37a2017) ) \
ROM_SYSTEM_BIOS( 21, "bios21", "Set4 Dev BIOS" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 21, "boot_rom_64b8.ic606", 0x000000, 0x080000, CRC(7a50fab9) SHA1(ef79f448e0bf735d1264ad4f051d24178822110f) ) \
ROM_SYSTEM_BIOS( 22, "bios22", "Dev BIOS v1.10" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 22, "develop110.ic27", 0x000000, 0x200000, CRC(de7cfdb0) SHA1(da16800edc4d49f70481c124d487f544c2fa8ce7) ) \
ROM_SYSTEM_BIOS( 23, "bios23", "Dev BIOS (Nov 1998)" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 23, "develop.ic27", 0x000000, 0x200000, CRC(309a196a) SHA1(409b50371feb648f10efd6b7ac420bf08d9a3b5a) ) \
ROM_SYSTEM_BIOS( 24, "bios24", "Development ROM Board" ) \
ROM_LOAD16_WORD_SWAP_BIOS( 24, "zukinver0930.ic25", 0x000000, 0x200000, CRC(58e17c23) SHA1(19330f906accf1b859f56bbcedc2edff73747599) ) \
ROM_SYSTEM_BIOS( <