get new quickdevloader commands working

This commit is contained in:
David Voswinkel 2009-08-03 21:44:23 +02:00
parent 3e3fbe5bc4
commit 92762d7f51
6 changed files with 1751 additions and 1966 deletions

File diff suppressed because it is too large Load Diff

View File

@ -2,6 +2,8 @@
#ifndef __FIFO_H__ #ifndef __FIFO_H__
#define __FIFO_H__ #define __FIFO_H__
#define ROM_SIZE 31104 #define ROM_BUFFER_SIZE 27288
#define ROM_HUFFMAN_SIZE 27288
#define ROM_RLE_SIZE 30344
#endif #endif

View File

@ -91,7 +91,6 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
req_bank_size = (uint32_t)1 << rq->wValue.word; req_bank_size = (uint32_t)1 << rq->wValue.word;
sync_errors = 0; sync_errors = 0;
crc = 0; crc = 0;
shared_memory_put(SHARED_MEM_CMD_UPLOAD_START,0);
debug(DEBUG_USB,"USB_UPLOAD_INIT: bank_size=0x%08lx\n", req_bank_size); debug(DEBUG_USB,"USB_UPLOAD_INIT: bank_size=0x%08lx\n", req_bank_size);
/* /*
@ -154,7 +153,7 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
debug(DEBUG_USB,"USB_BULK_UPLOAD_INIT: bank_size=0x%08lx bank_cnt=0x%x end_addr=0x%08lx\n", debug(DEBUG_USB,"USB_BULK_UPLOAD_INIT: bank_size=0x%08lx bank_cnt=0x%x end_addr=0x%08lx\n",
req_bank_size, req_bank_cnt, req_addr_end); req_bank_size, req_bank_cnt, req_addr_end);
shared_memory_put(SHARED_MEM_CMD_UPLOAD_START,0); shared_memory_put(SHARED_MEM_CMD_BANK_COUNT,req_bank_cnt);
if (req_addr == 0x000000){ if (req_addr == 0x000000){
timer_start(); timer_start();
} }
@ -215,7 +214,7 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
#endif #endif
req_bank++; req_bank++;
timer_start(); timer_start();
shared_memory_put(SHARED_MEM_CMD_UPLOAD_PROGESS,req_bank); shared_memory_put(SHARED_MEM_CMD_BANK_CURRENT,req_bank);
sram_bulk_write_start(req_addr); sram_bulk_write_start(req_addr);
} }
@ -454,7 +453,6 @@ void usb_connect(){
void boot_startup_rom(){ void boot_startup_rom(){
uint8_t i = 0;
info("Activate AVR bus\n"); info("Activate AVR bus\n");
avr_bus_active(); avr_bus_active();
@ -495,6 +493,7 @@ void boot_startup_rom(){
send_reset(); send_reset();
_delay_ms(100); _delay_ms(100);
#if 0 #if 0
uint8_t i = 0;
i = 20; i = 20;
info("Wait"); info("Wait");
while (--i){ while (--i){
@ -507,8 +506,6 @@ void boot_startup_rom(){
int main(void) int main(void)
{ {
uint8_t i;
uint16_t irq_count = 0;
uart_init(); uart_init();
stdout = &uart_stdout; stdout = &uart_stdout;
@ -566,6 +563,8 @@ int main(void)
usbPoll(); usbPoll();
#ifdef DO_IRQ #ifdef DO_IRQ
uint8_t i;
uint16_t irq_count = 0;
i = 10; i = 10;
while (--i) { while (--i) {
_delay_ms(100); _delay_ms(100);

View File

@ -64,13 +64,12 @@ void shared_memory_irq_restore(){
void shared_memory_put(uint8_t cmd, uint8_t value){ void shared_memory_put(uint8_t cmd, uint8_t value){
//return;
info("Write shared memory 0x%04x=0x%02x 0x%04x=0x%02x \n",SHARED_MEM_LOC_CMD,cmd,SHARED_MEM_LOC_PAYLOAD,value); info("Write shared memory 0x%04x=0x%02x 0x%04x=0x%02x \n",SHARED_MEM_LOC_CMD,cmd,SHARED_MEM_LOC_PAYLOAD,value);
shared_memory_scratchpad_save(); shared_memory_scratchpad_save();
shared_memory_irq_hook(); shared_memory_irq_hook();
sram_write(SHARED_MEM_LOC_STATE,1); sram_write(SHARED_MEM_LOC_STATE,SHARED_MEM_SNES_ACK);
sram_write(SHARED_MEM_LOC_CMD,cmd); sram_write(SHARED_MEM_LOC_CMD,cmd);
sram_write(SHARED_MEM_LOC_PAYLOAD,value); sram_write(SHARED_MEM_LOC_PAYLOAD,value);

View File

@ -21,10 +21,19 @@
#ifndef __SHARED_MEMORY_H__ #ifndef __SHARED_MEMORY_H__
#define __SHARED_MEMORY_H__ #define __SHARED_MEMORY_H__
#define SHARED_MEM_CMD_UPLOAD_START 1
#define SHARED_MEM_CMD_UPLOAD_END 2 #define SHARED_MEM_SNES_ACK 0xa5
#define SHARED_MEM_CMD_UPLOAD_PROGESS 3 #define SHARED_MEM_SNES_RTS 0x5a
#define SHARED_MEM_CMD_TERMINATE 4
#define SHARED_MEM_CMD_BANK_COUNT 0
#define SHARED_MEM_CMD_BANK_CURRENT 1
#define SHARED_MEM_CMD_UPLOAD_START 3
#define SHARED_MEM_CMD_UPLOAD_END 4
#define SHARED_MEM_CMD_UPLOAD_PROGESS 5
#define SHARED_MEM_CMD_TERMINATE 6
#define SHARED_MEM_LOC_STATE 0x000000 #define SHARED_MEM_LOC_STATE 0x000000
#define SHARED_MEM_LOC_CMD 0x000001 #define SHARED_MEM_LOC_CMD 0x000001

View File

@ -7,16 +7,28 @@ import time
LEN = 2**16 LEN = 2**16
TARGET="/Users/david/Devel/arch/avr/code/quickdev16/avr/usbload" TARGET="/Users/david/Devel/arch/avr/code/quickdev16/avr/usbload"
HUFFMAN_ENCODER="/Users/david/Devel/arch/avr/code/quickdev16/tools/huffman/huffman-encode"
data = open(sys.argv[1],"r").read() data = open(sys.argv[1],"r").read()
print "Load %s, %i bytes" % (sys.argv[1],len(data))
print "Load %s (%i) bytes" % (sys.argv[1],len(data))
data = data[:LEN] data = data[:LEN]
print "Use (%i) bytes" % (len(data)) print "Use %i bytes" % (len(data))
data = binascii.rlecode_hqx(data) data = binascii.rlecode_hqx(data)
print "RLE crunch (%i) bytes" % (len(data)) print "RLE crunch (%i) bytes" % (len(data))
binfile = open("/tmp/loader.rle","w") binfile = open("/tmp/loader.rle","w")
binfile.write(data) binfile.write(data)
binfile.close() binfile.close()
rle_size = len(data)
cmd = "%s /tmp/loader.rle" % HUFFMAN_ENCODER
os.system(cmd)
data = open("/tmp/loader.rle.hfm","r").read()
print "HUFFMAN crunch (%i) bytes" % (len(data))
huffman_size = len(data)
os.unlink("/tmp/loader.rle")
os.unlink("/tmp/loader.rle.hfm")
cfile = open("/tmp/loader.c","w") cfile = open("/tmp/loader.c","w")
hfile = open("/tmp/loader.h","w") hfile = open("/tmp/loader.h","w")
@ -24,10 +36,12 @@ hfile.write('''
#ifndef __FIFO_H__ #ifndef __FIFO_H__
#define __FIFO_H__ #define __FIFO_H__
#define ROM_SIZE %i #define ROM_BUFFER_SIZE %i
#define ROM_HUFFMAN_SIZE %i
#define ROM_RLE_SIZE %i
#endif #endif
''' % len(data)) ''' % (len(data), huffman_size, rle_size))
cfile.write('''/* cfile.write('''/*
File: %s File: %s
@ -36,7 +50,7 @@ Time: %s
#include <avr/pgmspace.h> #include <avr/pgmspace.h>
#include <loader.h> #include <loader.h>
const char _rom[ROM_SIZE] PROGMEM = { const char _rom[ROM_BUFFER_SIZE] PROGMEM = {
''' % (sys.argv[1],time.strftime("%a, %d %b %Y %H:%M:%S", time.localtime()))) ''' % (sys.argv[1],time.strftime("%a, %d %b %Y %H:%M:%S", time.localtime())))
for idx,c in enumerate(data): for idx,c in enumerate(data):