get new quickdevloader commands working
This commit is contained in:
parent
3e3fbe5bc4
commit
92762d7f51
3656
avr/usbload/loader.c
3656
avr/usbload/loader.c
File diff suppressed because it is too large
Load Diff
@ -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
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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);
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user