System Information: The Taito F2 system is a fairly flexible hardware platform. It supports 4 separate layers of graphics - one 64x64 tiled scrolling background plane of 8x8 tiles, a similar foreground plane, a sprite plane capable of handling all the video chores by itself (used in e.g. Super Space Invaders) and a text plane which may or may not scroll. The text plane has 8x8 characters which are generated in RAM. Information is based on the Liquid KidsBrom. Sound is handled by a Z80 with a YM2610 connected to it. CPU 1 : 68000, uses irqs 5 & 6. Main CPU Memory Map: $000000 - $0FFFFF : ROM (not all used) $100000 - $10FFFF : 64k of RAM $200000 - $201FFF : palette RAM, 4096 total colors $300000 - $30000f : input ports and dipswitches (writes may be IRQ acknowledge) $300000 - $300001 : irq ack? liquidk (Write) $320000 - $320003 : communication with sound CPU $800000 - $803FFF : 64x64 background layer $804000 - $805FFF : 64x64 text layer $806000 - $807FFF : 256 (512?) character generator RAM $808000 - $80BFFF : 64x64 foreground layer $80C000 - $80FFFF : unused? $820000 - $820005 : x scroll for 3 layers (3rd is unknown) $820006 - $82000B : y scroll for 3 layers (3rd is unknown) $82000C - $82000F : unknown (leds?) $900000 - $90FFFF : 64k of sprite ram $B00002 - $B00002 : watchdog? Input: $300000 Dip Switch A $300002 Dip Switch A $300004 Player Input 0 $01 Up $02 Down $04 Right $08 Left $10 Button 1 $20 Button 2 $40 ? $80 Start $300006 Player Input 1 Same as player 1 $300008 Player Input 2 Same as player 1 PaletteFormat: $RGBx (2 Bytes) There are 256 palettes of 16 colors each. Sprite format: $0000: 000xxxxxxxxxxxxx : tile code ($0000 - $1fff) $0002: unused? $0004: 0000xxxxxxxxxxxx : x-coordinate absolute (-$1ff to $01ff) 0x00000000000000 : don't compensate for scrolling ?? $0006: 0000xxxxxxxxxxxx : y-coordinate absolute (-$1ff to $01ff) $0008: 00000000xxxxxxxx : color ($00 - $ff) 000000xx00000000 : flipx & flipy 00000x0000000000 : if clear, latch x & y coordinates, tile & color ? 0000x00000000000 : if set, next sprite entry is part of sequence 000x000000000000 : if clear, use latched y coordinate, else use current y 00x0000000000000 : if set, y += 16 0x00000000000000 : if clear, use latched x coordinate, else use current x x000000000000000 : if set, x += 16 $000A - $000F : unused? Additionally, the first 3 sprite entries are configuration info instead of actual sprites: offset $24: sprite x offset offset $26: sprite y offset Background/Foreground/Text Layer: Format of a Foreground/Background Tilemap: $AABBCCCC (4 Bytes) AA Flip. $80 is Vertical $40 is Horizontal BB Palette (0 to $FF) CCCC Tile Number. Format of a Text tilemap: $ABCC (2 Bytes) A Flip. $8 is Vertical $4 is Horizontal B Palette (0 - 15) CC Tilenumber (0 - 255) The screen is flipped horizontally and vertically. There are -256 bytes between vertical positions, and -4 bytes between horizontal positions. The font graphics are stored starting at $806000, and are 4096 bytes long. Scroll Registers: $820000 - $820001 Background layer X Scroll $820002 - $820003 Foreground layer X Scroll $820004 - $820005 ? layer X Scroll $820006 - $820007 Background layer Y Scroll $820008 - $820009 Foreground layer Y Scroll $82000A - $82000B ? layer X Scroll Graphics Format: width = 16 height = 16 total = 8192 planes = 4 planeoffsets = 0 1 2 3 xoffsets = 4 0 12 8 20 16 28 24 36 32 44 40 52 48 60 56 yoffsets = 0 64 128 192 256 320 384 448 512 576 640 704 768 832 896 960 charincrement = 1024 width = 8 height = 8 total = 32768 planes = 4 planeoffsets = 0 1 2 3 xoffsets = 8 12 0 4 24 28 16 20 yoffsets = 0 32 64 96 128 170 192 224 charincrement = 256 width = 8 height = 8 total = 256 planes = 2 planeoffsets = 0 8 xoffsets = 0 1 2 3 4 5 6 7 yoffsets = 0 16 32 48 64 80 96 112 charincrement = 128