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

From NESdev Wiki
Jump to navigationJump to search
Line 68: Line 68:
(*)  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  
(*)  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 I don't know how the PAL chips works, meaning of bits A2,A0,A1,D7 is unknown
Because the TIBPAL16L8 behaviour is unknown, meaning of bits A2,A0,A1,D7 is unknown


You can disable the reset signal by shorting it to +5V (short left leg of the diode with +5V)
The reset signal can be disabled by shorting it to +5V (short left leg of the diode with +5V)
</pre>
</pre>



Revision as of 23:15, 11 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


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