#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 CTRL_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" //ok //#define FILENAME "vortex.smc" //failed //#define FILENAME "mrdo.smc" //failed //#define FILENAME "spacei.smc" //ok ntsc //#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 FILENAME "super02.smc" //ok //#define FILENAME "super01.smc"//ok #define FILENAME "crc.smc" //ok //#define FILENAME "banks.smc" //ok //#define FILENAME "hungry.smc" //ok //#define FILENAME "arkanoid.smc"//ok //#define FILENAME "eric.smc" //#define FILENAME "super01.smc" #define ROMSIZE 2 // 4 == 4mbit == 512kb // 2 == 2mbit == 256kb #define DUMPNAME "dump256.smc" #define BUFFER_SIZE 512 #define BLOCKS (ROMSIZE << 8) #define MEMSIZE 0x80000 uint8_t read_buffer[BUFFER_SIZE]; uint16_t crc_xmodem_update (uint16_t crc, uint8_t data) { int i; crc = crc ^ ((uint16_t)data << 8); for (i=0; i<8; i++) { if (crc & 0x8000) crc = (crc << 1) ^ 0x1021; else crc <<= 1; } return crc; } uint16_t do_crc(uint8_t * data,uint16_t size) { uint16_t crc =0; uint16_t i; 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)); /* passthru address in sreg */ LATCH_PORT |= (1<