#include "memory.h" #include "arena.h" #include "io.h" #include "minilib.h" #include "string.h" #include "utils.h" #include "io.h" void memory_init( Memory *memory, int size ) { memory->size = size; memory->m = allocate( size ); memory_reset( memory ); } void memory_done( Memory *memory ) { deallocate( (void **)&memory->m ); } void memory_reset( Memory *memory ) { memset( memory->m, 0, memory->size ); } void memory_write( Memory *memory, int addr, char v ) { if( addr < 0 || addr > memory->size ) { print( "MEMORY WRITE ACCESS VIOLATION" ); halt( ); } memory->m[addr] = v; } char memory_read( Memory *memory, int addr ) { if( addr < 0 || addr > memory->size ) { print( "MEMORY READ ACCESS VIOLATION" ); halt( ); } return memory->m[addr]; } void memory_print_dump( Memory *memory ) { int i; char *s = allocate( memory->size * 4 ); char buf[4]; s[0] = '\0'; strcat( s, " 00: " ); for( i = 0; i < memory->size; i++ ) { strtohex( &memory->m[i], 1, buf ); strcat( s, buf ); strcat( s, " " ); if( i % 16 == 15 ) { print( s ); *s = '\0'; inttohex( i + 1, buf ); strcat( s, " " ); strcat( s, buf ); strcat( s, ": " ); } else { if( i % 8 == 7 ) { strcat( s, " " ); } } } print( s ); deallocate( (void **)&s ); } void memory_read_from_file( Memory *memory, char *filename ) { if( readfile( filename, memory->m, memory->size ) < 0 ) { print( "MEMORY DUMP LOAD ERROR" ); halt( ); } }