• Contact
  • Journal
  • Home
  • Arcade
  • Frogger (Sound)
  • Hardware
  • Site
  • Page
  • Amiga
    • Rainbow Islands
      • 1loader-dec
      • 1loader
      • boot
      • orig-boot
      • Journal
  • Arcade
    • Asteroids 80%
      • Hardware
      • RAMUse
      • Code

      • DVG
      • VectorROM

      • Journal
    • Crazy Climber 1%
      • BigSpriteGraphics.pdf
      • Buildings.pdf
      • cclimber.asm
      • CharEnc.inc
      • CrazyClimberMemoryMapInfo.pdf
      • GraphicsAndCharacterAssetInfo.pdf
      • MemoryMap.inc
    • Defender 75%
      • RAMUse
      • Hardware
      • Bank1
      • Bank2
      • Bank3
      • Bank7
      • BankFixed
      • Mapping.txt
      • SoundHardware
      • SoundRAMUse
      • SoundCode
      • Defender-Theory-Early.pdf
      • Defender-Theory-Later.pdf
      • Defender.CPU.jpg
      • Defender.ROM.B&W.jpg
      • Defender.Vid.B&W.jpg
      • SoundROM.txt
    • DonkeyKong
      • Hardware
      • RAMUse
      • Code
    • Frogger (Sound)
      • SoundHardware
      • SoundRAMUse
      • SoundCode

      • Hardware
      • RAMUse
      • Code

      • GFX

      • Journal
    • Galaga 5%
      • CPU1 (Main)
      • CPU2 (Secondary)
      • CPU3 (Sound)
      • GFX1 (Characters)
      • GFX2 (Sprites)
      • PROMcolors
      • PROMpaletteChar
      • PROMpaletteSprite

      • CPU1Fix

      • Journal
    • Moon Patrol 75%
      • Hardware
      • RAMUse
      • Code

      • GFX1 (Text)
      • GFX2 (Sprites)
      • GFX3 (Mountains)
      • GFX4 (Hills)
      • GFX5 (City)
      • ImageBackgroundColors
      • SpriteColors
      • SpriteColorSets
      • TextColors

      • MoonPatrolSound
      • SoundHardware
      • SoundRAMUse
      • SoundCode

      • Journal
    • Omega Race 10%
      • Hardware
      • RAMUse
      • MainBoard

      • SoundHardware
      • SoundRAMUse
      • SoundBoard

      • DVGPROM
      • VectorROM

      • Journal
    • Phoenix 90%
      • Hardware
      • RAMUse
      • Code

      • Background
      • Foreground

      • Journal

      • Scramble HHi
        • phoenixj-func-main2.pdf
        • phoenixj-func-main2.scap
        • phoenixj.asm-may2025.txt
        • phoenixj.asm-may2025.txt.pdf
    • Space Invaders
      • invaders.asm
      • Hardware
      • RAMUse
      • Code

      • Journal
    • The Pit
      • Hardware
      • RAMUse
      • Code
    • Time Pilot (Sound)
      • SoundHardware
      • SoundRAMUse
      • SoundCode

      • Hardware
      • RAMUse
      • Code

      • Journal
    • Sea Wolf 1%
      • Hardware
      • RAMUse
      • Code

      • Journal
    • Scramble 1%
      • SoundHardware
      • SoundRAMUse
      • SoundCode

      • Journal
  • Atari2600
    • Stella (Hardware Info)
    • Asteroids 5%
      • RAMUse
      • Code

      • Journal
    • Battle Zone 1%
      • RAMUse
      • Code

      • Journal
    • Chess 1%
      • RAMUse
      • Code

      • Journal
    • Combat 10%
      • RAMUse
      • Code
      • CodePAL

      • Journal
    • Double Gap
      • Code
      • DoubleGap.asm

      • Journal
    • Entombed 1%
      • RAMUse
      • Code

      • Journal
    • ET 1%
      • RAMUse
      • Code

      • Journal
    • Burger Time 1%
      • RAMUse
      • CodeBank0
      • CodeBank1
      • CodeBank2
      • CodeBank3
      • CodeBank4
      • CodeBank5
      • CodeBank6
      • CodeBank7

      • Journal
    • Missile Command 1%
      • RAMUse
      • Code

      • Journal
    • Space Invaders 1%
      • RAMUse
      • Code

      • Journal
  • ColossalCave
    • CodeOrg
    • DataOrg

    • Code350
    • Data350
  • CoCo
    • Hardware
    • Early Work
    • Pyramid
      • RAMUse
      • Code

      • Journal
    • Raaka Tu
      • RAMUse
      • Code

      • Journal
    • Bedlam
      • RAMUse
      • Code

      • Journal
    • Madness & Minotaur
      • Walk Through
        • after_start.txt
        • after_start.cas
        • after_1.txt
        • after_1.cas
        • after_2.txt
        • after_2.cas
        • after_3.txt
        • after_3.cas
        • after_4.txt
        • after_4.cas
        • after_5.txt
        • after_5.cas
        • after_6.txt
        • after_6.cas
        • after_7.txt
        • after_7.cas
        • after_8.txt
        • after_8.cas
        • after_9.txt
        • after_9.cas
        • after_10.txt
        • after_10.cas
        • after_11.txt
        • after_11.cas
        • after_12.txt
        • after_12.cas
        • after_13.txt
        • after_13.cas
        • after_14.txt
        • after_14.cas
        • after_15.txt
        • after_15.cas
        • after_16.txt
        • after_16.cas
        • after_17.txt
        • after_17.cas
        • after_18.txt
        • after_18.cas
        • after_19.txt
        • after_19.cas
        • after_20.txt
        • after_20.cas
        • after_21.txt
        • after_21.cas
        • after_22.txt
        • after_22.cas
        • after_23.txt
        • after_23.cas
        • after_24.txt
        • after_24.cas
        • after_25.txt
        • after_25.cas
      • RAMUse
      • Code

      • SaveGameViewer

      • Journal
    • Mega-Bug
      • RAMUse
      • Code

      • Journal
    • Popcorn
      • RAMUse
      • Code

      • Journal
    • Daggorath
      • RAMUse
      • Code

      • Level Maps

      • Journal
    • Downland 5%
      • RAMUse
      • Code

      • Journal
    • Audio Analyzer 5%
      • RAMUse
      • Code

      • Journal
    • Doubleback
      • RAMUse
      • Code

      • Journal
  • NES
    • Zelda 5%
      • Hardware
      • RAMUse
      • Bank0
      • Bank1
      • Bank2
      • Bank3
      • Bank4
      • Bank5
      • Bank6
      • Bank7

      • Journal
    • Kid Icarus 1%
      • Hardware
      • RAMUse
      • Bank0
      • Bank1
      • Bank2
      • Bank3
      • Bank4
      • Bank5
      • Bank6
      • Bank7

      • Journal
  • Gameboy
    • Hardware
    • Link's Awakening 1%
      • RAMUse
      • Bank00
      • Bank01
      • Bank02
      • Bank03
      • Bank04
      • Bank05
      • Bank06
      • Bank07
      • Bank08
      • Bank09
      • Bank0A
      • Bank0B
      • Bank0C
      • Bank0D
      • Bank0E
      • Bank0F
      • Bank10
      • Bank11
      • Bank12
      • Bank13
      • Bank14
      • Bank15
      • Bank16
      • Bank17
      • Bank18
      • Bank19
      • Bank1A
      • Bank1B
      • Bank1C
      • Bank1D
      • Bank1E
      • Bank1F

      • Journal
    • Tetris 1%
      • RAMUse
      • Code

      • Journal
  • TRS80
    • HardwareLevel2
    • HardwareLevel1
    • HardwareDisk
    • HauntedHouse
      • RAMUse1
      • Code1
      • RAMUse2
      • Code2

      • Journal
    • Pyramid
      • RAMUse
      • Code

      • RAMUse1
      • Code1

      • Journal
    • RaakaTu
      • RAMUse
      • Code

      • Journal
    • Bedlam
      • RAMUse
      • Code

      • Journal
    • Xenos
      • RAMUse
      • Code
      • Section1
      • Section2
      • Section3
      • Section4
      • Section5
      • Section6
      • Section7
      • Section8
      • Section9
      • SSVDOBJS
      • USVDOBJS

      • Journal
  • Virus
    • Morris Worm 1%
      • Journal
    • Stoned
      • Journal

  • Tools
    • Blend
      • blend.zip

      • Journal
  • Main Board Hardware
    • Memory & I/O map
    • IN0 — joystick L/R, service, coins (read at 0xE000, active-low, idle 0xFF)
    • IN1 — start buttons + lives DIP (read at 0xE002, active-low, idle 0xFC)
    • IN2 — joystick U/D, coinage + cabinet DIPs (read at 0xE004, active-low, idle 0xF1)
    • Standalone D0 control latches (one address per line, data on bit 0)
    • Video — tilemap + object RAM

Main Board Hardware

Frogger runs on Konami's 1981 Frogger board, a member of the Galaxian video family (MAME driver `galaxian/galaxian.cpp`, machine `frogger`). The main CPU is a Zilog Z80 clocked at 3.072 MHz (18.432 MHz / 6), giving 50688 cycles/frame at a 60.606 Hz refresh; the native raster is 256×224, displayed rotated (MAME `ROT90`).

A second Z80 drives the sound hardware — an AY-3-8910 PSG — receiving command bytes from the main CPU through the second of the board's two i8255 PPIs (below).

Three hardware invariants matter when reading the map below: (1) a read and a write at one address can be different devices — the program writes work RAM at `0x8800` region addresses while a read of `0x8800` kicks the watchdog and returns `0xFF`; (2) all memory-mapped I/O above `0xC000` runs through two i8255 PPIs in mode 0, so a port's direction is set by control words the boot code writes — `PPI0` carries the three input ports, `PPI1` the sound-command latch and audio interrupt; (3) a handful of single-bit control lines are standalone D0 latches — one address per line, the data on bit 0 — for the NMI enable, the two screen-flip bits, and the two coin counters.

Memory & I/O map

Address Name Description
0000:3fff rom Program ROM, 16384 bytes (`frogger` main-CPU parts frogger.26 + frogger.27 + frsm3.7)
8000:87ff workRam Work RAM (see Work RAM)
8800 watchdog R: watchdog reset — the read kicks the dog and returns 0xFF; mirror at 0x8800+0x07ff
a800:abff videoRam Video RAM / tilemap (galaxian_videoram_w), 0x20-wide rows; mirror mask 0x0400
b000:b0ff objRam Object RAM (galaxian_objram_w): per-column scroll+colour 0x00-0x3F, 8 sprites × 4 bytes 0x40-0x5F, bullets 0x60-0x7F; mirror mask 0x0700
b808 irqEnable W (D0): NMI enable — the main loop sets it to arm the vblank NMI, clears it to mask
b80c flipY W (D0): screen flip Y (cocktail)
b810 flipX W (D0): screen flip X (cocktail)
b818 coinCounter0 W (D0): coin counter 0
b81c coinCounter1 W (D0): coin counter 1
d000 soundLatch W: sound-command byte to the sound CPU (PPI1 port A)
d002 soundControl W: sound control (PPI1 port B) — a falling edge of bit 3 raises the audio /INT, bit 4 mutes
e000 in0 R: IN0 — joystick left/right, service, coins (PPI0 port A, active-low)
e002 in1 R: IN1 — start buttons, lives DIP (PPI0 port B, active-low)
e004 in2 R: IN2 — joystick up/down, coinage + cabinet DIPs (PPI0 port C, active-low)

IN0 — joystick L/R, service, coins (read at 0xE000, active-low, idle 0xFF)

Bit Mask Input
2 0x04 Service
4 0x10 Right
5 0x20 Left
6 0x40 Coin 2
7 0x80 Coin 1

Bit 0 (0x01) carries Up in the flipped cocktail view; bits 1 and 3 are unused.

IN1 — start buttons + lives DIP (read at 0xE002, active-low, idle 0xFC)

Bit Mask Input
0–1 0x03 DIP: lives (default 0x00 = 3)
6 0x40 Start 2P
7 0x80 Start 1P

Bits 4–5 carry Right/Left in the cocktail view; bits 2 and 3 are unused. The lives DIP sits in this port (default `0x00` = 3), which is why the idle read is `0xFC`, not `0xFF`.

IN2 — joystick U/D, coinage + cabinet DIPs (read at 0xE004, active-low, idle 0xF1)

Bit Mask Input
1–2 0x06 DIP: coinage (default 0x00 = 1 coin / 1 credit)
3 0x08 DIP: cabinet (default 0x00 = upright; set = cocktail, screen flip)
4 0x10 Up
6 0x40 Down

Bit 0 (0x01) carries Down in the cocktail view; bits 5 and 7 are unused. The two DIP bits seated here make the idle read `0xF1`.

Standalone D0 control latches (one address per line, data on bit 0)

Five single-bit lines are written as their own addresses, each taking the value on data bit 0 (the decode masks the address, so mirrors resolve to the same latch).

Address Line
b808 NMI enable (the main loop writes 1 to arm the vblank NMI)
b80c Screen flip Y (cocktail)
b810 Screen flip X (cocktail)
b818 Coin counter 0
b81c Coin counter 1

Video — tilemap + object RAM

The display is a Galaxian-family tilemap plus an object layer. Video RAM at `0xA800`–`0xABFF` holds one tile code per cell over a 0x20-wide grid (drawn rotated). Object RAM at `0xB000`–`0xB0FF` is three regions in one page: the first 0x40 bytes are per-column scroll and colour (the river and road lanes scroll by writing these — column N takes its scroll from objRam[N×2]), `0x40`–`0x5F` are the eight hardware sprites of four bytes each (the frog, the fly, and the sprite-drawn objects), and `0x60`–`0x7F` is the bullet region (unused by Frogger's play). Each sprite record decodes as: byte0 → position on one axis; byte1 → tile `code & 0x3f` plus flip-X (0x40) / flip-Y (0x80); byte2 → colour; byte3 → the other axis.