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.