1992 Contra 120 in 1: Difference between revisions
(9 intermediate revisions by the same user not shown) | |||
Line 3: | Line 3: | ||
Versions known : | Versions known : | ||
* 1992 Contra 120 in 1 : NES version (72-pin) | * 1992 Contra Super 120 in 1 : NES version (72-pin) | ||
== Hardware == | == Hardware == | ||
Line 22: | Line 22: | ||
| 8M12 - 5003AJ213-PA20C - S22431 - H9208 || Probably 1 MB chip (need confirmation) | | 8M12 - 5003AJ213-PA20C - S22431 - H9208 || Probably 1 MB chip (need confirmation) | ||
|- | |- | ||
| Hyundai HY6264LP-10 - 9040D || | | Hyundai HY6264LP-10 - 9040D || 8K x 8-bit CMOS SRAM, 150ns | ||
|- | |- | ||
!colspan="2"| Usual fonctionnal chips | !colspan="2"| Usual fonctionnal chips | ||
Line 28: | Line 28: | ||
!colspan="1"| Chips || Description | !colspan="1"| Chips || Description | ||
|- | |- | ||
| GD74LS161A - 9204 - GoldStar || | | GD74LS161A - 9204 - GoldStar || Binary Counter, LS Series, Synchronous, Positive Edge Triggered, 4-Bit, Up Direction, TTL, PDIP16 | ||
|- | |- | ||
| GD74LS32 - 9211 - GoldStar || | | GD74LS32 - 9211 - GoldStar || OR Gate, LS Series, 4-Func, 2-Input, TTL, PDIP14 | ||
|- | |- | ||
| GD74LS157 - 9220 - GoldStar || | | GD74LS157 - 9220 - GoldStar || Multiplexer, LS Series, 4-Func, 2 Line Input, 1 Line Output, True Output, TTL, PDIP16 | ||
|- | |- | ||
| HD74HC02P - 1K45 || | | HD74HC02P - 1K45 || NOR Gate, HC/UH Series, 4-Func, 2-Input, CMOS, PDIP14 | ||
|- | |- | ||
| GD74LS273 - 9209 - GoldStar || | | GD74LS273 - 9209 - GoldStar || D Flip-Flop, LS Series, 1-Func, Positive Edge Triggered, 8-Bit, True Output, TTL, PDIP20 | ||
|- | |- | ||
| GD74LS02 - 9215 - GoldStar || | | GD74LS02 - 9215 - GoldStar || NOR Gate, LS Series, 4-Func, 2-Input, TTL, PDIP14 | ||
|- | |- | ||
| GD74LS153 - 9217 - GoldStar || | | GD74LS153 - 9217 - GoldStar || Multiplexer, LS Series, 2-Func, 4 Line Input, 1 Line Output, True Output, TTL, PDIP16 | ||
|} | |} | ||
Line 55: | Line 55: | ||
+---------- UNROM bank | +---------- UNROM bank | ||
</pre> | </pre> | ||
The CHR part is a RAM chip, so it doesn't contain any datas to dump. | |||
== Software == | == Software == | ||
Line 60: | Line 62: | ||
The 120 in 1 rom contains 512 KB of PRG and no CHR. | The 120 in 1 rom contains 512 KB of PRG and no CHR. | ||
The rom has been dumped and assigned to the [[ | The rom has been dumped and assigned to the submapper 1 of the [[INES Mapper 227]] on the 25 march 2023. | ||
It contains 13 different games that can be beginned at different levels. | It contains 13 different games that can be beginned at different levels. | ||
Line 79: | Line 81: | ||
| [[File:dumpN120_72.lua.txt|frame|center|dumpN120_72.lua]] | | [[File:dumpN120_72.lua.txt|frame|center|dumpN120_72.lua]] | ||
|- | |- | ||
| [[ | |<pre>-- create the module's table | ||
local dumpn120_72 = {} | |||
-- import required modules | |||
local dict = require "scripts.app.dict" | |||
local nes = require "scripts.app.nes" | |||
local dump = require "scripts.app.dump" | |||
local flash = require "scripts.app.flash" | |||
local time = require "scripts.app.time" | |||
local files = require "scripts.app.files" | |||
local swim = require "scripts.app.swim" | |||
local buffers = require "scripts.app.buffers" | |||
-- local functions | |||
local function create_header( file, prgKB, chrKB ) | |||
-- Mapper : 227 ; Mirroring : 0 (Horizontal) | |||
nes.write_header( file, prgKB, chrKB, 227, 0) | |||
end | |||
--dump the PRG ROM | |||
local function dump_prgrom( file, rom_size_KB, debug ) | |||
--PRG-ROM dump 16KB at a time | |||
local KB_per_read = 16 | |||
local num_reads = rom_size_KB / KB_per_read | |||
local read_count = 0 | |||
local addr_base = 0x80 -- $8000 | |||
print("CPU dump :") | |||
while ( read_count < num_reads ) | |||
do | |||
if debug then print( "dump PRG part ", read_count, " of ", num_reads) end | |||
-- pause of 1 second to take care about the chips | |||
local time=os.clock()+1 | |||
while time>os.clock() | |||
do | |||
end | |||
dict.nes("NES_CPU_WR", 0x8000 | ((read_count & 0x1f) << 2) | ((read_count << 3) & (1 << 8)) , read_count) | |||
dump.dumptofile( file, KB_per_read, addr_base, "NESCPU_PAGE", false ) | |||
read_count = read_count + 1 | |||
end | |||
end | |||
--Cart should be in reset state upon calling this function | |||
--this function processes all user requests for this specific board/mapper | |||
--local function process( test, read, erase, program, verify, dumpfile, flashfile, verifyfile) | |||
local function process(process_opts, console_opts) | |||
local test = process_opts["test"] | |||
local read = process_opts["read"] | |||
local erase = process_opts["erase"] | |||
local program = process_opts["program"] | |||
local verify = process_opts["verify"] | |||
local dumpfile = process_opts["dump_filename"] | |||
local flashfile = process_opts["flash_filename"] | |||
local verifyfile = process_opts["verify_filename"] | |||
local rv = nil | |||
local file | |||
local prg_size = console_opts["prg_rom_size_kb"] | |||
local chr_size = console_opts["chr_rom_size_kb"] | |||
local wram_size = console_opts["wram_size_kb"] | |||
--initialize device i/o for NES | |||
dict.io("IO_RESET") | |||
dict.io("NES_INIT") | |||
print("\nRunning dumpN120_72.lua") | |||
--dump the cart to dumpfile | |||
if read then | |||
print("\nDumping ROM...") | |||
file = assert(io.open(dumpfile, "wb")) | |||
--create header: pass open & empty file & rom sizes | |||
create_header(file, prg_size, chr_size) | |||
--TODO find bank table to avoid bus conflicts! | |||
--dump cart into file | |||
time.start() | |||
--dump cart into file | |||
dump_prgrom(file, prg_size, false) | |||
time.report(prg_size) | |||
--close file | |||
assert(file:close()) | |||
print("DONE Dumping ROM") | |||
end | |||
dict.io("IO_RESET") | |||
end | |||
-- functions other modules are able to call | |||
dumpn120_72.process = process | |||
</pre> | -- return the module's table | ||
return dumpn120_72</pre> | |||
|} | |} | ||
Line 92: | Line 195: | ||
The NES header of the rom is to set to | The NES header of the rom is to set to : | ||
<pre> | <pre> | ||
4E 45 53 1A 20 00 30 E8 10 00 00 00 00 00 00 00 | |||
</pre> | </pre> | ||
== Games Menu == | == Games Menu == | ||
There are 13 unique games and the same games at different levels | There are 13 unique games and the same games at different levels : | ||
* 1942 | |||
* Arkanoid | |||
* B-Wings | |||
* Battle City | |||
* Bomber Man 1 | |||
* Contra | |||
* Dig Dug | |||
* Field Combat | |||
* Galaxian | |||
* Ninja-Kun | |||
* Super Mario Bros 1 (Platforms / 1986) | |||
* Tetris (Tengen) | |||
* TwinBee | |||
{| class="wikitable" align="center" style="margin: auto;" | {| class="wikitable" align="center" style="margin: auto;" |
Latest revision as of 16:22, 27 March 2023
Description
The cartridge is a multigames cartridge dated from 1992.
Versions known :
- 1992 Contra Super 120 in 1 : NES version (72-pin)
Hardware
NES PCB (Front mirrored picture) | NES PCB (Bottom picture) |
---|---|
Datas chips | |
---|---|
Chips | Description |
8M12 - 5003AJ213-PA20C - S22431 - H9208 | Probably 1 MB chip (need confirmation) |
Hyundai HY6264LP-10 - 9040D | 8K x 8-bit CMOS SRAM, 150ns |
Usual fonctionnal chips | |
Chips | Description |
GD74LS161A - 9204 - GoldStar | Binary Counter, LS Series, Synchronous, Positive Edge Triggered, 4-Bit, Up Direction, TTL, PDIP16 |
GD74LS32 - 9211 - GoldStar | OR Gate, LS Series, 4-Func, 2-Input, TTL, PDIP14 |
GD74LS157 - 9220 - GoldStar | Multiplexer, LS Series, 4-Func, 2 Line Input, 1 Line Output, True Output, TTL, PDIP16 |
HD74HC02P - 1K45 | NOR Gate, HC/UH Series, 4-Func, 2-Input, CMOS, PDIP14 |
GD74LS273 - 9209 - GoldStar | D Flip-Flop, LS Series, 1-Func, Positive Edge Triggered, 8-Bit, True Output, TTL, PDIP20 |
GD74LS02 - 9215 - GoldStar | NOR Gate, LS Series, 4-Func, 2-Input, TTL, PDIP14 |
GD74LS153 - 9217 - GoldStar | Multiplexer, LS Series, 2-Func, 4 Line Input, 1 Line Output, True Output, TTL, PDIP16 |
111111 5432109876543210 [1.....bPxPPPPpmv] | | |+- 0=16K,1=32K | | +-- 0=V, 1=H | +-------- 1=NROM, 0=UNROM +---------- UNROM bank
The CHR part is a RAM chip, so it doesn't contain any datas to dump.
Software
The 120 in 1 rom contains 512 KB of PRG and no CHR.
The rom has been dumped and assigned to the submapper 1 of the INES Mapper 227 on the 25 march 2023.
It contains 13 different games that can be beginned at different levels.
The rom is fully supported from FCEUX 2.6.6.
Dumping method
For dumping this cartridge, it's necessary to short-circuit this capacitor (by putting an electric wire between its two pins) :
This short-circuit in place, this script can dump the cartridge with the INLretro-prog dumper (Device firmware version: 2.3.x) :
dumpN120_72.lua |
---|
File:DumpN120 72.lua.txt |
-- create the module's table local dumpn120_72 = {} -- import required modules local dict = require "scripts.app.dict" local nes = require "scripts.app.nes" local dump = require "scripts.app.dump" local flash = require "scripts.app.flash" local time = require "scripts.app.time" local files = require "scripts.app.files" local swim = require "scripts.app.swim" local buffers = require "scripts.app.buffers" -- local functions local function create_header( file, prgKB, chrKB ) -- Mapper : 227 ; Mirroring : 0 (Horizontal) nes.write_header( file, prgKB, chrKB, 227, 0) end --dump the PRG ROM local function dump_prgrom( file, rom_size_KB, debug ) --PRG-ROM dump 16KB at a time local KB_per_read = 16 local num_reads = rom_size_KB / KB_per_read local read_count = 0 local addr_base = 0x80 -- $8000 print("CPU dump :") while ( read_count < num_reads ) do if debug then print( "dump PRG part ", read_count, " of ", num_reads) end -- pause of 1 second to take care about the chips local time=os.clock()+1 while time>os.clock() do end dict.nes("NES_CPU_WR", 0x8000 | ((read_count & 0x1f) << 2) | ((read_count << 3) & (1 << 8)) , read_count) dump.dumptofile( file, KB_per_read, addr_base, "NESCPU_PAGE", false ) read_count = read_count + 1 end end --Cart should be in reset state upon calling this function --this function processes all user requests for this specific board/mapper --local function process( test, read, erase, program, verify, dumpfile, flashfile, verifyfile) local function process(process_opts, console_opts) local test = process_opts["test"] local read = process_opts["read"] local erase = process_opts["erase"] local program = process_opts["program"] local verify = process_opts["verify"] local dumpfile = process_opts["dump_filename"] local flashfile = process_opts["flash_filename"] local verifyfile = process_opts["verify_filename"] local rv = nil local file local prg_size = console_opts["prg_rom_size_kb"] local chr_size = console_opts["chr_rom_size_kb"] local wram_size = console_opts["wram_size_kb"] --initialize device i/o for NES dict.io("IO_RESET") dict.io("NES_INIT") print("\nRunning dumpN120_72.lua") --dump the cart to dumpfile if read then print("\nDumping ROM...") file = assert(io.open(dumpfile, "wb")) --create header: pass open & empty file & rom sizes create_header(file, prg_size, chr_size) --TODO find bank table to avoid bus conflicts! --dump cart into file time.start() --dump cart into file dump_prgrom(file, prg_size, false) time.report(prg_size) --close file assert(file:close()) print("DONE Dumping ROM") end dict.io("IO_RESET") end -- functions other modules are able to call dumpn120_72.process = process -- return the module's table return dumpn120_72 |
Under UNIX, the commands to run are :
./inlretro -s scripts/inlretro3.lua -c NES -m dumpn120_72 -x 512 -d 120in1-contra-1992.nes
The NES header of the rom is to set to :
4E 45 53 1A 20 00 30 E8 10 00 00 00 00 00 00 00
Games Menu
There are 13 unique games and the same games at different levels :
- 1942
- Arkanoid
- B-Wings
- Battle City
- Bomber Man 1
- Contra
- Dig Dug
- Field Combat
- Galaxian
- Ninja-Kun
- Super Mario Bros 1 (Platforms / 1986)
- Tetris (Tengen)
- TwinBee
Cartridge Menu | |||
---|---|---|---|
N° | Game Name | Original Game Name | Level |
001 | CONTRA | Contra | Stage 1 |
002 | TETRIS 2 | Tetris (Tengen) | |
003 | SUPER MARIO | Super Mario Bros 1 (Platforms / 1986) | World 1-1 |
004 | ARKANOID | Arkanoid | Round 1 |
005 | ASUIT CONTRA | Contra | Stage 1 |
006 | TANK | Battle City | Stage 1 |
007 | GALAXIAN | Galaxian | Flag 1 |
008 | FIAME CONTRA | Contra | Stage 1 |
009 | DIG DUG | Dig Dug | Round 1 |
010 | TWIN BEE | TwinBee | |
011 | SHOTE CONTRA | Contra | Stage 1 |
012 | 1942 | 1942 | |
013 | BOMBER MAN | Bomber Man 1 | Stage 1 |
014 | CONTRA 30 | Contra | Stage 1 |
015 | TANK USA | Battle City | Stage 4 |
016 | B-WINGS | B-Wings | Stage 1 |
017 | ASUIT CONTRA 30 | Contra | Stage 1 |
018 | SPEED MARIO | Super Mario Bros 1 (Platforms / 1986) | World 1-1 |
019 | NINJA | Ninja-Kun | Scene 1 |
020 | FIAME CONTRA 30 | Contra | Stage 1 |
021 | ARKANOID 2 | Arkanoid | Round 4 |
022 | DIG DUG 2 | Dig Dug | Round 2 |
023 | SHOTE CONTRA 30 | Contra | Stage 1 |
024 | TANK CHN | Battle City | Stage 7 |
025 | B-WINGS WID | B-Wings | Stage 1 |
026 | BASE1 | Contra | Stage 2 – Base 1 |
027 | NINJA 2 | Ninja-Kun | Scene 2 |
028 | BOMBER MAN OT | Bomber Man 1 | Stage 1 |
029 | WATERFALL | Contra | Stage 3 |
030 | GALAXIAN 2 | Galaxian | Flag 2 |
031 | COMBAT | Field Combat | |
032 | BASE2 | Contra | Stage 4 – Base 2 |
033 | SUPER MARIO 2 | Super Mario Bros 1 (Platforms / 1986) | World 2-1 |
034 | TANK JPN | Battle City | Stage 10 |
035 | SNOW FIELD | Contra | Stage 5 |
036 | DIG DUG 3 | Dig Dug | Round 3 |
037 | ARKANOID 3 | Arkanoid | Round 7 |
038 | ENERGY ZONE | Contra | Stage 6 |
039 | NINJA 3 | Ninja-Kun | Scene 3 |
040 | B-WINGS MT | B-Wings | Stage 1 |
041 | HENGAR | Contra | Stage 7 |
042 | TANK IRN | Battle City | Stage 13 |
043 | NINJA 4 | Ninja-Kun | Scene 4 |
044 | ALIEN LAIR | Contra | Stage 8 |
045 | DIG DUG 4 | Dig Dug | Round 4 |
046 | GALAXIAN 3 | Galaxian | Flag 3 |
047 | BASE1 ASU | Contra | Stage 2 – Base 1 |
048 | SUPER MARIO 3 | Super Mario Bros 1 (Platforms / 1986) | World 3-1 |
049 | TANK ISR | Battle City | Stage 16 |
050 | WATERFALL ASU | Contra | Stage 3 |
051 | B-WINGS VAN | B-Wings | Stage 1 |
052 | ARKANOID 4 | Arkanoid | Round A |
053 | BASE2 ASU | Contra | Stage 4 – Base 2 |
054 | COMBAT AX | Field Combat | |
055 | BOMBER MAN NS | Bomber Man 1 | Stage 1 |
056 | SNOW FIELD ASU | Contra | Stage 5 |
057 | TANK-I | Battle City | Stage 19 |
058 | NINJA 5 | Ninja-Kun | Scene 5 |
059 | ENERGY ZONE ASU | Contra | Stage 6 |
060 | BOMBER MAN RP | Bomber Man 1 | Stage 1 |
061 | DIG DUG 5 | Dig Dug | Round 5 |
062 | HENGAR ASU | Contra | Stage 7 |
063 | SUPER MARIO 4 | Super Mario Bros 1 (Platforms / 1986) | World 4-1 |
064 | TANK JOR | Battle City | Stage 22 |
065 | ALIEN LAIR ASU | Contra | Stage 8 |
066 | B-WINGS SID | B-Wings | Stage 1 |
067 | ARKANOID 5 | Arkanoid | Round D |
068 | BASE1 FIA | Contra | Stage 2 – Base 1 |
069 | NINJA 6 | Ninja-Kun | Scene 6 |
070 | COMBAT BX | Field Combat | |
071 | WATERFALL FIA | Contra | Stage 3 |
072 | TANK 2C | Battle City | Stage 25 |
073 | GALAXIAN 4 | Galaxian | Flag 4 |
074 | BASE2 FIA | Contra | Stage 4 – Base 2 |
075 | BOMBER MAN TW | Bomber Man 1 | Stage 1 |
076 | DIG DUG 6 | Dig Dug | Round 6 |
077 | SNOW FIELD FIA | Contra | Stage 5 |
078 | SUPER MARIO 5 | Super Mario Bros 1 (Platforms / 1986) | World 5-1 |
079 | B-WINGS AT | B-Wings | Stage 1 |
080 | ENERGY ZONE FIA | Contra | Stage 6 |
081 | TANK LEB | Battle City | Stage 28 |
082 | ARKANOID 6 | Arkanoid | Round G |
083 | HENGAR FIA | Contra | Stage 7 |
084 | B-WINGS HAM | B-Wings | Stage 1 |
085 | NINJA 7 | Ninja-Kun | Scene 7 |
086 | ALIAN LAIR FIA | Contra | Stage 8 |
087 | BOMBER MAN DF | Bomber Man 1 | Stage 1 |
088 | DIG DUG 7 | Dig Dug | Round 7 |
089 | BASE1 SHO | Contra | Stage 2 – Base 1 |
090 | TANK USR | Battle City | Stage 31 |
091 | COMBAT CX | Field Combat | |
092 | WATERFALL SHO | Contra | Stage 3 |
093 | SUPER MARIO 6 | Super Mario Bros 1 (Platforms / 1986) | World 6-1 |
094 | B-WINGS JMP | B-Wings | Stage 1 |
095 | BASE2 SHO | Contra | Stage 4 – Base 2 |
096 | NINJA 8 | Ninja-Kun | Scene 8 |
097 | ARKANOID 7 | Arkanoid | Round J |
098 | SNOW FIELD SHO | Contra | Stage 5 |
099 | DIG DUG 8 | Dig Dug | Round 8 |
100 | GALAXIAN 5 | Galaxian | Flag 5 |
101 | COMBAT DX | Field Combat | |
102 | DIG DUG 9 | Dig Dug | Round 9 |
103 | TANK IRI | Battle City | Stage 34 |
104 | ENERGY ZONE SHO | Contra | Stage 6 |
105 | B-WINGS DY | B-Wings | Stage 1 |
106 | NINJA 9 | Ninja-Kun | Scene 9 |
107 | HENGAR SHO | Contra | Stage 7 |
108 | SUPER MARIO 7 | Super Mario Bros 1 (Platforms / 1986) | World 7-1 |
109 | SUPER 1942 | 1942 | |
110 | BOMBER MAN AN | Bomber Man 1 | Stage 1 |
111 | TANK-II | Battle City | Stage 1 |
112 | ARKANOID 8 | Arkanoid | Round L |
113 | ALIEN LAIR SHO | Contra | Stage 8 |
114 | GALAXIAN 6 | Galaxian | Flag 6 |
115 | SUPER TWIN BEE | TwinBee | |
116 | COMBAT EX | Field Combat | |
117 | TANK FRE | Battle City | Stage 18 |
118 | B-WINGS FIR | B-Wings | Stage 1 |
119 | DIG DUG 10 | Dig Dug | Round 10 |
120 | SUPER MARIO 8 | Super Mario Bros 1 (Platforms / 1986) | World 8-1 |