#include "memory.h" #include void memory_init( memory_t *memory, seg7_t *seg ) { memory->read = memory_read; memory->write = memory_write; memory->seg = seg; } uint8_t memory_read( memory_t *memory, uint16_t addr ) { if( addr <= 0x3FFF ) { // RAM access return memory->cell[addr]; } else if( addr <= 0x8000 ) { return seg7_read( memory->seg, addr ); } else { // ROM access return memory->cell[addr]; } } void memory_write( memory_t *memory, uint16_t addr, uint8_t data ) { if( addr <= 0x3FFF ) { // RAM access memory->cell[addr] = data; } else if( addr <= 0x8000 ) { seg7_write( memory->seg, addr, data ); } else { // ignore writes to ROM } } void memory_load( memory_t *memory, uint16_t addr, uint16_t size, const char *filename ) { if( addr >= 0x8000 ) { FILE *f = fopen( filename, "rb" ); if( f == NULL ) { fprintf( stderr, "ERROR: Unable to open ROM file '%s'\n", filename ); exit( EXIT_FAILURE ); } fread( &memory->cell[addr], size, 1, f ); fclose( f ); fprintf( stderr, "INFO: Loaded firware from '%s' of size %d starting on address %04X\n", filename, size, addr ); } else { fprintf( stderr, "ERROR: Cannot load firmware into RAM at address %04X\n", addr ); } }