#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <ctype.h>
#include <signal.h>
#define FALSE 0
#define TRUE 1
#include "system.h"
#include "cpu.h"
#include "atom.h"
#include "screen.h"
#include "keyboard.h"
#include "monitor.h"
int countdown;
void Atom_OS (void);
void load_image (char *filename, int addr);
void sigint_handler ()
{
printf ("*** break ***\n");
if (monitor () == 1)
{
signal (SIGINT, sigint_handler);
return;
}
#ifdef REDIRECT_STDERR
fclose (stderr);
#endif
exit_screen ();
exit (0);
}
int main (int argc, char **argv)
{
int error;
#ifdef REDIRECT_STDERR
freopen ("error.log", "w", stderr);
#endif
printf ("Acorn Atom Emulator\n");
init_memory ();
init_screen ();
init_keyboard ();
signal (SIGINT, sigint_handler);
error = FALSE;
/********
for (i=1;i<argc;i++)
{
if (*argv[i] == '-')
{
}
else
error = TRUE;
}
********/
if (error)
{
printf ("Usage: %s\n", argv[0]);
exit (1);
}
Atom_OS ();
return 0;
}
void Atom_OS ()
{
load_image ("akernel.rom", 0xF000);
load_image ("abasic.rom", 0xC000);
load_image ("afloat.rom", 0xD000);
attrib[0xb000] = HARDWARE;
attrib[0xb002] = HARDWARE;
memory[0xb002] = 0x40;
CPU_Reset ();
for(;;)
{
memory[0xb002] = (memory[0xb002] & 0x7f);
/* fprintf(stderr, "\nL"); */
GO(100);
memory[0xb002] = (memory[0xb002] & 0x7f) | 0x80;
/* fprintf(stderr, "\nH"); */
GO(900);
atom_hardware();
update_screen();
}
}
void load_image (char *filename, int addr)
{ int start_addr = addr;
int fd;
fd = open (filename, O_RDONLY);
if (fd != -1)
{
UBYTE b;
while (read (fd, &b, 1) == 1)
memory[addr++] = b;
close (fd);
SetMemory(start_addr, addr - 1, ROM);
}
else
printf("load image: could not find %s\n", filename);
}
|