X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Fcasl2rev.c;h=6d0d527fdc0b947109b912e2cfc70ab3ac83da01;hp=c849ecbe4b0946f089e75c9e2af25716c67f4b17;hb=refs%2Ftags%2Fv0.5p1;hpb=b8b0bb2a7b5ef20cdbee5f555c5846dfc1c7f981 diff --git a/src/casl2rev.c b/src/casl2rev.c index c849ecb..6d0d527 100644 --- a/src/casl2rev.c +++ b/src/casl2rev.c @@ -1,86 +1,8 @@ -#include -#include - -#define _GNU_SOURCE -#include -#include - -#include "exec.h" -#include "cmem.h" -#include "cerr.h" #include "package.h" - -char *grstr(WORD word) -{ - assert(word <= 7); - char *str = malloc_chk(3 + 1, "grstr.str"); - sprintf(str, "GR%d", word); - return str; -} - -bool disassemble(const char *file) -{ - bool stat = true; - FILE *fp; - WORD i = 0, w, cmd, r, x, r1, r2, adr; - CMDTYPE cmdtype = 0; - char *cmdname; - - assert(file != NULL); - if((fp = fopen(file, "rb")) == NULL) { - perror(file); - return false; - } - - create_code_cmdtype(); /* 命令のコードとタイプがキーのハッシュ表を作成 */ - - fprintf(stdout, "MAIN\tSTART\n"); - for(; ;) { - fread(&w, sizeof(WORD), 1, fp); - if(feof(fp)) { - break; - } - cmd = w & 0xFF00; - cmdname = getcmdname(cmd); - cmdtype = getcmdtype(cmd); - if(cmd == 0xFF00 || (w != 0 && cmd == 0x0000)) { - fprintf(stdout, "\tDC\t%d\t\t\t\t; #%04X: #%04X :: ", w, i++, w); - print_dumpword(w, true); - } else if(cmdtype == R_ADR_X || cmdtype == ADR_X) { - fread(&adr, sizeof(WORD), 1, fp); - fprintf(stdout, "\t%s\t", cmdname); - if(cmdtype == R_ADR_X) { - r = (w & 0x00F0) >> 4; - fprintf(stdout, "%s,", grstr(r)); - } - fprintf(stdout, "#%04X", adr); - if((x = w & 0x000F) != 0) { - fprintf(stdout, ",%s", grstr(x)); - } - fprintf(stdout, "\t\t\t\t; #%04X: #%04X #%04X", i, w, adr); - i += 2; - } else { - fprintf(stdout, "\t%s", cmdname); - if(cmdtype == R1_R2) { - r1 = (w & 0x00F0) >> 4; - r2 = w & 0x000F; - fprintf(stdout, "\t%s,%s", grstr(r1), grstr(r2)); - } else if(cmdtype == R_) { - r = (w & 0x00F0) >> 4; - fprintf(stdout, "\t%s", grstr(r)); - } - fprintf(stdout, "\t\t\t\t; #%04X: #%04X", i++, w); - } - fprintf(stdout, "\n"); - } - fprintf(stdout, "\tEND\n"); - free_code_cmdtype(); - fclose(fp); - return stat; -} +#include "exec.h" /** - * disassembleコマンドのオプション + * @brief casl2revコマンドのオプション */ static struct option longopts[] = { {"version", no_argument, NULL, 'v' }, @@ -89,7 +11,7 @@ static struct option longopts[] = { }; /** - * @brief disassembleコマンドのメイン + * @brief casl2revコマンドのメイン * * @return 正常終了時は0、異常終了時は1 * @@ -125,9 +47,8 @@ int main(int argc, char *argv[]) fprintf(stderr, "disassemble error - %d: %s\n", cerr->num, cerr->msg); exit(1); } - disassemble(argv[optind]); /* プログラム実行 */ + disassemble_file(argv[optind]); /* プログラム実行 */ stat = (cerr->num == 0) ? 0 : 1; - /* エラーの解放 */ - freecerr(); + freecerr(); /* エラーの解放 */ return stat; }