diff --git a/host/scripts/sega/genesis_v1.lua b/host/scripts/sega/genesis_v1.lua index 7b31f67..e2489f3 100644 --- a/host/scripts/sega/genesis_v1.lua +++ b/host/scripts/sega/genesis_v1.lua @@ -5,15 +5,15 @@ local genesis_v1 = {} -- import required modules local dict = require "scripts.app.dict" local dump = require "scripts.app.dump" -local flash = require "scripts.app.flash" -local snes = require "scripts.app.snes" -local apperase = require "scripts.app.erase" -- file constants -- local functions ---dump the SNES ROM starting at the provided bank +local function unsupported(operation) + print("\nUNSUPPORTED OPERATION: \"" .. operation .. "\" not implemented yet for Sega Genesis.\n") +end + --/ROMSEL is always low for this dump local function dump_rom( file, rom_size_KB, debug ) @@ -24,19 +24,21 @@ local function dump_rom( file, rom_size_KB, debug ) local num_reads = rom_size_KB / KB_per_bank local read_count = 0 - while ( read_count < num_reads ) do + while (read_count < num_reads) do - if debug then print( "dump ROM part ", read_count, " of ", num_reads) end + if debug then print( "Dumping ROM part ", read_count + 1, " of ", num_reads) end - if (read_count %8 == 0) then - print("dumping ROM bank: ", read_count, " of ", num_reads-1) + -- A "large" Genesis ROM is 24 banks, many are 8 and 16 - status every 4 is reasonable. + -- The largest published Genesis game is Super Street Fighter 2, which is 40 banks! + if (read_count % 4 == 0) then + print("dumping ROM bank: ", read_count, " of ", num_reads - 1) end - --select desired bank + -- Select desired bank. dict.sega("SET_BANK", read_count) - dump.dumptofile( file, KB_per_bank/2, addr_base, "GENESIS_ROM_PAGE0", false ) - dump.dumptofile( file, KB_per_bank/2, addr_base, "GENESIS_ROM_PAGE1", false ) + dump.dumptofile(file, KB_per_bank/2, addr_base, "GENESIS_ROM_PAGE0", debug) + dump.dumptofile(file, KB_per_bank/2, addr_base, "GENESIS_ROM_PAGE1", debug) read_count = read_count + 1 end @@ -46,129 +48,56 @@ 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(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 rom_size = console_opts["rom_size_mbit"] * 128 - local wram_size = console_opts["wram_size_kb"] - local mirror = console_opts["mirror"] - ---initialize device i/o for SEGA + -- Initialize device i/o for SEGA dict.io("IO_RESET") dict.io("SEGA_INIT") ---test cart by reading manf/prod ID - if test then - --- print("Testing SNES board"); --- --- --SNES detect HiROM or LoROM & RAM --- --- --SNES detect if able to read flash ID's --- if not rom_manf_id(true) then --- print("ERROR unable to read flash ID") --- return --- end + -- TODO: test cart by reading manf/prod ID + if process_opts["test"] then + unsupported("test") end - ---dump the ram to file + -- TODO: dump the ram to file if dumpram then - --- print("\nDumping SAVE RAM...") --- --- --may have to verify /RESET is high to enable SRAM --- --- file = assert(io.open(ramdumpfile, "wb")) --- --- --dump cart into file --- dump_ram(file, rambank, ram_size, snes_mapping, true) --- --- --may disable SRAM by placing /RESET low --- --- --close file --- assert(file:close()) --- --- print("DONE Dumping SAVE RAM") + unsupported("dumpram") end ---dump the cart to dumpfile - if read then + -- Dump the cart to dumpfile. + if process_opts["read"] then print("\nDumping SEGA ROM...") - file = assert(io.open(dumpfile, "wb")) + file = assert(io.open(process_opts["dump_filename"], "wb")) --dump cart into file - dump_rom(file, rom_size, true) + dump_rom(file, rom_size, false) --close file assert(file:close()) print("DONE Dumping SEGA ROM") end ---erase the cart - if erase then - - -- erase_flash() + -- TODO: erase the cart + if process_opts["erase"] then + unsupported("erase") end ---write to wram on the cart + -- TODO: write to wram on the cart if writeram then - --- print("\nWritting to SAVE RAM...") --- --- file = assert(io.open(ramwritefile, "rb")) --- --- --flash.write_file( file, ram_size, "NOVAR", "PRGRAM", false ) --- --flash.write_file( file, ram_size, "LOROM_3VOLT", "SNESROM", false ) --- wr_ram(file, rambank, ram_size, snes_mapping, true) --- --- --close file --- assert(file:close()) --- --- print("DONE Writting SAVE RAM") + unsupported("writeram") end - ---program flashfile to the cart - if program then - --- --open file --- file = assert(io.open(flashfile, "rb")) --- --determine if auto-doubling, deinterleaving, etc, --- --needs done to make board compatible with rom --- --- --flash cart --- flash_rom(file, rom_size, snes_mapping, true) --- --- --close file --- assert(file:close()) - + -- TODO: program flashfile to the cart + if process_opts["program"] then + unsupported("program") end ---verify flashfile is on the cart - if verify then --- print("\nPost dumping SNES ROM...") --- --for now let's just dump the file and verify manually --- --- file = assert(io.open(verifyfile, "wb")) --- --- --dump cart into file --- dump_rom(file, rom_size, true) --- --- --close file --- assert(file:close()) --- print("DONE Post dumping SNES ROM") + -- TODO: verify flashfile is on the cart + if process_opts["verify"] then + unsupported("verify") end dict.io("IO_RESET") @@ -176,13 +105,13 @@ end -- global variables so other modules can use them - +-- NONE -- call functions desired to run when script is called/imported - +-- NONE -- functions other modules are able to call genesis_v1.process = process -- return the module's table -return genesis_v1 +return genesis_v1 \ No newline at end of file