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

View File

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

View File

@ -35,18 +35,6 @@
#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)
@ -59,7 +47,6 @@ void system_init(void)
snes_irq_off();
system.irq_line = IRQ_OFF;
system.reset_count = 0;
snes_wr_disable();
system.wr_line = WR_DISABLE;
@ -67,10 +54,17 @@ void system_init(void)
avr_bus_active();
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"));
cli();
@ -80,10 +74,10 @@ void system_reset()
snes_reset_hi();
snes_reset_off();
sei();
system.reset_count++;
system.snes_reset_count++;
}
void system_send_irq()
void system_send_snes_irq()
{
snes_irq_on();
snes_irq_lo();
@ -92,7 +86,7 @@ void system_send_irq()
snes_irq_off();
}
void system_bus_avr()
void system_set_bus_avr()
{
avr_bus_active();
info_P(PSTR("Activate AVR bus\n"));
@ -102,7 +96,7 @@ void system_bus_avr()
info_P(PSTR("Disable SNES WR\n"));
}
void system_bus_snes()
void system_set_bus_snes()
{
snes_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) {
snes_lorom();
system.rom_mode = LOROM;
info_P(PSTR("Set SNES lowrom \n"));
} else {
snes_hirom();
system.rom_mode = HIROM;
info_P(PSTR("Set SNES hirom \n"));
}
}

View File

@ -24,5 +24,20 @@
#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);
#endif