From 1d0eae3aec8c1e21db7025313a2526f09dfa6d7e Mon Sep 17 00:00:00 2001 From: optixx Date: Wed, 14 Oct 2009 17:39:35 +0200 Subject: [PATCH] add system struct and modify functions --- avr/usbload/main.c | 5 ----- avr/usbload/system.c | 36 ++++++++++++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/avr/usbload/main.c b/avr/usbload/main.c index c217028..d28fa06 100644 --- a/avr/usbload/main.c +++ b/avr/usbload/main.c @@ -56,11 +56,6 @@ extern FILE uart_stdout; uint8_t debug_level = (DEBUG | DEBUG_USB | DEBUG_CRC | DEBUG_SHM ); -typedef struct system_t { - uint8_t bus_mode; - uint8_t rom_mode; - uint8_t req_bank; -} system_t; usb_transaction_t usb_trans; diff --git a/avr/usbload/system.c b/avr/usbload/system.c index da5c9d9..39b666a 100644 --- a/avr/usbload/system.c +++ b/avr/usbload/system.c @@ -33,14 +33,40 @@ #include "debug.h" #include "info.h" #include "requests.h" +#include "irq.h" + +typedef struct system_t { + enum bus_mode_e { MODE_AVR, MODE_SNES } bus_mode; + enum rom_mode_e { LOROM, HOROM } rom_mode; + enum reset_line_e { RESET_OFF, RESET_ON } reset_line; + enum irq_line_e { IRQ_ON, IRQ_OFF } irq_line; + enum wr_line_e { WR_DISABLE, WR_ENABLE } wr_line; + + uint8_t reset_count; +} system_t; + +system_t system; + void system_init(void) { snes_reset_hi(); snes_reset_off(); + system.reset_line = RESET_OFF; + snes_irq_hi(); snes_irq_off(); + system.irq_line = IRQ_OFF; + + system.reset_count = 0; + + snes_wr_disable(); + system.wr_line = WR_DISABLE; + + avr_bus_active(); + system.bus_mode = MODE_AVR; + } @@ -54,6 +80,7 @@ void system_reset() snes_reset_hi(); snes_reset_off(); sei(); + system.reset_count++; } void system_send_irq() @@ -67,19 +94,24 @@ void system_send_irq() void system_bus_avr() { - info_P(PSTR("Activate AVR bus\n")); avr_bus_active(); - info_P(PSTR("Disable SNES WR\n")); + info_P(PSTR("Activate AVR bus\n")); + system.bus_mode = MODE_AVR; snes_wr_disable(); + system.wr_line = WR_DISABLE; + info_P(PSTR("Disable SNES WR\n")); } void system_bus_snes() { snes_wr_disable(); + system.wr_line = WR_DISABLE; info_P(PSTR("Disable SNES WR\n")); snes_bus_active(); + system.bus_mode = MODE_SNES; info_P(PSTR("Activate SNES bus\n")); irq_stop(); + } void system_rom_mode(usb_transaction_t *usb_trans)