Doctor PC Jr File Format (.PCJ) Revision 1.1 ------------------------------- ------------- Written by JDC . Provided by Bondman. Original documentation written by Bung. Special thanks to VividX. Some errors corrected by Chris Covell. +---------+------+------------------------------------------------------+ | Offset | Size | Content(s) | |HEX DEC | (DEC)| | +---------+------+------------------------------------------------------+ |$00 0 | 8 | 'FC GAMES' | |$08 8 | 1 | PRG-ROM page count | |$09 9 | 1 | CHR-ROM page count | | | | | |$0A 10 | 1 | Trainer PRG-ROM Address | | | | * Upper 8-bit portion of the 16-bit PRG-ROM | | | | address to load the trainer into. Valid values | | | | are $60-$7F ($6000-$7F00 in PRG-ROM). | | | | | |$0B 11 | 2 | Initial RESET Vector | | | | * 16-bit vector to start executing code at. | | | | | |$0D 13 | 1 | 512-byte Trainer page count (maximum $10 (8K)). | | | | | |$0E 14 | 1 | Mapper Type & Mirroring | | | | (NOTE: Applies to "Old Game" Mode carts __ONLY__) | | | | D7-D5: Mapper Type Definition (see below) | | | | D4: Mirroring | | | | 0 = Vertical | | | | 1 = Horizontal | | | | D3-D0: Unused | | | | | |$0F 15 | 1 | Trainer Enable/Disable | | | | D7: 0 = Disabled (use standard RESET vector) | | | | 1 = Enabled (use vector @ bytes 11-12) | | | | D6-D0: Unused. | | | | | |$10 16 | 1 | $00 | | | | | |$11 17 | 1 | Game Mode Control #2 | | | | D7: MMC2 Specification | | | | 0 = MMC2 not used | | | | 1 = Specifies MMC2a/b (Punch Out) cart | | | | D6: Unused. | | | | D5-D4: Cart Type | | | | 00 = "Old Game" Mode | | | | 01 = "New Game" Mode | | | | 10 = MMC1 | | | | 11 = MMC3 | | | | D3-D2: "New Game" Mode PRG-ROM page size | | | | 00 = 8K | | | | 01 = 16K | | | | 10 = 32K | | | | D1-D0: "New Game" Mode CHR-ROM page size | | | | 00 = 1K | | | | 01 = 2K | | | | 10 = 4K | | | | 11 = 8K | | | | | |$12 18 | 1 | CHR-ROM/RAM Type, Mirroring, IRQ Control | | | | (NOTE: These apply to "New Game" Mode carts only) | | | | D7: Character Type | | | | 0 = CHR-ROM is ROM | | | | 1 = CHR-ROM is actually RAM | | | | D6-D4: Mirroring Select | | | | 000 = Name Table #0 fixed | | | | 001 = Name Table #1 fixed | | | | 010 = Horizontal | | | | 011 = Vertical | | | | 100 = Name Table #0/1 selectable | | | | 101 = Horizontal/Vertical selectable | | | | 110 = NT #0/1 and H/V selectable | | | | D3-D2: VRAM Layout | | | | 00 = Single screen | | | | 01 = Two-screen VRAM layout | | | | 10 = Four-screen VRAM layout | | | | D1-D0: IRQ & Counters | | | | 00 = No counter used | | | | 01 = PPU line counter | | | | 10 = CPU clock counter (up) | | | | 11 = CPU clock counter (down) | | | | | |$13 19 | 1 | Address-line Masks (A18-A15 address lines) | | | | D7-D4: PRG-ROM mask | | | | D3-D0: CHR-ROM mask | | | | 0000 = 256Kbit | | | | .. | | | | 1111 = 4Mbit | | | | | |$14 20 | 11 | $00 | |$20 32 | 1 | Store at $4190 (PC Jr register) --+ | |$21 33 | 1 | Store at $4191 (PC Jr register) +- PRG-ROM Control | |$22 34 | 1 | Store at $4192 (PC Jr register) | | |$23 35 | 1 | Store at $4193 (PC Jr register) --+ | |$24 36 | 1 | Store at $4194 (PC Jr register) --+ | |$25 37 | 1 | Store at $4195 (PC Jr register) +- PPU Control | |$26 38 | 1 | Store at $4196 (PC Jr register) | | |$27 39 | 1 | Store at $4197 (PC Jr register) --+ | |$28 40 | 1 | Store at $4198 (PC Jr register) --+ | |$29 41 | 1 | Store at $4199 (PC Jr register) | | |$2A 42 | 1 | Store at $419A (PC Jr register) | | |$2B 43 | 1 | Store at $419B (PC Jr register) +- CHR-ROM Control | |$2C 44 | 1 | Store at $419C (PC Jr register) | | |$2D 45 | 1 | Store at $419D (PC Jr register) | | |$2E 46 | 1 | Store at $419E (PC Jr register) | | |$2F 47 | 1 | Store at $419F (PC Jr register) --+ | |$30 48 | 4 | $00 | | | | | |$34? 52?| 1 | SRAM Control | | | | D7-D1: Unused | | | | D0: 0 = Disable SRAM | | | | 1 = Enable SRAM ($6000-7FFF) | | | | | |$35? 53?| 458 | $00 | +---------+------+------------------------------------------------------+ |$200 512-| | Trainer pages (in linear order) | | ... | | | | ...-... | | PRG-ROM pages (valid sizes: 8K-512K) | | ... | | | | ...-... | | CHR-ROM pages (valid sizes: 8K-512K) | +---------+------+------------------------------------------------------+ PC Jr. Notes ------------ Registers $41A0: IRQ line counter $41A2: Low byte of CPU clock counter $41A3: High byte of CPU clock counter $41A4: Counter Enable/Disable (Enable: Bit #0 = 1) Mapper Type Definitions ----------------------- Bits D7-D5 of byte 14 in the .PCJ header specifies what mapper to use when "Old Game" Mode is selected. There are eight (8) mappers available when using the "Old Game" Mode. Most of these mappers do corrispond with iNES mappers, but do not match the specifications exactly. I'm sure conversion to an iNES format is easily possible... +-------+-------------+---------------------------------------------+ | D7-D5 | Closest | Description | | | iNES Mapper | | +-------+-------------+---------------------------------------------+ | 000 | #2 (UNROM) | PRG-ROM Page Size: 16K | | | | PRG-ROM Page Count: 8 (maximum) | | | | PRG-ROM Wiring: Last 16K page at $C000 | | | | CHR-RAM Page Size: 8K | | | | CHR-RAM Page Count: Not swappable | | | +---------------------------------------------+ | | | PRG-ROM Swapping: D2-D0 in $8000-FFFF | | | | PRG-ROM Swap Addr: $8000-BFFF | +-------+-------------+---------------------------------------------+ | 001 | #8: FFE | PRG-ROM Page Size: 16K | | | F3xxx | PRG-ROM Page Count: 8 (maximum) | | | | PRG-ROM Wiring: Last 16K page at $C000 | | | | CHR-ROM Page Size: 8K | | | | CHR-ROM Page Count: 4 (maximum) | | | +---------------------------------------------+ | | | PRG-ROM Swapping: D4-D2 in $8000-FFFF | | | | PRG-ROM Swap Addr: $8000-BFFF | | | | CHR-ROM Swapping: D1-D0 in $8000-FFFF | +-------+-------------+---------------------------------------------+ | 010 | #2 (UNROM) | PRG-ROM Page Size: 16K | | | | PRG-ROM Page Count: 16 (maximum) | | | | PRG-ROM Wiring: Last 16K page at $C000 | | | | CHR-RAM Page Size: 8K | | | | CHR-RAM Page Count: Not swappable | | | +---------------------------------------------+ | | | PRG-ROM Swapping: D3-D0 in $8000-FFFF | | | | PRG-ROM Swap Addr: $8000-BFFF | +-------+-------------+---------------------------------------------+ | 011 | | PRG-ROM Page Size: 16K | | | | PRG-ROM Page Count: 16 (maximum) | | | | PRG-ROM Wiring: Last 16K page at $8000 | | | | CHR-ROM Page Size: 8K | | | | CHR-ROM Page Count: 4 (maximum) | | | +---------------------------------------------+ | | | PRG-ROM Swapping: D3-D0 in $8000-FFFF | | | | PRG-ROM Swap Addr: $C000-FFFF | | | | CHR-ROM Swapping: D5-D4 in $8000-FFFF | +-------+-------------+---------------------------------------------+ | 100 | #xx: GNROM | PRG-ROM Page Size: 32K | | | | PRG-ROM Page Count: 4 (maximum) | | | *OR* | PRG-ROM Wiring: None | | | | CHR-ROM Page Size: 8K | | | #11: Color | CHR-ROM Page Count: 4 (maximum) | | | Dreams +---------------------------------------------+ | | (Note: CD | PRG-ROM Swapping: D5-D4 in $8000-FFFF | | |Games can use| PRG-ROM Swap Addr: $8000-FFFF | | |up to 16 CHR | CHR-ROM Swapping: D1-D0 in $8000-FFFF | | | pages!!) | | +-------+-------------+---------------------------------------------+ | 101 | #3: CNROM | PRG-ROM Page Size: 32K | | | | PRG-ROM Page Count: Not swappable | | | | PRG-ROM Wiring: 32K page at $8000 | | | | CHR-ROM Page Size: 8K | | | | CHR-ROM Page Count: 4 (maximum) | | | +---------------------------------------------+ | | | CHR-ROM Swapping: D1-D0 in $8000-FFFF | +-------+-------------+---------------------------------------------+ | 110 | #3: CNROM | PRG-ROM Page Size: 32K | | | | PRG-ROM Page Count: Not swappable | | | | PRG-ROM Wiring: 32K page at $8000 | | | | CHR-ROM Page Size: 8K | | | | CHR-ROM Page Count: 2 (maximum) | | | +---------------------------------------------+ | | | CHR-ROM Swapping: D0 in $8000-FFFF | +-------+-------------+---------------------------------------------+ | 111 | #0: None | PRG-ROM Page Size: 32K | | | | PRG-ROM Page Count: Not swappable | | | | PRG-ROM Wiring: 32K page at $8000 | | | | CHR-ROM Page Size: 8K | | | | CHR-ROM Page Count: Not swappable | +-------+-------------+---------------------------------------------+ Header Examples --------------- These are taken directly from Bung. Bleh. (Bleh indeed; I cleaned them up a bit. -CMC.) (old game mode, ppu feedback='V', program 8K + CG 8K rom) 00: 46 43 20 47 41 4D 45 53-01 01 00 00 00 00 F0 00 FC GAMES........ 10: 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00 ..P............. 20: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 30: 00 00 00 00 00 01 00 00-00 00 00 00 00 00 00 00 ................ 40: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 50: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 60: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 70: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ (old game mode, ppu feedback='V', 16k bank in 8000h--bfffh, program 128K ROM + CG 8K RAM) 00: 46 43 20 47 41 4D 45 53-10 00 00 00 00 00 10 00 FC GAMES........ 10: 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00 ..P............. 20: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 30: 00 00 00 00 00 01 00 00-00 00 00 00 00 00 00 00 ................ 40: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 50: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 60: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 70: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ (128K+128K MMC1) 00: 46 43 20 47 41 4D 45 53-10 10 00 00 00 00 00 00 FC GAMES........ 10: 00 20 60 33 00 00 00 00-00 00 00 00 00 00 00 00 .`3............. 20: FF 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 30: 00 00 00 00 00 01 00 00-00 00 00 00 00 00 00 00 ................ 40: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 50: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 60: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 70: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ (128K+128K MMC3) 00: 46 43 20 47 41 4D 45 53-10 10 00 00 00 00 00 00 FC GAMES........ 10: 00 30 50 33 00 00 00 00-00 00 00 00 00 00 00 00 .0P3............ 20: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 30: 00 00 00 00 00 01 00 00-00 00 00 00 00 00 00 00 ................ 40: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 50: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 60: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 70: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ (Punch Out 128K+128K RD387-1) 00: 46 43 20 47 41 4D 45 53-10 10 00 00 00 00 00 00 FC GAMES........ 10: 00 92 50 33 00 00 00 00-00 00 00 00 00 00 00 00 ..P3............ 20: 00 0D 0E 0F 00 00 00 00-00 00 00 00 00 00 00 00 ................ 30: 00 00 00 00 00 01 00 00-00 00 00 00 00 00 00 00 ................ 40: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 50: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 60: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 70: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ (Super Mario 3 : 256K+128K MMC3) 00: 46 43 20 47 41 4D 45 53-20 10 00 00 00 00 00 00 FC GAMES........ 10: 00 30 50 73 00 00 00 00-00 00 00 00 00 00 00 00 .0Ps............ 20: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 30: 00 00 00 00 00 01 00 00-00 00 00 00 00 00 00 00 ................ 40: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 50: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 60: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 70: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ (After Burner 128K+256K Sunsoft-4) 00: 46 43 20 47 41 4D 45 53-10 20 70 00 00 01 00 00 FC GAMES.p..... 10: 00 15 64 37 00 00 00 00-00 00 00 00 00 00 00 00 ..d7............ 20: 00 00 07 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 30: 00 00 00 00 00 01 00 00-00 00 00 00 00 00 00 00 ................ 40: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 50: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 60: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 70: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................