INL-retro-progdump/firmware/source/buffer.h

52 lines
1.8 KiB
C

#ifndef _buffer_h
#define _buffer_h
#include <avr/io.h>
//~16 bytes per buffer...
typedef struct buffer {
uint8_t *data; //pointer to base buffer's allocated sram
uint8_t size; //size of buffer in bytes (max 256 bytes)
uint8_t status; //current status of buffer USB load/unload, flashing, waiting, erase
uint8_t cur_byte; //byte currently being loaded/unloaded/flashed/read
uint8_t reload; //add this number to page_num for next loading
uint8_t id; //address bits between buffer size and page number
//ie need 2x128 byte buffers making buff_num = A7
//ie need 4x64 byte buffers making buff_num = A7:6
//ie need 8x32 byte buffers making buff_num = A7:5
uint16_t page_num; //address bits beyond buffer's size and buff_num A23-A8
//MSB A23-16, LSB A15-8
uint8_t mem_type; //SNES ROM, SNES RAM, PRG ROM, PRG RAM, CHR ROM, CHR RAM, CPLD, SPI
uint8_t part_num; //used to define unlock commands, sector erase, etc
uint8_t multiple; //number of times to program this page
uint8_t add_mult; //add this number to page_num for multiple programs
//CHR shift LSb to A13 (max 2MByte)
//PRG shift LSb to A14 (max 4MByte)
//SNES add to MSB of page_num (max 16MByte)
uint8_t mapper; //mapper number of board
uint8_t mapvar; //mapper variant
uint8_t function; //function "pointer" for flash/dump operation control
}buffer;
static buffer buff0;
static buffer buff1;
static buffer buff2;
static buffer buff3;
static buffer buff4;
static buffer buff5;
static buffer buff6;
static buffer buff7;
#include "logic.h"
#include "shared_dictionaries.h"
#include "shared_errors.h"
uint8_t buffer_opcode_no_return( uint8_t opcode, buffer *buff, uint8_t oper1, uint8_t oper2, uint8_t oper3 );
void raw_buffer_reset( );
uint8_t allocate_buffer( buffer *buff, uint8_t new_id, uint8_t base_bank, uint8_t num_banks );
#endif