84 for(
int i = 0; i <
codecol-ascol; i++){
88 fprintf(stdout,
"; #%04X: #%04X", pradr, wordv[0]);
89 }
else if(wordc == 2) {
90 fprintf(stdout,
"; #%04X: #%04X #%04X", pradr, wordv[0], wordv[1]);
99 cnt += fprintf(stdout,
" %-7s ", cmdname);
101 cnt += fprintf(stdout,
"%s,", g =
grstr((word & 0x00F0) >> 4));
104 cnt += fprintf(stdout,
"#%04X", adr);
105 if((x = (word & 0x000F)) != 0) {
106 cnt += fprintf(stdout,
",%s", g =
grstr(x));
119 cnt += fprintf(stdout,
" %-7s ", cmdname);
120 if(cmdtype ==
R1_R2) {
121 g1 =
grstr((word & 0x00F0) >> 4);
122 g2 =
grstr(word & 0x000F);
123 cnt += fprintf(stdout,
"%s,%s", g1, g2);
126 }
else if(cmdtype ==
R_) {
127 g =
grstr((word & 0x00F0) >> 4);
128 cnt += fprintf(stdout,
"%s", g);
138 cnt = fprintf(stdout,
" DC %-5d ", word);
140 fprintf(stdout,
" ::" );
148 cnt = fprintf(stdout,
" DS %-5d ", wcnt);
150 for(
int i = 0; i < wcnt - 1; i++) {
151 fprintf(stdout,
"\n");
159 fread(&aword,
sizeof(
WORD), 1, stream);
165 fseek(stream, -
sizeof(
WORD), SEEK_CUR);
173 while(!feof(stream) && word == 0) {
192 const char *cmdname = NULL;
195 assert(file != NULL);
196 if((fp = fopen(file,
"rb")) == NULL) {
203 fprintf(stdout,
"MAIN START\n");
220 }
else if(cmd == 0) {
228 inst = (cmd != 0x8100) ?
true :
false;
230 fprintf(stdout,
"\n");
232 fprintf(stdout,
" END\n");
242 const char *cmdname = NULL;
245 for(
int i = start; i <= end; i++) {
255 }
else if(cmd == 0) {
264 inst = (cmd != 0x8100) ?
true :
false;
266 fprintf(stdout,
"\n");
#define FREE(ptr)
メモリを解放するマクロ
void disassemble_puts_code(int ascol, WORD pradr, int wordc, WORD wordv[])
機械コードをコメントとして標準出力へ出力する
bool disassemble_file(const char *file)
CASL IIのオブジェクトファイルを逆アセンブルし、標準出力へ出力する
void disassemble_memory(WORD start, WORD end)
COMET IIのメモリーを逆アセンブルし、標準出力へ出力する
void disassemble_dc(WORD word, WORD pradr)
DCコマンドを逆アセンブルし、標準出力へ出力する
void disassemble_cmd_r(CMDTYPE cmdtype, const char *cmdname, WORD word, WORD pradr)
種類がR1_R2またはR_のコマンドを逆アセンブルし、標準出力へ出力する
void disassemble_cmd_adr_x(CMDTYPE cmdtype, const char *cmdname, WORD word, WORD adr, WORD pradr)
種類がR_ADRまたはR_ADR_Xのコマンドを逆アセンブルし、標準出力へ出力する
void fungetword(FILE *stream)
ファイルストリームを1ワード戻す
WORD zero_data_cnt(FILE *stream)
ファイルストリームから、値が0の連続するWORD数を返す
void disassemble_ds(WORD wcnt, WORD pradr)
WORD fgetword(FILE *stream)
ファイルストリームから1ワードを取得する
char * getcmdname(WORD code)
CMDTYPE getcmdtype(WORD code)
bool create_cmdtable(CMDTAB_HASH hash)
命令ハッシュ表を作成する
void free_cmdtable(CMDTAB_HASH hash)
SYSTEM * sys
COMET IIの仮想実行マシンシステム
char * grstr(WORD word)
汎用レジスタの番号からレジスタを表す文字列を返す
unsigned short WORD
16ビットの数値を表すデータ型
void print_dumpword(WORD word, bool logicalmode)
WORD値を解析して表示する