aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2012-04-27 13:25:06 +0000
committerDimitri Sokolyuk <demon@dim13.org>2012-04-27 13:25:06 +0000
commit1c864648856daab4c827261da0c28416ae25da9f (patch)
tree079993d674888d6910cd2cde114aca17542ceae7
parent2ca6dd65af01bae11b76707916701f9f0f37f40e (diff)
revert undocument in-joke halt catch fire opcode
-rw-r--r--dcpu16.h2
-rw-r--r--emu.c8
-rw-r--r--gramar.y3
-rw-r--r--lexer.l2
4 files changed, 12 insertions, 3 deletions
diff --git a/dcpu16.h b/dcpu16.h
index 44b065e..8e7b936 100644
--- a/dcpu16.h
+++ b/dcpu16.h
@@ -28,7 +28,7 @@ enum { EXT, SET, ADD, SUB, MUL, MLI, DIV, DVI,
STI = 0x1e, STD, nOpt };
enum { NOP, JSR, BRK,
- INT = 0x08, IAG, IAS, RFI, IAQ,
+ HCF = 0x07, INT, IAG, IAS, RFI, IAQ,
HWN = 0x10, HWQ, HWI, nExt };
#define MEMSZ 0x10000
diff --git a/emu.c b/emu.c
index fbcf362..c14fe39 100644
--- a/emu.c
+++ b/emu.c
@@ -50,6 +50,13 @@ stop(unsigned short *a)
}
void
+hcf(unsigned short *a)
+{
+ /* TODO: halt catch fire */
+ cycle += 9;
+}
+
+void
intr(unsigned short *a)
{
/* TODO */
@@ -109,6 +116,7 @@ void (*extop[nExt])(unsigned short *) = {
[NOP] = nop,
[JSR] = jsr,
[BRK] = stop,
+ [HCF] = hcf,
[INT] = intr,
[IAG] = iag,
[IAS] = ias,
diff --git a/gramar.y b/gramar.y
index c81560c..7580ff8 100644
--- a/gramar.y
+++ b/gramar.y
@@ -68,7 +68,7 @@ struct label {
%token SET ADD SUB MUL MLI DIV DVI MOD MDI AND BOR XOR SHR ASR SHL
%token IFB IFC IFE IFN IFG IFA IFL IFU ADX SBX STI STD
%token NOP BRK DAT ORG
-%token JSR INT IAG IAS RFI IAQ HWN HWQ HWI
+%token JSR HCF INT IAG IAS RFI IAQ HWN HWQ HWI
%token LBR RBR LBRACE RBRACE LPAR RPAR
%token COMMA DP
%token PLUS MINUS EMUL EDIV EMOD ENOT EXOR EAND EOR SHIFTL SHIFTR
@@ -244,6 +244,7 @@ opcode
extended
: JSR { $$ = 0x01; }
+ | HCF { $$ = 0x07; }
| INT { $$ = 0x08; }
| IAG { $$ = 0x09; }
| IAS { $$ = 0x0a; }
diff --git a/lexer.l b/lexer.l
index ea57002..d738d4b 100644
--- a/lexer.l
+++ b/lexer.l
@@ -67,7 +67,7 @@ DEC [0-9]+
[Nn][Oo][Pp] return NOP;
[Jj][Ss][Rr] return JSR;
[Bb][Rr][Kk] return BRK;
-
+[Hh][Cc][Ff] return HCF;
[Ii][Nn][Tt] return INT;
[Ii][Aa][Gg] return IAG;
[Ii][Aa][Ss] return IAS;