Toaplan (Zero Wing) FPGA Implementation
FPGA compatible core of Toaplan Version 1 arcade hardware for MiSTerFPGA written by Darren Olafson. Based on OutZone (TP-018) schematics and verified against OutZone (TP-015 Conversion / TP-018) and Tatsujin (TP-013B).
The intent is for this core to be a 1:1 game play FPGA implementation of Toaplan V1 hardware for the supported titles. This project was developed with assistance from atrac17 and ππππππ¨πππ.
Rally Bike (TP-012), Demon's World (TP-016), Fireshark (TP-017), and Vimana (TP-019) are also Toaplan V1 titles and have separate repositories located here.
Supported Titles
Title | PCB Number |
Status | Released |
---|---|---|---|
Tatsujin / Truxton | TP-013B | Implemented | Yes |
Hellfire | B90 (TP-014) | Implemented | Yes |
Zero Wing | TP-015 | Implemented | Yes |
OutZone | TP-018 | Implemented | Yes |
External Modules
Module | Function | Author |
---|---|---|
fx68k | Motorola 68000 CPU | Jorge Cwik |
t80 | Zilog Z80 CPU | Daniel Wallner |
jtopl2 | Yamaha OPL2 | Jose Tejada |
yc_out | Y/C Video Module | Mike Simone |
mem | SDRAM Controller / Rom Downloader | Josh Bassett; modified by Darren Olafson |
core_template | MiSTer Framework Template | sorgelig; modified by Darren Olafson / atrac17 |
Known Issues / Tasks
- OPL2 Audio [Issue]
- Address timing issues with jtframe_mixer module usage; false paths added to sdc [Task]
PCB Check List
Clock Information
H-Sync | V-Sync | Source | PCB Number |
---|---|---|---|
15.556938kHz | 55.161153Hz | DSLogic + | TP-018 |
15.556938kHz | 57.612182Hz | DSLogic + | TP-013B TP-014 TP-015 |
Crystal Oscillators
Freq (MHz) | Use |
---|---|
10.00 | M68000 CLK (10 MHz) |
28.000 | Z80 CLK (3.5 MHz) YM3812 CLK (3.5 MHz) Pixel CLK (7 MHz) |
Pixel clock: 7.00 MHz
Estimated geometry:
(OutZone)
450 pixels/line
282 lines/frame
(Tatsujin, Hellfire, Zero Wing)
450 pixels/line
270 lines/frame
Main Components
Chip | Function |
---|---|
Motorola 68000 CPU | Main CPU |
Zilog Z80 CPU | Sound CPU |
Yamaha YM3812 | OPL2 Audio |
Custom Components
Chip | Function |
---|---|
NEC D65081R077 | Custom Gate-Array |
FCU-02 | Sprite RAM |
FDA MN53007T0A / TOAPLAN-02 M70H005 / GXL-02 | Sprite Counter |
BCU-02 | Tile Map Generator |
Screen Flip / Cocktail Support
Title | Screen Flip | Cocktail Support | Implemented |
---|---|---|---|
Tatsujin | Dipswitch | Yes | Yes |
Hellfire | Dipswitch | Hellfire (1P Set) Hellfire (1P Set, Older) |
Yes |
Zero Wing | Dipswitch | Zero Wing (1P Set) | Yes |
OutZone | Dipswitch | No | Yes |
Core Options / Additional Features
Scroll Debug Options
- Additional toggle that enables slow scrolling or separate debug feature in Tatsujin, Hellfire, Zero Wing, and OutZone. These features are present on hardware; for further details view the "PCB Information" section.
Refresh Rate Compatibility Options
- Additional toggle to modify video timings; only use for sync issues with an analog display or scroll jitter on a modern display. This is due to the hardware's low refresh rate, enabling the toggle alters gameplay from it's original state.
Refresh Rate | Timing Parameter | HTOTAL | VTOTAL |
---|---|---|---|
15.56kHz / 55.2Hz | TP-018 | 450 | 282 |
15.56kHz / 57.6Hz | TP-013B, B90, TP-015 | 450 | 270 |
15.73kHz / 59.8Hz | NTSC | 445 | 264 |
P1/P2 Input Swap Options
- Additional toggle to swap inputs from Player 1 to Player 2. This swaps inputs for the joystick and keyboard assignments.
Audio Options
- Additional toggle to adjust the volume gain or disable playback of OPL2 audio.
Overclock Options
- Additional toggle to increase the M68000 frequency from 10MHz to 17.5MHz; this will alter gameplay from it's original state and address any undesired native slow down.
Native Y/C Output ( 15kHz Displays )
- Native Y/C ouput is possible with the analog I/O rev 6.1 pcb. Using the following cables, HD-15 to BNC cable will transmit Y/C over the green and red lines. Choose an appropriate adapter to feed Y/C (S-Video) to your display.
H/V Adjustments ( 15kHz Displays )
-
Additional toggle for horizontal and vertical centering; the "H/V-Sync Pos Adj" toggles move the image to assist in screen centering if you choose not to adjust your displays settings.
-
Additional toggle for horizontal and vertical sync width adjust; the "H/V-Sync Width Adj" toggles address "rolling sync" and "flagging" on certain displays.
Scandoubler Options ( 31kHz Displays )
- Additional toggle to enable the scandoubler (31kHz) without changing ini settings and a new scanline option for 100% is available; the new scanline setting draws a black line every other frame. Scandoubler options pass over HDMI as well.
Scandoubler Fx | Scanlines 25% | Scanlines 50% | Scanlines 75% | Scanlines 100% |
---|---|---|---|---|
PCB Information / Control Layout
Title | Joystick | Service Menu | Dip Switches | Shared Controls | Dip Default | PCB Information |
---|---|---|---|---|---|---|
Tatsujin | 8-Way | Service Menu | Dip Sheet | Yes | Upright | There are no known differences between regional the variants; toggling the "Game Title" to "Table" enables turn based two player gameplay versus co-operative gameplay. For further information visit the Tatsujin shmups wikipedia. To access the service menu, toggle the "Test Mode" dipswitch; press P1 Start when the grid is displayed. To access sound test, press P2 Start when the grid is displayed. Toggle the "Test Mode" dipswitch to on in-game for "No Death". For in-game pause, toggle the "Dip Switch Display" dipswitch on. When the "Game Title" dipswitch is set to "Upright", controls for both players are accessible. |
Hellfire | 8-Way | Service Menu | Dip Sheet | No | Upright | There are differences between regional variants; the 1P Set features higher difficulty and turn-based two player gameplay versus co-operative gameplay. In-game, toggle the "No Hit" dipswitch for invulnerability. For in-game pause, press P2 Start, press P1 Start to resume. There is a slow motion debug setting; press P1 and P2 Start simultaneously. These are mappable inputs. For ease of use, these features are enabled when toggling "Scroll Debug" in the core settings; there is no need to toggle the dipswitch. The "Slow Scroll" button (P1/P2 Button 3) is not on hardware; P1 and P2 Start are merged to button 3. |
Zero Wing | 8-Way | Service Menu | Dip Sheet | No | Upright | There are differences between regional variants; the 1P Set features higher difficulty and turn-based two player gameplay versus co-operative gameplay. For further information visit the Zero Wing shmups wikipedia. In-game, toggle the "No Hit" dipswitch for invulnerability. For in-game pause, press P2 Start, press P1 Start to resume. There is a slow motion debug setting; press P1 and P2 Start simultaneously. These are mappable inputs. For ease of use, these features are enabled when toggling "Scroll Debug" in the core settings; there is no need to toggle the dipswitch. The "Slow Scroll" button (P1/P2 Button 3) is not on hardware; P1 and P2 Start are merged to button 3. |
OutZone | 8-Way | Service Menu | Dip Sheet | No | Upright | There are minimal differences between regional variants; other than difficulty, there is additional text in the Japanese variants. For further information visit the OutZone shmups wikipedia. For in-game pause, press P2 Start, press P1 Start to resume. There is a slow motion debug setting; press P1 and P2 Start simultaneously. These are mappable inputs. For ease of use, these features are enabled when toggling "Scroll Debug" in the core settings; there is no need to toggle the dipswitch. The "Slow Scroll" button (P1/P2 Button 4) is not on hardware; P1 and P2 Start are merged to button 4. The OutZone (Older Set) [outzoneb] has a unique feature; set both "Debug" dipswitches to on and reset in the OSD. Hold P2 Down during the boot sequence. Easiest to replicate with a keyboard. The CRTC registers are programmed for a smaller VTOTAL, enabling a higher framerate by reducing the edges of the screen. This changes the native refresh rate of OutZone from 55.2Hz to 58.5Hz and the resolution from 240p to 224p. Apart from the PCB, this is the only known emulation where this is possible. |
- Upright cabinets use a 2L3B control panel layout. Cocktail cabinets use a 2L3B control panel layout on opposite sides of the cabinet.
- If the cabinet type is set to table, the screen inverts for cocktail mode with turned based two player gameplay.
- Push button 3 may have no function in-game, but corresponds to the hardware service menu in OutZone. The "Scroll Debug" adds a button combination and is not tied to the keyboard handler.
Keyboard Handler
- Keyboard inputs mapped to mame defaults for Player 1 / Player 2.
Services | Coin/Start | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
Player 1 | Player 2 | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
Acknowledgments
Special thanks to the following loaned hardware used during development of this project:
@owlnonymous for loaning OutZone (TP-015 Conversion)
@cathoderaze for loaning Tatsujin (TP-013B)
@90s_cyber_thriller for loaning Outzone (TP-018)
Support
Please consider showing support for this and future projects via Darren's Ko-fi and atrac17's Patreon. While it isn't necessary, it's greatly appreciated.
Licensing
Contact the author for special licensing needs. Otherwise follow the GPLv2 license attached.