From 2972654e3befba5036ef9adf79a13d95931bfd8a Mon Sep 17 00:00:00 2001 From: beyondcoast Date: Thu, 20 Dec 2018 07:16:46 -0600 Subject: [PATCH 1/3] Cleanup of Genesis console script: add unsupported messages, dead code removal, table usage inlined, fix off-by-one error, make debug msgs variable controlled. --- host/scripts/sega/genesis_v1.lua | 145 ++++++++----------------------- 1 file changed, 37 insertions(+), 108 deletions(-) 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 From d844c9dd1ffc875cca7b617987d3d3cbd3330739 Mon Sep 17 00:00:00 2001 From: beyondcoast Date: Thu, 20 Dec 2018 07:48:49 -0600 Subject: [PATCH 2/3] Make Linux and OS X aliases for Unix build, which will work for both. --- host/Makefile | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/host/Makefile b/host/Makefile index 01ad3b2..b25d43a 100644 --- a/host/Makefile +++ b/host/Makefile @@ -1,6 +1,6 @@ #compiler flags: -Wall Warnings all, -g gdb debug markings, CFLAGS=-Wall -O -LDFLAGS= -llua -lusb-1.0 -Lsource/lua -lm +LDFLAGS= -llua -lusb-1.0 -Lsource/lua INCLUDE= -I ./include -I ../shared LDFLAGS_WINDOWS= -L ./winlib $(LDFLAGS) LDFLAGS_UNIX= -lm $(LDFLAGS) @@ -20,6 +20,8 @@ DEPS=$(OBJECTS:.o=.d) %.o: %.c $(CC) $(CFLAGS) $(INCLUDE) -o $@ -c $< +.PHONY: clean linux osx + # TODO: Pass through platform when building liblua. liblua: $(MAKE) -C source/lua a @@ -35,8 +37,9 @@ all: liblua $(DEPS) $(OBJECTS) unix: liblua $(DEPS) $(OBJECTS) $(CC) $(INCLUDE) $(OBJECTS) -o $(TARGET) $(CFLAGS) $(LDFLAGS_UNIX) -linux: - gcc source/inlprog.c source/usb_operations.c -o inlretro -lusb-1.0 -lm -L lua include +# Convienience in case its not clear Unix really means not-Windows. +linux: unix +macosx: unix # "make debug" will build program with debug print messages # -DDEBUG show debug logs @@ -49,7 +52,7 @@ unixdebug: CFLAGS += -DDEBUG -g unixdebug: unix #clean on unix and windows(.exe) -.PHONY: clean + clean: $(MAKE) -C source/lua clean rm -f $(TARGET) $(TARGET).exe $(OBJECTS) $(DEPS) $(LUAOBJ) source/lua/liblua.a From e49ff6d2d0645f130277a470fd6488e03b709c4a Mon Sep 17 00:00:00 2001 From: Max Date: Fri, 21 Dec 2018 03:30:13 +0000 Subject: [PATCH 3/3] Fix osx target -> machos --- host/Makefile | 116 +++++++++++++++++++++++++------------------------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/host/Makefile b/host/Makefile index b25d43a..23b6629 100644 --- a/host/Makefile +++ b/host/Makefile @@ -1,58 +1,58 @@ -#compiler flags: -Wall Warnings all, -g gdb debug markings, -CFLAGS=-Wall -O -LDFLAGS= -llua -lusb-1.0 -Lsource/lua -INCLUDE= -I ./include -I ../shared -LDFLAGS_WINDOWS= -L ./winlib $(LDFLAGS) -LDFLAGS_UNIX= -lm $(LDFLAGS) -CC= gcc - -SOURCES=$(wildcard source/*.c) -OBJECTS=$(SOURCES:.c=.o) - -# Use GCC preprocessor to determine dependencies for all source files. -DEPS=$(OBJECTS:.o=.d) -%.d: %.c - @$(CC) $(CFLAGS) $(INCLUDE) $< -MM -MT $(@:.d=.o) >$@ -# Include generated .d Makefile fragments to manage object dependencies. --include $(DEPS) - -# Provide recipes for building all objects, dependencies managed via earlier inclusion. -%.o: %.c - $(CC) $(CFLAGS) $(INCLUDE) -o $@ -c $< - -.PHONY: clean linux osx - -# TODO: Pass through platform when building liblua. -liblua: - $(MAKE) -C source/lua a - -TARGET=inlretro - -#default to windows build -all: liblua $(DEPS) $(OBJECTS) - $(CC) $(INCLUDE) $(OBJECTS) -o $(TARGET) $(CFLAGS) $(LDFLAGS_WINDOWS) - -#unix build doesn't need winlib directory as libusb should be installed on OS. -#sudo apt-get install libusb-1.0-0-dev -unix: liblua $(DEPS) $(OBJECTS) - $(CC) $(INCLUDE) $(OBJECTS) -o $(TARGET) $(CFLAGS) $(LDFLAGS_UNIX) - -# Convienience in case its not clear Unix really means not-Windows. -linux: unix -macosx: unix - -# "make debug" will build program with debug print messages -# -DDEBUG show debug logs -# -g build with gdb debug tags -debug: CFLAGS += -DDEBUG -g -debug: all - -#unix debug build -unixdebug: CFLAGS += -DDEBUG -g -unixdebug: unix - -#clean on unix and windows(.exe) - -clean: - $(MAKE) -C source/lua clean - rm -f $(TARGET) $(TARGET).exe $(OBJECTS) $(DEPS) $(LUAOBJ) source/lua/liblua.a +#compiler flags: -Wall Warnings all, -g gdb debug markings, +CFLAGS=-Wall -O +LDFLAGS= -llua -lusb-1.0 -Lsource/lua +INCLUDE= -I ./include -I ../shared +LDFLAGS_WINDOWS= -L ./winlib $(LDFLAGS) +LDFLAGS_UNIX= -lm $(LDFLAGS) +CC= gcc + +SOURCES=$(wildcard source/*.c) +OBJECTS=$(SOURCES:.c=.o) + +# Use GCC preprocessor to determine dependencies for all source files. +DEPS=$(OBJECTS:.o=.d) +%.d: %.c + @$(CC) $(CFLAGS) $(INCLUDE) $< -MM -MT $(@:.d=.o) >$@ +# Include generated .d Makefile fragments to manage object dependencies. +-include $(DEPS) + +# Provide recipes for building all objects, dependencies managed via earlier inclusion. +%.o: %.c + $(CC) $(CFLAGS) $(INCLUDE) -o $@ -c $< + +.PHONY: clean linux macosx + +# TODO: Pass through platform when building liblua. +liblua: + $(MAKE) -C source/lua a + +TARGET=inlretro + +#default to windows build +all: liblua $(DEPS) $(OBJECTS) + $(CC) $(INCLUDE) $(OBJECTS) -o $(TARGET) $(CFLAGS) $(LDFLAGS_WINDOWS) + +#unix build doesn't need winlib directory as libusb should be installed on OS. +#sudo apt-get install libusb-1.0-0-dev +unix: liblua $(DEPS) $(OBJECTS) + $(CC) $(INCLUDE) $(OBJECTS) -o $(TARGET) $(CFLAGS) $(LDFLAGS_UNIX) + +# Convienience in case its not clear Unix really means not-Windows. +linux: unix +macosx: unix + +# "make debug" will build program with debug print messages +# -DDEBUG show debug logs +# -g build with gdb debug tags +debug: CFLAGS += -DDEBUG -g +debug: all + +#unix debug build +unixdebug: CFLAGS += -DDEBUG -g +unixdebug: unix + +#clean on unix and windows(.exe) + +clean: + $(MAKE) -C source/lua clean + rm -f $(TARGET) $(TARGET).exe $(OBJECTS) $(DEPS) $(LUAOBJ) source/lua/liblua.a