Contents |
No$nes Controls |
F1..F5 Enable/Disable Sound Channel 1-5 F9 Enable/Disable Showing Screen Splits as dotted line NUM * Hard Reset NUM / Soft Reset NUM - Switch to Debug Mode NUM + Disable Realtime Delays and use 10% frameskip (while held down) BS Disable Realtime Delays (same as above, for notebook keyboards) |
INS Flip Disk (some games ignore fast flips; hold down for some seconds) |
INS Credit Left Coin Slot HOME Credit Right Coin Slot PGUP Credit Service Button 1..4 Button 1..4 (aliases for NES Start/Select buttons) 0 DIP-Switch Window |
INS Credit Coin Slot 1 HOME Credit Coin Slot 2 (works only if enabled via DIP switches) PGUP Service Button (add credit) (during reset: bookkeeping) DEL Reset Button (if any) END Enter Button (also works via Num-Enter) PGDN Channel Select Button 0 DIP-Switch Window Mouse Zapper (Lightgun Move/Trigger) |
INS XXX Insert Coin HOME RESET Button PGUP XXX GAME/TV Button 123456 1st..6th Keyswitch Position (from left) [=INTENDED, see Note] 0 DIP-Switch Window Mouse Zapper (Lightgun Move/Trigger) |
BS/DEL DEL HOME CLR TAB ESC END STOP L-ALT GRPH R-ALT KANA |
123456 Buttons for Player 1-6 |
Joypad Button A --> "RUN"-Button (or, used as "Shoot-Right" in Hyper Sports) Joypad Button B --> "JUMP"-Button (or, used as "Shoot-Left" in Hyper Sports) |
Mouse Move Left Mouse Button Trigger |
Mouse (left/right) Move Left Mouse Button Button |
Mouse Move & Touch Left Mouse Button Click |
Mouse (move) Move Left/Right Button Left/Right Button (A/B Button on Trackball) Middle Button or ESC Return mouse to operating system |
Gamepad Analog X/Y/Z/R Position X/Y/Z and Wrist Rotation Gamepad Button 1..4 Thumb/Index/Middle/Ring Finger Flex Gamepad Digital POV Keypad DPAD Keyboard 0..9 Keypad 0..9 Keyboard Buttons/DPAD Keypad A,B,Start,Select,DPAD XXX Keypad Prog,Center,Enter |
Page Down Top-most sensor ;\for push-button NUM-/ NUM-* Upper Left/Right sensors in upper field ; style usage (with NUM-8 NUM-9 Lower Left/Right sensors in upper field ; sensor=min/max) NUM-5 Upper Left sensor in lower field ; (eg. Nuclear Rat, NUM-2 NUM-3 Lower Left/Right sensors in lower field ; and Rock on Air) Page Up Bottom-most sensor ;/ Gamepad Analog X Top-most sensor ;\for analog usage Gamepad Analog Y Bottom-most sensor, or, ; (eg. Hose'em Down Gamepad Analog Y Lower-Left sensor in lower field ;/and Rock on Air) |
Gamepad Analog X Steering Handles Left/Right Gamepad Analog Y Forward=GearLo, Back=GearHi Gamepad Analog Z Forward=Accelerate Slow/Fast, Back=Accelerate Turbo Gamepad Button 1,2,3,4 Brake,Wheelie,Start,Select |
Digital Joypad/Keyboard Pachinko Joypad Buttons Analog Joypad Forward Pachinko Analog Dial |
INS-Key Paste numeric ASCII string from clipboard and Send barcode DEL-Key Manually Clear input buffer (without sending) Keypad 0..9 Manually Key-in Barcode digits Keypad Dot Manually Confirm input and Send (or re-send) barcode |
A..N Drop Card A..N (or N=Draw new card) Space Same as N F1..F7 Function Keys (Select, Start, and five "japanese" keys) Tab/LeftCtrl Same as F1 (Select) Enter Same as F2 (Enter) |
12345... 1st Octave (12 keys) (only last 7 keys used on Doremikko) QWERT... 2nd Octave (12 keys) (all keys used) ASDFG... 3rd Octave (12 keys) (all keys used) ZXCVB... 4th Octave (10 keys) (only first 5 keys used on Doremikko) Rshift/Ctrl 4th Octave (last 2) (Miracle only) NUM-Dot 5th Octave (1 key) (Miracle only) NUM-0..7 Control Buttons 0..7 (Miracle only) Left Shift Sustain Foot Pedal (Miracle only) |
QWER --> Upper row (Side B) RTYU --> Upper Row (Side A, or Tap-tap Mat) ASDF --> Middle row (Side B) FGHJ --> Middle Row (Side A, or Tap-tap Mat) ZXCV --> Lower row (Side B) VBNM --> Lower Row (Side A, or Tap-tap Mat) |
Num-7,8,9 Left Hook, N/A ,Right Hook Num-4,5,6 Left Jabb, Straight ,Right Jabb Num-1,2,3 Left Push, Body ,Right Push |
Gamepad Analog X Pulse Gamepad Analog Y Speed Gamepad Analog Z Watts F1 or Enter Button F1 (START) F2 Button F2 (DISPLAY) F3 Button F3 (SET) F4 or End Button RESET PGUP or Up Button Plus (UP) PGDN or Down Button Minus (DOWN) |
XED Editor |
XED About |
:Chapter IV ;:---Sound Engine--- |
XED Hotkeys |
Up Move line up Down Move line down Left Move character left Right Move character right Pgup Scroll page up / to top of screen Pgdn Scroll page down / to bottom of screen Ctrl+Pgup Go to start of file (or Ctrl+Home) Ctrl+Pgdn Go to end of file (or Ctrl+End) Home Go to start of line End Go to end of line Ctrl+Left Move word left Ctrl+Right Move word right Ins Toggle Insert/Overwrite mode Del Delete char below cursor Backspace Delete char left of cursor Tab Move to next tabulation mark Enter New line/paragraph end Esc Quit (or Alt+X, F3+Q, Ctrl+K+D, Ctrl+K+Q, Ctrl+K+X) |
Ctrl+Y Delete line (or Alt+K) Alt+L Delete to line end (or Ctrl+Q,Y) Alt+V Caseflip to line end Ctrl+V Caseflip from line beginning |
Alt+F Norton - search/replace, forwards Ctrl+F Norton - search/replace, backwards Alt+C Norton - continue search/replace, forwards Ctrl+C Norton - continue search/replace, backwards |
Ctrl+Q,F Wordstar - search Ctrl+Q,A Wordstar - replace Ctrl+L Wordstar - continue search/replace |
F3,E Save+exit F3,S Save (or Ctrl+K,S) F3,N Edit new file F3,A Append a file |
Shift+Cursor Select block begin..end Ctrl+K,B Set block begin (or F4,S) Ctrl+K,K Set block end (or F4,S) Ctrl+K,H Remove/hide block markers (or F4,R) F4,L Mark line including ending CRLF (or Ctrl+K,L) F4,E Mark line excluding ending CRLF Ctrl+K,T Mark word Ctrl+K,N Toggle normal/column blocktype |
Shift+Ins Paste from Clipboard Shift+Del Cut to Clipboard Ctrl+Ins Copy to Clipboard Ctrl+Del Delete Block |
Ctrl+K,C Copy block (or F4,C) Ctrl+K,V Move block (or F4,M) Ctrl+K,Y Delete block (or F4,D) Ctrl+K,P Print block (or F7,B) Ctrl+Q,B Find block begin (or F4,F) Ctrl+Q,K Find block end (or F4,F) Ctrl+K,R Read block from disk towards cursor location Ctrl+K,W Write block to disk Ctrl+K,U Unindent block (delete one space at begin of each line) Ctrl+K,I Indent block (insert one space at begin of each line) F5,F Format block (with actual x-wrap size) (or ;Ctrl+B) F8,A Add values within column-block |
F11 Setup menu (or F8,S) F5,S Save editor configuration F5,L Set line len for word wrap (or Ctrl+O,R) F5,W Wordwrap on/off (or Ctrl+O,W) (*) F5,I Auto indent on/off (or Ctrl+O,I) F5,T Set tab display spacing |
F1 Help F2 Status (displays info about file & currently selected block) F8,M Make best fill tabs F8,T Translate all tabs to spaces SrcLock Freeze cursor when typing text ("useful" for backwards writing) Ctrl+O,C Center current line Ctrl+K,# Set marker (#=0..9) Ctrl+Q,# Move to marker (#=0..9) Ctrl+Q,P Move to previous pos F6,C Condensed display mode on/off (*) Ctrl+G Go to line nnnn (or F6,G) (or commandline switch /l:nnnn) |
Tab Toggle between HEX and ASC mode (or Shift+Left/Right) Ctrl+Arrow Step left/right one full byte (instead one single HEX digit) Ctrl+G Goto hex-address Ctrl+K,S Save file (as usually) |
F7,P Print file F7,B Print block (or Ctrl+K,P) F7,E Eject page F7,S Set page size |
XED Assembler/Debugger Interface |
XED Commandline based standalone version |
no$xxx /x <filename> Edit text file in standalone mode no$xxx /b <filename> Edit binary file in standalone hexedit mode |
<name> Filename, optionally d:\path\name.ext /? Displays commandline help /l:<nnn> Moves to line number nnn after loading |
VSEG:77*2 Exit code (00h=Exit normal, F9h=Exit by F9-key) VSEG:78*2 Line number (Lower 8bits, 1..65536 in total) VSEG:79*2 Line number (Upper 8bits) |
No$nes Emulation Files |
DISKSYS.ROM 8Kbytes Famicom Disk System (FDS) BIOS PC10BIOS.ROM 16Kbytes Playchoice 10 (PC10) BIOS (IC "8T") PC10CHAR.ROM 24Kbytes Playchoice 10 (PC10) Charset (ICs "8P+8M+8K") |
Tech Data |
Memory Maps |
0000h-07FFh Internal 2K Work RAM (mirrored to 800h-1FFFh) 2000h-2007h Internal PPU Registers (mirrored to 2008h-3FFFh) 4000h-4017h Internal APU Registers 4018h-5FFFh Cartridge Expansion Area almost 8K 6000h-7FFFh Cartridge SRAM Area 8K 8000h-FFFFh Cartridge PRG-ROM Area 32K |
0000h-0FFFh Pattern Table 0 (4K) (256 Tiles) 1000h-1FFFh Pattern Table 1 (4K) (256 Tiles) 2000h-23FFh Name Table 0 and Attribute Table 0 (1K) (32x30 BG Map) 2400h-27FFh Name Table 1 and Attribute Table 1 (1K) (32x30 BG Map) 2800h-2BFFh Name Table 2 and Attribute Table 2 (1K) (32x30 BG Map) 2C00h-2FFFh Name Table 3 and Attribute Table 3 (1K) (32x30 BG Map) 3000h-3EFFh Mirror of 2000h-2EFFh 3F00h-3F1Fh Background and Sprite Palettes (25 entries used) 3F20h-3FFFh Mirrors of 3F00h-3F1Fh |
00-FF Sprite Attributes (256 bytes, for 64 sprites / 4 bytes each) |
I/O Map |
2000h - PPU Control Register 1 (W) 2001h - PPU Control Register 2 (W) 2002h - PPU Status Register (R) 2003h - SPR-RAM Address Register (W) 2004h - SPR-RAM Data Register (RW) 2005h - PPU Background Scrolling Offset (W2) 2006h - VRAM Address Register (W2) 2007h - VRAM Read/Write Data Register (RW) 4000h - APU Channel 1 (Rectangle) Volume/Decay (W) 4001h - APU Channel 1 (Rectangle) Sweep (W) 4002h - APU Channel 1 (Rectangle) Frequency (W) 4003h - APU Channel 1 (Rectangle) Length (W) 4004h - APU Channel 2 (Rectangle) Volume/Decay (W) 4005h - APU Channel 2 (Rectangle) Sweep (W) 4006h - APU Channel 2 (Rectangle) Frequency (W) 4007h - APU Channel 2 (Rectangle) Length (W) 4008h - APU Channel 3 (Triangle) Linear Counter (W) 4009h - APU Channel 3 (Triangle) N/A (-) 400Ah - APU Channel 3 (Triangle) Frequency (W) 400Bh - APU Channel 3 (Triangle) Length (W) 400Ch - APU Channel 4 (Noise) Volume/Decay (W) 400Dh - APU Channel 4 (Noise) N/A (-) 400Eh - APU Channel 4 (Noise) Frequency (W) 400Fh - APU Channel 4 (Noise) Length (W) 4010h - APU Channel 5 (DMC) Play mode and DMA frequency (W) 4011h - APU Channel 5 (DMC) Delta counter load register (W) 4012h - APU Channel 5 (DMC) Address load register (W) 4013h - APU Channel 5 (DMC) Length register (W) 4014h - SPR-RAM DMA Register (W) 4015h - DMC/IRQ/length counter status/channel enable register (RW) 4016h - Joypad #1 (RW) 4017h - Joypad #2/APU SOFTCLK (RW) |
4020h - VS Unisystem Coin Acknowledge 4020h-40FFh - Famicom Disk System (FDS) 4100h-FFFFh - Various addresses used by various cartridge mappers |
Picture Processing Unit (PPU) |
PPU Reset |
NTSC: At END of First Vblank (261 scanlines after reset) PAL: At END of First Vblank (311 scanlines after reset) |
PPU Control and Status Registers |
Bit7 Execute NMI on VBlank (0=Disabled, 1=Enabled) Bit6 PPU Master/Slave Selection (0=Master, 1=Slave) (Not used in NES) Bit5 Sprite Size (0=8x8, 1=8x16) Bit4 Pattern Table Address Background (0=VRAM 0000h, 1=VRAM 1000h) Bit3 Pattern Table Address 8x8 Sprites (0=VRAM 0000h, 1=VRAM 1000h) Bit2 Port 2007h VRAM Address Increment (0=Increment by 1, 1=Increment by 32) Bit1-0 Name Table Scroll Address (0-3=VRAM 2000h,2400h,2800h,2C00h) (That is, Bit0=Horizontal Scroll by 256, Bit1=Vertical Scroll by 240) |
Bit7-5 Color Emphasis (0=Normal, 1-7=Emphasis) (see Palettes chapter) Bit4 Sprite Visibility (0=Not displayed, 1=Displayed) Bit3 Background Visibility (0=Not displayed, 1=Displayed) Bit2 Sprite Clipping (0=Hide in left 8-pixel column, 1=No clipping) Bit1 Background Clipping (0=Hide in left 8-pixel column, 1=No clipping) Bit0 Monochrome Mode (0=Color, 1=Monochrome) (see Palettes chapter) |
Bit7 VBlank Flag (1=VBlank) Bit6 Sprite 0 Hit (1=Background-to-Sprite0 collision) Bit5 Lost Sprites (1=More than 8 sprites in 1 scanline) Bit4-0 Not used (Undefined garbage) |
PPU SPR-RAM Access Registers |
D7-D0: 8bit address in SPR-RAM (00h-FFh) |
D7-D0: 8bit data written to SPR-RAM. |
Bit7-0 Upper 8bit of source address (Source=N*100h) (Lower bits are zero) |
PPU VRAM Access Registers |
Port 2005h-1st write: Horizontal Scroll Origin (X*1) (0-255) Port 2005h-2nd write: Vertical Scroll Origin (Y*1) (0-239) Port 2000h-Bit0: Horizontal Name Table Origin (X*256) Port 2000h-Bit1: Vertical Name Table Origin (Y*240) |
Port 2006h-1st write: VRAM Address Pointer MSB (6bit) Port 2006h-2nd write: VRAM Address Pointer LSB (8bit) |
Bit7-0 8bit data read/written from/to VRAM |
PPU Scrolling |
VRAM-Pointer Scroll-Reload A8 2006h/1st-Bit0 <--> Y*64 2005h/2nd-Bit6 A9 2006h/1st-Bit1 <--> Y*128 2005h/2nd-Bit7 A10 2006h/1st-Bit2 <--> X*256 2000h-Bit0 A11 2006h/1st-Bit3 <--> Y*240 2000h-Bit1 A12 2006h/1st-Bit4 <--> Y*1 2005h/2nd-Bit0 A13 2006h/1st-Bit5 <--> Y*2 2005h/2nd-Bit1 - 2006h/1st-Bit6 <--> Y*4 2005h/2nd-Bit2 - 2006h/1st-Bit7 <--> - - A0 2006h/2nd-Bit0 <--> X*8 2005h/1st-Bit3 A1 2006h/2nd-Bit1 <--> X*16 2005h/1st-Bit4 A2 2006h/2nd-Bit2 <--> X*32 2005h/1st-Bit5 A3 2006h/2nd-Bit3 <--> X*64 2005h/1st-Bit6 A4 2006h/2nd-Bit4 <--> X*128 2005h/1st-Bit7 A5 2006h/2nd-Bit5 <--> Y*8 2005h/2nd-Bit3 A6 2006h/2nd-Bit6 <--> Y*16 2005h/2nd-Bit4 A7 2006h/2nd-Bit7 <--> Y*32 2005h/2nd-Bit5 - - <--> X*1 2005h/1st-Bit0 - - <--> X*2 2005h/1st-Bit1 - - <--> X*4 2005h/1st-Bit2 |
[2006h.1st]=(X/256)*4 + (Y/240)*8 [2005h.2nd]=((Y MOD 240) AND C7h) [2005h.1st]=(X AND 07h) [2006h.2nd]=(X AND F8h)/8 + ((Y MOD 240) AND 38h)*4 |
PPU Tile Memory |
PPU Background |
Bit0-1 Palette Number for upperleft 16x16 pixels of the 32x32 area Bit2-3 Palette Number for upperright 16x16 pixels of the 32x32 area Bit4-5 Palette Number for lowerleft 16x16 pixels of the 32x32 area Bit6-7 Palette Number for lowerright 16x16 pixels of the 32x32 area |
Square Horizontal Scroll Vertical Scroll NT0 NT1 NT0 left/right NT1 NT0 above/below NT2 NT2 NT3 NT2 left/right NT3 NT1 above/below NT3 |
_Name Table____________NT0___NT1___NT2___NT3___Purpose______________ Horizontal Mirroring BLK0 BLK0 BLK1 BLK1 Vertical Scrolling Vertical Mirroring BLK0 BLK1 BLK0 BLK1 Horizontal Scrolling Four-screen BLK0 BLK1 BLK2 BLK3 Four-Way Scrolling |
PPU Sprites |
Vertical Position-1 (FFh,00h..EEh=Scanline 0..239, EFh..FEh=Not displayed) |
Bit7-0 Specifies 8bit tile number And, Pattern Table selected by Bit 3 in PPU Control Register 1 |
Bit7-1 Upper 7bit of tile number (N=0-127 uses Tiles N*2 and N*2+1) Bit0 Pattern Table Address (0=VRAM 0000h, 1=VRAM 1000h) |
7 Vertical Flip (0=Normal, 1=Mirror) 6 Horizontal Flip (0=Normal, 1=Mirror) 5 Background Priority (0=Sprite in front of BG, 1=Sprite Behind BG) 4-2 Not used (Always zero when reading from SPR-RAM) 1-0 Sprite Palette (0-3=Sprite Palette 0-3) |
Horizontal Position (00h..FFh) |
Sprite 0 = highest priority Sprite 63 = lowest priority |
PPU Palettes |
3F00h Background Color (Color 0) 3F01h-3F03h Background Palette 0 (Color 1-3) 3F05h-3F07h Background Palette 1 (Color 1-3) 3F09h-3F0Bh Background Palette 2 (Color 1-3) 3F0Dh-3F0Fh Background Palette 3 (Color 1-3) 3F11h-3F13h Sprite Palette 0 (Color 1-3) 3F15h-3F17h Sprite Palette 1 (Color 1-3) 3F19h-3F1Bh Sprite Palette 2 (Color 1-3) 3F1Dh-3F1Fh Sprite Palette 3 (Color 1-3) |
3F04h,3F08h,3F0Ch - Three general purpose 6bit data registers. 3F10h,3F14h,3F18h,3F1Ch - Mirrors of 3F00h,3F04h,3F08h,3F0Ch. 3F20h-3FFFh - Mirrors of 3F00h-3F1Fh. |
Bit7-6 Not used (contains garbage when reading palette memory) Bit5-4 Luminance (Grayscale) (0-3) Bit3-0 Chrominance (Color) (0-F) |
|__0__|__1___2___3___4___5___6___7___8___9___A___B___C_|_D__|__E___F__| |White|..Blue..Magenta..Red......Yellow...Green....Blue|Gray| Black | |
Luminance__0Xh_______1Xh__________2Xh_________3Xh___________________ Color 0: Med Gray, Light Gray, White, White Color 1-C: (Dark), (Normal), (Brighter), (Brightest/Pastelized) Color D: Reserved, Black, Dark Gray, Lighter Gray Color E-F: Black, Black, Black, Black |
000b Normal 001b Green 010b Brown 100b Blue |
PPU Dimensions & Timings |
Type NTSC PAL Dendy Master Clock (X1) 21.47727MHz 26.6017125MHz Like PAL Color Clock 3.579545MHz=X1/6 4.43361875MHz=X1/6 Like PAL Dot Clock 5.3693175MHz=X1/4 5.3203425MHz=X1/5 Like PAL CPU Clock 1.7897725MHz=X1/12 1.66260703MHz=X1/16 1.773448MHz=X1/15 Frame Rate 60.09914261Hz 50.00697891Hz Like PAL |
NTSC PAL Dendy ? 1 ? Pre-Render Time 240? 239 240? Rendering Time 1 1 51? Post-Render Time 20 70 20? Vblank 1 1 1? Post-Blank Time ---- ---- ---- ------- 262 312 312? Total number of Scanlines |
NTSC PAL Dendy 25x 252 25x Rendering Time xx 89 xx Hblank ---- ---- ---- ------- 341 341 341? Total number of dots per scanline |
Type NTSC PAL Dendy Dots per CPU Clk 3.0 (12/4) 3.2 (16/5) 3.0 (15/5) CPU Clks per Scanline 113.6666 106.5625 CPU Clks per One Frame 29780.66 33247.5 CPU Clks per Other Frame 29780.33 33247.5 CPU Clks per Two Frames 59561.0 66495.0 |
Type NTSC PAL Dendy Dots per Color Clk 1.5 (6/4) 1.2 (6/5) 1.2 (6/5) Color Clks per Scanline 227.3333 284.1666 Color Clks per One Frame 59561.33 88660.0 Color Clks per Other Frame 59560.66 88660.0 Color Clks per Two Frames 119122.0 177320.0 |
1) Delay Loops synchronized with NMI (badly wasting CPU time) or using meaningful code with fixed non-conditional execution time instead delays. 2) Producing a "Sprite 0 Hit", or a "More Than 8 Sprites Per Scanline" situation at specific screen location (which sets corresponding flag in PPU Status Register, one cannot reset the flag manually, so either works only once per frame) 3) Using PCM Sound IRQs as Timer (synchronized with NMI) 4) Using external Timers (contained in some Cartridge Mappers) |
Line <--Line238--><--Line239--><--Line240--><--Line241--><--Line242--> /NMI ---------------------------------------__________________________ Video: PPPPPPPPP-_C-PPPPPPPPP-_C-----------_C-----------_C-----------_C- |
Line <--Line268--><--Line269--><--Line270--><--Line271--><--Line272--> /NMI _________________________________________________________________ Video: ----------_C-----------____________-____________-____________-_C- |
Line <--Line310--><--Line311--><--Line000--><--Line001--><--Line002--> /NMI _____________---------------------------------------------------- Video: ----------_C-----------_C-----------_C-PPPPPPPPP-_C-PPPPPPPPP-_C- |
PPU 2C02 Timings |
- Pixels are rendered at the same rate as the base PPU clock. In other words, 1 clock cycle= 1 pixel. - One frame consists of 262 scanlines. This equals 341*262 PPU cc's per frame (divide by 3 for # of CPU cc's). - 341 PPU cc's make up the time of a typical scanline (or 341/3 CPU cc's). |
- Reading from $2002 clears the vblank flag (bit 7), and resets the internal $2005/6 flip-flop. Writes here have no effect. - $2002.5 and $2002.6 after being set, stay that way for the first 20 scanlines of the new frame, relative to the VINT. - Pin /VBL on the 2C02 is the logical NAND between 2002.7 and 2000.7. |
3D Glasses |
Write to [4016h].Bit1 (0=Shut Which? Eye, 1=Shut WhichOther? Eye) |
Right Eye -- Red Left Eye -- Blue/cyan or so |
Right Eye -- Dark ;\as so for NES Orb-3D Left Eye -- Clear ;/(that is, opposite as for SNES Jim Power) |
Attack Animal Gakuen (J) (Pony Canyon) Cosmic Epsilon (J) (Asmik) Falsion (Konami) Famicom Grand Prix: 3D Hot Rally (Nintendo) Highway Star (J) aka Rad Racer (U) (E) (Square) Tobidase Daisakusen (J) aka 3-D World Runner (U) (Square) JJ Tobidase Daisakusen Part II (J) (Square) Orb-3D (U) (Pulfrich Effect) |
Audio Processing Unit (APU) |
APU Channel 1-4 Register 0 (Volume/Decay) |
0-3 Volume / Envelope decay rate When Bit4=1: Volume (0=Silent/None..F=Loud/Max) When Bit4=0: Envelope decay rate, NTSC=240Hz/(N+1), PAL=192Hz/(N+1) 4 Envelope decay disable (0=Envelope/Decay, 1=Fixed Volume) 5 Length counter clock disable / Envelope decay looping enable When Bit4=1: length counter clock disable When Bit4=0: envelope decay looping enable 0: Disable Looping, stay at 0 on end of decay [ \_____ ] 1: Enable Looping, restart decay at F [ \\\\\\ ] (Does this still affect Length counter clock disable ?) 6-7 Duty cycle type (unused on noise channel) 0 [--______________] 12.5% Whereas, 1 [----____________] 25.0% [_] = LOW (zero) (0) 2 [--------________] 50.0% [-] = HIGH (volume/decay) (0..F) 3 [------------____] 75.0% Noise randomly outputs LOW or HIGH |
0-6 linear counter load register 7 length counter clock disable / linear counter start |
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,F,E,D,C,B,A,9,8,7,6,5,4,3,2,1,0 |
APU Channel 1-4 Register 1 (Sweep) |
0-2 Sweep right shift amount (S=0..7) 3 Sweep Direction (0=[+]Increase, 1=[-]Decrease) 4-6 Sweep update rate (N=0..7), NTSC=120Hz/(N+1), PAL=96Hz/(N+1) 7 Sweep enable (0=Disable, 1=Enable) |
Wavelength = Wavelength +/- (Wavelength SHR S) (For Channel 1 Decrease only: minus an additional 1) (Ie. in Decrease mode: Channel 1 uses NOT, Channel 2 uses NEG) |
Bit 7 is set (sweeping enabled) The shift value (which is S in the formula) does not equal to 0 The channel's length counter contains a non-zero value |
1) current 11bit wavelength value is less than 008h 2) new 11bit wavelength would become greater than 7FFh |
0-7 Unused (No Sweep support for these channels) |
APU Channel 1-4 Register 2 (Frequency) |
0-7 Lower 8 bits of wavelength (upper 3 bits in Register 3) |
0-3 Noise frequency, F=1.79MHz/2/(N+1) Value 0..F corresponds to following 11bit clock cycle value: N=002,004,008,010,020,030,040,050,065,07F,0BE,0FE,17D,1FC,3F9,7F2 4-6 Unused 7 Random number type generation (0=32767 bits, 1=93 bits) |
NTSC: 004,008,010,020,040,060,080,0A0,0CA,0FE,17C,1FC,2FA,3F8,7F2,FE4 PAL: 004,008,00E,01E,03C,058,076,094,0BC,0EC,162,1D8,2C4,3B0,762,EC2 (XXX but, this won't match the "/2/(N+1)" part of the above formula) |
APU Channel 1-4 Register 3 (Length) |
0-2 Upper 3 bits of wavelength (unused on noise channel) 3-7 Length counter load register (5bit value, see below) |
Bit3=0 and Bit7=0 (Dividers matched for use with PAL/50Hz) Bit6-4 (0..7 = 05h,0Ah,14h,28h,50h,1Eh,07h,0Dh) Bit3=0 and Bit7=1 (Dividers matched for use with NTSC/60Hz) Bit6-4 (0..7 = 06h,0Ch,18h,30h,60h,24h,08h,10h) Bit3=1 (General Fixed Dividers) Bit7-4 (0..F = 7Fh,01h..0Fh) |
APU Channel 5 - DMC Sound |
7 IRQ Enable, when Length=0 AND Loop=Disabled (0=Disable, 1=Enable) DMC IRQs can be acknowledged by writing 0 to Bit7 of 4010h, or by writing any value to 4015h 6 Loop when reaching Length=0 (0=Stop, 1=Loop) In looped mode, the sample block is restarted by reloading the DMA Start Address and Length values, IRQs are not generated. 5-4 Appear to be unused 3-0 DMC frequency (00h..0Fh, see below) |
NTSC: D60,BE0,AA0,A00,8F0,7F0,710,6B0,5F0,500,470,400,350,2A8,240,1B0 PAL: XXX |
NTSC: 1AC,17C,154,140,11E,0FE,0E2,0D6,0BE,0A0,08E,080,06A,054,048,036 PAL: 18E,162,13C,12A,114,0EC,0D2,0C6,0B0,094,084,076,062,04E,042,032 |
7 Appears to be unused 6-1 MSBs of 7bit DAC (6bit "Delta Counter") 0 LSB of 7bit DAC |
7-0 DMA Start Address for DMC (Address = C000h+N*40h) |
7-0 DMA Length DMC (Length = N*10h+1 Bytes = N*80h+8 Bits) |
1 = Increment Delta counter by 1 (unless result would be greater than 3Fh) 0 = Decrement Delta counter by 1 (unless result would be less than 0) |
APU Control and Status Registers |
0 Status/Enable rectangle wave channel 1 1 Status/Enable rectangle wave channel 2 2 Status/Enable triangle wave channel 3 3 Status/Enable noise channel 4 4 Status/Enable DMC channel 5 5 Not used (returns garbage on reading) 6 Frame IRQ status (active when set) 7 DMC's IRQ status (active when set) |
bit6: Frame IRQ Disable (0=Enable Frame IRQ, 1=Disable Frame IRQ) bit7: Frame Rate Select (0=NTSC=60Hz=240Hz/4, 1=PAL=48Hz=240Hz/5) ...XXX... Frame IRQ works ONLY if bit6 and bit7 are BOTH zero! |
! These timings are NOT physically related to actual PPU VBlank/NMI timings ! |
0/NTSC: 4,0,1,2,3,0,1,2,3,0,1,2,3 | 1/PAL: 0,1,2,3,4,0,1,2,3,4,0,1,2,3,4 240Hz: __-_-_-_-_-_-_-_-_-_-_-_- | 192Hz: -_-_-_-___-_-_-_-___-_-_-_-__ 120Hz: ____-___-___-___-___-___- | 96Hz: __-___-_____-___-_____-___-__ 60Hz: (above somehow div by 2) | 48Hz: (above somehow divided by 2) |
APU 4-bit DAC |
APU Various |
APU DMC-DMA Glitch |
2002h ppu status ;-vblank flag acknowledged (lost flag) 2007h vram data read ;-vram address incremented twice (one byte skipped) 4016h joypad1 read ;\two CLKs sent to joypad, causing one shift-register 4017h joypad2 read ;/step to be skipped xxxxh other external read-sensitive mapper registers |
APU External Sound Channels |
Controllers |
Controllers - I/O Ports |
2-0 OUT2-0 Expansion Port Outputs 0 OUT0 NES/Famicom: Joypad 1+2 Strobe (for BOTH joypads) |
Bit Name NES Famicom Purpose 7-5 N/A Not used (undefined) Not used (undefined) - 4 PORT0-4 Expansion/Gameport Not used (undefined) Zapper 1 Button 3 PORT0-3 Expansion/Gameport Not used (undefined) Zapper 1 Light 2 PORT0-2 Expansion Microphone Input Microphone 1 PORT0-1 Expansion Expansion Exp. 0 PORT0-0 Expansion/Gameport Joypad Joypad 1 |
Bit Name NES Famicom Purpose 7-5 N/A Not used (undefined) Not used (undefined) - 4 PORT1-4 Expansion/Gameport Expansion Zapper 2 Button 3 PORT1-3 Expansion/Gameport Expansion Zapper 2 Light 2 PORT1-2 Expansion Expansion Exp. 1 PORT1-1 Expansion Expansion Exp. 0 PORT1-0 Expansion/Gameport Expansion/Joypad Joypad 2 |
Controllers - Pin-Outs |
Pin Dir Player 1 Player 2 Expl./Usage .---------. 1 Out GND GND Ground | 4 3 2 1 | 2 Out PORT0-CLK PORT1-CLK Joystick Clock (CPU Port Read) | 7 6 5 / 3 Out OUT0 OUT0 Joystick Serial-Start (Strobe) '-------' 4 In PORT0-0 PORT1-0 Joystick Serial-Data .---------. 5 Out +5VDC +5VDC Supply | 4 3 2 1 | 6 In PORT0-3 PORT1-3 Zapper Light, Paddle Button | 7 6 5 / 7 In PORT0-4 PORT1-4 Zapper Button, Paddle Position '-------' |
1 Out GND .------------------------. 2 Out SOUND OUT (headphone adaptors) | 8 7 6 5 4 3 2 1 | 3 I/O /IRQ \ 15 14 13 12 11 10 9 / 4 In port1-D4 (zapper button) '--------------------' 5 In port1-D3 (zapper light) 6 In port1-D2 (barcode battler) (turbo file data.in) 7 In port1-D1 (joystick 4 serial input) (paddle ADC serial input) 8 In port1-D0 (joystick 2 serial input) 9 Out port1-CLK (joystick 2+4 clock read) 10 Out OUT2 (turbo file data.clock) (tape output) 11 Out OUT1 (turbo file reset address) 12 Out OUT0 (joystick 1+2+3+4 start) (turbo file data.out) 13 In port0-D1 (joystick 3 serial input) (paddle button) (tape input) 14 Out port0-CLK (joystick 1+3 clock read) 15 Out +5V |
Controllers - Summary of Controller Types |
NES Joypad 1/2 NES Joypad 3/4 NES Joypad 4-player adaptor Satellite (for joypad 3-4) (wireless) NES Joypad 4-player adaptor Four-Score (for joypad 3-4) (wired) NES Lightgun Zapper NES Arkanoid I Paddle NES Miracle Piano Keyboard (49 keys) NES Mat - Power Pad (dance mat) NES RacerMate Bicycle Training System NES Power Glove NES UForce NES Add-on 3D-Glasses (colored lens, without any electronics) NES Add-on Robot |
Famicom Joypad 1/2 (hardwired to console, pad2 with mic instead start/select) Famicom Joypad 3/4 (player 3/4, or alternate joypads for player 1/2) Famicom Joypad 4-player adaptor (for joypad 4, not needed for joypad 3) Famicom Joypad Add-ons (gimmicks mounted on top of standard joypads) Famicom Lightgun Beam-Gun Famicom Lightgun Hyper Shot (extra buttons, not fully compatible trigger) Famicom Arkanoid I Paddle (with 9bit overflow) Famicom Arkanoid II Paddle (raw 8bit without overflow) Famicom Arkanoid II Secondary Paddle (add-on for second player) Famicom Push Buttons Party Tap (6 players, 1 button/player) Famicom Push Buttons Hyper Shot (2 players, 2 buttons/player) Famicom Keyboard (72 keys type-writer keyboard) Famicom Doremikko Piano Keyboard (36 keys) Famicom Keypad TV-Net ("remote control" style) (different versions exist) Famicom Keypad Famicom Network (joypad with numeric keypad) Famicom Keypad Mahjong Controller (keys "A..M", plus 7 functions keys) Famicom Mat - Family Trainer (dance mat) Famicom Mat - Tap-tap Mat (mat with hammer) Famicom Inflatable Exciting Boxing Bop Bag Famicom Inflatable Top-Rider Bike Famicom Tablet Oeka Kids (touchpad) Famicom Trackball Hori Track (joypad with trackball) Famicom Power Glove Famicom Barcode Reader - Barcode Battler (controller port) Famicom Barcode Reader - Datach (cartridge slot) Famicom Pachinko - Joypad with pachinko dial Famicom Microphone - Standard Microphone in japanese Joypad 2 Famicom Microphone - Bandai Cartridge with "Stage" Microphone & buttons Famicom Disk System (with Eject Button; aka no-disk sensor) Famicom Add-on 3D-Glasses (with LCD shutters, connected to controller port) Famicom Add-on Storage Turbo File Famicom Add-on Storage Battle Box Famicom Add-on Storage Data Recorder Famicom Add-on Robot |
Subor Keyboard (NES-clones with built-in keyboard) Subor Mouse (NES-clone bundled with mouse) Sharp Famicom Titler (console with built-in tablet and keypad) VS System Joysticks (swapped signals; other than normal joypads) VS System Dip-Switches / Coin-Inputs / Service Button VS System Lightgun (with serially injected data) Play Choice 10 FamicomBox: Dip Switches, Keyswitch, Coin Input, Joypad/Zapper Control Nintendo M82 - Shop Demo Unit for 12 games (similar to FamicomBox) |
Controllers - Summary of Controller Signals |
NES/Famicom Strobe Joypads, Paddle, Keyboard, etc. (load Shift-Registers) NES Miracle Piano Data Out (and Long/Short Strobe) NES RacerMate Bicycle Trainer - Forwarded to TX1/TX2 on 4016h/4017h.reads Famicom Battle Box: CLK to EEPROM, and, when set, enable chipselect toggle Famicom Doremikko Piano: Clock for next row Famicom Turbo File Data Out Famicom Oeka Kids Tablet Strobe (inverse of normal joypad strobe) |
Famicom 3D System (select left/right shutter for 3D Glasses) Famicom Bandai Hyper Shot Gun: Vibration Feature Enable Famicom Doremikko Piano: Start transfer (select 1st row) Famicom Exciting Boxing (row select) Famicom Keyboard Clock for Nibbles Famicom Konami Hyper Shot Must be LOW for Player 2 "JUMP"/"RUN" Buttons Famicom Newer-Paddle-Versions: Manually start next A/D-Conversion? Famicom Oeka Kids Tablet Clock (manually clocked, unlike joypads) Famicom Top-Rider Bike - Start some conversion or so? Famicom Turbo File Reset Address to 0000h NES Unused (not connected to Controller Port) VS Dualsystem: Send IRQ to other CPU (0=No, 1=IRQ) (and map Shared-RAM) |
Famicom Bandai Hyper Shot Gun: Sound Feature Enable Famicom Keyboard Tape Data Out Famicom Konami Hyper Shot Must be LOW for Player 1 "JUMP"/"RUN" Buttons Famicom Turbo File Data Clock NES Unused (not connected to Controller Port) VS Unisystem Mapper 99, Select 8K VROM Bank |
Famicom Joypad 1 (always connected) NES/Famicom Power Glove (per-byte strobe, and data-out after LONG strobe) NES Hori Track (8bit joypad, 2x4bit trackball, 4bit switches/ID) (unreleased) NES Joypad 1 (if connected) NES Miracle Piano Data In NES Power Glove (data-in) (Mattel) NES RacerMate Bicycle Trainer - Get RX1 (and forward OUT0 to TX1) (Player 1) NES Satellite & Four-Score (Joypad 1, Joypad 3, ID_A) VS Unisystem Joypad 2 (not Joypad 1) VS Unisystem Lightgun (5th Bit=ID=1, 7th Bit=Light, 8th Bit=Trigger) |
Famicom Hori Track (8bit joypad, 2x4bit trackball, 4bit switches/ID) Famicom Joypad 3 (when 4-player adaptor used) Famicom Pachinko Controller (8bit Joypad 3 data, followed by 8bit ADC data) Famicom Paddle 1 Button (1bit) Famicom Keyboard Tape Data In NES Unused (not connected to Controller Port) |
Famicom Microphone (built-in in Joypad 2) NES Unused (not connected to Controller Port) VS Unisystem Credit Service Button |
Famicom Unused (not connected to Controller nor Expansion Port) NES Second-Zapper Light Sensor NES Power Pad Bits 2,1,5,9,6,10,11,7 VS Unisystem Dip Switch 1 |
Famicom Unused (not connected to Controller nor Expansion Port) NES Second-Zapper Trigger Button NES Power Pad Bits 4,3,12,8, and four "1"-bits VS Unisystem Dip Switch 2 |
NES/Famicom Unused (not connected to Controller nor Expansion Port) VS Unisystem Credit Left/Right Coin Slot |
NES/Famicom Unused VS Dualsystem: Master/Slave ID (0=Slave CPU, 1=Master CPU) |
Famicom Joypad 2 (always connected) (without Start/Select) NES Joypad 2 (if connected) NES Satellite & Four-Score (Joypad 2, Joypad 4, ID_B) NES RacerMate Bicycle Trainer - Get RX2 (and forward OUT0 to TX2) (Player 2) Subor Clone: Subor Mouse Data (in conjunction with OUT-0,OUT-1,OUT-2 ?) VS Unisystem Joypad 1 (not Joypad 2) |
Famicom Doremikko Piano: Data fragment for current half-row Famicom Joypad 4 (when 4-player adaptor used) Famicom Exciting Boxing (column 1) Famicom Keyboard Bit0 of 4-bit Nibble Famicom Konami Hyper Shot Player 1 "RUN" Button Famicom Mahjong Controller: Data (in conjunction with OUT-0,OUT-1,OUT-2 ?) Famicom Paddle 1 Position (8bits) NES Unused (not connected to Controller Port) |
Famicom Barcode Battler (20-byte ASCII String at 1200 Baud, 8N1) Famicom Doremikko Piano: Data fragment for current half-row Famicom Exciting Boxing (column 2) Famicom Keyboard Bit1 of 4-bit Nibble Famicom Konami Hyper Shot Player 1 "JUMP" Button Famicom Oeka Kids Tablet Ack (confirm Strobe/Clock signals) Famicom Party Tap (Button 1, Button 4, ID "1"-Bit) Famicom Turbo File Data In NES Unused (not connected to Controller Port) VS Unisystem Dip Switch 3 |
Famicom Battle Box: Dta.In (data from EEPROM) Famicom Doremikko Piano: Data fragment for current half-row Famicom Exciting Boxing (column 3) Famicom Keyboard Bit2 of 4-bit Nibble Famicom Konami Hyper Shot Player 2 "RUN" Button Famicom Oeka Kids Tablet Data (18bits) Famicom Paddle 2 Button (1bit) Famicom Party Tap (Button 2, Button 5, ID "0"-Bit) Famicom Top-Rider Bike - First 8bit shift-register NES/Famicom Zapper Light Sensor NES/Famicom Power Pad Bits 2,1,5,9,6,10,11,7 NES Paddle Button (1bit) NES Power Pad Bits 2,1,5,9,6,10,11,7 VS Unisystem Dip Switch 4 |
Famicom Battle Box: Status of Dta.out (can be toggled by [4016h].reads) Famicom Doremikko Piano: Data fragment for current half-row Famicom Exciting Boxing (column 4) Famicom Keyboard Bit3 of 4-bit Nibble Famicom Konami Hyper Shot Player 2 "JUMP" Button Famicom Paddle 2 Position (8bits) Famicom Party Tap (Button 3, Button 6, ID "1"-Bit) Famicom Top-Rider Bike - Second 8bit shift-register NES/Famicom Zapper Trigger Button NES/Famicom Power Pad Bits 4,3,12,8, and four "1"-bits NES Power Pad Bits 4,3,12,8, and four "1"-bits NES Paddle Position (8bits) VS Unisystem Dip Switch 5 |
NES/Famicom Unused (not connected to Controller nor Expansion Port) VS Unisystem Dip Switch 6/7/8 |
Famicom Battle Box: Toggle Dta.out (always), Toggle /CS (when [4016h].W.0=1) Famicom Doremikko Piano: Clock for 1st/2nd half of current row FamicomBox: Watchdog Reload NES RacerMate Bicycle Trainer - Forward OUT0 to TX0/TX1 (by 4016h/4017h.Read) |
Famicom Unused (expansion port /IRQ-pin not used by any known controllers) NES Unused (not connected to Controller Port) |
Famicom Headphones (used by some headphone adaptors) NES Unused (not connected to Controller Port) |
4032h FDS Disk Status Register 1 (Disk Insert/Eject Sensor) 6000h Bandai Microphone and Buttons ? 6000h.Bit3 - Bandai Datach - Joint ROM System (Barcode Sensor) 500xh FamicomBox: Dip Switches, Keyswitch, Coin Input, Joypad/Zapper Control |
Controllers - Detection |
88 8C 16 40 A9 08 2D 17 40 C9 08 C8 8C 16 40 ;Battle Box AD 17 40 4A 4A 29 01 09 06 8D 16 40 ;Turbo File (older games) AD 17 40 29 04 4A 4A 09 06 8D 16 40 ;Turbo File (newer games) |
Controllers - Joypads |
1st Button A (0=High=Released, 1=Low=Pressed) 2nd Button B (0=High=Released, 1=Low=Pressed) 3rd Select (0=High=Released, 1=Low=Pressed) 4th Start (0=High=Released, 1=Low=Pressed) 5th Direction Up (0=High=Released, 1=Low=Moved) 6th Direction Down (0=High=Released, 1=Low=Moved) 7th Direction Left (0=High=Released, 1=Low=Moved) 8th Direction Right (0=High=Released, 1=Low=Moved) 9th and up Unused (all 1=Low) ;(or all 0=High when no joypad connected) |
___________________________________ | _ | | _| |_ Nintendo | | |_ _| SELECT START | | |_| (==) (==) ( B ) ( A ) | |___________________________________| |
Climber Stick NBF-CY (Nichibutsu) (mini-dildo/nipple to be mounted on DPAD) FamiCoin (colored "coins" to be mounted on DPAD; for better grip or so) Super Controller (Bandai?)(joystick to be mounted on DPAD of standard joypad) Ultech 3 Meijin-kun (joystick to be mounted on DPAD+A+B of standard joypad) |
ASCII Stick L5 - one-handed joypad (not joystick) (ASCII) Joypad with numeric keypad for Famicom Modem (connects to the 15pin port) |
Joystick-7 and Joystick-7 Mk II Joycard Sanusui SSS (Hudson) (with adapter for headphones) Reggies's Joystick (with turbofire) Super Controller II (Bandai) (with LCD screen) Toyo Stick (Toyo) |
_________ _________ | _ | Joypad 1 | _ | Joypad 2 | _| |_ | (Left Hand) | _| |_ | (Right Hand) | |_ _| | | |_ _| | | |_| | | |_| | | | | | | | SEL | | | | | | :: MIC | | | STA | | | | | | | | (B) | | (B) | | (A) | | (A) | |_________| |_________| |
Controllers - Four-Player Adaptors |
NES Satellite (wireless) (Nintendo) (1989) Four-Score (wired) (Nintendo) (1990) |
write "1-then-0" to (4016h) (that only once, for all 24 bits) read 1st 8 bits: controller 1 (4016h) / controller 2 (4017h) (as normal) read 2nd 8 bits: controller 3 (4016h) / controller 4 (4017h) (new ports) read 3rd 8 bits: 0,0,0,1,0,0,0,0 (4016h) / 0,0,1,0,0,0,0,0 (4017h) (ID codes) further bits: unknown (probably all 0, or all 1) |
Bomberman II Danny Sullivan's Indy Heat Gauntlet II Greg Norman's Golf Power Harlem Globetrotters Kings of the Beach Magic Johnson's Fast Break Monster Truck Rally M.U.L.E. NES Play Action Football Nightmare on Elm Street Nintendo World Cup Rackets & Rivals R.C. Pro-Am II Rock 'n' Ball (?) Roundball: 2 on 2 Challenge Smash TV Spot Super Jeopardy! Super Off Road Super Spike V'Ball Swords and Serpents Top Players' Tennis |
Downtown Nekketsu Koshinkyoku: Soreyuke Daiundokai Ike Ike! Nekketsu Hockey Bu: Subette Koronde Dai Ranto Nekketsu Kakutou Densetsu Nekketsu Koukou Dodge Ball Bu (in Bean Ball mode of japanese version only) Nekketsu Street Basket: Ganbare Dunk Heroes Kunio-kun no Nekketsu Soccer League U.S. Championship V'Ball Wit's |
Controllers - Lightguns (Zapper) |
Bit3 State of the gun sight (0=High=Light detected, 1=Low=None) Bit4 Trigger (0=High=Released, 1=Low=Pulse) (shoot on 1-to-0 transition) |
pulled part way: soft "click" sound: 0-to-1 transition (ignored by games) pulled full way: loud "CLANG" sound: 1-to-0 transition (games do fire) |
Output a black picture with a white-rectangle at target location If the gun senses light, then it's a "hit". (to reduce unnecessary flickering, do that only when trigger is pulled) |
Adventures of Bayou Billy (gun optional) (U) 1989 (E) 1990 Konami Baby Boomer (unlicensed) (gun optional) (U) 1989 Jim Meuer/Color Dreams Barker Bill's Trick Shooting (U) 1989 Nintendo Chiller (unlicensed) (gun optional) (U) (HES) 1986 Exidy Day Dreamin' Davey (gun optional) (U) 1990 HAL Duck Hunt (JUE) (PC10) (VS) 1984 Nintendo Freedom Force (U) (VS) 1988 Sunsoft Gotcha! The Sport! (U) 1987 LJN Gumshoe (UE) (VS) 1986 Nintendo Gun-Nac (U) (J) 1990 Tonkin House/Tokyo Shoseki/Nexoft Hogan's Alley (JU) (PC10) (VS) 1984 Nintendo Laser Invasion (U) aka Gun Sight (for LaserScope or Zapper) (J) 1991 Konami The Lone Ranger (gun optional) 1991 Konami Mechanized Attack (gun optional) (U) 1991 SNK Operation Wolf (gun optional) (J) (U) 1989 Taito Shooting Range (for Hyper Shot or Zapper+Joypad) (U) 1989 Bandai Space Shadow (for Hyper Shot or Zapper+Joypad) (J) 1989 Bandai To The Earth (U) 1989 Nintendo Track & Field II (in one section of the game) (U)(E) 1988/89 Konami Wild Gunman (U) (PC10) Wairudo Ganman (J) 1984 Nintendo |
Nintendo Zapper (US) (old gray/dark gray version) (1985) Nintendo Zapper (US) (new gray/orange version) Nintendo Beam Gun (Japan) (black/brown revolver) (1985) Nintendo VS Unisystem Lightgun (orange revolver) (2bit serial transmit) Bandai Hyper Shot (black machine gun: zapper + joypad-like buttons) (1989) Hyperkin FC Super Loader Gun (made by Hyperkin, NES/Zapper compatible?) Konami LaserScope/Gun Sight (headset: headphones + voice-activated zapper) Nexoft The Dominator: Pro Beam Light Gun (wireless lightgun) |
4016h.R.Bit1 Serial 8bit joypad3-style button data 4017h.R.Bit3 Light (0=High=Yes, 1=Low=No) 4017h.R.Bit4 Trigger (0=High=Released, 1=Low=Pressed/Held) (shoot while 1) 4016h.W.Bit1 Gun Move aka Body Vibration System (0=Off, 1=On) 4016h.W.Bit2 Sound (0=Off, 1=On) |
joypad3 button B --> throw grenade joypad3 up --> move forward (after defeating enemy) joypad3 select --> toggle sound/gun-move (in title screen) joypad3 start --> start/pause |
Port.Bit (VS-Joypad) VS-Zapper 4016h.5th.Bit (Joy2 Up) Connect OK (0=Alert sound, 1=Connected) 4016h.7th.Bit (Joy2 Left) Light Sensor (0=No,1=Light ;INVERSE of NES Zapper) 4016h.8th.Bit (Joy2 Right) Trigger (0-to-1=Fire ;INVERSE of NES Zapper) |
.----------. | 1|--------------GND VCC -----NES.Pin5 | Sharp 2|---|<|--------GND (light sensor "43 Pi") GND -----NES.Pin1 | IR3T07A 3|---[22]--||---GND (cap: 1/50) ___ | 4|---------||---GND (cap: 3.3/50) VCC GND -o o-NES.Pin7 | 5|--------------GND | 2SC459 Trigger | 6|--[390K]------VCC [10K] .------. | 7|---------||---GND (cap: .001) | | C|------ NES.Pin6 | 8|----------------------------------+---|B | | 9|--------------VCC | E|---GND '----------' VCC--||---GND (cap: 10/16) '------' |
.----------. | 1|--------------GND GND ----------- GND, RedPlug.pin1 | 2|---|<|--------GND (light sensor "43PI") .-- GND, RedPlug.pin2 | IR3T07 3|--[6R8]--||---GND (C1: 105) '-- ALM, RedPlug.pin3 | 4|---------||---GND (C2: 335) | 5|--------------GND | 6|--[394]-------VCC ___ | 7|---------||---GND (C3: 102) GND ---o o--- TRG, WhitePlug.pin1 | 8|------------------------------------------ HIT, WhitePlug.pin2 | 9|--------------VCC VCC --[101]-- +5V, WhitePlug.pin3 '----------' GND--||--VCC (C4: 476) GND--||--+5V (C5: 476) |
Controllers - Paddles |
Arkanoid (J) 1986 (Taito) (bundled with OLD paddle for 15pin Famicom) Arkanoid (U) 1987 (Taito) (bundled with OLD paddle for 7pin NES) Arkanoid 2 (J) 1988 (Taito) (with NEW paddle; with connector for 2nd paddle) Chase H.Q. (J) 1989 (Taito) (compatible with NEW paddle) |
4016h.W.Bit0 Load shift-register (strobe 1-then-0) 4016h.R.Bit1 Paddle Button (1bit) (0=High=Released, 1=Low=Pressed) 4017h.R.Bit1 Paddle Position (8bits) (0=High=One, 1=Low=Zero) (MSB first) |
4016h.W.Bit0 Load shift-register (strobe 1-then-0) 4017h.R.Bit3 Paddle Button (1bit) (0=High=Released, 1=Low=Pressed) 4017h.R.Bit4 Paddle Position (8bits) (0=High=One, 1=Low=Zero) (MSB first) |
treat 00h..1Fh as position 100h..11Fh ;\repair 8bit/9bit "overflows" treat 20h..FEh as position 020h..0FEh ;/ treat FFh as NOT CONNECTED (although FFh may ALSO occur at position 0FFh) clip position 020h..11Fh to min/max range 062h..102h ;<-- Arkanoid |
4016h.W.Bit0 Load shift-register (strobe 1-then-0) 4016h.R.Bit1 Paddle 1 Button (1bit) (0=High=Released, 1=Low=Pressed) 4017h.R.Bit1 Paddle 1 Position (8bits) (0=High=One, 1=Low=Zero) (MSB first) 4017h.R.Bit3 Paddle 2 Button (1bit) (0=High=Released, 1=Low=Pressed) 4017h.R.Bit4 Paddle 2 Position (8bits) (0=High=One, 1=Low=Zero) (MSB first) 4016h.W.Bit1 Start next A/D-conversion (strobe 1-then-0) |
treat 00h..FFh as position 00h..FFh (no 9bit "overflows" in new paddles) optionally treat as FFh as NOT CONNECTED (Arkanoid 2/Chase H.Q. don't so) clip position 00h..FFh to min/max range 4Eh..BAh ;<--Arkanoid 2, TINY-screen clip position 00h..FFh to min/max range 4Eh..F2h ;<--Arkanoid 2, WIDE-screen clip position 00h..FFh to min/max range 54h..DBh ;<--Arkanoid 2, PONG-view clip position 00h..FFh to min/max range 38h..E7h ;<--Chase H.Q. |
IC1 14pin NE556 (dual 555 universal timers) IC2 16pin NEC D4040BC (12-bit asynchronous binary counter with reset) IC3 16pin NEC D74HC00C (quad NAND gates) IC4 14pin NEC D74HC165C (8-bit parallel-in serial-out shift register) CN 6pin connector (VCC,GND,STB,DTA,CLK,BUTTON) VR1 paddle-dial potentiometer VR2 calibration potentiometer SW1 push-button plus, 11 capacitors, and 6 resistors |
Controllers - Push Buttons |
Casino Derby (J) (19xx) Gimmi a Break - Shijou Saikyou no Quiz OuKetteisen (J) (TBS/S'PAL) (1991) Gimmi a Break - Shijou Saikyou no Quiz OuKetteisen 2 (J) (TBS/S'PAL) (1992) Project Q (J) (Hect/Hector) (1992) .-----. .----------------------------------------|1 \ | .---------------------------------|2 | _ | | .--------------------------|3 |_________| | 15pin | | | .-------------------|4 | |_| plug | | | | .------------|5 | | | | | | .-----|6 / .-'-. .-'-. .-'-. .-'-. .-'-. .-'-. '-----' |(1)| |(2)| |(3)| |(4)| |(5)| |(6)| '---' '---' '---' '---' '---' '---' |
wait 500 clks ;-lead delay (with strobe=0) [4016h]=01h, [4016h]=00h, wait 160 clks ;-strobe 1-then-0 with delay a=[4017h], wait 80 clks, b=[4017h] ;-read 2x3bit with delay data = (a AND 1Ch)/4 + (b AND 1Ch)*2 ;-merge (Bit0-5 = Button 1-6) |
Hyper Olympic (J) Konami (1985) Hyper Sports (J) Konami (1985) |
4016h.W.Bit1 Select Player 2 "JUMP"/"RUN" Buttons (0=Low=Yes) ;\usually, set 4016h.W.Bit2 Select Player 1 "JUMP"/"RUN" Buttons (0=Low=Yes) ;/both to 0 4017h.R.Bit1 Player 1 "RUN" Button (0=High=No, 1=Low=Pressed and OUT-2=LOW) 4017h.R.Bit2 Player 1 "JUMP" Button (0=High=No, 1=Low=Pressed and OUT-2=LOW) 4017h.R.Bit3 Player 2 "RUN" Button (0=High=No, 1=Low=Pressed and OUT-1=LOW) 4017h.R.Bit4 Player 2 "JUMP" Button (0=High=No, 1=Low=Pressed and OUT-1=LOW) |
.--------------------------. .--------------------------. | imanoK | | imanoK | | tohSrepyH | | tohSrepyH | | PMUJ NUR | | PMUJ NUR | _| ( ) I ( ) | _| ( ) II ( ) | / | JUMP RUN | / | JUMP RUN | | | HyperShot | | | HyperShot | | | Konami | | | Konami | | '--------------------------' \ '--------------------------' _ \ '--------------------------------| | 15pin '-----------------------------------------------------------------|_| plug |
Controllers - Typewriter Keyboards |
[4016h]=05h:WAIT(16clks) ;reset (force row 0) FOR i=0 TO 8 ;loop 9 rows [4016h]=04h:WAIT(56clks) ;request LSB of NEXT row Row[i]=(([4017h] SHR 1) AND 0Fh) ;read LSB [4016h]=06h:WAIT(56clks) ;request MSB of SAME row Row[i]=(([4017h] SHL 3) AND F0h)+Row[i] ;read MSB NEXT ;loop next |
Row Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 0 F8 RETURN [ ] KANA R-SHFT \(Yen) STOP 1 F7 @ : ; _ / - ^ 2 F6 O L K . , P 0 3 F5 I U J M N 9 8 4 F4 Y G H B V 7 6 5 F3 T R D F C 5 4 6 F2 W S A X Z E 3 7 F1 ESC Q CTRL L-SHFT GRPH 1 2 8 CLR UP RIGHT LEFT DOWN SPACE DEL INS |
.------------------------------------------------. | F1 F2 F3 F4 F5 F6 F7 F8 | | 1 2 3 4 5 6 7 8 9 0 - ^ \ STOP | | ESC Q W E R T Y U I O P @ [ ENTER CLR INS DEL | | CTRL A S D F G H J K L ; : ] KANA UP | | SHIFT Z X C V B N M , . / _ SHIFT LEFT RIGHT | | GRPH SPACE DOWN | '------------------------------------------------' |
Row Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 0 4 G F C F2 E 5 V 1 2 D S END F1 W 3 X 2 INS BS PGDN RIGHT F8 PGUP ESC HOME 3 9 I L , F5 O 0 . 4 ] ENTER UP LEFT F7 [ \ DOWN 5 Q CAPS Z Pa ESC A 1 CTRL 6 7 Y K M F4 U 8 J 7 - ; ' / F6 P = SHIFT 8 T H N SPACE F3 R 6 B |
.------------------------------------------------------------. | ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Pa. Br Nu Re. | | ~ 1 2 3 4 5 6 7 8 9 0 - + BS HOME | | TAB Q W E R T Y U I O P [ ] \ END | | CAPS A S D F G H J K L ; ' ENTER PGUP | | SHIFT Z X C V B N M , . / SHIFT UP PGDN | | ### CTRL ALT ## [ SPACE ] ALT INS DEL LT DN RIGH | '------------------------------------------------------------' |
OUT.0 Keyboard Strobe/Reset (0=Normal, 1=Initialize) OUT.1 Keyboard Clock (0=LSB, 1=MSB) (1-to-0=Next Row) OUT.2 Tape Output (Should be 1 when accessing Keyboard) PORT0-1 Tape Input PORT1-4..1 Keyboard Input Bit3..0 (either MSB or LSB of current row) |
Controllers - Piano Keyboards |
_____________________________________________ | _________________________________________ | | | U U U | U U | U U U | U U | U U U | U U | | | | U U U | U U | U U U | U U | U U U | U U | | Keys | | | | | | | | | | | | | | | | | | | | | | | | |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| F G A H C D E F G A H C D E F G A H C D E Notes |-------><------------><------------><----| Octaves 1..7 8..19 | 20..31 32..36 Key Numbers | Middle C 36 Piano Keys (21 White Keys, 15 Black Keys) (two & two-half octaves) |
[4016h]=02h, [4016h]=01h ;-write 2-then-1 dummy=[4017h], Key1,2=[4017h].Bit1,2 ;-read 0+2 bits [4016h]=00h, [4016h]=01h ;-write 0-then-1 Key3,4,5,6=[4017h].Bit1,2,3,4, Key7,8=[4017h].Bit1,2 ;-read 4+2 bits [4016h]=00h, [4016h]=01h ;-write 0-then-1 Key9,10,11,12=[4017h].Bit1,2,3,4, Key13,14=[4017h].Bit1,2 ;-read 4+2 bits [4016h]=00h, [4016h]=01h ;-write 0-then-1 Key15,16,17,18=[4017h].Bit1,2,3,4, Key19,20=[4017h].Bit1,2 ;-read 4+2 bits [4016h]=00h, [4016h]=01h ;-write 0-then-1 Key21,22,23,24=[4017h].Bit1,2,3,4, Key25,26=[4017h].Bit1,2 ;-read 4+2 bits [4016h]=00h, [4016h]=01h ;-write 0-then-1 Key27,28,29,30=[4017h].Bit1,2,3,4, Key31,32=[4017h].Bit1,2 ;-read 4+2 bits [4016h]=00h, [4016h]=01h ;-write 0-then-1 Key33,34,35,36=[4017h].Bit1,2,3,4 ;-read 4+0 bits |
OUT-1 start transfer (select 1st row) OUT-0 clock for next row CLK clock for 1st/2nd half of current row PORT1.1-4 data for current row (4bit in 1st half, 2bit in 2nd half) |
.--._________________________________________________________.--. | |:::::::::::: MIRACLE .. .. .. .. .. ::::::::::::| | | |:::::::::::: .. .. .. .. .. ::::::::::::| | | |:::::::::::: # # # # : .. .. .. .. ::::::::::::| | | |:::::::::::: # # # # : .. .. .. ::::::::::::| | | |_________________________________________________________| | | | U U | U U U | U U | U U U | U U | U U U | U U | U U U | | | | | U U | U U U | U U | U U U | U U | U U U | U U | U U U | | |Keys | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |__|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|__| C D E F G A H C D E F G A H C D E F G A H C D E F G A H C Notes <-------------><------------><------------><------------>X Octaves 36..47 48..59 | 60..71 72..83 84 Key Numbers | Middle C 49 Piano Keys (29 White Keys, 20 Black Keys) (4 octaves, plus next higher C) 1 Foot Pedal (Sustain) 8 Push Buttons (Mode/Volume Selection) |
Controllers - Piano - Miracle Piano Controller Port |
1st Data Present Flag (0=High=None, 1=Low=Yes) 2nd..9th Data Bit7..0 (MSB First, inverted 1=LOW=Zero) 10th..12th Unknown 13th..16th Unknown (would be ID Bit3..0 on other SNES controllers) 17th and up Unknown |
1st..8th Data Bit7..0 (MSB First, 0=LOW=Zero) |
[4016h]=01h ;strobe on delay (need strobe on for 12 NES clks) ;short delay = READ mode [4016h]=00h ;strobe off data_present_flag = [4016h].bit0 ;data present flag (1=LOW=Yes) for i=7 to 0 data.bit(i)=NOT [4016h].bit0 ;data bits (MSB first, 1=LOW=Zero) next i |
[4016h]=01h ;strobe on (start bit) delay (need strobe on for 66 NES clks) ;long delay = WRITE mode for i=7 to 0 [4016h].bit0=data.bit(i) ;data bits (MSB first, 1=HIGH=One) dummy=[4016h] ;issue short CLK pulse next i [4016h]=00h ;strobe off (stop/idle) delay (21 NES clks... plus overload) ;wait before next byte transfer |
Controllers - Piano - Miracle Piano MIDI Commands |
Expl. Dir Hex Note off (Undocumented) W 8#h,<key>,00h ;same as Note ON with velo=00h Note on/off command R/W 9#h,<key>,<velo> Main volume level W B0h,07h,<vol> Sustain on/off command R/W B#h,40h,<flag> Local control on/off W B0h,7Ah,<flag> All notes off W B#h,7Bh,00h Patch change command (*) R ?? C#h,<instr> ;TO keyboard = Undocumented Miracle button action R F0h,00h,00h,42h,01h,01h,<bb>,F7h Unknown (Undocumented) W F0h,00h,00h,42h,01h,02h,<??>,F7h ;??? Keyboard buffer overflow R F0h,00h,00h,42h,01h,03h,01h,F7h Midi buffer overflow R F0h,00h,00h,42h,01h,03h,02h,F7h Firmware version request W F0h,00h,00h,42h,01h,04h,F7h Miracle firmware version R F0h,00h,00h,42h,01h,05h,<maj>,<min>,F7h Patch split command W F0h,00h,00h,42h,01h,06h,0#h,<lp>,<up>,F7h Unknown (Undocumented) W F0h,00h,00h,42h,01h,07h,F7h ;??? All LEDs on command W F0h,00h,00h,42h,01h,08h,F7h LEDs to normal command W F0h,00h,00h,42h,01h,09h,F7h Reset (Undocumented) W FFh |
N#h Hex-code with #=channel (#=0 from keyb, #=0..7 to keyb) <key> Key (FROM Miracle: 24h..54h) (TO Miracle: 18h..54h/55h?) <velo> Velocity (01h..7Fh, or 00h=Off) <vol> Volume (00h=Lowest, 7Fh=Full) <flag> Flag (00h=Off, 7Fh=On) <instr> Instrument (00h..7Fh) for all notes <lp> Instrument (00h..7Fh) for notes 24?/36-59, lower patch number <up> Instrument (00h..7Fh) for notes 60-83/84?, upper patch number <maj>.<min> Version (from version 1.0 to 99.99) <bb> button on/off (bit0-2:button number, bit3:1=on, bit4-7:zero) |
Controllers - Piano - Miracle Piano Instruments |
000 Grand Piano 032 Marimba 064 Synth Bells 096 Tube Bells' 001 Detuned Piano 033 Glockenspiel' 065 Vox 1 097 Frogs/Ducks 002 FM Piano 034 Kalimba' 066 Vox 2 098 Banjo' 003 Dyno 035 Tube Bells 067 Vox 3 099 Shakuhachi' 004 Harpsichord 036 Steel Drums 068 Mod Synth 100 Piano' 005 Clavinet 037 Log Drums' 069 Pluck Synth 101 Vibraphone' 006 Organ 038 Strings 1 070 Hard Synth 102 FM Piano' 007 Pipe Organ 039 Pizzicato 071 Syntar 103 Clock Belis' 008 Steel Guitar 040 Strings 2 072 Effects 1 * 104 Harpsichord' 009 12-StringGuitar 041 Violin 1' 073 Effects 2 * 105 Clavinet' 010 Guitar 042 Trumpet' 074 Percussion 1 * 106 Organ' 011 Banjo 043 Trumpets 075 Percussion 2 * 107 Pipe Organ' 012 Mandolin 044 Horn' 076 Percussion 3 * 108 Metal Guitar' 013 Koto' 045 Horns 077 Sine Organ' 109 Stick' 014 Jazz Guitar' 046 Trombone' 078 Organ # 110 Guitar' 015 Clean Guitar' 047 Trombones 079 Pipe Organ # 111 Xylophone' 016 Chorus Guitar 048 CupMuteTrumpet' 080 Harpsichord # 112 Marimba' 017 Fuzz Guitar 049 Sfz Brass 1 081 Synth Pad 1 113 Syn Trombone' 018 Stop Guitar 050 Sfz Brass 2 082 Synth Pad 2 114 Syn Trumpet' 019 Harp' 051 Saw Synth 083 Synth Pad 3 115 Sfz Brass 1' 020 Detuned Harp 052 Tuba' 084 Synth Pad 4 116 Sfz Brass 2' 021 Upright Bass' 053 Harmonica 085 Synth Pad 5 117 Saw Synth' 022 Slap Bass' 054 Flute' 086 Synth Pad 6 118 Church Bells' 023 Electric Bass' 055 Pan Flute' 087 Synth Pad 7 119 Marcato' 024 Moog 056 Calliope 088 Synth Pad 8 120 Marcato 025 Techno Bass 057 Shakuhachi 089 Synth Pad 9 121 Violin 2' 026 Digital Waves 058 Clarinet' 090 Synth Pad 10 122 Strings 3 027 Fretless Bass' 059 Oboe' 091 Synth Pad 11 123 Synth Bells' 028 Stick Bass 060 Bassoon' 092 Synth Pad 12 124 Techno Bass' 029 Vibraphone 061 Sax' 093 Synth Pad 13 125 Mod Synth' 030 MotorVibraphone 062 Church Bells 094 Synth Pad 14 126 Pluck Synth' 031 Xylophone 063 Big Bells 095 Synth Pad 15 127 Hard Synth' |
' These programs are single voice, which lets The Miracle play up to 16 notes simultaneously. All other programs are dual voice, which lets it play up to 8 notes simultaneously. * 072..076 See below for a list of Effects/Percussion sounds. # 078..080 To be true to the nature of the sampled instrument, these patches do not respond to velocity. |
Note Effects 1 Effects 2 Percussion 1 Percussion 2 Percussion 3 30-35 Jet Yes (ding) - - Ratchet 36-4l Gunshot No (buzz) Kick Drum Rim Shot Snap 1 42-47 RoboDeath Applause Snare Exotic Snap 2 48-53 Whoosh Dogbark Toms Congas Dripdrum 1 54-59 Punch Door creak Cymbal Timbale Dripdrum 2 60-65 Slap Door slam Closed Hat Cowbell Wet clink 66-71 Duck Boom Open Hat Bongos Talk Drum 72-77 Ow! 1 Car skid Ride Whistle Agogo 78-83 Ow! 2 Goose Shaker Clave Explosion |
Controllers - Piano - Miracle Pinouts and Component List |
1 PC/Amiga/Mac RS232 GND (also wired to RTS) 2 PC/Amiga/Mac RS232 RxD 3 PC/Amiga/Mac RS232 TxD 7 NES/SNES/Genesis GND 10 NES/SNES/Genesis Data 13 NES/SNES/Genesis Strobe 14 Sense SENSE0 (0=MIDI Output off, 1=MIDI Output on) 15 Sense SENSE1 (0=9600 Baud; for RS232, 1=31250 Baud; for MIDI) 19 NES/SNES/Genesis Clock all other pins = not connected |
U1 Snd 16pin TDA7053 (stereo amplifier for internal speakers) U2 Snd 8pin NE5532 (dual operational amplifier) U3 Snd 16pin LM13700 or LM13600 (unclear in schematic) (dual amplifier) U4 Snd 14pin LM324 (quad audio amplifier) U5 Main 3pin LM78L05 (converts +10V to VLED, supply for 16 LEDs) U6 Main 14pin 74LS164 serial-in, parallel-out (to 8 LEDs) U7 Main 14pin 74LS164 serial-in, parallel-out (to another 8 LEDs) U8 Main 5pin LM2931CT (converts +12V to +10V, and supply for Power LED) U9 Main 3pin LM78L05 (converts +10V to +5REF) U10 Snd 14pin TL084 (JFET quad operational amplifier) U11 Snd 40pin J004 (sound chip, D/A converter with ROM address generator) U12 Snd 32pin S631001-200 (128Kx8, Sound ROM for D/A conversion) U13 Main 3pin LM78L05 (converts +10V to VCC, supply for CPU and logic) U14 Main 40pin AS0012 (ASIC) Keyboard Interface Chip (with A/D for velocity) U15 Main 40pin 8032 (8051-compatible CPU) (with Y1=12MHz) U16 Snd 40pin AS0013 (ASIC) U17 Main 28pin 27C256 EPROM 32Kx8 (Firmware for CPU) U18 Main 28pin 6264 SRAM 8Kx8 (Work RAM for CPU) U19 Main 16pin LT1081 Driver for RS232 voltages U20 Main 8pin 6N138 opto-coupler for MIDI IN signal S1-8 Main 2pin Push Buttons S9 Main 3pin Power Switch (12V/AC) J1 Main 3pin 12V AC Input (1 Ampere) J2 Main 2pin Sustain Pedal Connector (polarity is don't care) J3 Snd 2pin RCA Jack Right J4 Snd 2pin RCA Jack Left J5 Snd 5pin Headphone jack with stereo switch (mutes internal speakers) J6 Main 25pin DB25 connector (RS232 and SNES/NES/Genesis controller port) J7 Main 5pin MIDI Out (DIN) J8 Main 5pin MIDI In (DIN) JP1 Main 16pin Keyboard socket right connector JP2 Main 16pin Keyboard socket left connector JP3 Snd 4pin Internal stereo speakers connector |
Controllers - Keypads |
Television Network Whatever Daiwa no My Trade .----------------. .----------------. .----------------. | TV-NET | | JAP | | JAP | | [JP] [F1] [F2] | | [JP] [JP] [JP] | | [JP] [JP] [JP] | | [F3] [F4] [F5] | | [JP] [JP] [JP] | | [<|] [|>] [C ] | | (1) (2) (3) | | (1) (2) (3) | | (1) (2) (3) | | (4) (5) (6) | | (4) (5) (6) | | (4) (5) (6) | | (7) (8) (9) | | (7) (8) (9) | | (7) (8) (9) | | (*) (0) (.) | | (^) (0) (v) | | (*) (0) (.) | | (<-) (->) | | (<|) (|>) | | (# ) (->) | | (JAP) | | (JAP) | | ((o)) | '----------------' '----------------' '----------------' |
.------------------------------------------. | (<) (>) (1) (2) (3) (*) (C) | | SEL _ STA (JAP) | | _| |_ (4) (5) (6) (#) (.) | | |_ _| | | |_| (7) (8) (9) ( 0 ) (B) (A) | '------------------------------------------' |
...--------... .-------------------'' CAPCOM ''------------------. / lt up rt \ | [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] (N) | | | | [F1][F2][F3][F4][F5][F6][F7] | | lt dn rt | \ / '-------------------------------------------------------' |
[4016h]=5, [4016h]=4, read 8bits from [4017h].Bit1 ;row 0 [4016h]=3, [4016h]=2, read 8bits from [4017h].Bit1 ;row 1 [4016h]=7, [4016h]=6, read 8bits from [4017h].Bit1 ;row 2 |
Read Row 0 Row 1 Row 2 1st H (Right) None? None? (Change/Cheat?) ;\ 2nd G (Up) None? Fn Unknown(EndGame?) ; All buttons: 3rd F (Left) N (New/Okay) Fn Unknown(Tingeling?) ; 1=Low=Pressed 4th E M Fn Unknown(Jp?) ; 0=High=Released 5th D L Fn Unknown(Jp?) ; Unused bits: 6th C K Fn Unknown(Right/Toggle); ?=What=Unknown 7th B J F2 Start (Down) ; 8th A I F1 Select (Left) ;/ 9th.. Unknown(N/A?) Unknown(N/A?) Unknown(N/A?) ;-Probably padding |
Ide Yousuke Meijin no Jissen Mahjong (J) Capcom (1987) Ide Yousuke Meijin no Jissen Mahjong 2 (J) Capcom (1991) |
Controllers - Mats |
Athletic World (J) (U) (E) 1986-1988 Class Track Meet/Running Stadium/Stadium Events (J) (U) (E) 1986-1988 Aerobics Studio/Dance Aerobics (J) (U) 1987/1989 Fuuun! Takeshi Shiro 2 (J) 1988 Jogging Race (J) 1987 Meiro Daisakusen (J) 1987 Power Pad Test Program by Tennessee Carmel-Veilleux (PD) (UE) Rai Rai! Kyonshiizu: Baby Kyonshi no Amida Daiboken (J) 1989 Short Order / Eggsplode! (U) 1989 Street Cop/Manhattan Police (J) (U) 1987/1989 Super Team Games/Daiundoukai (J) (U) 1987/1988 Totsugeki! Fuuun Takeshi Shiro (J) 1987 |
Super Mogura Tataki!! - Pokkun Moguraa (J) (bundled with mat & hammer) |
Output 1-then-0 to Bit0 of Port 4016h Read eight times from Port 4017h (or 4016h, when plugged into port 1) |
Bit4 4,3,12,8,u,u ,u ,u (0=High=Released, 1=Low=Pressed) (u=Unused always 1) Bit3 2,1,5 ,9,6,10,11,7 (0=High=Released, 1=Low=Pressed) |
4016h.W.Bit0 Select Lower row (9..12) (0=Low=Select, 1=High=No) 4016h.W.Bit1 Select Middle row (5..8) (0=Low=Select, 1=High=No) 4016h.W.Bit2 Select Upper row (1..4) (0=Low=Select, 1=High=No) 4017h.R.Bit1 Read Right-most column (4,8,12) (0=High, 1=Low=Pressed) 4017h.R.Bit2 Read Right-middle column (3,7,11) (0=High, 1=Low=Pressed) 4017h.R.Bit3 Read Left-middle column (2,6,10) (0=High, 1=Low=Pressed) 4017h.R.Bit4 Read Left-most column (1,5,9) (0=High, 1=Low=Pressed) |
____________.-------.____________ ____________.-------.____________ |POWER PAD '=======' SIDE B| |POWER PAD '=======' SIDE A| | | | | | .---. .---. .---. .---. | | .---. .---. | |-( 1 )-( 2 )-( 3 )-( 4 )-| | ( ) ( ) | | '---' '---' '---' '---' | | '---' '---' | |---------------------------------| | | | .---. .---. .---. .---. | | .---. .---. .---. .---. | |-( 5 )-( 6 )-( 7 )-( 8 )-| | ( ) ( ) ( ) ( ) | | '---' '---' '---' '---' | | '---' '---' '---' '---' | |---------------------------------| | | | .---. .---. .---. .---. | | .---. .---. | |-( 9 )-( 10 )-( 11 )-( 12 )-| | ( ) ( ) | | '---' '---' '---' '---' | | '---' '---' | |_________________________________| |_________________________________| _________.-------------._________ | |// Tap-tap | igs | | |/ Mat | | |---------'============='---------| | .---. .---. .---. .---. | <--- Tap-tap numbering is same as | (dragn) (BANG!) (croco) (BANG!) | on SIDE A of Power Pad, ie. | '---' '---' '---' '---' | 4 3 2 1 | .---. .---. .---. .---. | 8 7 6 5 | (BANG!) (monky) (BANG!) (chick) | 12 11 10 9 | '---' '---' '---' '---' | | .---. .---. .---. .---. | | (frank) (BANG!) (shark) (BANG!) | | '---' '---' '---' '---' | |_________________________________| |
Controllers - Inflatable Controllers |
4016h.W.Bit1 Row Select (0=Hook/Move or 1=Jabb/Straight/Body) 4017h.R.Bit1-4 Column Inputs (0=High=Punch, 1=Low=None) |
4017h.R Row0 (OUT1=0) Row1 (OUT1=1) Bit4 Right Hook (left ear) Straight (breast/chin) Bit3 Move? (to left screen-edge) Right Jabb (left shoulder) Bit2 Move? (to right screen-edge) Body (belly) Bit1 Left Hook Left Jabb (right shoulder) |
_###_ /"#####"\ (ear) Row0.Bit1 --> (| o\ /o |) <-- Row0.Bit4 (ear) (hook) \ _ / / \_o_/ \ <---- Row1.Bit4 (breast) (straight) (shoulder) Row1.Bit1 --> | " | <-- Row1.Bit3 (shoulder) (jabb) | () () | <---- Row1.Bit4 (belly) (body) |_/ \_| |=======| | /-\ | |==| |==| <-- inflatable boxer | | | | _|__|#|__|_ <-- control box (___________) <-- inflatable ring \ \ \___________\ <-- floor mat |
4016h.W.Bit1 Start some conversion or so? 4016h.W.Bit0 Reload shift-registers 4017h.R.Bit3 8bit shift-register 4017h.R.Bit4 8bit shift-register |
[4016h]=03h ;start some conversion or so? wait 60 clks (game tries so, but bugged code waits only 10 clks) wait some more (whatever overload, additionally to above delay) [4016h]=01h ;strobe on wait some clks (strobe on should last for 12 clks) [4016h]=00h ;strobe off read 8 times from [4017h].Bit3-4 |
Read 4017h.R.Bit3 4017h.R.Bit4 1st Accel, Bit5 (0=VCC=Zero) Turbo Unknown/unused? (?) 2nd Accel, Bit4 (0=VCC=Zero) Steer Right, Bit1 (0=VCC=Zero, 1=One) 3rd Accel, Bit3 (0=VCC=Zero) Steer Left, Bit1 (0=VCC=Zero, 1=One) 4th Accel, Bit2 (0=VCC=Zero) Steer Right, Bit0 (0=VCC=Zero, 1=One) 5th Accel, Bit1 (0=VCC=Zero) Fast Steer Left, Bit0 (0=VCC=Zero, 1=One) 6th Accel, Bit0 (0=VCC=Zero) Slow Hand Brake (0=VCC=No, 1=GND=Pulled) 7th Start Button (0=VCC=Released) Gear Switch (0=VCC=Lo, 1=GND=Hi) 8th Select Button (0=VCC=Released) Wheelie (0=VCC=No, 1=GND=What?) |
______ something near ring finger? maybe wheelie-button or so? | ___ gear switch | | _________ mimmicked km/h and rpm display | | | | ____ handbrake | | v v | | | .---------------. __ v turn handle-bar v v | .--. .--. | | |=====O to steer left/right? ._______ _____| | | | | |__| |/______. |_______| |__| '--' o '--' o|__|__|.______| <--- turn right handle ' '|__| :'---------------': ' to accelerate? # : (S??) (S??) : : '._____________.' : <------ base with start/select : : : : <------ inflatable pillow to sit on : : |
Controllers - RacerMate Bicycle Training System |
4016h.W.Bit0 OUT0 (to be forwarded to TX1/TX2 on 4016h/4017h.reads) 4016h.R.Bit0 Get RX1 (and forward OUT0 to TX1) (Player 1) 4017h.R.Bit0 Get RX2 (and forward OUT0 to TX2) (Player 2) (if any) |
First Frame: 2 IRQs Leading Pause (TX levels left unchanged) 1 IRQ Output 1st TX Bit (Start Bit "0") Input nothing 23 IRQs Output 2nd..24th TX Bit Input 1st..23rd RX Bit 1 IRQ Output nothing (keep 24th TX bit) Input 24th RX Bit 0 IRQs Ending pause (IRQs should be disabled until next Vblank NMI) Second Frame: 2 IRQs Leading Pause (TX levels left unchanged) 1 IRQ Output 25th TX Bit (Start Bit "1") Input nothing 23 IRQs Output 26nd..48th TX Bit Input 25th..47rd RX Bit 1 IRQ Output nothing (keep 48th TX bit) Input 48th RX Bit 0 IRQs Ending pause (IRQs should be disabled until next Vblank NMI) |
24 "odd" bits (1st, 3rd, 5th, 7th, ... 47th bits) 24 "even" bits (2nd, 4th, 6th, 8th, ... 48th bits) |
1bit Must be "0" (start bit of packet-half transferred in First Frame) 6bit Unknown (seems to be fixed: 1,1,0,1,0,0) ;(aka 2Ch/4, LSB first) 5bit Data, Bit0..4 (LSB first) 1bit Must be "1" (start bit of packet-half transferred in Second Frame) 7bit Data, Bit5..11 (LSB first) 4bit Index, Bit0..3 (LSB first) |
Index=1, Grade (signed) Index=2, Wind (signed) Index=3, Weight (LBS) Index=4, Pulse Target Min (BPM+800h) ;\player 1 only Index=5, Pulse Target Max (BPM+800h) ;/ Index=5, Zero ;-player 2 only Index=F, Start Race (Data=001h) |
1st EvenRxByte --> Button flags (bit0-5) SpecialStart (bit6) 2nd EvenRxByte --> 8bit Data Fragment 3rd EvenRxByte --> 4bit Data Fragment (LSBs), 4bit Index (01h..0Eh) (MSBs) |
XXX content of the array is unknown (presumably speed and such things?) |
0 Button RESET (0=High=Released, 1=Low=Pressed) 1 Button F1 (START/PAUSE/LEAVE) (0=High=Released, 1=Low=Pressed) 2 Button F3 (SET/SELECT) (0=High=Released, 1=Low=Pressed) 3 Button + (PLUS/UP) (0=High=Released, 1=Low=Pressed) 4 Button F2 (DISPLAY) (0=High=Released, 1=Low=Pressed) 5 Button - (MINUS/DOWN) (0=High=Released, 1=Low=Pressed) 6 Start of Special Odd RX Bits (?) 7 Unknown/unused? (?) |
Index=0 Unknown/Ignored Index=1 Speed 12bit (0..FFFh = 0..81.9 MPH) (ie. 1/50 MPH units) Index=2 Watts 12bit (0..FFFh = 0..3054 Watts) (roughly 3/4 Watt units) Index=3 Pulse 8bit (0..FFh = 0..255 BPM) (and MSBs = 4bit Flags) Index=4..E Unknown/Stored in memory (but seems to have no effect) Index=F Unknown/Ignored Unknown if/how/where RPM is transferred. Speed (MPH) also affects distance (DST). |
Bit8 Blink Heart-Symbol Bit9 Show "E" Bit10 Show "LO" ;\when both set: treated as "sensor not connected" Bit11 Show "HI" ;/(ie. showing "--" instead of the pulse value) |
(EvenRxBytes <> (OddRxBytes XOR FFFFFFh)) AND Parity(1stOddRxByte)=odd |
XXX content of the array is unknown ... XXX the software seems to manage only ONE array (not 2 arrays for 2 bikes) |
.-------------------------. | CompuTrainer | | .---------------------. | | | LCD | | <--- unknown display type | | Display | | (maybe 7-segment or so) | | | | | '---------------------' |_____ | Stop Display _ | <--- attach to handle-bars here | [RESET] [ F2 ] [ + ] _____| | [ F1 ] [ F3 ] [ - ] | | Start Set | | RACERMATE | | Computer Aided Trainer | | MODEL 8000? | '-------------------------' |
Control Panel (LCD display, 6 buttons, wired to flywheel, NES, pulse sensor) Front Stand (small stand, holds front-wheel in straight-forward direction) Rear Stand with electronic flywheel (resistance, speed-meter, stand upright) Power Supply (for flywheel) Pulse sensor, cables, screws Bicycle (not included) (can be used with regular "ourdoor" bicycles) |
NES Connector Box (2x7pin NES connector, 2x3pin 3.5mm sockets; for 2 bikes) NES Console with CIC disabled (or top-loading NES without CIC) NES Challenge II cartridge (without CIC, except, old versions had CIC clone) |
3.11.088 05-02-1991 20:41:04 5.01.033 02-01-1994 19:28:10 5.01.036 05-15-1996 19:47:57 6.02.002 05-21-1996 12:22:18 9.03.128 (PAL) 03-22-1996 11:57:11 |
Controllers - Tablets |
Oeka Kids - Anpanman no Hiragana Daisuki (J) Oeka Kids - Anpanman to Oekaki Shiyou!! (J) |
4016h.W.Bit0 Oeka Kids Tablet Strobe (inverse of normal joypad strobe) 4016h.W.Bit1 Oeka Kids Tablet Clock (manually clocked, unlike joypads) 4017h.R.Bit2 Oeka Kids Tablet Ack (confirm Strobe/Clock signals) 4017h.R.Bit3 Oeka Kids Tablet Data (18bits) |
[4016h]=00h, wait for [4017h].Bit2=0 ;\strobe 0-then-1 (start transfer) [4016h]=01h, wait for [4017h].Bit2=1 ;/ [4016h]=03h, wait for [4017h].Bit2=0 ;\read databit (repeat 18 times) databit = [4017h].Bit3 ; (note: the final wait after 18th [4016h]=01h, wait for [4017h].Bit2=1 ;/bit can/should/must? be ommitted) |
1st..8th X-coordinate, MSB first, inverted (0=High=One, 1=Low=Zero) 9st..16th Y-coordinate, MSB first, inverted (0=High=One, 1=Low=Zero) 17th Soft-Pressure (Pen touches tablet) (0=High=Yes, 1=Low=No) 18th Hard-Pressure (Click/Draw) ??????? (0=High=Yes, 1=Low=No) XXX or is there a "click" button; the gray bar at front? So one must push that button, and the thing can't sense "hard pressure" at all? |
tablet.x = tablet.x XOR FFh ;\undo inversion of databits tablet.y = tablet.y XOR FFh ;/ screen.x = tablet.x + (tablet.x/10h) - 08h ;\scale to screen dimensions screen.y = tablet.y - (tablet.y/10h) + 0Dh ;/ screen.x = minmax(screen.x,00h..FFh) ;\clip to min/max range screen.y = minmax(screen.x,00h..EDh) ;/ (of course, the coordinates are valid only if the pen touches the tablet) |
.----------------------------. / ( LOGO/TEXT ) (<===pen====) \ | __ __ __ __ __ __ __ | | (__)(__)(__) (__)(__)(__) (__) | <-- touch-sensitive holes | ____________________________ | | | ' ' ' | | | | | | <-- touch-sensitive tablet | |- + + + -| | / | | \ | |- + + + -| | | | | | | |- + + + -| | | | | | <-- lower half of case=click button? | |______.______.______._______| | \__________________________________/ |
Controllers - Trackball and Mouse |
Moero Pro Soccer (J) 1988 Jaleco Operation Wolf (J) (U) 1989 Taito (also supports Zapper lightgun) Putt Putt Golf (FDS) 1989 Pack-In-Video US Championship V'Ball (J) 1989 Technos Japan Corp |
Version Input Data from ID Bits Connector Released Famicom [4016h/4017h].Bit1 0,1 15pin Yes NES [4016h/4017h].Bit0 1,0 7pin No |
(to be preceeded by normal joypad like 1-then-0 strobing on OUT-0) 1st..8th bit --> Same as normal joypad data 9th..12th bit --> Axis 1, signed 4bit (MSB first, inverted, 1=Low=Zero) 13th..16th bit --> Axis 2, signed 4bit (MSB first, inverted, 1=Low=Zero) 17th --> L/R mode switch (0=High=R-Mode, 1=Low=L-Mode) 18th --> Unknown/unused (probably SPEED LO/HI switch) (=?) 19th --> ID Bit1 (0=High=Famicom, 1=Low=NES) 20th --> ID Bit0 (0=High=NES, 1=Low=Famicom) 21th..24th --> Unknown/unused (read by software, but seems to be unused) 25th and up --> Unknown/unused (probably whatever padding bits) |
When 17th Bit=1: (L-Mode) (supported by all games) Axis 1 is to be treated as Y-axis (POSITIVE = DOWN = towards DPAD) Axis 2 is to be treated as X-axis (POSITIVE = RIGHT = towards START/SELECT) When 17th Bit=0: (R-Mode) (not supported by Operation Wolf) Axis 1 is to be treated as X-axis (POSITIVE = LEFT = towards DPAD) Axis 2 is to be treated as Y-axis (POSITIVE = DOWN = towards START/SELECT) |
___________ L-Mode R-Mode ___________ | ___ |\ __________ __________ /| ___ | | .' '. | | |\ /| _ | | .' '. | HORI TRACK | | BALL | | | STA | | | | _| |_ | | | BALL | | | | | | | // SEL | | | | |_ _| | | | | | HORI ELECTRIC | '.___.' | | // | | | | |_| | | '.___.' | CO.LTD. |___________| | A | | | | | |___________| MODEL TRK-7 | \| .''. | | | | .''. |/ | MADE IN JAPAN |_____________| | | | | | | | | |_____________| | _ B '..' | | | | '..' B | Note: | _| |_ .''. | | | | .''. STA | L/R switch and | |_ _| | | | | | | | | SEL \\ | SPEED LO/HI | |_| '..' | | | | '..' A \\ | switch are at |________________________| | | |________________________| bottom-side | H O R I T R A C K \ | | / | |_________________________\| |/_________________________| |
Educational Computer 2000 (RU) (with mimmicked russian Win95 GUI) |
[4016h]=01h wait 28 clks (14 NOPs) [4016h]=06h read 8bits from [4017h].R.Bit0 (MSB first) (bits are NOT inverted!) |
7 Left Button (1=Pressed) 6 Right Button (1=Pressed) 5-4 Step X (0=None, 1=Plus 1/Right, 2=Treated same as 1, 3=Minus 1/Left) 3-2 Step Y (0=None, 1=Plus 1/Down, 2=Treated same as 1, 3=Minus 1/Up) 1-0 Must be 0 for single-byte packet |
7 Left Button (1=Pressed) 6 Right Button (1=Pressed) 5 Direction X (0=Plus/Right, 1=Minus/Left) 4 Unsigned Step X, Bit4 3 Direction Y (0=Plus/Down, 1=Minus/Up) 2 Unsigned Step Y, Bit4 1-0 Must be 1 for 1st byte of multi-byte packet |
7-6 Unused (maybe copy of buttons) 5-2 Unsigned Step X, Bit3-0 1-0 Must be 2 for 2nd byte of multi-byte packet |
7-6 Unused (maybe copy of buttons) 5-2 Unsigned Step Y, Bit3-0 1-0 Must be 3 for 3rd byte of multi-byte packet |
00h..0Eh Mickeys ---> Mul 1.0 --> 00h..0Eh Pixels 0Fh..13h Mickeys ---> Mul 1.5 --> 16h..1Ch Pixels 14h..18h Mickeys ---> Mul 2.0 --> 28h..30h Pixels 19h..1Dh Mickeys ---> Mul 2.5 --> 3Eh..48h Pixels 1Eh..1Fh Mickeys ---> Mul 3.5 --> 69h..6Ch Pixels |
Controllers - Power Glove |
Controllers - Power Glove Transmission Protocol (RX/TX) |
Set [4016h].W.Bit0=1, then wait around 3330 clks ;-Enter TX Mode |
Set [4016h].W.Bit0=Databit ;-Output Data Bit Do dummy-read from [4016h].R ;-Output Clk Pulse |
1280 clks should be fine; as used by Super Glove Ball ;-Delay between bytes (the older Bad Street Brawler game used 2304 clks) |
Set [4016h].W.Bit0 to 1-then-0 ;-Strobe Read 8bits from [4016h].R.Bit0 (MSB first, inverted) ;-Read Byte |
5Fh (received) aka A0h (when XORing by FFh) --> analog mode, ready 00h? (received) aka FFh? (when XORing by FFh) --> analog mode, not ready (?) other (joypad data) --> joypad emulation mode |
wait 100 clks ;-Delay between bytes Set [4016h].W.Bit0 to 1-then-0 ;-Strobe (on each byte) Read 8bits from [4016h].R.Bit0 (MSB first, inverted) ;-Read Byte XOR byte by FFh ;-Undo inversion |
Controllers - Power Glove TX Packets (Configuration Opcodes) |
1. Length Byte (total number of following bytes) (used range is 05h..32h) 2. 16bit Opcode Area (convert analog positions to temporary flags) 3. 8bit Opcode Area (forward temporary flags to joypad bits; can use logic) 4. Optional 6 extra bytes (whatever purpose, used only in one program) |
06h Length, total number of following bytes C1h Analog Mode (bit7), one 16bit opcode (bit3-0) 08h,00h Opcode 0800h (maybe analog request, or maybe just a dummy-opcode) 02h Two 8bit "opcodes" (in Analog mode, they are "masks", not "opcodes") FFh,01h Mask Word 01FFh (bit0-8: request 1st..9th response byte) |
7 Low level mode (0=Digital Joypad Emulation, 1=Analog Low-Level Mode) 6 Unknown (always 1 in known packets) 5 Configure glove for use with other games (1=Survive POWER-OFF ?) 4 Unknown (always 0 in known packets) "prevent re-flash later"? 3-0 Number of following 16bit commands (used range is 01h..09h) |
15 Unknown (always 0 in known packets) 14 Unknown (maybe only-if-NEWLY?) ;-can be used together with bit13-8 13 Examine Thumb Finger Flex ;\ 12 Examine Index Finger Flex ; only one of these 11 Examine Middle Finger Flex ; bits should be set 10 Examine Ring Finger Flex ; (usually) 9 Examine Wrist Rotation Angle ; 8 Examine X/Y/Z Coordinate ;/ |
7-4 Unknown (usually 0) (except, can be 1 when checking TWO fingers...?) 3-2 Wanted flex or so (3 or 2=Want Flex, 0=Want NO Flex) 1-0 Unwanted flex or so (0 or 2=Want Flex, 3=Want NO Flex) |
7-4 Max Angle (00h..0Bh) ;\eg. wanted clock range 3:00 .. 6:00 should be 3-0 Min Angle (00h..0Bh) ;/defined as Min=3, Max=6; or maybe Max=7, or so |
7-3 Unknown, maybe flag(s) and/or boundary value 2 Select Direction (0=Right/Up/Back, 1=Left/Down/Forward) 1-0 Select Parameter (0=X, 1=Y, 2=Z, 3=Fourth Axis??) |
1D18 ; right?? ;\these are used in combination with 0000 ; left ?? ; "normal" left/right opcodes... 1D18 ; ... ?? ; might be somehow related to near & far 0000 ; ... ?? ;/transformed to slow/pulsed & fast/normal (Maybe flex on 3 fingers, with two 2x2bit flex pairs in LSBs if first word, plus bit8=whatever, plus an extra 2x2bit flex pair somewhere in 2nd word?) |
440C ;\maybe "true if ring is NEWLY bent"? 440C ;/ 040C ;-looks like "ring", but is undocumented in manual 6418 ;-two fingers bent? 011E ;-looks like hand forward, but is undocumented in manual |
7 Append EXTRA SIX BYTES after 8bit Opcode Area (0=Normal, 1=Extra) 6-5 Unknown (always 0 in known packets) 4-0 Number of following 8bit commands (used range is 01h..18h) |
flg 1-bit accumulator CondFlag Conditional Flag (false: skip all but opcode 6nh/7nh or so) Input(0) General purpose flag (can be used to memorize current "mode") Input(1..9) Results from 1st..9th 16bit Opcode (see Part 1) Input(Ah..Dh) Unknown/unused Input(Eh) Another general purpose flag (used as frame-toggle or so) Input(Fh) Another general purpose flag (used as frame-toggle or so) Output(0) Should be BEEP sound (judging from description in manual) Output(1..8) Joypad Shift Register (R,L,D,U,?,?,B,A) ;?,?=probably STA,SEL Output(9) Used in Brawler init and in "Joust" program (... LED?) Output(Ah) Unknown/unused Output(Bh) Maybe abort opcode execution... or LED control? Output(Ch..Fh) Unknown/unused PulseA Pulse generator 1 (mainly used for auto-fire on Button A) PulseB Pulse generator 2 (mainly used for auto-fire on Button B) |
0nh Unknown/unused 1nh flg = Input(n) 2nh CondFlag = flg, and, thereafter, flg = Input(0..9) ;IF command 3nh Used... 33h is related to Input(3) and related to CondFlag? 4nh flg = flg AND Input(n) 5nh flg = flg OR Input(n) 6nh Used... somehow related to CondFlag stuff... ;ELSE/ELSEIF? 7nh Exchange flg <--> Input(n) ;or so? or CondFlag? ;ENDIF? 8nh Output(n) = flg 9nh Output(n) = flg AND PulseA Anh Output(n) = flg AND PulseB Bnh Input(n) = Input(n) XOR flg ;or so? or Input(n) = (NOT?) flg Cnh Output(n) = NOT flg Dnh Unknown/unused Enh Unknown/unused Fnh Used... FEh is used, related to Input(n) .. and CondFlag? |
Controllers - Power Glove RX Packets (Position/Sensor Data) |
1st byte: Signed X-Coordinate 2nd byte: Signed Y-Coordinate 3rd byte: Signed Z-Coordinate 4th byte: Wrist Rotation Angle (around Z-axis) 5th byte: Finger Flex Sensors 6th byte: Control Pad Buttons 7th byte: Unknown/unused (00h) 8th byte: Unknown/unused (00h) 9th byte: Error Flags |
1st byte: X-coordinate (-80h=Left, +7Fh=Right) 2nd byte: Y-coordinate (-80h=Down, +7Fh=Up) 3rd byte: Z-coordinate (-80h=Forward, +7Fh=Back) ;Forward=Towards Screen |
7-4 Unused (always 0?) 3-0 Clockwise rotation in 30 degree steps (00h..0Bh) |
Val Clock-face Degrees Back-side-of-Hand Thumb 00h 12:00 0' Points up Points left 03h 3:00 +90' Points right Points up 06h 6:00 +180' Points down Points right 09h 9:00 -90' Points left Points down |
In general, forearm can be be turned clockwise from around 0:00 to 6:00 When using your shoulder you may also go anti-clockwise from 11:00 to 8:00 When breaking your arm, or maybe doing a salto, you might also get to 7:00 |
7-6 Thumb (hard to use) (0..3; 0=Straightest, 3=Most Bent) 5-4 Index Finger (0..3; 0=Straightest, 3=Most Bent) 3-2 Middle Finger (0..3; 0=Straightest, 3=Most Bent) 1-0 Ring Finger (0..3; 0=Straightest, 3=Most Bent) N/A Little Finger (there is no flex sensor for this finger) |
7-0 Button number of currently pressed button |
00h Keypad "0" or Center (glove beeps & centers when pressing Center?) 01h-09h Keypad "1".."9" 0Ah Button A 0Bh Button B 0Ch DPAD Left ;XXX or Up ? 0Dh DPAD Up ;XXX or Right ? 0Eh DPAD Down 0Fh DPAD Right ;XXX or Left ? 80h Enter (glove beeps when pressing this button?) 82h Start 83h Select 84h (?) PROG (glove goes into program-mode when pressing this button) FFh (?) None (no button pressed) |
Left,Up,Down,Right, Enter,Start,Select,Center, 0,1,2,3,4,5,6,7,8,9, A,B. |
7-6 Unused (always 0) 5 Right speaker (on little finger) to Sensor 3 (lower-right mic) (1=Okay) 4 Right speaker (on little finger) to Sensor 2 (upper-right mic) (1=Okay) 3 Right speaker (on little finger) to Sensor 1 (upper-left mic) (1=Okay) 2 Left speaker (on index finger) to Sensor 3 (lower-right mic) (1=Okay) 1 Left speaker (on index finger) to Sensor 2 (upper-right mic) (1=Okay) 0 Left speaker (on index finger) to Sensor 1 (upper-left mic) (1=Okay) |
Controllers - Power Glove Games and Compatibilty Modes |
Bad Street Brawler (U) 1989 Mattel/Beam Software (uses digital mode only) Super Glove Ball (U) 1990 Mattel/Rare/Novak (uses real analog low-level mode) |
1. Put the game into NES and press POWER. (Glove turns on and beeps.) 2. Press PROG on glove. 3. Press the number of the program you want to use on the number pad. 4. Press ENTR. (The glove makes a dim beep.) 5. Press ENTR again. (The glove beeps.) 6. Press START or SELECT on your glove. (LED Panel turns on.) 7. Make a fist a few times and center before you start playing. 8. Repeat steps 2-5 to change programs. Always make a fist a few times and re-center after you change programs. |
1. Put a special series game into the NES and press POWER. 2. Select special program option as prompted. 3. Select special series program as prompted. 4. Turn off NES. You have 30 seconds to complete step 5. 5. Put game you want to play in the NES and turn it back on. 6. Make fists and center as usual, then press START, to start playing game. |
Controllers - Power Glove Drawings |
.-------. sensor 1 sensor 2 .-------..__ | .-. |_____________________________________________| .-. | ''. LEDs: | ((O)) |_____________________________________________| ((O)) | o | up | '-' | upper-left upper-right | '-' | o o | lt rt '-------' microphone microphone '-------' o | dn .-----------------------------------------------------. | | | .----------------------------------. ___ | | o o | rapid | | | .' '. | |_____| fire | | | | // | | | | LEDs | | | | // | | | | | | TV-Set | '.___.' | | | | | | | | | | | | ( ) ( ) | | | | | | | | | | | | ::::::::::::: | | | | | | ::::::::::::: | | | | | | ::::::::::::: | | | | | | ::::::::::::: | | | sensor 3 | | | | .--'-'--. | '----------------------------------' | | .-. | |_____________________________________________________| | ((O)) |###, lower-right | '-' | # ,###########################, microphone '-------' # #" long cable "##, # .------"------. "############################" | junction | .##| box : <--- ######################################, # | | connect glove here "##########, # '-------------' # # short cable # #' to NES very short long cable # #' cable ___________________________________ # ..------.. |''---..########/ Aup Aon Bup Bon \####" | !!! !! ! ''-| |------/ LED (0) (1) (2) (3) (4) (PROG) \--. .!.-------.. |speaker| !!!!| o SloMo Adn Aof Bdn Bof | | | !!! !! ! '''| unit | !!!!| _ (5) (6) (7) (8) (9) (ENTER) | | .!.---------.. | | !!!!| _| |_ | | | !!! !! ! '''| | !!!!| |_ _| | | '...---------... | | !!!!| |_| (CENTER) (SEL) (STA) (B) (A) | | | !!! !! ! ''| __| !!!!|_______________________________________| | '....----------...|___/' ''!! !! !! !! ________ !! !! !! | / ,--------------------######---------------------' .--''' / wrist-strap | ...''' '-----'' Note: The "speaker unit" contains 2 ultrasonic speakers (above index finger and little finger), plus one regular speaker (for producing beep sounds), plus wires going to the flex sensors. The ultrasonic speakers must be aimed towards the microphones for position sensing. According to the glove manual, the microphones are intended to be hung on the TV-Set. However, the surface of the screen may produce echos, and thus mess-up signal sensing; results can be reportedly improved by depositing the microphones elsewhere, possibly backed with towels for avoiding echos. |
Controllers - Power Glove Pinouts |
Pin COP888 Power Glove 1 C2,I/O INPUT C on 4021 ;\serial data 2 C3,I/O INPUT D on 4021 ;/to NES and LEDs? 3 G4,I/O,SO ? 4 G5,I/O,SK DATA LATCH ;\serial data 5 G6,I,SI,ME DATA CLOCK ;/from NES? 6 G7,I/CKO,HALT RESTART XTAL 7 CKI XTAL 8 Vcc +5VDC 9 I0,I R1 pullup,Button0,Button8,RIGHT 10 I1,I R2 pullup,Button1,Button9,LEFT 11 I2,I R3 pullup,Button2,ENTER ,DOWN 12 I3,I R4 pullup,Button3,PROG ,UP 13 I4,I R5 pullup,Button4, ,START 14 I5,I R6 pullup,Button5, ,SELECT ;but, where 15 I6,I R7 pullup,Button6, ,B ;is Center? 16 I7,I R8 pullup,Button7, ,A 17 L0,I/O,MIWU R26 gnd,THUMB 18 L1,I/O,MIWU R27 gnd,INDEX 19 L2,I/O,MIWU R28 gnd,MIDDLE 20 L3,I/O,MIWU R29 gnd,RING 21 C4,I/O ? ;\maybe these are 22 C5,I/O Button0-7 & CENTER ; outputs to 8x3 23 C6,I/O ENTER ;/keypad matrix? 24 C7,I/O GND 25 L4,I/O,MIWU,T2A CLK on 4021 26 L5,I/O,MIWU,T2B RC net to LBlu,->|- red finger wires 27 L6,I/O,MIWU ? 28 L7,I/O,MIWU GRY from top of glove (XMTR2 ?) 29 D0,O, I/O BIT 0 YEL from top of glove (XMTR1) 30 D1,O, I/O BIT 1 GRN from top of glove (XMTR2) 31 D2,O, I/O BIT 2 BLU from top of glove (BEEPER) 32 D3,O, I/O BIT 3 PUR from top of glove (XMTR1 ?) 33 D4,O, I/O BIT 4 INPUT E on 4021 ;\ 34 D5,O, I/O BIT 5 INPUT F on 4021 ; serial data 35 D6,O, I/O BIT 6 INPUT G on 4021 ; to NES and LEDs? 36 D7,O, I/O BIT 7 INPUT H on 4021 ;/ 37 GND GND 38 RESET# ? 39 G0,I/O,INT,ALE ? 40 G1,WDOUT ? 41 G2,I/O,T1B,WR# BRN to junct box (pin1 LM324 near rcvrs) 42 G3,I/O,T1A,RD# ORG to junct box (RCs to LM324 near rcvrs) 43 C0,I/O INPUT A on 4021 ;\serial data 44 C1,I/O INPUT B on 4021 ;/to NES and LEDs? |
two ultrasonic speakers (near index finger/little finger knuckles) one normal speaker (beeper) three transistors, resistors, capacitors, diodes wires to control-pad PCB, wires to finger flex sensors |
(components here are mostly unknown) Seems to consist of a 44pin National Semiconductor COP888-family CPU, a 4021 shift-register, and possibly whatever other components. one LED (on solder side), 21 buttons (on solder side) |
two LM324 chips (two quad-amplifiers) three diodes, and many resistors and capacitors DB9 connector (to glove), and wire to NES, and wire to microphone units |
TL062 (dual-amplifier) one microphone, one capacitor, six resistors |
SN74LS164N (8bit serial-in, parallel-out shift-register) six LEDs, six resistors, one capacitor |
Controllers - UForce |
Controllers - UForce I/O |
1st..6th Status Bits (00h=AllSixBitsHigh=Ready, Other=SomeBitLow=Busy) 7th Select Button (0=High=Released, 1=Low=Pressed) 8th Start Button (0=High=Released, 1=Low=Pressed) |
1st Analog Data, Bit4 ;\5bit analog sensor value, 2nd Analog Data, Bit3 ; bits are inverted (0=High=One, 1=Low=Zero), 3rd Analog Data, Bit2 ; after undoing that inversion (XOR by 1Fh), 4th Analog Data, Bit1 ; values are: 00h..1Eh = Distant..Closest 5th Analog Data, Bit0 ;/(aka least..most IR light reflection) 6th Analog Data, Bit0 (according to Kevin: duplicated, same as above) 7th Presence Bit (according to Kevin: 0=High=Low=Sensor covered, heh?) 8th Unused (according to Kevin: "0=NOT(0)=0" uh, that can't be true?) |
Byte Number Official Naming Other Numbering (within packet) (from manual) (kevtris doc) 8th Top 1 6th 7th 1. 2. 2 3 5th 3rd'a 3. 4. 4 5 4th - 5. 6. 6 dummy 1st 2nd 7. 8. 7 8 3rd'b Bottom 9 |
Controllers - UForce Drawings |
.---- sensor #8 / _______________________ _______ _______________________ | . | ##### | . | | | | | ..mmM | | | | | | |_| FORCE | | | | | | / \ | | | | / \ | | | |________________ / \ ________________| | | _________________________________________________ | | | | | sensor | |'''. .'''| | sensor #6---> | | :---------------------------------------: | | <--- #7 | |...' '...| | | | : : | | | | : : | | | | : : | | | | : : | | | | : : | | | | : : | | sensor | |'''. .'''| | sensor #5---> | | :---------------------------------------: | | <--- #3a | |...' '...| | | | : : | | _| |_:_____________________________________________:_| |_ | | ______ ______ | | hinge | |____| |_______________________________| |____| | <--- |_| _________________________________________________ |_| | | : : | | | | : : | | sensor | |'''. .'''| | dummy #4---> | | :---------------------------------------: | | <--- | |...' '...| | (no | | : : | | sensor) | | : : | | | | : : | | | | : add-on : | | | | : .--- socket : | | | | : / : | | sensor | |'''. .'''. .'''| | sensor #1---> | | :--------------- | ( ) | ---------------: | | <---#2 | |...' | | '...| | | |_____________________| |_____________________| | | | | ________________ \ / ________________ | | | \ \ / / TURBO | | | | ( ) \ \ / / ON A B | | | | SELECT | | | | OFF ' ' | | | | ( ) | | | | . . . . | | | ' START ' | ##### | ' 1 2 3 4 ' | |_______________________|_______|____GAME SWITCHES______| \ '--- sensor #3b |
_________________________________________________ |\ POWER BAR /| mirror --> \ For use with... / <-- mirror |_ \___________________ ___________________/ _| |___| <-- plug this nibble into socket |
push-down _ _ push-down button --> |_| _______________________________ |_| <-- button | __| .-' '-. |__ | .-' |-' L _____________ _____________ R '-| '-. | | .-' | | '-. | | \ |-' | | \ '-| / grip --> | | | | \ | | <-- grip | | | | T-shaped | | | | | | handle-bar | | |___| | | |___| mirror --> | / | | | | \ | <-- mirror |_____| | | |_____| | | | | | | | | |___| <-- plug this end into socket |
Controllers - UForce Games and Game Switches |
Uforce Power Games (USA) (Prototype) (1990) Broderbund |
Hose'em Down: Use "Top" as ANALOG left/right Use "Lower-Left in Lower Area" as ANALOG up/down Nuclear Rat Attack: Use upper-four sensors as DIGITAL push buttons Rock on Air: Use left four sensors as DIGITAL push buttons Use "Top" as ANALOG pitch Use "Bottom" as ANALOG volume Power Field B-Ball Use "Upper-Left in Upper Area" as walk left Use "Lower-Left in Upper Area" as walk right Use "Upper-right in Upper Area" as throw Use whatever as jump |
Mode SW1 SW2 SW3 SW4 Hinge/Angle Add-on Purpose A Up Up Up Down Upright 85' T-Bar Various Games (Forward View) B Down Up Up Up Tilt 110' Pow-Bar Mike Tyson's Punch-Out!! C Up Down Up Down Upright 85' - Rad Racer D Down Down Up Up Upright 85' - Excitebike E Down Up Down Down Flat 180' - Various Games (Side Scroll) F Down Down Down (Down) (var) (var) Analog (UForce Power Games) |
- Up Up Down (any) (any) (any) Reportedly same as Mode A - Up Down Down (any) (any) (any) Unknown |
Controllers - Barcode Readers |
Dragon Ball Z: Gekito Tenkaichi Budokai (December 1992) Ultraman Club: Spokon Fight!! (April 1993) SD Gundam: Gundam Wars (April 1993) Crayon Shin-Chan: Orato Poi Poi (August 1993) (this WITHOUT barcode support) Yu Yu Hakusho: Bakuto Ankoku Bujutsue (October 1993) Battle Rush: Build Up Robot Tournament (November 1993) J League: Super Top Players (April 1994) |
[6000h].R.Bit3 Barcode Sensor (0=Black, 1=White) |
All Black ;no card inserted 61 pixels White ;leading white space (ca. 61 pixels on included cards) 95 pixels Stripes ;barcode (95 pixels for EAN-13 and UPC-A codes) 61 pixels White ;ending white space (ca. 61 pixels on included cards) All Black ;no card inserted |
Barcode World (1992) Sunsoft (JP) (includes cable with 15pin connector) |
Controllers - Barcode Battler (barcode reader) |
Barcode World (1992) Sunsoft (JP) (includes cable with 15pin connector) |
Alice's Paint Adventure (1995) Amazing Spider-Man, The - Lethal Foes (19xx) Barcode Battler Senki Coveni Wars (1993) Epoch Donald Duck no Mahou no Boushi (19xx) Doraemon 2: Nobita's Great Adventure Toys Land (1993) Doraemon 3: Nobita and the Jewel of Time (1994) Doraemon 4 - Nobita to Tsuki no Oukoku (19xx) Doroman (canceled) Dragon Slayer - Legend of Heroes 2 (1993) Epoch J-League Excite Stage '94 (1994) J-League Excite Stage '95 (1995) Lupin Sansei - Densetsu no Hihou wo Oe! (19xx) Super Warrior Combat (19xx - does this game exist at all?) |
Region__Case___EXT___Barcode-Reader__Name__________________Year___ Japan White None Yes Barcode Battler 1991 Japan Black 1 Yes Barcode Battler II 1992 Japan Black 2 None Barcode Battler II^2 199x Europe Black 1 Yes Barcode Battler 1992/1993 |
Unknown if all 3 pins are actually used by NES/SNES cable/interface? Unknown if NES/SNES software can access LCD/buttons/speaker/EEPROM ? |
"OK" All is well, the device is operating as normal. "ER" Maybe there's something wrong? "BBII" The Barcode Battler is sending data to the device. "SFC" The SFC/SNES is waiting for a signal from the Barcode Battler. |
80pin NEC uPD75316GF (4bit CPU with on-chip 8Kx8 ROM, 512x4 RAM, LCD driver) 8pin Seiko S2929A (Serial EEPROM, 128x16 = 2Kbit) (same/similar as S29290) 3pin EXT socket (3.5mm "stereo" jack) (only in new versions with black case) LCD Screen (with 7-segment digits and some predefined words/symbols) Five LEDs (labelled "L/R-Battle Side") Seven Push Buttons (L/R-POWER, L/R-Battle, Power on/off, Select, Set) Speaker with sound on/off switch (both on bottom side) Barcode reader (requires card-edges to be pulled through a slot) Batteries (four 1.5V AA batteries) (6V) |
Controllers - Barcode Battler Transmission I/O |
1st..12th Unknown/unused (probably always 0=High?) 13th..16th ID Bits3..0 (MSB first, 1=Low=One) (must be 0Eh) 17th..24th Extended ID Bits7..0 (MSB first, 1=Low=One) (must be 00h..03h) (the SNES programs accept extended IDs 00h..03h, unknown if/when/why the BBII hardware does that send FOUR values) 25th Status: Barcode present (1=Low=Yes) 26th Status: Error Flag 1 ? 27th Status: Error Flag 2 ? 28th Status: Unknown ? |
29th-32th 1st Barcode Digit, Bits3..0 (MSB first, 1=Low=One) 33th-36th 2nd Barcode Digit, Bits3..0 (MSB first, 1=Low=One) 37th-40th 3rd Barcode Digit, Bits3..0 (MSB first, 1=Low=One) 41th-44th 4th Barcode Digit, Bits3..0 (MSB first, 1=Low=One) 45th-48th 5th Barcode Digit, Bits3..0 (MSB first, 1=Low=One) 49th-52th 6th Barcode Digit, Bits3..0 (MSB first, 1=Low=One) 53th-56th 7th Barcode Digit, Bits3..0 (MSB first, 1=Low=One) 57th-60th 8th Barcode Digit, Bits3..0 (MSB first, 1=Low=One) 61th-64th 9th Barcode Digit, Bits3..0 (MSB first, 1=Low=One) 65th-68th 10th Barcode Digit, Bits3..0 (MSB first, 1=Low=One) 69th-72th 11th Barcode Digit, Bits3..0 (MSB first, 1=Low=One) 73th-76th 12th Barcode Digit, Bits3..0 (MSB first, 1=Low=One) 77th-80th 13th Barcode Digit, Bits3..0 (MSB first, 1=Low=One) 81th and up Unknown/unused Above would be 13-digit EAN-13 codes Unknown how 12-digit UPC-A codes are transferred ;\whatever leading Unknown if/how 8-digit EAN-8 codes are transferred ; or ending padding? Unknown if/how 8-digit UPC-E codes are transferred ;/ |
1 Start bit (must be 1=LOW) 8 Data bits (LSB first, 1=LOW=Zero, 0=HIGH=One) 1 Stop bit (must be 0=HIGH) |
"nnnnnnnnnnnnn" ;13-digit EAN-13 code (ASCII chars 30h..39h) <Unknown> ;12-digit UPC-A code (with ending/leading padding?) " nnnnnnnn" ;8-digit EAN-8 code (with leading SPC-padding, ASCII 20h) <Unknown> ;8-digit UPC-E code (with ending/leading padding?) "ERROR " ;indicates scanning error |
"EPOCH",0Dh,0Ah ;<-- this is sent/accepted by existing hardware/software "SUNSOFT" ;<-- this would be alternately accepted by the NES game |
Controllers - Barcode Battler Drawings |
_______________________________ .---""" _______________________ """---. | /\ | | /\ | | \ \ | | / / | | L \/ | LCD Screen | \/ R | | POWER | | POWER | | /\ | | /\ | | \ \ | | / / | | L \/ |_______________________| \/ R | | BATTLE BATTLE | | O O O O O | | L <-- Battle Side --> R | ) EXT | | On/off Select Set | | [====] [====] [====] | '---_____________________________________---' --> : _____________________________ : --> --> pull card this way :/ CARD IN --> \: |_______________________________| |
_______________________________ .---""" : : """---. | : Battery Lid : | | : (Four AA Batteries) : | | : : | | :.........................: | | | | | | | | __ | | o |__| | | o o o Sound | | o on/off ( <-- 3.5mm 3pin | Speaker | EXT socket | | '---__ __---' | | | | |_______________________________| |
_______________ ___________ _______________ | .-------. _|__ESCAPE___|_ .-------. | | | FIGHT | / < SUPER HIT > \ |RECOVER| | | |BARCODE| /|_______________|\ | MISS | | | '-------' '-------' | | (*) (/) (K) POWER INPUT (i) (/) (*) | | _ _ _ _ _ _______ _ _ _ _ _ | | |_||_||_|| || | |ENERGY | |_||_||_|| || | | | |_||_||_||_||_| |DAMAGE | |_||_||_||_||_| | | _ _ _ _ _ |_______| _ _ _ _ _ | | |_||_||_|| || | |ATTACK | |_||_||_|| || | | | |_||_||_||_||_| | MAGIC | |_||_||_||_||_| | | _ _ _ _ _ |_______| _ _ _ _ _ | | |_||_||_|| || | |DEFENCE| |_||_||_|| || | | | |_||_||_||_||_| |SURVIVA| |_||_||_||_||_| | |_________________|_______|_________________| |
_________________ cables -> / _______ '''---> 3pin 3.5mm "stereo" EXT connector _____|_____|____ '''---> 7pin SNES/SuperFamicom connector ___| |___ | | _.----> 3pin 3.5mm "stereo" EXT connector | BBII INTERFACE | .-' | | | | O O O O | '-_ cable |________________________| ''-------> 15pin Famicom connector |
_________________________________________________ | | | NINJA STAR WEAPON-17 | | > INSERT | | ----------------------^------------------------ | | | | | | ___ /___\ ____ | | ___---""" /__/ \__\ """---___ | | ---___ __ O __ ___--- | | """---___\ _\ /_ /___---""" / | | \ / / | | | | /_ | | ----------------------V--------------------'( ) | | ST 400 ||| | |_________________________________________________| |
_________________________________________________ | | | BARCODE BATTLER | | NINJA STAR | | 1992 Epoch | | A lethal weapon which demands skill, patience | | and, most important, perfect timing. Send it | | spinning at the enemy when the Battler spirit is| | with you and the effect can be devasting. Time | | it wrong and the star may harmlessly bounce off | | their defences. | | || || |||| || || |||| || || |||| | | || || |||| || || |||| || || |||| | | || || |||| || || |||| || || |||| | |_________________________________________________| |
Controllers - Barcode Formats |
EAN-13 13-digits in 12 symbols (extra digit encoded in parity) UPC-A 12-digits in 12 symbols EAN-8 8-digits in 8 symbols UPC-E 8-digits in 6 symbols (extra digits encoded in parity) |
Digit Left/Odd Left/Even Right/Even 0 ...##.# .#..### ###..#. 1 ..##..# .##..## ##..##. "." = White 2 ..#..## ..##.## ##.##.. "#" = Black 3 .####.# .#....# #....#. 4 .#...## ..###.# #.###.. 5 .##...# .###..# #..###. 6 .#.#### ....#.# #.#.... Left Sync Mark: #.# 7 .###.## ..#...# #...#.. Center Sync Mark: .#.#. 8 .##.### ...#..# #..#... Right Sync Mark: #.# 9 ...#.## ..#.### ###.#.. |
Digit 1st=0 1st=1 1st=2 1st=3 1st=4 1st=5 1st=6 1st=7 1st=8 1st=9 Parity OOOOOO OOEOEE OOEEOE OOEEEO OEOOEE OEEOOE OEEEOO OEOEOE OEOEEO OEEOEO |
UPC-E UPC-A tMmpppXc --> tMmX0000pppc ;with X=0..2 ;\for UPC-E, first digit (t) tMmmpp3c --> tMmm00000ppc ; may be 0..1 only), tMmmmp4c --> tMmmm00000pc ; last digit (c) must be checksum tMmmmmXc --> tMmmmm0000Xc ;with X=5..9 ;/of the "decompressed" UPC-A code |
Digit 8th=0 8th=1 8th=2 8th=3 8th=4 8th=5 8th=6 8th=7 8th=8 8th=9 1st=0 EEEOOO EEOEOO EEOOEO EEOOOE EOEEOO EOOEEO EOOOEE EOEOEO EOEOOE EOOEOE 1st=1 OOOEEE OOEOEE OOEEOE OOEEEO OEOOEE OEEOOE OEEEOO OEOEOE OEOEEO OEEOEO Left Sync Mark: #.# Center Sync Mark: None Right Sync Mark: .#.#.# |
EAN-13 Checksum Weighting: 1-313131-313131 ;1=counted once UPC-A Checksum Weighting: 313131-313131 ;3=counted thrice EAN-8 Checksum Weighting: 3131-3131 UPC-E Decompress UPC-E to UPC-A, then do UPC-A checksumming |
Controllers - Pachinko |
Pachinko Daisakusen (J) 1991 Coconuts/C*Dream Pachinko Daisakusen 2 (J) 1992 Coconuts/C*Dream Pachio Kun 4 (J) 1991 Coconuts/C-Dream Pachio Kun 5 (J) 1993 Coconuts/C-Dream |
1st..8th bit --> same as normal joypad data 9th..16th bit --> analog ADC data (MSB first, inverted, 1=Low=Zero) 17th and up --> unknown/unused |
.----------. __.---------. | ) | / \ | / // \ | _ | /| | | _| |_ | /_| | | |_ _| | \ B A | | |_| \ ) ( ) ( ) | | \___/ / | SEL STA / | coconuts japan / '--------------------------' |
Controllers - Microphones |
* Atlantis no Nazo (NES = Super Pitfall II) - get the microphone power-up and then yell into the microphone to freeze and kill most enemies. * Hikari Shinwa: Palutena no Kagami (NES = Kid Icarus) - talk into the microphone to bargain for lower shop prices. * Raid on Bungeling Bay (NES = Raid on Bungeling Bay) - ? * SD Kamen Rider -- in one of the mini games, blow air into the microphone to get a windmill to spin. * Takeshi no Chousenjou - microphone section, where players are required to sing a verse of karaoke or talk whilst playing a pachislo minigame (the microphone section was replaced in later versions of the game once the microphone was dropped from the Famicom). * Zelda no Densetsu: The Hyrule Fantasy (cart/disk) (NES = The Legend of Zelda) - yell into the microphone to kill Pols Voice enemies. |
Controllers - Reset Button |
Controllers - Arcade Machines |
Storage Data Recorder |
Castle Excellent (supports both Data Recorder and Turbo File) Excitebike Family Basic Lode Runner (unknown HOW to access LOAD/SAVE menu... maybe via keyboard?) Mach Rider Wrecking Crew |
Storage Turbo File |
4016h.Write.Bit0 = Data.Out (must be same as OLD data when READING data) 4016h.Write.Bit1 = Reset Address to Offset 0000h 4016h.Write.Bit2 = Data.Clock 4017h.Read.Bit2 = Data.In (can be ignored when WRITING data) |
[4016h]=00h ;reset address to zero [4016h]=02h ;release reset |
old=[4017h].bit2 ;get old data [4016h]=old+06h ;output data and clk=high [4016h]=old+02h ;output data and clk=low |
[4016h]=new+06h ;output data and clk=high [4016h]=new+02h ;output data and clk=low |
2 ID "AB" (41h,42h) 2 Filesize (16+N+2) (including title and checksum) 16 Title in ASCII (terminated by 00h or 01h) N Data Portion 2 Checksum (all N bytes in Data Portion added together) |
1 Don't care (should be 00h) ;fixed, at offset 0001h 2 ID AAh,55h ;fixed, at offset 0002h..0003h 508 Data Portion (Data, end code "BEDEUTUN", followed by some unused bytes) |
The early version has transferred all bytes in reversed bit-order, so above ID bytes AAh,55h will be seen as 55h,AAh in newer versions! |
Best Play Pro Yakyuu (1988) ASCII (J) Best Play Pro Yakyuu '90 (1990) (J) Best Play Pro Yakyuu II (1990) (J) Best Play Pro Yakyuu Special (1992) (J) Castle Excellent (1986) ASCII (J) (early access method without filename) Derby Stallion - Zenkoku Ban (1992) Sonobe Hiroyuki/ASCII (J) Downtown - Nekketsu Monogatari (19xx) Technos Japan Corp (J) Dungeon Kid (1990) Quest/Pixel (J) Fleet Commander (1988) ASCII (J) Haja no Fuuin (19xx) ASCII/KGD (J) Itadaki Street - Watashi no Mise ni Yottette (1990) ASCII (J) Ninjara Hoi! (J) Wizardry - Legacy of Llylgamyn (19xx?) (J) Wizardry - Proving Grounds of the Mad Overlord (1987) (J) Wizardry - The Knight of Diamonds (1991) (J) |
!! Best Keiba - Derby Stallion (1991) Sonobe Hiroyuki/ASCII (J) !! Famicom Shougi - Ryuuousen (1991) I'MAX/HOME DATA (J) !! Money Game 2 - Kabutochou no Kiseki, The (1989) Sofel Ltd (J) ! Castlequest (U) US VERSION of Castle Excellent (FUNCTIONAL???) ! Kunio 8-in-1 [p1] (pirate multicart, probably contains a TF-game?) |
Ardy Lightfoot (1993) Derby Stallion II (1994) Derby Stallion III (1995) (supports both TFII and STF modes) Derby Stallion 96 (1996) (supports TFII and STF and Satellaview-FLASH-cards) Derby Stallion 98 (NP) (1998) (supports both TFII and STF modes) Down the World: Mervil's Ambition (1994) Kakinoki Shogi (1995) ASCII Corporation Tactics Ogre - Let Us Cling Together (supports both TFII and STF modes) Wizardry 5 - Heart of the Maelstrom (1992) Game Studio/ASCII (JP) BS Wizardry 5 (JP) (Satellaview BS-X version) |
.--------. 74HC368 .---||--GND .--------. D0-----PORT1.2 GND---|1A /Y1|---NC | 680pF |4024 Q1|---NC OUT2---|2A /Y2|-------------o-----/OUT2 | Q2|---NC /OUT2---|3A /Y3|--------[100]--o------------|/CLK Q3|---NC GND---|/OE1 | |1000pF | Q4|-------. | - - - -| '--||-GND | Q5|---NC | OUT1---|4A /Y4|-----------------------o----|RST Q6|---NC | OUT0---|5A /Y5|----------. | | Q7|---NC | GND---|6A /Y6|---NC | | '--------' | /OUT2---|/OE2 | | | .-------------o-----' SRAM 8Kx8 '--------' | | | | .-------.LH5164L-10 OUT1-----[10K]---GND | | | .--------. '-|A0 NC|--NC OUT2-----[10K]---GND | | | |4040 Q1|---|A1 D0|--D0 .--------. 74HC573 | | | | Q2|---|A12 D1|--D1 /OUT2---|G | | | '--|/CLK Q3|---|A7 D2|--D2 /OUT2---|/OE | | | | Q4|---|A6 D3|--D3 D7---|D0 Q0|---D6 | '----|RST Q5|---|A4 D4|--D4 D6---|D1 Q1|---D5 | | Q6|---|A3 D5|--D5 D5---|D2 Q2|---D4 | | Q7|---|A5 D6|--D6 D4---|D3 Q3|---D3 | | Q8|---|A11 D7|--D7 D3---|D4 Q4|---D2 o OFF | Q9|---|A10 /OE|--GND D2---|D5 Q5|---D1 \ PROTECT | Q10|---|A9 /WE|--/OUT2 D1---|D6 Q6|---D0 \ SWITCH | Q11|---|A8 /CE|--/GOOD D0---|D7 Q7|-------o o-----------D7 | Q12|---|A2 CE2|--OUT1 '--------' ON '--------' '-------' Plus, a bunch of transistors, resistors, diodes that control supply and battery, power LED, and power /GOOD signal. Battery standby supply is wired to the SRAM, and also to the 74HC368. Note: Turbo File II uses 32Kx8 SRAM which lacks CE2 pin, so schematic may be a bit different; and of course, A13 and A14 are somehow wired to the 4-position switch for 8K bank selection. |
Storage Battle Box |
Armadillo (J) 199x Battle Stadium - Senbatsu Pro Yakyuu (J) 1990 IGS J-League Fighting Soccer - The King of Ace Strikers (J) 1993 IGS Seiryaku Simulation - Inbou no Wakusei - Shancara (J) 1992 IGS |
.-------. VCC--||--GND GND--|RES Q|---------------------------. GND--|SET | 4027 TOSHIBA | TOSHIBA PORT1.CLK--[330]--o------|CLK | Dual J-K TC89102P | TC89102P | .---|J | flip-flop .---------. | .---------. | | .-|K /Q|-------------|/CS | '---|/CS | | | | '-------' VCC---|ORG |-------|ORG | OUT0------------- | -o-o-----------------------|/CLK |-------|/CLK | | .-------. | | | | GND-|>|-PORT1.3 | GND--|RES Q|-------------|DI |-------|DI | GND-|>|-PORT1.4 | GND--|SET | .---|DO |-------|DO | GND-|>|-OUT0 '------|CLK | | '---------' '---------' GND-|>|-PORT1.CLK VCC--|J | '----------------PORT1.3 VCC--|K /Q|--------------------------PORT1.4 Components: '-------' 1x 4027 (dual J-K flip-flops) 2x TOSHIBA TC89102P (two 256x8 bit EEPROMs) (=512 bytes total capacity) 4x Z-diodes 6.2V, 1x resistor 330 ohm, 1x capacitor 100nF, 15pin connector Note: ORG=VCC selects 128x16bit chip mode (ORG=GND would be 256x8bit mode) |
Storage Battle Box I/O Access |
[4016h].W.Bit0 --> CLK to EEPROM (and, when set, enable chipselect toggle) [4017h].R --> toggle DATA to EEPROM (always) [4017h].R --> toggle 1st/2nd EEPROM chipselect (when [4016h].W.Bit0=1) [4017h].R.Bit3 <-- DATA from EEPROM [4017h].R.Bit4 <-- DATA to EEPROM (status of current toggled output value) |
Binary Toshiba NES 10000000 01h 80h --> Read 01100000 06h 60h --> Program 00110000 0Ch 30h --> Chip Erase 10110000 0Dh B0h --> Busy Monitor 10010000 09h 90h --> Erase/Write Enable 11010000 0Bh D0h --> Erase/Write Disable |
if cmd<>B0h then battle_box_command(B0h,addr,0) ;- [4016h]=01h ;OUT0=1 ;\start transfer, dummy=[4017] ;toggle chipsel ; toggle chipsel if (addr AND 1)<>battle_box_chipsel then dummy=[4017] ; depending on addr.0 battle_box_chipsel = (addr AND 1) ;/ battle_box_send_byte(((addr/2) AND FEh)+(addr AND 01h)) ;\send addr/cmd battle_box_send_byte(cmd+addr/200h) ;/ if cmd=B0h ;Busy Mode ;\wait busy (if any) wait until battle_box_recv_bit=0 ;/ if cmd=80h ;Read Word ;\ data1st=battle_box_recv_byte ; read data (if any) data2nd=battle_box_recv_byte ;/ if cmd=60h ;Write Word ;\ battle_box_send_byte(data1st) ; write data (if any) battle_box_send_byte(data2nd) ;/ dummy=[4017h] ;toggle chipsel ;\finish transfer [4016h]=00h ;OUT0=0 ;/ |
battle_box_command(80h,000h,data) ;read ID ("B"=42h, or "X"=58h) from addr 0 battle_box_chipsel=battle_box_chipsel XOR data.bit3 |
data=data XOR FFh ;-invert for i=7 downto 0 [4016h]=00h ;OUT0=0 dummy=[4017h] ;toggle DTA.OUT and get output level if dummy.bit4<>data.bit(i) then dummy=[4017h] ;toggle DTA.OUT [4016h]=01h ;OUT0=1 next i |
for i=7 downto 0 data.bit(i)=battle_box_recv_bit next i data=data XOR FFh ;-invert |
[4016h]=00h ;OUT0=0 dummy=[4017h] ;read DATA bit=dummy.bit3 [4016h]=01h ;OUT0=1 |
Storage Battle Box Filesystem |
000h..005h Root Header (6 bytes) 006h..xxxh File(s) (variable size) (max 1F9h bytes) yyyh First Free byte (1Ah) (1 byte) zzzh..1FFh Unused Space (FFh filled or garbage or so) |
00h ID "B" for Chip 1 (42h) 01h ID "X" for Chip 2 (58h) 02h 00h ;\maybe total chip size 0200h ? 03h 02h ;/ 04h LSB ;\address of first FREE byte (ie. address of the 1Ah byte) 05h MSB ;/ |
00h 42h "B" ;-File ID (42h="B"=Used File) (or 1Ah=First Free Byte) 01h SIZE.LSB ;\Total Filesize (including File ID and Checksum) 02h SIZE.MSB ;/ 03h GAME.LSB ;\Game ID (0000h=Stadium, 0001h=Armadillo, 0002h=Soccer) 04h GAME.MSB ;/ 05h GAME.TITLE ;-Game Title (ASCII, 8 chars) (eg. "F SOCCER" or "RMADILLO") 0Dh.. file body ;-Body (total_filesize minus 0Fh bytes) ... CHK.LSB ;\Checksum (all bytes in BODY added together) ... CHK.MSB ;/ |
Offset Physical Content (Usage) 000h 1st byte of 1st Word of Chip 1 (ID Byte: "B" for Chip 1) 001h 1st byte of 1st Word of Chip 2 (ID Byte: "X" for Chip 2) 002h 2nd byte of 1st Word of Chip 1 (00h) 003h 2nd byte of 1st Word of Chip 2 (02h) 004h 1st byte of 2nd Word of Chip 1 (address LSB of first free byte) 005h 1st byte of 2nd Word of Chip 2 (address MSB of first free byte) 006h 2nd byte of 2nd Word of Chip 1 (File ID: "B") (or 1Ah if no file) 007h 2nd byte of 2nd Word of Chip 2 (File Size LSB) (or unused) ... (...) 1FCh 1st byte of 128th Word of Chip 1 1FDh 1st byte of 128th Word of Chip 2 1FEh 2nd byte of 128th Word of Chip 1 1FFh 2nd byte of 128th Word of Chip 2 |
Hori Game Repeater |
1x Toshiba N (42pin 4bit single-chip CPU: ROM:2048x8, RAM:128x4) 2x Toshiba TC5563APL-15 (28pin static ram: RAM:8192x8) 1x TC4011BP 14pin (quad NAND) 1x TC4062UBP ? (or is it "8"UBP?) 14pin 1x TC4078BP 16pin (is that "8"BP?) 1x TC4021BP 16pin (8bit parallel-in, serial-out shift register) 1x NEC D4094BC ? 16pin (8bit serial-in, parallel-out shift register) 3x small buttons (tape recorder LOAD,SAVE,VERIFY) 1x bigger button (sampling START) 2x two-position switches (REPEAT/RECORD, and STOP/STANDBY) 2x small LEDs (tape recorder LOAD,SAVE) 2x cassette connector (tape recorder LOAD,SAVE) 1x male dsub 15pin connector (to famicom console) 1x female dsub 15pin connector (to external joystick) 1x DC input socket (from power supply) 1x DC output cable (to famicom console) 1x 7805 ? voltage converter 1x unknown thing/unknown purpose (on front side) (connector? dip-switches?) |
Headphones |
S.D. Station (Hori) (adaptor for Headphones and Tape Recorder) Joycard Sanusui SSS (Hudson) (with adapter for headphones) Multi Adapter AX-1 (headphones plus auto-fire or so) LaserScope/Gun Sight (Konami) (headset: headphones + voice-activated zapper) |
R.O.B. (Robotic Operating Buddy) |
Gyromite (Robot Gyro) (1985) (JP) (US) (EU) Stack Up (Robot Block) (1985) (JP) (US) |
Sun-glasses (dark transparent cover, for compensating brightness of the TV) 4 AA batteries (for powering the robot) |
2 robot-gloves with zig-zagged surface (for holding the spinning gyros) 2 gyros (heavy spintops that can be used to depress red/blue trays) 2 red/blue trays (with levers to push buttons on joypad 2) 2 black trays (for depositing gyros when not using them) 1 spinner (accellerates the gyros; for stabilizing them on red/blue trays) 1 battery (for powering the spinner motor) |
2 robot-gloves with flat rubber-coated surface (for holding blocks) 5 differently colored stack-able blocks (to be arranged in specific orders) 5 gray trays (for depositing the blocks on them) |
Left/Right Motor five stopping points (60'/step, 240' total range) Up/Down Motor six stopping points (1.4 cm/step, 7 cm total range) Open/Close Motor two stopping points (7 cm/step, 7 cm total range) |
Command <------- Command Transfer Phase (13 Frames) --------> Left xxx.xxx.___.___.___.GGG.___.GGG.___.GGG.GGG.GGG.___.GGG.___.xxx.xxx Right xxx.xxx.___.___.___.GGG.___.GGG.GGG.GGG.___.GGG.___.GGG.___.xxx.xxx Up xxx.xxx.___.___.___.GGG.___.GGG.GGG.GGG.GGG.GGG.___.GGG.___.xxx.xxx Down xxx.xxx.___.___.___.GGG.___.GGG.___.GGG.___.GGG.GGG.GGG.___.xxx.xxx Open xxx.xxx.___.___.___.GGG.___.GGG.GGG.GGG.___.GGG.GGG.GGG.___.xxx.xxx Close xxx.xxx.___.___.___.GGG.___.GGG.___.GGG.GGG.GGG.GGG.GGG.___.xxx.xxx Test ___.GGG.___.GGG.___.GGG.___.GGG.___.GGG.___.GGG.___.GGG.___.GGG.___ Picture xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx |
Left/Right --> Turn Shoulders & Arms & Shaft Left/Right (in 60' steps) Up/Down --> Move Shoulders & Arms Up/Down (in 1.4cm steps) Button A --> Open Arms (Release) Button B --> Close Arms (Grab) |
Red-Tray (Slot 2) ---> lever pushes B-Button on Joypad 2 Blue-Tray (Slot 3) ---> lever pushes A-Button on Joypad 2 |
R.O.B. Technical Drawings |
Sun- Eyes (with CRT light sensor) glasses | | | LED (glows when sensing CRT signals) _ __o____ | --> |-| |_ <------ Head (to be aimed at TV Set) |_ |-|_________| _#_ <-------- Inner Shaft (holds head, not rotating) | | Hand | | <-------- Outer Shaft (rotates alongside with shoulders) _ Arm __|___|____ | |======| | <---- Shoulders (moves up/down along outer shaft) |_|======|___________|----. | | \ Slot2 | | Slot1 \ <-- Spiral Cable (from base to shoulders) Slot3 | | | | Pwr \ \ ____|__|___|__|__|_ \ |: # : # :|-' |:________:________:| <---- Base |
__ _______________ __ __ _______________ __ / | Shaft | \ Shoulder / | Shaft | \ | | ___ | | (top-view) | | ___ | | |_ / | | \ _| |_ / | | \ _| / || |___| || \ | || |___| || | / | \_______________/ | \ | \\_______________// | / / \ \ | |_ _| | \ \ Open/Spread / / Arms |___ \ Close / ___| \ \ (Release) / / \ \ (Grab) / / | | | | \ \ / / _|___|_ _|___|_ _\___\_ _/___/_ | | O | | | | O | | Hands | | O | | | | O | | |_|___|_| |_|___|_| |_|___|_| |_|___|_| |
Power Switch ----------. /////// <----- Spiral Cable (for four AA batteries) _____|_____ (to shoulders) _| |_| |_ / | | \ / | | \ Accessory Slot 5 --> /5 | | 1\ <-- Accessory Slot 1 (for stack-up tray, / / ___ \ \ (for stack-up tray, or gyromite / | | | | \ or gyromite spinner) black tray) \ | |___| | / \ \ Shaft / / Accessory Slot 4 --> \4 | | 2/ <-- Accessory Slot 2 (for stack-up tray, \ | | / (for stack-up tray, or gyromite \_| __3__ |_/ or gyromite red-tray black tray) |__| ^ |__| with lever to B-Button) | Accessory Slot 3 (for stack-up tray, or gyromite blue-tray with lever to A-Button) |
__ __ | \_/ | <------ white block |Arm| Block |Arm| |__ __| | | _ __ _ | | | \_/ | <------ red block _|___|_| # / \ # |_|___|_ |__ __| | | O | | # | | # | | O | | .===\_/===. <------ tray (gray ring) |_|___|/ # | | # \|___|_| \\ Hand |__# \__/ #__| Hand \\ <------ to slot on base unit Glove Glove |
____ Grab here ------------> (____) |Arm| Gyro |Arm| (with robot claws) | | | | _ _ Axis _ | | | | <-- Axis _|___|_| | / /| |_|___|_ | | | | O | | |/ /\ \| | | O | | Gyro | | (Spintop) |_|___|/ |\ \/ /| \|___|_| ________|__|________ Hand |__|_\ \|__| Hand Disk ---------> (____________________) Glove Glove (side view) | | | | \/ ___ ___ ___ ___ __ | | | | (__ | | __) Lever | | | | | | || || _ _ Lever Axis | | |____\/____| | \/ | \\______//___________________ | | _|______ | |____| \______/__________________ O\_ | | | Motor \_____|_ | | | | / \___|(| | | with Battery | | | | |_________________/_/______| |_ |________________| |__| |__|________________________|_|__|_| Spinner Black Trays Blue/Red Trays Joypad |
Cartridges and Mappers |
http://wiki.nesdev.com/w/index.php/Category:INES_Mappers (when inventing new mapper numbers, best include them in above list) |
http://kevtris.org/mappers/mappers.html ;<-- secret undocumented link!? |
http://kevtris.org/nes/mappers.html ;<-- official link on NES page!? |
http://kevtris.org/nes/vrcvii.txt ;<-- or vrcvi for VRC 6 |
Cartridge Overview |
Type Games Percent Mapper 0 (NROM) 446 12.5% Mapper 1 (MMC1) 723 20.3% Mapper 2 (UNROM) 397 11.2% Mapper 3 (CNROM) 273 7.7% Mapper 4 (MMC3) 784 22.1% Mapper 20 (FDS) ? x.x% Other Mappers 932 26.2% Total 3555 100.0% |
The linear address for a 4K bank is (N*4096). The linear address for a 4x1K bank is ((N AND (NOT 3))*1024). |
Cartridge ROM-Image File Formats |
00h File ID ("NES",1Ah) (aka 4Eh,45h,53h,1Ah) 04h Number of 16K PRG-ROM pages 05h Number of 8K CHR-ROM pages (00h=None / VRAM) 06h Cartridge Type LSB Bit7-4 Mapper Number (lower 4bits) Bit3 1=Four-screen VRAM layout Bit2 1=512-byte trainer/patch at 7000h-71FFh Bit1 1=Battery-backed SRAM at 6000h-7FFFh, set only if battery-backed Bit0 0=Horizontal mirroring, 1=Vertical mirroring 07h Cartridge Type MSB (ignore this and further bytes if Byte 0Fh nonzero) Bit7-4 Mapper Number (upper 4bits) Bit3-2 Reserved (zero) Bit1 1=PC10 game (arcade machine with additional 8K Z80-ROM) (*) Bit0 1=VS Unisystem game (arcade machine with different palette) 08h Number of 8K RAM (SRAM?) pages (usually 00h=None-or-not-specified) 09h Reserved (zero) 0Ah Reserved (zero) (sometimes 03h,10h,13h,30h,33h purpose unknown) (*) 0Bh Reserved (zero) 0Ch Reserved (zero) 0Dh Reserved (zero) 0Eh Reserved (zero) 0Fh Nonzero if [07h..0Fh]=GARBAGE, if so, assume [07h..0Fh]=ALL ZERO (*) |
16 byte Header 512 byte Trainer ;-if any, see Byte 6, Bit2, mainly FFE games N*16K PRG-ROM ;-see Byte 4 N*8K CHR-ROM ;-if any, see Byte 5 8K (*) PC10 INST-ROM ;-if any, see Byte 7, Bit1 16 byte (*) PC10 PROM Data ;-if any, see Byte 7, Bit1 ;\required, but 16 byte (*) PC10 PROM CounterOut;-if any, see Byte 7, Bit1 ;/often missing 128 byte (*) Title ;-if any (rarely used) |
http://wiki.nesdev.com/w/index.php/NES_2.0 |
00h-03h: "UNIF" tag identifier 04h-07h: Revision number ("currently 4, for REV 7b, Revision 6 of UNIF" Huh!) 08h-1Fh: Reserved for future usage |
00h-03h: Chunk ID string (4-letter ASCII, described below) 04h-07h: Length of Data Block in bytes (excluding above ID and length entry) 08h... : Data |
This uses ASCIZ strings to describe the board names (instead of iNES mapper numbers), it's meant to be more specific than mapper numbers, for example, it's using different names for different MMC1-boards. http://www.parodius.com/~veilleux/boardtable.txt http://www.parodius.com/~veilleux/boardnames |
Normally using only PRG0 (and CHR0, if VROM used). In rare cases, if the cart contains more than 1 PRG (or CHR) ROM chip, then PRG1-F and CHR1-F may be used for the additional chips. |
00h 60Hz/NTSC (USA, Japan, etc.) 01h 50Hz/PAL (Germany, etc.) 02h Compatible with both 50Hz and 60Hz refresh rates |
Bit0 Regular Joypad Bit1 Zapper Bit2 R.O.B. Bit3 Arkanoid Controller (Paddle) Bit4 Power Pad Bit5 Four-Score adapter (NES 4-player adapter) (Not Famicom adapter!) Bit6-7 Reserved |
00h Two-Screen Horizontal Mirroring (Hard Wired) 01h Two-Screen Vertical Mirroring (Hard Wired) 02h Single-Screen BLK0 (Hard Wired) 03h Single-Screen BLK1 (Hard Wired) 04h Four-Screens of VRAM (Hard Wired) 05h Mirroring Controlled By Mapper Hardware |
Presence of this chunk means yes, absence means no. |
Game Title |
Probably some sort of ASCII text of unspecified formatting |
Presence of this chunk means yes, absence means no. |
Intended "to make sth sure on EPROMs" ;-) Checksum algorythm not specified. |
100 bytes ASCIZ name of the person who dumped the cart 4 bytes day, month, year-lsb, year-msb when cartridge was dumped 100 bytes ASCIZ agent "name of the ROM-dumping means used" |
Cartridge IRQ Counters |
Cartridge Bus Conflicts |
Cartridge Cicurity Chip (CIC) (Lockout Chip) |
HIGH (+5V) Lock, used in console LOW (GND) Key, used in cartridge |
Cartridge CIC Pseudo Code |
CicInitFirst, CicInitTiming, CicRandomSeed, CicInitStreams time=data_start, a=1, noswap=1, if snes then noswap=0 mainloop: for x=a to 0Fh if nes then Wait(time-5), else if snes then (time-7) ;\verify idle if (nes_6113=0) and (P0.0=1 or P0.1=1) then Shutdown ;/ Wait(time+0) ;\ if (console xor snes) then a=[00h+x].0, else a=[10h+x].0 ; output data if noswap then P0.0=a, else P0.1=a ;/ Wait(time+2-data_rx_error) ;\ if (console xor snes) then a=[10h+x].0, else a=[00h+x].0 ; verify input if noswap then a=(a xor P0.1), else a=(a xor P0.0) ; if a=1 then Shutdown ;/ Wait(time+3) ;\output idle if noswap then P0.0=0, else P0.1=0 ;/ if snes then time=time+92, else if nes then time=time+79 next x CicMangle(00h), CicMangle(10h) ;\mangle if snes then CicMangle(00h), CicMangle(10h) ; (thrice on SNES) if snes then CicMangle(00h), CicMangle(10h) ;/ if snes then noswap=[17h].0 ;eventually swap input/output pins (SNES only) a=[17h] if a=0 then a=1, time=time+2 if snes then time=time+44, else if nes then time=time+29 goto mainloop |
for i=[buf+0Fh]+1 downto 1 a=[buf+2]+[buf+3h]+1 if a<10h then x=[buf+3], [buf+3]=a, a=x, x=1, else x=0 [buf+3+x]=[buf+3+x]+a for a=x+6 to 0Fh, [buf+a]=[buf+a]+[buf+a-1]+1, next a a=[buf+4+x]+8, if a<10h then [buf+5+x]=[buf+5+x]+a, else [buf+5+x]=a [buf+4+x]=[buf+4+x]+[buf+3+x] [buf+1]=[buf+1]+i [buf+2]=NOT([buf+2]+[buf+1]+1) time=time+84-(x*6) next i |
timer=0 ;reset timer (since reset released) P0=00h console=P0.3 ;get console/cartridge flag if console while P0.2=1, r=r+1 ;get 4bit random seed (capacitor charge time) P1.1=1, P1.1=0 ;issue reset to CIC in cartridge timer=0 ;reset timer (since reset released) if nes_6113 and (console=1) Wait(3), nes_6113_in_console=1, P0.0=1 ;request special 6113 mode if nes_6113 and (console=0) Wait(6), nes_6113_in_console=P0.1 ;check if 6113 mode requested |
time=seed_start for i=0 to 3 ;send/receive 4bit random seed (r) bit=((i+3) and 3) ;bit order is 3,0,1,2 (!) if console=1 Wait(time+0+i*15), P0.0=r.bit, Wait(time+3+i*15), P0.0=0 ;send if console=0 Wait(time+2+i*15), r.bit=P0.1 ;recv next i |
if snes if ntsc then x=9, else if pal then x=6 [01h..0Fh]=B,1,4,F,4,B,5,7,F,D,6,1,E,9,8 ;init stream from cartridge (!) [11h..1Fh]=r,x,A,1,8,5,F,1,1,E,1,0,D,E,C ;init stream from console (!) if nes_usa ;3193A [01h..0Fh]=1,9,5,2,F,8,2,7,1,9,8,1,1,1,5 ;init stream from console [11h..1Fh]=r,9,5,2,1,2,1,7,1,9,8,5,7,1,5 ;init stream from cartridge if nes_6113_in_console then overwrite [01h]=5 or so ??? ;special-case if nes_europe ;3195A [01h..0Fh]=F,7,B,E,F,8,2,7,D,7,8,E,E,1,5 ;init stream from console [11h..1Fh]=r,7,B,D,1,2,1,7,E,6,7,A,7,1,5 ;init stream from cartridge if nes_hongkong_asia ;3196A [01h..0Fh]=E,6,A,D,F,8,2,7,E,6,7,E,E,E,A ;init stream from console [11h..1Fh]=r,6,A,D,E,D,E,8,E,6,7,A,7,1,5 ;init stream from cartridge if nes_uk_italy_australia ;3197A [01h..0Fh]=3,5,8,9,3,7,2,8,8,6,8,5,E,E,B ;init stream from console [11h..1Fh]=r,7,9,A,A,1,6,8,5,8,9,1,5,1,7 ;init stream from cartridge if_nes_famicombox ;3198A (unknown) |
if snes_d411 -> seed_start=630, data_start=817 ;snes/ntsc if snes_d413 -> (unknown?) (same as d411?) ;snes/pal if nes_3193 -> (seems to be same as nes_3195?) ;nes/usa (v1) if nes_3195 -> seed_start=32, data_start=200 ;nes/europe if nes_3196 -> (unknown?) ;nes/asia if nes_3197 -> (unknown?) ("burns five") ;nes/uk if nes_6113 -> seed_start=32, data_start=201 ;nes/usa (v2) if nes_6113_in_console -> seed_start=33, data_start=216 ;nes/special if nes_tengen -> seed_start=32, data_start=201 ;nes/cic-clone ;now timing errors... data_rx_error=0 ;default if console=0 and nes_3193a -> randomly add 0 or 0.25 to seed_start/data_start if console=0 and snes_d413 -> always add 1.33 to seed_start/data_start (bug) if console=0 and nes_6113 -> data_rx_error=1 (and maybe +1.25 on seed/data?) if other_chips & chip_revisions -> (unknown?) |
a=0, if nes then time=830142, else if snes then time=1037682 endless_loop: ;timings here aren't 100.000% accurate if nes_3195 then time=xlat[P1/4]*174785 ;whereas, xlat[0..3]=(3,2,4,5) if (console=0) and (snes or nes_6113) then P0=03h, P1=01h if (console=1) then P1=a, Wait(timer+time), a=a xor 4 ;toggle reset on/off goto endless_loop |
Cartridge CIC Instruction Set |
A 4bit Accumulator X 4bit General Purpose Register L 4bit Pointer Register (lower 4bit of 6bit HL) H 2bit Pointer Register (upper 2bit of 6bit HL) C 1bit Carry Flag (changed ONLY by "set/clr c", not by "add/adc" or so) PC 10bit Program Counter (3bit bank, plus 7bit polynomial counter) |
ROM 512x8bit (program ROM) (NES/EUR=768x8) (max 1024x8 addressable) RAM 32x4bit (data RAM) (max 64x4 addressable) STACK 4x10bit (stack for call/ret opcodes) PORTS 4x4bit (external I/O ports & internal RAM-like ports) (max 16x4) |
00 nop no operation (aka "addsk A,0" opcode) 00+n addsk A,n add, A=A+n, skip if result>0Fh 10+n cmpsk A,n compare, skip if A=n 20+n mov L,n set L=n 30+n mov A,n set A=n 40 mov A,[HL] set A=RAM[HL] 41 xchg A,[HL] exchange A <--> RAM[HL] 42 xchgsk A,[HL+] exchange A <--> RAM[HL], L=L+1, skip if result>0Fh 43 xchgsk A,[HL-] exchange A <--> RAM[HL], L=L-1, skip if result<00h 44 neg A negate, A=0-A ;(used by 6113 mode) 45 ? 46 out [L],A output, PORT[L]=A 47 out [L],0 output, PORT[L]=0 48 set C set carry, C=1 49 clr C reset carry, C=0 4A mov [HL],A set RAM[HL]=A 4B ? 4C ret return, pop PC from stack 4D retsk return, pop PC from stack, skip 4E+n ? 52 movsk A,[HL+] set A=RAM[HL], L=L+1, skip if result>0Fh 53 ? (guess: movsk A,[HL-]) 54 not A complement, A=A XOR 0Fh 55 in A,[L] input, A=PORT[L] 56 ? 57 xchg A,L exchange A <--> L 58+n ? 5C mov X,A set X=A 5D xchg X,A exchange X <--> A 5E ??? "SPECIAL MYSTERY INSTRUCTION" ;(used by 6113 mode) 5F ? 60+n testsk [HL].n skip if RAM[HL].Bit(n)=1 64+n testsk A.n skip if A.Bit(n)=1 68+n clr [HL].n set RAM[HL].Bit(n)=0 6C+n set [HL].n set RAM[HL].Bit(n)=1 70 add A,[HL] add, A=A+RAM[HL] 71 ? (guess: addsk A,[HL]) 72 adc A,[HL] add with carry, A=A+RAM[HL]+C 73 adcsk A,[HL] add with carry, A=A+RAM[HL]+C, skip if result>0Fh 74+n mov H,n set H=n ;2bit range, n=0..3 only (used: 0..1 only) 78+n mm jmp nmm long jump, PC=nmm 7C+n mm call nmm long call, push PC+2, PC=nmm 80+nn jmp nn short jump, PC=(PC AND 380h)+nn - reset PC=000h |
Exchanged opcodes 48 <--> 49 (set/clr C) Exchanged opcodes 44 <--> 54 (neg/not A) ROM Size is 768x8 (although only 512x8 are actually used) |
Cartridge CIC Notes |
PC = (PC AND 380h) + (PC.Bit0 XOR PC.Bit1)*40h + (PC AND 7Eh)/2 |
Format <------------- Valid Address Area ----------> <--Stuck--> Linear 00 01 02 03 04 05 06 07 08 09 0A ... 7C 7D 7E or 7F 7F 7F 7F Polynomial 00 40 60 70 78 7C 7E 3F 5F 6F 77 ... 05 02 01 or 7F 7F 7F 7F |
Line 1..32 ---> Address X+9Fh..80h ;\Lines (Y) Line 33..64 ---> Address X+1Fh..00h ;/ Column 1+(n*W) --> Data Bit(n) of Address 000h+Y ;\ ;\ Column 2+(n*W) --> Data Bit(n) of Address 020h+Y ; ; Columns (X) Column 3+(n*W) --> Data Bit(n) of Address 040h+Y ; ; Column 4+(n*W) --> Data Bit(n) of Address 060h+Y ; ; chips with 200h-byte Column 5+(n*W) --> Data Bit(n) of Address 100h+Y ; ; (W=8) (64x64 bits) Column 6+(n*W) --> Data Bit(n) of Address 120h+Y ; ; Column 7+(n*W) --> Data Bit(n) of Address 140h+Y ; ; Column 8+(n*W) --> Data Bit(n) of Address 160h+Y ; ;/ Column 9+(n*W) --> Data Bit(n) of Address 200h+Y ; Column 10+(n*W) --> Data Bit(n) of Address 220h+Y ; chips with 300h-byte Column 11+(n*W) --> Data Bit(n) of Address 240h+Y ; (W=12) (96x64 bits) Column 12+(n*W) --> Data Bit(n) of Address 260h+Y ;/ |
Name Pin Dir Expl P0.0 1 Out Data Out ;\SNES version occassionally swaps these P0.1 2 In Data In ;/pins by software (ie. Pin1=In, Pin2=Out) P0.2 3 In Random Seed (0=Charged/Ready, 1=Charging/Busy) P0.3 4 In Lock/Key (0=Cartridge/Key, 1=Console/Lock) P1.0 9 Out Reset SNES (0=Reset Console, 1=No) P1.1 10 Out Reset Key (0=No, 1=Reset Key) P1.2 11 In Unused, or Reset Speed A (in 3195A) ;\blink speed of reset P1.3 12 In Unused, or Reset Speed B (in 3195A) ;/signal (and Power LED) P2.0 13 - Unused P2.1 14 - Unused P2.2 15 - Unused P2.3 - - Unused P3.0 - RAM Unused, or used as "noswap" flag (in SNES CIC) P3.1 - - Unused P3.2 - - Unused P3.3 - - Unused |
Nintendo[1..F] = Tengen[1..F] - (2,0,0,0,0,0,8,8,8,8,8,8,8,8,2) |
Nintendo[1..F] = Tengen[1..F] - (2,0,0,0,0,A,E,8,8,8,8,8,8,8,2) (That, for Tengen-USA seeds. The Tengen-style-EUR/ASIA/UK seeds may differ) |
Byte 000h, bit0-7 = 1st-8th bit on Pin 1 (DTA.OUT on NES)(DTA.OUT/IN on SNES) Byte 001h, bit0-7 = 1st-8th bit on Pin 2 (DTA.IN on NES) (DTA.IN/OUT on SNES) Byte 002h, bit0-7 = 9th-16th bit on Pin 1 Byte 003h, bit0-7 = 9th-16th bit on Pin 2 etc. |
Console Cartridge Notes 3193 3193 Works (the "old" way) ;\used combinations 3193 6113 Works (the "new" way) ;/ 6113 6113 Works (special seed/timing) ;\ 6113 3193 Doesn't work ; not used as far as known 6113 ?? Might work (??=unknown chip) ;/ |
4MHz Clock Units ............................... 1MHz Clock Units . . . . . . . . ___________ ;\Console+Cartridge Data Should-be __| |________________ ;/should be 3us High __________ ;\actually 2.5us High Data From Console __.' ''----.......____ ;/and 3us falling __________ ;\ Data From Cartridge __.' ''----.......____ ; either same as console or, delayed: __________ ; or 0.25us later Data From Cartridge ___.' ''----.......___ ;/ |
3.072MHz Clock Units ............................... 1.024MHz Clock Units . . . . . . . . . . ________ ;\Console+Cartridge Data Should-be ________| |_____________ ;/should be 3us High _________ ;\actually 3.33us high Data From/To Console ________| '--..._______ ;/and 2us falling _________ ;\ Data From/To Cart ____| '--...___________ ; 1.33us earlier or, delayed _________ ; or 1.33us later Data From/To Cart ____________| '--...___ ;/ |
Cartridge CIC Versions |
3193,3193A NES NTSC Cartridges and Consoles ;\USA,Canada 6113,6113A,6113B1 NES NTSC Cartridges (not consoles) ;/(and Korea?) 3194 Unknown/doesn't exist? 3195,3193A NES PAL Cartridges and Consoles "PAL-B";-Europe 3196(A?) NES PAL Cartridges and Consoles ;-Hong Kong,Asia 3197(A?) NES PAL Cartridges and Consoles "PAL-A";-UK,Italy,Australia 3198(A?) FamicomBox CIC Cartridges and Consoles ;\ 3199(A?) FamicomBox Coin Timer (not a CIC) ; Japan N/A Famicom Cartridges and Consoles ;/ RFC-CPU10 (?) NES R.O.B. robot (no CIC, but maybe a 4bit Sharp CPU, too?) |
F411,F411A,F411B SNES NTSC Cartridges-with-SMD-Chipset and Consoles D411,D411A,D411B SNES NTSC Cartridges-with-DIP-Chipset F413,F413A,F413B SNES PAL Cartridges-with-SMD-Chipset and Consoles D413,D413A,D413B SNES PAL Cartridges-with-DIP-Chipset SA-1,S-DD1,MCC-BSC SNES Cartridges (coprocessors/mappers with on-chip CIC) |
23C1033 337002 ;Tengen's 16pin "Rabbit" CIC clone 337006 ;Tengen's 40pin "RAMBO-1" mapper with built-in CIC clone 4051 7660 KC5373B MX8018 NINA Ciclone ;homebrew multi-region CIC clone (based on Tengen design) |
10198 - CIC clone noname - CIC clone (black chip without any part number) ST10198S - NTSC CIC clone ST10198P - PAL CIC clone 265111 - maybe also a CIC clone (used in Bung Game Doctor SF6) D1 - maybe also a CIC clone (used in Super UFO Pro8) 74LS112 - reportedly also a CIC clone (with fake part number) (UFO Pro6) CIVIC 74LS13 16pin - CIC/D411 clone (used in a 8-in-1 pirate cart) CIVIC CT6911 16pin - CIC clone (used in a 7-in-1 pirate cart) 93C26 16pin - CIC clone (used in a 8-in-1 pirate cart) D1 16pin - CIC? (used in Super VG pirate) STS9311A 52583 16pin - CIC clone (used in Donkey King Country 3 pirate) black blob 16pin - CIC/D411 clone (used in Sonic the Hedgehog pirate) |
Name YYWW-YYWW 3193 8539-8642 3193A 8547-8733 (in cartridges) (but should be in consoles for more years) 3195 8627-8638 3195A 8647-9512 3197A 8647-9227 6113 8734-8823 6113A 8823-8933 6113B1 8847-9344 |
Cartridge CIC Pinouts |
SMD DIP Pin Dir Usage In Console In Cartridge 1 1 P00 Out DTA0 Cart.55 CIC1 Cart.24 CIC0 2 2 P01 In DTA1 Cart.24 CIC0 Cart.55 CIC1 3 3 P02 In RANDOM Via capacitor to VCC NC 4 4 P03 In MODE VCC=Console (Lock) GND=Cartridge (Key) 5 NC - (NC) NC NC 6 5 CL2 - (NC) NC SMD:NC or DIP:GND 7 6 CL1 In CLK 3.072MHz (from APU) Cart.56 CIC3 (3.072MHz) 8 7 RES In RESET From Reset button Cart.25 CIC2 (START) 9 8 GND - GND Supply Supply 10 9 P10 Out /RESET To PPU (and CPU/APU/etc) NC (or to ROM, eg. in SGB) 11 10 P11 Out START Cart.25 CIC2 NC 12 11 P12 - (NC) NC NC (or SlotID in FamicomBox) 13 12 P13 - (NC) NC NC (or SlotID in FamicomBox) 14 NC - (NC) NC NC 15 13 P20 - (NC) NC NC 16 14 P21 - (NC) NC NC (or SlotID in FamicomBox) 17 15 P22 - (NC) NC NC (or SlotID in FamicomBox) 18 16 VCC - VCC Supply Supply |
Cartridge CIC Tengen Clone |
PC 8bit Program Counter (00h on Reset) Acc 4bit Accumulator (aka A) RamDta 4bit RAM Data-Read Register (aka X) L 4bit RAM Address Register, LSB H 1bit RAM Address Register, MSB (0 on Reset) Cy 1bit Carry Flag DATA_IN 1bit Input from master CIC DATA_OUT 1bit Output to master CIC |
Program ROM = 256x12 bit Data RAM = 32x4 bit |
11-10 Must be 00b for Type 0 Opcodes 9-6 ALU Source 1 and Destination (see list) 5 ALU Source 2 (0=Zero, 1=RamDta) 4 ALU Update Carry (0=No, 1=Yes) ;<-- done AFTER ALU 3 --> RamDta=[H:L] ;<-- done BEFORE ALU 2 ALU Type (0=ADD, 1=XNOR) 1-0 ALU Source 3 (0..3 = 0,Cy,1,1-Cy) (should be 0 for XNOR?) |
11-10 Must be 01b for Type 1 Opcodes 9-6 ALU Source 1 and Destination (see list) 5 Unknown/Unused (should be 0) 4 ALU Update Carry (0=No, 1=Yes) ;<-- done AFTER ALU 3-0 ALU Source 2 (Immediate 00h..0Fh) |
11-10 Must be 10b for Type 2 Opcodes 9-6 ALU Source 1 and Destination (see list, optionally H:0 instead H:L) 5 ALU Source 2 (0=Zero, 1=RamDta) 4 ALU Source 3 (0=Zero, 1=DATA_IN) 3 --> RamDta=[H:L] (or [H:0]) ;<-- done BEFORE ALU 2 --> Force address H:0 instead H:L ;applies to BOTH read/write [H:L] 1 --> DATA_OUT=Cy 0 --> H=Cy ;<-- done AFTER reading/writing [H:L] |
11-10 Must be 11b for Type 3 Opcodes 9 Jump Condition (0=Always, 1=If Cy=0) 8 Unknown/Unused (should be 0) 7-0 Jump Target (PC=00h..FFh) |
00h Src=None, Dest=None 08h Src=L, Dest=[H:L]=Acc 01h Src=None, Dest=None * 09h Src=Acc, Dest=[H:L]=Acc 02h Src=Zero, Dest=Acc 0Ah Src=L, Dest=Acc 03h Src=Acc, Dest=Acc * 0Bh Src=Acc, Dest=Acc 04h Src=Zero, Dest=[H:L] 0Ch Src=L, Dest=[H:L] 05h Src=Acc, Dest=[H:L] * 0Dh Src=Acc, Dest=[H:L] 06h Src=Zero, Dest=L 0Eh Src=L, Dest=L 07h Src=Acc, Dest=L * 0Fh Src=Acc, Dest=L |
when ALU Dest = None ---> Cy = bit0 or (src2) when ALU Type = ADD ---> Cy = carry-out of addition when ALU Type = XNOR ---> Cy = bit3 of (src1 OR src2) (??) |
D11 D5 D10 D4 D9 D3 D8 D2 D7 D1 D6 D0 |
Line 1..32 --> address X+(1Fh..00h) Column 1..8 --> address (00h,20h,40h,60h,80h,A0h,C0h,E0h)+Y for D0..D5 Column 1..8 --> address (E0h,C0h,A0h,80h,60h,40h,20h,00h)+Y for D6..D11 |
Cartridge Cheat Devices |
Hex 0 1 2 3 4 5 6 7 8 9 A B C D E F Letter A P Z L G I T Y E O X U K S V N |
Char Bit3 Bit2 Bit1 Bit0 Char Bit3 Bit2 Bit1 Bit0 1st D7 D2 D1 D0 2nd A7 D6 D5 D4 3rd LEN A6 A5 A4 4th A3 A14 A13 A12 5th A11 A2 A1 A0 6th CD3 A10 A9 A8 7th C7 C2 C1 C0 8th D3 C6 C5 C4 |
XXX... |
DDCCAAAA ;Data,Compare,Address, ie. "if [AAAA]=CC then [AAAA]=DD" |
raw=raw AND FFFF7FFFh ;strip unused address MSB from the DDCCAAAAh value for i=0 to 31 code=code SHR 1 if raw AND (1 SHL xlat[i]) then code=code XOR B8309722h next i code=code XOR FCBDD275h |
code=code XOR FCBDD275h, raw=00000000h for i=31 to 0 if code AND 80000000h then raw=raw+(1 SHL xlat[i]), code=code XOR B8309722h code=code SHL 1 next i raw=raw OR 00008000h ;add unused/fixed address MSB to the DDCCAAAAh value |
15, 3,13,14, 1, 6, 9, 5, 0,12, 7, 2, 8,10,11, 4 19,21,23,22,20,17,16,18,29,31,24,26,25,30,27,28 |
Cartridge Pin-Outs |
1 GND 19-25 PPU A6-A0 45 EXP SND_IN 2-13 CPU A11-A0 26-29 PPU D0-D3 45,46 EXP SND_OUT 14 CPU R/W 30-31 +5VDC 47 PPU /WR 15 CPU /IRQ 32 PHI2 CLK 48 PPU NT /CS 16 GND 33,35 CPU A12-A14 49 PPU NT /A13 17 PPU /RD 36-43 CPU D7-D0 49-56 PPU A7-A12,A13 18 PPU NT A10 44 CPU /PRG 57-60 PPU D7-D4 |
Pin Dir Use Expl. __________________________ 1 Out VEE GND 1| |36 2-13 Out CPU A11-A0 37|__________________________|72 14 Out CPU R/W 15 I/O CPU /IRQ 16-20 I/O EXP Expansion Port Pins 42-38 (not used by the console itself) 21 Out PPU /R 22 In PPU VA10 (A10 of internal 2K VRAM, ie. select BLK0 or BLK1) 23-29 Out PPU A6-A0 30-33 I/O PPU D0-D3 34-35 I/O CIC S0-S1 (cicurity/lockup chip protocol signals) 36 Out VCC +5VDC 37 Out CPU 21.47727MHz (NTSC), 26.601712MHz (PAL) 38 Out CPU PHI2 39-41 Out CPU A12-A14 42-49 I/O CPU D7-D0 50 Out CPU /PRG (PRG-ROM access, logical NAND of PHI2 and CPU A15) 51-55 I/O EXP Expansion Port Pins 06-10 (not used by the console itself) 56 Out PPU /W 57 In PPU /VCS (internal 2K VRAM Chip-Select) 58 Out PPU /A13 (inverted A13, wired to /VCS when used as name table) 59-65 Out PPU A7-A9,A11,A10,A12-A13 66-69 I/O PPU D7-D4 70 I/O CIC S2 (cicurity/lockup chip protocol signals) 71 Out CIC 4Mhz (cicurity/lockout chip clock line) 72 Out VEE GND |
Cartridge Shell Dimensions |
|------------------119.7mm----------------| _________________________________________ _ _ | |.......| | | | |.......| | | | |_______| | | | | | 87.0mm | | | | 3.25mm 1.5mm | | | |-|-|---------93.25mm---------|-| | | _ _ | 1.5mm _________________________ | _ _ _|_ _|_ 2.5mm | _| NES-NROM-256-06 | | | 6.0mm | _|_ 6.0mm | _| |_ | _|_ | | | | PCB, 100x40 mm | | | | | | O| |O | | | | |_ _ | Component Side | _ _| | 19.5mm | 40.0mm | 17.0mm | || || | | | _|_ | ||_ Edge-Connector, 2.5mm pitch _|| | _|_ | | 14.5mm | | | ||||||||||||||||||||||||| | | | | 14.5mm | _|_ | | |___________________________| | | _|_ _|_ | | | | | | | |-----------93.5mm----------| | | | 7.0mm | ||------------100.0mm------------|| | | |_|_________________________________|_| _|_ |
|-------------100.5mm-------------| |---------------106.0mm---------------| |
6.4mm 3.0mm 3.0mm 6.4mm Front/Component |----|-| |-|----| Side _ _ ____ _________________________________ ____ _ _ _ _ _|_ 3.0mm | | _____________________________ | | | 13.0 | | 10.75mm | | | _________________________ | | | | mm | 16.75 _|_ '. | |_____________________________| | .' - -3.75 | mm _|_ 3.0mm '._|_________________________________|_.' _|_ mm _|_ 2.0mm 4.4mm |-| |-----------100.5mm-----------| |--| Back/Solder |-------------106.0mm-------------| Side |------------------119.7mm------------------| |
|-24.0mm-|----------109.7mm--------------| Front/Component Side _ _ ________ _______________________________ _ _ _ _ _|_ 3.0mm |________| | | | | | ____|__ __________ _ _ |||| | 13.0mm | 16.75 | 10.75mm | |____ __:___PCB____| _|_ 1.2mm |||| | | _|_ |________|...............................' ... | mm _|_ 3.0mm |________|____________________________.' _|_3.75mm _|_ 7.0mm 4.4mm |---|------40.mm-------| |--| |-----------------129.6mm-------------| Back/Solder Side |-----------------134.0mm----------------| |
Mapper 0: NROM - No Mapper (or unknown mapper) |
Mapper 1: MMC1 - PRG/32K/16K, VROM/8K/4K, NT |
8000h-FFFFh Bit 0 Serial data loaded to 5bit shift register (LSB=1st write) Bit 7 Clear 5bit shift register (1=Reset, next write will be "1st write") |
8000h-9FFFh Register 0 - Configuration Register Bit0-1 Name Table Mirroring 0 Single-Screen BLK0 1 Single-Screen BLK1 2 Two-Screen Vertical Mirroring 3 Two-Screen Horizontal Mirroring Bit2-3 PRG-Switching Mode (usually 3) 0,1 Switchable 32K Area at 8000h-FFFFh (via Register 3) 2 Switchable 16K Area at C000h-FFFFh (via Register 3) And Fixed 16K Area at 8000h-BFFFh (always 1st 16K) 3 Switchable 16K Area at 8000h-BFFFh (via Register 3) And Fixed 16K Area at C000h-FFFFh (always last 16K) Bit4 VROM Switching Size (for carts with VROM) 0 Swap 8K of VROM at PPU 0000h 1 Swap 4K of VROM at PPU 0000h and 1000h A000h-BFFFh Register 1 Bit4-0 Select 4K or 8K VROM bank at 0000h (4K and 8K Mode, see Reg0/Bit4) C000h-DFFFh Register 2 Bit4-0 Select 4K VROM bank at 1000h (used in 4K Mode only, see Reg0/Bit4) E000h-FFFFh Register 3 Bit3-0 Select 16K or 2x16K ROM bank (see Reg0/Bit3-2) Bit4 RAM Disable (newer MMC1 revisions only) |
Register 0, Bit 4 <1024K carts> 0 = Ignore 256K selection register 1 1 = Acknowledge 256K selection register 1 Register 1, Bit4 - 256K ROM Selection Register 0 <512K carts> 0 = Swap banks from first 256K of PRG 1 = Swap banks from second 256K of PRG <1024K carts with bit 4 of register 0 off> 0 = Swap banks from first 256K of PRG 1 = Swap banks from third 256K of PRG <1024K carts with bit 4 of register 0 on> Low bit of 256K PRG bank selection Register 2, Bit4 - 256K ROM Selection Register 1 <1024K carts with bit 4 of register 0 off> Store but ignore this bit (base 256K selection on 256K selection Reg 0) <1024K carts with bit 4 of register 0 on> High bit of 256K PRG bank selection |
Mapper 2: UNROM - PRG/16K |
8000h-FFFFh Select 16K ROM bank at 8000h-BFFFh (initially 1st bank) N/A Fixed 16K ROM at C000h-FFFFh (always last bank) |
Mapper 3: CNROM - VROM/8K |
8000h-FFFFh Bit 0-1 Select 8K VROM bank at PPU 0000h (initially 1st bank) Bit 4-5 Security Diodes (some crude copy protection) |
Mapper.Bit5 ---- D1 ---- PPU.A10 Mapper.Bit4 ---- D2 ---- PPU.A12 |
Mapper 4: MMC3 - PRG/8K, VROM/2K/1K, NT, SRAM, IRQ |
8000h Index/Control (5bit) Bit7 CHR Address Select (0=Normal, 1=Address Areas XOR 1000h) Bit6 PRG Register 6 Area (0=8000h-9FFFh, 1=C000h-DFFFh) Bit2-0 Command Number 0 - Select 2x1K VROM at PPU 0000h-07FFh (or 1000h-17FFh, if Bit7=1) 1 - Select 2x1K VROM at PPU 0800h-0FFFh (or 1800h-1FFFh, if Bit7=1) 2 - Select 1K VROM at PPU 1000h-13FFh (or 0000h-03FFh, if Bit7=1) 3 - Select 1K VROM at PPU 1400h-17FFh (or 0400h-07FFh, if Bit7=1) 4 - Select 1K VROM at PPU 1800h-1BFFh (or 0800h-0BFFh, if Bit7=1) 5 - Select 1K VROM at PPU 1C00h-1FFFh (or 0C00h-0FFFh, if Bit7=1) 6 - Select 8K ROM at 8000h-9FFFh (or C000h-DFFFh, if Bit6=1) 7 - Select 8K ROM at A000h-BFFFh N/A - Fixed 8K ROM at C000h-DFFFh (or 8000h-9FFFh, if Bit6=1) N/A - Fixed 8K ROM at E000h-FFFFh (always last 8K bank) 8001h Data Register (Indexed via Port 8000h) A000h Mirroring Select (Bit0: 0=Vertical, 1=Horizontal Mirroring) A001h Save RAM Control for RAM at 6000h-7FFFh: Bit7: SRAM Chip Enable (0=Disable both read/write, 1=Enable) Bit6: SRAM Write Protect (0=Read/Write-able, 1=Read-only) C000h IRQ Reload Value (loaded into IRQ Counter on Counter underflow) C001h IRQ Force Reload (writing any value will set the Counter to zero, so that underflow/reload will occur at next rising edge of A13) E000h IRQ Disable/Acknowledge (write any value) ;doesn't change/stop counter E001h IRQ Enable (write any value) ;doesn't change/reload counter |
* The IRQ counter WILL NOT STOP. It will continue to decrement and reload as long as A12 on the PPU bus toggles. * Whenever the IRQ counter changes from a non-zero value to 00h, the IRQ flag will be set if it is enabled. * The exact number of scanlines before the interrupt fires is (N+1), where N = the IRQ reload value. 2 to 256 scanlines are supported. * Writing 00h to C000h will result in a SINGLE interrupt being generated on the next rising edge of A12. No more interrupts will be generated until C000h is changed to a non-zero value. The counter is still being reloaded, however, because writing a non-zero value to C000h results in it firing an interrupt after the new count expires. |
* The IRQ counter WILL NOT DECREMENT AT ALL unless bit 3 OR bit 4 of 2000h on the PPU are set! If both of these bits are clear, the IRQ counter will not count no way no how!!! If both are set, the counter decrements twice per frame on my MMC3, but it may act erratically on your MMC3. Don't count on this effect occuring. |
* For some reason, yet to be determined, if both bits 3 and 4 of PPU register 2000h are clear, the IRQ counter will not decrement, even if the PPU address is manually manipulated (with 2001h set to 00h to disable rendering) through 2006h. If either or both bits are set, the counter will decrement properly if the PPU address is manually manipulated. |
Various notes and effects of the IRQ counter reloading stuff: The IRQ counter reloading has some minor consequences that should be made clear. Some games like Megaman 6 and Pinbot use this so emulating properly is important for these games to work. |
MM6 will write to E000h to clear the flag, E001h to re-enable interrupts, and finally it will write to C000h to set up a new time period. This is legal SO LONG AS C000h is written to before the next scanline (remember: the counter is reloaded on the NEXT rising edge of A12 after the counter reaches 00h, and thus fires). |
Kevin did a little test to determine the effect of C001h on the IRQ counter like so: First, C000h had 02h written to it. Toggling A12 3 times resulted in an IRQ being generated. The IRQ was cleared, then A12 was toggled 2 more times. Next, 03h was written to C000h, C001h was written to, and finally 04h was written to C000h. A12 was toggled again and it took *5* counts to flag an interrupt, proving that the value of C000h is only checked at the time of reloading on the rising edge of A12. Kevin performed other tests to corroborate this, and they all passed (i.e. checking to see if the reload happened on the FALLING edge of A12, etc.) |
Mapper 5: MMC5 - BANKING, IRQ, SOUND, VIDEO, MULTIPLY, etc. |
Mapper 5: MMC5 - I/O Map |
5000h Sound Channel 1 Pulse Control ;\ 5002h Sound Channel 1 Frequency LSB ; 5003h Sound Channel 1 Frequency MSB ;/ 5004h Sound Channel 2 Pulse Control ;\ 5006h Sound Channel 2 Frequency LSB ; 5007h Sound Channel 2 Frequency MSB ;/ 5010h Sound Channel 3 PCM Control/Status (R/W) 5011h Sound Channel 3 PCM Data 5015h Sound Channel 1 and 2 Enable/Status (R/W) 5100h PRG Bank Size (Mode for Port 5114h-5117h) 5101h CHR Bank Size 5102h RAM Write Protect Key 1 5103h RAM Write Protect Key 2 5104h EXRAM Mode Setting 5105h Name Table Select 5106h Name Table Fill-Mode Tile Number 5107h Name Table Fill-Mode Palette Number 5113h-5117h PRG Bank Selection Registers 5120h-5127h CHR Bank Selection for Sprites and for CPU Access 5128h-512Bh CHR Bank Selection for Background 5130h CHR Bank MSBs 5200h Horizontal Split Control 5201h Horizontal Split Scroll Position 5202h Horizontal Split CHR Bank Selection 5203h Vertical IRQ Counter 5204h Vertical IRQ Control/Status (R/W) 5205h Multiply Unit input/output (R/W) 5206h Multiply Unit input/output (R/W) 5800h Unknown... (Just Breed writes 0xh to this address) 5C00h-5FFFh EXRAM (1K) (R/W) |
Mapper 5: MMC5 - CPU Memory Control |
Bit7-2 Not used Bit1-0 PRG Bank Size (0=32K, 1=16K, 2=Mixed, 3=8K) |
5102h RAM Write Protect Key 0 (Lower 2bit must be 02h for write-enable) 5103h RAM Write Protect Key 1 (Lower 2bit must be 01h for write-enable) |
Port Type Mode3/8K Mode2/Mixed Mode1/16K Mode0/32K 5113h RAM 8K at 6000h 8K at 6000h 8K at 6000h 8K at 6000h 5114h ROM/RAM 8K at 8000h, N/A , N/A , N/A 5115h ROM/RAM 8K at A000h, 2x8K at 8000h, 2x8K at 8000h, N/A 5116h ROM/RAM 8K at C000h, 8K at C000h, N/A , N/A 5117h ROM 8K at E000h, 8K at E000h, 2x8K at C000h, 4x8K at 8000h |
Bit7 ROM/RAM Mode (0=RAM, 1=ROM) (Port 5114h-5116h only, not 5113h,5117h) Bit6-3 Not used Bit2 RAM Chip Select (0=1st chip, 1=2nd chip, or open bus if single chip) Bit1-0 Select 8K RAM Bank in currently selected RAM chip (32K chips only) |
Mapper 5: MMC5 - Video Name Table |
Bit1-0 Select NT0 VRAM at 2000h-23FFh (0=BLK0, 1=BLK1, 2=EXRAM, 3=FILLMODE) Bit3-2 Select NT1 VRAM at 2400h-27FFh (0=BLK0, 1=BLK1, 2=EXRAM, 3=FILLMODE) Bit5-4 Select NT2 VRAM at 2800h-2BFFh (0=BLK0, 1=BLK1, 2=EXRAM, 3=FILLMODE) Bit7-6 Select NT3 VRAM at 2C00h-2FFFh (0=BLK0, 1=BLK1, 2=EXRAM, 3=FILLMODE) |
Mapper 5: MMC5 - Video Pattern Table |
Bit7-6 Not used Bit1-0 CHR Bank Size (0=8K, 1=4K, 2=2K, 3=1K) |
Port Mode3/1K Mode2/2K Mode1/4K Mode1/8K 5120h 1K at 0000h N/A N/A N/A 5121h 1K at 0400h 2K at 0000h N/A N/A 5122h 1K at 0800h N/A N/A N/A 5123h 1K at 0C00h 2K at 0800h 4K at 0000h N/A 5124h 1K at 1000h N/A N/A N/A 5125h 1K at 1400h 2K at 1000h N/A N/A 5126h 1K at 1800h N/A N/A N/A 5127h 1K at 1C00h 2K at 1800h 4K at 1000h 8K at 0000h |
5128h 1K at X000h N/A N/A N/A 5129h 1K at X400h 2K at X000h N/A N/A 512Ah 1K at X800h N/A N/A N/A 512Bh 1K at XC00h 2K at X800h 4K at X000h 8K at 0000h |
Bit7-6 Not used Bit1-0 Upper 2bit for 8bit Port 5120h-512Bh, and for EXRAM 6bit Tile Banks |
Mapper 5: MMC5 - Video Split and IRQ and Multiply Unit |
Bit7 For the E function (0=Don't use, 1=Use) Bit6 Boundary's side is for using Split Mode extension of graphics (0=Left side, 1=Right side) Bit5 Not used Bit4-0 Left boundary is designated with the char. # to count places |
Examples for 5200h Settings: 00h (not?) used yet 82h Used for SplitMode GFX extension from left 1-2 character C2h Used for SplitMode GFX extension from the right side 3 chars. C0h Used for SplitMode GFX extension on the whole screen D0h Used for SplitMode GFX extension on the right side of the screen 90h Used for SplitMode GFX extension on the left side of the screen |
Bit7-6 Not used Bit5-0 Select 4K VROM at both 0000h-0FFFh and 1000h-1FFFh |
Bit7/Write IRQ Enable (0=Disable, 1=Enable; forward IRQ Flag to CPU) Bit7/Read IRQ Flag (0=No, 1=Interrupt Request; gets set even if disabled) Bit6/Read In Frame Rendering Flag (0=Vblank, 1=Rendering/Non-Vblank) |
Mapper 5: MMC5 - Video EXRAM |
Bit7-6 Not used Bit1-0 Select EXRAM Mode 0 VRAM Extra Name Table (via Port 5105h) 1 VRAM ExGrafix Color Expansion (see below) 2 General purpose WRAM (read/write) 3 General purpose WRAM (write protected) |
Bit7-6 Palette Number for each Tile Bit5-0 4K Bank Number for each Tile (upper 2bit in port 5130h) |
Mapper 5: MMC5 - Sound Control |
0-3 Volume / Envelope decay rate When Bit4=1: Volume (0=Silent/None..F=Loud/Max) When Bit4=0: Envelope decay rate, 240Hz/(N+1) for MMC5 4 Envelope decay disable (0=Envelope/Decay, 1=Fixed Volume) 5 Length counter clock disable / Envelope decay looping enable When Bit4=1: length counter clock disable When Bit4=0: envelope decay looping enable 0: Disable Looping, stay at 0 on end of decay [ \_____ ] 1: Enable Looping, restart decay at F [ \\\\\\ ] (Does this still affect Length counter clock disable ?) 6-7 Duty cycle type (MMC5 duty is inverse of NES APU duty) 0 [__--------------] 87.5% Whereas, 1 [____------------] 75.0% [_] = LOW (zero) (0) 2 [________--------] 50.0% [-] = HIGH (volume/decay) (0..F) 3 [____________----] 25.0% |
0-7 Lower 8 bits of wavelength (upper 3 bits in Register 3) |
0-2 Upper 3 bits of wavelength (unused on noise channel) 3-7 Length counter load register (5bit value, see below) |
Bit3=0 and Bit7=0 (Dividers matched for use with PAL/50Hz) Bit6-4 (0..7 = 05h,0Ah,14h,28h,50h,1Eh,07h,0Dh) Bit3=0 and Bit7=1 (Dividers matched for use with NTSC/60Hz) Bit6-4 (0..7 = 06h,0Ch,18h,30h,60h,24h,08h,10h) Bit3=1 (General Fixed Dividers) Bit7-4 (0..F = 7Fh,01h..0Fh) |
Bit7/Write PCM IRQ upon Data=00h Enable (0=Disable, 1=Enable) Bit7/Read PCM IRQ upon Data=00h Flag (0=None, 1=Interrupt Request) Bit6-1 Not used Bit0/Write Wave Output (0=Manual Write to 5011h, 1=Capture 8000h-BFFFh Reads) |
Bit7-0 Unsigned 8bit PCM Data (01h..FFh) (or 00h=trigger IRQ) |
Bit7-2 Not used Bit1 Channel 2 (0=Disable, 1=Enable) Bit0 Channel 1 (0=Disable, 1=Enable) |
Mapper 6,8,12,17: Front Far East (FFE) Configuration, IRQs, Patches |
4501h IRQ Disable/Acknowledge (write any value, usually 00h) 4502h IRQ set lower 8bit of 16bit counter 4503h IRQ set upper 8bit of 16bit counter and Start/Enable IRQs |
42FCh-42FFh Configuration Register 1 A0 Name Table Mode (0=One-Screen, 1=Two-Screen) (with D4 below) A1 Unknown (0=WE, 1=SW) (usually 1) D7-D5 Memory Mode (0-7) "*MODE" 1 Mapper 6 F4xxx 2 Mapper 2 UNROM 3 Mapper ? F4xxx 4 Mapper 8 F3xxx/GNROM 0,5-7 unknown (Great Tank uses settings 1 and 6) ? unknown how to select Mapper 12 and Mapper 17 |
0 Mapper 17 (Kaiketsu, Saiyuuki) 7 Mapper 17 (Wing of Madoola) D4 When A0=0: Select VRAM Page (?=BLK0, ?=BLK1) When A0=1: ?Mirroring (0=Vertical, 1=Horizontal Mirroring) D3-D0 Unknown (usually zero) 43FEh Memory Control (apparently independendly of current Mode) (?) D7-D2 Select ?K ROM at 8000h-? D1-D0 Select 8K VROM at PPU 0000h-1FFFh 43FFh Memory Control (as for current mode, ie. mirror of 8000h-FFFFh) (?) 4500h Configuration Register 2 D7-D6 FDS Mode (0=Disk/Load, 1=Reserved, 2=Cartridge, 3=Disk/Execute) D5-D4 SRAM 6000h-7FFFh BANK "Present or Not" (0-3=?) D3 SW Pin (maybe something related with above WE/SW selection) D2-D0 PPU Mode Select (1or2?="*MODE" (32K), 5=256K, VRAM EXT, 7=256K) |
Mapper 6: FFE F4xxx - PRG/16K, VROM/8K, NT, IRQ |
8000h-FFFFh Memory Control (6bit) Bit1-0 Select 8K VRAM (read/write-able) at PPU 0000h-1FFFh Bit5-2 Select 16K ROM at 8000h-BFFFh (bank 0-0Fh) N/A Fixed 16K ROM at C000h-FFFFh (always bank 7) (!) |
Mapper ?: FFE F4xxx - PRG/16K, VROM/8K, NT, IRQ |
8000h-FFFFh Memory Control (6bit) Bit3-0 Select 16K ROM at 8000h-BFFFh Bit5-4 Select 8K VROM at PPU 0000h-1FFFh |
Mapper 7: AOROM - PRG/32K, Name Table Select |
8000h-FFFFh Memory Control Bit2-0 Select 32K ROM bank at 8000h-FFFFh (initially 1st bank) Bit4 One-Screen Name Table Select (0=BLK0, 1=BLK1) Bit3,5-7 Not used |
Mapper 8: FFE F3xxx - PRG/32K, VROM/8K, NT, IRQ |
8000h-FFFFh Memory Control (same as GNROM, Mapper 66) Bit1-0 Select 8K VROM (usually read-only) at PPU 0000h-1FFFh Bit5-4 Select 32K ROM at 8000h-FFFFh (initially 1st bank) |
Mapper 9: MMC2 - PRG/24K/8K, VROM/4K, NT, LATCH |
A000h-AFFFh Select 8K ROM at 8000h-9FFFh (initially 1st bank) N/A Fixed 24K ROM at A000h-FFFFh (always last three 8K banks) B000h-CFFFh Select 4K VROM at PPU 0000h-0FFFh D000h-DFFFh Select 4K VROM at PPU 1000h-1FFFh (used when latch=FDh) E000h-EFFFh Select 4K VROM at PPU 1000h-1FFFh (used when latch=FEh) F000h-FFFFh Mirroring Select (Bit0: 0=Vertical, 1=Horizontal mirroring) PPU 1FD0h-1FDFh Access to Pattern Table 0, Tile FDh --> sets latch=FDh PPU 1FE0h-1FEFh Access to Pattern Table 0, Tile FEh --> sets latch=FEh |
Mapper 10: MMC4 - PRG/16K, VROM/4K, NT, LATCH |
A000h-AFFFh Select 16K ROM bank at 8000h-BFFFh (initially 1st bank) N/A Fixed 16K ROM bank at C000h-FFFFh (always last bank) B000h-BFFFh Select 4K VROM bank at PPU 0000h-0FFFh (used when latch0=FDh) C000h-CFFFh Select 4K VROM bank at PPU 0000h-0FFFh (used when latch0=FEh) D000h-DFFFh Select 4K VROM bank at PPU 1000h-1FFFh (used when latch1=FDh) E000h-EFFFh Select 4K VROM bank at PPU 1000h-1FFFh (used when latch1=FEh) F000h-FFFFh Mirroring Select (Bit0: 0=Vertical, 1=Horizontal mirroring) PPU 0FD0h-0FDFh Access to Pattern Table 0, Tile FDh --> sets latch0=FDh PPU 0FE0h-0FEFh Access to Pattern Table 0, Tile FEh --> sets latch0=FEh PPU 1FD0h-1FDFh Access to Pattern Table 1, Tile FDh --> sets latch1=FDh PPU 1FE0h-1FEFh Access to Pattern Table 1, Tile FEh --> sets latch1=FEh |
Mapper 11: Color Dreams - PRG/32K, VROM/8K |
8000h-FFFFh Memory Control Bit3-0 Select 32K ROM bank at 8000h-FFFFh (initially 1st bank) Bit7-4 Select 8K VROM bank at PPU 0000h-1FFFh (initially 1st bank) |
Mapper 12: FFE F6xxx - Not specified, NT, IRQ |
Mapper 13: CPROM - 16K VRAM |
N/A Fixed 4K VRAM at PPU 0000h-0FFFh (always Bank 0) 8000h-FFFFh Select 4K VRAM at PPU 1000h-1FFFh (Bank 0-3) |
Mapper 15: X-in-1 - PRG/32K/16K, NT |
8000h-FFFFh Memory Control (Decoded by address AND data lines) D5-D0 Select 16K ROM Bank (X) D6 Mirroring Control (0=Vertical, 1=Horizontal Mirroring) D7 Select 8K ROM Bank (Y) (should be zero in non-8K-modes) A1-A0 ROM Bank Mode (0=32K, 1=128K, 2=8K, 3=16K) Mapping in different modes is: 8K Mode - Bank (X*2+Y) at each 8000h, A000h, C000h, E000h 16K Mode - Bank (X) at 8000h-BFFFh and (X) at C000h-FFFFh 32K Mode - Bank (X) at 8000h-BFFFh and (X OR 1) at C000h-FFFFh 128K Mode - Bank (X) at 8000h-BFFFh and LAST bank at C000h-FFFFh |
Mapper 16: Bandai - PRG/16K, VROM/1K, IRQ, EPROM |
6000h,7FF0h,8000h Select 1K VROM at PPU 0000h-03FFh 6001h,7FF1h,8001h Select 1K VROM at PPU 0400h-07FFh 6002h,7FF2h,8002h Select 1K VROM at PPU 0800h-0BFFh 6003h,7FF3h,8003h Select 1K VROM at PPU 0C00h-0FFFh 6004h,7FF4h,8004h Select 1K VROM at PPU 1000h-13FFh 6005h,7FF5h,8005h Select 1K VROM at PPU 1400h-17FFh 6006h,7FF6h,8006h Select 1K VROM at PPU 1800h-1BFFh 6007h,7FF7h,8007h Select 1K VROM at PPU 1C00h-1FFFh 6008h,7FF8h,8008h Select 16K ROM at 8000h-BFFFh (initially 1st bank) N/A Fixed 16K ROM at C000h-FFFFh (always last bank) 6009h,7FF9h,8009h Mirroring/Page Select (Bit1-0) 0 Two-Screen Vertical mirroring 1 Two-Screen Horizontal mirroring 2 Single-Screen BLK0 3 Single-Screen BLK1 600Ah,7FFAh,800Ah IRQ Control Register (Bit 0) 0 Disable/Acknowledge IRQ 1 Enable IRQ 600Bh,7FFBh,800Bh Low byte of IRQ counter 600Ch,7FFCh,800Ch High byte of IRQ counter 600Dh,7FFDh,800Dh EPROM I/O Port - unknown how this works. |
Mapper 17: FFE F8xxx - PRG/8K, VROM/1K, NT, IRQ |
4504h Select 8K ROM at 8000h-9FFFh (initially 1st half of 1st 16K) 4505h Select 8K ROM at A000h-BFFFh (initially 2nd half of 1st 16K) 4506h Select 8K ROM at C000h-DFFFh (initially 1st half of last 16K) 4507h Select 8K ROM at E000h-FFFFh (initially 2nd half of last 16K) 4510h Select 1K VROM at PPU 0000h-03FFh 4511h Select 1K VROM at PPU 0400h-07FFh 4512h Select 1K VROM at PPU 0800h-0BFFh 4513h Select 1K VROM at PPU 0C00h-0FFFh 4514h Select 1K VROM at PPU 1000h-13FFh 4515h Select 1K VROM at PPU 1400h-17FFh 4516h Select 1K VROM at PPU 1800h-1BFFh 4517h Select 1K VROM at PPU 1C00h-1FFFh |
Mapper 18: Jaleco SS8806 - PRG/8K, VROM/1K, NT, IRQ, EXT |
8000h/8001h Select 8K ROM at 8000h-9FFFh (Lower/Upper 4bits) 8002h/8003h Select 8K ROM at A000h-BFFFh (Lower/Upper 4bits) 9000h/9001h Select 8K ROM at C000h-DFFFh (Lower/Upper 4bits) N/A Fixed 8K ROM at E000h-FFFFh (always last bank) 9002h Battery Back SRAM (Bit0: 0=Enable, 1=Disable) (unused by Lord of Kings) 9003h Unknown (used by Lord of Kings) A000h/A001h Select 1K VROM at PPU 0000h-03FFh (Lower/Upper 4bits) A002h/A003h Select 1K VROM at PPU 0400h-07FFh (Lower/Upper 4bits) B000h/A001h Select 1K VROM at PPU 0800h-0BFFh (Lower/Upper 4bits) B002h/A003h Select 1K VROM at PPU 0C00h-0FFFh (Lower/Upper 4bits) C000h/C001h Select 1K VROM at PPU 1000h-13FFh (Lower/Upper 4bits) C002h/C003h Select 1K VROM at PPU 1400h-17FFh (Lower/Upper 4bits) D000h/D001h Select 1K VROM at PPU 1800h-1BFFh (Lower/Upper 4bits) D002h/D003h Select 1K VROM at PPU 1C00h-1FFFh (Lower/Upper 4bits) E000h/E001h Lower 8bit of decrementing 16bit IRQ counter (Lower/Upper 4bits) E002h/E003h Upper 8bit of decrementing 16bit IRQ counter (Lower/Upper 4bits) F000h IRQ Control Register 0 Bit0 Maybe 1=Load Counter? F001h IRQ Control Register 1 Bit0 IRQ Enable (0=Disabled, 1=Enable) Bit1-3 IRQ Counter Width (0=16bit, 1=12bit, 2-3=8bit, 4-7=4bit) With widths less than 16bit, underflows recurse only lower counter bits. F002h Name Table Select (2bit) 0 Two-Screen, Horizontal Mirroring 1 Two-Screen, Vertical Mirroring 2-3 Single-Screen BLK0 F003h Unused (or an External I/O Port which is unused?) |
Mapper 19: Namcot 106 - PRG/8K, VROM/1K/VRAM, IRQ, SOUND |
8000h-87FFh Select 1K VROM at PPU 0000h-03FFh (with E800h/Bit6) 8800h-8FFFh Select 1K VROM at PPU 0400h-07FFh ("") 9000h-97FFh Select 1K VROM at PPU 0800h-0BFFh ("") 9800h-9FFFh Select 1K VROM at PPU 0C00h-0FFFh ("") A000h-A7FFh Select 1K VROM at PPU 1000h-13FFh (with E800h/Bit7) A800h-AFFFh Select 1K VROM at PPU 1400h-17FFh ("") B000h-B7FFh Select 1K VROM at PPU 1800h-1BFFh ("") B800h-BFFFh Select 1K VROM at PPU 1C00h-1FFFh ("") |
E800h, Bit6 VROM/VRAM Mode for PPU 0000h-0FFFh (0=VROM+VRAM, 1=VROM-Only) E800h, Bit7 VROM/VRAM Mode for PPU 1000h-1FFFh (0=VROM+VRAM, 1=VROM-Only) |
C000h-C7FFh Select 1K VROM/VRAM at PPU 2000h-23FFh (E0h and up = VRAM) C800h-CFFFh Select 1K VROM/VRAM at PPU 2400h-27FFh (E0h and up = VRAM) D000h-D7FFh Select 1K VROM/VRAM at PPU 2800h-2BFFh (E0h and up = VRAM) D800h-DFFFh Select 1K VROM/VRAM at PPU 2C00h-2FFFh (E0h and up = VRAM) |
E000h-E7FFh Select 8K ROM at 8000h-9FFFh (initially 1st half of 1st 16K) Bit5-0 Page_number E800h-EFFFh Select 8K ROM at A000h-BFFFh (initially 2nd half of 1st 16K) Bit5-0 Page_number Bit6 Select at CHR_address $0000-$0FFF 0:ROM&RAM 1:ROM Bit7 Select at CHR_address $1000-$1FFF 0:ROM&RAM 1:ROM F000h-F7FFh Select 8K ROM at C000h-DFFFh (initially 1st half of last 16K) Bit5-0 Page_number N/A Fixed 8K ROM at E000h-FFFFh (always 2nd half of last 16K) |
5000h-57FFh Bit7-0: Lower 8bit of 15bit IRQ counter (R/W) (!) 5800h-5FFFh Bit6-0: Upper 7bit of 15bit IRQ counter (R/W) (!) Bit7: 0=Disable IRQs, 1=Enable IRQs |
4800h Expand I/O Data Register F800h Expand I/O Address Register Bit7 Auto Increment (0=Disable, 1=Enable) Bit6-0 Address (00h-7Fh) |
00h-3Fh See NAMCO.TXT, Japanese (.............) 40h,48h,50h,58h,60h,68h,70h,78h Channel 1-8, Frequency Lower 8bit 41h,49h,51h,59h,61h,69h,71h,79h See NAMCO.TXT, Japanese (......) 42h,4Ah,52h,5Ah,62h,6Ah,72h,7Ah Channel 1-8, Frequency Middle 8bit 43h,4Bh,53h,5Bh,63h,6Bh,73h,7Bh See NAMCO.TXT, Japanese (......) 44h,4Ch,54h,5Ch,64h,6Ch,74h,7Ch Channel 1-8, Frequency Upper 2bit & Option Bit7-5 Not used Bit4-2 VVV: 8-(....)(... 2byte) ..: VVV=000... 16byte,VVV=100..8byte.... Bit1-0 Frequency Upper 2bit 45h,4Dh,55h,5Dh,65h,6Dh,75h,7Dh See NAMCO.TXT, Japanese (......) 46h,4Eh,56h,5Eh,66h,6Eh,76h,7Eh Channel 1-8, Offset Address (00h-3Fh) Bit7-1 AAAAAAA [6bit address stored in a 7bit value?] Bit0 Not used 47h,4Fh,57h,5Fh,67h,6Fh,77h,7Fh Channel 1-8 Bit7-4 ????: 7...(kingofkings),3... Bit3-0 VVVV: .... |
Mapper 20: Disk System - PRG RAM, BIOS, DISK, IRQ, SOUND |
Mapper 21: Konami VRC4A/VRC4C - PRG/8K, VROM/1K, NT, IRQ |
Mapper 22: Konami VRC2A - PRG/8K, VROM/1K, NT |
Mapper 23: Konami VRC2B/VRC4E - PRG/8K, VROM/1K, NT, (IRQ) |
Mapper 24: Konami VRC6A - PRG/16K/8K, VROM/1K, NT, IRQ, SOUND |
Mapper 25: Konami VRC4B/VRC4D - PRG/8K, VROM/1K, NT, IRQ |
Mapper 26: Konami VRC6B - PRG/16K/8K, VROM/1K, NT, IRQ, SOUND |
Bit7-4 Duty Cycle bits: 0000 - 1/16 "-_______________-_______________" ( 6.25%) 0001 - 2/16 "--______________--______________" (12.50%) 0010 - 3/16 "---_____________---_____________" (18.75%) 0011 - 4/16 "----____________----____________" (25.00%) 0100 - 5/16 "-----___________-----___________" (31.25%) 0101 - 6/16 "------__________------__________" (37.50%) 0110 - 7/16 "-------_________-------_________" (43.75%) 0111 - 8/16 "--------________--------________" (50.00%) 1xxx - 16/16 "--------------------------------" (100.00%) Bit3-0 Linear Volume (0=Silence, 0Fh=Loudest) |
Bit7-6 Not used Bit5-0 Volume Step (V) (0..2Ah=Silent..Loudest) (2Bh..3Fh=Wraps/Garbage) |
FOR I=1 to 7 ;step 1-7 IF I=1 THEN X=0 ;reset to 0 in 1st step ELSE X=(X+V) AND FFh ;add accumulator Output=(X/8) ;output upper 5bit of X NEXT |
Bit7-0 Lower 8 bits of frequency data |
Bit7 Channel disable (0=Disable, 1=Enable) Bit6-4 Not used Bit3-0 Upper 4 bits of frequency data |
Channel 1/2: F=1.79MHz/16/(N+1) ;16-step duty cycles Channel 3: F=1.79MHz/14/(N+1) ;7-step phases |
Mapper 21-26,73,75,85: Konami VRC Mappers |
Type PRG Bank VROM Banks NT IRQ Sound VRC1 PRG/8K VROM/4K NT - - VRC2 PRG/8K VROM/1K NT - - VRC3 PRG/16K VRAM IRQ - VRC4 PRG/8K VROM/1K NT IRQ - VRC6 PRG/16K/8K VROM/1K NT IRQ SOUND VRC7 PRG/16K/8K VROM/1K NT IRQ SOUND |
Mapper Y Z Used by 75 VRC1 - - Ganbare Goemon 1, Junior Basket - Two on Two, King Kong 2, Exciting Boxing, Jajamaru Ninpou Chou, Tetsuwan Atom 22 VRC2a A0 A1 Twin Bee 3, Ganbare Pennant Race 23 VRC2b A1 A0 Wai Wai World 1, Getsufuu Maden, Kaiketsu Yanchamaru 2 Dragon Scroll, Gryzor/Contra, Jarinko Chie, Ganbare Goemon 73 VRC3 - - Salamander 21 VRC4a A2 A1 Wai Wai World 2 21 VRC4c A7 A6 Ganbare Goemon Gaiden 2 25 VRC4b A0 A1 Bio Miracle Bokutte Upa, Ganbare Goemon Gaiden, Gradius 2, Racer Mini Yonku 25 VRC4d A2 A3 Teenage Mutant Hero Turtles 1+2, Goal!! 23 VRC4e A3 A2 Parodius da!, Akumajou Special, Crisis Force, Tiny Toon Adventures 1, Moe Pro! 24 VRC6a A1 A0 Akumajou Densetsu (Castlevania 3) 26 VRC6b A0 A1 Esper Dream 2, Mouryou Senki Madara 85 VRC7 A4 (A5) Lagrange Point (Z=A5 used for Sound only) 85 VRC7b A3 (?) Tiny Toon Adventures 2 (no Sound - maybe not a VRC7 ?) |
VRC1 VRC2 VRC3 VRC4 VRC6 VRC7 Expl. - - F - 8 - Select 16K ROM at 8000h-BFFFh 8 8 - 8 - 8.0 Select 8K ROM at 8000h-9FFFh A A - A - 8.1 Select 8K ROM at A000h-BFFFh C - - - C 9.0 Select 8K ROM at C000h-DFFFh - FIX FIX FIX - - Fixed 8K ROM at C000h-DFFFh (last-1 8K) FIX FIX FIX FIX FIX FIX Fixed 8K ROM at E000h-FFFFh (last-0 8K) |
VRC2,4 VRC6 VRC7 Expl. B.0.0/1 D.0.0 A.0 Select 1K VROM bank at PPU 0000h-03FFh B.1.0/1 D.0.1 A.1 Select 1K VROM bank at PPU 0400h-07FFh C.0.0/1 D.1.0 B.0 Select 1K VROM bank at PPU 0800h-0BFFh C.1.0/1 D.1.1 B.1 Select 1K VROM bank at PPU 0C00h-0FFFh D.0.0/1 E.0.0 C.0 Select 1K VROM bank at PPU 1000h-13FFh D.1.0/1 E.0.1 C.1 Select 1K VROM bank at PPU 1400h-17FFh E.0.0/1 E.1.0 D.0 Select 1K VROM bank at PPU 1800h-1BFFh E.1.0/1 E.1.1 D.1 Select 1K VROM bank at PPU 1C00h-1FFFh |
9 Bit0: Mirroring, Bit1-2: MSBs of VROM banks, Bit3: Unused/zero E Lower 4bit of 4K VROM bank at PPU 0000h-0FFFh (MSB in Bit1 of Register 9) F Lower 4bit of 4K VROM bank at PPU 1000h-1FFFh (MSB in Bit2 of Register 9) |
VRC4 VRC6 VRC7 VRC3 Expl. F.0.0/1 F.0.0 E.1 A/B IRQ Reload value F.1.0 F.0.1 F.0 C IRQ Control (Bit0: 0=Disable, Bit1: 0=One-Shot) F.1.1 F.1.0 F.1 D IRQ Acknowledge (write any value to this address) |
9.0.1 (or 9.1.0?) Memory Control (2bit) |
VRC1 VRC2,4 VRC6 VRC7 Expl. 9 9.0.0 B.1.1 E.0 Mirroring/Page Select |
0 Two-Screen Vertical mirroring (VRC1: Register 9, Bit0=0) 1 Two-Screen Horizontal mirroring (VRC1: Register 9, Bit0=1) 2 Single-Screen BLK1 (VRC1: N/A) 3 Single-Screen BLK0 (VRC1: N/A) |
9.1.0 Index Register 9.1.1 Data Register |
Mapper 28: Action 53 homebrew X-in-1 |
4444h Unknown (used by menu software) 5000h-5FFFh Select index (00h,01h,80h,81h) (bit1-6=Reserved) 8000h-FFFFh Write data to selected register |
0-1 Select 8K VRAM at PPU 0000h-1FFFh (max 32Kbyte addressable) 2-3 Reserved (0) 4 One-Screen Name Table Select (0=BLK0, 1=BLK1) 5-7 Reserved (0) |
0-3 Select 16K/32K ROM bank at 8000h-HFFFh or C000h-FFFFh or 8000h-FFFFh 4 One-Screen Name Table Select (0=BLK0, 1=BLK1) 5-7 Reserved (0) |
0-1 Nametable mode (0=BLK0, 1=BLK1, 2=VertMirroring, 3=HoriMirroring) 2-3 PRG bank mode (0=32K, 1=Same as 0, 2=16K at C000h, 3=16K at 8000h) 4-5 PRG outer bank size (0=32K, 1=64K, 2=128K, 3=256K) 6 Reserved (0) 7 Reserved (0 or 1 used by menu, but has no function) |
PRG Bank Mode 8000h-BFFFh C000h-FFFFh 32K at 8000h Var: outer*2+inner*2+0 Var: outer*2+inner*2+1 ;AOROM etc 16K at 8000h Var: outer*2+inner*1 Fixed: outer*2+1 ;UNROM 16K at C000h Fixed: outer*2+0 Var: outer*2+inner*1 |
0-7 Select 32K ROM bank at 8000h-FFFFh (initially last 16K at C000h) |
Mapper 32: Irem G-101 - PRG/8K, VROM/1K, NT |
9FFFh Control Register (Bit1,0) Bit0 - Name Table ?Mirroring (0=Horizontal, 1=Vertical Mirroring) Bit1 - Port 8FFFh Switching Mode (see above) 8FFFh When 9FFFh/Bit1=0: Select 8K ROM bank at 8000h-9FFFh (initially 1st 8K bank) Fixed 8K ROM bank at C000h-DFFFh (always 1st half of last 16K) When 9FFFh/Bit1=1: Fixed 8K ROM bank at 8000h-9FFFh (always 1st 8K bank) Select 8K ROM bank at C000h-DFFFh (initially probably 9FFFh/Bit1=0) AFFFh Select 8K ROM bank at A000h-BFFFh (initially 2nd 8K bank) N/A Fixed 8K ROM bank at E000h-FFFFh (always last 8K bank) BFF0h Select 1K VROM bank at PPU 0000h-03FFh BFF1h Select 1K VROM bank at PPU 0400h-07FFh BFF2h Select 1K VROM bank at PPU 0800h-0BFFh BFF3h Select 1K VROM bank at PPU 0C00h-0FFFh BFF4h Select 1K VROM bank at PPU 1000h-13FFh BFF5h Select 1K VROM bank at PPU 1400h-17FFh BFF6h Select 1K VROM bank at PPU 1800h-1BFFh BFF7h Select 1K VROM bank at PPU 1C00h-1FFFh |
Mapper 33: Taito TC0190/TC0350 - PRG/8K, VROM/1K/2K, NT, IRQ |
8000h Select 8K ROM bank at 8000h-9FFFh (Type I: Bit6=Mirroring, see below) 8001h Select 8K ROM bank at A000h-BFFFh N/A Fixed 16K ROM bank at C000h-FFFFh (always last 16K) 8002h Select 2K VROM bank at PPU 0000h-07FFh 8003h Select 2K VROM bank at PPU 0800h-0FFFh A000h Select 1K VROM bank at PPU 1000h-13FFh A001h Select 1K VROM bank at PPU 1400h-17FFh A002h Select 1K VROM bank at PPU 1800h-1BFFh A003h Select 1K VROM bank at PPU 1C00h-1FFFh |
8000h Bit4-0:See above, Bit6:Mirroring (0=Vertical, 1=Horizontal Mirroring) |
C000h IRQ Counter (incremented every scanline, paused during VBlank) C001h IRQ Related (write same value as to C000h) C002h IRQ Start/Enable (write any value) C003h IRQ Acknowledge/Stop (write any value) E000h Mirroring (Bit6) (0=Vertical, 1=Horizontal Mirroring) E001h,E002h,E003h Unknown |
Mapper 34: Nina-1 - PRG/32K, VROM/4K |
7FFEh Select 4K VROM bank at PPU 0000h-0FFFh (4bit) 7FFFh Select 4K VROM bank at PPU 1000h-1FFFh (4bit) 7FFDh Select 32K ROM bank at 8000h-FFFFh (1bit) (initially 1st bank) |
Mapper 40: FDS-Port - Lost Levels |
8000h-9FFFh Disable/Reset IRQ counter (by writing any value) A000h-BFFFh Enable/Start IRQ counter (by writing any value) C000h-DFFFh Not Used N/A Fixed 8K ROM at 6000h-7FFFh (always bank 6) N/A Fixed 8K ROM at 8000h-9FFFh (always bank 4) N/A Fixed 8K ROM at A000h-BFFFh (always bank 5) E000h-FFFFh Select 8K ROM at C000h-DFFFh N/A Fixed 8K ROM at E000h-FFFFh (always bank 7, ie. last bank) |
Mapper 41: Caltron 6-in-1 |
6000h-67FFh Main Control Register (decoded by ADDRESS lines A0-A5) A2-A0 Select 32K ROM at 8000h-FFFFh A2 MSB of above bank number - also enables second register A4-A3 Upper two bits of 8K VROM bank at 0000h-1FFFh A5 Name Table (0=Vertical, 1=Horizontal Mirroring) 8000h-FFFFh Auxilary CHR control (decoded by DATA lines D0-D1) This register is write-protected when above A2=0 (!) D1-D0 Lower two bits of 8K VROM bank at 0000h-1FFFh |
Mapper 42: FDS-Port - Mario Baby |
E000h-FFFCh Select 8K ROM at 6000h-7FFFh N/A Fixed 32K ROM at 8000h-FFFFh (always last 32K) E001h-FFFDh Select mirroring (Bit3: 0=Vertical, 1=Horizontal Mirroring) E002h-FFFEh IRQ Control (Bit1: 0=Disable/Reset, 1=Enable/Start) E003h-FFFFh Not used |
8000h Select 8K VROM at PPU 0000h-1FFFh F000h Select 8K ROM at 6000h-7FFFh N/A Fixed 32K ROM at 8000h-FFFFh (always last 32K) |
Mapper 43: X-in-1 |
8000h-FFFFh Memory Control (Write any data, port decoded by address lines) A7-A0 Select 32K ROM Bank (From currently selected Chip) A9-A8 Select ROM Chip (Empty bus if selected chip not installed) A10 Not used (Always zero) A11 Bank Mode (0=32K, 1=16K; Lower/Upper half via A12) A12 Select 16K ROM Bank (0=Lower, 1=Upper) (Should be zero in 32K mode) A13 Mirroring (0=Vertical, 1=Horizontal Mirroring) A14 Not used (Always zero) |
Mapper 44: 7-in-1 MMC3 Port A001h |
A001h - Select 128K ROM/VROM Block (0..5) or last 256K ROM/VROM Block (6) |
Mapper 45: X-in-1 MMC3 Port 6000hx4 |
6000h 1st write - Configuration Bits 0-7 6000h 2nd write - Configuration Bits 8-15 6000h 3nd write - Configuration Bits 16-23 6000h 4th write - Configuration Bits 24-31 |
Bit7-0 VROM base in 1K steps Bit15-8 ROM base in 8K steps Bit19-16 VROM mask in 1K steps, Mask=(2 SHL (X AND 7))+(X AND 8)/8 Bit23-20 VROM base in 256K steps Bit29-24 ROM mask in 8K steps, Mask=(3Fh AND (NOT X)) Bit30 LOCK (set when menu selection completed, probably locks Port 6000h) Bit31 ??? |
Mapper 46: 15-in-1 Color Dreams |
6000h-7FFFh Multicart Memory Control Bit0-3 Select 64K ROM Block (initially 1st bank) (always same as below) Bit4-7 Select 64K VROM Block (initially 1st bank) (always same as above) 8000h-FFFFh Memory Control (selection within current 64K block) Bit1 Select 32K ROM bank at 8000h-FFFFh (initially 1st bank) Bit6-4 Select 8K VROM bank at PPU 0000h-1FFFh (initially 1st bank) |
Mapper 47: 2-in-1 MMC3 Port 6000h |
6000h Select 1st or 2nd half of ROM/VROM (0 or 1) |
Mapper 48: Taito TC190V |
Mapper 49: 4-in-1 MMC3 Port 6xxxh |
[6000h]=01h ;init [6800h]=00h ;game 0 + [6808h]=08h crashes ? [6841h]=41h ;game 1 [6881h]=81h ;game 2 [68C1h]=C1h ;game 3 |
Mapper 50: FDS-Port - Alt. Levels |
4022h Select 8K ROM at C000h-DFFFh Bit0 and/or Bit3 ZERO Bank 0 Bit0 and/or Bit3 SET Bank 0Ch (or maybe INCREMENT bank number?) Other Bits Unknown 4122h IRQ Control Bit0 and/or Bit1 ZERO Disable/Acknowledge Bit0 and/or Bit1 SET Enable/Start N/A Fixed 8K ROM at 6000h-7FFFh (always bank 0Fh, ie. last bank) N/A Fixed 8K ROM at 8000h-9FFFh (always bank 08h) N/A Fixed 8K ROM at A000h-BFFFh (always bank 09h) N/A Fixed 8K ROM at E000h-FFFFh (always bank 0Bh) |
Mapper 51: 11-in-1 |
6000h Mode Register Bit1 ROM Block Size (0=128K Mode, 1=32K Mode) Bit4 Unknown 8000h Base Address in 32K Steps (X) (0-0Fh) 32K Mode: Select 32K Bank (X) at 8000h-FFFFh (initially 1st 32K bank) 128K Mode: Select 16K Bank (X*2 OR 07h) at C000h-FFFFh And: Select 8K Bank (X*4 OR 23h) at 6000h-7FFFh (for FDS ports) C000h Lower 16K Select (Y) (0-1Fh) (128K Mode only, UNROM-style) 128K Mode: Select 16K Bank (Y*2 OR Y/10h) at 8000h-BFFFh |
Mapper 52: 7-in-1 MMC3 Port 6800h with SRAM |
6800h Bank Control Byte Bit7 Not used Bit6 VROM Bank Size (0=256K, 1=128K) Bit5,2,4 VROM 128K Bank (Bit4 not used in 256K CHR mode) Bit3 PRG ROM Bank Size (0=256K, 1=128K) Bit2,1,0 PRG ROM 128K Bank (Bit0 not used in 256K PRG mode) |
Mapper 56: Pirate SMB3 |
8000h Unknown (always 08h) (maybe counter LSBs, if any) 9000h Bit7-4 of 16bit IRQ counter A000h Bit11-8 of 16bit IRQ counter B000h Bit15-12 of 16bit IRQ counter C000h IRQ Anable (FFh=Enable, 00h=Disable) D000h IRQ Acknowledge (Always write FFh, or EFh) E000h Ignore - MMC3-index (Port 8000h) relicts redirected to E000h F000h Select 8K ROM at 8000h-9FFFh F001h Select 8K ROM at A000h-BFFFh F002h Select 8K ROM at C000h-DFFFh N/A Fixed 8K ROM at E000h-FFFFh (always last bank) F003h Unknown (always 10h) F400h Select 1K VROM at PPU 0000h-03FFh F401h Select 1K VROM at PPU 0400h-07FFh F402h Select 1K VROM at PPU 0800h-0BFFh F403h Select 1K VROM at PPU 0C00h-0FFFh F404h Select 1K VROM at PPU 1000h-13FFh F405h Select 1K VROM at PPU 1400h-17FFh F406h Select 1K VROM at PPU 1800h-1BFFh F407h Select 1K VROM at PPU 1C00h-1FFFh |
Mapper 57: 6-in-1 |
8000h Extra Port for CNROM Games in 2nd 64K of VROM Bit2-0 Select 8K VROM at PPU 0000h-1FFFh (ORed with value in Port 8800h) Bit5-3 Not used (zero) Bit6 Must be set for Second 64K Block of VROM Bit7 Must be set for First 64K Block of VROM 8800h Main Port Bit2-0 Select 8K VROM at PPU 0000h-1FFFh (ORed with value in Port 8000h) Bit3 Mirroring (0=Vertical, 1=Horizontal Mirroring) Bit4 ROM Size (0=16K; Bank X twice, 1=32K; Bank X and X+1) Bit7-5 Select 16K ROM at 8000h-BFFFh and C000h-FFFFh (X) |
Mapper 58: X-in-1 |
C000h-FFFFh Memory Control (Write any data, port decoded by address lines) A2-A0 Select 16K ROM Bank at 8000h-BFFFh and C000h-FFFFh (X) A5-A3 Select 8K VROM Bank at PPU 0000h-1FFFh A6 ROM Size (0=32K; Bank X and X+1, 1=16K; Bank X twice) A7 Mirroring (0=Vertical, 1=Horizontal Mirroring) A12-A8 Unknown (Usually 0,/A6,0,/A6,A5,A3, except in yie-ar-kung-fu) |
Mapper 61: 20-in-1 |
8000h-FFFFh Memory Control (Write any data, port decoded by address lines) A3-0 Select 32K ROM Bank at 8000h-FFFFh A4 Bank Size (0=32K, 1=16K; only lower/upper half via Bit5) A5 Select lower/upper half of selected 32K bank (in 16K mode) A7 Mirroring (0=Vertical, 1=Horizontal Mirroring) A6,A8-A14 Not used (always 0) |
Mapper 62: X-in-1 |
8000h-BFFFh Memory Control (Decoded by address AND data lines) A4-A0,D1-D0 Select 8K VROM at PPU 0000h-1FFFh A5 ROM Size (0=32K; Bank X-1 and X, 1=16K; Bank X twice) A7 Mirroring (0=Vertical, 1=Horizontal Mirroring) A6,A13-A8 Select 16K ROM at 8000h-BFFFh and C000h-FFFFh (X) A14 Always 0 ? |
Mapper 64: Tengen RAMBO-1 - PRG/8K, VROM/2K/1K, NT, IRQ |
8000h Index/Control (6bit) Bit7 CHR Address Select (0=Normal, 1=Address Areas XOR 1000h) Bit6 PRG Address Select (0=Normal, 1=Address Areas plus 2000h) Bit5 CHR Bank Size (0=Normal, 1=Use 1K-resolution instead 2x1K) Bit3-0 Command Number (Note: Index 0-7 same as for MMC3) 0 - Select 2x1K VROM at PPU 0000h-07FFh (or 1000h-17FFh, if Bit7=1) 1 - Select 2x1K VROM at PPU 0800h-0FFFh (or 1800h-1FFFh, if Bit7=1) 2 - Select 1K VROM at PPU 1000h-13FFh (or 0000h-03FFh, if Bit7=1) 3 - Select 1K VROM at PPU 1400h-17FFh (or 0400h-07FFh, if Bit7=1) 4 - Select 1K VROM at PPU 1800h-1BFFh (or 0800h-0BFFh, if Bit7=1) 5 - Select 1K VROM at PPU 1C00h-1FFFh (or 0C00h-0FFFh, if Bit7=1) 6 - Select 8K ROM at 8000h-9FFFh (or A000h-BFFFh, if Bit6=1) 7 - Select 8K ROM at A000h-BFFFh (or C000h-DFFFh, if Bit6=1) F - Select 8K ROM at C000h-DFFFh (or 8000h-9FFFh, if Bit6=1) N/A - Fixed 8K ROM at E000h-FFFFh (always last 8K bank) 8 - Select 1K VROM page at PPU 0400h (used only if Bit5=1) 9 - Select 1K VROM page at PPU 0C00h (used only if Bit5=1) 8001h Data Register (indexed via Port 8000h) A000h Mirroring Select (Bit0: 0=Vertical, 1=Horizontal Mirroring) A001h Not used C000h IRQ Reload Value (for decrementing Scanline-/clock-cycle-counter) C001h IRQ Clock Source (Bit0: 0=Scanline Counter, 1=System Clock div 4) E000h IRQ Disable/Acknowledge (write any value) E001h IRQ Enable (write any value) |
Mapper 65: Irem H-3001 - PRG/8K, VROM/1K, NT, IRQ |
9000h Unknown 9001h Unknown 9003h,9004h IRQ Control (not sure about difference between 9003h/9004h) (00h=Disable IRQ, C0h=Enable IRQ, other values unknown) 9005h IRQ Counter MSB of decrementing 16bit counter 9006h IRQ Counter LSB of decrementing 16bit counter B000h Select 1K VROM bank at PPU 0000h-03FFh B001h Select 1K VROM bank at PPU 0400h-07FFh B002h Select 1K VROM bank at PPU 0800h-0BFFh B003h Select 1K VROM bank at PPU 0C00h-0FFFh B004h Select 1K VROM bank at PPU 1000h-13FFh B005h Select 1K VROM bank at PPU 1400h-17FFh B006h Select 1K VROM bank at PPU 1800h-1BFFh B007h Select 1K VROM bank at PPU 1C00h-1FFFh 8000h Select 8K ROM bank at 8000h-9FFFh (initially 1st half of 1st 16K) A000h Select 8K ROM bank at A000h-BFFFh (initially 2nd half of 1st 16K) C000h Select 8K ROM bank at C000h-DFFFh (initially 1st half of last 16K) N/A Fixed 8K ROM bank at E000h-FFFFh (always 2nd half of last 16K) |
Mapper 66: GNROM - PRG/32K, VROM/8K |
8000h-FFFFh Memory Control (2x2bits) Bit1-0 Select 8K VROM bank at PPU 0000h-1FFFh (initially 1st bank) Bit5-4 Select 32K ROM bank at 8000h-FFFFh (initially 1st bank) |
Mapper 67: Sunsoft3 - PRG/16K, VROM/2K, IRQ |
8000h IRQ Acknowledge (write any data to this address) 8800h-8FFFh Select 2K VROM bank at PPU 0000h-07FFh 9800h-9FFFh Select 2K VROM bank at PPU 0800h-0FFFh A800h-AFFFh Select 2K VROM bank at PPU 1000h-17FFh B800h-BFFFh Select 2K VROM bank at PPU 1800h-1FFFh C800h-CFFFh IRQ Counter (two writes: 1st=MSB, 2nd=LSB) (16bit decrementing clock cycle counter) D800h-DFFFh IRQ Control (Bit4: 0=Disable, 1=Enable) E800h-EFFFh No info - maybe Mirroring control ? F800h-FFFFh Select 16K ROM bank at 8000h-BFFFh (initially 1st bank) N/A Fixed 16K ROM bank at C000h-FFFFh (always last bank) |
Mapper 68: Sunsoft4 - PRG/16K, VROM/2K, NT-VROM |
8000h Select 2K VROM bank at PPU 0000h-07FFh 9000h Select 2K VROM bank at PPU 0800h-0FFFh A000h Select 2K VROM bank at PPU 1000h-17FFh B000h Select 2K VROM bank at PPU 1800h-1FFFh C000h Select 1K VROM bank as BLK0 (in VROM Mode) (from LAST 128 banks) D000h Select 1K VROM bank as BLK1 (in VROM Mode) (from LAST 128 banks) E000h Name Table Control Bit4 Name Table VROM Mode (0=VRAM, 1=VROM via Port C000h/D000h) Bit0 Name Table Mirroring (0=Horizontal, 1=Vertical Mirroring) F000h Select 16K ROM bank at 8000h-BFFFh (initially 1st bank) N/A Fixed 16K ROM bank at C000h-FFFFh (always last bank) |
Mapper 69: Sunsoft5 FME-7 - PRG/8K, VROM/1K, NT ctrl, SRAM, IRQ |
8000h Index Register (4bit) 0 - Select 1K VROM at PPU 0000h-03FFh 1 - Select 1K VROM at PPU 0400h-07FFh 2 - Select 1K VROM at PPU 0800h-0BFFh 3 - Select 1K VROM at PPU 0C00h-0FFFh 4 - Select 1K VROM at PPU 1000h-13FFh 5 - Select 1K VROM at PPU 1400h-17FFh 6 - Select 1K VROM at PPU 1800h-1BFFh 7 - Select 1K VROM at PPU 1C00h-1FFFh 8 - Select 8K ROM/RAM at 6000h-7FFFh Bit6=0 --> Select 8K ROM (Page number in bit5-0) Bit6=1,Bit7=1 --> Select 8K SRAM Bit6=1,Bit7=0 --> Select 8K "pseudo-random numbers?" 9 - Select 8K ROM at 8000h-9FFFh A - Select 8K ROM at A000h-BFFFh B - Select 8K ROM at C000h-DFFFh C - Select Mirroring 0 Two-Screen, Vertical Mirroring 1 Two-Screen, Horizontal Mirroring 2 One-Screen, BLK0 3 One-Screen, BLK1 D - IRQ control (00h=Disable, 81h=Enable, other values?) E - IRQ LSB of decrementing clock cycle counter F - IRQ MSB of decrementing clock cycle counter N/A - Fixed 8K ROM at E000h-FFFFh (always last 8K bank) A000h Data Register (indexed via Port 8000h) |
Mapper 70: Bandai - PRG/16K, VROM/8K, NT |
C000h-C0FFh Memory Control Bit7 Name Table Select (0/1 = BLK0/BLK1) (One-Screen Mode only) Bit6-4 Select 16K ROM at 8000h-BFFFh Bit3-0 Select 8K VROM at PPU 0000h-1FFFh |
Mapper 71: Camerica - PRG/16K |
8000h-BFFFh Unknown C000h-FFFFh Select 16K ROM bank at 8000h-BFFFh (initially 1st bank) N/A Fixed 16K ROM bank at C000h-FFFFh (always last bank) |
Mapper 72: Jaleco Early Mapper 0 - PRG-LO, VROM/8K |
8000h-FFFFh Memory Control Bit7-6 Function Select 0 Confirm Selection 1 Select 8K VROM bank at PPU 0000h-1FFFh 2 Select 16K ROM bank at 8000h-BFFFh (lower half of PRG memory) 3 Reserved (would probably select both PRG+VROM) Bit5-4 Not used Bit0-3 ROM or VROM Bank Number for above Selection |
Mapper 73: Konami VRC3 - PRG/16K, IRQ |
Mapper 74: Whatever MMC3-style |
Mapper 75: Jaleco SS8805/Konami VRC1 - PRG/8K, VROM/4K, NT |
Mapper 76: Namco 109 - PRG/8K, VROM/2K |
8000h Index/Control (3bit) Bit2-0 Command Number 0 - Not used 1 - Not used 2 - Select 2K VROM at PPU 0000h-07FFh 3 - Select 2K VROM at PPU 0800h-0FFFh 4 - Select 2K VROM at PPU 1000h-17FFh 5 - Select 2K VROM at PPU 1800h-1FFFh 6 - Select 8K ROM at 8000h-9FFFh 7 - Select 8K ROM at A000h-BFFFh N/A - Fixed 16K ROM at C000h-FFFFh (always last bank) 8001h Data Register (Indexed via Port 8000h) |
Mapper 77: Irem - PRG/32K, VROM/2K, VRAM 6K+2K |
8000h-FFFFh Memory Control Bit0-1 Select 32K ROM bank at 8000h-FFFFh Bit2-3 Not used Bit4-7 Select 2K VROM bank at PPU 0000h-07FFh 6K VRAM at PPU 0800h-1FFFh (ie. upper 6K of Pattern Tables are VRAM) 2K VRAM at PPU 2800h-2FFFh (ie. uses Four-Screen Name Tables) |
Mapper 78: Irem 74HC161/32 - PRG/16K, VROM/8K |
8000h-FFFFh Memory Control Bit2-0 Select 16K ROM bank at 8000h-BFFFh (initially 1st bank) N/A Fixed 16K ROM bank at C000h-FFFFh (always last bank) Bit3 Name Table Control Jaleco/Cosmo Carrier: One-Screen (0=BLK0, 1=BLK1) Irem/Holy Diver: Two-Screen (0=Horizontal, 1=Vertical Mirroring) Bit7-4 Select 8K VROM bank at PPU 0000h-1FFFh |
Mapper 79: AVE Nina-3 - VROM/8K |
4100h Bit1-0 Select 8K VROM bank at PPU 0000h-1FFFh |
Mapper 80: Taito X-005 - PRG/8K, VROM/2K/1K, NT |
7EF0h Select 2x1K VROM at PPU 0000h-07FFh (Bit7: Name Table, see below) 7EF1h Select 2x1K VROM at PPU 0800h-0FFFh (Bit7: Name Table, see below) 7EF2h Select 1K VROM at PPU 1000h-13FFh 7EF3h Select 1K VROM at PPU 1400h-17FFh 7EF4h Select 1K VROM at PPU 1800h-1BFFh 7EF5h Select 1K VROM at PPU 1C00h-1FFFh 7EF6h Unknown (usually FFh, 01h, or 00h) 7EF8h SRAM Enable (A3h=Enable, FFh=Disable) 7EFAh Select 8K ROM 8000h-9FFFh 7EFCh Select 8K ROM A000h-BFFFh 7EFEh Select 8K ROM C000h-DFFFh N/A Fixed 8K ROM E000h-FFFFh (always last bank) 7EF7h,7EF9h Not used 7EFBh,7EFDh,7EFFh Dupes of 7EFAh,7EFCh,7EFEh used by Kyonshiizu 2 only 7F00h-7FFFh SRAM Area (seems to be only 256 bytes or less used) |
Mapper 81: AVE Nina-6 |
Mapper 82: Taito X1-17 - PRG/8K, VROM/2K/1K |
7EF0h Select 2x1K VROM at PPU 0000h-07FFh (or 1000h-17FFh if swapped) 7EF1h Select 2x1K VROM at PPU 0800h-0FFFh (or 1800h-1FFFh if swapped) 7EF2h Select 1K VROM at PPU 1000h-13FFh (or 0000h-03FFh if swapped) 7EF3h Select 1K VROM at PPU 1400h-17FFh (or 0400h-07FFh if swapped) 7EF4h Select 1K VROM at PPU 1800h-1BFFh (or 0800h-0BFFh if swapped) 7EF5h Select 1K VROM at PPU 1C00h-1FFFh (or 0C00h-0FFFh if swapped) 7EF6h Swap PPU 0000h-0FFFh / 1000h-1FFFh (Bit1: 0=Normal, 1=Swap) 7EF7h SRAM .... CAh,00h,01h,40h 7EF8h SRAM .... 69h,00h,40h 7EF9h SRAM .... 84h,00h,40h 7EFAh Select 8K ROM 8000h-9FFFh (Bit7-2) 7EFBh Select 8K ROM A000h-BFFFh (Bit7-2) 7EFCh Select 8K ROM C000h-DFFFh (Bit7-2) N/A Fixed 8K ROM E000h-FFFFh (unknown?) 7EFDh SRAM .... FFh 7EFEh SRAM .... FFh,07h 7EFFh SRAM .... FFh 6000h-7FFFh SRAM Area (probably 8K size, at least 6000h-73xxh used) |
Mapper 83: Cony |
Cony (A) 128K+256K Fatal Fury 2 Cony (B) 256K+512K World Heroes 2 Cony (C) 4x256K+4x256K Dragon Ball Z 4-in-1 Also used by Garou Densetsu Special? |
8310h Select 1K VROM at PPU 0000h-03FFh (in current 256K block) 8311h Select 1K VROM at PPU 0400h-07FFh (in current 256K block) 8312h Select 1K VROM at PPU 0800h-0BFFh (in current 256K block) 8313h Select 1K VROM at PPU 0C00h-0FFFh (in current 256K block) 8314h Select 1K VROM at PPU 1000h-13FFh (in current 256K block) 8315h Select 1K VROM at PPU 1400h-17FFh (in current 256K block) 8316h Select 1K VROM at PPU 1800h-1BFFh (in current 256K block) 8317h Select 1K VROM at PPU 1C00h-1FFFh (in current 256K block) |
8310h Select 2K VROM at PPU 0000h-07FFh 8311h Select 2K VROM at PPU 0800h-0FFFh 8316h Select 2K VROM at PPU 1000h-17FFh 8317h Select 2K VROM at PPU 1800h-1FFFh |
8300h Select 8K ROM at 8000h-9FFFh 8301h Select 8K ROM at A000h-BFFFh 8302h Select 8K ROM at C000h-DFFFh N/A Fixed 8K ROM at E000h-FFFFh (always last bank) |
8000h Select 16K ROM at 8000h-BFFFh (in current 256K block) N/A Fixed 16K ROM at C000h-FFFFh (last bank in current 256K block) |
8200h IRQ Counter LSB, writing to this address acknowledges IRQs 8201h IRQ Counter MSB, writing to this address starts counting |
8100h IRQ Control (Bit7=Enable IRQs) (other bits unknown) Bit7, unlike C 5000h Unknown, program reads from this address |
8100h IRQ Control (Bit1=Enable IRQs) (other bits unknown) Bit1, unlike A/B B000h Select 256K ROM/VROM Windows (upper two address bits) Bit0-3 Unknown Bit4,6 Bit0 of 256K Block Number Bit5,7 Bit1 of 256K Block Number Used values are 00h,50h,A0h,F0h. Other values could probably select separate 256K banks for ROM/VROM. The ROM selection also affects the "fixed" 16K at C000h-FFFFh (last bank in current 256K block). B0FFh Probably same as B000h B1FFh Probably same as B000h 510Xh Unknown, program reads/writes to/from this address 430Xh Unknown, program reads from this address |
Mapper 84: Whatever |
Mapper 85: Konami VRC7A/B - PRG/16K/8K, VROM/1K, NT, IRQ, SOUND |
9010h (aka 9.1.0) Index register 9030h (aka 9.1.1) Data Register |
Bit7-0 Lower 8bit of 9bit Frequency (f; 0-1FFh) |
Bit7-5 Unknown Bit4 Channel trigger Bit3-1 Octave Select (o; 0-7) Bit0 Upper 1bit of 9bit Frequency (f; 0-1FFh) |
Bit7-4 Instrument number (0=Custom, 1-0Fh=Fixed Instruments) Bit3-0 Volume |
Here's a link to a good document about this chip: http://www.ccms.net/~aomit/oplx/ |
Bit7 Tremolo Enable Bit6 Vibrato Enable Bit5 Sustain Enable Bit4 KSR Bit3-0 Multiplier |
Bit7-6 Key Scale Level Bit5-0 Output Level |
Bit7-5 Not used (Write 0's) Bit4 Carrier Waveform Bit3 Modulator Waveform There are only two waveforms available. Sine and rectified sine (only the positive cycle of the sine; negative cycle "chopped off".) Bit2-0 Feedback Control |
Bit7-4 Attack Bit3-0 Decay |
Bit7-4 Sustain Bit3-0 Release |
1 - 05 03 10 06 74 A1 13 F4 2 - 05 01 16 00 F9 A2 15 F5 3 - 01 41 11 00 A0 A0 83 95 4 - 01 41 17 00 60 F0 83 95 5 - 24 41 1F 00 50 B0 94 94 6 - 05 01 0B 04 65 A0 54 95 7 - 11 41 0E 04 70 C7 13 10 8 - 02 44 16 06 E0 E0 31 35 9 - 48 22 22 07 50 A1 A5 F4 A - 05 A1 18 00 A2 A2 F5 F5 B - 07 81 2B 05 A5 A5 03 03 C - 01 41 08 08 A0 A0 83 95 D - 21 61 12 00 93 92 74 75 E - 21 62 21 00 84 85 34 15 F - 21 62 0E 00 A1 A0 34 15 |
Mapper 86: Jaleco Early Mapper 2 - PRG/32K, VROM/8K |
6000h Memory Control Bit6,1,0 Select 8K VROM bank at PPU 0000h-1FFFh Bit5,4 Select 32K ROM bank at 8000h-FFFFh Bit7,3,2 Not used (always zero) 7000h Unknown |
Mapper 87: Jaleco/Konami 16K VROM - VROM/8K |
6000h Select 8K VROM bank at PPU 0000h-1FFFh (Bit 1 used only) |
Mapper 88: Namco 118 |
8000h Index/Control (3bit) Bit2-0 Command Number 0 - Select 2x1K VROM at PPU 0000h-07FFh (Banks 0-63) 1 - Select 2x1K VROM at PPU 0800h-0FFFh (Banks 0-63) 2 - Select 1K VROM at PPU 1000h-13FFh (Banks 64-127) 3 - Select 1K VROM at PPU 1400h-17FFh (Banks 64-127) 4 - Select 1K VROM at PPU 1800h-1BFFh (Banks 64-127) 5 - Select 1K VROM at PPU 1C00h-1FFFh (Banks 64-127) 6 - Select 8K ROM at 8000h-9FFFh 7 - Select 8K ROM at A000h-BFFFh N/A - Fixed 16K ROM at C000h-FFFFh (always last bank) 8001h Data Register (Indexed via Port 8000h) |
Mapper 89: Sunsoft Early - PRG/16K, VROM/8K |
8000h-FFFFh Memory Control Bit7 Unknown - maybe Name Table related, maybe not. Bit6-4 Select 16K ROM bank at 8000h-BFFFh N/A Fixed 16K ROM bank at C000h-FFFFh (always last bank) Bit3-0 Select 8K VROM bank at PPU 0000h-1FFFh |
Mapper 90: Pirate MMC5-style |
5000h(W) Maths Coprocessor Parameter A 5001h(W) Maths Coprocessor Parameter B 5000h(R) Maths Coprocessor 8bit Result of A*B 8000h PRG 8K at 8000h-9FFFh 8001h PRG 8K at A000h-BFFFh or 16k PRG bank at $A000-? 8002h PRG 8K at C000h-DFFFh 8003h PRG 8K at E000h-FFFFh 9000h/A000h LSB/MSB of VROM bank at PPU 0000h (1K,2K,4K,8K) 9001h/A001h LSB/MSB of VROM bank at PPU 0400h (1K) 9002h/A002h LSB/MSB of VROM bank at PPU 0800h (1K,2K) 9003h/A003h LSB/MSB of VROM bank at PPU 0C00h (1K) 9004h/A004h LSB/MSB of VROM bank at PPU 1000h (1K,2K,4K) 9005h/A005h LSB/MSB of VROM bank at PPU 1400h (1K) 9006h/A006h LSB/MSB of VROM bank at PPU 1800h (1K,2K) 9007h/A007h LSB/MSB of VROM bank at PPU 1C00h (1K) B000h/B004h LSB/MSB of 1K VROM bank at PPU 2000h (Name Table VROM mode) B001h/B005h LSB/MSB of 1K VROM bank at PPU 2400h (Name Table VROM mode) B002h/B006h LSB/MSB of 1K VROM bank at PPU 2800h (Name Table VROM mode) B003h/B007h LSB/MSB of 1K VROM bank at PPU 2C00h (Name Table VROM mode) |
$C000 irq registers Unknown $C001 irq registers Unknown $C006 irq registers Unknown $C007 irq registers Unknown $C002 irq clear irq_flag=0 and INT signal is clear $C003 irq reset if $C005=0, irq_flag=0 else, irq_flag=1 and irq_counter=irq_latch $C004 irq reset It seems same of $C003 $C005 irq counter irq_flag=1, irq_latch = irq_counter = value |
D000h Bank Mode Bit1-0 PRG Bank Size 0 Fixed last 32K at 8000h-FFFFh (initial setting) 1 16K Banks, and Fixed last 16K at C000h-FFFFh 2 8K Banks, via Bits 2,7, and Ports 8000h-8003h 3 8K in reverse mode? Bit2 PRG Bank at E000h in 8K Mode (0=Last 8K, 1=Port 8003h) Bit4-3 VROM Bank Size (0=8K, 1=4K, 2=2K, 3=1K) Bit5 Name Table Source (0=VRAM via D001h, 1=VROM via B00Xh) Bit6 Not used Bit7 PRG Bank at 6000h (1=enabled) (Similiar/Instead E000h?) D001h Name Table Control (in VRAM mode) (only lower 2bit used) 0 Two-Screen, Vertical mirroring 1 Two-Screen, Horizontal mirroring 2,3 One-Screen, BLK0 |
$D002 unknown Unused? $D003 bank page Only used by larger carts |
for(i=0;i<4;i++) { if(!nam_high_byte[i] && (nam_low_byte[i] == i)) { bankmode &= 0xdf; //clear bit5 --> use VRAM with mirroring return; next |
Mapper 91: HK-SF3 - PRG/8K, VROM/2K, IRQ |
6000h Select 2K VROM bank at PPU 0000h-07FFh 6001h Select 2K VROM bank at PPU 0800h-0FFFh 6002h Select 2K VROM bank at PPU 1000h-17FFh 6003h Select 2K VROM bank at PPU 1800h-1FFFh 7000h Select 8K ROM bank at 8000h-9FFFh 7001h Select 8K ROM bank at A000h-BFFFh N/A Fixed 16K ROM bank at C000h-FFFFh (always last 16K) 7006h IRQ Disable/Acknowledge (write any value) 7007h IRQ Enable (write any value) |
Mapper 92: Jaleco Early Mapper 1 - PRG-HI, VROM/8K |
8000h-FFFFh Memory Control Bit7-6 Function Select 0 Confirm Selection 1 Select 8K VROM bank at PPU 0000h-1FFFh 2 Select 16K ROM bank at C000h-FFFFh (upper half of PRG memory) 3 Reserved (would probably select both PRG+VROM) Bit5-4 Not used Bit0-3 ROM or VROM Bank Number for above Selection |
Mapper 93: 74161/32 - PRG/16K |
8000h-FFFFh Memory Control Bit0 Unknown, seems to be always set. Bit1-3 Always zero Bit4-6 Select 16K ROM bank at 8000h-BFFFh Bit7 Always zero |
Mapper 94: 74161/32 - PRG/16K |
8000h-FFFFh Memory Control Bit0-1 Always zero Bit2-4 Select 16K ROM bank at 8000h-BFFFh Bit5-7 Always zero |
Mapper 95: Namcot MMC3-Style |
8000h Index/Control (3bit) Bit2-0 Command Number 0 - Select 2x1K VROM at PPU 0000h-07FFh 1 - Select 2x1K VROM at PPU 0800h-0FFFh 2 - Select 1K VROM at PPU 1000h-13FFh 3 - Select 1K VROM at PPU 1400h-17FFh 4 - Select 1K VROM at PPU 1800h-1BFFh 5 - Select 1K VROM at PPU 1C00h-1FFFh 6 - Select 8K ROM at 8000h-9FFFh 7 - Select 8K ROM at A000h-BFFFh N/A - Fixed 16K ROM at C000h-FFFFh (always last bank) 8001h Data Register (Indexed via Port 8000h) |
Mapper 96: 74161/32 - PRG/32K, CHR/16K/4K, LATCH |
8000h-FFFFh Bit0-1 Select 32K PRG-ROM bank at 8000h-FFFFh (2bit) (AOROM-style) Bit2 Select 16K CHR-RAM bank at PPU:0000h-1FFFh (via below 4K banks) PPU:2000h-20FFh Select 1st 4K (of above 16K) at PPU:0000h-0FFFh (Latch=0) PPU:2100h-21FFh Select 2nd 4K (of above 16K) at PPU:0000h-0FFFh (Latch=1) PPU:2200h-22FFh Select 3rd 4K (of above 16K) at PPU:0000h-0FFFh (Latch=2) PPU:2300h-23FFh Select 4th 4K (of above 16K) at PPU:0000h-0FFFh (Latch=3) N/A Fixed Last 4K (of above 16K) at PPU:1000h-1FFFh PPU:2400h-2FFFh Other Nametables (same 4K mapping as PPU:2000h-23FFh) |
Mapper 97: Irem - PRG HI |
8000h-FFFFh Memory Control Bit7-6 Unknown (used values are 1,2 - values 0,3 unused) (Maybe Name Table Mirroring) Bit5-4 Not used (always zero) Bit3-0 Select 16K ROM bank at C000h-FFFFh (upper block!) N/A Fixed 16K ROM bank at 8000h-BFFFh (always LAST 16K bank) |
Mapper 99: VS Unisystem Port 4016h - VROM/8K, (PRG/8K) |
Port 4016h/Write: Bit2 VS Unisystem Select 8K VROM bank at PPU 0000h-1FFFh Bit1 VS Dualsystem: Send IRQ to other CPU (0=No, 1=IRQ) Bit0 Joypad Strobe (as usually) |
Bit2 additionally selects 8K PRG-ROM (bank 0 or 4) at 8000h-9FFFh, Note: Due to .NES fileformat, the 40K PRG-ROM is zeropadded to 48K. |
1A PRG-ROM E000h-FFFFh 2A CHR-ROM Bank 1 1B PRG-ROM C000h-DFFFh 2B CHR-ROM Bank 0 1C PRG-ROM A000h-BFFFh 1D PRG-ROM 8000h-9FFFh |
Mapper 100: Whatever |
Mapper 105: X-in-1 MMC1 |
Register 0 Configuration Register (same as MMC1) Register 1 ROM Bank Base (Bit4 unknown) Register 2 Not used Register 3 ROM Bank (same as MMC1, but ORed with Base) |
Mapper 112: Asder - PRG/8K, VROM/2K/1K |
8000h Index (0-7) 0 Select 8K ROM at 8000h-9FFFh 1 Select 8K ROM at A000h-BFFFh 2 Select 2x1K VROM at PPU 0000h-07FFh 3 Select 2x1K VROM at PPU 0800h-0FFFh 4 Select 1K VROM at PPU 1000h-13FFh 5 Select 1K VROM at PPU 1400h-17FFh 6 Select 1K VROM at PPU 1800h-1BFFh 7 Select 1K VROM at PPU 1C00h-1FFFh N/A Fixed 16K ROM at C000h-FFFFh (always last 16K) A000h Data (indexed via Port 8000h) C000h Unknown, always 00h E000h Unknown, always 00h |
Mapper 113: Sachen/Hacker/Nina |
4100h-41FFh Memory Control (commonly used addresses: 4100h, 4101h, 4120h) Bit0-2 Select 8K VROM bank at PPU 0000h-1FFFh Bit3-4 Select 32K ROM bank at 8000h-FFFFh (bigger carts only) |
Mapper 114: Super Games |
6000h Unknown (usually zero, except Lion King before crashing?) 8000h Unknown (see notes below) A000h Memory Control Index (see list below) C000h Memory Control Data (indexed via A000h) E000h IRQ Acknowledge (write any value) 6001h Unknown (always zero) 8001h Unknown (see notes below) A001h IRQ Counter (MMC3-style, decremented per scanline, paused in VBlank) C001h IRQ Counter E001h IRQ Start |
0 Select 2x1K VROM at PPU 0000h-07FFh 1 Select 1K VROM at PPU 1400h-17FFh 2 Select 2x1K VROM at PPU 0800h-0FFFh 3 Select 1K VROM at PPU 1C00h-1FFFh 4 Select 8K ROM at 8000h-9FFFh 5 Select 8K ROM at A000h-BFFFh 6 Select 1K VROM at PPU 1000h-13FFh 7 Select 1K VROM at PPU 1800h-1BFFh |
Mapper 115: MMC3 Cart Saint |
6000h Unknown (used values 00h, A0h, A4h) 6001h Unknown (always 00h) |
Mapper 116: Whatever |
Mapper 117: Future |
8000h Select 8K ROM at 8000h-9FFFh 8001h Select 8K ROM at A000h-BFFFh 8002h Select 8K ROM at C000h-DFFFh N/A Fixed 8K ROM at E000h-FFFFh (last bank) 9000h Unknown (always FFh) 9001h Unknown (always 08h) 9003h Unknown (always 00h) A000h Select 1K VROM at PPU 0000h-03FFh A001h Select 1K VROM at PPU 0400h-07FFh A002h Select 1K VROM at PPU 0800h-0BFFh A003h Select 1K VROM at PPU 0C00h-0FFFh A004h Select 1K VROM at PPU 1000h-13FFh A005h Select 1K VROM at PPU 1400h-17FFh A006h Select 1K VROM at PPU 1800h-1BFFh A007h Select 1K VROM at PPU 1C00h-1FFFh A008h-A00Fh Unknown (always 01h, probably VROM bank related) C001h IRQ Counter/Start (MMC3, decremented per scanline, paused in VBlank) C002h IRQ Acknowledge (write any value) C003h IRQ Counter/Start (always write same value as to C001h) D000h Unknown (always 00h) E000h IRQ Enable (Bit0), upper 7bit unknown (always 0000011b) F000h Unknown (always 00h) |
Mapper 118: MMC3 TLSROM - PRG/8K, VROM/2K/1K, Banked-NT, SRAM, IRQ |
Mapper 119: MMC3 TQROM - PRG/8K, VROM/VRAM/2K/1K, NT, SRAM, IRQ |
Mapper 122: Whatever |
Mapper 133: Sachen |
4120h Memory Control Bit1-0 Select 8K VROM at PPU 0000h-1FFFh Bit2 Select 32K ROM at 8000h-FFFFh |
Mapper 151: VS Unisystem VRC1 or MMC3 Daughterboards |
Mapper 152: Whatever |
Mapper 160: Same as Mapper 90 |
Mapper 161: Same as Mapper 1 |
Mapper 168: RacerMate PRG/16K, VRAM/4K, IRQ |
6000h..600Fh Unknown (looks like Debug LED Control or so) B000h Memory Banking (74LS174; 6bit D flip-flop) N/A Fixed 4K CHR-RAM at PPU:0000h-0FFFh (bank 00h) D0-D3 Select 4K CHR-RAM at PPU:1000h-1FFFh (bank 00h..0Fh) D4-D5 Unused D6-D7 Select 16K PRG-ROM at 8000h-BFFFh (bank 00h..03h) N/A Fixed 16K PRG-ROM at C000h-FFFFh (bank 03h) F000h IRQ/counter control or so ;\maybe IRQ ack,reset,enable,disable F080h IRQ/counter control or so ;/or whatever (maybe 7474 flipflop) |
[F080h]=FFh disable IRQ and/or reset IRQ-counter or so [F000h]=00h enable IRQ and/or start IRQ-counter or so |
U1 28pin HY52256A SRAM 32Kx8 (CHR-RAM) U2 28pin HY52256A SRAM 32Kx8 (CHR-RAM) U3 28pin 27C512 EPROM 64Kx8 (badged V903_128) (PRG-ROM) U4 16pin 74LS174 (6bit D flip-flop with reset) ;memory banking U5 14pin 74HCT32 (quad OR gates) U6 14pin 74LS00 (quad NAND gates) U7 14pin 74HCT32 (quad OR gates) U8 14pin 74LS00 (quad NAND gates) U9 14pin 74HCT74 (dual flipflop) ;maybe IRQ status/control? U10 16pin 74HCT4040N (12bit counter with reset) ;IRQ counter (input=PHI2) U11 16pin Unknown, maybe CIC (not installed) B1 2pin Maxell Battery J1J2 3pin Jumpers (J2 installed) J3J4 3pin Jumpers (J3 installed) J1 72pin Cart-edge connector (for NES consoles) (not Famicom) |
Mapper 180: Nihon Bussan - PRG HI |
8000h-FFFFh Memory Control Bit7-3 Not used (always zero) Bit2-0 Select 16K ROM bank at C000h-FFFFh (upper block!) N/A Fixed 16K ROM bank at 8000h-BFFFh (always FIRST 16K bank) |
Mapper 182: Same as Mapper 114 |
Mapper 184: Sunsoft - VROM/4K |
6000h Select VROM Banks Bit2-0 Select 4K VROM at PPU 0000h-0FFFh Bit6-4 Select 4K VROM at PPU 1000h-1FFFh |
Mapper 185: VROM-disable |
8000h-FFFFh Bit 0-1 Select 8K VROM or Open Bus at PPU 0000h Bit 4-5 Security Diodes (some crude copy protection) |
Off On Title F0h 0Fh Bird Week 00h 33h B-Wings 00h 11h Mighty Bomb Jack 20h 22h Sansuu 1 Nen - Keisan Game 20h 22h Sansuu 2 Nen - Keisan Game 00h FFh Sansuu 3 Nen - Keisan Game 13h 21h Spy vs Spy |
Mapper 188: UNROM-reversed |
... aka bit3 = chipselect (1=Main ROM, 0=Expansion ROM) |
Karaoke Studio (main cartridge with microphone and 128K main ROM) (Jul 1987) Karaoke Studio Senyou Cassette Vol. 1 (128K expansion ROM) (Oct 1987) Karaoke Studio Senyou Cassette Vol. 2 (128K expansion ROM) (Feb 1988) |
Mapper 189: MMC3 Variant |
610xh Select 32K ROM Block (D7-D0 should match A7-A0, eg. [6103h]=03h) |
Mapper 218: Nocash Single-Chip |
VA10 Effect on iNES Byte 6 UNIF "MIRR" to Name Tables Bit3.Bit0 Bit7-0 PPU.A10 Two-Screen, Vertical Mirroring 0.1 01h PPU.A11 Two-Screen, Horizontal Mirroring 0.0 00h PPU.A12 One-Screen, BLK0 1.0 02h PPU.A13 One-Screen, BLK1 1.1 03h Note: Bit 3 in Byte 6 of iNES header would be usually Four-Screen flag, but, for this mapper it is used as One-Screen flag. |
Mapper 222: Dragon Ninja |
8000h Select 8K ROM at 8000h-9FFFh A000h Select 8K ROM at A000h-BFFFh N/A Fixed 16K ROM at C000h-FFFFh (last 16K) 9000h Unknown (always E0h = Vertical Mirroring) B000h/B001h Lower/upper 4bit of 1K VROM bank at PPU 0000h-03FFh B002h/B003h Lower/upper 4bit of 1K VROM bank at PPU 0400h-07FFh C000h/C001h Lower/upper 4bit of 1K VROM bank at PPU 0800h-0BFFh C002h/C003h Lower/upper 4bit of 1K VROM bank at PPU 0C00h-0FFFh D000h/D001h Lower/upper 4bit of 1K VROM bank at PPU 1000h-13FFh D002h/D003h Lower/upper 4bit of 1K VROM bank at PPU 1400h-17FFh E000h/E001h Lower/upper 4bit of 1K VROM bank at PPU 1800h-1BFFh E002h/E003h Lower/upper 4bit of 1K VROM bank at PPU 1C00h-1FFFh F000h IRQ Counter/Stop/Set/Ack F001h IRQ Counter/Stop/Set/Ack F002h IRQ Counter/Start (incrementing approx every 120 (?) cycles) |
Mapper 225: X-in-1 |
8000h-FFFFh Memory Control (Write any data, port decoded by address lines) A14,A5-0 Select 8K VROM bank at PPU 0000h-1FFFh A14,A11-A6 Select PRG 2x16K ROM bank at 8000h-FFFFh A12 Select PRG page size (0=32K, 1=16K) 0 32K page at 8000h-FFFFh (LSB/A6 of bank number ignored) 1 16K page mirrored to 8000h-BFFFh and C000h-FFFFh A13 ?Mirroring select (0=Vertical, 1=Horizontal Mirroring) A15 Must be "1" 5800h-5FFFh 4x4bit Register File (D0-D3 data bits, addressed via A0-A1) |
Mapper 226: X-in-1 |
8000h,8E8Eh Memory Control Bit4-0 Bank Number Bit4-0 Bit5 Mode 0 Map 32K ROM at 8000h-FFFFh (bank bits 6-1 used, bit0 ignored) 1 Map the same 16K ROM bank at both 8000h-BFFFh and C000h-FFFFh Bit6 Name Table (0=Horizontal, 1=Vertical Mirroring) Bit7 Bank Number Bit5 8001h Upper Bit of bank selection (2048K carts only) Bit0 Bank Number Bit6 |
Register 1, Bit 1 - controls whether the CHR-RAM is write-protected: 0 - not write-protected 1 - write-protected |
Mapper 227: X-in-1 |
8000h-FFFFh Memory Control (Write any data, port decoded by address lines) A6-A2 Select 16K ROM at 8000h-BFFFh (X) A1 Mirroring (0=Vertical, 1=Horizontal Mirroring) A14-A13 Menu mode (00b=Menu, 11b=Other) A9 128K Mode (1=128K, 0=Other) A0 32K Mode (1=32K, 0=Other) A11-A10,A8 Always 0 A12 Usually 1 (except when initializing VRAM for game) A7 Usually 1 (except menu/contra/galaxian) |
Mapper 228: X-in-1 Homebrewn |
8000h-FFFFh Memory Control (Decoded by address AND data lines) A3-A0,D1-D0 Select 8K VROM at PPU 0000h-1FFFh A12-A7 Select 32K ROM at 8000h-FFFFh A14-A13,A6-A4,D7-D2 Not used (always zero) 5FF0h-5FF3h 4x4bit Register File (D0-D3 data bits, addressed via A0-A1) |
Mapper 229: 31-in-1 |
8000h-FFFFh Memory Control (Write any data, port decoded by address lines) A4-A0 Bank Selection, shared for PRG and VROM: Select 8K VROM bank at PPU 0000h-1FFFh Select 16K ROM bank at 8000h-BFFFh and same bank at C000h-FFFFh A selection of 01h works special, it maps 16K ROM banks 0 and 1, and bank 1 VROM, used for Super Mario which has 32K PRG ROM. A6-A5 Name Table 0 Two-Screen, Vertical Mirroring 1 Two-Screen, Horizontal Mirroring 2 Probably one-screen, used on boot 3 Probably one-screen, used in menu A14 The menu sets this bit when accessing bank 0 |
Mapper 230: X-in-1 plus Contra |
Mapper 231: 20-in-1 |
8000h-FFFFh Memory Control (Write any data, port decoded by address lines) A7-A6 Name Table Setting (0-3) 0 Probably one-screen (used by menu only) 1 Two-Screen Vertical Mirroring 2 Two-Screen Horizontal Mirroring 3 Not used A5 Always opposite of A1, ie. A5=(A0 XOR 1), probably 2nd chip-select A4-A1 Select 32K ROM bank at 8000h-FFFFh A0 Mode (0=Normal, 1=Mirror 1st half selected 32K bank to C000h-FFFFh) |
Mapper 232: 4-in-1 Quattro Camerica |
9000h Select 64K block for 8000h-FFFFh (block number in Bit4-3) C000h-Fxxxh Select 16K ROM bank at 8000h-BFFFh (within current 64K) N/A High 16K ROM bank at C000h-FFFFh (last 16K of current 64K) FFF0h,FFF1h Unknown - Write any value at proper timing (maybe lockout) |
Mapper 233: X-in-1 plus Reset |
FFFDh Reading from this address (the MSB of reset vector) destroys the current Bank selection, probably setting it to a value of FFh, at least anything different than 00h or 80h |
Mapper 234: Maxi-15 |
Registers are set by writing *or reading* certain locations. In the case of writing, the programmer would need to ensure that the written value and that put on the data bus by the program ROM do not conflict. |
FF80h-FF9Fh Configuration Register (R1) Bit7 Name Table Control (0=Vertical, 1=Horizontal Mirroring) Bit6 Page Mode ROM/VROM Size (0=32K, 1=64K) Bit5-0 Select 32K ROM/VROM bank (LSB ignored in 64K Page Mode) Bit5 is wired to /CS or /OE of the ROM chips, ie. both ROM and VROM are disabled when bit5 is set (unless additional ROMs would be connected to inverted Bit5, in larger carts). FFE8h-FFF7h Memory Banking Register (R2) Bit7 Not Used Bit6-4 Select 8K VROM at PPU 0000h-1FFFh (Bit6 not used in 32K Page mode) Bit3-1 Not Used Bit0 Select 32K ROM at 8000h-FFFFh (Bit0 not used in 32K Page mode) FFC0h-FFDFh Lockout Register (R3) Initially it is not possible to access R3. This is only possible after R1 has been set to a non-zero value. Bit7-2 Not Used Bit1 CIC RST Bit0 CIC OUT |
Mapper 240: C&E/Supertone - PRG/32K, VROM/8K |
4120h,4800h,8000h-FFFFh Memory Control Bit7-6 Not used (always zero) Bit5-4 Select 32K ROM at 8000h-FFFFh (initially any 32K bank) Bit3-0 Select 8K VROM at PPU 0000h-1FFFh |
Mapper 241: X-in-1 Education |
8000h-FFFFh Select 32K ROM at 8000h-FFFFh (initially 1st 32K bank) 5FF0h-5FFFh/Write Unknown (No info) 5FF0h-5FFFh/Read Unknown (somewhat Bit6: 1=Ready/Okay) |
Mapper 242: Waixing - PRG/32K, NT |
8000h-FFFFh Memory Control (Write any data, port decoded by address lines) A6-A3 Select 32K ROM at 8000h-FFFFh (initially 1st 32K bank) A1 Mirroring (0=Vertical, 1=Horizontal Mirroring) A7,A0 Always 1 A14-A8,A2 Always 0 |
Mapper 243: Sachen Poker - PRG/32K, VROM/8K |
4100h Index (0-7) 4101h Data for above index |
0 Unknown, always 00h 1 Unknown, always 00h 2 Bit3 of 8K VROM at PPU 0000h-1FFFh 3 Unknown, always 00h 4 Bit0 of 8K VROM at PPU 0000h-1FFFh 5 Select 32K ROM at 8000h-FFFFh 6 Bit2,1 of 8K VROM at PPU 0000h-1FFFh 7 Unknown, always 05h |
Mapper 244: C&E - PRG/32K, VROM/8K |
8000h-FFFFh Memory Control Bit7 Not used (zero) Bit6-4 Swap bits (some sort of confusion / copy protection, see below) Bit3 Set ROM or VROM bank (0=ROM, 1=VROM) Bit2-0 Select 32K ROM at 8000h-FFFFh or 8K VROM at PPU 0000h-1FFFh |
Bit4=1: XOR bank number by 03h Bit5=1: Exchange bank number Bit0,1 Bit6=1: Not used |
Bit4=1, Bit5=1, Bit6=1: XOR bank number by 07h (without further exchanges) Bit4=0, Bit5=1, Bit6=1: Not used Bit4=1: Exchange bank number Bit 0,1 (processed first) Bit5=1: Exchange bank number Bit 1,2 Bit6=1; Exchange bank number Bit 2,0 (processed last) |
Mapper 246: C&E - PRG/8K, VROM/2K, SRAM |
6000h Select 8K ROM at 8000h-9FFFh 6001h Select 8K ROM at A000h-BFFFh 6002h Select 8K ROM at C000h-DFFFh 6003h Select 8K ROM at E000h-FFFFh (initially probably last bank, or bank 3) 6004h Select 2K VROM at PPU 0000h-07FFh 6005h Select 2K VROM at PPU 0800h-0FFFh 6006h Select 2K VROM at PPU 1000h-17FFh 6007h Select 2K VROM at PPU 1800h-1FFFh |
Mapper 255: X-in-1 - (Same as Mapper 225) |
Famicom Disk System (FDS) |
FDS Memory and I/O Maps |
4020h-40FFh I/O Ports (2C33) (Disk, Sound, Timer) 6000h-DFFFh 32K WRAM E000h-FFFFh 8K FDS BIOS ROM |
0000h-1FFFh Pattern Tables - 8K VRAM |
4020h Timer IRQ Counter Reload value LSB (W) 4021h Timer IRQ Counter Reload value MSB (W) 4022h Timer IRQ Enable/Disable (W) 4023h 2C33 I/O Control Port 4024h Disk Data Write Register (W) 4025h Disk Control Register (W) 4026h Disk External Connector Output (W) 4030h Disk Status Register 0 (R) 4031h Disk Data Read Register (R) 4032h Disk Status Register 1 (R) 4033h Disk External Connector Input (R) 4040h..407Fh Sound Wave RAM - 64 x 6bit sample data (R/W) 4080h Sound Volume Envelope (W) 4082h Sound Wave RAM Sample Rate LSB (W) 4083h Sound Wave RAM Sample Rate MSB and Control (W) 4084h Sound Sweep Envelope (W) 4085h Sound Sweep Bias (W) 4086h Sound Modulation Frequency LSB (W) 4087h Sound Modulation Frequency MSB (W) 4088h Sound Modulation Table (W) 4089h Sound Wave RAM Control (W) 408Ah Sound Envelope Base Frequency (W) 4090h Sound Current Volume Gain Level (6bit) (R) 4092h Sound Current Sweep Gain Level (6bit) (R) |
FDS I/O Ports - Timer |
Reload value loaded to actual 16bit counter register on write to 4022h, and on counter underflow. Counter is decremented once per CPU clock cycle. |
Bit1 Enable (0=Stop/Acknowledge? Timer IRQ, 1=Start/Enable Timer IRQ) |
FDS I/O Ports - Disk |
Bit0 Drive Motor (0=On, 1=Off) When active (0), causes disk drive motor to stop. During this time, $4025.1 has no effect. Uh, Active=0=Stop ? Bit1 \ = Set drive head to the start of the first track. When active (0), causes disk drive motor to turn on. This bit must stay active throughout a disk transfer, otherwise $4032.1 will always return 1. When deactivated, disk drive motor stays on until disk head reaches most inner track of disk. Bit2 Disk Data Direction (0=Write, 1=Read) Bit3 Screen Mirroring (0=Vertical, 1=Horizontal Mirroring) Bit4 Enable CRC Phase (0=Read/Write Data, 1=Verify/Write CRC) Bit5 Unknown (Should be always 1) Bit6 GAP Control, Read Mode: 1=Reset CRC, and wait for end of GAP. Write Mode: 1=Reset CRC, and start writing data. 0=Write GAP (zeros) Bit7 Disk IRQs on every byte transfer (0=Disable, 1=Enable) |
Bit0 Timer IRQ Flag (0=None, 1=IRQ: Timer Underflow) Bit1 Disk IRQ Flag (0=None, 1=IRQ: Request Data Transfer via 4024h/4031h) Reset when $4024, $4031, or $4030 has been serviced. Bit4 CRC Status (0=Okay, 1=Error, Checksum at end of block not matching) Bit6 Lost Data (0=Okay, 1=Error, CPU didn't process 4024h/4031h in time) Bit7 Unknown |
Bit0 Disk Presence (0=Inserted, 1=Not inserted) Bit1 Disk Rewind Flag (0=Ready/Playback, 1=Rewind Active) Bit2 Write Protection (0=Writeable, 1=Read-only, or Disk not inserted) Bit6 Usually 1 (probably relict of recent opcode byte) |
8bit data received from / to be written to disk (least significant first). |
Bit0-6 External Connector Pins 3-9 (0=Low, 1=High/Input) Bit7 Power Good (0=Okay, 1=Battery power low) |
Bit0 Disk I/O (0=Disable, 1=Enable) Bit1 Sound (0=Disable, 1=Enable) |
FDS I/O Ports - Sound |
Bit7 Wave Write Mode (1=Stop Sound output & Allow to write to Wave RAM) Bit6-2 Not used Bit1-0 Master Volume (0-3 = 100%,66%,50%,40% = 30/30,20/30,15/30,12/30) |
Bit7-0 Lower 8 bits of the main unit's frequency (upper 4 bits in 4083h) |
Bit7 Main Unit disable (0=Enable, 1=Disable Sound Output) Bit6 Envelope disable (0=Normal, 1=Disable Volume/Sweep Envelopes) Bit5-4 Not used Bit3-0 Upper 4 bits of the main unit's frequency |
F = 1.79MHz * (Freq + Mod) / 65536 Mod = Frequency change based on the Modulation unit |
Bit7-0 Envelope Base Frequency, Fbase=1.79MHz/8/N |
Bit7 Volume Envelope Mode (0=Volume Envelope, 1=Fixed Volume) Bit6 Volume Envelope Direction (When enabled / at specified rate) 0=Decrease Volume by 1 (only if Volume>00h) 1=Increase Volume by 1 (only if Volume<20h) Bit5-0 When Bit7=1: Volume Level (0-20h=Muted-Loudest, 21h-3Fh=Same as 20h) Bit5-0 When Bit7=0: Volume Envelope Rate, F=Fbase/(N+1) |
Bit7 Sweep Envelope Disable (1=Disable) Bit6 Sweep Envelope Mode (0=Decrease, 1=Increase sweep gain) Bit5-0 When Bit7=1: Sweep Gain Bit5-0 When Bit7=0: Sweep Envelope Rate, F=Fbase/(N+1) |
Bit7 Not used Bit6-0 Sweep Bias (signed 7bit; -40h..+3Fh) |
Bit7-0 Lower 8bit of 12bit Modulation frequency |
Bit7 Modulation Enable/Disable (0=Enable, 1=Disable) Bit6-4 Not used Bit3-0 Upper 4bit of 12bit Modulation frequency |
F = 1.79MHz * ModFreq / 65536 |
Bit7-3 Not used Bit2-0 Modulation input |
Bit0 Disk I/O (0=Disable, 1=Enable) Bit1 Sound (0=Disable, 1=Enable) |
Increase/Decrease mode is determined by bit 6 of $4084 |
0:Bias=Bias+0 1:Bias=Bias+1 2:Bias=Bias+2 3:Bias=Bias+4 4:Bias=0 5:Bias=Bias-4 6:Bias=Bias-2 7:Bias=Bias-1 |
temp = Sweep_Bias * Sweep_Gain; if temp AND 0Fh then if Sweep_Bias<0 then temp=temp-10h else temp=temp+20h temp=temp/10h if temp>193 then temp -= 258; // not a typo... for some reason the wraps if temp<-64 then temp += 256; // are inconsistent Mod = Freq * temp / 64; |
Hz = NES * (Freq + Mod) / 65536 |
- Volume Envelope must be enabled (bit 7 of $4080 must be off) - Envelope Speed must be nonzero (set by $408A) - Envelope must be enabled (bit 6 of $4083 must be off) |
- Sweep Envelope must be enabled (bit 7 of $4084 must be off) - Envelope Speed must be nonzero (set by $408A) - Envelope must be enabled (bit 6 of $4083 must be off) |
- Modulation must be enabled (bit 7 of $4087 must be off) - Modulation frequency must be non-zero (set by $4086/$4087) |
- Main Unit must be enabled (bit 7 of $4083 must be off) - Main Unit Frequency must be non-zero (set by $4082/$4083) - 'Freq + Mod' must be greater than zero (see Frequency Calculation section) - Write Mode must be off (bit 7 of $4089 must be off) |
FDS BIOS Disk Format |
00h Block Type (01h) 01h-0Eh Disk ID (Must be ASCII string "*NINTENDO-HVC*") 0Fh Maker ID 10h-13h Game Name (usually 4 letter ASCII) 14h Version Number (usually 00h) 15h Side Number (00h=Side A, 01h=Side B) (00h=bootable) 16h Disk Number (00h=First, 01h=Second, etc.) (00h=bootable) 17h-18h Extra Disk ID Field 19h Highest File ID for Boot files (all files with File ID's less or equal than this value are loaded automatically on power-up) 1Ah-37h Reserved Space (30 bytes, ignored by BIOS) |
00h Block Type (02h) 01h Number of Files on this side |
00h Block Type (03h) 01h File Number (00h=First file on this side, 01h=Second, etc.) 02h File ID (used to access files by Load Files function) 03h-0Ah File Name (not used, the BIOS access files by above File ID) 0Bh-0Ch Target Address (LSB, MSB) 0Dh-0Eh File Size (LSB, MSB) 0Fh Target Area (00h=WRAM, Other=VRAM) |
00h Block Type (04h) 01h-LEN Data (LEN=File Size in File Header Block) |
00h 4 File ID ("FDS",1Ah) 04h 1 Number of Sides (usually 1 or 2; or more, eg. in Gunfight) 05h 11 Reserved (00h-filled) |
FDS BIOS Disk Functions |
RETaddr: pointer to DiskID RETaddr+2: pointer to LoadList A on return: error code Y on return: count of files actually found |
RETaddr: pointer to DiskInfo A on return: error code |
0Ah bytes Disk Header Block [0Fh..18h], manufacturer, disk name, etc. 1 byte File Number Block [01h], number of files on disk (N) N*9 bytes File Header Block [02h..0Ah], File ID and Filename, for each file 2 bytes Disk Size (MSB,LSB) |
RETaddr: pointer to DiskID RETaddr+2: pointer to FileInfo A on call: File Number (00h=First) (FFh=Append after last file) A on return: error code |
RETaddr: pointer to DiskID A on call: number to reduce current file count by A on return: error code Special error: #$31 if A is less than the disk's file count |
RETaddr: pointer to DiskID A on call: number to set file count to A on return: error code Special error: #$31 if A is less than the disk's file count |
RETaddr: pointer to DiskID A on call: number to set file count to A on return: error code |
RETaddr: pointer to DiskID A on call: number to set file count to minus 1 A on return: error code |
" NINTENDO r " " FAMILY COMPUTER TM " " " " THIS PRODUCT IS MANUFACTURED " " AND SOLD BY NINTENDO CO;LDT. " " OR BY OTHER COMPANY UNDER " " LICENSE OF NINTENDO CO;LTD.. " |
FDS BIOS Disk Errors |
00h Okay (no error) (zero flag set) 01h No disk inserted (Port 4032h, Bit0) 02h No battery/power (Port 4033h, Bit7) 03h Disk write-protected (Port 4032h, Bit2) 04h Bad Side Header [0Fh], Maker ID 05h Bad Side Header [10h..13h], Game name 06h Bad Side Header [14h], Game version 07h Bad Side Header [15h], Side number (flip the disk) 08h Bad Side Header [16h], Disk number 09h Bad Side Header [17h], Extra ID Value 1 10h Bad Side Header [18h], Extra ID Value 2 20h Bad Nintendo License String (must be loaded to PPU 2800h-28DFh on boot) 21h Bad Side Header [01h..0Eh], Disk ID (must be "*NINTENDO-HVC*") 22h Bad Side Header [00h], Block ID must be 01h 23h Bad File Number [00h], Block ID must be 02h 24h Bad File Header [00h], Block ID must be 03h 25h Bad File Data [00h], Block ID must be 04h 26h Write-Verify Error (verification of written data failed) 27h Block CRC Read Failure (Port 4030h, Bit 4) 28h Lost Data (Port 4030h, Bit 6), CPU didn't read from 4031h in time 29h Lost Data (Port 4030h, Bit 6), CPU didn't write to 4024h in time 30h Disk Full (Port 4032h, Bit 1), Disk head has reached most inner track 31h Data number of a disk doesn't match up (?) |
FDS BIOS Data Areas in WRAM |
Addr Size Expl. |
0000h 2 first 16bit parameter 0002h 2 second 16bit parameter 0004h 1 previous stack frame 0005h 1 error retry count 0006h 1 file counter 0007h 1 current block type 0008h 1 boot ID code 0009h 1 dummy read flag 000Ah 2 16bit destination address 000Ch 2 16bit transfer length count 000Eh 1 file found counter |
00F9h 1 value last written to [$4026] $FF on reset (disk ext connector) 00FAh 1 value last written to [$4025] $2E on reset (disk control) 00FBh 1 value last written to [$4016] 0'd on reset (joypad) 00FCh 1 value last written to [$2005]#2 0'd on reset (ppu scrolling) 00FDh 1 value last written to [$2005]#1 0'd on reset (ppu scrolling) 00FEh 1 value last written to [$2001] $06 on reset (ppu control) 00FFh 1 value last written to [$2000] $80 on reset (ppu control) |
0100h 1 Action on NMI (set to C0h on reset) 0101h 1 Action on IRQ (set to 80h on reset) 0102h 2 Action on Reset (AC35h after disk-boot, 5335h after warm-boot) |
DFF6h 2 Game NMI vector 1, used if [0100h]=01xxxxxxb DFF8h 2 Game NMI vector 2, used if [0100h]=10xxxxxxb DFFAh 2 Game NMI vector 3, used if [0100h]=11xxxxxxb DFFCh 2 Game Reset vector, used if [0102h]=5335h or =AC35h DFFEh 2 Game IRQ vector, used if [0101h]=11xxxxxxb |
FDS Disk Drive Operation |
1.Data ------------__________________------______------ 2.Rate ---___---___---___---___---___---___---___---___ 3.XOR ___---___------___---___---______------______--- 4.Write ___------_________------_________------------___ 5.Read ___-_____-________-_____-________-___________-__ |
// ax is used as CRC accumulator // si is the array element counter // di is a temp reg // Size is the size of the file + 2 (with the last 2 bytes as 0) // Buf points to the file data (with the 2 appended bytes) mov ax,8000h // this is the block start mark sub si,si // zero out file byte index ptr @@lop1: mov dl,byte ptr Buf[si] inc si REPT 8 shr dl,1; rcr ax,1; sbb di,di; and di,8408h; xor ax,di ENDM cmp si,Size jc @@lop1 |
VS System |
VS UniSystem --> 1-2 players (1 Monitor, 1 CPU, 1 PPU, 1 ROM-Set) VS DualSystem --> 2-4 players (2 Monitors, 2 CPUs, 2 PPUs, 2 ROM-Sets) |
VS System Controllers |
Bit0 Joypad Strobe (as usually) Bit1 VS Dualsystem: Send IRQ to other CPU (0=No, 1=IRQ) Bit2 Select 8K VROM bank at PPU 0000h-1FFFh (Mapper 99 games only) |
Bit2 Credit Service Button (0=Released, 1=Service Credit) Bit3-4 DIP Switch 1-2 (0=Off, 1=On) Bit5-6 Credit Left/Right Coin Slot (0=None, 1=Coin) (Acknowledge via 4020h) Bit7 VS Dualsystem: Master/Slave ID (0=Slave CPU, 1=Master CPU) |
Bit2-7 DIP Switch 3-8 (0=Off, 1=On) |
Bit0 Acknowledge Coin Slot Signal (0=Normal, 1=Acknowledge Coin) |
2Kbyte of shared RAM for VS Dualsystem CPU-to-CPU communications. Access, according to schematic: Owner depends on OUT-1 output from MASTER(?) CPU ;<--that is: "2J" CPU aka IRQ input from SLAVE(?) CPU (or vice-versa?) ;<--that is: "8J" CPU Typically handshake involves IRQ from Master CPU, followed by a response-IRQ from Slave CPU. |
Read NES/4016h VS/4016h NES/4017h VS/4017h 1st Button A (1) Button A (2) Button A (2) Button A (1) 2nd Button B (1) Button B (2) Button B (2) Button B (1) 3rd Select (1) Button 1 Select (2) Button 2 4th Start (1) Button 3 Start (2) Button 4 5th Up (1) Up (2) Up (2) Up (1) 6th Down (1) Down (2) Down (2) Down (1) 7th Left (1) Left (2) Left (2) Left (1) 8th Right (1) Right (2) Right (2) Right (1) |
VS System Games |
PPU Mapper Title *RP2C04-0001 MMC3+? Atari RBI Baseball RP2C04-0003 DUAL Balloon Fight (... Dualsystem only?) RP2C04-0001 DUAL Baseball (... Dualsystem only?) *RP2C04-0001 - Battle City RP2C04-0002 UNROM Castlevania RP2C04-0004 - Clu Clu Land RP2C04-0003 MMC1 Dr. Mario RC2C03B - Duck Hunt (Lightgun) (one version) RC2C03C - Duck Hunt (Lightgun) (other/same version) RP2C04-0003 - Excite Bike (instructions in demo-mode) (Nintendo) 1984 RP2C04-0004 - Excite Bike (status-bar in demo-mode) (Nintendo) 1984 RP2C04-0001 MMC3 Freedom Force (Lightgun) (1988 Sunsoft) RP2C04-0002 - Golf RC2C03B ? - Golf (Japan version?) XXX doesn't match ANY palette?? RP2C04-0003 VRC1 Goonies RP2C04-0001 VRC1 Gradius RC2C05-03 40K+16K Gumshoe (Lightgun) RP2C04-0001 - Hogan's Alley (Lightgun) RP2C04-0004 - Ice Climber (Unisystem) RP2C04-0004 DUAL Ice Climber (Dualsystem) (JAPAN) "splitscreen-vertical" RP2C04-0002 - Ladies Golf RP2C04-0002 - Mach Rider (Endurance Course version) RP2C04-0001 - Mach Rider (Fighting Course version) (Japan version) RC2C03B DUAL Mahjang (... Dualsystem only?) RC2C05-02 - Mighty Bomb Jack (Japan) RC2C05-01 - Ninja Jajamaru Kun (Japan) RP2C04-0001 - Pinball RC2C03B - Pinball (Japan) RP2C04-0001 Sunsoft3 Platoon RP2C04-0002 DUMMY Raid on Bungeling Bay (Japan) RP2C04-0002 - Slalom RP2C04-0002 - Soccer (japan version) RP2C04-0003 - Soccer (other version) *RC2C03B - Star Luster RP2C04-0004 - Super Mario Bros. RP2C04-0004 - Super Mario Bros. (alternate version) RP2C04-0004 - Super Mario Bros. (Super Skater/Skate Kids CHR-ROM hack) *RP2C04-0001 MMC3 Super Sky Kid *RP2C04-0001 MMC3+? Super Xevious RC2C03B DUAL Tennis (... Dualsystem only?) *RP2C04-0001 - Tetris (by Tengen) *RP2C04-0003 MMC3+? TKO Boxing RC2C05-04 UNROM Top Gun RP2C04-0002 DUAL Wrecking Crew (... Dualsystem only?) RC2C05-05 ? (this PPU is used by which game ???) (does it exist?) RP2C03B ? (this PPU is used by Playchoice 10; not by VS System) RP2C03G ? (this PPU is used by which game ???) (does it exist?) |
- Mapper 99 (standard VS System mapper; games without daughterboard) 40K+16K Mapper 99 (with some extension to access 40K PRG-ROM) DUAL Mapper 99 (Dualsystem, requires two ROM-sets, two CPUs/PPUs etc.) DUMMY Mapper 99 (single-player, but requires Dummy PRG-ROM on second CPU) MMC1 Mapper 1 (MMC1, or actually some pre-MMC1 74xxx-logic) MMC3 Mapper 4 (MMC3, or actually some third-party pre-MMC3 chip) MMC3+? Mapper 4 (plus protection chip at 5Exxh or 5xxxh) Sunsoft3 Mapper 67 (Sunsoft-3 chip) UNROM Mapper 2 (UNROM) VRC1 Mapper 75 (Konami VRC1 chip) |
RC2C03B (standard palette) ;\standard palette RC2C03C (standard palette) ;/ RC2C05-01 (with ID ([2002h] AND xxh)=?) ;\ RC2C05-02 (with ID ([2002h] AND 3Fh)=3Dh) ; standard palette, but with RC2C05-03 (with ID ([2002h] AND 1Fh)=1Ch) ; swapped port 2000h/2001h, RC2C05-04 (with ID ([2002h] AND 1Fh)=1Bh) ; and Chip ID in port 2002h RC2C05-05 (with ID ([2002h] AND xxh)=?) ;/ RP2C04-0001 (special palette 1) ;\ RP2C04-0002 (special palette 2) ; special palettes RP2C04-0003 (special palette 3) ; RP2C04-0004 (special palette 4) ;/ |
RP2C03B (standard palette) ;<-- Playchoice 10 ;\standard palette, but not RP2C03G (standard palette) ;<-- used where? ;/actually VS System related |
Babel no Tou (by Namco, 1986) Family Boxing (by Namco/Wood Place, 1987; japanese "TKO Boxing") Family Stadium '87 (by Namco, 1987; sequel to RBI Baseball) Family Stadium '88 (by Namco, 1988; sequel to RBI Baseball) Family Tennis (by Namco, 1987) Head to Head Baseball (ever finished/released?, by Nintendo, 1986) Lionex (prototype by Sunsoft, 1987) Madura no Tsubasa (prototype by Sunsoft, 1987) Predators (prototype by Williams, 1984) Pro Yakyuu Family Stadium (by Namco, 1986; Japan version of RBI Baseball) Quest of Ki (by Namco/Game Studio, 1988) Super Chinese (by Namco/Culture Brain, 1988) Toukaidou 53tsugi (prototype by Sunsoft, 1985) Trojan (by Capcom, 1987) Urban Champion (1984) Volleyball (1986) Walkure no Bouken (by Namco, 1986) Wild Gunman (1984, light gun game) |
VS System PPUs and Palettes |
RC2C05-01 (with ID ([2002h] AND xxh)=?) ;\ RC2C05-02 (with ID ([2002h] AND 3Fh)=3Dh) ; standard palette, but with RC2C05-03 (with ID ([2002h] AND 1Fh)=1Ch) ; swapped port 2000h/2001h, RC2C05-04 (with ID ([2002h] AND 1Fh)=1Bh) ; and Chip ID in port 2002h RC2C05-05 (with ID ([2002h] AND xxh)=?) ;/ |
755,637,700,447,044,120,222,704,777,333,750,503,403,660,320,777 357,653,310,360,467,657,764,027,760,276,000,200,666,444,707,014 003,567,757,070,077,022,053,507,000,420,747,510,407,006,740,000 000,140,555,031,572,326,770,630,020,036,040,111,773,737,430,473 |
000,750,430,572,473,737,044,567,700,407,773,747,777,637,467,040 020,357,510,666,053,360,200,447,222,707,003,276,657,320,000,326 403,764,740,757,036,310,555,006,507,760,333,120,027,000,660,777 653,111,070,630,022,014,704,140,000,077,420,770,755,503,031,444 |
507,737,473,555,040,777,567,120,014,000,764,320,704,666,653,467 447,044,503,027,140,430,630,053,333,326,000,006,700,510,747,755 637,020,003,770,111,750,740,777,360,403,357,707,036,444,000,310 077,200,572,757,420,070,660,222,031,000,657,773,407,276,760,022 |
430,326,044,660,000,755,014,630,555,310,070,003,764,770,040,572 737,200,027,747,000,222,510,740,653,053,447,140,403,000,473,357 503,031,420,006,407,507,333,704,022,666,036,020,111,773,444,707 757,777,320,700,760,276,777,467,000,750,637,567,360,657,077,120 |
333,014,006,326,403,503,510,420,320,120,031,040,022,000,000,000 555,036,027,407,507,704,700,630,430,140,040,053,044,000,000,000 777,357,447,637,707,737,740,750,660,360,070,276,077,000,000,000 777,567,657,757,747,755,764,772,773,572,473,276,467,000,000,000 |
VS System Protections |
[5E00h].Read ;-reset data stream (returns unknown/dummy value) [5E01h].Read ;-return data stream (returns FFh,BFh,B7h,etc.) |
FF,BF,B7,97,97,17,57,4F,6F,6B,EB,A9,B1,90,94,14 ;1st..16th read 56,4E,6F,6B,EB,A9,B1,90,D4,5C,3E,26,87,83,13,51 ;17th..32th read |
40,08,20,00,80 ;XORed after 1st..5th read 40,18,20,04,80 ;XORed after 6th..10th read 42,18,21,04,80 ;XORed after 11th..15th read 42,18,21,04,80 ;etc. 42,18,21,44,88 62,18,A1,04,90 42 |
[5E00h].Read ;-reset data stream (returns unknown/dummy value) [5E01h].Read ;-return data stream (returns whatever...) |
Write: [5098h]=38h, [5132h]=9Eh, [5263h]=22h, [5300h]=90h Verify: [54FFh]=05h, [5678h]=01h, [578Fh]=89h, [5567h]=37h Write: [5056h]=44h, [51C8h]=72h, [526Ah]=9Ah, [5300h]=FEh Verify: [54FFh]=05h, [5678h]=00h, [578Fh]=D1h, [5567h]=3Eh |
05h, 01h, 89h, 37h, 05h, 00h, D1h, 3Eh |
Nintendo Playchoice 10 |
PC10 Memory Map and I/O Ports |
0000h-7FFFh 32K BIOS ROM Area (usually 16K chip, mirrored within 32K area) 8000h-87FFh 2K Work RAM 8800h-8BFFh 1K Lower 1K of Battery RAM 8C00h-8FFFh 1K Upper 1K of Battery RAM (when disabled: mirror of Lower 1K) 9000h-97FFh 2K Video RAM (write only, and disabled during video output) 9800h-BFFFh 10K Unused (open bus) C000h-DFFFh 8K Cartridge BIOS (resides on each game cartridge) E000h-FFFFh 8K Memory-mapped PROM I/O Ports |
00h Button/Status bit 0: Channel select button (aka Button 1) (0=Released, 1=Pressed) bit 1: Enter button (aka Button 2) (0=Released, 1=Pressed) bit 2: Dual-Monitor with Reset button (0=Released, 1=Pressed) Single-Monitor with Reset button (0=Pressed, 1=Released) Single-Monitor without Reset button (Always 0=No Reset Button) (Presence of the single monitor reset button works as so: The button may not be held down during power-up (obviously). The freeplay mode DIP-switch setting and R99 shunt-lead removal are accidentally causing the button-detection to be skipped. Bugfix: change the two jumps to address 0378h to address 036Bh) bit 3: Vblank NMI Occurred on NES Side (0=Yes, 1=No) bit 4: <zero> unknown... is USED ! "R99 0 ohm Shunt Lead to GND" ? (allow to insert more coins for PRIME TIME ...?) bit 5: Coin 2 button (0=None, 1=Coin Insterted) bit 6: Service button (0=Released, 1=Pressed) bit 7: Coin 1 button (0=None, 1=Coin Insterted) 01h DIP-switch 1, Bits 0-7 (A..H) (0=Off, 1=On) bit 0..5: (A..F) Coinage (credits per left/right coin slot) bit 6: (G) Sound enable for Attraction/Demo mode (0=Off, 1=On) bit 7: (H) Automatic Selftest upon Power-Up (0=Off, 1=On) 02h DIP-switch 2, Bits 0-7 (I..P) (0=Off, 1=On) bit 0..5: (I..N) Timer Speed (credit decrease rate) bit 6: (O) Divide all coinage settings by 2 (see A..F) bit 7: (P) Freeplay Mode (only when bit0..6 = zero) 03h Reading from this address sets Bit3 of read Port 00h back to 1=False |
00h VRAM Access (0=by Z80 CPU, 1=by Video circuit) 01h Game Controls (0=Disable, 1=Enable) 02h PPU RP2C03B Display output (0=Disable, 1=Enable) 03h APU N2A03 Sound output (0=Disable, 1=Enable) 04h CPU N2A03 Reset (0=Reset, 1=Run) 05h CPU N2A03 Stop (0=Stop, 1=Run) 06h Display Output Select (0=Z80/Video circuit, 1=NES/RP2C03B PPU) (Only on single monitor version) 07h Unknown...? is USED ! (even in single-monitor bios!) or, 06h,07h = both N/C 08h Z80 NMI Control (0=Disable, 1=Enable) 09h Watchdog Control (0=Enable, 1=Disable) 0Ah PPU RP2C03B Reset (0=Reset PPU, 1=Run PPU) 0Bh Game Channel Select Bit0 ;\Slot Select (0-9) (0Ah..0Fh=Open Bus) 0Ch Game Channel Select Bit1 ; affects NES CPU/PPU memory, 0Dh Game Channel Select Bit2 ; and Z80 INST-ROM and PROM 0Eh Game Channel Select Bit3 ;/ 0Fh Upper 1K of Battery RAM (0=Disable, 1=Enable) |
10h 7-Segment LED 4th Digit (LSB) ;\Four 74HC4511 BCD-to-7-segment drivers, 11h 7-Segment LED 3rd Digit ; and four GL-8E040 7-segment LED displays 12h 7-Segment LED 2nd Digit ; (bit0-3:00h..09h="0..9", 0Ah..0Fh=Blank) 13h 7-Segment LED 1st Digit (MSB) ;/ |
10h..1Fh Mirrors of Port 00h..0Fh (Dual-Monitor version only) 14h..1Fh Mirrors of Port 10h..13h (Single-Monitor version only) 20h..FFFFh Mirrors of Port 00h..1Fh (all versions) |
7-5 Unused 4 PROM Test Mode (0=Low=6bit Address, 1=High=7bit Address) 3 PROM Clock (0=Low, 1=High) ;increment address on 1-to-0 transition 2-1 Unused 0 PROM Address Reset (0=High=Reset to zero, 1=Low=No Change) |
7-5 Always set (MSBs of RST Opcode) 4 PROM Counter Out (0=High=One, 1=Low=Zero) ;PROM Address Bit5 ;\both 3 PROM Data Out (0=High=One, 1=Low=Zero) ;PROM Data ;/inverted 2-0 Always set (LSBs of RST Opcode) |
DATA (when TEST=0): a, b, c, d, e, f, g, h, a, b, c, d, e, f, g, h DATA (when TEST=1): a, b, c, d, e, f, g, h, i, i, 00,00,i, i, 00,00 COUNTER OUT (always): 00,00,00,00,FF,FF,FF,FF,00,00,00,00,FF,FF,FF,FF (the PC10 mainboard inverts that signals, so Z80 will see inverse of above) |
PC10 Video Circuit |
Bit0-10 Character number (000h..7FFh) (usually only 000h..3FFh installed) Bit11-15 Palette number (00h..1Fh) |
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ.'!-"",: abcdefghijkl+ ' ;000-03F '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ.'!-"",:mnopq?()/=+ ' ;040-07F 'abcdefghijklABCmEnoHIpqLMNOPrRSTUstuYv!wxyzr' ;080-0BF 'stuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ,-!'() ' ;0C0-0FF '0 1 2 3 4 5 6 7 8 9 TIMEInsertCoin ' ;100-13F ' Tim NearUp FillUpTimeAnd ' ;140-17F '' ;180-1BF '' ;1C0-1FF 'ChannelSelectEnter.ButtonsGameTart ' ;200-23F ' ' ;240-27F ' ' ;280-2BF ' ' ;2C0-2FF ' ' ;300-33F 'cntrlTM' ;340-37F '' ;380-3BF 'c1986nintendo ' ;3C0-3FF |
Pal <-------- Color 0..7 ---------> Pal <-------- Color 0..7 ---------> 00: FFF,000,000,000,000,000,000,000 10: FAF,0BF,000,027,00B,FAF,FA9,F08 01: 94D,FFF,000,00B,024,1FF,AFF,FD8 11: FAF,A5D,303,707,00B,FAF,307,FFF 02: F9F,03F,FAF,000,000,000,FFF,FFF 12: 000,000,000,000,000,000,000,000 03: FFF,000,FFF,9FF,06F,0FF,047,F40 13: 000,000,000,000,000,000,000,000 04: 048,9FF,000,000,000,F95,FFA,FFF 14: 000,048,000,000,000,F9F,72F,FFF 05: F9F,0FF,F0B,00A,000,000,FFF,FFF 15: 000,000,000,000,000,000,000,000 06: F9F,88F,0FF,000,000,000,FFF,FFF 16: 000,000,000,000,000,000,000,000 07: F9F,11F,5FF,000,000,000,FFF,FFF 17: 000,FAF,000,000,000,FCF,039,FFF 08: 000,000,000,000,000,000,000,000 18: F8F,000,00B,000,000,036,FFF,FFF 09: 000,000,000,000,000,000,000,000 19: FAB,2CF,F07,029,111,FFF,4F1,F93 0A: 000,000,000,000,000,000,000,000 1A: 000,000,000,000,000,000,000,000 0B: 000,000,000,000,000,000,000,000 1B: FAF,000,FF5,FF0,F40,5AF,024,0FF 0C: 000,000,000,000,000,000,000,000 1C: FAF,0FF,046,6D9,008,FF4,F30,300 0D: 000,000,000,000,000,000,000,000 1D: FAF,0F9,F7F,838,415,7BE,27D,048 0E: 000,000,000,000,000,000,000,000 1E: FAF,0FF,000,02F,F4F,5DF,888,766 0F: 000,000,000,000,000,000,000,000 1F: F9F,007,000,00F,0FF,027,FFF,FFF |
Charset0: 0123456789.'!-",:+?()/=ABCDEFGHIJKLMNOPQRSTUVWXYZabc..xyz Charset1: 0123456789 '!- , () ABCDEFGHIJKLMNOPQRSTUVWXYZabc..xyz Charset2: 0123456789.'!-",:+ ABCDEFGHIJKLMNOPQRSTUVWXYZ Charset3: ! ABC E HI LMNOP RSTU Y |
Palette: 10h 11h 1Bh 1Ch 1Dh 1Eh Charset0: White Mint D.Blue Orange2 D.Green White Charset1: Orange L.Green Blue Magenta P.Green Orange3 Charset2: Red M.Green White Red Pink Red Charset3: Yellow Yellow - - - - |
Resolution 32x28 tiles of 8x8 pix each (=256x224 pixels) Dotclk = 5.040MHz (X2 oscillator, 20.160MHz, divided by 4) Dots per line = 327 total dots (256 visible dots, plus 71 h-blank dots) Lines per frame = 256 total lines (224 visible lines, plus 32 v-blank lines) VBlank at Y=F0h..0Fh (when V5=1, V6=1, V7=1, latched at raising V4) Vsync at Y=F8h..FBh (when Vblank=1, V4=1, V3=1, V2=0) Hsync when HBlank=1, H1=1, H2=0 Screen Border Color during H/V-Blanking is Color 0 of Palette 0 (Black) Frame Rate = 60.20642202Hz = 5.040MHz / 256 Lines / 327 Dots Z80 NMI (if enabled) is generated on begin of Z80 Circuit's Vblank (Y=F0h) |
_ _ _ _ _ _ _ | | | _| _| |_| |_ |_ | |_| |_| |_|. |. |_. _|. |. _|. |_|. |. |_|. |. |
PC10 Title/Instructions (INST ROM) |
C000h 16bit ptr to "Data" for 40h-byte Area (passed on stack to C0FFh) C001h 8bit value (initial chksum value) C0FEh 16bit ptr to rst 38h handler (not used by BIOS) overlaps below C0FFh! C0FFh code: rst 00h handler when I<>00h (get_40h_byte_area_function) C3C3h code: Opcode E9h (JP HL) C784h 16bit ptr to rst 30h handler (not used by BIOS) C9BEh code: wait_1_frame function XXX the BIOS NMI handler does occassionally remap a different slot while the mainprogram is executing the C9BEh function, so, the C9BEh stuff must be identical (or very similar) in all INST-ROMs C9C9h code: Opcode C9h (RET) D000h homebrew title string (used by the gamehacker's homebrew BIOS) D0FEh 16bit ptr to rst 28h handler (not used by BIOS) overlaps below D0FFh! D0FFh code: rst 10h handler (not used by BIOS, used only by INST ROM) D3D3h 16bit ptr to rst 20h handler (not used by BIOS) D784h 16bit ptr to rst 18h handler (RET P, LD HL,[80E3], LD [HL],00, RET) DFFFh 8bit value (can be used as final chksum adjustment byte) |
00h 1 GameID (must be unique number for Bookkeeping) (or 00h=Empty Slot) 01h 2 16bit ptr to 16bit ptr to Token code (demo_duration_function) 03h 2 16bit ptr to 16bit ptr to Z80 code (draw_instruction_function) 05h 1 Decryption Offset (to be subtracted from bytes at [05h..1Ch]) 06h 16h Unknown/Unused (eleven words in range C000h..FFFFh or so?) 1Ch 1 Opcode E9h (JP HL) 1Dh 3 Zerofilled (overwritten by leading Slot number for Title string) 20h 18h Title (18h bytes) (space, title, space, dotted-line, player symbols) 38h 8 Zerofilled (overwritten by variables) |
00h..2Bh 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ.'!-"",: 3Ch + 3Eh Dotted line 3Fh Space 3Dh,F9h Lightgun Symbol FBh..FEh Two Player Symbol ("@/@@") |
3E,3F,3F,3F,3F Normal single-player game (eg. 1942, Castlevania, Metroid) 3E,FB,FC,FD,FE Two-player game (eg. Balloon, Contra) 3D,F9,3F,3F,3F Lightgun game (eg. Hogan) |
Token Param(s) Function 00h..0Fh - sleep_1_frame 10h..1Fh - mark_finished (to be followed by token F0h) 20h..2Fh Index,BaseLsb,BaseMsb jump 30h..3Fh Index,BaseLsb,BaseMsb jump_if_user_is_not_interested 40h..4Fh Index,BaseLsb,BaseMsb jump_if_user_is_interested 50h..7Fh NNh (max 0Fh else bugs) sleep_n_seconds (aka 64-frame units) 80h..8Fh NNh sleep_n_frames 80h..8Fh 02h jump_if_single_monitor 90h..FFh - terminate (to be preceeded by token 10h) |
PC10 NES-Side |
PC10 Games and Cartridge PCBs |
PCH1-01-ROM Mapper 0 (NROM) PCH1-01-ROM-A Mapper 3 (CNROM - VROM/8K) PCH1-01-ROM-B Mapper 2 (UNROM - PRG/16K) PCH1-01-ROM-C Mapper 87 (Jaleco/Konami 16K VROM - VROM/8K) PCH1-01-ROM-D Mapper 1 (MMC1 with VRAM) PCH1-01-ROM-E Mapper 9 (MMC2) (...plus battery ??) PCH1-01-ROM-F Mapper 1 (MMC1 with VROM) PCH1-01-ROM-G Mapper 4 (MMC3 xxx) PCH1-01-ROM-H Mapper 119 (MMC3 TQROM) PCH1-01-ROM-I Mapper 7 (AOROM - PRG/32K, Name Table Select) PCH1-01-ROM-J N/A ? PCH1-01-ROM-K Mapper 1 (MMC1 with VRAM... plus battery ??) |
PCH1-02-ROM 1942 (1986/1985) Capcom PCH1-01-ROM Balloon Fight (1985/1986) Nintendo PCH1-01-ROM Baseball (1985/1984) Nintendo PCH1-02-ROM-F Baseball Stars (1989/1986) SNK PCH1-01-ROM-I Captain Skyhawk (1990/1989) Milton Bradley PCH1-02-ROM-B Castlevania (1987) Konami PCH1-02-ROM-F Chip 'n Dale Rescue Rangers (1990) Capcom PCH1-02-ROM-B Contra (1988) Konami PCH1-01-ROM-F Double Dragon (1988) Technos PCH1-02-ROM-B Double Dribble (1987) Konami PCH1-02-ROM-F Dr. Mario (1990) Nintendo PCH1-01-ROM Duck Hunt (1985) Nintendo PCH1-01-ROM Excitebike (1985) Nintendo PCH1-01-ROM-F Fester's Quest (1989) Sunsoft PCH1-01-ROM-G Gauntlet (1985) Atari/Tengen PCH1-01-ROM Golf (1985) Nintendo PCH1-01-ROM-C Goonies, The (1986) Konami PCH1-01-ROM-A Gradius (1986) Konami (said to exist in two PRG-ROM versions) PCH1-01-ROM Hogan's Alley (1985) Nintendo PCH1-02-ROM Kung Fu (1985) Irem CUSTOM Magic Floor (2012) nocash (homebrew) PCH1-01-ROM Mario Bros. (1984/1986) Nintendo PCH1-01-ROM-K Mario's Open Golf (1991) Nintendo PCH1-04-ROM-G Mega Man 3 (1990) Capcom PCH1-01-ROM-D Metroid (1986) Nintendo PCH1-01-ROM-E Mike Tyson's Punch-Out!! (1987) Nintendo PCH1-01-ROM-F Ninja Gaiden (1989) Tecmo PCH1-03-ROM-G Ninja Gaiden II: The Dark Sword of Chaos (1990) Tecmo PCH1-03-ROM-G Ninja Gaiden III: The Ancient Ship of Doom (1991) Tecmo PCH1-02-ROM-G Nintendo World Cup (Soccer) (1990) Technos PCH1-01-ROM-H Pinbot (1990/1988) Rare PCH1-02-ROM-G Power Blade (1991) Taito PCH1-02-ROM-B Pro Wrestling (1987/1986) Nintendo PCH1-02-ROM-D Rad Racer (1987) Square PCH1-02-ROM-G Rad Racer II (1990) Square PCH1-01-ROM-F R.C. Pro-Am (1988/1987) Rare PCH1-02-ROM-G Rockin' Kats (1991) Atlus PCH1-01-ROM-B Rush'n Attack (1987) Konami PCH1-01-ROM-B Rygar (1987) Tecmo PCH1-01-ROM-I Solar Jetman: Hunt for the Golden War(p)ship (1990) Rare PCH1-02-ROM-G Super C (1990) Konami PCH1-02-ROM Super Mario Bros. (1985) Nintendo PCH1-01-ROM-G Super Mario Bros. 2 (1988) Nintendo PCH1-01-ROM-G Super Mario Bros. 3 (1990) Nintendo PCH1-01-ROM-F Tecmo Bowl (1989) Tecmo Inc. PCH1-01-ROM-F Teenage Mutant Ninja Turtles (1989) Konami PCH1-03-ROM-G Teenage Mutant Ninja Turtles II: The Arcade Game (1990) Konami PCH1-01-ROM Tennis (1985) Nintendo PCH1-01-ROM-A Track & Field (1987) Konami PCH1-01-ROM-B Trojan (1987/1986) Capcom PCH1-01-ROM Volleyball (1987/1986) Nintendo PCH1-01-ROM Wild Gunman (1985) Nintendo PCH1-02-ROM-F Yo! Noid (1990) Capcom |
(unseen) Goonies II, The (19xx) Konami (unseen) RBI Baseball (1987) Atari/Tengen (unseen) Shatterhand (1991) Jaleco |
PC10 Cabinet and BIOS Versions |
PCH1-C.8T Dual-Monitor Version (CRC32=D52FA07Ah) (16Kbytes) PCK1-C.8T Single-Monitor Version (CRC32=503EE8B1h) (16Kbytes) |
0BE8CEB4 |
Oliver Achten's BIOS v0.1 (2002) (CRC32=FB96DE76h) (8Kbytes) gamehacker's BIOS v1.0 (CRC32=18B4E0B5h) (16Kbytes) gamehacker's BIOS v1.1 (CRC32=80BD20EFh) (16Kbytes) |
PC10 Pin-Outs |
A1 - B1 PROM.RESET C1 Z80./INST.ROM.SEL A2 - B2 PROM.CLOCK C2 Z80.DD7 A3 - B3 PROM.TEST C3 Z80.DD6 A4 - B4 Z80.AD7 C4 Z80.DD5 A5 - B5 Z80.AD6 C5 Z80.DD4 A6 - B6 Z80.AD5 C6 Z80.DD3 A7 Z80.AD11 B7 Z80.AD4 C7 Z80.DD2 A8 Z80.AD10 B8 Z80.AD3 C8 Z80.DD1 A9 Z80.AD9 B9 Z80.AD2 C9 Z80.DD0 A10 Z80.AD8 B10 Z80.AD1 C10 Z80.AD12 A11 PROM.ADDR5 B11 Z80.AD0 C11 Z80./MREQ.RD A12 PROM.DATA B12 PPU./PA13 C12 PPU./VRAMCS A13 PPU.PA8 B13 PPU.PD7 C13 PPU.VRAMA10 A14 PPU.PA9 B14 PPU.PD6 C14 PPU.PA7 A15 PPU.PA10 B15 PPU.PD5 C15 PPU.PA6 A16 PPU.PA11 B16 PPU.PD4 C16 PPU.PA5 A17 PPU.PA12 B17 PPU.PD3 C17 PPU.PA4 A18 PPU.PA13 B18 PPU.PD2 C18 PPU.PA3 A19 PPU./WE B19 PPU.PD1 C19 PPU.PA2 A20 PPU./RD B20 PPU.PD0 C20 PPU.PA1 A21 NES.PHI2 B21 NES./ROM.SEL C21 PPU.PA0 A22 NES.A8 B22 NES.R/W C22 NES./IRQ (see note) A23 NES.A9 B23 NES.D7 C23 NES.A0 A24 NES.A10 B24 NES.D6 C24 NES.A1 A25 NES.A11 B25 NES.D5 C25 NES.A2 A26 NES.A12 B26 NES.D4 C26 NES.A3 A27 NES.A13 B27 NES.D3 C27 NES.A4 A28 NES.A14 B28 NES.D2 C28 NES.A5 A29 /CH1..10 B29 NES.D1 C29 NES.A6 A30 SOUND B30 NES.D0 C30 NES.A7 A31 VCC B31 VCC C31 VCC A32 GND B32 GND C32 GND |
.----._.----. /chsel 1| /G1 Vcc |16 VCC (Conn) Chr A13 2| 1A1 /G2 |15 /chsel +5 pullup 3| 1Y1 2A1 |14 CHR /A13 (PC10 Connector) (Conn) PRG /CE 4| 1A2 2Y1 |13 CIRAM /CE (PC10 Connector) +5 pullup 5| 1Y2 2A2 |12 /CSel INST ROM (PC10 Conn) (Brd) CIRAM A10 6| 1A3 2Y2 |11 Pin 20 U4 (Conn)CIRAM A10 7| 1Y3 2A3 |10 N/C GND 8| GND 2Y3 | 9 N/C '-----------' |
1 /MRED (Main Screen / NES Picture) 2 /MGRN 3 /MBLUE 4 MVGND 5 /SRED (Sub Screen / Z80 Picture) 6 /SGRN 7 /SBLU 8 SVGND 9 /SSYNC 10 /MSYNC 11 GND 12 GND 13 GND 14 GND 15 +5V 16 +5V 17 +5V 18 +5V 19 ? 20 ? as 19 21 ? 22 ? as 21 23 +24V 24 Service 25 ? ;schematic: Counter 2 26 Counter1 27 ? 28 ? 29 ? 30 ? 31 ? via jumper to 26 ;schematic: Coin 2 32 Coin1 33 2.B Button 34 2.A Button 35 ? to GND 36 2.Right 37 ? to GND 38 2.Left 39 ? to GND 40 2.Up 41 ? to GND 42 2.Down 43 ? to GND 44 GameSelect 45 ? to GND 46 ? 47 ? NC 48 Reset 49 ? NC 50 Start 51 SSound (shortcut with MSound) 52 MSound (shortcut with SSound) 53 ? 54 GND (Sound) 55 GND 56 GND |
1 1.Right 2 1.Left 3 1.Down 4 1.Up 5 GND 6 ? to 4016h.Bit3 7 1.B Button 8 1.A Button 9 GND 10 ? to 4016h.Bit4 (INP0.D4) 11 CH.Select 12 Enter 13 GND 14 GND 15 ? 16 GND 17 GunTrigger 18 GunHit 19 +5V 20 +5V |
Parts Side | Solder Side GND | A/19 | 1 | GND LED00-DD3 | B/20 | 2 | 2P Right LED01-DD2 | C/21 | 3 | 2P Left LED02-DD1 | D/22 | 4 | 2P Up LED03-DD0 | E/23 | 5 | 2P Down +5V | F/24 | 6 | 2P ButtonA +5V | H/25 | 7 | 2P ButtonB LED04-AD4 | J/26 | 8 | Button1/Channel Select LED05-AD1 | K/27 | 9 | Button3/Game Select LED06-AD0 | L/28 | 10| Button2/Channel Enter LED07-/IOWR | M/29 | 11| Button4/Game Start | N/30 | 12| 1P Right | P/31 | 13| 1P Left +5V | R/32 | 14| 1P Up | S/33 | 15| 1P Down | T/34 | 16| 1P ButtonA ResetButton(if any?) | U/35 | 17| 1P ButtonB GND | V/36 | 18| GND |
Parts Side | Solder Side ----------------------------+------------------------------- GND | A/23 | 1 | GND GND | B/24 | 2 | GND +5V | C/25 | 3 | +5V +5V | D/26 | 4 | +5V +12V | E/27 | 5 | +12V | F/28 | 6 | | H/29 | 7 | Coin Switch #1 | J/30 | 8 | Coin Switch #2 (if any?) | K/31 | 9 | Video Red (inv) | L/32 | 10| Video Green (inv) GND | M/33 | 11| GND | N/34 | 12| Video Blue (inv) | P/35 | 13| Video Sync | R/36 | 14| | S/37 | 15| -5V (or +12V?) | T/38 | 16| -5V (or +12V?) (?) | U/39 | 17| (?) (or COUNTER?) | V/40 | 18| | W/41 | 19| (?) (or SERVICE Button?) | X/42 | 20| Audio (no amp) GND | Y/43 | 21| GND GND | Z/44 | 22| GND ------------------------------------------------------ Note: Connect Video Ground and Audio Ground to GND Video color signals need to be inverted for regular Jamma Audio signal needs to be amplified for regular Jamma |
Z80 CPU Specifications |
Z80 Register Set |
16bit Hi Lo Name/Function --------------------------------------- AF A - Accumulator & Flags BC B C BC DE D E DE HL H L HL AF' - - Second AF BC' - - Second BC DE' - - Second DE HL' - - Second HL IX IXH IXL Index register 1 IY IYH IYL Index register 2 SP - - Stack Pointer PC - - Program Counter/Pointer - I R Interrupt & Refresh |
Z80 Flags |
Bit Name Set Clr Expl. 0 C C NC Carry Flag 1 N - - Add/Sub-Flag (BCD) 2 P/V PE PO Parity/Overflow-Flag 3 - - - Undocumented 4 H - - Half-Carry Flag (BCD) 5 - - - Undocumented 6 Z Z NZ Zero-Flag 7 S M P Sign-Flag |
Z80 Instruction Format |
r 8bit register A,B,C,D,E,H,L rr 16bit register BC, DE, HL/IX/IY, AF/SP (as described) i 8bit register A,B,C,D,E,IXH/IYH,IXL/IYL ii 16bit register IX,IY n 8bit immediate 00-FFh (unless described else) nn 16bit immediate 0000-FFFFh d 8bit signed offset -128..+127 f flag condition nz,z,nc,c AND/OR po,pe,p,m (as described) (..) 16bit pointer to byte/word in memory |
s Indicates Signed result z Indicates Zero h Indicates Halfcarry o Indicates Overflow p Indicates Parity c Indicates Carry - Flag is not affected 0 Flag is cleared 1 Flag is set x Flag is destroyed (unspecified) i State of IFF2 e Indicates BC<>0 for LDX(R) and CPX(R), or B=0 for INX(R) and OUTX(R) |
Z80 Load Commands |
Instruction Opcode Cycles Flags Notes ld r,r xx 4 ------ r=r ld i,i pD xx 8 ------ i=i ld r,n xx nn 7 ------ r=n ld i,n pD xx nn 11 ------ i=n ld r,(HL) xx 7 ------ r=(HL) ld r,(ii+d) pD xx dd 19 ------ r=(ii+d) ld (HL),r 7x 7 ------ (HL)=r ld (ii+d),r pD 7x dd 19 ------ ld (HL),n 36 nn 10 ------ ld (ii+d),n pD 36 dd nn 19 ------ ld A,(BC) 0A 7 ------ ld A,(DE) 1A 7 ------ ld A,(nn) 3A nn nn 13 ------ ld (BC),A 02 7 ------ ld (DE),A 12 7 ------ ld (nn),A 32 nn nn 13 ------ ld A,I ED 57 9 sz0i0- A=I ;Interrupt Register ld A,R ED 5F 9 sz0i0- A=R ;Refresh Register ld I,A ED 47 9 ------ ld R,A ED 4F 9 ------ |
Instruction Opcode Cycles Flags Notes ld rr,nn x1 nn nn 10 ------ rr=nn ;rr may be BC,DE,HL or SP ld ii,nn pD 21 nn nn 13 ------ ii=nn ld HL,(nn) 2A nn nn 16 ------ HL=(nn) ld ii,(nn) pD 2A nn nn 20 ------ ii=(nn) ld rr,(nn) ED xB nn nn 20 ------ rr=(nn) ;rr may be BC,DE,HL or SP ld (nn),HL 22 nn nn 16 ------ (nn)=HL ld (nn),ii pD 22 nn nn 20 ------ (nn)=ii ld (nn),rr ED x3 nn nn 20 ------ (nn)=rr ;rr may be BC,DE,HL or SP ld SP,HL F9 6 ------ SP=HL ld SP,ii pD F9 10 ------ SP=ii push rr x5 11 ------ SP=SP-2, (SP)=rr ;rr may be BC,DE,HL,AF push ii pD E5 15 ------ SP=SP-2, (SP)=ii pop rr x1 10 (-AF-) rr=(SP), SP=SP+2 ;rr may be BC,DE,HL,AF pop ii pD E1 14 ------ ii=(SP), SP=SP+2 ex DE,HL EB 4 ------ exchange DE <--> HL ex AF,AF 08 4 xxxxxx exchange AF <--> AF' exx D9 4 ------ exchange BC,DE,HL <--> BC',DE',HL' ex (SP),HL E3 19 ------ exchange (SP) <--> HL ex (SP),ii pD E3 23 ------ exchange (SP) <--> ii |
Instruction Opcode Cycles Flags Notes ldi ED A0 16 --0e0- (DE)=(HL), HL=HL+1, DE=DE+1, BC=BC-1 ldd ED A8 16 --0e0- (DE)=(HL), HL=HL-1, DE=DE-1, BC=BC-1 ldir ED B0 bc*21-5 --0?0- ldi-repeat until BC=0 lddr ED B8 bc*21-5 --0?0- ldd-repeat until BC=0 |
Z80 Arithmetic/Logical Commands |
Instruction Opcode Cycles Flags Notes daa 27 4 szxp-x decimal adjust akku cpl 2F 4 --1-1- A = A xor FF neg ED 44 8 szho1c A = 00-A <arit> r xx 4 szhonc see below <arit> i pD xx 8 szhonc see below, UNDOCUMENTED <arit> n xx nn 7 szhonc see below <arit> (HL) xx 7 szhonc see below <arit> (ii+d) pD xx dd 19 szhonc see below <cnt> r xx 4 szhon- see below <cnt> i pD xx 8 szhon- see below, UNDOCUMENTED <cnt> (HL) xx 11 szhon- see below <cnt> (ii+d) pD xx dd 23 szhon- see below <logi> r xx 4 szhp00 see below <logi> i pD xx 8 szhp00 see below, UNDOCUMENTED <logi> n xx nn 7 szhp00 see below <logi> (HL) xx 7 szhp00 see below <logi> (ii+d) pD xx dd 19 szhp00 see below |
add A,op see above 4-19 szho0c A=A+op adc A,op see above 4-19 szho0c A=A+op+cy sub op see above 4-19 szho1c A=A-op sbc A,op see above 4-19 szho1c A=A-op-cy cp op see above 4-19 szho1c compare, ie. VOID=A-op |
inc op see above 4-23 szho0- op=op+1 dec op see above 4-23 szho1- op=op-1 |
and op see above 4-19 sz1p00 A=A & op xor op see above 4-19 sz0p00 A=A XOR op or op see above 4-19 sz0p00 A=A | op |
Instruction Opcode Cycles Flags Notes add HL,rr x9 11 --h-0c HL = HL+rr ;rr may be BC,DE,HL,SP add ii,rr pD x9 15 --h-0c ii = ii+rr ;rr may be BC,DE,ii,SP (!) adc HL,rr ED xA 15 szho0c HL = HL+rr+cy ;rr may be BC,DE,HL,SP sbc HL,rr ED x2 15 szho1c HL = HL-rr-cy ;rr may be BC,DE,HL,SP inc rr x3 6 ------ rr = rr+1 ;rr may be BC,DE,HL,SP inc ii pD 23 10 ------ ii = ii+1 dec rr xB 6 ------ rr = rr-1 ;rr may be BC,DE,HL,SP dec ii pD 2B 10 ------ ii = ii-1 |
Instruction Opcode Cycles Flags Notes cpi ED A1 16 szhe1- compare A-(HL), HL=HL+1, DE=DE+1, BC=BC-1 cpd ED A9 16 szhe1- compare A-(HL), HL=HL-1, DE=DE-1, BC=BC-1 cpir ED B1 x*21-5 szhe1- cpi-repeat until BC=0 or compare fits cpdr ED B9 x*21-5 szhe1- cpd-repeat until BC=0 or compare fits |
Z80 Rotate/Shift and Singlebit Operations |
Instruction Opcode Cycles Flags Notes rlca 07 4 --0-0c rotate akku left rla 17 4 --0-0c rotate akku left through carry rrca 0F 4 --0-0c rotate akku right rra 1F 4 --0-0c rotate akku right through carry rld ED 6F 18 sz0p0- rotate left low digit of A through (HL) rrd ED 67 18 sz0p0- rotate right low digit of A through (HL) <cmd> r CB xx 8 sz0p0c see below <cmd> (HL) CB xx 15 sz0p0c see below <cmd> (ii+d) pD CB dd xx 23 sz0p0c see below <cmd> r,(ii+d) pD CB dd xx 23 sz0p0c see below, UNDOCUMENTED modify and load |
rlc rotate left rl rotate left through carry rrc rotate right rr rotate right through carry sla shift left arithmetic (b0=0) sll UNDOCUMENTED shift left (b0=1) sra shift right arithmetic (b7=b7) srl shift right logical (b7=0) |
Instruction Opcode Cycles Flags Notes bit n,r CB xx 8 xz1x0- test bit n ;n=0..7 bit n,(HL) CB xx 12 xz1x0- bit n,(ii+d) pD CB dd xx 20 xz1x0- set n,r CB xx 8 ------ set bit n ;n=0..7 set n,(HL) CB xx 15 ------ set n,(ii+d) pD CB dd xx 23 ------ set r,n,(ii+d) pD CB dd xx 23 ------ UNDOCUMENTED set n,(ii+d) and ld r,(ii+d) res n,r CB xx 8 ------ reset bit n ;n=0..7 res n,(HL) CB xx 15 ------ res n,(ii+d) pD CB dd xx 23 ------ res r,n,(ii+d) pD CB dd xx 23 ------ UNDOCUMENTED res n,(ii+d) and ld r,(ii+d) ccf 3F 4 --h-0c h=cy, cy=cy xor 1 scf 37 4 --0-01 cy=1 |
Z80 Jumpcommands & Interrupts |
Instruction Opcode Cycles Flags Notes jp nn C3 nn nn 10 ------ jump to nn, ie. PC=nn jp HL E9 4 ------ jump to HL, ie. PC=HL jp ii pD E9 8 ------ jump to ii, ie. PC=ii jp f,nn xx nn nn 10;10 ------ jump to nn if nz,z,nc,c,po,pe,p,m jr nn 18 dd 12 ------ relative jump to nn, ie. PC=PC+d jr f,nn xx dd 12;7 ------ relative jump to nn if nz,z,nc,c djnz nn 10 dd 13;8 ------ B=B-1 and relative jump to nn if B<>0 call nn CD nn nn 17 ------ call nn ie. SP=SP-2, (SP)=PC, PC=nn call f,nn xx nn nn 17;10 ------ call nn if nz,z,nc,c,po,pe,p,m ret C9 10 ------ pop PC ie. PC=(SP), SP=SP+2 ret f xx 11;5 ------ pop PC if nz,z,nc,c,po,pe,p,m rst n xx 11 ------ call n ;n=00,08,10,18,20,28,30,38 nop 00 4 ------ no operation |
Instruction Opcode Cycles Flags Notes di F3 4 ------ IFF1=0, IFF2=0 ;disable interrupts ei FB 4 ------ IFF1=1, IFF2=1 ;enable interrupts im 0 ED 46 8 ------ read opcode from databus on interrupt im 1 ED 56 8 ------ execute call 0038h on interrupt im 2 ED 5E 8 ------ execute call (i*100h+databus) on int. halt 76 N*4 ------ repeat until interrupt occurs reti ED 4D 14 ------ pop PC, IFF1=IFF2, ACK (ret from INT) retn ED 45 14 ------ pop PC, IFF1=IFF2 (ret from NMI) </INT=LOW,IM=0,IFF1=1> 1+var ------ IFF1=0,IFF2=0, exec opcode from databus </INT=LOW,IM=1,IFF1=1> 12 ------ IFF1=0,IFF2=0, CALL 0038h </INT=LOW,IM=2,IFF1=1> 18 ------ IFF1=0,IFF2=0, CALL [I*100h+databus] </NMI=falling_edge> ? ------ IFF1=0, CALL 0066h |
Z80 I/O Commands |
Instruction Opcode Cycles Flags Notes in A,(n) DB nn 11 ------ A=PORT(A*100h+n) in r,(C) ED xx 12 sz0p0- r=PORT(BC) in (C) ED 70 12 sz0p0- **undoc/illegal** VOID=PORT(BC) out (n),A D3 nn 11 ------ PORT(A*100h+n)=A out (C),r ED xx 12 ------ PORT(BC)=r out (C),0 ED 71 12 ------ **undoc/illegal** PORT(BC)=00 ini ED A2 16 xexxxx MEM(HL)=PORT(BC), HL=HL+1, B=B-1 ind ED AA 16 xexxxx MEM(HL)=PORT(BC), HL=HL-1, B=B-1 outi ED A3 16 xexxxx B=B-1, PORT(BC)=MEM(HL), HL=HL+1 outd ED AB 16 xexxxx B=B-1, PORT(BC)=MEM(HL), HL=HL-1 inir ED B2 b*21-5 x1xxxx same than ini, repeat until b=0 indr ED BA b*21-5 x1xxxx same than ind, repeat until b=0 otir ED B3 b*21-5 x1xxxx same than outi, repeat until b=0 otdr ED BB b*21-5 x1xxxx same than outd, repeat until b=0 |
Z80 Interrupts |
EI IFF1=1, IFF2=1 DI IFF1=0, IFF2=0 <INT> IFF1=0, IFF2=0 <NMI> IFF1=0 RETI IFF1=IFF2 RETN IFF1=IFF2 |
Mode Cycles Refresh Operation 0 1+var 0+var IFF1=0,IFF2=0, read and execute opcode from databus 1 12 1 IFF1=0,IFF2=0, CALL 0038h 2 18 1 IFF1=0,IFF2=0, CALL [I*100h+databus] |
Z80 Meaningless and Duplicated Opcodes |
Z80 Garbage in Flag Register |
RLD; CPL; RLCA; RLA; LD A,I; ADD OP; ADC OP; XOR OP; AND OP; RRD; NEG; RRCA; RRA; LD A,R; SUB OP; SBC OP; OR OP ; DAA. |
RLC OP; RL OP; SLA OP; SLL OP; INC OP; IN OP,(C); RRC OP; RR OP; SRA OP; SRL OP; DEC OP |
ADD RR,XX; ADC RR,XX; SBC RR,XX. |
DUMMY = "REG_C+DATA+1" ;for INI/INIR DUMMY = "REG_C+DATA-1" ;for IND/INDR DUMMY = "REG_L+DATA" ;for OUTI,OUTD,OTIR,OTDR FLG_C = Carry of above "DUMMY" calculation FLG_H = Carry of above "DUMMY" calculation (same as FLG_C) FLG_N = Sign of "DATA" FLG_P = Parity of "REG_B XOR (DUMMY AND 07h)" FLG_S = Sign of "REG_B" UNDOC = Bit3,5 of "REG_B AND 28h" |
FLG_H = (OLD_A AND 0Fh) > 09h FLG_C = Carry of result |
FLG_H = (NEW_A AND 0Fh) > 09h FLG_C = OLD_CARRY OR (OLD_A>99h) |
Content Instruction A*100h LD (xx),A ;xx=BC,DE,nn xx+1 LD A,(xx) ;xx=BC,DE,nn nn+1 LD (nn),rr; LD rr,(nn) ;rr=BC,DE,HL,IX,IY rr EX (SP),rr ;rr=HL,IX,IY (MEMPTR=new value of rr) rr+1 ADD/ADC/SBC rr,xx ;rr=HL,IX,IY (MEMPTR=old value of rr+1) HL+1 RLD and RRD dest JP nn; CALL nn; JR nn ;dest=nn dest JP f,nn; CALL f,nn ;regardless of condition true/false dest RET; RETI; RETN ;dest=value read from (sp) dest RET f; JR f,nn; DJNZ nn ;only if condition=true 00XX RST n adr+1 IN A,(n) ;adr=A*100h+n, memptr=A*100h+n+1 bc+1 IN r,(BC); OUT (BC),r ;adr=bc ii+d All instructions with operand (ii+d) |
OUT (N),A and block commands LDXX, CPXX, INXX, OUTXX and probably interrupts in IM 0, 1, 2 |
Z80 Compatibility |
Z80 Pin-Outs |
_____ _____ | |_| | A11 |1 40| A10 A12 |2 39| A9 A13 |3 38| A8 A14 |4 37| A7 A15 |5 36| A6 CLK |6 35| A5 D4 |7 34| A4 D3 |8 33| A3 D5 |9 32| A2 D6 |10 Z80 31| A1 VCC |11 CPU 30| A0 D2 |12 29| GND D7 |13 28| /RFSH D0 |14 27| /M1 D1 |15 26| /RST /INT |16 25| /BUSRQ /NMI |17 24| /WAIT /HALT |18 23| /BUSAK /MREQ |19 22| /WR /IORQ |20 21| /RD |_____________| |
Z80 Local Usage |
FamicomBox |
FamicomBox Memory and I/O Maps |
0000h-1FFFh 8K RAM (with write-protect feature, see port 5002h.W) 2000h-3FFFh PPU Registers 4000h-4FFFh CPU/APU RP2A03E Registers 5000h-5FFFh FamicomBox Registers 6000h-7FFFh 8K RAM (temporary storage, used for TEST mode only) 8000h-FFFFh Cartridge space |
0000h..07FFh Standard NES Work RAM (variables for MENU and GAME) 0800h..08FFh FamicomBox Variables 0900h..09FFh FamicomBox Slot Counters (Total & per-game counters) 0A00h..0A18h FamicomBox Variables 0A19h..0DFFh FamicomBox Unused 0E00h..0FFFh FamicomBox Slot Directory (Game Titles with Chksum and Status) 1000h..1FFFh FamicomBox Program Code (relocated from Menu ROM) 6000h..7FFFh Unknown purpose (temporary storage, used for TEST mode only) |
4016h.W - Joypad Strobe 5000h.W - Exception Trap Enable Bits (reset to 00h on power-up only) 5001h.W - Coin Chip Params & CATV Outputs (reset to 00h on power-up only) 5002h.W - Slot LED and RAM protect register (reset to 00h when CPU is reset) 5003h.W - Exception Trap Attraction Timer 5004h.W - Slot ROM Cart control register (reset to 00h when CPU is reset) 5005h.W - Misc Control (reset to 00h on power-up only) 5006h.W - Test Connector DB-25 Outputs (not reset, uninitialzed at power-up) 5007h.W - Expansion 50-pin Edge Connector, 8bit Output |
4016h.R - Watchdog Reload, and Joypad 1 4017h.R - Watchdog Reload, and Joypad 2, and Zapper 5000h.R - Exception Trap Flags 5001h.R - Not used 5002h.R - Dip Switch Register 5003h.R - Keyswitch Position & Coin Chip Status 5004h.R - Test Connector DB-25 Inputs 5005h.R - Expansion 50-pin Edge Connector, 8bit Input 1 5006h.R - Expansion 50-pin Edge Connector, 8bit Input 2 5007h.R - Misc Status |
FamicomBox I/O Ports |
0 6.82Hz interrupt source (0=Enable, 1=Disable) 1 Attraction Timer (0=Disable, 1=Enable) 2 Controller reads (0=Disable, 1=Enable) 3 Keyswitch rotation (0=Disable, 1=Enable) 4 Coin insertion (and/or EXPIRED?) (0=Disable, 1=Enable) 5 Reset Button (0=Disable, 1=Enable) 6 Not used (Watchdog is always Enabled) 7 CATV connector Pin 1 detection (0=Disable, 1=Enable) |
0 6.82Hz interrupt source hit (0=Trapped, 1=Normal) 1 Attraction Timer Expired (0=Trapped, 1=Normal) 2 Controller(s) were read (and PRESSED?) (0=Trapped, 1=Normal) 3 Keyswitch was rotated (0=Trapped, 1=Normal) 4 Coin was inserted (and/or EXPIRED?) (0=Trapped, 1=Normal) 5 Reset Button was pressed (0=Trapped, 1=Normal) 6 Watchdog Timer Expired (after 17.5s) (0=Trapped, 1=Normal) 7 CATV connector Pin 1 went high/open (0=Trapped, 1=Normal) |
0-7 Counter value (decremented at 6.8274Hz) (255=max=37 seconds) |
0 Coin Chip pin 1 (1=Ten Minutes per Coin) 1 Coin Chip pin 2 (1=Twenty Minutes per Coin) 2 Coin Chip pin 3 (should be always 0, except in test mode) 3 Coin Chip pin 4 (should be always 0, except in test mode) 4 Coin Chip pin 12 (should be always 0, except in test mode) 5 Coin Chip pin 14 (1=Apply Minutes?) 6 CATV Connector pin 7 (0=Free-Menu/Demo, 1=Play-and-Pay; unless TV Mode?) 7 CATV Connector pin 8 (0=High=Okay, 1=Low=Joypad/Zapper-Disconnect-Alert) |
0-3 LED Select (00h=None, 01h..0Fh=Cartridge Slot LED 1..15) 4-6 RAM Write Enable (0=None, 1=0-07FFh, 2=0-0FFFh, 3=0-17FFh, 4-7=0-1FFFh) 7 LED Flash (3.414Hz) (high=flash, low=steady) |
0-3 Cart Number select (00h=Menu, 01h..0Fh=Game Cart1-15) 4-5 Cart Row select (00h=Menu, 01h=Cart1-5, 02h=Cart6-10, 03h=Cart11-15) 6 Lock (0=No change, 1=Disable Port 500xh or so; until Reset) 7 NC |
0 Latching Relay (1=Flip to position A) (coil on pins 1 & 10) 1 Coin Chip pin ? ;err... which pin? (0=Operate, 1=Config/Reset?) 2 Zapper GND (0=Disable/Low-Z; for 5007h.R connect-check, 1=Enable/GND) 3 enable 40% input of modulator (0=Disable, 1=Enable) 4 NC 5 maps to 5007h.R.Bit7 (warmboot flag or so?) (and to 50-pin ??) 6 Joypad Enable (0=Enable, 1=Disable) 7 Joypad Swap (0=Swap, 1=Normal) swapping only swaps D0 and CLK |
0 TV type selection (0=TV, 1=Game) ;or... trap flag bit8... CIC, 1=trap? 1 Keyswitch turned (0=No, 1=in middle of two positions) 2 Zapper GND (0=Enabled or Disabled+Disconnected, 1=Disabled+Connected) 3 Expansion 50-pin Edge Connector, Pin 21 (inverted) 4 CATV Connector pin 8 (0=Low, 1=High) (see also: 5001h.W.Bit7) 5 Relay Position (0=Position A, 1=Position B) (For CATV 0=Force Demo Only) 6 Expansion 50-pin Edge Connector, Pin 22 (inverted) 7 5005h.W.Bit5 (inverted) ;coldboot/warmboot flag? 7 err, and/or Expansion 50-pin Edge Connector, Pin 23 |
0 DIP SW 1 Self Test (0=Off=Normal, 1=On=Do continuous selftest) 1 DIP SW 2 Coin timeout period (0=Off=10 minutes, 1=On=20 minutes) 2 DIP SW 3 Not used (0=Off, 1=On) 3 DIP SW 4 Famicombox menu time (0=Off=7 seconds, 1=On=12 seconds) 4 DIP SW 5 Attract time, bit0 ;\(0..3 = 12,17,23,7 seconds) 5 DIP SW 6 Attract time, bit1 ;/ 6 DIP SW 7 Mode, bit0 ;\(0=KEY MODE, 1=CATV MODE, 2=COIN MODE, 3=FREEPLAY) 7 DIP SW 8 Mode, bit1 ;/ N/A DIP SW 9 Feep Disable (On=Mute the Coin feep) N/A DIP SW 10 Controller 2 D3,D4 (Off=Disable, On=Enable) (Zapper pins) |
0 Key Position 0 (0=No, 1=Yes) (??? from left) ;-(demo mode?) 1 Key Position 1 (0=No, 1=Yes) (??? from left) ;\SELECT GAME (play modes) 2 Key Position 2 (0=No, 1=Yes) (??? from left) ;/ 3 Key Position 3 (0=No, 1=Yes) (??? from left) ;-SELF CHECK and GAME CHECK 4 Key Position 4 (0=No, 1=Yes) (??? from left) ;-Lockup ??? 5 Key Position 6 (0=No, 1=Yes) (1st from left) ;-GAME TITLE & COUNT 6 Coin Chip Pin 9 (0=Empty/Expired, 1="Money system enabled") 7 Coin Chip Pin 10 (not used by existing software) (MAYBE expired-trap?) |
0-7 Not used (open bus) |
0-7 Input R0..R7 (DB-25 pins 2,15,3,16,4,17,5,18) (inverted; 0=High, 1=Low) |
0-7 Output W0..W7 (DB-25 pins 6,15,7,16,8,17,9,18) |
0-7 Input from CPU Databus; with 5005h.Read signal on Expansion Port pin 28 |
0-7 Input from CPU Databus; with 5006h.Read signal on Expansion Port pin 27 |
0-7 Output to CPU Databus; with 5007h.Write signal on Expansion Port pin 26 |
0 DB-15 pin 12 and Joypad 1/2 Strobe pin 3 1 DB-15 pin 11 2 DB-15 pin 10 3-7 Not used |
0 Joypad 1 D0 pin 4 ;Joypad 1 (or joypad 2 when swapped) 1 DB-15 pin 14 2 Expansion 50-pin Edge Connector, Pin 44 (would be Microphone in Famicom) 3 Joypad 1 D3 pin 6 4 Joypad 1 D4 pin 7 5 Expansion 50-pin Edge Connector, Pin 19 6 Expansion 50-pin Edge Connector, Pin 45 7 Expansion 50-pin Edge Connector, Pin 20 |
0 DB-15 pin 8 and Joypad 2 D0 pin 4 ;Joypad 2 (or joypad 1 when swapped) 1 DB-15 pin 7 2 DB-15 pin 6 3 DB-15 pin 5 and Joypad 2 D3 pin 6 ;Zapper Light ;\when DIP10=Off: 4 DB-15 pin 4 and Joypad 2 D4 pin 7 ;Zapper Trigger ;/only DB-15 pins 5 Expansion 50-pin Edge Connector, Pin 17 6 Expansion 50-pin Edge Connector, Pin 43 7 Expansion 50-pin Edge Connector, Pin 18 |
FamicomBox Misc |
21.47727MHz/3/2000h = 873.91Hz (feep tone, when coin inserted) 21.47727MHz/3/100000h = 6.827Hz (clock for 8bit attraction timer) 21.47727MHz/3/200000h = 3.414Hz (LED flash) 21.47727MHz/3/800000h = 0.853Hz (clock for 4bit watchdog timer) |
FamicomBox Cartridges |
FamicomBox ROM Header (at FFE0h) |
FFE0h 16 Title in ASCII, max 16 chars (right-justified, at FFExh..FFEFh) FFF0h 2 PRG-ROM Checksum (big-endian) (ALL bytes, or only last 16Kbytes) FFF2h 2 CHR-ROM Checksum (big-endian) (ALL bytes, 0000h if no CHR-ROM) FFF4h 1 Unknown/Unused Cartridge Size (MSB=PRG-ROM, LSB=CHR-ROM/RAM) (or so) FFF5h 1 Mapper Type (implies Checksum Type), and bit7=Name Table Mirroring FFF6h 1 Unknown/Unused (00h=NoTitle?, 01h=Normal, 02h=Mapper4?) FFF7h 1 Length of Title minus 1 (typically 02h..0Fh) (or often 10h=Corrupt) FFF8h 1 Maker Code (same as for Gameboy and SNES) (01h=Nintendo, etc.) FFF9h 1 Header Checksum (00h minus all bytes at [FFF2h..FFF8h]) FFFAh 2 CPU NMI Vector FFFCh 2 CPU RESET Vector FFFEh 2 CPU IRQ/BRK Vector |
00h NROM PRG=8K,16K,32K 01h CNROM PRG=8K,16K,32K 02h UNROM PRG=128K (fixed size) (8 banks of 16K) chksum per whole 128K 03h GNROM? PRG=128K (fixed size) (4 banks of 32K) chksum per 32K bank 04h MMC's PRG=16K chksum per (any) mappable 16K bank(s) at C000h-FFFFh 05h..7Fh Invalid |
FamicomBox Pinouts |
1 - +5V 2 - +5V 3 - Front LED anode (cathode is grounded) (green LED "indicating TV/game") 4 - TV/Game Button (5V on other end, connected to pin 6) 5 - RESET Button (Low=Pressed) (used to return to Menu) 6 - +5V 7 - Coin Connector Pin 3 and connects to LED (err... what LED??) 8 - Coin Connector Pin 1 and TEST Button (Low=Add credit) 9 - Controller Pin 1 on Port 3: (5007h.R.Bit2, 5005h.W.Bit2, Zapper GND) 10 - Controller Pin 4 on Port 1: (4016h.R.Bit0, Joypad 1 Data) ;\can be 11 - Controller Pin 4 on Port 2: (4017h.R.Bit0, Joypad 2 Data) ;/swapped 12 - Controller Pin 2 on Port 1: (4016h.Read, Joypad 1 Clock) ;\can be 13 - Controller Pin 2 on Port 2-3: (4017h.Read, Joypad 2 Clock) ;/swapped 14 - Controller Pin 3 on Port 1-2: (4016h.W.Bit0, Joypad 1/2 Strobe, OUT0) 15 - Controller Pin 7 on Port 2-3: (4017h.R.Bit4, Zapper Trigger) ;\only when 16 - Controller Pin 6 on Port 2-3: (4017h.R.Bit3, Zapper Light) ;/DIP10=On 17 - Controller Pin 6 on Port 1: (4016h.R.Bit3) 18 - Controller Pin 7 on Port 1: (4016h.R.Bit4) 19 - Keyswitch position 0 (Low=Selected) (5003h.R.Bit0) 20 - Keyswitch position 1 (Low=Selected) (5003h.R.Bit1) 21 - Keyswitch position 2 (Low=Selected) (5003h.R.Bit2) 22 - Keyswitch position 3 (Low=Selected) (5003h.R.Bit3) 23 - Keyswitch position 4 (Low=Selected) (5003h.R.Bit4) 24 - Keyswitch position 6 (Low=Selected) (5003h.R.Bit5) 25 - GND 26 - GND |
1 - (pin8 of front panel PCB) (Low=Add credit) (also wired to TEST button) 2 - GND 3 - (pin7 of front panel PCB) "connects to LED" err.. what LED, what for? |
Pin Purpose Port 1 (Joy1) Port 2 (Joy2) Port 3 (Zapper) 1 - Ground GND GND 5005h.W.Bit2/5007h.R.Bit2 2 - Joypad Clock 4016h.R 4017h.R 4017h.R .---------. 3 - Joypad Strobe 4016h.W.Bit0 4016h.W.Bit0 NC | 4 3 2 1 | 4 - Joypad Data 4016h.R.Bit0 4017h.R.Bit0 NC | 7 6 5 / 5 - Supply +5V +5V +5V '-------' 6 - Zapper Light 4016h.R.Bit3 4017h.R.Bit3/DIP10 4017h.R.Bit3/DIP10 7 - Zapper Button 4016h.R.Bit4 4017h.R.Bit4/DIP10 4017h.R.Bit4/DIP10 |
1 - GND 9 - 4017h.R enable 2 - audio output 10 - 4016h.W.2 3 - /IRQ 11 - 4016h.W.1 4 - 4017h.R.4 12 - 4016h.W.0 5 - 4017h.R.3 13 - 4016h.R.1 6 - 4017h.R.2 14 - 4016h.R enable 7 - 4017h.R.1 15 - +5V 8 - 4017h.R.0 |
1 - +5V 14 - /IRQ 2 - 5004h.R.0 15 - 5004h.R.1 3 - 5004h.R.2 16 - 5004h.R.3 4 - 5004h.R.4 17 - 5004h.R.5 5 - 5004h.R.6 18 - 5004h.R.7 6 - 5006h.W.0 19 - 5006h.W.1 7 - 5006h.W.2 20 - 5006h.W.3 8 - 5006h.W.4 21 - 5006h.W.5 9 - 5006h.W.6 22 - 5006h.W.7 10 - GND 23 - GND 11 - GND 24 - M2 12 - GND 25 - GND 13 - GND |
1 - 5000h.RW.Bit7 Exception Trap (usually strapped to GND, ie. CATV pin4) 2 - Unknown 3 - Unknown 4 - GND 5 - +5V 6 - Unknown 7 - 5001h.W.Bit6 ;Play-and-Pay (unless TV mode?) 8 - 5001h.W.Bit7 and 5007h.R.Bit4 ;Joypad/Zapper-Disconnect-Alert |
1 - +5V 26 - 5007h.W enable 2 - +5V 27 - 5006h.R enable 3 - +5V 28 - 5005h.R enable 4 - M2 29 - +5V 5 - Audio Input 30 - +5V 6 - +5V 31 - +5V 7 - PRG A6 32 - PRG A7 8 - PRG A4 33 - PRG A5 9 - PRG A2 34 - PRG A3 10 - PRG A0 35 - PRG A1 11 - PRG D1 36 - PRG D0 12 - PRG D3 37 - PRG D2 13 - PRG D5 38 - PRG D4 14 - PRG D7 39 - PRG D6 15 - PRG R/W 40 - /(5000h-5FFFh) 16 - pin #1 audio 41 - /IRQ 17 - 4017h.R.5 42 - pin #2 audio 18 - 4017h.R.7 43 - 4017h.R.6 19 - 4016h.R.5 44 - 4016h.R.2 (microphone) 20 - 4016h.R.7 45 - 4016h.R.6 21 - 5007h.R.3 46 - GND 22 - 5007h.R.6 47 - GND 23 - 5007h.R.7 (+5005h.W.5 ?) 48 - GND 24 - GND 49 - GND 25 - GND 50 - GND |
1 P00 5001h.W.Bit0 (unknown purpose) 2 P01 5001h.W.Bit1 (unknown purpose) 3 P02 5001h.W.Bit2 (unknown purpose) 4 P03 5001h.W.Bit3 (unknown purpose) 5 CL2 whatever MHz clock (or maybe NC) 6 CL1 whatever MHz clock (this one needed) 7 RES whatever type of reset (maybe I/O controlled?) 8 GND Supply GND 9 P10 5003h.R.Bit6 (reportedly "Money system enabled") 10 P11 5003h.R.Bit7 (unknown purpose) 11 P12 (unknown purpose) 12 P13 5001h.W.Bit4 (unknown purpose) 13 P20 (unknown purpose) 14 P21 5001h.W.Bit5 (unknown purpose) 15 P22 (unknown purpose) 16 VCC Supply VCC |
Audio - Mono audio from amplifier+external+coin feep Video - Comes from the usual transistor circuit on the PPU B+ - Supply 5V B+SW - Switch (Low=Switches the game in, High=Lets TV signal pass through) GND - Supply Ground 40% - Dimming (undermodulates video by 40%) (Low=Dim, High=Normal) ? - Unknown (there are seven wires, not only six) |
Modems |
Famicom Network System HVC-050 Famicom Network System FCNS-A Famicom Network System Dataship 1200 (Nintendo) TV-NET MC-1200B |
Unpredictable Things |
CPU 65XX Microprocessor |
CPU Registers and Flags |
Bits Name Expl. 8 A Accumulator 8 X Index Register X 8 Y Index Register Y 16 PC Program Counter 8 S Stack Pointer (see below) 8 P Processor Status Register (see below) |
Bit Name Expl. 0 C Carry (0=No Carry, 1=Carry) 1 Z Zero (0=Nonzero, 1=Zero) 2 I IRQ Disable (0=IRQ Enable, 1=IRQ Disable) 3 D Decimal Mode (0=Normal, 1=BCD Mode for ADC/SBC opcodes) 4 B Break Flag (0=IRQ/NMI, 1=RESET or BRK/PHP opcode) 5 - Not used (Always 1) 6 V Overflow (0=No Overflow, 1=Overflow) 7 N Negative/Sign (0=Positive, 1=Negative) |
CPU Memory Addressing |
Name Native Nocash Implied - A,X,Y,S,P Immediate #nn nn Zero Page nn [nn] Zero Page,X nn,X [nn+X] Zero Page,Y nn,Y [nn+Y] Absolute nnnn [nnnn] Absolute,X nnnn,X [nnnn+X] Absolute,Y nnnn,Y [nnnn+Y] (Indirect,X) (nn,X) [[nn+X]] (Indirect),Y (nn),Y [[nn]+Y] |
CPU Memory and Register Transfers |
Opcode Flags Clk Native Nocash Expl. A8 nz---- 2 TAY MOV Y,A ;Y=A AA nz---- 2 TAX MOV X,A ;X=A BA nz---- 2 TSX MOV X,S ;X=S 98 nz---- 2 TYA MOV A,Y ;A=Y 8A nz---- 2 TXA MOV A,X ;A=X 9A ------ 2 TXS MOV S,X ;S=X A9 nn nz---- 2 LDA #nn MOV A,nn ;A=nn A2 nn nz---- 2 LDX #nn MOV X,nn ;X=nn A0 nn nz---- 2 LDY #nn MOV Y,nn ;Y=nn |
A5 nn nz---- 3 LDA nn MOV A,[nn] ;A=[nn] B5 nn nz---- 4 LDA nn,X MOV A,[nn+X] ;A=[nn+X] AD nn nn nz---- 4 LDA nnnn MOV A,[nnnn] ;A=[nnnn] BD nn nn nz---- 4* LDA nnnn,X MOV A,[nnnn+X] ;A=[nnnn+X] B9 nn nn nz---- 4* LDA nnnn,Y MOV A,[nnnn+Y] ;A=[nnnn+Y] A1 nn nz---- 6 LDA (nn,X) MOV A,[[nn+X]] ;A=[WORD[nn+X]] B1 nn nz---- 5* LDA (nn),Y MOV A,[[nn]+Y] ;A=[WORD[nn]+Y] A6 nn nz---- 3 LDX nn MOV X,[nn] ;X=[nn] B6 nn nz---- 4 LDX nn,Y MOV X,[nn+Y] ;X=[nn+Y] AE nn nn nz---- 4 LDX nnnn MOV X,[nnnn] ;X=[nnnn] BE nn nn nz---- 4* LDX nnnn,Y MOV X,[nnnn+Y] ;X=[nnnn+Y] A4 nn nz---- 3 LDY nn MOV Y,[nn] ;Y=[nn] B4 nn nz---- 4 LDY nn,X MOV Y,[nn+X] ;Y=[nn+X] AC nn nn nz---- 4 LDY nnnn MOV Y,[nnnn] ;Y=[nnnn] BC nn nn nz---- 4* LDY nnnn,X MOV Y,[nnnn+X] ;Y=[nnnn+X] |
85 nn ------ 3 STA nn MOV [nn],A ;[nn]=A 95 nn ------ 4 STA nn,X MOV [nn+X],A ;[nn+X]=A 8D nn nn ------ 4 STA nnnn MOV [nnnn],A ;[nnnn]=A 9D nn nn ------ 5 STA nnnn,X MOV [nnnn+X],A ;[nnnn+X]=A 99 nn nn ------ 5 STA nnnn,Y MOV [nnnn+Y],A ;[nnnn+Y]=A 81 nn ------ 6 STA (nn,X) MOV [[nn+x]],A ;[WORD[nn+x]]=A 91 nn ------ 6 STA (nn),Y MOV [[nn]+y],A ;[WORD[nn]+y]=A 86 nn ------ 3 STX nn MOV [nn],X ;[nn]=X 96 nn ------ 4 STX nn,Y MOV [nn+Y],X ;[nn+Y]=X 8E nn nn ------ 4 STX nnnn MOV [nnnn],X ;[nnnn]=X 84 nn ------ 3 STY nn MOV [nn],Y ;[nn]=Y 94 nn ------ 4 STY nn,X MOV [nn+X],Y ;[nn+X]=Y 8C nn nn ------ 4 STY nnnn MOV [nnnn],Y ;[nnnn]=Y |
48 ------ 3 PHA PUSH A ;[S]=A, S=S-1 08 ------ 3 PHP PUSH P ;[S]=P, S=S-1 (flags) 68 nz---- 4 PLA POP A ;S=S+1, A=[S] 28 nzcidv 4 PLP POP P ;S=S+1, P=[S] (flags) |
CPU Arithmetic/Logical Operations |
69 nn nzc--v 2 ADC #nn ADC A,nn ;A=A+C+nn 65 nn nzc--v 3 ADC nn ADC A,[nn] ;A=A+C+[nn] 75 nn nzc--v 4 ADC nn,X ADC A,[nn+X] ;A=A+C+[nn+X] 6D nn nn nzc--v 4 ADC nnnn ADC A,[nnnn] ;A=A+C+[nnnn] 7D nn nn nzc--v 4* ADC nnnn,X ADC A,[nnnn+X] ;A=A+C+[nnnn+X] 79 nn nn nzc--v 4* ADC nnnn,Y ADC A,[nnnn+Y] ;A=A+C+[nnnn+Y] 61 nn nzc--v 6 ADC (nn,X) ADC A,[[nn+X]] ;A=A+C+[word[nn+X]] 71 nn nzc--v 5* ADC (nn),Y ADC A,[[nn]+Y] ;A=A+C+[word[nn]+Y] |
E9 nn nzc--v 2 SBC #nn SBC A,nn ;A=A+C-1-nn E5 nn nzc--v 3 SBC nn SBC A,[nn] ;A=A+C-1-[nn] F5 nn nzc--v 4 SBC nn,X SBC A,[nn+X] ;A=A+C-1-[nn+X] ED nn nn nzc--v 4 SBC nnnn SBC A,[nnnn] ;A=A+C-1-[nnnn] FD nn nn nzc--v 4* SBC nnnn,X SBC A,[nnnn+X] ;A=A+C-1-[nnnn+X] F9 nn nn nzc--v 4* SBC nnnn,Y SBC A,[nnnn+Y] ;A=A+C-1-[nnnn+Y] E1 nn nzc--v 6 SBC (nn,X) SBC A,[[nn+X]] ;A=A+C-1-[word[nn+X]] F1 nn nzc--v 5* SBC (nn),Y SBC A,[[nn]+Y] ;A=A+C-1-[word[nn]+Y] |
29 nn nz---- 2 AND #nn AND A,nn ;A=A AND nn 25 nn nz---- 3 AND nn AND A,[nn] ;A=A AND [nn] 35 nn nz---- 4 AND nn,X AND A,[nn+X] ;A=A AND [nn+X] 2D nn nn nz---- 4 AND nnnn AND A,[nnnn] ;A=A AND [nnnn] 3D nn nn nz---- 4* AND nnnn,X AND A,[nnnn+X] ;A=A AND [nnnn+X] 39 nn nn nz---- 4* AND nnnn,Y AND A,[nnnn+Y] ;A=A AND [nnnn+Y] 21 nn nz---- 6 AND (nn,X) AND A,[[nn+X]] ;A=A AND [word[nn+X]] 31 nn nz---- 5* AND (nn),Y AND A,[[nn]+Y] ;A=A AND [word[nn]+Y] |
49 nn nz---- 2 EOR #nn XOR A,nn ;A=A XOR nn 45 nn nz---- 3 EOR nn XOR A,[nn] ;A=A XOR [nn] 55 nn nz---- 4 EOR nn,X XOR A,[nn+X] ;A=A XOR [nn+X] 4D nn nn nz---- 4 EOR nnnn XOR A,[nnnn] ;A=A XOR [nnnn] 5D nn nn nz---- 4* EOR nnnn,X XOR A,[nnnn+X] ;A=A XOR [nnnn+X] 59 nn nn nz---- 4* EOR nnnn,Y XOR A,[nnnn+Y] ;A=A XOR [nnnn+Y] 41 nn nz---- 6 EOR (nn,X) XOR A,[[nn+X]] ;A=A XOR [word[nn+X]] 51 nn nz---- 5* EOR (nn),Y XOR A,[[nn]+Y] ;A=A XOR [word[nn]+Y] |
09 nn nz---- 2 ORA #nn OR A,nn ;A=A OR nn 05 nn nz---- 3 ORA nn OR A,[nn] ;A=A OR [nn] 15 nn nz---- 4 ORA nn,X OR A,[nn+X] ;A=A OR [nn+X] 0D nn nn nz---- 4 ORA nnnn OR A,[nnnn] ;A=A OR [nnnn] 1D nn nn nz---- 4* ORA nnnn,X OR A,[nnnn+X] ;A=A OR [nnnn+X] 19 nn nn nz---- 4* ORA nnnn,Y OR A,[nnnn+Y] ;A=A OR [nnnn+Y] 01 nn nz---- 6 ORA (nn,X) OR A,[[nn+X]] ;A=A OR [word[nn+X]] 11 nn nz---- 5* ORA (nn),Y OR A,[[nn]+Y] ;A=A OR [word[nn]+Y] |
C9 nn nzc--- 2 CMP #nn CMP A,nn ;A-nn C5 nn nzc--- 3 CMP nn CMP A,[nn] ;A-[nn] D5 nn nzc--- 4 CMP nn,X CMP A,[nn+X] ;A-[nn+X] CD nn nn nzc--- 4 CMP nnnn CMP A,[nnnn] ;A-[nnnn] DD nn nn nzc--- 4* CMP nnnn,X CMP A,[nnnn+X] ;A-[nnnn+X] D9 nn nn nzc--- 4* CMP nnnn,Y CMP A,[nnnn+Y] ;A-[nnnn+Y] C1 nn nzc--- 6 CMP (nn,X) CMP A,[[nn+X]] ;A-[word[nn+X]] D1 nn nzc--- 5* CMP (nn),Y CMP A,[[nn]+Y] ;A-[word[nn]+Y] E0 nn nzc--- 2 CPX #nn CMP X,nn ;X-nn E4 nn nzc--- 3 CPX nn CMP X,[nn] ;X-[nn] EC nn nn nzc--- 4 CPX nnnn CMP X,[nnnn] ;X-[nnnn] C0 nn nzc--- 2 CPY #nn CMP Y,nn ;Y-nn C4 nn nzc--- 3 CPY nn CMP Y,[nn] ;Y-[nn] CC nn nn nzc--- 4 CPY nnnn CMP Y,[nnnn] ;Y-[nnnn] |
24 nn xz---x 3 BIT nn TEST A,[nn] ;test and set flags 2C nn nn xz---x 4 BIT nnnn TEST A,[nnnn] ;test and set flags |
E6 nn nz---- 5 INC nn INC [nn] ;[nn]=[nn]+1 F6 nn nz---- 6 INC nn,X INC [nn+X] ;[nn+X]=[nn+X]+1 EE nn nn nz---- 6 INC nnnn INC [nnnn] ;[nnnn]=[nnnn]+1 FE nn nn nz---- 7 INC nnnn,X INC [nnnn+X] ;[nnnn+X]=[nnnn+X]+1 E8 nz---- 2 INX INC X ;X=X+1 C8 nz---- 2 INY INC Y ;Y=Y+1 |
C6 nn nz---- 5 DEC nn DEC [nn] ;[nn]=[nn]-1 D6 nn nz---- 6 DEC nn,X DEC [nn+X] ;[nn+X]=[nn+X]-1 CE nn nn nz---- 6 DEC nnnn DEC [nnnn] ;[nnnn]=[nnnn]-1 DE nn nn nz---- 7 DEC nnnn,X DEC [nnnn+X] ;[nnnn+X]=[nnnn+X]-1 CA nz---- 2 DEX DEC X ;X=X-1 88 nz---- 2 DEY DEC Y ;Y=Y-1 |
CPU Rotate and Shift Instructions |
0A nzc--- 2 ASL A SHL A ;SHL A 06 nn nzc--- 5 ASL nn SHL [nn] ;SHL [nn] 16 nn nzc--- 6 ASL nn,X SHL [nn+X] ;SHL [nn+X] 0E nn nn nzc--- 6 ASL nnnn SHL [nnnn] ;SHL [nnnn] 1E nn nn nzc--- 7 ASL nnnn,X SHL [nnnn+X] ;SHL [nnnn+X] |
4A 0zc--- 2 LSR A SHR A ;SHR A 46 nn 0zc--- 5 LSR nn SHR [nn] ;SHR [nn] 56 nn 0zc--- 6 LSR nn,X SHR [nn+X] ;SHR [nn+X] 4E nn nn 0zc--- 6 LSR nnnn SHR [nnnn] ;SHR [nnnn] 5E nn nn 0zc--- 7 LSR nnnn,X SHR [nnnn+X] ;SHR [nnnn+X] |
2A nzc--- 2 ROL A RCL A ;RCL A 26 nn nzc--- 5 ROL nn RCL [nn] ;RCL [nn] 36 nn nzc--- 6 ROL nn,X RCL [nn+X] ;RCL [nn+X] 2E nn nn nzc--- 6 ROL nnnn RCL [nnnn] ;RCL [nnnn] 3E nn nn nzc--- 7 ROL nnnn,X RCL [nnnn+X] ;RCL [nnnn+X] |
6A nzc--- 2 ROR A RCR A ;RCR A 66 nn nzc--- 5 ROR nn RCR [nn] ;RCR [nn] 76 nn nzc--- 6 ROR nn,X RCR [nn+X] ;RCR [nn+X] 6E nn nn nzc--- 6 ROR nnnn RCR [nnnn] ;RCR [nnnn] 7E nn nn nzc--- 7 ROR nnnn,X RCR [nnnn+X] ;RCR [nnnn+X] |
CPU Jump and Control Instructions |
4C nn nn ------ 3 JMP nnnn JMP nnnn ;PC=nnnn 6C nn nn ------ 5 JMP (nnnn) JMP [nnnn] ;PC=WORD[nnnn] 20 nn nn ------ 6 JSR nnnn CALL nnnn ;[S]=PC+2,PC=nnnn 40 nzcidv 6 RTI RETI ;(from BRK/IRQ/NMI) ;P=[S], PC=[S] 60 ------ 6 RTS RET ;(from CALL) ;PC=[S]+1 |
10 dd ------ 2** BPL nnn JNS nnn ;N=0 plus/positive 30 dd ------ 2** BMI nnn JS nnn ;N=1 minus/negative/signed 50 dd ------ 2** BVC nnn JNO nnn ;V=0 no overflow 70 dd ------ 2** BVS nnn JO nnn ;V=1 overflow 90 dd ------ 2** BCC/BLT nnn JNC/JB nnn ;C=0 less/below/no carry B0 dd ------ 2** BCS/BGE nnn JC/JAE nnn ;C=1 above/greater/equal/carry D0 dd ------ 2** BNE/BZC nnn JNZ/JNE nnn ;Z=0 not zero/not equal F0 dd ------ 2** BEQ/BZS nnn JZ/JE nnn ;Z=1 zero/equal |
00 ---1-- 7 BRK Force Break B=1,[S]=PC+1,[S]=P,I=1,PC=[FFFE] -- ---1-- 7 /IRQ Interrupt B=0,[S]=PC, [S]=P,I=1,PC=[FFFE] -- ---1-- 7 /NMI NMI B=0,[S]=PC, [S]=P,I=1,PC=[FFFA] -- ---1-- T+6? /RESET Reset B=1,S=S-3, I=1,PC=[FFFC] |
IRQs are executed whenever "/IRQ=LOW AND I=0". NMIs are executed whenever "/NMI changes from HIGH to LOW". |
18 --0--- 2 CLC CLC ;Clear carry flag C=0 58 ---0-- 2 CLI EI ;Clear interrupt disable bit I=0 D8 ----0- 2 CLD CLD ;Clear decimal mode D=0 B8 -----0 2 CLV CLV ;Clear overflow flag V=0 38 --1--- 2 SEC STC ;Set carry flag C=1 78 ---1-- 2 SEI DI ;Set interrupt disable bit I=1 F8 ----1- 2 SED STD ;Set decimal mode D=1 |
EA ------ 2 NOP NOP ;No operation |
CPU Illegal Opcodes |
87 nn ------ 3 SAX nn STA+STX [nn]=A AND X 97 nn ------ 4 SAX nn,Y STA+STX [nn+Y]=A AND X 8F nn nn ------ 4 SAX nnnn STA+STX [nnnn]=A AND X 83 nn ------ 6 SAX (nn,X) STA+STX [WORD[nn+X]]=A AND X A7 nn nz---- 3 LAX nn LDA+LDX A,X=[nn] B7 nn nz---- 4 LAX nn,Y LDA+LDX A,X=[nn+Y] AF nn nn nz---- 4 LAX nnnn LDA+LDX A,X=[nnnn] A3 nn nz---- 6 LAX (nn,X) LDA+LDX A,X=[WORD[nn+X]] B3 nn nz---- 5* LAX (nn),Y LDA+LDX A,X=[WORD[nn]+Y] |
00+yy nzc--- SLO op ASL+ORA op=op SHL 1 // A=A OR op 20+yy nzc--- RLA op ROL+AND op=op RCL 1 // A=A AND op 40+yy nzc--- SRE op LSR+EOR op=op SHR 1 // A=A XOR op 60+yy nzc--v RRA op ROR+ADC op=op RCR 1 // A=A+op+cy C0+yy nzc--- DCP op DEC+CMP op=op-1 // A-op E0+yy nzc--v ISC op INC+SBC op=op+1 // A=A-op-(1-cy) |
07+xx nn 5 nn [nn] 17+xx nn 6 nn,X [nn+X] 03+xx nn 8 (nn,X) [WORD[nn+X]] 13+xx nn 8 (nn),Y [WORD[nn]+Y] 0F+xx nn nn 6 nnnn [nnnn] 1F+xx nn nn 7 nnnn,X [nnnn+X] 1B+xx nn nn 7 nnnn,Y [nnnn+Y] |
0B nn nzc--- 2 ANC #nn AND+ASL A=A AND nn, C=N ;bit7 to carry 2B nn nzc--- 2 ANC #nn AND+ROL A=A AND nn, C=N ;same as above 4B nn nzc--- 2 ALR #nn AND+LSR A=(A AND nn) SHR 1 6B nn nzc--v 2 ARR #nn AND+ROR A=(A AND nn), V=Overflow(A+A), A=A/2+C*80h, C=A.Bit6 CB nn nzc--- 2 AXS #nn CMP+DEX X=(X AND A)-nn EB nn nzc--v 2 SBC #nn SBC+NOP A=A-nn cy? BB nn nn nz---- 4* LAS nnnn,Y LDA+TSX A,X,S = [nnnn+Y] AND S |
xx ------ 2 NOP (xx=1A,3A,5A,7A,DA,FA) xx nn ------ 2 NOP #nn (xx=80,82,89,C2,E2) xx nn ------ 3 NOP nn (xx=04,44,64) xx nn ------ 4 NOP nn,X (xx=14,34,54,74,D4,F4) xx nn nn ------ 4 NOP nnnn (xx=0C) xx nn nn ------ 4* NOP nnnn,X (xx=1C,3C,5C,7C,DC,FC) xx ------ - KIL (xx=02,12,22,32,42,52,62,72,92,B2,D2,F2) |
8B nn nz---- 2 XAA #nn ((2)) TXA+AND A=X AND nn AB nn nz---- 2 LAX #nn ((2)) LDA+TAX A,X=nn BF nn nn nz---- 4* LAX nnnn,X LDA+LDX A,X=[nnnn+X] 93 nn ------ 6 AHX (nn),Y ((1)) [WORD[nn]+Y] = A AND X AND H 9F nn nn ------ 5 AHX nnnn,Y ((1)) [nnnn+Y] = A AND X AND H 9C nn nn ------ 5 SHY nnnn,X ((1)) [nnnn+X] = Y AND H 9E nn nn ------ 5 SHX nnnn,Y ((1)) [nnnn+Y] = X AND H 9B nn nn ------ 5 TAS nnnn,Y ((1)) STA+TXS S=A AND X // [nnnn+Y]=S AND H |
AHX {adr} = stores A&X&H into {adr} SHX {adr} = stores X&H into {adr} SHY {adr} = stores Y&H into {adr} |
CPU Assembler Directives/Syntax |
65XX-style 80XX-style Expl. .native .nocash select native or nocash syntax *=$c100 org 0c100h sets the assumed origin in memory *=*+8 org $+8 increments origin, does NOT produce data label label: sets a label equal to the current address label=$dc00 label equ 0dc00h assigns a value or address to label .by $00 db 00h defines a (list of) byte(s) in memory .byt $00 defb 00h same as .by and db .wd $0000 dw 0000h defines a (list of) word(s) in memory .end end indicates end of source code file |nn [|nn] force 16bit "00NN" instead 8bit "NN" #<nnnn nnnn AND 0FFh isolate lower 8bits of 16bit value #>nnnn nnnn DIV 100h isolate upper 8bits of 16bit value N/A (?) fast label ensure relative jump without page crossing N/A (?) slow label ensure relative jump with page crossing |
.65xx Select 6502 Instruction Set .nes Create NES ROM-Image with .NES extension .c64_prg Create C64 file with .PRG extension/stub/fixed entry .c64_p00 Create C64 file with .P00 extension/stub/fixed entry/header .vic20_prg Create VIC20/C64 file with .PRG extension/stub/relocated entry end entry End of Source, the parameter specifies the entrypoint |
CPU Glitches |
CPU The 65XX Family |
6501 Some sort of 6502 prototype 6502 Used in the CBM floppies and some other 8 bit computers. 6507 Used in Atari 2600, 28pins (only 13 address lines, no /IRQ, no /NMI). 6510 Used in C64, with built-in 6bit I/O port. 7501 Used in C16,C116,Plus/4, with built-in 7bit I/O Port, without /NMI pin. 8500 Used in C64-II, with different pin-outs. 8501 Same as 7501 8502 Used in C128s. |
65C02 Extension of the 6502 65SC02 Small version of the 65C02 which lost a few opcodes again. 65CE02 Extension of the 65C02, used in the C65. 65816 Extended 6502 with new opcodes and 16 bit operation modes. 2A03 Nintendo NES/Famicom, modified 6502 with built-in sound controller. |
CPU Local Usage |
Hardware Pin-Outs |
Chipset Pin-Outs |
Pin Name Dir Expl. 1 ROUT Out Sound channel 1+2 output 2 COUT Out Sound channel 3+4+5 output 3 /RES In Resets several internal 2A03 registers, and the 6502. 4-19 A0-15 Out Address Bus 20 GND - Supply Ground 21-28 D7-0 I/O Data Bus 29 CLK In Master clock input (236,250/11 MHz), clocks an internal divide-by-12 counter. 30 ? In Normally grounded in NES/FC consoles, this pin has unknown functionality. Might be an input controlling something, since the pin does draw a little current. Or might be simply some kind of shielding for the CLK signal? 31 PHI2 Out Divide-by-12 result of the CLK signal (1.79 MHz). The internal 6502 along with function generating hardware, is clocked off this frequency, and is available externally here so that it can be used as a data bus enable signal (when at logic level 1) for external 6502 address decoder logic. The signal has a 62.5% duty cycle. 32 /IRQ In Interrupt Request (Low) 33 /NMI In Non-Maskable Interrupt (on High-to-Low Transition) 34 R/W Out Direction of 6502's data bus (0=Write/Out, 1=Read/In) 35 /JOY2 Out Low if A0-A15=4017h, R/W=0, PHI2=1 36 /JOY1 Out Low if A0-A15=4016h, R/W=0, PHI2=1 37-39 J2-0 Out Bit2-0 of internal register 4016h (Bit0 = Joystick strobe) 40 VCC - Supply +5VDC |
Pin Dir Name Expl 1 In CPU R/W Direction when /CS=LOW 2-9 I/O CPU D0-D7 Data when /CS=LOW 10-12 In CPU A2-A0 Register Select when /CS=LOW 13 In CPU /CS CPU read/write to/from PPU Registers 14-17 I/O EXT0-EXT3 External Master/Slave Video signal (not used) 18 In CLK 21.47727MHz NTSC, 26.601712MHz PAL 19 Out /VBL NMI VBlank, LOW max 20 scanlines or until acknowledged 20 In VEE GND Supply Ground 21 Out VOUT Composite Video output 22 In /SYNC EXT External Master /VBL for use by slave (not used) (*) 23,24 Out PPU /W,/R Video memory Write/Read requests 25-30 Out PPU A13-A8 Video memory MSB-address lines 31-38 I/O PPU AD7-AD0 Video memory LSB-address and data lines 39 Out PPU ALE Address Latch Enable, HIGH when A0-A7 output at AD0-AD7 40 In VCC +5VDC Supply |
NES Expansion Port |
Pin Dir Expl. 1,48,2,47 Out VCC,VCC,GND,GND (Supply +5VDC and Ground) 23 Out VDD voltage from external power supply (usually +10VDC) 3 In AIN (Audio Input) 21,22,23,24 Out VOUT, AOUT (Video and Audio Outputs) 4,14,25-32 I/O CPU /NMI,/IRQ,D7,D6,D5,D4,D3,D2,D1,D0 5,24 Out CPU A15, CIC 4MHz 6-10,38-42 I/O Cart Pin 51-55,20-16 43,44,45 Out OUT0, OUT1, OUT2 (Port 4016h Bit0-2 Outputs) 34 and 37 Out PORT0-CLK (both pins) (CPU Read from Port 4016h) 11 and 17 Out PORT1-CLK (both pins) (CPU Read from Port 4017h) 35,12,33,13,36 In PORT0-0,1,2,3,4 (Port 4016h Bit0-3 Inverted Inputs) 19,20,15,16,18 In PORT1-0,1,2,3,4 (Port 4017h Bit0-3 Inverted Inputs) 46 - Unused |
Nocash SRAM Circuit |
________ ________ ________ VCC ---------|A13-A19 | VCC ------tmp-|A15-A18 | VCC -----tmp-|A13-A18 | CPU A0-A12 --|A0-A12 | CPU A0-A14 ---|A0-A14 | PPU A0-A12 --|A0-A12 | CPU D0-D7 ---|D0-D7 | CPU D0-D7 ----|D0-D7 | PPU D0-D7 ---|D0-D7 | CPU /PRG ----|/CS | CPU /PRG -----|/CS | PPU A13 -tmp-|/CS | LPT /LF -tmp-|/OE BIOS| LPT /SEL -----|/OE WRAM| PPU /R ------|/OE VRAM| |________| CPU R/W ------|/WE | PPU /W ------|/WE | ___ |________| |________| VCC -|___|- CPU /RESET CIC /RESET --cut-- CPU /RESET FLOPPY 5VDC ------- VCC (supply) CIC /RESET --|<|-- CPU /RESET LPT GND ------- GND LPT /INIT --|<|-- CPU /RESET PPU /A13 --tmp-- NES /VCS LPT /STROBE --|<|-- CPU /NMI PPU A10 --tmp-- NES VA10 CIC MODE --cut-- VCC (lockout) LPT BUSY ------- CPU OUT2 CIC MODE ------- GND (no lockout) LPT D7 ------- EXP PORT0-1 |
____ ____ LPT D0 ----|OR \__|AND |_______ NES VA10 (out) PPU A10 --undo-- NES VA10 PPU A10 ---|____/ |7411| LPT D1 ----|OR \__| |__tmp__ VCC (third AND-input, used in Step 3) PPU A11 ---|____/ |____| |
____ ____ ___ CPU /PRG --|OR \__ SLOT /PRG LPT /LF --|AND \__ CART VCC -|___|- LPT /LF /CART -----|____/ LPT /SEL -|____/ VCC -|___|- LPT /SEL PPU /R ----|OR \__ SLOT /R CART -----|NAND\__ /CART VCC -|___|- LPT D0 /CART -----|____/ CART -----|____/ VCC -|___|- LPT D1 CART ------|OR \__ VRAM /CS CPU A14 --|AND \__ SLOT A14 PPU A13 ---|____/ CART -----|____/ NES /VCS --cut-- SLOT /VCS /CART -----|OR \__ AND (Step 2) NES VA10 --cut-- SLOT VA10 SLOT VA10 -|____/ CPU A14 --cut-- SLOT A14 CART ------|OR \__ ____ CPU /PRG --cut-- SLOT /PRG PPU /A13 --|____/ |AND \__ NES /VCS PPU /R --cut-- SLOT /R SLOT /VCS -|OR \__|____/ VCC --undo-- AND (Step 2) /CART -----|____/ PPU A13 -undo- VRAM /CS PPU /A13 --undo- NES /VCS |
__________ __________ ____ LPT /LF ----|/CLKEN1 | LPT LF -----|/CLKEN1 | WRAM A14 --|____|-- VCC CPU R/W ----|/CLKEN2 | CPU R/W ----|/CLKEN2 | WRAM A15 --|____|-- VCC CPU /PRG ---|CLK | CPU /PRG ---|CLK | WRAM A16 --|____|-- VCC CPU D0..3 --|D0..3 | CPU D0..3 --|D0..3 | LPT /LF ---|NAND\_ LPT LF GND --------|/OE1 | CPU A14 ----|/OE1 | LPT /LF ---|____/ GND --------|/OE2 74173| GND --------|/OE2 74173| LPT /SEL --|NAND\_ BIOS GND --------|RST CNROM| GND --------|RST UNROM| LPT LF ----|____/ /OE VRAM A13-16-|Q0..3 | WRAM A14-16-|Q0..2 | WRAM A15-A16 --undo-- VCC |__________| |__________| VRAM A13-A16 --undo-- VCC LPT /LF --undo-- BIOS /OE WRAM A14 --undo-- CPU A14 |
____ ____ __________ CPU A13 --|AND | CPU /PRG -|AND | ____ CPU D0-7--|Q0-7 D0-7|--LPT D0-7 CPU A14 --|7411| CPU R/W --|7411| VCC-|NAND\__________|/OE1 /OE2|--LPT /SEL CPU PHI2 -|____|-----------|____|-----|____/ 74541 |__________| |
2 SRAM WRAM/VRAM, min 32K/8K, recommended 128K/32K, max 128K/128K 1 EPROM BIOS, 27C64 or similar, min 8K 2 74LS32 quad 2-input OR gates 1 74LS08 quad 2-input AND gates 1 74LS00 quad 2-input NAND gates 1 74LS11 triple 3-input AND gates 2 74LS173 4-bit 3-state flip-flops 1 74LS541 8-bit 3-state buffer/line driver 8 10K pull-up resitors 3 1N4148 diodes for /RESET and /NMI |
0000 85 04 48 8A 48 A9 19 8D FA FF A9 04 8D FB FF A2 0010 08 E0 00 D0 FC 68 AA 68 60 A9 00 06 04 69 03 8D 0020 16 40 CA 40 8A 48 A9 3B 8D FA FF A9 04 8D FB FF 0030 A2 08 E0 00 D0 FC 68 AA A5 04 60 24 0D 30 09 AD 0040 16 40 4A 4A 26 04 CA 40 AD 00 60 85 04 A2 00 40 0050 20 24 04 A2 7E A0 04 24 0D 30 04 A2 8D A0 04 8E 0060 FA FF 8C FB FF 8D FF FF A9 00 8D 01 20 8D 06 20 0070 8D 06 20 A2 00 A0 20 A9 01 85 04 4C 7B 04 AD 00 0080 60 8D 07 20 CA D0 FE 88 D0 FE 4C 1C 06 AD 16 40 0090 4A 4A 26 04 90 FE A5 04 8D 07 20 A9 01 85 04 CA 00A0 D0 FE 88 D0 FE 4C 1C 06 20 24 04 A2 DC A0 04 24 00B0 0D 30 04 A2 EE A0 04 8E FA FF 8C FB FF 8D FF FF 00C0 A0 BF A2 FF C9 FF D0 04 A0 FF A2 F9 8C FC 04 8C 00D0 E2 04 E8 A0 40 A9 01 85 04 4C D9 04 AD 00 60 CA 00E0 9D 00 FF D0 FE CE E2 04 88 D0 FE 4C 1C 06 AD 16 00F0 40 4A 4A 26 04 90 FE A5 04 CA 9D 00 FF A9 01 85 0100 04 E0 00 D0 FE CE FC 04 88 D0 FE 4C 1C 06 A2 00 0110 20 24 04 95 05 E8 E0 08 D0 F6 A2 00 B5 05 9D FA 0120 FF E8 E0 06 D0 F6 A1 05 81 05 4C 2A 05 A2 55 A0 0130 AA 8E FE FF 8C FF FF EC FE FF D0 F5 CC FF FF D0 0140 F0 8C FE FF 8E FF FF CC FE FF D0 E5 EC FF FF D0 0150 E0 60 A2 00 BD 61 05 20 00 04 E8 BD 61 05 D0 F4 0160 60 4E 4F 24 4E 45 53 20 42 49 4F 53 20 56 31 2E 0170 30 00 A9 00 85 0D 20 87 05 A9 80 85 0D 20 87 05 0180 F0 04 A9 00 85 0D 60 A2 00 A0 2B 20 24 04 DD A1 0190 05 F0 02 A0 2D E8 E0 08 D0 F1 98 20 00 04 C9 2B 01A0 60 00 FF 55 AA 0F F0 3C C3 A9 57 20 00 04 A2 FF 01B0 8D FF FF E8 8E 00 80 8E FF BF EC FF FF F0 06 E0 01C0 1F D0 F0 A2 01 E8 8A 20 00 04 60 A9 56 20 00 04 01D0 A2 40 A0 56 A9 00 8D 01 20 CA 8E FF FF 8D 06 20 01E0 8D 06 20 8C 07 20 8E 07 20 D0 EE A2 00 8E FF FF 01F0 8D 06 20 8D 06 20 CD 07 20 CC 07 20 D0 0A EC 07 0200 20 D0 05 E8 E0 40 D0 E5 8A 20 00 04 60 20 2D 05 0210 20 52 05 20 72 05 20 A9 05 20 CB 05 A9 52 20 00 0220 04 20 24 04 C9 57 D0 03 4C A8 04 C9 56 D0 03 4C 0230 50 04 C9 46 D0 03 4C 0E 05 4C 39 06 A2 00 BD 00 0240 E0 9D 00 04 BD 00 E1 9D 00 05 BD 00 E2 9D 00 06 0250 BD 00 E3 9D 00 07 E8 D0 E5 60 78 D8 A9 00 8D 00 0260 20 AD 02 20 A2 FF 9A 20 3C E2 4C 0D 06 FF FF FF 0270 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF .... FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 1FF0 FF FF FF FF FF FF FF FF FF FF 00 00 5A E2 00 00 |
About Everynes |
http://problemkaputt.de/nes.htm |
Pascal Felber Patrick Lesaard Tink Goroh Pan of Anthrox Bas Vijfwinkel Kawasedo Paul Robson Marcel de Kogel Serge Skorobogatov Alex Krasivsky John Stiles |
Index |