/* * ===================================================================================== * * ________ .__ __ ________ ____ ________ * \_____ \ __ __|__| ____ | | __\______ \ _______ _/_ |/ _____/ * / / \ \| | \ |/ ___\| |/ / | | \_/ __ \ \/ /| / __ \ * / \_/. \ | / \ \___| < | ` \ ___/\ / | \ |__\ \ * \_____\ \_/____/|__|\___ >__|_ \/_______ /\___ >\_/ |___|\_____ / * \__> \/ \/ \/ \/ \/ * * www.optixx.org * * * Version: 1.0 * Created: 07/21/2009 03:32:16 PM * Author: david@optixx.org * * ===================================================================================== */ #include #include #include #include "config.h" #include "requests.h" #include "sram.h" #include "info.h" #include "irq.h" #include "usbdrv.h" #if defined(BOOT_COMPRESS_RLE) #include "rle.h" #endif #if defined(BOOT_COMPRESS_ZIP) #include "neginf/neginf.h" #include "inflate.h" #endif #if defined(BOOT_COMPRESS_FASTLZ) #include "fastlz.h" #endif #include "loader.h" #include "system.h" extern usb_transaction_t usb_trans; extern system_t my_system; extern const char *_rom[]; extern const char _rom01[]; extern const int _rom_size[]; void usb_connect() { uint8_t i = 0; info_P(PSTR("USB init\n")); usbDeviceDisconnect(); /* enforce re-enumeration, do this while */ cli(); info_P(PSTR("USB disconnect\n")); i = 10; while (--i) { /* fake USB disconnect for > 250 ms */ _delay_ms(50); } led_on(); usbDeviceConnect(); info_P(PSTR("USB connect\n")); } void boot_startup_rom(uint16_t init_delay) { uint8_t i; #if defined(BOOT_COMPRESS_RLE) uint32_t addr = 0x000000; #endif #if defined(BOOT_COMPRESS_ZIP) uint8_t c; uint16_t j; PGM_VOID_P p_addr; #endif info_P(PSTR("Fetch Loader: %s from AVR PROGMEM\n"), LOADER_NAME); system_set_bus_avr(); // snes_irq_lo(); // system_snes_irq_off(); system_set_rom_lorom(); // info_P(PSTR("Activate AVR bus\n")); // avr_bus_active(); // info_P(PSTR("IRQ off\n")); // snes_irq_lo(); // snes_irq_off(); // snes_lorom(); info_P(PSTR("Unpack Loader with using method: %s\n"), LOADER_COMPRESS); #if defined(BOOT_COMPRESS_RLE) for (i = 0; i < ROM_BUFFER_CNT; i++) { addr += rle_decode(_rom[i], _rom_size[i], addr); } #endif #if defined(BOOT_COMPRESS_ZIP) //inflate_init(); neginf_init(0); for (i=0; i__|_ \\/_______ /\\___ >\\_/ |___|\\_____ / \n")); info_P(PSTR (" \\__> \\/ \\/ \\/ \\/ \\/ \n")); info_P(PSTR("\n")); info_P(PSTR(" www.optixx.org\n")); info_P(PSTR("\n")); info_P(PSTR("Hardware Version: %s Software Version: %s Build Date: %s \n"), HW_VERSION, SW_VERSION, __DATE__ ); } void transaction_status() { info_P(PSTR("\nAddr 0x%06lx\n"), usb_trans.req_addr); info_P(PSTR("Bank 0x%02x\n"), usb_trans.req_bank); info_P(PSTR("Banksize 0x%06lx\n"), usb_trans.req_bank_size); info_P(PSTR("Bankcount 0x%02x\n"), usb_trans.req_bank_cnt); info_P(PSTR("Status 0x%02x\n"), usb_trans.req_state); info_P(PSTR("Percent %02i\n"), usb_trans.req_percent); info_P(PSTR("TX buffer %02i\n"), usb_trans.tx_remaining); info_P(PSTR("RX buffer %02i\n"), usb_trans.rx_remaining); info_P(PSTR("Syncerr %02i\n"), usb_trans.sync_errors); }