o finish first poc

This commit is contained in:
optixx 2009-04-05 15:29:09 +02:00
parent 9d38af4267
commit 0354b82c8e
3 changed files with 68 additions and 149 deletions

View File

@ -181,11 +181,10 @@ LDFLAGS += $(PRINTF_LIB_MIN) $(SCANF_LIB) $(MATH_LIB)
AVRDUDE_PROGRAMMER = stk500v2
# com1 = serial port. Use lpt1 to connect to parallel port.
AVRDUDE_PORT = /dev/tty.PL2303-00001324 # programmer connected to serial device
AVRDUDE_PORT = /dev/tty.PL2303-00002006
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
@ -210,15 +209,6 @@ AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
# avrdude -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -U lfuse:w:0xfe:m
# avrdude -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -U hfuse:w:0xd9:m
<<<<<<< HEAD:poc/avr_sdcard/Makefile
#flash_mac: $(TARGET).hex
# uisp -dprog=avr910 -dpart=ATmega8 -dserial=/dev/tty.PL2303-00001004 --erase -v --upload if=$(TARGET).hex
=======
>>>>>>> sdcard_m32:poc/avr_sdcard/Makefile
# ---------------------------------------------------------------------------
@ -333,13 +323,8 @@ gccversion :
# Program the device.
#flash: $(TARGET).hex $(TARGET).eep
# sudo $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
#flash_uisp:
# sudo uisp -dprog=avr910 -dpart=ATmega8 -dserial=/dev/ttyUSB0 --verify --erase -v --upload if=$(TARGET).hex
flash: $(TARGET).hex $(TARGET).eep
sudo $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \

View File

@ -1,7 +1,3 @@
<<<<<<< HEAD:poc/avr_sdcard/main.c
//#define F_CPU 8000000
=======
>>>>>>> sdcard_m32:poc/avr_sdcard/main.c
#include <avr/io.h>
#include <util/delay.h>
@ -11,6 +7,10 @@
#include "mmc.h"
#include "fat.h"
// Debug
#define debug(x, fmt) printf("%s:%u: %s=" fmt, __FILE__, __LINE__, #x, x)
extern FILE uart_stdout;
//SREG defines
#define S_MOSI PB5
#define S_MISO PB6
@ -28,55 +28,30 @@
#define RAM_DIR DDRA
#define RAM_REG PINA
<<<<<<< HEAD:poc/avr_sdcard/main.c
#define READ_BUFFER_SIZE 512
#define DEBUG_BUFFER_SIZE 256
#define BLOCK_CNT 512
//uint8_t debug_buffer[DEBUG_BUFFER_SIZE];
uint8_t read_buffer[READ_BUFFER_SIZE];
=======
#define CTRL_PORT PORTB
#define CTR_DIR DDRB
>>>>>>> sdcard_m32:poc/avr_sdcard/main.c
<<<<<<< HEAD:poc/avr_sdcard/main.c
//va_list args;
//va_start(args, fmt);
//vsnprintf(debug_buffer,DEBUG_BUFFER_SIZE-1, fmt, args);
//va_end(args);
//uart_puts(debug_buffer);
uart_puts(fmt);
}
=======
#define LATCH_PORT PORTB
#define LATCH_DIR DDRB
#define SPI_PORT PORTB
#define SPI_DIR DDRB
#define LED_PORT PORTD
#define LED_DIR DDRD
>>>>>>> sdcard_m32:poc/avr_sdcard/main.c
#define FILENAME "sprite.raw"
#define BUFFER_SIZE 512
#define BLOCKS 512
#define MEMSIZE 0x80000
#define READ_BUFFER_SIZE 512
#define BLOCKS 510
uint8_t read_buffer[BUFFER_SIZE];
#define debug(x, fmt) printf("%s:%u: %s=" fmt, __FILE__, __LINE__, #x, x)
extern FILE uart_stdout;
uint8_t read_buffer[READ_BUFFER_SIZE];
void dump_packet(uint32_t addr,uint32_t len,uint8_t *packet){
uint16_t i,j;
uint16_t sum =0;
uint16_t sum = 0;
uint8_t clear=0;
for (i=0;i<len;i+=16) {
sum = 0;
@ -84,15 +59,14 @@ void dump_packet(uint32_t addr,uint32_t len,uint8_t *packet){
sum +=packet[i+j];
}
if (!sum){
//printf(".");
clear=1;
continue;
<<<<<<< HEAD:poc/avr_sdcard/main.c
dprintf("%08lx:", addr + i);
=======
}
if (clear){
printf("*\n");
clear = 0;
}
printf("%08lx:", addr + i);
>>>>>>> sdcard_m32:poc/avr_sdcard/main.c
for (j=0;j<16;j++) {
printf(" %02x", packet[i+j]);
}
@ -103,11 +77,7 @@ void dump_packet(uint32_t addr,uint32_t len,uint8_t *packet){
else
printf(".");
}
<<<<<<< HEAD:poc/avr_sdcard/main.c
dprintf("|\r\n");
=======
printf("|\n");
>>>>>>> sdcard_m32:poc/avr_sdcard/main.c
}
}
@ -201,13 +171,17 @@ void sram_init(void){
LED_PORT |= (1<<D_LED0);
}
void sram_snes_mode(void){
CTRL_PORT |= (1<<R_WR);
CTRL_PORT &= ~(1<<R_RD);
}
void sram_clear(uint32_t addr, uint32_t len){
uint32_t i;
for (i=addr; i<(addr + len);i++ ){
if (0==i%0xfff)
dprintf("sram_clear %lx\n\r",i);
printf("sram_clear %lx\n\r",i);
sram_write(i, 0x00);
}
}
@ -229,7 +203,13 @@ void sram_read_buffer(uint32_t addr,uint8_t *dst, uint32_t len){
ptr++;
}
}
uint8_t sram_check(uint8_t *buffer, uint32_t len){
for (uint16_t cnt=0; cnt<len; cnt++)
if (buffer[cnt])
return 1;
return 0;
}
int main(void)
{
@ -237,120 +217,71 @@ int main(void)
uint8_t fat_attrib = 0;
uint32_t fat_size = 0;
uint32_t rom_addr = 0;
uint8_t done = 0;
uint32_t skip_block = 0;
uart_init();
<<<<<<< HEAD:poc/avr_sdcard/main.c
dprintf("uart_init\n\r");
sram_init();
dprintf("sram_init\n\r");
spi_init();
dprintf("spi_init\n\r");
/*
#ifdef 0
sram_clear(0x000000, 0x400000);
dprintf("sram_clear\n\r");
#endif
*/
=======
stdout = &uart_stdout;
sram_init();
printf("sram_init\n");
printf("SRAM Init\n");
spi_init();
printf("spi_init\n");
/*
sram_clear(0x000000, 0x400000);
printf("sram_clear\n");
*/
printf("SPI Init\n");
//sram_clear(0x000000, 0x400000);
//printf("sram_clear\n");
//printf("read 0x0f0f\n");
//sram_read(0x0f0f);
//printf("write 0x0f0f\n");
//sram_write(0x0f0f,0xaa);
//while(1);
>>>>>>> sdcard_m32:poc/avr_sdcard/main.c
while ( mmc_init() !=0) {
printf("no sdcard..\n");
printf("No sdcard...\n");
}
printf("mmc_init\n");
printf("MMC Init sone\n");
fat_init(read_buffer);
printf("fat_init\n");
printf("FAT Init done.\n");
rom_addr = 0x000000;
<<<<<<< HEAD:poc/avr_sdcard/main.c
while (!done){
dprintf("Look for sprite.smc\n\r");
if (fat_search_file((uint8_t*)"sprite.smc",
&fat_cluster,
&fat_size,
&fat_attrib,
read_buffer) == 1) {
dprintf("Start loading sprite.smc\n\r");
printf("Look for %s\n",FILENAME);
for (uint16_t block_cnt=0; block_cnt<BLOCK_CNT; block_cnt++) {
fat_read_file (fat_cluster,read_buffer,block_cnt);
dprintf("Read Block %i addr 0x%lx\n\r",block_cnt,rom_addr);
sram_copy(rom_addr,read_buffer,512);
//dump_packet(rom_addr,512,read_buffer);
rom_addr += 512;
}
dprintf("Done 0x%lx\n\r",rom_addr);
done = 1;
}
=======
printf("look for sprite.smc\n");
if (fat_search_file((uint8_t*)"sprite.smc",
if (fat_search_file((uint8_t*)FILENAME,
&fat_cluster,
&fat_size,
&fat_attrib,
read_buffer) == 1) {
for (uint16_t block_cnt=0; block_cnt<BLOCKS+1; block_cnt++) {
for (uint16_t block_cnt=0; block_cnt<BLOCKS; block_cnt++) {
fat_read_file (fat_cluster,read_buffer,block_cnt);
if (block_cnt==0){
// Skip Copier Header
printf("Copier Header \n",block_cnt,rom_addr);
dump_packet(rom_addr,512,read_buffer);
printf("Read Blocks ");
}
printf(".",block_cnt,rom_addr);
sram_copy(rom_addr,read_buffer,512);
if (block_cnt % 16 == 0)
printf("Write Ram 0x%lx Skipped %li\n",rom_addr,skip_block);
if (sram_check(read_buffer,512))
sram_copy(rom_addr,read_buffer,512);
else
skip_block +=1;
rom_addr += 512;
}
printf("\nDone %lx\n",rom_addr);
>>>>>>> sdcard_m32:poc/avr_sdcard/main.c
printf("Done 0x%lx Skipped %li\n",rom_addr,skip_block);
}
dprintf("Dump memory\n\r");
printf("Dump Memory\n\r");
rom_addr = 0x000000;
<<<<<<< HEAD:poc/avr_sdcard/main.c
for (uint16_t block_cnt=0; block_cnt<BLOCK_CNT; block_cnt++) {
dprintf("Read memory addr %lx\n\r",rom_addr);
=======
for (uint16_t block_cnt=0; block_cnt<BLOCKS; block_cnt++) {
>>>>>>> sdcard_m32:poc/avr_sdcard/main.c
sram_read_buffer(rom_addr,read_buffer,512);
dump_packet(rom_addr,512,read_buffer);
rom_addr += 512;
}
printf("Done\n",rom_addr);
printf("\nDone 0x%lx\n",rom_addr);
sram_snes_mode();
printf("\nEnter Snes mode\n");
while(1);
return 0 ;
return(0);
}

View File

@ -10,12 +10,15 @@ APP=sprite.raw
SWC=sprite.swc
GFX=biker.pic
EMU=/Applications/ZSNES.app/Contents/MacOS/ZSNES
DEBUG=wine /Users/david/Devel/arch/snes/tools/snes9x1/Snes9X1.43.ep9r8.exe
all: clean $(APP) raw
run:
$(EMU) $(APP)
debug:
$(DEBUG) $(APP)
raw: $(APP)
dd if=$(APP) of=raw bs=512 skip=1