💦 CREATE AND FUCK YOUR OWN AI CUMSLUT 🔥 TRY NOW ♥
Create AI Cumsluts 💦
CoC_MiSTerFPGA_20260918.zip 3.5 MB
CoC_PocketFPGA_20260918.zip 2.1 MB
PocketFPGA_MRA.zip 15.2 KB
September 18, 2026

Coin-Op Collection Presents: Wardner no Mori (Twin Cobra Platform) & more...

Today's release for the Analogue Pocket and MiSTerFPGA platforms is the final entry on the Twin Cobra platform. Wardner is a side-scrolling action platformer built on Toaplan's GXL based arcade hardware.

Sky Shark / Flying Shark / Hishou Zame (1987)
Wardner / Wardner no Mori / Pyros (1987)
Twin Cobra / Kyukyoku Tiger (1987)

Developed by Toaplan and published by Taito in 1987, Wardner is the third and last of the three games on this hardware. It shares the platform's graphics customs, CRTC and sound section with Sky Shark and Twin Cobra, but where those two games use a 68000 and vertical orientation, Wardner runs a banked Z80, plays horizontally, and its protection DSP is configured differently.

This post covers a technical overview of Wardner on the Twin Cobra platform, the work the board required, the game itself, and an updates to the Sky Shark and Twin Cobra cores.

Please read the updates section for Sky Shark and Twin Cobra as things have changed for the PocketFPGA platform.


Overview:

Wardner runs on Toaplan's Z80 based arcade hardware (PCB TP-009), driven by a Zilog Z80 at 6 MHz working through a 256 KB program image, a fixed window at the bottom of the map and a 32 KB banked window above it.

A second Z80 at 3.5 MHz handles sound with its own 32 KB program ROM and a 4 KB RAM whose lower half is shared with the main processor, and a TMS320C10 digital signal processor at 14 MHz sits alongside them running a 1536-word mask program, acting as a coprocessor for object placement and as the board's copy protection. The audio is generated by a YM3812 at 3.5 MHz through a Y3014B DAC, an LM258/LM358 follower and an MB3730 power amplifier. Audio output is mono.

The video system outputs 320x240 in a horizontal orientation, with an HD46505SP CRTC at 3.5 MHz and a 74LS259 latch holding screen flip, the background and foreground bank selects, and the master video enable. The raster is set by the 28 MHz master oscillator and the GXL graphics chipsets rather than the game program. All three games from this platform share the same configuration.

That configuration is a 7 MHz pixel clock with an HTOTAL of 446 and a VTOTAL of 286. Each 63.71 µs line splits into 320 active pixels (45.71 µs), a 38 pixel front porch (5.43 µs), a 27 pixel sync (3.86 µs) and a 61 pixel back porch (8.71 µs) for a 15.695 kHz horizontal rate, while each 18.22 ms frame splits into 240 active lines (15.29 ms), a 14 line front porch (0.89 ms), an 8 line sync (0.51 ms) and a 24 line back porch (1.53 ms) for a 54.878 Hz vertical rate. These measurements were taken from each PCB, TP-007 (Sky Shark), TP-009 (Wardner no Mori), and TP-011 (Twin Cobra).

Graphics are rendered by Toaplan's own customs, a GXL-01 tile generator driving a 3bpp text layer and 4bpp background and foreground layers into a two-line tile buffer, with GXL-02 gate arrays driving the attribute RAM address buses, and a sprite generator walking a 512-entry list into a two-line sprite buffer at 4bpp. The winning palette address is muxed onto the palette SRAMs by a 74LS157 and the RGB bus is latched by a 74LS273 ahead of the resistor ladder.


Development Challenges:

Main CPU and Sound CPU:

Sky Shark and Twin Cobra both run a 68000 with a flat memory map. Wardner does not. It runs a Z80 at 6 MHz against a 256 KB program, which is four times what the processor can address, so the board splits it, a fixed window at the bottom of the map holding the code that always has to be resident and a 32 KB banked window above it carrying the rest.

The bank register is part of the board's I/O rather than the processor, so the program is responsible for knowing which quarter of itself is visible before it jumps. A second Z80 at 3.5 MHz runs the sound, and the two share the lower half of that processor's own 4 KB RAM rather than passing a latch back and forth.

The banked window is external memory and a read from it takes real time, which is where the core and the emulation part company. Emulation runs this Z80 with instant memory and no wait states at all. On the board the processor is stretched with WAIT while the fetch is outstanding, and it is the same state the board puts it in when the protection DSP takes the bus, so the two are indistinguishable from the rest of the design's point of view.

The core holds the request until the byte comes back, so a transaction already in flight cannot be retracted or re-aimed, and it qualifies the chip select against the refresh cycle, because the M1 refresh re-asserts the memory request with the refresh address on the bus and would otherwise look like a fetch. Only that window stalls; nothing else on the map does.

The clocks, the bus hand-off and the interrupt path were all traced from the PCB. The interrupt path is the simplest of the three boards in the family, with the vertical blank interrupt enabled by a write to the main latch and cleared when that latch goes inactive. There is no acknowledge cycle at all. Below is an example of the vertical blank interrupt latch from the service menu on the PCB and the core:

Protection DSP:

The protection device on all three boards is a TMS320C10, and which GXC part a board carries depends on the set rather than the game. Hishou Zame has the GXC-01, Flying Shark, Sky Shark, Pyros and Wardner the GXC-02, Kyukyoku Tiger the GXC-03 and Twin Cobra the GXC-04. It runs a 1536-word mask-programmed routine, does object placement, and the board will not boot without it.

Wardner uses the GXC-02, the same part as Sky Shark, and that variant enforces strict banking. The DSP does not address memory directly. It writes through a three-step protocol decoded off the low two bits of its address bus, one write latching a shared-RAM address and a bank select, a second writing the data, and a third driving the handshake line it watches for the main processor. Only banks three, four and five are writable, work RAM, sprite RAM and palette RAM, and the GXC-02 ignores anything else. Twin Cobra's GXC-04 dropped those restrictions, which made that core the easier of the two to bring up.

The core runs Raki's IKA32010, an open-source BSD licensed TMS320C10 implementation, the same one used for Sky Shark and Twin Cobra. The TP-009 PCB wires the GXC-02 differently than the other games. The GXC-02 is wired to the Z80 main CPU rather than a 68000 main CPU, so the shared memory, the bank decode and the interrupt path are specific to TP-009. The DSP's interrupt arrives from the main CPU's coin latch, and the DSP drives the handshake line itself.

x3812 - YM3812:

The board's audio comes from a YM3812 at 3.5 MHz and the core runs x3812, our own implementation of the chip. It covers the OPL2 feature set, nine two-operator FM channels or six channels plus five rhythm instruments, four selectable operator waveforms, the two general-purpose timers and their maskable interrupt, and the low-frequency oscillator behind vibrato and amplitude modulation. Clearing the wave-select bit drops it to the sine-only subset, which is the YM3526. One operator datapath is time-multiplexed across all eighteen operators every sampling period and the accumulator latches a single mono sample per pass.

It is fully synchronous, taking its timing from a clock enable off the master clock, and it presents both the parallel sample stream and the authentic YM3014 serial output, which is the same signal the board's own Y3014B is fed. The sound Z80's only interrupt comes from the chip's timer, so the timers pace the music driver rather than the processor, and they behave the way the hardware does.

Audio Filtering:

Everything after the DAC on TP-009 is analog, and it is simpler than it looks. The Y3014B feeds an LM358 section wired as a unity-gain follower with its output strapped to its inverting input, so it has no frequency-shaping network at all. From there it passes a level divider, an RF bypass, and a 10 µF coupling capacitor into an MB3730, a bridge-tied power amplifier whose own 22 µF feedback capacitor sets the low-frequency corner. Nothing in that path low-passes anything, so the chain is flat to Nyquist and all it does is block DC below roughly 36 Hz.

The filter chain was traced from the board and drawn up as schematic, measured with a Rigol MSO5104 mixed signal oscilloscope and a Rigol DSA-815-TG spectrum analyzer, and the model is built from those readings. The honest result is that there is very little in it to hear. The OPL2 sound from this PCB is not filtered the way an OPL board's output is, so moving between the board chain, the two alternates that shipped with the earlier cores, and off is a subtle change rather than an obvious one.


Core Options:

The MiSTer core includes video settings for aspect ratio, vertical scaling and cropping, scandoubler effects, and H/V positioning and sync adjustments. Wardner is horizontal, so there is no rotation toggle. The refresh selector offers Native or Multi-format, the second switching the raster to the alternate total the platform supports for multi-format PVM displays that have issues syncing with the native refresh rate.

Audio settings provide an OPL2 enable with its own volume control at 100, 125, 150 or 175 percent, and the filter selector covering off, the board's own chain, and the two alternates. Arcade dip switches are directly accessible from the OSD. Game settings include per-player auto-fire with adjustable rates, mapping options for Player 1 and Player 2, and a synced mapping mode that mirrors Player 1's layout to Player 2.

Cheats are accessible from the OSD and the whole set was written for this core rather than carried over from an existing database. Stage select places the player on any of the game's five stages at the start of a game and leaves normal progression to advance from there, and the rest cover infinite time, infinite lives, max firepower, all items, max gold, and a magic select over the flames, star, moon and solar spells. They are written against the program itself, so they hold without hanging the game.

The Pocket core provides auto-fire with per-button targeting and adjustable rates, and carries the same cheat set. Arcade dip switches available on Pocket are Game Difficulty, Extend, and Lives.

The core supports three sets, Wardner, Wardner no Mori, and Pyros.


History and Gameplay Information:

Wardner was developed by Toaplan and published by Taito, reaching Japanese arcades in September 1987 as Wardner no Mori and North America that December as Pyros, with Wardner as the title everywhere else. It was designed by Etsuhiro Wada, with music by Osamu Ōta, credited in the game as Ree.

The game is a side-scrolling action platformer rather than the shooters the rest of this hardware carries. A boy and a girl wander into Wardner's forest, the warlock turns her into a crystal ball and carries her off with him, and the boy goes after her with nothing but a short arc of flame that barely reaches past his own hands. There are five stages in the game, the forest, a building, a grove, the castle and the vaults beneath it.

Wardner has unique game mechanics; enemies and scenery drop gold and money bags, and a shop opens between stages, four times across the game. You can purchase items with collected gold, the shop sells a cape that absorbs a hit, a needle and thread to mend it, shoes that jump higher, an ocarina that calls a bird to carry you, and fairies that fight alongside you, up to two at a time. It also sells the three weapons, the star reaching the edges of the screen, the moon circling out and back, and the sun firing straight through what it hits and close to required by the last stage. Item balls dropped along the way upgrade the flame itself, up to ten shots in the air at once. Losing a life costs the purchases but not the weapon. Overall, the gameplay in Wardner is quite challenging!


Sky Shark (TP-007) and Twin Cobra (TP-011) Updates:

Both cores have been rebuilt on the current K3 framework. The previously released versions were split, one for MiSTer and one for the Pocket, with their own memory path and own set of modules; the two now build from the same GXL platform as Wardner, share the same loader, video path, and each carries a full set of their own modules along with the common modules. I've also added additional features and cheats such as stage select for both games. Twin Cobra continuously loops so the first ten stages are selectable. All cores are synchronous and designed to operate from a 98 MHz clock and exceed that timing in FMax reports.

Sound is handled by x3812, our own YM3812, in place of the implementation the earlier cores shipped with, and both games gain the filter selector Wardner has. Sky Shark's chain is the one that differs. TP-007 carries two Sallen-Key low-pass stages in its LM258, at 8.76 kHz and 10.77 kHz, ahead of the same MB3730 power amplifier the other two boards use, so its selector reads LPF for the board chain where Twin Cobra and Wardner do not. All three were traced from the boards and measured with the same oscilloscope and spectrum analyzer. Below are some examples of audio playback of the core and PCBs.

One thing to note when updating the PocketFPGA versions, the ROM files for Sky Shark and Twin Cobra have to be regenerated for the updated cores; the ones built for the earlier releases will not run on them due to loader changes.


Updates:

Every Toaplan 1 title is being updated this week for both MiSTerFPGA and the Analogue Pocket, moving them onto the same framework and module set the three games covered run off of with the additional improvements.

Rally Bike / Dash Yarou! (1987)
Truxton / Tatsujin (1988)
Demon's World / Horror Story (1989)
Hellfire (1989)
Fire Shark / Same! Same! Same! (1989)
Zero Wing (1989)
Out Zone (1990)
Vimana (1991)

Toaplan 2 / Raizing updates and new releases will follow after the Toaplan 1 update. I should be done with validation before end of month.

Teki Paki (1991)
Ghox (1991)
Pipi and Bibis (1991)
Dogyuun (1992)
FixEight (1992)
Truxton II (1992)
Batsugun (1993)
Knuckle Bash (1993)
V-Five (1993)
Snow Bros 2 (1994)Sorcer Striker (1993)
Kingdom Grandprix (1994)
Battle Garegga (1996)
Armed Police Batrider (1998)
Battle Bakraid (1999)

We will see additional post throughout the weekend, finalized information about updaters for both platforms and a new release for update_all covering key fetching amongst other things later today.

The files are carried by update_all on MiSTerFPGA and by pupdate on the Analogue Pocket. Please allow the updaters time to sync before pulling them down, and remember that the Pocket ROMs for Sky Shark and Twin Cobra have to be regenerated for the updated cores.

Disclaimer: All product names, trademarks, and registered trademarks mentioned are the property of their respective owners. "Analogue", "Analogue Pocket", "OpenFPGA", "MiSTer", "MiSTerFPGA", "Toaplan", "Taito", "Raizing", "Eighting", "Hanafram", "Tatsujin", "Zilog", "Yamaha", "Texas Instruments", "Hitachi", "Fujitsu", "Rigol", and all derivative works are trademarks, registered trademarks, or copyrighted materials of their respective holders. Use of these names does not imply endorsement or association with this post. All rights reserved to their respective owners. This post is for educational and research purposes only.

Comments (2)

D
Dr. Manga · September 18, 2026

Hard as nails this game. Thanks team!

A
Alex J Panchen · September 18, 2026

Excellent work! Any chance of high score saving ?