Merge branch 'master' of git://github.com/optixx/quickdev16

This commit is contained in:
Tobias Pflug 2009-11-01 11:27:00 +01:00
commit c520e850b4
10 changed files with 228 additions and 155 deletions

View File

@ -471,13 +471,12 @@ int __attribute__ ((noreturn, OS_main)) main(void)
jump_to_app(); jump_to_app();
} }
#ifdef AVR_BTLDR_SWITCH ENABLE #if AVR_BTLDR_SWITCH_ENABLE
if ((AVR_BTLDR_EN_IN & ( 1 << AVR_BTLDR_EN_PIN)) == 0){ if ((AVR_BTLDR_EN_IN & ( 1 << AVR_BTLDR_EN_PIN)) == 0){
banner(); banner();
uart_puts("Bootloader flashing is disabled\n\r"); uart_puts("Bootloader flashing is disabled\n\r");
MCUSR = 0; MCUSR = 0;
leave_bootloader(); leave_bootloader();
} }
#endif #endif

View File

@ -20,3 +20,4 @@
#define DEBUG 1 #define DEBUG 1
#define DEBUG_USB 2 #define DEBUG_USB 2
#define AVR_BTLDR_SWITCH_ENABLE 1

View File

@ -23,14 +23,15 @@ F_CPU = 20000000
TARGET = main TARGET = main
AVRDUDE = avrdude -c usbasp -p $(DEVICE) AVRDUDE = avrdude -c usbasp -p $(DEVICE)
SIZE = avr-size SIZE = avr-size
BOOT_ROM_SMALL = ../../roms/qd16boot01.smc BOOT_ROM01 = ../../roms/qd16boot01.smc
BOOT_ROM_FULL = ../../roms/qd16boot02.smc BOOT_ROM02 = ../../roms/qd16boot02.smc
ROM_CONVERT = ../../scripts/conv_rle.py CONVERT_RLE = ../../scripts/conv_rle.py
CONVERT_ZIP = ../../scripts/conv_zip.py
ifeq ($(DEBUG),1) ifeq ($(DEBUG),1)
LDFLAGS =-Wl,-u,vfprintf -lprintf_flt LDFLAGS =-Wl,-u,vfprintf
CFLAGS =-Iusbdrv -I. -DDEBUG_LEVEL=0 CFLAGS =-Iusbdrv -I. -DDEBUG_LEVEL=0
OBJECTS = usbdrv/usbdrv.o usbdrv/usbdrvasm.o usbdrv/oddebug.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 \ main.o usb_bulk.o uart.o fifo.o sram.o crc.o debug.o \
@ -79,11 +80,11 @@ fuse:
flash: main.hex flash: main.hex
$(AVRDUDE) -U flash:w:main.hex:i $(AVRDUDE) -U flash:w:main.hex:i
loader: loader01:
python $(ROM_CONVERT) $(BOOT_ROM_SMALL) python $(CONVERT_RLE) $(BOOT_ROM01)
loader_full: loader02:
python $(ROM_CONVERT) $(BOOT_ROM_FULL) python $(CONVERT_ZIP) $(BOOT_ROM02)
.c.o: .c.o:
$(COMPILE) -c $< -o $@ $(COMPILE) -c $< -o $@

View File

@ -58,37 +58,6 @@ void usb_connect()
} }
void send_reset()
{
info_P(PSTR("Reset SNES\n"));
cli();
snes_reset_on();
snes_reset_lo();
_delay_ms(2);
snes_reset_hi();
snes_reset_off();
sei();
}
void send_irq()
{
snes_irq_on();
snes_irq_lo();
_delay_us(20);
snes_irq_hi();
snes_irq_off();
}
void set_rom_mode()
{
if (usb_trans.req_bank_size == 0x8000) {
snes_lorom();
info_P(PSTR("Set SNES lowrom \n"));
} else {
snes_hirom();
info_P(PSTR("Set SNES hirom \n"));
}
}
void boot_startup_rom(uint16_t init_delay) void boot_startup_rom(uint16_t init_delay)
{ {
@ -97,8 +66,8 @@ void boot_startup_rom(uint16_t init_delay)
info_P(PSTR("Fetch loader rom\n")); info_P(PSTR("Fetch loader rom\n"));
system_set_bus_avr(); system_set_bus_avr();
snes_irq_lo(); //snes_irq_lo();
system_snes_irq_off(); //system_snes_irq_off();
system_set_rom_lorom(); system_set_rom_lorom();
//info_P(PSTR("Activate AVR bus\n")); //info_P(PSTR("Activate AVR bus\n"));
@ -138,7 +107,12 @@ void boot_startup_rom(uint16_t init_delay)
system_send_snes_reset(); system_send_snes_reset();
_delay_ms(init_delay); info_P(PSTR("Move Loader to wram"));
for (i=0;i<30;i++){
_delay_ms(20);
info_P(PSTR("."));
}
info_P(PSTR("\n"));
} }
void banner(){ void banner(){

View File

@ -50,8 +50,9 @@
#define DO_CRC_CHECK_LOADER 0 #define DO_CRC_CHECK_LOADER 0
#define DO_CRC_CHECK 0 #define DO_CRC_CHECK 0
#define DO_SHM_SCRATCHPAD 0 #define DO_SHM_SCRATCHPAD 1
#define DO_SHM 0 #define DO_SHM 0
#define DO_TIMER 0 #define DO_TIMER 0
#define DO_SHELL 1
#endif #endif

View File

@ -1,6 +1,6 @@
/* /*
File: qd16boot01.smc File: qd16boot01.smc
Time: Sun, 18 Oct 2009 09:40:40 Time: Fri, 30 Oct 2009 16:49:11
*/ */
#ifndef __FIFO_H__ #ifndef __FIFO_H__
#define __FIFO_H__ #define __FIFO_H__

View File

@ -56,8 +56,7 @@ extern FILE uart_stdout;
#endif #endif
extern system_t system; extern system_t system;
uint8_t debug_level = (DEBUG | DEBUG_CRC); uint8_t debug_level = (DEBUG | DEBUG_USB | DEBUG_CRC);
usb_transaction_t usb_trans; usb_transaction_t usb_trans;
@ -170,11 +169,6 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
* ------------------------------------------------------------------------- * -------------------------------------------------------------------------
*/ */
} else if (rq->bRequest == USB_BULK_UPLOAD_END) { } else if (rq->bRequest == USB_BULK_UPLOAD_END) {
if (usb_trans.req_state != REQ_STATUS_BULK_UPLOAD) {
debug_P(DEBUG_USB,
PSTR("USB_BULK_UPLOAD_END: ERROR state is not REQ_STATUS_BULK_UPLOAD\n"));
return 0;
}
debug_P(DEBUG_USB, PSTR("USB_BULK_UPLOAD_END:\n")); debug_P(DEBUG_USB, PSTR("USB_BULK_UPLOAD_END:\n"));
usb_trans.req_state = REQ_STATUS_IDLE; usb_trans.req_state = REQ_STATUS_IDLE;
sram_bulk_write_end(); sram_bulk_write_end();
@ -219,6 +213,7 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
* ------------------------------------------------------------------------- * -------------------------------------------------------------------------
*/ */
} else if (rq->bRequest == USB_SET_LAODER) { } else if (rq->bRequest == USB_SET_LAODER) {
debug_P(DEBUG_USB, PSTR("USB_SET_LAODER:\n"));
usb_trans.loader_enabled = rq->wValue.word; usb_trans.loader_enabled = rq->wValue.word;
ret_len = 0; ret_len = 0;
} }
@ -263,20 +258,14 @@ int main(void)
usb_connect(); usb_connect();
sei(); sei();
while (1) { while (1) {
system_set_bus_avr(); system_set_bus_avr();
system_set_wr_disable(); system_set_wr_disable();
/*
avr_bus_active();
info_P(PSTR("Activate AVR bus\n"));
info_P(PSTR("Disable SNES WR\n"));
snes_wr_disable();
*/
info_P(PSTR("USB poll\n"));
while (usb_trans.req_state != REQ_STATUS_SNES) { while (usb_trans.req_state != REQ_STATUS_SNES) {
usbPoll(); usbPoll();
#if DO_SHELL
#ifndef NO_DEBUG #ifndef NO_DEBUG
shell_run(); shell_run();
#endif
#endif #endif
} }
@ -299,35 +288,24 @@ int main(void)
system_set_bus_snes(); system_set_bus_snes();
system_send_snes_reset(); system_send_snes_reset();
irq_stop(); irq_stop();
/*
info_P(PSTR("-->Switch TO SNES\n"));
set_rom_mode();
snes_wr_disable();
info_P(PSTR("Disable SNES WR\n"));
snes_bus_active();
info_P(PSTR("Activate SNES bus\n"));
irq_stop();
send_reset();
*/
info_P(PSTR("Poll USB\n"));
while ((usb_trans.req_state != REQ_STATUS_AVR)) { while ((usb_trans.req_state != REQ_STATUS_AVR)) {
usbPoll(); usbPoll();
#if DO_SHELL
#ifndef NO_DEBUG #ifndef NO_DEBUG
shell_run(); shell_run();
#endif
#endif #endif
} }
//info_P(PSTR("-->Switch TO AVR\n")); info_P(PSTR("-->Switch TO AVR\n"));
shared_memory_init(); shared_memory_init();
irq_init();
if(usb_trans.loader_enabled) { if(usb_trans.loader_enabled) {
boot_startup_rom(500); boot_startup_rom(50);
} else { } else {
system_set_bus_avr(); system_set_bus_avr();
system_send_snes_reset(); system_send_snes_reset();
//avr_bus_active();
//send_reset();
} }
irq_init(); globals_init();
} }
return 0; return 0;
} }

View File

@ -44,11 +44,11 @@
extern system_t system; extern system_t system;
const PROGMEM char STR_ROM[] = "Rom"; const char STR_ROM[] PROGMEM = "Rom";
const PROGMEM char STR_RAM[] = "Sram"; const char STR_RAM[] PROGMEM = "Sram";
const PROGMEM char STR_BAT[] = "Battery"; const char STR_BAT[] PROGMEM = "Battery";
const PROGMEM char STR_SUPERFX[] = "SuperFX"; const char STR_SUPERFX[] PROGMEM = "SuperFX";
const PROGMEM char STR_SA[] = "SA-1"; const char STR_SA[] PROGMEM = "SA-1";
uint8_t command_buf[RECEIVE_BUF_LEN]; uint8_t command_buf[RECEIVE_BUF_LEN];
@ -59,6 +59,8 @@ volatile uint8_t cr = 0;
uint8_t *token_ptr; uint8_t *token_ptr;
#if DO_SHELL
uint8_t *get_token(void) uint8_t *get_token(void)
{ {
uint8_t *p = token_ptr; uint8_t *p = token_ptr;
@ -408,45 +410,45 @@ void shell_run(void)
} }
c = sram_read(0xffd6 - offset); c = sram_read(0xffd6 - offset);
info_P(PSTR("TYPE 0x%04x \n"), (0xffd6 - offset)); info_P(PSTR("TYPE 0x%04xc"), (0xffd6 - offset),c);
switch(c){ switch(c){
case 0x00: case 0x00:
info_P(PSTR("%s\n"),STR_ROM); info_P(PSTR("Rom\n"));
break; break;
case 0x01: case 0x01:
info_P(PSTR("%s + %s\n"),STR_ROM,STR_RAM); info_P(PSTR("Rom + Sram\n"));
break; break;
case 0x02: case 0x02:
info_P(PSTR("%s + %s + %s\n"),STR_ROM,STR_RAM,STR_BAT); info_P(PSTR("Rom + Sram + Battery\n"));
break; break;
case 0x13: case 0x13:
info_P(STR_SUPERFX); info_P(PSTR("SuperFX\n"));
break; break;
case 0x14: case 0x14:
info_P(STR_SUPERFX); info_P(PSTR("SuperFX\n"));
break; break;
case 0x15: case 0x15:
info_P(PSTR("%s + %s\n"),STR_SUPERFX,STR_RAM); info_P(PSTR("SuperFX + Sram\n"));
break; break;
case 0x1a: case 0x1a:
info_P(PSTR("%s + %s\n"),STR_SUPERFX,STR_RAM); info_P(PSTR("SuperFX + Sram\n"));
break; break;
case 0x34: case 0x34:
info_P(STR_SA); info_P(PSTR("SA-1"));
break; break;
case 0x35: case 0x35:
info_P(STR_SA); info_P(PSTR("SA-1"));
break; break;
default: default:
info_P(PSTR("Unkown 0x%02x\n"),c); info_P(PSTR("Unkown 0x%02x\n"),c);
break; break;
} }
arg1 = ( 2 << ( sram_read(0xffd7 - offset) - 1 )); arg1 = ( 2 << ( sram_read(0xffd7 - offset) - 1 ));
info_P(PSTR("ROM 0x%04x %i MBit ( %i KiB)\n"), (0xffd7 - offset),arg1, ((arg1 / 1024) * 8) ); info_P(PSTR("ROM 0x%04x %li MBit ( %li KiB)\n"), (0xffd7 - offset), (arg1 / 128), arg1);
arg1 = ( 2 << ( sram_read(0xffd8 - offset) - 1 )); arg1 = ( 2 << ( sram_read(0xffd8 - offset) - 1 ));
info_P(PSTR("RAM 0x%04x %i MBit ( %i KiB)\n"), (0xffd8 - offset),arg1, ((arg1 / 1024) * 8) ); info_P(PSTR("RAM 0x%04x %li KiB\n"), (0xffd8 - offset), arg1);
info_P(PSTR("CCODE 0x%04x \n"), (0xffd9 - offset)); info_P(PSTR("CCODE 0x%04x "), (0xffd9 - offset));
c = sram_read(0xffd9 - offset); c = sram_read(0xffd9 - offset);
if (c==0x00 || c==0x01 || 0x0d ) if (c==0x00 || c==0x01 || 0x0d )
info_P(PSTR("NTSC\n")); info_P(PSTR("NTSC\n"));
@ -488,4 +490,4 @@ void shell_run(void)
prompt(); prompt();
} }
#endif

View File

@ -3,7 +3,7 @@
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>currentDocument</key> <key>currentDocument</key>
<string>avr/usbload/main.c</string> <string>avr/usbload/shell.c</string>
<key>documents</key> <key>documents</key>
<array> <array>
<dict> <dict>
@ -21,33 +21,75 @@
<integer>271</integer> <integer>271</integer>
<key>metaData</key> <key>metaData</key>
<dict> <dict>
<key>avr/usbload/Makefile</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>10</integer>
<key>line</key>
<integer>86</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>45</integer>
</dict>
<key>avr/usbload/command.c</key> <key>avr/usbload/command.c</key>
<dict> <dict>
<key>caret</key> <key>caret</key>
<dict> <dict>
<key>column</key> <key>column</key>
<integer>18</integer> <integer>1</integer>
<key>line</key> <key>line</key>
<integer>42</integer> <integer>100</integer>
</dict> </dict>
<key>firstVisibleColumn</key> <key>firstVisibleColumn</key>
<integer>0</integer> <integer>0</integer>
<key>firstVisibleLine</key> <key>firstVisibleLine</key>
<integer>95</integer> <integer>122</integer>
</dict> </dict>
<key>avr/usbload/command.h</key> <key>avr/usbload/config.h</key>
<dict> <dict>
<key>caret</key> <key>caret</key>
<dict> <dict>
<key>column</key> <key>column</key>
<integer>26</integer> <integer>37</integer>
<key>line</key> <key>line</key>
<integer>30</integer> <integer>54</integer>
</dict> </dict>
<key>firstVisibleColumn</key> <key>firstVisibleColumn</key>
<integer>0</integer> <integer>0</integer>
<key>firstVisibleLine</key> <key>firstVisibleLine</key>
<integer>7</integer>
</dict>
<key>avr/usbload/crc.c</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>59</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer> <integer>0</integer>
<key>firstVisibleLine</key>
<integer>34</integer>
</dict>
<key>avr/usbload/debug.c</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>5</integer>
<key>line</key>
<integer>26</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>1</integer>
</dict> </dict>
<key>avr/usbload/irq.c</key> <key>avr/usbload/irq.c</key>
<dict> <dict>
@ -56,86 +98,112 @@
<key>column</key> <key>column</key>
<integer>0</integer> <integer>0</integer>
<key>line</key> <key>line</key>
<integer>54</integer> <integer>39</integer>
</dict> </dict>
<key>columnSelection</key>
<false/>
<key>firstVisibleColumn</key> <key>firstVisibleColumn</key>
<integer>0</integer> <integer>0</integer>
<key>firstVisibleLine</key> <key>firstVisibleLine</key>
<integer>26</integer> <integer>23</integer>
<key>selectFrom</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>38</integer>
</dict>
<key>selectTo</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>39</integer>
</dict>
</dict> </dict>
<key>avr/usbload/main.c</key> <key>avr/usbload/main.c</key>
<dict> <dict>
<key>caret</key> <key>caret</key>
<dict> <dict>
<key>column</key> <key>column</key>
<integer>18</integer> <integer>0</integer>
<key>line</key> <key>line</key>
<integer>269</integer> <integer>330</integer>
</dict> </dict>
<key>columnSelection</key>
<false/>
<key>firstVisibleColumn</key> <key>firstVisibleColumn</key>
<integer>0</integer> <integer>0</integer>
<key>firstVisibleLine</key> <key>firstVisibleLine</key>
<integer>247</integer> <integer>281</integer>
<key>selectFrom</key>
<dict>
<key>column</key>
<integer>8</integer>
<key>line</key>
<integer>269</integer>
</dict>
<key>selectTo</key>
<dict>
<key>column</key>
<integer>23</integer>
<key>line</key>
<integer>269</integer>
</dict>
</dict> </dict>
<key>avr/usbload/system.c</key> <key>avr/usbload/shared_memory.c</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>26</integer>
<key>line</key>
<integer>247</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>222</integer>
</dict>
<key>avr/usbload/shell.c</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>83</integer>
<key>line</key>
<integer>444</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>409</integer>
</dict>
<key>avr/usbload/shell.h</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>22</integer>
<key>line</key>
<integer>23</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>0</integer>
</dict>
<key>avr/usbload/sram.c</key>
<dict> <dict>
<key>caret</key> <key>caret</key>
<dict> <dict>
<key>column</key> <key>column</key>
<integer>0</integer> <integer>0</integer>
<key>line</key> <key>line</key>
<integer>119</integer> <integer>321</integer>
</dict> </dict>
<key>firstVisibleColumn</key> <key>firstVisibleColumn</key>
<integer>0</integer> <integer>0</integer>
<key>firstVisibleLine</key> <key>firstVisibleLine</key>
<integer>78</integer> <integer>288</integer>
</dict> </dict>
<key>avr/usbload/system.h</key> <key>avr/usbload/sram.h</key>
<dict> <dict>
<key>caret</key> <key>caret</key>
<dict> <dict>
<key>column</key> <key>column</key>
<integer>12</integer> <integer>23</integer>
<key>line</key> <key>line</key>
<integer>33</integer> <integer>208</integer>
</dict> </dict>
<key>columnSelection</key>
<false/>
<key>firstVisibleColumn</key> <key>firstVisibleColumn</key>
<integer>0</integer> <integer>0</integer>
<key>firstVisibleLine</key> <key>firstVisibleLine</key>
<integer>1</integer> <integer>175</integer>
<key>selectFrom</key>
<dict>
<key>column</key>
<integer>9</integer>
<key>line</key>
<integer>33</integer>
</dict>
<key>selectTo</key>
<dict>
<key>column</key>
<integer>19</integer>
<key>line</key>
<integer>33</integer>
</dict>
</dict> </dict>
<key>scripts/conv_rle.py</key> <key>scripts/conv_rle.py</key>
<dict> <dict>
@ -151,6 +219,34 @@
<key>firstVisibleLine</key> <key>firstVisibleLine</key>
<integer>49</integer> <integer>49</integer>
</dict> </dict>
<key>scripts/conv_zip.py</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>46</integer>
<key>line</key>
<integer>22</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>6</integer>
</dict>
<key>scripts/zip2raw.rb</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>0</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>95</integer>
</dict>
<key>snes/banktest/LoadGraphics.asm</key> <key>snes/banktest/LoadGraphics.asm</key>
<dict> <dict>
<key>caret</key> <key>caret</key>
@ -184,10 +280,18 @@
<array> <array>
<string>scripts/conv_rle.py</string> <string>scripts/conv_rle.py</string>
<string>avr/usbload/main.c</string> <string>avr/usbload/main.c</string>
<string>avr/usbload/command.h</string> <string>avr/usbload/shell.h</string>
<string>avr/usbload/system.c</string> <string>avr/usbload/shell.c</string>
<string>avr/usbload/system.h</string> <string>scripts/conv_zip.py</string>
<string>avr/usbload/Makefile</string>
<string>scripts/zip2raw.rb</string>
<string>avr/usbload/shared_memory.c</string>
<string>avr/usbload/sram.h</string>
<string>avr/usbload/sram.c</string>
<string>avr/usbload/command.c</string> <string>avr/usbload/command.c</string>
<string>avr/usbload/crc.c</string>
<string>avr/usbload/config.h</string>
<string>avr/usbload/debug.c</string>
<string>avr/usbload/irq.c</string> <string>avr/usbload/irq.c</string>
</array> </array>
<key>showFileHierarchyDrawer</key> <key>showFileHierarchyDrawer</key>
@ -237,7 +341,15 @@
<key>isExpanded</key> <key>isExpanded</key>
<true/> <true/>
<key>subItems</key> <key>subItems</key>
<dict/> <dict>
<key>webpy</key>
<dict>
<key>isExpanded</key>
<true/>
<key>subItems</key>
<dict/>
</dict>
</dict>
</dict> </dict>
<key>snes</key> <key>snes</key>
<dict> <dict>

View File

@ -9,14 +9,19 @@ huffman = False
TARGET=os.getcwd() TARGET=os.getcwd()
SOURCE=sys.argv[1] SOURCE=sys.argv[1]
DEFLATE=os.path.basename(sys.argv[1]) + ".deflate" DEFLATE=os.path.basename(sys.argv[1]) + ".deflate"
PATH="/Users/david/Devel/arch/avr/code/quickdev16/scripts"
WINE="/Applications/Darwine/Wine.bundle/Contents/bin/wine"
KZIP=os.path.join(PATH,"kzip.exe")
DEFLOPT=os.path.join(PATH,"DeflOpt.exe")
ZIP2RAW=os.path.join(PATH,"zip2raw.rb")
if os.path.isfile("rom.zip"): if os.path.isfile("rom.zip"):
os.unlink("rom.zip") os.unlink("rom.zip")
os.system("wine kzip.exe rom /s1 %s" % SOURCE) os.system("%s %s rom /s1 %s" % (WINE,KZIP,SOURCE))
os.system("wine DeflOpt.exe /a rom.zip") os.system("%s %s /a rom.zip" % (WINE,DEFLOPT))
os.system("ruby zip2raw.rb rom.zip") os.system("ruby %s rom.zip" % ZIP2RAW)
if os.path.isfile("rom.zip"): if os.path.isfile("rom.zip"):
os.unlink("rom.zip") os.unlink("rom.zip")