1992 劃面選關 1050-in-1: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
Line 52: Line 52:
The 1050 in 1 rom contains 3 MB of PRG and no CHR.
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]].
The rom has been assigned to the submapper 1 of the [[NES 2.0 Mapper 354]] on the 28 december 2022.


It contains 80 different games that can be beginned at different levels.
It contains 80 different games that can be beginned at different levels.

Revision as of 17:28, 10 March 2023

Description

The cartridge is a multigames cartridge created by SuperVision and dated from 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)
1050 in 1 NES PCB (Front picture)
1050 in 1 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 on the 28 december 2022.

It contains 80 different games that can be beginned at different levels.

Cartridge Menu
Game Name Original Game Name Level
1 NORTHERN KEN II Hokuto No Ken II Level 1
2 THE SCHOOL FIGHT Renegade Level 1 – Stage 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) :

dump310331C-32-NRS.lua

This short-circuit in place, this script can dump the cartridge with the INLretro dumper :

dump310331C-32-NRS.lua
File:Dump310331C-32-NRS.lua.txt
-- 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

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