74 for(
int i = 0; i <
codecol-ascol; i++){
78 fprintf(stdout,
"; #%04X: #%04X", pradr, wordv[0]);
79 }
else if(wordc == 2) {
80 fprintf(stdout,
"; #%04X: #%04X #%04X", pradr, wordv[0], wordv[1]);
89 cnt += fprintf(stdout,
" %-7s ", cmdname);
91 cnt += fprintf(stdout,
"%s,", g =
grstr((word & 0x00F0) >> 4));
94 cnt += fprintf(stdout,
"#%04X", adr);
95 if((x = (word & 0x000F)) != 0) {
96 cnt += fprintf(stdout,
",%s", g =
grstr(x));
109 cnt += fprintf(stdout,
" %-7s ", cmdname);
110 if(cmdtype ==
R1_R2) {
111 g1 =
grstr((word & 0x00F0) >> 4);
112 g2 =
grstr(word & 0x000F);
113 cnt += fprintf(stdout,
"%s,%s", g1, g2);
116 }
else if(cmdtype ==
R_) {
117 g =
grstr((word & 0x00F0) >> 4);
118 cnt += fprintf(stdout,
"%s", g);
128 cnt = fprintf(stdout,
" DC %-5d ", word);
130 fprintf(stdout,
" ::" );
138 cnt = fprintf(stdout,
" DS %-5d ", wcnt);
140 for(
int i = 0; i < wcnt - 1; i++) {
141 fprintf(stdout,
"\n");
149 fread(&aword,
sizeof(
WORD), 1, stream);
155 fseek(stream, -
sizeof(
WORD), SEEK_CUR);
163 while(!feof(stream) && word == 0) {
182 const char *cmdname = NULL;
185 assert(file != NULL);
186 if((fp = fopen(file,
"rb")) == NULL) {
193 fprintf(stdout,
"MAIN START\n");
210 }
else if(cmd == 0) {
218 inst = (cmd != 0x8100) ?
true :
false;
220 fprintf(stdout,
"\n");
222 fprintf(stdout,
" END\n");
232 const char *cmdname = NULL;
235 for(
int i = start; i <= end; i++) {
236 cmd =
sys->memory[i] & 0xFF00;
239 if(
sys->memory[i] == 0) {
245 }
else if(cmd == 0) {
254 inst = (cmd != 0x8100) ?
true :
false;
256 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ワードを取得する
CMDTYPE getcmdtype(WORD code)
bool create_cmdtable(CMDTAB_HASH hash)
命令ハッシュ表を作成する
char * grstr(WORD word)
汎用レジスタの番号からレジスタを表す文字列を返す
void free_cmdtable(CMDTAB_HASH hash)
SYSTEM * sys
COMET IIの仮想実行マシンシステム
char * getcmdname(WORD code)
unsigned short WORD
16ビットの数値を表すデータ型
void print_dumpword(WORD word, bool logicalmode)
WORD値を解析して表示する