|
@@ -42,6 +42,7 @@
|
|
|
#include "watchdog.h"
|
|
|
#include "huffman-decode.h"
|
|
|
#include "rle.h"
|
|
|
+#include "loader.h"
|
|
|
|
|
|
|
|
|
extern const char _rom[] PROGMEM;
|
|
@@ -380,11 +381,55 @@ void decompress_huffman(void){
|
|
|
printf("Done\n");
|
|
|
}
|
|
|
|
|
|
-void decompress_rle(void){
|
|
|
- rle_decode(&_rom,30180,0x000000);
|
|
|
- printf("Done\n");
|
|
|
+
|
|
|
+
|
|
|
+void send_reset(){
|
|
|
+ printf("Reset Snes\n");
|
|
|
+ snes_reset_on();
|
|
|
+ snes_reset_lo();
|
|
|
+ _delay_ms(2);
|
|
|
+ snes_reset_hi();
|
|
|
+ snes_reset_off();
|
|
|
+}
|
|
|
+
|
|
|
+void send_irq(){
|
|
|
+ snes_irq_on();
|
|
|
+ snes_irq_lo();
|
|
|
+ _delay_us(20);
|
|
|
+ snes_irq_hi();
|
|
|
+ snes_irq_off();
|
|
|
+}
|
|
|
+
|
|
|
+void set_rom_mode(){
|
|
|
+ if (req_bank_size == 0x8000){
|
|
|
+ snes_lorom();
|
|
|
+ printf("Set Snes lowrom \n");
|
|
|
+ } else {
|
|
|
+ snes_hirom();
|
|
|
+ printf("Set Snes hirom \n");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void usb_connect(){
|
|
|
+ uint8_t i = 0;
|
|
|
+ printf("USB init\n");
|
|
|
+ usbDeviceDisconnect(); /* enforce re-enumeration, do this while */
|
|
|
+ cli();
|
|
|
+ printf("USB disconnect\n");
|
|
|
+ i = 10;
|
|
|
+ while (--i) { /* fake USB disconnect for > 250 ms */
|
|
|
+ led_on();
|
|
|
+ _delay_ms(35);
|
|
|
+ led_off();
|
|
|
+ _delay_ms(65);
|
|
|
+ }
|
|
|
+ led_on();
|
|
|
+ usbDeviceConnect();
|
|
|
+ printf("USB connect\n");
|
|
|
}
|
|
|
|
|
|
+
|
|
|
void boot_startup_rom(){
|
|
|
|
|
|
uint8_t i = 0;
|
|
@@ -411,9 +456,8 @@ void boot_startup_rom(){
|
|
|
snes_irq_off();
|
|
|
*/
|
|
|
|
|
|
- decompress_rle();
|
|
|
+ rle_decode(&_rom, ROM_SIZE, 0x000000);
|
|
|
dump_memory(0x10000 - 0x100, 0x10000);
|
|
|
- //crc_check_bulk_memory(0x00000, 0x10000, 0x8000);
|
|
|
|
|
|
snes_reset_hi();
|
|
|
snes_reset_off();
|
|
@@ -438,53 +482,6 @@ void boot_startup_rom(){
|
|
|
|
|
|
}
|
|
|
|
|
|
-void send_reset(){
|
|
|
- printf("Reset Snes\n");
|
|
|
- snes_reset_on();
|
|
|
- snes_reset_lo();
|
|
|
- _delay_ms(2);
|
|
|
- snes_reset_hi();
|
|
|
- snes_reset_off();
|
|
|
-}
|
|
|
-
|
|
|
-void send_irq(){
|
|
|
- snes_irq_on();
|
|
|
- snes_irq_lo();
|
|
|
- _delay_us(20);
|
|
|
- snes_irq_hi();
|
|
|
- snes_irq_off();
|
|
|
-}
|
|
|
-
|
|
|
-void set_rom_mode(){
|
|
|
- if (req_bank_size == 0x8000){
|
|
|
- snes_lorom();
|
|
|
- printf("Set Snes lowrom \n");
|
|
|
- } else {
|
|
|
- snes_hirom();
|
|
|
- printf("Set Snes hirom \n");
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-void usb_connect(){
|
|
|
- uint8_t i = 0;
|
|
|
- printf("USB init\n");
|
|
|
- usbDeviceDisconnect(); /* enforce re-enumeration, do this while */
|
|
|
- cli();
|
|
|
- printf("USB disconnect\n");
|
|
|
- i = 10;
|
|
|
- while (--i) { /* fake USB disconnect for > 250 ms */
|
|
|
- led_on();
|
|
|
- _delay_ms(35);
|
|
|
- led_off();
|
|
|
- _delay_ms(65);
|
|
|
- }
|
|
|
- led_on();
|
|
|
- usbDeviceConnect();
|
|
|
- printf("USB connect\n");
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
int main(void)
|
|
|
{
|
|
|
uint8_t i;
|