diff --git a/avr/usbload/Makefile b/avr/usbload/Makefile index 9d293eb..9ea3c36 100644 --- a/avr/usbload/Makefile +++ b/avr/usbload/Makefile @@ -8,7 +8,7 @@ AVRDUDE = avrdude -c usbasp -p $(DEVICE) CFLAGS = -Iusbdrv -I. -DDEBUG_LEVEL=0 #-std=gnu99 -OBJECTS = usbdrv/usbdrv.o usbdrv/usbdrvasm.o usbdrv/oddebug.o main.o usb_bulk.o uart.o fifo.o sram.o crc.o debug.o dump.o timer.o +OBJECTS = usbdrv/usbdrv.o usbdrv/usbdrvasm.o usbdrv/oddebug.o main.o usb_bulk.o uart.o fifo.o sram.o crc.o debug.o dump.o timer.o watchdog.o COMPILE = avr-gcc -Wall -Os -DF_CPU=$(F_CPU) $(CFLAGS) -mmcu=$(DEVICE) diff --git a/avr/usbload/commandline/snesuploader.c b/avr/usbload/commandline/snesuploader.c index b504358..2b7acca 100644 --- a/avr/usbload/commandline/snesuploader.c +++ b/avr/usbload/commandline/snesuploader.c @@ -15,7 +15,7 @@ */ -#define BANK_SIZE_SHIFT 16 +#define BANK_SIZE_SHIFT 15 #define BANK_SIZE (1<bRequest == USB_SNES_BOOT) { - req_state = REQ_STATUS_BOOT; - debug(DEBUG_USB,"USB_SNES_BOOT:\n"); + } else if (rq->bRequest == USB_MODE_SNES) { + req_state = REQ_STATUS_SNES; + debug(DEBUG_USB,"USB_MODE_SNES:\n"); + ret_len = 0; +/* + * ------------------------------------------------------------------------- + */ + } else if (rq->bRequest == USB_MODE_AVR) { + req_state = REQ_STATUS_AVR; + debug(DEBUG_USB,"USB_MODE_AVR:\n"); + ret_len = 0; +/* + * ------------------------------------------------------------------------- + */ + } else if (rq->bRequest == USB_AVR_RESET) { + debug(DEBUG_USB,"USB_AVR_RESET:\n"); + soft_reset(); ret_len = 0; /* * ------------------------------------------------------------------------- @@ -305,9 +323,15 @@ int main(void) uart_init(); stdout = &uart_stdout; + system_init(); - printf("Sytem Init\n"); + printf("Sytem start\n"); + +#if 0 + wdt_init(); + printf("Watchdog init\n"); +#endif #if 0 test_read_write(); @@ -317,7 +341,7 @@ int main(void) #endif usbInit(); - printf("USB Init\n"); + printf("USB init\n"); usbDeviceDisconnect(); /* enforce re-enumeration, do this while * interrupts are disabled! */ cli(); @@ -328,58 +352,60 @@ int main(void) _delay_ms(35); led_off(); _delay_ms(65); - } led_on(); usbDeviceConnect(); printf("USB connect\n"); - avr_bus_active(); - printf("Activate AVR bus\n"); - - printf("IRQ off\n"); - snes_irq_lo(); - snes_irq_off(); - printf("Set Snes lowrom\n"); - snes_lorom(); + while (1){ + avr_bus_active(); + printf("Activate AVR bus\n"); - printf("Disable snes WR\n"); - snes_wr_disable(); - - sei(); - printf("USB poll\n"); - while (req_state != REQ_STATUS_BOOT){ - usbPoll(); - } - printf("USB poll done\n"); - - usbDeviceDisconnect(); - printf("USB disconnect\n"); + printf("IRQ off\n"); + snes_irq_lo(); + snes_irq_off(); -#if 0 - crc_check_bulk_memory(0x000000, req_addr_end, req_bank_size); -#endif - - snes_irq_lo(); - snes_irq_off(); - - printf("IRQ off\n"); - if (req_bank_size == 0x8000){ + printf("Set Snes lowrom\n"); snes_lorom(); - printf("Set Snes lowrom \n"); - } else { - snes_hirom(); - printf("Set Snes hirom \n"); - } - snes_wr_disable(); - printf("Disable snes WR\n"); - - snes_bus_active(); - printf("Activate Snes bus\n"); - while(1); + printf("Disable snes WR\n"); + snes_wr_disable(); + + sei(); + printf("USB poll\n"); + while (req_state != REQ_STATUS_SNES){ + usbPoll(); + } + printf("USB poll done\n"); + + + #if 0 + crc_check_bulk_memory(0x000000, req_addr_end, req_bank_size); + #endif + + snes_irq_lo(); + snes_irq_off(); + + printf("IRQ off\n"); + if (req_bank_size == 0x8000){ + snes_lorom(); + printf("Set Snes lowrom \n"); + } else { + snes_hirom(); + printf("Set Snes hirom \n"); + } + snes_wr_disable(); + printf("Disable snes WR\n"); + + snes_bus_active(); + printf("Activate Snes bus\n"); + + while (req_state != REQ_STATUS_AVR){ + usbPoll(); + } + } return 0; } diff --git a/avr/usbload/requests.h b/avr/usbload/requests.h index 78da0a2..aaf1001 100644 --- a/avr/usbload/requests.h +++ b/avr/usbload/requests.h @@ -29,6 +29,8 @@ #define USB_BULK_UPLOAD_ADDR 7 #define USB_BULK_UPLOAD_NEXT 8 #define USB_BULK_UPLOAD_END 9 -#define USB_SNES_BOOT 10 +#define USB_MODE_SNES 10 +#define USB_MODE_AVR 11 +#define USB_AVR_RESET 12 #endif /* __REQUESTS_H_INCLUDED__ */ diff --git a/tools/ucon64/2.0/src/backup/snesram.c b/tools/ucon64/2.0/src/backup/snesram.c index 05b8ccc..21f11f9 100644 --- a/tools/ucon64/2.0/src/backup/snesram.c +++ b/tools/ucon64/2.0/src/backup/snesram.c @@ -141,6 +141,11 @@ snesram_write_rom (const char *filename) printf ("Press q to abort\n\n"); starttime = time (NULL); + cnt = usb_control_msg(handle, + USB_TYPE_VENDOR | USB_RECIP_DEVICE | + USB_ENDPOINT_OUT, USB_MODE_AVR, 0, 0, NULL, + 0, 5000); + cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT, @@ -197,7 +202,7 @@ snesram_write_rom (const char *filename) #endif cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | - USB_ENDPOINT_OUT, USB_SNES_BOOT, 0, 0, NULL, + USB_ENDPOINT_OUT, USB_MODE_SNES, 0, 0, NULL, 0, 5000); diff --git a/tools/ucon64/2.0/src/backup/snesram.h b/tools/ucon64/2.0/src/backup/snesram.h index 76da452..9f55850 100644 --- a/tools/ucon64/2.0/src/backup/snesram.h +++ b/tools/ucon64/2.0/src/backup/snesram.h @@ -34,7 +34,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #define USB_BULK_UPLOAD_ADDR 7 #define USB_BULK_UPLOAD_NEXT 8 #define USB_BULK_UPLOAD_END 9 -#define USB_SNES_BOOT 10 +#define USB_MODE_SNES 10 +#define USB_MODE_AVR 11 +#define USB_AVR_RESET 12 /* -------------------------- Device Description --------------------------- */