Skip to content

va7deo/zerowing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

zwcore_github

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 )

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 FxScanlines 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
FunctionsKeymap
TestF2
ResetF3
Service9
PauseP
FunctionsKeymap
P1 Start1
P2 Start2
P1 Coin5
P2 Coin6
Player 1 Player 2
FunctionsKeymap
P1 UpUp
P1 DownDown
P1 LeftLeft
P1 RightRight
P1 Bttn 1L-CTRL
P1 Bttn 2L-ALT
P1 Bttn 3Space
FunctionsKeymap
P2 UpR
P2 DownF
P2 LeftD
P2 RightG
P2 Bttn 1A
P2 Bttn 2S
P2 Bttn 3Q

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.