53 {
"POP",
R_, 0x7100,
pop, 1 },
55 {
"RET",
NONE, 0x8100,
ret, 1 },
101 HKEY *keys[2] = {NULL};
102 unsigned hashval = 0;
111 keys[1]->
val.
i = (int)(type & 070);
114 FREE(keys[0]->val.
s);
203 HKEY *keys[1] = {NULL};
209 keys[0]->
val.
i = (int)(code >> 8);
275 gr = (code & 0x00F0) >> 4;
276 if(gr < 0 ||
GRSIZE <= gr) {
318 sprintf(str,
"GR%d", word);
333 sys->memsize = memsize;
336 sys->clocks = clocks;
353 for(
int i = 0; i <
GRSIZE; i++) {
354 sys->cpu->gr[i] = 0x0;
356 sys->cpu->sp =
sys->memsize;
365 memset(
sys->memory, 0,
sys->memsize *
sizeof(
WORD));
#define FREE(ptr)
メモリを解放するマクロ
void * calloc_chk(size_t nmemb, size_t size, const char *tag)
領域の数とサイズを指定してメモリーを確保するcallocを実行する
void * malloc_chk(size_t size, const char *tag)
mallocを実行し、0で初期化する
#define ARRAYSIZE(array)
配列のサイズを返すマクロ
long str2l_range(const char *str, long min, long max, const char *name)
数値文字列が特定の範囲の数値かチェックし、正の場合は変換した数値、不正の場合は0を返す
char * strdup_chk(const char *s, const char *tag)
malloc_chkを実行してメモリを確保し、コピーした文字列を返す
void and_r_adr_x()
AND命令 - オペランドr,adr,x。語長2.
void suba_r1_r2()
SUBA命令 - オペランドr1,r2。語長1.
void cpl_r_adr_x()
CPL命令 - オペランドr,adr,x。語長2.
void sra()
SRA命令 - オペランドr,adr,x。語長2.
void adda_r1_r2()
ADDA命令 - オペランドr1,r2。語長1.
void xor_r1_r2()
XOR命令 - オペランドr1,r2。語長1.
void subl_r_adr_x()
SUBL命令 - オペランドr,adr,x。語長2.
void sla()
SLA命令 - オペランドr,adr,x。語長2.
void srl()
SRL命令 - オペランドr,adr,x。語長2.
void ld_r_adr_x()
LD命令 - オペランドr,adr,x。語長2.
void adda_r_adr_x()
ADDA命令 - オペランドr,adr,x。語長2.
void addl_r1_r2()
ADDL命令 - オペランドr1,r2。語長1.
void cpl_r1_r2()
CPL命令 - オペランドr1,r2。語長1.
void subl_r1_r2()
SUBL命令 - オペランドr1,r2。語長1.
void cpa_r1_r2()
CPA命令 - オペランドr1,r2。語長1.
void nop()
NOP命令。語長1(OPのみ)
void cpa_r_adr_x()
CPA命令 - オペランドr,adr,x。語長2.
void and_r1_r2()
AND命令 - オペランドr1,r2。語長1.
void ret()
RET命令。語長1(OPのみ)
void or_r_adr_x()
OR命令 - オペランドr,adr,x。語長2.
void suba_r_adr_x()
SUBA命令 - オペランドr,adr,x。語長2.
void addl_r_adr_x()
ADDL命令 - オペランドr,adr,x。語長2.
void sll()
SLL命令 - オペランドr,adr,x。語長2.
void dsp_trace_dump()
COMET IIのレジスタとメモリを実行状況と設定に応じて表示する
void xor_r_adr_x()
XOR命令 - オペランドr,adr,x。語長2.
void or_r1_r2()
OR命令 - オペランドr1,r2。語長1.
void ld_r1_r2()
LD命令 - オペランドr1,r2。語長1.
unsigned hash(int keyc, HKEY *keyv[], int tabsize)
ハッシュ値を取得する
WORD code2cmdwordlen(WORD code)
WORD memsize_str2word(const char *str)
メモリーサイズを表す数値文字列をWORD値に変換して返す。WORD値に変換できない場合は、エラーを表示して0を返す
void comet2_shutdown()
COMET II仮想マシンのシャットダウン
CMDTYPE getcmdtype(WORD code)
bool create_cmdtable(CMDTAB_HASH hash)
命令ハッシュ表を作成する
static CMDTAB * cmdtab[HASH_MAX][CMDTABSIZE]
void * getcmdptr(WORD code)
unsigned hash_code(WORD code)
char * grstr(WORD word)
汎用レジスタの番号からレジスタを表す文字列を返す
void free_cmdtable(CMDTAB_HASH hash)
bool code_gr_valid(WORD code)
WORD getcmdwordlen(const char *cmd, CMDTYPE type)
void comet2_reset()
COMET II仮想マシンのCPUをリセット
static const COMET2CMD comet2cmd[]
char * getcmdname(WORD code)
WORD getcmdcode(const char *cmd, CMDTYPE type)
unsigned hash_cmdtype(const char *cmd, CMDTYPE type)
void comet2_init(WORD memsize, CLOCK clocks)
COMET II仮想マシンの初期化
SYSTEM * sys
COMET IIの仮想実行マシンシステム
union HKEY::@132303155052201023056030363273137132157157107260 val
COMET IIの仮想実行マシンシステムを表すデータ型
unsigned short WORD
16ビットの数値を表すデータ型