add system_t stuff to irq

This commit is contained in:
optixx 2009-10-14 17:52:01 +02:00
parent 1d0eae3aec
commit cfceee4db3
4 changed files with 38 additions and 20 deletions

View File

@ -34,7 +34,9 @@
#include "debug.h" #include "debug.h"
#include "info.h" #include "info.h"
#include "sram.h" #include "sram.h"
#include "system.h"
extern system_t system;
void (*jump_to_app) (void) = 0x0000; void (*jump_to_app) (void) = 0x0000;
@ -43,18 +45,21 @@ void irq_init(){
PCMSK3 |=(1<<PCINT27); PCMSK3 |=(1<<PCINT27);
PCICR |= (1<<PCIE3); PCICR |= (1<<PCIE3);
sei(); sei();
system.reset_irq = RESET_IRQ_ON;
} }
void irq_stop(){ void irq_stop(){
cli(); cli();
PCMSK3 &=~(1<<PCINT27); PCMSK3 &=~(1<<PCINT27);
sei(); sei();
system.reset_irq = RESET_IRQ_OFF;
} }
void leave_application(void) void leave_application(void)
{ {
cli(); cli();
usbDeviceDisconnect(); usbDeviceDisconnect();
system.avr_reset_count++;
wdt_enable(WDTO_15MS); wdt_enable(WDTO_15MS);
while (1); while (1);

View File

@ -49,10 +49,12 @@
#include "pwm.h" #include "pwm.h"
#include "testing.h" #include "testing.h"
#include "shell.h" #include "shell.h"
#include "system.h"
extern FILE uart_stdout; extern FILE uart_stdout;
extern system_t system;
uint8_t debug_level = (DEBUG | DEBUG_USB | DEBUG_CRC | DEBUG_SHM ); uint8_t debug_level = (DEBUG | DEBUG_USB | DEBUG_CRC | DEBUG_SHM );

View File

@ -35,18 +35,6 @@
#include "requests.h" #include "requests.h"
#include "irq.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; system_t system;
void system_init(void) void system_init(void)
@ -59,7 +47,6 @@ void system_init(void)
snes_irq_off(); snes_irq_off();
system.irq_line = IRQ_OFF; system.irq_line = IRQ_OFF;
system.reset_count = 0;
snes_wr_disable(); snes_wr_disable();
system.wr_line = WR_DISABLE; system.wr_line = WR_DISABLE;
@ -67,10 +54,17 @@ void system_init(void)
avr_bus_active(); avr_bus_active();
system.bus_mode = MODE_AVR; system.bus_mode = MODE_AVR;
snes_lorom();
system.rom_mode = LOROM;
system.snes_reset_count = 0;
system.avr_reset_count = 0;
system.reset_irq = RESET_IRQ_OFF;
} }
void system_reset() void system_send_snes_reset()
{ {
info_P(PSTR("Reset SNES\n")); info_P(PSTR("Reset SNES\n"));
cli(); cli();
@ -80,10 +74,10 @@ void system_reset()
snes_reset_hi(); snes_reset_hi();
snes_reset_off(); snes_reset_off();
sei(); sei();
system.reset_count++; system.snes_reset_count++;
} }
void system_send_irq() void system_send_snes_irq()
{ {
snes_irq_on(); snes_irq_on();
snes_irq_lo(); snes_irq_lo();
@ -92,7 +86,7 @@ void system_send_irq()
snes_irq_off(); snes_irq_off();
} }
void system_bus_avr() void system_set_bus_avr()
{ {
avr_bus_active(); avr_bus_active();
info_P(PSTR("Activate AVR bus\n")); info_P(PSTR("Activate AVR bus\n"));
@ -102,7 +96,7 @@ void system_bus_avr()
info_P(PSTR("Disable SNES WR\n")); info_P(PSTR("Disable SNES WR\n"));
} }
void system_bus_snes() void system_set_bus_snes()
{ {
snes_wr_disable(); snes_wr_disable();
system.wr_line = WR_DISABLE; system.wr_line = WR_DISABLE;
@ -114,13 +108,15 @@ void system_bus_snes()
} }
void system_rom_mode(usb_transaction_t *usb_trans) void system_set_rom_mode(usb_transaction_t *usb_trans)
{ {
if (usb_trans->req_bank_size == 0x8000) { if (usb_trans->req_bank_size == 0x8000) {
snes_lorom(); snes_lorom();
system.rom_mode = LOROM;
info_P(PSTR("Set SNES lowrom \n")); info_P(PSTR("Set SNES lowrom \n"));
} else { } else {
snes_hirom(); snes_hirom();
system.rom_mode = HIROM;
info_P(PSTR("Set SNES hirom \n")); info_P(PSTR("Set SNES hirom \n"));
} }
} }

View File

@ -24,5 +24,20 @@
#define __SYSTEM_H__ #define __SYSTEM_H__
typedef struct system_t {
enum bus_mode_e { MODE_AVR, MODE_SNES } bus_mode;
enum rom_mode_e { LOROM, HIROM } 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;
enum reset_irq_e { RESET_IRQ_OFF, RESET_IRQ_ON } reset_irq;
uint8_t snes_reset_count;
uint8_t avr_reset_count;
} system_t;
void system_init(void); void system_init(void);
#endif #endif