#include #include #include #include "uart.h" #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 #define S_SCK PB7 #define S_LATCH PB4 //DEBUG defines #define D_LED0 PD6 //SRAM defines #define R_WR PB1 #define R_RD PB0 #define RAM_PORT PORTA #define RAM_DIR DDRA #define RAM_REG PINA #define CTRL_PORT PORTB #define CTR_DIR DDRB #define LATCH_PORT PORTB #define LATCH_DIR DDRB #define SPI_PORT PORTB #define SPI_DIR DDRB #define LED_PORT PORTD #define LED_DIR DDRD //#define FILENAME "sprite.raw" //ok //#define FILENAME "ascii.smc" //ok //#define FILENAME "rom.smc" //ok //#define FILENAME "supert.smc" //#define FILENAME "vortex.smc" //#define FILENAME "mrdo.smc" //#define FILENAME "spacei.smc" //#define FILENAME "bank01.smc" //ok //#define FILENAME "bank02.smc" //ok //#define FILENAME "bank03.smc" //ok //#define FILENAME "bank04.smc" //ok //#define FILENAME "bank05.smc" //ok //#define FILENAME "bank06.smc" //ok //#define FILENAME "bank07.smc" //ok //#define FILENAME "banklo.smc" //ok //#define FILENAME "bankhi.smc" //ok #define FILENAME "vram2.smc" //ok #define DUMPNAME "dump256.smc" #define BUFFER_SIZE 512 #define BLOCKS 512 #define MEMSIZE 0x80000 uint8_t read_buffer[BUFFER_SIZE]; void dump_packet(uint32_t addr,uint32_t len,uint8_t *packet){ uint16_t i,j; uint16_t sum = 0; uint8_t clear=0; for (i=0;i=33 && packet[i+j]<=126 ) printf("%c", packet[i+j]); else printf("."); } printf("|\n"); } } void spi_init(void) { /* Set MOSI and SCK output, all others input */ SPI_DIR |= ((1<>16)); spi_master_transmit((uint8_t)(addr>>8)); spi_master_transmit((uint8_t)(addr>>0)); LATCH_PORT |= (1<>16)); spi_master_transmit((uint8_t)(addr>>8)); spi_master_transmit((uint8_t)(addr>>0)); LATCH_PORT |= (1<>16)); spi_master_transmit((uint8_t)(addr>>8)); spi_master_transmit((uint8_t)(addr>>0)); LATCH_PORT |= (1<