123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356 |
- /*
- * =====================================================================================
- *
- * ________ .__ __ ________ ____ ________
- * \_____ \ __ __|__| ____ | | __\______ \ _______ _/_ |/ _____/
- * / / \ \| | \ |/ ___\| |/ / | | \_/ __ \ \/ /| / __ \
- * / \_/. \ | / \ \___| < | ` \ ___/\ / | \ |__\ \
- * \_____\ \_/____/|__|\___ >__|_ \/_______ /\___ >\_/ |___|\_____ /
- * \__> \/ \/ \/ \/ \/
- *
- * www.optixx.org
- *
- *
- * Version: 1.0
- * Created: 07/21/2009 03:32:16 PM
- * Author: david@optixx.org
- *
- * =====================================================================================
- */
- #include <stdlib.h>
- #include <stdint.h>
- #include <avr/io.h>
- #include <util/delay.h> /* for _delay_ms() */
- #include "config.h"
- #include "sram.h"
- #include "uart.h"
- #include "debug.h"
- #include "info.h"
- void system_init(void)
- {
- /*-------------------------------------------------*/
-
- DDRA = 0x00;
- PORTA = 0x00;
-
- /*-------------------------------------------------*/
-
- DDRC |= ( (1 << AVR_ADDR_LATCH_PIN)
- | (1 << AVR_ADDR_SCK_PIN)
- | (1 << AVR_ADDR_SER_PIN)
- | (1 << AVR_ADDR_LOAD_PIN)
- | (1 << AVR_ADDR_DOWN_PIN)
- | (1 << AVR_ADDR_UP_PIN));
-
- DDRC &= ~ (1 << SNES_WR_PIN);
-
- PORTC &= ~((1 << AVR_ADDR_LATCH_PIN)
- | (1 << AVR_ADDR_SCK_PIN)
- | (1 << SNES_WR_PIN));
-
-
- PORTC |= ( (1 << AVR_ADDR_DOWN_PIN)
- | (1 << AVR_ADDR_UP_PIN)
- | (1 << AVR_ADDR_LOAD_PIN));
-
- //| (1 << SNES_WR_PIN));
- /*-------------------------------------------------*/
-
- DDRB |= ( (1 << AVR_RD_PIN)
- | (1 << AVR_WR_PIN)
- | (1 << AVR_CS_PIN)
- | (1 << SNES_IRQ_PIN));
-
- PORTB |= ( (1 << AVR_RD_PIN)
- | (1 << AVR_WR_PIN)
- | (1 << AVR_CS_PIN)
- | (1 << SNES_IRQ_PIN));
-
- /*-------------------------------------------------*/
-
-
- DDRD |= ( (1 << AVR_SNES_SW_PIN)
- | (1 << HI_LOROM_SW_PIN)
- | (1 << SNES_WR_EN_PIN));
- PORTD |= (1 << HI_LOROM_SW_PIN);
-
- PORTD &= ~((1 << AVR_SNES_SW_PIN)
- | (1 << SNES_WR_EN_PIN));
- /*-------------------------------------------------*/
-
-
- }
- void sreg_set(uint32_t addr)
- {
- uint8_t i = 24;
- debug(DEBUG_SREG,"sreg_set: addr=0x%08lx",addr);
- while(i--) {
- if ((addr & ( 1L << i))){
- debug(DEBUG_SREG,"1");
- AVR_ADDR_SER_PORT |= ( 1 << AVR_ADDR_SER_PIN);
- } else {
- AVR_ADDR_SER_PORT &= ~( 1 << AVR_ADDR_SER_PIN);
- debug(DEBUG_SREG,"0");
- }
- AVR_ADDR_SCK_PORT |= (1 << AVR_ADDR_SCK_PIN);
- AVR_ADDR_SCK_PORT &= ~(1 << AVR_ADDR_SCK_PIN);
- }
- debug(DEBUG_SREG,"\n");
- AVR_ADDR_LATCH_PORT |= (1 << AVR_ADDR_LATCH_PIN);
- AVR_ADDR_LATCH_PORT &= ~(1 << AVR_ADDR_LATCH_PIN);
-
- counter_load();
-
- }
- void sram_bulk_read_start(uint32_t addr)
- {
- debug(DEBUG_SRAM,"sram_bulk_read_start: addr=0x%08lx\n\r", addr);
- avr_data_in();
- AVR_CS_PORT &= ~(1 << AVR_CS_PIN);
- AVR_WR_PORT |= (1 << AVR_WR_PIN);
- AVR_RD_PORT |= (1 << AVR_RD_PIN);
- sreg_set(addr);
- AVR_RD_PORT &= ~(1 << AVR_RD_PIN);
- asm volatile ("nop");
- asm volatile ("nop");
- asm volatile ("nop");
- asm volatile ("nop");
- asm volatile ("nop");
- asm volatile ("nop");
-
- }
- inline void sram_bulk_read_next(void)
- {
- AVR_RD_PORT |= (1 << AVR_RD_PIN);
- counter_up();
- AVR_RD_PORT &= ~(1 << AVR_RD_PIN);
- asm volatile ("nop");
- asm volatile ("nop");
- asm volatile ("nop");
- asm volatile ("nop");
- asm volatile ("nop");
- asm volatile ("nop");
- }
- inline uint8_t sram_bulk_read(void)
- {
- return AVR_DATA_PIN;
- }
- void sram_bulk_read_end(void)
- {
- debug(DEBUG_SRAM,"sram_bulk_read_end:\n");
- AVR_RD_PORT |= (1 << AVR_RD_PIN);
- AVR_CS_PORT |= (1 << AVR_CS_PIN);
- avr_data_in();
- }
- uint8_t sram_read(uint32_t addr)
- {
- uint8_t byte;
- debug(DEBUG_SRAM_RAW,"sram_read: addr=0x%08lx\n\r", addr);
-
- avr_data_in();
-
- AVR_CS_PORT &= ~(1 << AVR_CS_PIN);
- AVR_WR_PORT |= (1 << AVR_WR_PIN);
- AVR_RD_PORT |= (1 << AVR_RD_PIN);
-
- sreg_set(addr);
-
- AVR_RD_PORT &= ~(1 << AVR_RD_PIN);
-
- asm volatile ("nop");
- asm volatile ("nop");
- asm volatile ("nop");
- asm volatile ("nop");
- asm volatile ("nop");
- asm volatile ("nop");
-
- byte = AVR_DATA_PIN;
- AVR_RD_PORT |= (1 << AVR_RD_PIN);
- AVR_CS_PORT |= (1 << AVR_CS_PIN);
-
- avr_data_in();
- return byte;
- }
- void sram_bulk_write_start(uint32_t addr)
- {
- debug(DEBUG_SRAM,"sram_bulk_write_start: addr=0x%08lx\n\r", addr);
- avr_data_out();
- AVR_CS_PORT &= ~(1 << AVR_CS_PIN);
- AVR_WR_PORT |= (1 << AVR_WR_PIN);
- AVR_RD_PORT |= (1 << AVR_RD_PIN);
- sreg_set(addr);
- AVR_WR_PORT &= ~(1 << AVR_WR_PIN);
- }
- inline void sram_bulk_write_next(void)
- {
- AVR_WR_PORT |= (1 << AVR_WR_PIN);
- counter_up();
- AVR_WR_PORT &= ~(1 << AVR_WR_PIN);
- }
- inline void sram_bulk_write( uint8_t data)
- {
- AVR_DATA_PORT = data;
- }
- void sram_bulk_write_end(void)
- {
- debug(DEBUG_SRAM,"sram_bulk_write_end:");
- AVR_WR_PORT |= (1 << AVR_WR_PIN);
- AVR_CS_PORT |= (1 << AVR_CS_PIN);
- avr_data_in();
- }
- void sram_write(uint32_t addr, uint8_t data)
- {
- debug(DEBUG_SRAM_RAW,"sram_write: addr=0x%08lx data=%x\n\r", addr, data);
- avr_data_out();
-
- AVR_CS_PORT &= ~(1 << AVR_CS_PIN);
- AVR_WR_PORT |= (1 << AVR_WR_PIN);
- AVR_RD_PORT |= (1 << AVR_RD_PIN);
-
- sreg_set(addr);
-
- AVR_WR_PORT &= ~(1 << AVR_WR_PIN);
- AVR_DATA_PORT = data;
-
- AVR_WR_PORT |= (1 << AVR_WR_PIN);
- asm volatile ("nop");
- asm volatile ("nop");
- asm volatile ("nop");
- asm volatile ("nop");
- asm volatile ("nop");
- asm volatile ("nop");
- AVR_CS_PORT |= (1 << AVR_CS_PIN);
-
- avr_data_in();
- }
- void sram_bulk_copy(uint32_t addr, uint8_t * src, uint32_t len)
- {
- uint32_t i;
- uint8_t *ptr = src;
- debug(DEBUG_SRAM,"sram_copy: addr=0x%08lx src=0x%p len=%li\n\r", addr,src,len);
- sram_bulk_write_start(addr);
- for (i = addr; i < (addr + len); i++){
- sram_bulk_write(*ptr++);
- sram_bulk_write_next();
- }
- sram_bulk_write_end();
- }
- void sram_bulk_read_buffer(uint32_t addr, uint8_t * dst, uint32_t len)
- {
- uint32_t i;
- uint8_t *ptr = dst;
- debug(DEBUG_SRAM,"sram_bulk_read_buffer: addr=0x%08lx dst=0x%p len=%li\n\r", addr,dst,len);
- sram_bulk_read_start(addr);
- for (i = addr; i < (addr + len); i++) {
- *ptr = sram_bulk_read();
- sram_bulk_read_next();
- ptr++;
- }
- sram_bulk_read_end();
- }
- void sram_bulk_set(uint32_t addr, uint32_t len,uint8_t value){
- uint32_t i;
- debug(DEBUG_SRAM,"sram_bulk_set: addr=0x%08lx len=%li\n\r", addr,len);
- sram_bulk_write_start(addr);
- for (i = addr; i < (addr + len); i++) {
- if (0 == i % 0xfff)
- debug(DEBUG_SRAM,"sram_bulk_set: addr=0x%08lx\n\r", i);
- sram_bulk_write(value);
- sram_bulk_write_next();
- }
- sram_bulk_write_end();
- }
- void sram_setr(uint32_t addr, uint32_t len,uint8_t value)
- {
- uint32_t i;
- debug(DEBUG_SRAM,"sram_clear: addr=0x%08lx len=%li\n\r", addr,len);
- for (i = addr; i < (addr + len); i++) {
- if (0 == i % 0xfff)
- debug(DEBUG_SRAM,"sram_clear: addr=0x%08lx\n\r", i);
- sram_write(i, value);
- }
- }
- void sram_copy(uint32_t addr, uint8_t * src, uint32_t len)
- {
- uint32_t i;
- uint8_t *ptr = src;
- debug(DEBUG_SRAM,"sram_copy: addr=0x%08lx src=0x%p len=%li\n\r", addr,src,len);
- for (i = addr; i < (addr + len); i++)
- sram_write(i, *ptr++);
- }
- void sram_read_buffer(uint32_t addr, uint8_t * dst, uint32_t len)
- {
- uint32_t i;
- uint8_t *ptr = dst;
- debug(DEBUG_SRAM,"sram_read_buffer: addr=0x%08lx dst=0x%p len=%li\n\r", addr,dst,len);
- for (i = addr; i < (addr + len); i++) {
- *ptr = sram_read(i);
- ptr++;
- }
- }
- uint8_t sram_check(uint8_t * buffer, uint32_t len)
- {
- uint16_t cnt;
- debug(DEBUG_SRAM,"sram_check: len=%li\n\r",len);
- for (cnt = 0; cnt < len; cnt++)
- if (buffer[cnt])
- return 1;
- return 0;
- }
|