X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Fdisassemble.c;h=dc40f1d7b94674bdc5dbc1c8879f1b78148d1faa;hp=a97a04231c26e1586afe93e47f21c2f3e4ef21cd;hb=86e559d164166966a797a1e5855871d48e087ddd;hpb=c6c69d4a9a0f850296bf54a5770a672bafab56db diff --git a/src/disassemble.c b/src/disassemble.c index a97a042..dc40f1d 100644 --- a/src/disassemble.c +++ b/src/disassemble.c @@ -81,8 +81,7 @@ void disassemble_dc(WORD word, WORD pradr); void disassemble_puts_code(int ascol, WORD pradr, int wordc, WORD wordv[]) { - int i; - for(i = 0; i < codecol-ascol; i++){ + for(int i = 0; i < codecol-ascol; i++){ fprintf(stdout, " "); } if(wordc == 1) { @@ -93,9 +92,10 @@ void disassemble_puts_code(int ascol, WORD pradr, int wordc, WORD wordv[]) } void disassemble_cmd_adr_x(CMDTYPE cmdtype, const char *cmdname, WORD word, WORD adr, WORD pradr) { - WORD x; - char *g; + WORD x = 0; + char *g = NULL; int cnt = 0; + cnt += fprintf(stdout, " %-7s ", cmdname); if(cmdtype == R_ADR_X) { cnt += fprintf(stdout, "%s,", g = grstr((word & 0x00F0) >> 4)); @@ -111,8 +111,11 @@ void disassemble_cmd_adr_x(CMDTYPE cmdtype, const char *cmdname, WORD word, WORD void disassemble_cmd_r(CMDTYPE cmdtype, const char *cmdname, WORD word, WORD pradr) { - char *g, *g1, *g2; + char *g = NULL; + char *g1 = NULL; + char *g2 = NULL; int cnt = 0; + cnt += fprintf(stdout, " %-7s ", cmdname); if(cmdtype == R1_R2) { g1 = grstr((word & 0x00F0) >> 4); @@ -131,6 +134,7 @@ void disassemble_cmd_r(CMDTYPE cmdtype, const char *cmdname, WORD word, WORD pra void disassemble_dc(WORD word, WORD pradr) { int cnt = 0; + cnt = fprintf(stdout, " DC %-5d ", word); disassemble_puts_code(cnt, pradr, 1, (WORD []){word}); fprintf(stdout, " ::" ); @@ -139,10 +143,11 @@ void disassemble_dc(WORD word, WORD pradr) void disassemble_ds(WORD wcnt, WORD pradr) { - int cnt = 0, i; + int cnt = 0; + cnt = fprintf(stdout, " DS %-5d ", wcnt); disassemble_puts_code(cnt, pradr, 1, (WORD []){0}); - for(i = 0; i < wcnt - 1; i++) { + for(int i = 0; i < wcnt - 1; i++) { fprintf(stdout, "\n"); disassemble_puts_code(0, pradr+1, 1, (WORD []){0}); } @@ -162,7 +167,9 @@ void fungetword(FILE *stream) WORD zero_data_cnt(FILE *stream) { - WORD cnt = 0, word = 0; + WORD cnt = 0; + WORD word = 0; + while(!feof(stream) && word == 0) { word = fgetword(stream); cnt++; @@ -176,10 +183,13 @@ WORD zero_data_cnt(FILE *stream) bool disassemble_file(const char *file) { bool stat = true; - FILE *fp; - WORD i = 0, word, cmd, zcnt; + FILE *fp = NULL; + WORD i = 0; + WORD word = 0; + WORD cmd = 0; + WORD zcnt = 0; CMDTYPE cmdtype = 0; - char *cmdname; + const char *cmdname = NULL; bool inst = true; assert(file != NULL); @@ -192,13 +202,15 @@ bool disassemble_file(const char *file) fprintf(stdout, "MAIN START\n"); for(word = fgetword(fp); !feof(fp); i++, word = fgetword(fp)) { - cmdname = getcmdname(cmd = word & 0xFF00); + cmd = word & 0xFF00; + cmdname = getcmdname(cmd); cmdtype = getcmdtype(cmd); if(word == 0){ if(inst == true) { /* プログラム領域の場合 */ disassemble_cmd_r(NONE, "nop", 0, i); } else { /* データ領域の場合 */ - if((zcnt = zero_data_cnt(fp)) == 1) { /* 1つだけの0はDCとみなす */ + zcnt = zero_data_cnt(fp); + if(zcnt == 1) { /* 1つだけの0はDCとみなす */ disassemble_dc(0, i); } else { /* 連続する0はDSとみなす */ disassemble_ds(zcnt, i); @@ -225,29 +237,29 @@ bool disassemble_file(const char *file) void disassemble_memory(WORD start, WORD end) { - WORD i, word, cmd; + WORD cmd = 0; CMDTYPE cmdtype = 0; - char *cmdname; + const char *cmdname = NULL; bool inst = true; - for(i = start; i <= end; i++) { - word = sys->memory[i]; - cmdname = getcmdname(cmd = word & 0xFF00); + for(int i = start; i <= end; i++) { + cmd = sys->memory[i] & 0xFF00; + cmdname = getcmdname(cmd); cmdtype = getcmdtype(cmd); - if(word == 0) { + if(sys->memory[i] == 0) { if(inst == true) { /* プログラム領域の場合 */ disassemble_cmd_r(NONE, "nop", 0, i); } else { /* データ領域の場合。メモリーでは、DC 0とみなす */ disassemble_dc(0, i); } } else if(cmd == 0) { - disassemble_dc(word, i); + disassemble_dc(sys->memory[i], i); } else { if(cmdtype == R_ADR_X || cmdtype == ADR_X) { - disassemble_cmd_adr_x(cmdtype, cmdname, word, sys->memory[i+1], i); + disassemble_cmd_adr_x(cmdtype, cmdname, sys->memory[i], sys->memory[i+1], i); i++; } else { - disassemble_cmd_r(cmdtype, cmdname, word, i); + disassemble_cmd_r(cmdtype, cmdname, sys->memory[i], i); } inst = (cmd != 0x8100) ? true : false; }