User:Troy martin/Emulators
Jump to navigation
Jump to search
Written in C
8-bit Outline
#include <stdio.h>
#include <time.h>
#define LDX 0x01
#define LDY 0x02
#define IOX 0x10
#define HLT 0xFF
unsigned int ip=0, x=0, y=0, acc=0;
unsigned char memory[256] = {LDX,0x01,LDY,0x06,IOX,HLT,'M','y',' ','e','m','u','l','a','t','o','r',' ','w','o','r','k','s','!','\0'};
int slp(unsigned int mseconds) /* sleep: can be used for setting processor limits */
{
clock_t goal = mseconds + clock();
while (goal > clock());
return 0;
}
void ldx(unsigned int xdata)
{
x=xdata;
}
void ldy(unsigned int ydata)
{
y=ydata;
}
void iox()
{
switch(x)
{
case 0x01:
printf("%s",memory+y);
break;
}
}
int main(void)
{
int CPUIsRunning = 1;
float memkb=sizeof(memory);
printf("My Emulator 1.0\n%d bytes (%f KB) of memory.\n\n",sizeof(memory),(memkb/1024));
while(CPUIsRunning==1)
{
//slp(100);
switch(memory[ip])
{
case 0x01:
ldx(memory[ip+1]);
ip+=2;
break;
case 0x02:
ldy(memory[ip+1]);
ip+=2;
break;
case 0x10:
iox();
ip+=1;
break;
case 0xFF:
printf("\n\nEmulator halted by opcode 0xFF (instruction HLT).\n");
system("pause");
CPUIsRunning=0;
break;
default:
printf("\n\nEmulator halted by illegal opcode.\n");
system("pause");
CPUIsRunning=0;
break;
}
}
return 0;
}
16-bit
I'll post code or a link to pastebin'd code when it's more complete.