From d28be64a53c8436359406cd73775f41216155a7d Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 24 Apr 2012 18:16:32 +0000 Subject: add NOP opcode --- dcpu16.h | 2 +- emu.c | 9 ++++++++- gramar.y | 5 +++-- lexer.l | 3 ++- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/dcpu16.h b/dcpu16.h index 20d308e..af96a6e 100644 --- a/dcpu16.h +++ b/dcpu16.h @@ -23,7 +23,7 @@ enum { A, B, C, X, Y, Z, I, J, PC, SP, O, Aux, nReg }; enum { EXT, SET, ADD, SUB, MUL, DIV, MOD, SHL, SHR, AND, BOR, XOR, IFE, IFN, IFG, IFB, nOpt }; -enum { Res, JSR, BRK, nExt }; +enum { NOP, JSR, BRK, nExt }; #define MEMSZ 0x10000 diff --git a/emu.c b/emu.c index 8ec00dc..5920ff7 100644 --- a/emu.c +++ b/emu.c @@ -62,11 +62,12 @@ void (*op[nOpt])(unsigned short *a, unsigned short *b) = { [IFB] = ifb, }; +void nop(unsigned short *a); void jsr(unsigned short *a); void stop(unsigned short *a); void (*extop[nExt])(unsigned short *a) = { - [Res] = stop, /* die on wrong opcode */ + [NOP] = nop, [JSR] = jsr, [BRK] = stop, }; @@ -214,6 +215,12 @@ ifb(unsigned short *a, unsigned short *b) cycle += 2 + skip; } +void +nop(unsigned short *a) +{ + cycle += 1; +} + void jsr(unsigned short *a) { diff --git a/gramar.y b/gramar.y index 7222723..7d952d2 100644 --- a/gramar.y +++ b/gramar.y @@ -57,7 +57,7 @@ char **label; %token A B C X Y Z I J %token POP PEEK PUSH SP PC O %token SET ADD SUB MUL DIV MOD SHL SHR AND BOR XOR IFE IFN IFG IFB -%token DAT JSR BRK ORG JMP +%token NOP JSR BRK DAT ORG %token LBR RBR LBRACE RBRACE LPAR RPAR %token COMMA DP PLUS MINUS MULT %token DOT HASH MACRO INCLUDE @@ -204,7 +204,8 @@ opcode ; extended - : JSR { $$ = 0x01; } + : NOP { $$ = 0x00; } + | JSR { $$ = 0x01; } | BRK { $$ = 0x02; } ; diff --git a/lexer.l b/lexer.l index fe0f809..de4ecab 100644 --- a/lexer.l +++ b/lexer.l @@ -50,11 +50,12 @@ DEC [0-9]+ [Ii][Ff][Gg] return IFG; [Ii][Ff][Bb] return IFB; +[Nn][Oo][Pp] return NOP; [Jj][Ss][Rr] return JSR; [Bb][Rr][Kk] return BRK; + [Dd][Aa][Tt] return DAT; [Oo][Rr][Gg] return ORG; -[Jj][Mm][Pp] return JMP; [Pp][Oo][Pp] return POP; [Pp][Ee][Ee][Kk] return PEEK; -- cgit v1.2.3