Home

Awesome

Mega Duck / Cougar Boy Console Info

A collection of technical information and resources for the Mega Duck console brought together in one place. Much of it researched by others, some by me (minor sound reg fixes, laptop model docs, some ports and patches, etc).

Web version

References

Credits / Thanks

Sean Riddle, Ruud van Falier, Nitro2k, Toxa, Youkal3, Zwenergy, Inside Gadgets, Kuddel

Software

Homebrew Games / Programs

ROM Patches

Patches for running Game Boy games on the MegaDuck

Homebrew Music Tools

Emulators/FPGA Re-implementations

Development Tools

SDKs / Build related

Music / SFX

Peripherals

Hardware

Flash Cartridges

Display mod / LCD Header info

Laptop model Gamepad

Serial Link Port

Cartridge Pinout

AC Adapters

Handheld

Laptop

MBCs / Bank Switching

MBC Controllers

Laptop model System ROM MBC (CEFA Super Quique, Hartung Super Junior Computer):

OEM Games:

MBC type per game is according to Reddit

Implementation in emulators

Game Boy ROMs contain an embedded meta-data header which (usually) indicates the type of MBC (Memory Bank Controller) used. This allows emulators to automatically emulate the correct cart hardware (the Game Boy hardware itself ignores this and doesn't need it since the cart hardware is present).

OEM Mega Duck ROMs lack this header which means that emulators have to use other methods to infer what type of cart MBC is required by a given ROM.

The main methods for selecting the right MegaDuck cart MBC:

System ROMs

Porting from Game Boy to Mega Duck

Developing for the Mega Duck is mostly identical (cpu & integrated peripherals) to the Original Game Boy though it has a couple changes listed below.

Register and flag names will mostly follow those in the Game Boy dev hardware.inc, but may have some GBDK-isms.

Most of this research was done by others, I've added a small amount.

Summary of Hardware changes versus the Game Boy:

Physical / Hardware:

Programming:

Laptop:

Sound Register Value/Data Changes

These changes should be kept in mind when porting Sound Effects and Music Drivers written for the Game Boy.

  1. Registers NR12, NR22, NR42, and NR43 have their contents nybble swapped.
    • To maintain compatibility with the Game Boy the value to write (or the value read) can be converted this way: ((uint8_t)(value << 4) | (uint8_t)(value >> 4))
  2. Register NR32 has the volume bit values changed.
    • Game Boy: Bits:6..5 : 00 = mute, 01 = 100%, 10 = 50%, 11 = 25%
    • Mega Duck: Bits:6..5 : 00 = mute, 01 = 25%, 10 = 50%, 11 = 100%
    • To maintain compatibility witht he Game Boy the value to write (or the value read) can be converted this way: (((~(uint8_t)value) + (uint8_t)0x20u) & (uint8_t)0x60u)

Sound Register Changes Table

RegAlt NameGame BoyMega DuckData ChangeAddr Change
NR10rAUD1SWEEP0xFF100xFF20
NR11rAUD1LEN0xFF110xFF22Addr +1
NR12rAUD1ENV0xFF120xFF21nybble swapAddr -1
NR13rAUD1LOW0xFF130xFF23
NR14rAUD1HIGH0xFF140xFF24
NR21rAUD2LEN0xFF160xFF25Addr -1
NR22rAUD2ENV0xFF170xFF27nybble swap
NR23rAUD2LOW0xFF180xFF28
NR24rAUD2HIGH0xFF190xFF29
NR30rAUD3ENA0xFF1A0xFF2A
NR31rAUD3LEN0xFF1B0xFF2B
NR32rAUD3LEVEL0xFF1C0xFF2Cvolume bit swizzle
NR33rAUD3LOW0xFF1D0xFF2EAddr +1
NR34rAUD3HIGH0xFF1E0xFF2DAddr -1
NR41rAUD4LEN0xFF200xFF40
NR42rAUD4ENV0xFF210xFF42nybble swapAddr +1
NR43rAUD4POLY0xFF220xFF41nybble swapAddr -1
NR44rAUD4GO0xFF230xFF43
NR50rAUDVOL0xFF240xFF44
NR51rAUDTERM0xFF250xFF46Addr +1
NR52rAUDENA0xFF260xFF45Addr +1

Graphics Register Bit Flag Changes

LCDC FlagGame BoyMega DuckPurpose
LCDCF_B_ON.7.7(same)Bit for LCD On/Off Select
LCDCF_B_WIN9C00.6.3Bit for Window Tile Map Region Select
LCDCF_B_WINON.5.5(same)Bit for Window Display On/Off Control
LCDCF_B_BG8000.4.4(same)Bit for BG & Window Tile Data Region Select
LCDCF_B_BG9C00.3.2Bit for BG Tile Map Region Select
LCDCF_B_OBJ16.2.1Bit for Sprites Size Select
LCDCF_B_OBJON.1.0Bit for Sprites Display Visible/Hidden Select
LCDCF_B_BGON.0.6Bit for Background Display Visible Hidden Select

Graphics Register Address Changes

RegisterGame BoyMega Duck
LCDC0xFF400xFF10
STAT0xFF410xFF11
SCY0xFF420xFF12
SCX0xFF430xFF13
LY0xFF440xFF18
LYC0xFF450xFF19
DMA0xFF460xFF1A
BGP0xFF470xFF1B
OBP00xFF480xFF14
OBP10xFF490xFF15
WY0xFF4A0xFF16
WX0xFF4B0xFF17