merge (current and future) files functions into files.{c,h}
This commit is contained in:
parent
8dd69b710e
commit
284f64c69f
17 changed files with 266 additions and 291 deletions
6
Makefile
6
Makefile
|
@ -7,7 +7,7 @@ CFLAGS = -Wall -Werror -O3 -Wno-error=unused-function -Wno-error=unused-variable
|
||||||
all: dist/hpemu
|
all: dist/hpemu
|
||||||
|
|
||||||
dist/hpemu: src/bus.o \
|
dist/hpemu: src/bus.o \
|
||||||
src/color.o \
|
src/gui_color.o \
|
||||||
src/cpu.o \
|
src/cpu.o \
|
||||||
src/display.o \
|
src/display.o \
|
||||||
src/emulator.o \
|
src/emulator.o \
|
||||||
|
@ -17,10 +17,8 @@ dist/hpemu: src/bus.o \
|
||||||
src/main.o \
|
src/main.o \
|
||||||
src/opcodes.o \
|
src/opcodes.o \
|
||||||
src/gui_buttons.o \
|
src/gui_buttons.o \
|
||||||
src/pfiles.o \
|
src/files.o \
|
||||||
src/ports.o \
|
src/ports.o \
|
||||||
src/ram.o \
|
|
||||||
src/rom.o \
|
|
||||||
src/rpl.o \
|
src/rpl.o \
|
||||||
src/timers.o
|
src/timers.o
|
||||||
$(CC) $(CFLAGS) $(LIBS) -o $@ $+
|
$(CC) $(CFLAGS) $(LIBS) -o $@ $+
|
||||||
|
|
|
@ -11,8 +11,7 @@
|
||||||
#include "display.h"
|
#include "display.h"
|
||||||
#include "gui.h"
|
#include "gui.h"
|
||||||
#include "emulator.h"
|
#include "emulator.h"
|
||||||
#include "rom.h"
|
#include "files.h"
|
||||||
#include "ram.h"
|
|
||||||
#include "ports.h"
|
#include "ports.h"
|
||||||
|
|
||||||
#define MAX_DELTA 4000
|
#define MAX_DELTA 4000
|
||||||
|
|
228
src/files.c
Normal file
228
src/files.c
Normal file
|
@ -0,0 +1,228 @@
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <libgen.h> // dirname
|
||||||
|
#include <unistd.h> // readlink
|
||||||
|
#include <linux/limits.h> // PATH_MAX
|
||||||
|
|
||||||
|
#include "gui.h"
|
||||||
|
#include "rpl.h"
|
||||||
|
#include "files.h"
|
||||||
|
#include "bus.h"
|
||||||
|
#include "ports.h"
|
||||||
|
|
||||||
|
extern byte current_bank;
|
||||||
|
extern byte* port2;
|
||||||
|
extern address port2mask;
|
||||||
|
|
||||||
|
char WorkingPath[ 512 ];
|
||||||
|
|
||||||
|
static address ram_size = 256 * 1024; // in nibbles, not bytes!
|
||||||
|
|
||||||
|
void getExePath()
|
||||||
|
{
|
||||||
|
char programPath[ 1024 ];
|
||||||
|
char temp[ 1024 ];
|
||||||
|
memset( programPath, 0, sizeof( programPath ) );
|
||||||
|
memset( temp, 0, sizeof( temp ) );
|
||||||
|
|
||||||
|
char result[ PATH_MAX ];
|
||||||
|
ssize_t count = readlink( "/proc/self/exe", result, PATH_MAX );
|
||||||
|
const char* path;
|
||||||
|
if ( count != -1 ) {
|
||||||
|
path = dirname( result );
|
||||||
|
strcpy( programPath, path );
|
||||||
|
}
|
||||||
|
|
||||||
|
memset( WorkingPath, 0, sizeof( WorkingPath ) );
|
||||||
|
strcpy( WorkingPath, programPath );
|
||||||
|
}
|
||||||
|
|
||||||
|
int file_size( char* name )
|
||||||
|
{
|
||||||
|
memset( WorkingPath, 0, sizeof( WorkingPath ) );
|
||||||
|
getExePath();
|
||||||
|
|
||||||
|
FILE* f;
|
||||||
|
char fullpath[ 1024 ];
|
||||||
|
sprintf( fullpath, "%s/%s", WorkingPath, name );
|
||||||
|
printf( "%s\n", fullpath );
|
||||||
|
f = fopen( fullpath, "r" );
|
||||||
|
if ( !f )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
fseek( f, 0, SEEK_END ); // seek to end of file
|
||||||
|
int size = ( int )ftell( f ); // get current file pointer
|
||||||
|
fseek( f, 0, SEEK_SET ); // seek back to beginning of file
|
||||||
|
// proceed with allocating memory and reading the file
|
||||||
|
fclose( f );
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
void load_file_on_stack( char* name )
|
||||||
|
{
|
||||||
|
FILE* f;
|
||||||
|
byte* buf;
|
||||||
|
byte* obj;
|
||||||
|
int i, j;
|
||||||
|
int fsize;
|
||||||
|
address size;
|
||||||
|
|
||||||
|
fsize = file_size( name );
|
||||||
|
if ( fsize < 11 ) // "PHPH48-X" + prologue (8 + 2.5)
|
||||||
|
return;
|
||||||
|
|
||||||
|
buf = malloc( fsize );
|
||||||
|
if ( !buf )
|
||||||
|
return;
|
||||||
|
|
||||||
|
f = fopen( name, "r" );
|
||||||
|
if ( !f ) {
|
||||||
|
free( buf );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int res = ( int )fread( buf, sizeof( char ), fsize, f );
|
||||||
|
if ( res != fsize ) {
|
||||||
|
free( buf );
|
||||||
|
fclose( f );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fclose( f );
|
||||||
|
|
||||||
|
if ( memcmp( buf, "HPHP48-", 7 ) ) {
|
||||||
|
free( buf );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
obj = malloc( ( fsize - 8 ) * 2 );
|
||||||
|
if ( !obj ) {
|
||||||
|
free( buf );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( i = 8, j = 0; i < fsize; i++ ) {
|
||||||
|
obj[ j++ ] = buf[ i ] & 0x0F;
|
||||||
|
obj[ j++ ] = ( buf[ i ] >> 4 ) & 0x0F;
|
||||||
|
}
|
||||||
|
free( buf );
|
||||||
|
|
||||||
|
size = rpl_object_size( obj );
|
||||||
|
if ( size > ( fsize - 8 ) * 2 ) {
|
||||||
|
free( obj );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
rpl_push_object( obj, size );
|
||||||
|
free( obj );
|
||||||
|
}
|
||||||
|
|
||||||
|
void rom_init( void )
|
||||||
|
{
|
||||||
|
int size;
|
||||||
|
char* name = "rom";
|
||||||
|
byte *buf, *ptr1, *ptr2;
|
||||||
|
FILE* f;
|
||||||
|
|
||||||
|
size = file_size( name );
|
||||||
|
if ( !size ) {
|
||||||
|
printf( "rom_init failed\n" );
|
||||||
|
exit( 0x10 );
|
||||||
|
}
|
||||||
|
if ( size != 256 * 1024 && size != 512 * 1024 && size != 1024 * 1024 ) {
|
||||||
|
printf( "rom_init failed2..\n" );
|
||||||
|
exit( 0x11 );
|
||||||
|
}
|
||||||
|
buf = malloc( size );
|
||||||
|
if ( !buf ) {
|
||||||
|
printf( "rom_init failed3..\n" );
|
||||||
|
exit( 0x12 );
|
||||||
|
}
|
||||||
|
|
||||||
|
char fullpath[ 1024 ];
|
||||||
|
sprintf( fullpath, "%s/%s", WorkingPath, name );
|
||||||
|
|
||||||
|
// f = pack_fopen(name, "r");
|
||||||
|
f = fopen( fullpath, "r" );
|
||||||
|
if ( !f ) {
|
||||||
|
printf( "rom_init failed4..\n" );
|
||||||
|
exit( 0x13 );
|
||||||
|
}
|
||||||
|
int r = ( int )fread( buf, sizeof( char ), size, f );
|
||||||
|
if ( r != size ) { // pack_fread
|
||||||
|
printf( "rom_init failed5..\n" );
|
||||||
|
exit( 0x14 );
|
||||||
|
}
|
||||||
|
// pack_fclose(f);
|
||||||
|
fclose( f );
|
||||||
|
if ( buf[ 0 ] & 0xF0 || buf[ 1 ] & 0xF0 ) {
|
||||||
|
if ( size == 1024 * 1024 ) {
|
||||||
|
printf( "rom_init failed6..\n" );
|
||||||
|
exit( 0x15 );
|
||||||
|
}
|
||||||
|
buf = realloc( buf, size * 2 );
|
||||||
|
if ( !buf ) {
|
||||||
|
printf( "rom_init failed7..\n" );
|
||||||
|
exit( 0x16 );
|
||||||
|
}
|
||||||
|
ptr1 = buf + size - 1;
|
||||||
|
size *= 2;
|
||||||
|
ptr2 = buf + size - 1;
|
||||||
|
do {
|
||||||
|
*( ptr2-- ) = ( *ptr1 >> 4 ) & 0x0F;
|
||||||
|
*( ptr2-- ) = *( ptr1-- ) & 0x0F;
|
||||||
|
} while ( ptr1 != ptr2 );
|
||||||
|
}
|
||||||
|
bus_info.rom_data = buf;
|
||||||
|
bus_info.rom_mask = size - 1;
|
||||||
|
printf( "rom_init succeed!\n" );
|
||||||
|
}
|
||||||
|
|
||||||
|
void rom_exit( void )
|
||||||
|
{
|
||||||
|
free( bus_info.rom_data );
|
||||||
|
bus_info.rom_data = NULL;
|
||||||
|
bus_info.rom_mask = 0x00000;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ram_init( void )
|
||||||
|
{
|
||||||
|
byte* buf = malloc( ram_size );
|
||||||
|
if ( !buf )
|
||||||
|
exit( 0x20 );
|
||||||
|
|
||||||
|
memset( buf, 0, ram_size );
|
||||||
|
bus_info.ram_data = buf;
|
||||||
|
bus_info.ram_mask = ram_size - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ram_exit( void )
|
||||||
|
{
|
||||||
|
free( bus_info.ram_data );
|
||||||
|
bus_info.ram_data = NULL;
|
||||||
|
bus_info.ram_mask = 0x00000;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ports_init( void )
|
||||||
|
{
|
||||||
|
// ce1 = bank switcher
|
||||||
|
bus_info.ce1_data = NULL;
|
||||||
|
bus_info.ce1_mask = 0x0007F;
|
||||||
|
bus_info.ce1_r_o = true;
|
||||||
|
bus_info.ce1_bs = true;
|
||||||
|
|
||||||
|
// ce2 = port1 (plugged)
|
||||||
|
bus_info.ce2_data = malloc( PORT1_SIZE );
|
||||||
|
bus_info.ce2_mask = PORT1_SIZE - 1;
|
||||||
|
bus_info.ce2_r_o = false;
|
||||||
|
|
||||||
|
// nce3 = port2 (plugged)
|
||||||
|
port2 = malloc( PORT2_SIZE );
|
||||||
|
port2mask = PORT2_SIZE - 1;
|
||||||
|
bus_info.nce3_data = port2;
|
||||||
|
bus_info.nce3_mask = port2mask & 0x3FFFF;
|
||||||
|
bus_info.nce3_r_o = false;
|
||||||
|
|
||||||
|
bus_info.ben = false;
|
||||||
|
current_bank = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ports_exit( void ) {}
|
20
src/files.h
Normal file
20
src/files.h
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#ifndef __PFILES_H
|
||||||
|
#define __PFILES_H
|
||||||
|
|
||||||
|
#include "types.h"
|
||||||
|
|
||||||
|
extern char WorkingPath[ 512 ];
|
||||||
|
|
||||||
|
extern int file_size( char* name );
|
||||||
|
extern void load_file_on_stack( char* name );
|
||||||
|
|
||||||
|
extern void rom_init( void );
|
||||||
|
extern void rom_exit( void );
|
||||||
|
|
||||||
|
extern void ram_init( void );
|
||||||
|
extern void ram_exit( void );
|
||||||
|
|
||||||
|
extern void ports_init( void );
|
||||||
|
extern void ports_exit( void );
|
||||||
|
|
||||||
|
#endif
|
|
@ -5,9 +5,9 @@
|
||||||
#include <SDL2/SDL_image.h>
|
#include <SDL2/SDL_image.h>
|
||||||
#include <SDL2/SDL_ttf.h>
|
#include <SDL2/SDL_ttf.h>
|
||||||
|
|
||||||
#include "color.h"
|
#include "gui_color.h"
|
||||||
#include "gui_buttons.h"
|
#include "gui_buttons.h"
|
||||||
#include "pfiles.h"
|
#include "files.h"
|
||||||
#include "gui.h"
|
#include "gui.h"
|
||||||
#include "emulator.h"
|
#include "emulator.h"
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "color.h"
|
#include "gui_color.h"
|
||||||
#include "display.h"
|
#include "display.h"
|
||||||
#include "keyboard.h"
|
#include "keyboard.h"
|
||||||
#include "gui.h"
|
#include "gui.h"
|
||||||
#include "gui_buttons.h"
|
#include "gui_buttons.h"
|
||||||
#include "pfiles.h"
|
#include "files.h"
|
||||||
|
|
||||||
const int std_flags = BUTTON_B1RELEASE | BUTTON_B2TOGGLE;
|
const int std_flags = BUTTON_B1RELEASE | BUTTON_B2TOGGLE;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "color.h"
|
#include "gui_color.h"
|
||||||
|
|
||||||
#define RESERVED_LCD 128
|
#define RESERVED_LCD 128
|
||||||
|
|
|
@ -3,16 +3,9 @@
|
||||||
|
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
|
|
||||||
#include "types.h"
|
|
||||||
#include "emulator.h"
|
#include "emulator.h"
|
||||||
#include "gui.h"
|
#include "gui.h"
|
||||||
#include "color.h"
|
|
||||||
#include "display.h"
|
#include "display.h"
|
||||||
#include "gui.h"
|
|
||||||
#include "timers.h"
|
|
||||||
#include "keyboard.h"
|
|
||||||
#include "gui_buttons.h"
|
|
||||||
#include "pfiles.h"
|
|
||||||
|
|
||||||
unsigned int currentTime;
|
unsigned int currentTime;
|
||||||
|
|
||||||
|
|
109
src/pfiles.c
109
src/pfiles.c
|
@ -1,109 +0,0 @@
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <libgen.h> // dirname
|
|
||||||
#include <unistd.h> // readlink
|
|
||||||
#include <linux/limits.h> // PATH_MAX
|
|
||||||
|
|
||||||
#include "color.h"
|
|
||||||
#include "gui.h"
|
|
||||||
#include "rpl.h"
|
|
||||||
#include "pfiles.h"
|
|
||||||
|
|
||||||
char WorkingPath[ 512 ];
|
|
||||||
|
|
||||||
void getExePath()
|
|
||||||
{
|
|
||||||
char programPath[ 1024 ];
|
|
||||||
char temp[ 1024 ];
|
|
||||||
memset( programPath, 0, sizeof( programPath ) );
|
|
||||||
memset( temp, 0, sizeof( temp ) );
|
|
||||||
|
|
||||||
char result[ PATH_MAX ];
|
|
||||||
ssize_t count = readlink( "/proc/self/exe", result, PATH_MAX );
|
|
||||||
const char* path;
|
|
||||||
if ( count != -1 ) {
|
|
||||||
path = dirname( result );
|
|
||||||
strcpy( programPath, path );
|
|
||||||
}
|
|
||||||
|
|
||||||
memset( WorkingPath, 0, sizeof( WorkingPath ) );
|
|
||||||
strcpy( WorkingPath, programPath );
|
|
||||||
}
|
|
||||||
|
|
||||||
int file_size( char* name )
|
|
||||||
{
|
|
||||||
memset( WorkingPath, 0, sizeof( WorkingPath ) );
|
|
||||||
getExePath();
|
|
||||||
|
|
||||||
FILE* f;
|
|
||||||
char fullpath[ 1024 ];
|
|
||||||
sprintf( fullpath, "%s/%s", WorkingPath, name );
|
|
||||||
printf( "%s\n", fullpath );
|
|
||||||
f = fopen( fullpath, "r" );
|
|
||||||
if ( !f )
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
fseek( f, 0, SEEK_END ); // seek to end of file
|
|
||||||
int size = ( int )ftell( f ); // get current file pointer
|
|
||||||
fseek( f, 0, SEEK_SET ); // seek back to beginning of file
|
|
||||||
// proceed with allocating memory and reading the file
|
|
||||||
fclose( f );
|
|
||||||
return size;
|
|
||||||
}
|
|
||||||
|
|
||||||
void load_file_on_stack( char* name )
|
|
||||||
{
|
|
||||||
FILE* f;
|
|
||||||
byte* buf;
|
|
||||||
byte* obj;
|
|
||||||
int i, j;
|
|
||||||
int fsize;
|
|
||||||
address size;
|
|
||||||
|
|
||||||
fsize = file_size( name );
|
|
||||||
if ( fsize < 11 ) // "PHPH48-X" + prologue (8 + 2.5)
|
|
||||||
return;
|
|
||||||
|
|
||||||
buf = malloc( fsize );
|
|
||||||
if ( !buf )
|
|
||||||
return;
|
|
||||||
|
|
||||||
f = fopen( name, "r" );
|
|
||||||
if ( !f ) {
|
|
||||||
free( buf );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
int res = ( int )fread( buf, sizeof( char ), fsize, f );
|
|
||||||
if ( res != fsize ) {
|
|
||||||
free( buf );
|
|
||||||
fclose( f );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
fclose( f );
|
|
||||||
|
|
||||||
if ( memcmp( buf, "HPHP48-", 7 ) ) {
|
|
||||||
free( buf );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
obj = malloc( ( fsize - 8 ) * 2 );
|
|
||||||
if ( !obj ) {
|
|
||||||
free( buf );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for ( i = 8, j = 0; i < fsize; i++ ) {
|
|
||||||
obj[ j++ ] = buf[ i ] & 0x0F;
|
|
||||||
obj[ j++ ] = ( buf[ i ] >> 4 ) & 0x0F;
|
|
||||||
}
|
|
||||||
free( buf );
|
|
||||||
|
|
||||||
size = rpl_object_size( obj );
|
|
||||||
if ( size > ( fsize - 8 ) * 2 ) {
|
|
||||||
free( obj );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
rpl_push_object( obj, size );
|
|
||||||
free( obj );
|
|
||||||
}
|
|
11
src/pfiles.h
11
src/pfiles.h
|
@ -1,11 +0,0 @@
|
||||||
#ifndef __PFILES_H
|
|
||||||
#define __PFILES_H
|
|
||||||
|
|
||||||
#include "types.h"
|
|
||||||
|
|
||||||
extern char WorkingPath[ 512 ];
|
|
||||||
|
|
||||||
extern int file_size( char* name );
|
|
||||||
extern void load_file_on_stack( char* name );
|
|
||||||
|
|
||||||
#endif
|
|
35
src/ports.c
35
src/ports.c
|
@ -4,38 +4,9 @@
|
||||||
#include "bus.h"
|
#include "bus.h"
|
||||||
#include "ports.h"
|
#include "ports.h"
|
||||||
|
|
||||||
#define PORT1_SIZE ( 256 * 1024 ) /* 128Kio in nibbles */
|
byte current_bank;
|
||||||
#define PORT2_SIZE ( 256 * 1024 ) /* 128Kio in nibbles */
|
byte* port2;
|
||||||
|
address port2mask;
|
||||||
static byte current_bank;
|
|
||||||
static byte* port2;
|
|
||||||
static address port2mask;
|
|
||||||
|
|
||||||
void ports_init( void )
|
|
||||||
{
|
|
||||||
// ce1 = bank switcher
|
|
||||||
bus_info.ce1_data = NULL;
|
|
||||||
bus_info.ce1_mask = 0x0007F;
|
|
||||||
bus_info.ce1_r_o = true;
|
|
||||||
bus_info.ce1_bs = true;
|
|
||||||
|
|
||||||
// ce2 = port1 (plugged)
|
|
||||||
bus_info.ce2_data = malloc( PORT1_SIZE );
|
|
||||||
bus_info.ce2_mask = PORT1_SIZE - 1;
|
|
||||||
bus_info.ce2_r_o = false;
|
|
||||||
|
|
||||||
// nce3 = port2 (plugged)
|
|
||||||
port2 = malloc( PORT2_SIZE );
|
|
||||||
port2mask = PORT2_SIZE - 1;
|
|
||||||
bus_info.nce3_data = port2;
|
|
||||||
bus_info.nce3_mask = port2mask & 0x3FFFF;
|
|
||||||
bus_info.nce3_r_o = false;
|
|
||||||
|
|
||||||
bus_info.ben = false;
|
|
||||||
current_bank = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ports_exit( void ) {}
|
|
||||||
|
|
||||||
void ports_switch_bank( address adr )
|
void ports_switch_bank( address adr )
|
||||||
{
|
{
|
||||||
|
|
|
@ -3,8 +3,13 @@
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
extern void ports_init( void );
|
#define PORT1_SIZE ( 256 * 1024 ) /* 128Kio in nibbles */
|
||||||
extern void ports_exit( void );
|
#define PORT2_SIZE ( 256 * 1024 ) /* 128Kio in nibbles */
|
||||||
|
|
||||||
|
extern byte current_bank;
|
||||||
|
extern byte* port2;
|
||||||
|
extern address port2mask;
|
||||||
|
|
||||||
extern void ports_switch_bank( address adr );
|
extern void ports_switch_bank( address adr );
|
||||||
extern byte ports_card_detect( void );
|
extern byte ports_card_detect( void );
|
||||||
|
|
||||||
|
|
26
src/ram.c
26
src/ram.c
|
@ -1,26 +0,0 @@
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "types.h"
|
|
||||||
#include "bus.h"
|
|
||||||
#include "ram.h"
|
|
||||||
|
|
||||||
static address ram_size = 256 * 1024; // in nibbles, not bytes!
|
|
||||||
|
|
||||||
void ram_init( void )
|
|
||||||
{
|
|
||||||
byte* buf = malloc( ram_size );
|
|
||||||
if ( !buf )
|
|
||||||
exit( 0x20 );
|
|
||||||
|
|
||||||
memset( buf, 0, ram_size );
|
|
||||||
bus_info.ram_data = buf;
|
|
||||||
bus_info.ram_mask = ram_size - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ram_exit( void )
|
|
||||||
{
|
|
||||||
free( bus_info.ram_data );
|
|
||||||
bus_info.ram_data = NULL;
|
|
||||||
bus_info.ram_mask = 0x00000;
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
#ifndef __RAM_H
|
|
||||||
#define __RAM_H
|
|
||||||
|
|
||||||
extern void ram_init( void );
|
|
||||||
extern void ram_exit( void );
|
|
||||||
|
|
||||||
#endif
|
|
79
src/rom.c
79
src/rom.c
|
@ -1,79 +0,0 @@
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <libgen.h> // dirname
|
|
||||||
#include <unistd.h> // readlink
|
|
||||||
#include <linux/limits.h> // PATH_MAX
|
|
||||||
|
|
||||||
#include "types.h"
|
|
||||||
#include "bus.h"
|
|
||||||
#include "rom.h"
|
|
||||||
#include "pfiles.h"
|
|
||||||
|
|
||||||
void rom_init( void )
|
|
||||||
{
|
|
||||||
int size;
|
|
||||||
char* name = "rom";
|
|
||||||
byte *buf, *ptr1, *ptr2;
|
|
||||||
FILE* f;
|
|
||||||
|
|
||||||
size = file_size( name );
|
|
||||||
if ( !size ) {
|
|
||||||
printf( "rom_init failed\n" );
|
|
||||||
exit( 0x10 );
|
|
||||||
}
|
|
||||||
if ( size != 256 * 1024 && size != 512 * 1024 && size != 1024 * 1024 ) {
|
|
||||||
printf( "rom_init failed2..\n" );
|
|
||||||
exit( 0x11 );
|
|
||||||
}
|
|
||||||
buf = malloc( size );
|
|
||||||
if ( !buf ) {
|
|
||||||
printf( "rom_init failed3..\n" );
|
|
||||||
exit( 0x12 );
|
|
||||||
}
|
|
||||||
|
|
||||||
char fullpath[ 1024 ];
|
|
||||||
sprintf( fullpath, "%s/%s", WorkingPath, name );
|
|
||||||
|
|
||||||
// f = pack_fopen(name, "r");
|
|
||||||
f = fopen( fullpath, "r" );
|
|
||||||
if ( !f ) {
|
|
||||||
printf( "rom_init failed4..\n" );
|
|
||||||
exit( 0x13 );
|
|
||||||
}
|
|
||||||
int r = ( int )fread( buf, sizeof( char ), size, f );
|
|
||||||
if ( r != size ) { // pack_fread
|
|
||||||
printf( "rom_init failed5..\n" );
|
|
||||||
exit( 0x14 );
|
|
||||||
}
|
|
||||||
// pack_fclose(f);
|
|
||||||
fclose( f );
|
|
||||||
if ( buf[ 0 ] & 0xF0 || buf[ 1 ] & 0xF0 ) {
|
|
||||||
if ( size == 1024 * 1024 ) {
|
|
||||||
printf( "rom_init failed6..\n" );
|
|
||||||
exit( 0x15 );
|
|
||||||
}
|
|
||||||
buf = realloc( buf, size * 2 );
|
|
||||||
if ( !buf ) {
|
|
||||||
printf( "rom_init failed7..\n" );
|
|
||||||
exit( 0x16 );
|
|
||||||
}
|
|
||||||
ptr1 = buf + size - 1;
|
|
||||||
size *= 2;
|
|
||||||
ptr2 = buf + size - 1;
|
|
||||||
do {
|
|
||||||
*( ptr2-- ) = ( *ptr1 >> 4 ) & 0x0F;
|
|
||||||
*( ptr2-- ) = *( ptr1-- ) & 0x0F;
|
|
||||||
} while ( ptr1 != ptr2 );
|
|
||||||
}
|
|
||||||
bus_info.rom_data = buf;
|
|
||||||
bus_info.rom_mask = size - 1;
|
|
||||||
printf( "rom_init succeed!\n" );
|
|
||||||
}
|
|
||||||
|
|
||||||
void rom_exit( void )
|
|
||||||
{
|
|
||||||
free( bus_info.rom_data );
|
|
||||||
bus_info.rom_data = NULL;
|
|
||||||
bus_info.rom_mask = 0x00000;
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
#ifndef __ROM_H
|
|
||||||
#define __ROM_H
|
|
||||||
|
|
||||||
extern void rom_init( void );
|
|
||||||
extern void rom_exit( void );
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
Reference in a new issue