1993 Super 50 in 1 Game: Difference between revisions
From NESdev Wiki
Jump to navigationJump to search
(10 intermediate revisions by the same user not shown) | |||
Line 20: | Line 20: | ||
!colspan="1"| Chips || Description | !colspan="1"| Chips || Description | ||
|- | |- | ||
| | | Blob || PRG-ROM | ||
|- | |- | ||
| | | Blob || CHR-ROM | ||
|- | |- | ||
!colspan="2"| Usual fonctionnal chips | !colspan="2"| Usual fonctionnal chips | ||
Line 28: | Line 28: | ||
!colspan="1"| Chips || Description | !colspan="1"| Chips || Description | ||
|- | |- | ||
| | | 74LS161A - 6.70 || BCD Decade counters / 4-bit binary counters | ||
|- | |- | ||
| | | GD74LS00 - 9223 - GoldStar || NAND Gate, LS Series, 4-Func, 2-Input, TTL, PDIP14 | ||
|} | |} | ||
[[File: | [[File:CART496 50 in 1 schematic 0.png|1400px|center|50 in 1 Schematic]] | ||
== Software == | == Software == | ||
The | The 50 in 1 rom contains 64 KB of PRG and 32 KB of CHR. | ||
The rom has been dumped and assigned to the [[INES Mapper 200]]. | |||
It contains 4 different games that can be beginned at different levels. | |||
== Dumping method == | == Dumping method == | ||
This script can dump the cartridge with the INLretro-prog dumper (Device firmware version: 2.3.x) : | |||
This | |||
{| class="wikitable" align="center" style="margin: auto;" | {| class="wikitable" align="center" style="margin: auto;" | ||
|- | |- | ||
!colspan="1"| | !colspan="1"| dumpMG109.lua | ||
|- | |- | ||
| [[File: | | [[File:DumpMG109.lua.txt|frame|center|dumpMG109.lua]] | ||
|- | |- | ||
|<pre>-- create the module's table | |<pre>-- create the module's table | ||
local | local dumpmg109 = {} | ||
-- import required modules | -- import required modules | ||
Line 93: | Line 66: | ||
local swim = require "scripts.app.swim" | local swim = require "scripts.app.swim" | ||
local buffers = require "scripts.app.buffers" | local buffers = require "scripts.app.buffers" | ||
-- local functions | -- local functions | ||
local function create_header( file, prgKB, chrKB ) | local function create_header( file, prgKB, chrKB ) | ||
-- Mapper : | -- Mapper : 200 ; Mirroring : 0 (Horizontal) | ||
nes.write_header( file, prgKB, chrKB, | nes.write_header( file, prgKB, chrKB, 200, 0) | ||
end | end | ||
Line 123: | Line 95: | ||
end | end | ||
dict.nes(" | local nobusconflicts = dict.nes("NES_CPU_RD", 0x8000 | read_count); | ||
dict.nes("NES_CPU_WR", 0x8000 | read_count , nobusconflicts) | |||
dump.dumptofile( file, KB_per_read, addr_base, "NESCPU_PAGE", false ) | dump.dumptofile( file, KB_per_read, addr_base, "NESCPU_PAGE", false ) | ||
read_count = read_count + 1 | |||
end | |||
end | |||
--dump the CHR ROM | |||
local function dump_chrrom( file, rom_size_KB, debug ) | |||
local KB_per_read = 8 --dump both PT at once | |||
local num_reads = rom_size_KB / KB_per_read | |||
local read_count = 0 | |||
local addr_base = 0x00 -- $0000 | |||
print("PPU dump :") | |||
while ( read_count < num_reads ) do | |||
if debug then print( "dump CHR 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 | |||
local nobusconflicts = dict.nes("NES_CPU_RD", 0x8000 | read_count); | |||
dict.nes("NES_CPU_WR", 0x8000 | read_count , nobusconflicts) | |||
dump.dumptofile( file, KB_per_read, addr_base, "NESPPU_PAGE", false ) | |||
read_count = read_count + 1 | read_count = read_count + 1 | ||
Line 154: | Line 157: | ||
dict.io("NES_INIT") | dict.io("NES_INIT") | ||
print("\nRunning | print("\nRunning dumpMG109.lua") | ||
--dump the cart to dumpfile | --dump the cart to dumpfile | ||
Line 168: | Line 171: | ||
--dump cart into file | --dump cart into file | ||
time.start() | time.start() | ||
--dump cart into file | --dump cart into file | ||
dump_prgrom(file, prg_size, false) | dump_prgrom(file, prg_size, false) | ||
dump_chrrom(file, chr_size, false) | |||
time.report(prg_size) | time.report(prg_size) | ||
Line 183: | Line 185: | ||
-- functions other modules are able to call | -- functions other modules are able to call | ||
dumpmg109.process = process | |||
-- return the module's table | -- return the module's table | ||
return | return dumpmg109</pre> | ||
|} | |} | ||
Under UNIX, the commands to run are : | Under UNIX, the commands to run are : | ||
<pre> | <pre> | ||
./inlretro -s scripts/inlretro3.lua -c NES -m | ./inlretro -s scripts/inlretro3.lua -c NES -m dumpmg109 -x 64 -y 32 -d 50in1-1993.nes | ||
</pre> | </pre> | ||
Line 197: | Line 199: | ||
The NES header of the rom is to set to | The NES header of the rom is to set to | ||
<pre> | <pre> | ||
</pre> | </pre> | ||
== Games Menu == | == Games Menu == | ||
There are | There are 4 unique games and the same games at different levels : | ||
* | * Duck Hunt | ||
* | * Wild Gunman | ||
* Battle City | * Battle City | ||
* | * Mario Bros (Arcade / 1983) | ||
{| class="wikitable" align="center" style="margin: auto;" | {| class="wikitable" align="center" style="margin: auto;" | ||
Line 223: | Line 216: | ||
!colspan="1"| N° || Game Name || Original Game Name || Level | !colspan="1"| N° || Game Name || Original Game Name || Level | ||
|- | |- | ||
| 001 || | | 1 || DUCK HUNT || Duck Hunt || Game A : 1 duck | ||
|- | |- | ||
| | | 2 || TWO DUCKS HUNT || Duck Hunt || Game B : 2 ducks | ||
|- | |- | ||
| | | 3 || CLAY SHOOTING || Duck Hunt || Game C : Clay Shooting | ||
|- | |- | ||
| | | 4 || WILD GUNMAN || Wild Gunman || Game A : 1 outlaw | ||
|- | |- | ||
| | | 5 || TWO GUNMEN || Wild Gunman || Game B : 2 outlaws | ||
|- | |- | ||
| | | 6 || SALOON GUNMEN || Wild Gunman || Game C : Gang | ||
|- | |- | ||
| | | 7 || BATTLE CITY 1 || Battle City || Stage 1 | ||
|- | |- | ||
| | | 8 || BATTLE CITY 2 || Battle City || Stage 2 | ||
|- | |- | ||
| | | 9 || BATTLE CITY 3 || Battle City || Stage 3 | ||
|- | |- | ||
| | | 10 || BATTLE CITY 4 || Battle City || Stage 4 | ||
|- | |- | ||
| | | 11 || BATTLE CITY 5 || Battle City || Stage 5 | ||
|- | |- | ||
| | | 12 || BATTLE CITY 6 || Battle City || Stage 6 | ||
|- | |- | ||
| | | 13 || BATTLE CITY 7 || Battle City || Stage 7 | ||
|- | |- | ||
| | | 14 || BATTLE CITY 8 || Battle City || Stage 8 | ||
|- | |- | ||
| | | 15 || BATTLE CITY 9 || Battle City || Stage 9 | ||
|- | |- | ||
| | | 16 || BATTLE CITY 10 || Battle City || Stage 10 | ||
|- | |- | ||
| | | 17 || BATTLE CITY 11 || Battle City || Stage 11 | ||
|- | |- | ||
| | | 18 || BATTLE CITY 12 || Battle City || Stage 12 | ||
|- | |- | ||
| | | 19 || BATTLE CITY 13 || Battle City || Stage 13 | ||
|- | |- | ||
| | | 20 || BATTLE CITY 14 || Battle City || Stage 14 | ||
|- | |- | ||
| | | 21 || BATTLE CITY 15 || Battle City || Stage 15 | ||
|- | |- | ||
| | | 22 || BATTLE CITY 16 || Battle City || Stage 16 | ||
|- | |- | ||
| | | 23 || BATTLE CITY 17 || Battle City || Stage 17 | ||
|- | |- | ||
| | | 24 || BATTLE CITY 18 || Battle City || Stage 18 | ||
|- | |- | ||
| | | 25 || BATTLE CITY 19 || Battle City || Stage 19 | ||
|- | |- | ||
| | | 26 || BATTLE CITY 20 || Battle City || Stage 20 | ||
|- | |- | ||
| | | 27 || BATTLE CITY 21 || Battle City || Stage 21 | ||
|- | |- | ||
| | | 28 || BATTLE CITY 22 || Battle City || Stage 22 | ||
|- | |- | ||
| | | 29 || BATTLE CITY 23 || Battle City || Stage 23 | ||
|- | |- | ||
| | | 30 || BATTLE CITY 24 || Battle City || Stage 24 | ||
|- | |- | ||
| | | 31 || BATTLE CITY 25 || Battle City || Stage 25 | ||
|- | |- | ||
| | | 32 || BATTLE CITY 26 || Battle City || Stage 26 | ||
|- | |- | ||
| | | 33 || BATTLE CITY 27 || Battle City || Stage 27 | ||
|- | |- | ||
| | | 34 || BATTLE CITY 28 || Battle City || Stage 28 | ||
|- | |- | ||
| | | 35 || BATTLE CITY 29 || Battle City || Stage 29 | ||
|- | |- | ||
| | | 36 || BATTLE CITY 30 || Battle City || Stage 30 | ||
|- | |- | ||
| | | 37 || BATTLE CITY 31 || Battle City || Stage 31 | ||
|- | |- | ||
| | | 38 || BATTLE CITY 32 || Battle City || Stage 32 | ||
|- | |- | ||
| | | 39 || BATTLE CITY 33 || Battle City || Stage 33 | ||
|- | |- | ||
| | | 40 || BATTLE CITY 34 || Battle City || Stage 34 | ||
|- | |- | ||
| | | 41 || BATTLE CITY 35 || Battle City || Stage 35 | ||
|- | |- | ||
| | | 42 || MARIO BROS 1 || Mario Bros (Arcade / 1983) || Phase 1 | ||
|- | |- | ||
| | | 43 || MARIO BROS 2 || Mario Bros (Arcade / 1983) || Phase 2 | ||
|- | |- | ||
| | | 44 || MARIO BROS 3 || Mario Bros (Arcade / 1983) || Phase 3 | ||
|- | |- | ||
| | | 45 || MARIO BROS 4 || Mario Bros (Arcade / 1983) || Phase 4 | ||
|- | |- | ||
| | | 46 || MARIO BROS 5 || Mario Bros (Arcade / 1983) || Phase 5 | ||
|- | |- | ||
| | | 47 || MARIO BROS 6 || Mario Bros (Arcade / 1983) || Phase 6 | ||
|- | |- | ||
| | | 48 || MARIO BROS 7 || Mario Bros (Arcade / 1983) || Phase 7 | ||
|- | |- | ||
| | | 49 || MARIO BROS 8 || Mario Bros (Arcade / 1983) || Phase 8 | ||
|- | |- | ||
| | | 50 || MARIO BROS 9 || Mario Bros (Arcade / 1983) || Phase 9 | ||
|} | |} |
Latest revision as of 19:05, 26 March 2023
Description
The cartridge is a multigames cartridge dated from 1993.
Versions known :
- 1993 Super 50 in 1 Game : NES version (72-pin)
Hardware
NES PCB (Front mirrored picture) | NES PCB (Bottom picture) |
---|---|
Datas chips | |
---|---|
Chips | Description |
Blob | PRG-ROM |
Blob | CHR-ROM |
Usual fonctionnal chips | |
Chips | Description |
74LS161A - 6.70 | BCD Decade counters / 4-bit binary counters |
GD74LS00 - 9223 - GoldStar | NAND Gate, LS Series, 4-Func, 2-Input, TTL, PDIP14 |
Software
The 50 in 1 rom contains 64 KB of PRG and 32 KB of CHR.
The rom has been dumped and assigned to the INES Mapper 200.
It contains 4 different games that can be beginned at different levels.
Dumping method
This script can dump the cartridge with the INLretro-prog dumper (Device firmware version: 2.3.x) :
dumpMG109.lua |
---|
File:DumpMG109.lua.txt |
-- create the module's table local dumpmg109 = {} -- 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 : 200 ; Mirroring : 0 (Horizontal) nes.write_header( file, prgKB, chrKB, 200, 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 local nobusconflicts = dict.nes("NES_CPU_RD", 0x8000 | read_count); dict.nes("NES_CPU_WR", 0x8000 | read_count , nobusconflicts) dump.dumptofile( file, KB_per_read, addr_base, "NESCPU_PAGE", false ) read_count = read_count + 1 end end --dump the CHR ROM local function dump_chrrom( file, rom_size_KB, debug ) local KB_per_read = 8 --dump both PT at once local num_reads = rom_size_KB / KB_per_read local read_count = 0 local addr_base = 0x00 -- $0000 print("PPU dump :") while ( read_count < num_reads ) do if debug then print( "dump CHR 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 local nobusconflicts = dict.nes("NES_CPU_RD", 0x8000 | read_count); dict.nes("NES_CPU_WR", 0x8000 | read_count , nobusconflicts) dump.dumptofile( file, KB_per_read, addr_base, "NESPPU_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 dumpMG109.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) dump_chrrom(file, chr_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 dumpmg109.process = process -- return the module's table return dumpmg109 |
Under UNIX, the commands to run are :
./inlretro -s scripts/inlretro3.lua -c NES -m dumpmg109 -x 64 -y 32 -d 50in1-1993.nes
The NES header of the rom is to set to
Games Menu
There are 4 unique games and the same games at different levels :
- Duck Hunt
- Wild Gunman
- Battle City
- Mario Bros (Arcade / 1983)
Cartridge Menu | |||
---|---|---|---|
N° | Game Name | Original Game Name | Level |
1 | DUCK HUNT | Duck Hunt | Game A : 1 duck |
2 | TWO DUCKS HUNT | Duck Hunt | Game B : 2 ducks |
3 | CLAY SHOOTING | Duck Hunt | Game C : Clay Shooting |
4 | WILD GUNMAN | Wild Gunman | Game A : 1 outlaw |
5 | TWO GUNMEN | Wild Gunman | Game B : 2 outlaws |
6 | SALOON GUNMEN | Wild Gunman | Game C : Gang |
7 | BATTLE CITY 1 | Battle City | Stage 1 |
8 | BATTLE CITY 2 | Battle City | Stage 2 |
9 | BATTLE CITY 3 | Battle City | Stage 3 |
10 | BATTLE CITY 4 | Battle City | Stage 4 |
11 | BATTLE CITY 5 | Battle City | Stage 5 |
12 | BATTLE CITY 6 | Battle City | Stage 6 |
13 | BATTLE CITY 7 | Battle City | Stage 7 |
14 | BATTLE CITY 8 | Battle City | Stage 8 |
15 | BATTLE CITY 9 | Battle City | Stage 9 |
16 | BATTLE CITY 10 | Battle City | Stage 10 |
17 | BATTLE CITY 11 | Battle City | Stage 11 |
18 | BATTLE CITY 12 | Battle City | Stage 12 |
19 | BATTLE CITY 13 | Battle City | Stage 13 |
20 | BATTLE CITY 14 | Battle City | Stage 14 |
21 | BATTLE CITY 15 | Battle City | Stage 15 |
22 | BATTLE CITY 16 | Battle City | Stage 16 |
23 | BATTLE CITY 17 | Battle City | Stage 17 |
24 | BATTLE CITY 18 | Battle City | Stage 18 |
25 | BATTLE CITY 19 | Battle City | Stage 19 |
26 | BATTLE CITY 20 | Battle City | Stage 20 |
27 | BATTLE CITY 21 | Battle City | Stage 21 |
28 | BATTLE CITY 22 | Battle City | Stage 22 |
29 | BATTLE CITY 23 | Battle City | Stage 23 |
30 | BATTLE CITY 24 | Battle City | Stage 24 |
31 | BATTLE CITY 25 | Battle City | Stage 25 |
32 | BATTLE CITY 26 | Battle City | Stage 26 |
33 | BATTLE CITY 27 | Battle City | Stage 27 |
34 | BATTLE CITY 28 | Battle City | Stage 28 |
35 | BATTLE CITY 29 | Battle City | Stage 29 |
36 | BATTLE CITY 30 | Battle City | Stage 30 |
37 | BATTLE CITY 31 | Battle City | Stage 31 |
38 | BATTLE CITY 32 | Battle City | Stage 32 |
39 | BATTLE CITY 33 | Battle City | Stage 33 |
40 | BATTLE CITY 34 | Battle City | Stage 34 |
41 | BATTLE CITY 35 | Battle City | Stage 35 |
42 | MARIO BROS 1 | Mario Bros (Arcade / 1983) | Phase 1 |
43 | MARIO BROS 2 | Mario Bros (Arcade / 1983) | Phase 2 |
44 | MARIO BROS 3 | Mario Bros (Arcade / 1983) | Phase 3 |
45 | MARIO BROS 4 | Mario Bros (Arcade / 1983) | Phase 4 |
46 | MARIO BROS 5 | Mario Bros (Arcade / 1983) | Phase 5 |
47 | MARIO BROS 6 | Mario Bros (Arcade / 1983) | Phase 6 |
48 | MARIO BROS 7 | Mario Bros (Arcade / 1983) | Phase 7 |
49 | MARIO BROS 8 | Mario Bros (Arcade / 1983) | Phase 8 |
50 | MARIO BROS 9 | Mario Bros (Arcade / 1983) | Phase 9 |