1992 劃面選關 1050-in-1

From NESdev Wiki
Revision as of 19:13, 14 March 2023 by Nes356 (talk | contribs)
Jump to navigationJump to search

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


1050 in 1 Schematic
There is one register built of 74273 and 74174 that latches A5..A0, D7..D0 (both chips share the same write signal).
All bits ale cleared on power-up.

   fedcba9876543210     76543210
A~[1??.......PPw???] D~[?mPPPppp]
             ||||||     |||||+++-- PRG A16..14 
             ||||||     ||+++----- PRG A19..17
             ||||||     |+-------- mirroring (0=V, 1=H)
             |||+++-----+--------- one of the bits needs to be PRG A13,
             |||                     other two need to distinguish between UNROM, NROM-32, NROM-16 and NROM-8,
             |||                     and one might be for locking writes to the regs (*)
             ||+------------------ CHR write protection (1=enabled)
             ++------------------- PRG A21..20
			 
(*)  locking might be only used in NROM-32/NROM-16 modes; NROM-8 mode might be used only for accessing CHR data when copying them to the CHR-ROM 
			 
Because the TIBPAL16L8 behaviour is unknown, meaning of bits A2,A0,A1,D7 is unknown

The reset signal can be disabled by shorting it to +5V (short left leg of the diode with +5V)

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-prog dumper (Device firmware version: 2.3.x) :

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

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