1992 劃面選關 1050-in-1: Difference between revisions
No edit summary |
|||
Line 77: | Line 77: | ||
|- | |- | ||
| [[File:Dump310331C-32-NRS.lua.txt|frame|center|dump310331C-32-NRS.lua]] | | [[File:Dump310331C-32-NRS.lua.txt|frame|center|dump310331C-32-NRS.lua]] | ||
|- | |||
|-- create the module's table | |||
local dump32_310331C = {} | |||
-- 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" | |||
-- file constants & variables | |||
local mapname = "unusabledump" | |||
-- local functions | |||
local function create_header( file, prgKB, chrKB ) | |||
nes.write_header( file, prgKB, 0, op_buffer[mapname], mirroring) | |||
end | |||
--dump the PRG ROM | |||
local function dump_prgrom( file, rom_size_KB, debug ) | |||
local KB_per_read = 32 | |||
local num_reads = rom_size_KB / KB_per_read | |||
local read_count = 0 | |||
local addr_base = 0x08 -- $8000 | |||
while ( read_count < num_reads ) do | |||
if debug then print( "dump PRG part ", read_count, " of ", num_reads) end | |||
-- hardware: A0-A2, D0-D2, D7 all go to PAL, which then generates A13-A16 | |||
-- A3 controls whether CHR RAM is writeable | |||
-- D6 specifies H/V mirroring control | |||
-- A4,A12 are A20,A21 | |||
-- D3-D5 are A17-A19 | |||
local datapart = (read_count & 0x1F) << 1; | |||
local addrpart = 0xE000 | ((read_count >> 1) & 0x10) | ((read_count << 6) & 0x1000); | |||
--select desired bank(s) to dump | |||
dict.nes("NES_CPU_WR", addrpart, datapart) --32KB @ CPU $8000 | |||
dump.dumptofile( file, KB_per_read, addr_base, "NESCPU_4KB", 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") | |||
--dump the cart to dumpfile | |||
if read then | |||
print("\nDumping PRG-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_prgrom(file, prg_size, false) | |||
time.report(prg_size) | |||
--close file | |||
assert(file:close()) | |||
print("DONE Dumping PRG-ROM") | |||
end | |||
dict.io("IO_RESET") | |||
end | |||
-- functions other modules are able to call | |||
dump32_310331C.process = process | |||
-- return the module's table | |||
return dump32_310331C | |||
|} | |} | ||
Revision as of 23:35, 7 March 2023
Description
The cartridge has been created by SuperVision and is dated 1992.
Two versions are known :
- 1992 劃面選關 1050-in-1 : FAMICOM version (60-pin)
- Super 1050 in 1 (Int'L) [SuperVision Japan] : NES version (72-pin)
Hardware
NES PCB (Front picture) | NES PCB (Bottom mirrored picture) |
---|---|
Datas chips | |
---|---|
Chips | Description |
FAX811 - 9214 D | Probably 1 MB chip (need confirmation) |
FAX812 - 9214 D | Probably 1 MB chip (need confirmation) |
FAX813 - 9214 D | Probably 1 MB chip (need confirmation) |
Usual fonctionnal chips | |
Chips | Description |
HD74LS273P - 2C15 | Octal D-type Positive-edge-triggered Flip-Flops (with Clear) |
DM74LS139N - P9148 | Decoder/Demultiplexer |
GD74LS174 - 9204 - GoldStar | D Flip-Flop, LS Series, 1-Func, Positive Edge Triggered, 6-Bit, True Output, TTL, PDIP16 |
GD74LS153 - 9152 - GoldStar | Multiplexer, LS Series, 2-Func, 4 Line Input, 1 Line Output, True Output, TTL, PDIP16 |
Others chips | |
Chips | Description |
TIBPAL16L8 - 25CN - 434 044FF - Malaysia | 20-PIN programmable array logic |
D4364G - 12L - 9037M9202 - NEC Japan | CHR RAM / 8 bits Static CMOS RAM |
Software
The 1050 in 1 rom contains 3 MB of PRG and no CHR.
The rom has been assigned to the submapper 1 of the NES 2.0 Mapper 354.
It contains 80 different games that can be beginned at different levels.
N° | Game Name | Original Game Name | Level |
---|---|---|---|
1 | NORTHERN KEN II | Hokuto No Ken II | Level 1 |
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 dumper :
local dump32_310331C = {} -- 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" -- file constants & variables local mapname = "unusabledump" -- local functions local function create_header( file, prgKB, chrKB ) nes.write_header( file, prgKB, 0, op_buffer[mapname], mirroring) end --dump the PRG ROM local function dump_prgrom( file, rom_size_KB, debug ) local KB_per_read = 32 local num_reads = rom_size_KB / KB_per_read local read_count = 0 local addr_base = 0x08 -- $8000 while ( read_count < num_reads ) do if debug then print( "dump PRG part ", read_count, " of ", num_reads) end -- hardware: A0-A2, D0-D2, D7 all go to PAL, which then generates A13-A16 -- A3 controls whether CHR RAM is writeable -- D6 specifies H/V mirroring control -- A4,A12 are A20,A21 -- D3-D5 are A17-A19 local datapart = (read_count & 0x1F) << 1; local addrpart = 0xE000 | ((read_count >> 1) & 0x10) | ((read_count << 6) & 0x1000); --select desired bank(s) to dump dict.nes("NES_CPU_WR", addrpart, datapart) --32KB @ CPU $8000 dump.dumptofile( file, KB_per_read, addr_base, "NESCPU_4KB", 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") --dump the cart to dumpfile if read then print("\nDumping PRG-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_prgrom(file, prg_size, false) time.report(prg_size) --close file assert(file:close()) print("DONE Dumping PRG-ROM") end dict.io("IO_RESET") end -- functions other modules are able to call dump32_310331C.process = process -- return the module's table return dump32_310331Cdump310331C-32-NRS.lua |
---|
File:Dump310331C-32-NRS.lua.txt |
NB : As it is a programmable chip, the behavior of the TIBPAL16L8 chip has needed to be understand before writing this dumping script.
Under UNIX, the commands to run are :
./inlretro -s scripts/inlretro3.lua -c NES -m dump310331c -x 4096 -d 1050in1_PRG_4096kb.nes cp 1050in1_PRG_4096kb.nes 1050in1_PRG_3072kb.nes truncate -s 3145744 1050in1_PRG_3072kb.nes
NB : For the truncate : 16 B (header) + 3 MB (3072 x 1024) = 3145744 bytes
The NES header of the rom is to set to
4E 45 53 1A C0 00 20 68 11 00 00 07 00 00 00 2A