1992 Contra 120 in 1

From NESdev Wiki
Jump to navigationJump to search

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)
120 in 1 NES PCB (Front mirrored picture)
120 in 1 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


120 in 1 Schematic
 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) :

Capacitor to short

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
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