view emulator/iset.c @ 14:2b8eb2c86602

Major update to assembler design, now handles labels proper. Next step unit test Added boot procedure and experimental function look up table to emulator Started implementing operations tested SET and CLR operations with success
author james <jb302@eecs.qmul.ac.uk>
date Wed, 29 Jan 2014 20:11:07 +0000
parents e9dc055a0f8b
children 256d24488e3f
line wrap: on
line source
/* iset.c
 * op functions */
#include <stdlib.h>
#include <stdio.h> // debug
#include "iset.h"
#include "mem.h"

//implement me
void
JNS(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
LJMP(void) {
    registers.PC = registers.PC + 1;
}

/*
 * 0x08 - SET C
 * 0x0A - SET BS
 * 0x0c - SET IE */
void
SET(void) {
    switch (op) {
        case 0x08:
            registers.flags = registers.flags | 0x80;
            break;
        case 0x0A:
            registers.flags = registers.flags | 0x01;
            break;
        case 0x0C:
            registers.flags = registers.flags | 0x02;
            break;
    }
    registers.PC = registers.PC + 1;
}

void
RESERVED(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
JPO(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
ANL(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
JNZ(void) {
    registers.PC = registers.PC + 1;
}

/* 0xFF - HLT */
void
HLT(void) {
    exit(0);
}

//implement me
void
RRC(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
POP(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
JNC(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
SUBB(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
PCALL(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
IN(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
INC(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
XRL(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
SUB(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
RR(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
SJMP(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
RETI(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
RET(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
INT(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
ADD(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
ADDC(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
RL(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
MUL(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
JC(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
JMP(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
DJNZ(void) {
    registers.PC = registers.PC + 1;
}

/* 0x09 - CLR C
 * 0x0B - CLR BS
 * 0x0D - CLR IE */
void
CLR(void) {
    switch (op) {
        case 0x09:
            registers.flags = registers.flags ^ 0x80;
            break;
        case 0x0B:
            registers.flags = registers.flags ^ 0x01;
            break;
        case 0x0D:
            registers.flags = registers.flags ^ 0x02;
            break;
    }
    registers.PC = registers.PC + 1;
}

//implement me
void
JZ(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
JPE(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
LAF(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
MOV(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
RLC(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
JS(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
ORL(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
CJNE(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
XCSD(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
LCALL(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
DA(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
NOP(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
SFA(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
CPL(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
PUSH(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
DIV(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
DEC(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
OUT(void) {
    registers.PC = registers.PC + 1;
}

//implement me
void
PJMP(void) {
    registers.PC = registers.PC + 1;
}