Capcom System 1

System Information:
    Resolution 384 x 224 (3 Graphics planes / 16 colors per tile)
    32 Palette of 16 colors per Scroll and Sprites (4 palette blocks total)
    Max sprites 256? Sprite size from 16 x 16 to 240(256?) x 240(256?)
    M680000 CPU for game.
    Z80, YM-2151 and OKIM6295 for sound.

68000 Memory Addresses:
    $000000 $1fffff 68000 ROM
    $800000 $800003 Player input ports        
    $800010 $800013 ??
    $800018 $80001f Input ports
    $800020 $800021 ? Used by Rockman ?
    $800030 $800031 Coin Control
    $800040 $800041 Forgotten Dial 0 reset
    $800048 $800049 Forgotten Dial 1 reset
    $800052 $800055 forgotten worlds
    $80005a $80005d forgotten worlds
    $800176 $800177 Extra input ports
    $800100 $8001ff Output ports
    $800180 $800181 Sound command
    $800188 $800189 Sound fade
    $8001fc $8001fc Input ports (SF Rev E)
    $900000 $92ffff Gfx ram
    $f0e000 $f0efff Slammasters protection
    $f18000 $f19fff QSound RAM
    $f1c000 $f1c001 Player 3 controls (later games)
    $f1c002 $f1c003 Player 4 controls (later games - muscle bombers)
    $f1c004 $f1c005 Coin control2 (later games)
    $f1c006 $f1c007 EEPROM
    $ff0000 $ffffff RAM
	
Sound Memory Addresses:
    $0000 $7fff ROM
    $8000 $bfff Bank 1
    $d000 $d7ff RAM
    $f000 $f000 YM2151 Register Port 0
    $f001 $f001 YM2151 Status Port 0
    $f002 $f002 OKIM6295 Status _0
    $f002 $f002 OKIM6295 Data 0
    $f004 $f004 Sound Bankswitch
    $f008 $f008 Sound Latch
    $f00a $f00a Sound timer fade

QSound Memory Addresses:
    $0000 $7fff ROM
    $8000 $bfff banked (contains music data)
    $c000 $cfff RAM
    $d007 $d007 QSound Status
    $d000 $d000 QSound Data High
    $d001 $d001 QSound Data Low
    $d002 $d002 QSound Cmd
    $d003 $d003 QSound Bank Switch
    $f000 $ffff RAM

OUTPUT PORTS (Base address $800000):
    $00-$01     OBJ RAM base (/256)
    $02-$03     Scroll1 RAM base (/256)
    $04-$05     Scroll2 RAM base (/256)
    $06-$07     Scroll3 RAM base (/256)
    $08-$09     "Other" RAM - Scroll distortion (/256)
    $0a-$0b     Palette base (/256)
    $0c-$0d     Scroll 1 X
    $0e-$0f     Scroll 1 Y
    $10-$11     Scroll 2 X
    $12-$13     Scroll 2 Y
    $14-$15     Scroll 3 X
    $16-$17     Scroll 3 Y
    $18-$19     Related to X pos (xored with $1e0 then $20 added when flip)
    $1a-$1b     Related to Y pos (xored with $100 when screen flip on)
    $1c-$1d     Related to X pos (xored with $1e0 then $20 added when flip)
    $1e-$1f     Related to Y pos (xored with $100 when screen flip on)
    $20-$21     start offset for the rowscroll matrix
    $22-$23     unknown but widely used - usually $0e. bit 0 enables rowscroll
                  on layer 2. bit 15 is flip screen.

Registers move from game to game.. following example Final Fight:
    $66-$67     Priority mask Sprites
    $68-$69     Priority mask Layer 1
    $6a-$6b     Control register (usually $003f)
    $6e-$6f     Video control register (Layer Enable)
                Scroll 1 Enable $02
                Scroll 2 Enable $0C
                Scroll 2 Enable $0C
    $70-$71     Priority mask Layer 0
    $72-$73     Priority mask Layer 2

Fixed registers:
    $80-$81     Sound command
    $88-$89     Sound fade

Scroll sizes:
    Scroll 2 (16 x 16) Width    32 (64 bytes between each horiz. position)
    Scroll 2 (16 x 16) Height   32

    Offset of each palette entry
    Sprite Palette  0 to 31 (16 colors per Palette)
    Scroll1 Palette 32 to 63 (16 colors per Palette)
    Scroll2 Palette 64 to 95 (16 colors per Palette)
    Scroll3 Palette 96 to 127 (16 colors per Palette)

    Sprite Table Size   $0800 
    Row Scroll Size     $0800 
  
Scroll 1 (8 x 8 tiles):
    Attribute word layout:
        $0001    colour
        $0002    colour
        $0004    colour
        $0008    colour
        $0010    colour
        $0020    X Flip
        $0040    Y Flip
        $0080
        $0100
        $0200
        $0400
        $0800
        $1000
        $2000
        $4000
        $8000

Scroll 2 (16 x 16 tiles):
    Attribute word layout:
        $0001    colour
        $0002    colour
        $0004    colour
        $0008    colour
        $0010    colour
        $0020    X Flip
        $0040    Y Flip
        $0080    ??? Priority
        $0100    ??? Priority
        $0200
        $0400
        $0800
        $1000
        $2000
        $4000
        $8000

Scroll 3 (32x32 tiles):
    Attribute word layout:
        $0001    colour
        $0002    colour
        $0004    colour
        $0008    colour
        $0010    colour
        $0020    X Flip
        $0040    Y Flip
        $0080
        $0100
        $0200
        $0400
        $0800
        $1000
        $2000
        $4000
        $8000

Sprites:
    Sprites are represented by a number of 8 byte values
    xx xx yy yy nn nn aa aa
    where xxxx  = x position
    yyyy        = y position
    nnnn        = tile number
    aaaa        = attribute word
        $0001  colour
        $0002  colour
        $0004  colour
        $0008  colour
        $0010  colour
        $0020  X Flip
        $0040  Y Flip
        $0080  unknown
        $0100  X block size (in sprites)
        $0200  X block size
        $0400  X block size
        $0800  X block size
        $1000  Y block size (in sprites)
        $2000  Y block size
        $4000  Y block size
        $8000  Y block size

    The end of the table (may) be marked by an attribute value of $FF00.
    To use block sprites, the sprites must be layed out in 16 tile
    (256 pixel) wide blocks.

Input:
    Player 1 input is $800000 (WORD)
        $01 Right
        $02 Left
        $04 Up
        $08 Down
        $10 Button 1    
        $20 Button 2    
        $40 Button 3(?) Not used in Final Fight.
        $80 Button 4(?) 

IRQs:
    IRQ 2 (Normal 68000 IRQ 2) is the VBlank IRQ
    IRQ 4 (?)

Comments from Paul Leaman:
The graphics are all stored in planar format with 4 bits per pixel. The
graphics appear to be organised in 4 separate banks of memory. There are
2 banks with two planes per bank for the left half of 16x16 tiles and 2
further banks for the right half of the 16x16 tiles.

The graphics are very flexible. You aren't restricted to set numbers of
characters, tiles or sprites. This makes it a perfect system for developing
new games.

There is a lump of video RAM that holds the sprites, palette, scroll 1,
scroll 2 and scroll 3. The actual base adresses of these areas within the
video RAM are controlled by registers. By altering the base addresses, it
looks like you can double-buffer sprites etc.

There are a set of output registers that control the scrolling and base
adresses of the video RAM and various layer priorities etc.



Hosted by the Vintage Gaming Network