59 for(
int i = 0; i <
codecol-ascol; i++){
63 fprintf(stdout,
"; #%04X: #%04X", pradr, wordv[0]);
64 }
else if(wordc == 2) {
65 fprintf(stdout,
"; #%04X: #%04X #%04X", pradr, wordv[0], wordv[1]);
75 cnt += fprintf(stdout,
" %-7s ", cmdname);
77 cnt += fprintf(stdout,
"%s,", g =
grstr((word & 0x00F0) >> 4));
80 cnt += fprintf(stdout,
"#%04X", adr);
81 if((x = (word & 0x000F)) != 0) {
82 cnt += fprintf(stdout,
",%s", g =
grstr(x));
95 cnt += fprintf(stdout,
" %-7s ", cmdname);
96 if(cmdtype ==
R1_R2) {
97 g1 =
grstr((word & 0x00F0) >> 4);
98 g2 =
grstr(word & 0x000F);
99 cnt += fprintf(stdout,
"%s,%s", g1, g2);
102 }
else if(cmdtype ==
R_) {
103 g =
grstr((word & 0x00F0) >> 4);
104 cnt += fprintf(stdout,
"%s", g);
114 cnt = fprintf(stdout,
" DC %-5d ", word);
116 fprintf(stdout,
" ::" );
124 cnt = fprintf(stdout,
" DS %-5d ", wcnt);
126 for(
int i = 1; i < wcnt; i++) {
127 fprintf(stdout,
"\n");
135 for(cnt = 0; cnt < wordlen && data[cnt] == 0; cnt++) {
148 assert(file != NULL);
149 if((fp = fopen(file,
"rb")) == NULL) {
155 while(fread(&w,
sizeof(
WORD), 1, fp) == 1) {
160 fprintf(stderr,
"%s: empty or unreadable file\n", file);
162 fprintf(stdout,
"MAIN START\n");
164 fprintf(stdout,
" END\n");
173 const char *cmdname = NULL;
174 bool inprogram =
true;
179 cmd = memory[ptr] & 0xFF00;
182 if((cmd > 0 && cmdname != NULL &&
code_gr_valid(memory[ptr]) ==
true) || (inprogram ==
true && memory[ptr] == 0)) {
189 inprogram = (cmd != 0x8100) ?
true :
false;
191 if(memory[ptr] == 0 && ((zcnt =
zero_data_cnt(memory + ptr, end - ptr + 1)) > 1 || ptr == end)) {
199 fprintf(stdout,
"\n");
#define FREE(ptr)
メモリを解放するマクロ
void * calloc_chk(size_t nmemb, size_t size, const char *tag)
領域の数とサイズを指定してメモリーを確保するcallocを実行する
void disassemble_puts_code(int ascol, WORD pradr, int wordc, WORD wordv[])
機械コードをコメントとして標準出力へ出力する
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_file(const char *file)
CASL IIのオブジェクトファイルを逆アセンブルし、標準出力へ出力する
void disassemble_cmd_adr_x(CMDTYPE cmdtype, const char *cmdname, WORD word, WORD adr, WORD pradr)
種類がR_ADRまたはR_ADR_Xのコマンドを逆アセンブルし、標準出力へ出力する
void disassemble_ds(WORD wcnt, WORD pradr)
WORD zero_data_cnt(const WORD *data, WORD wordlen)
WORDデータから、値が0のWORDがいくつ連続するか返す
void disassemble_memory(WORD *memory, WORD start, WORD end)
メモリーを逆アセンブルし、標準出力へ出力する
WORD code2cmdwordlen(WORD code)
CMDTYPE getcmdtype(WORD code)
char * grstr(WORD word)
汎用レジスタの番号からレジスタを表す文字列を返す
bool code_gr_valid(WORD code)
char * getcmdname(WORD code)
unsigned short WORD
16ビットの数値を表すデータ型
void print_dumpword(WORD word, bool logicalmode)
WORD値を解析して表示する