diff --git a/src/analyze.c b/src/analyze.c index e0a7691..4b13d6e 100644 --- a/src/analyze.c +++ b/src/analyze.c @@ -2,7 +2,7 @@ // 自動解析モジュール // Copyright (C) 1989,1990 K.Abe, 1994 R.ShimiZu // All rights reserved. -// Copyright (C) 1997-2023 TcbnErik +// Copyright (C) 2025 TcbnErik #include #include @@ -152,7 +152,7 @@ static void printUndefinedInstruction(address pc) { // プログラム領域の終端をラベル登録する static void foundProgramEnd(address adrs) { if (search_label(adrs) == NULL) { - regist_label(adrs, DATLABEL | UNKNOWN); + regist_label(adrs, DATLABEL | (lblmode)UNKNOWN); } } @@ -347,7 +347,7 @@ static boolean analyzeInner(address start, analyze_mode mode) { disasm* code = &disp.code; CodeFlow flow; int orib = 0; // ori.b #??,d0 = $0000???? - void (*regoplbl)(disasm * code) = Dis.actions->registerOperandLabel; + void (*regoplbl)(disasm* code) = Dis.actions->registerOperandLabel; if (Dis.availableTextEnd <= start) { printReason("PCが有効なセクションを外れた。", start); @@ -515,7 +515,7 @@ boolean analyze(address start, analyze_mode mode) { if (!success) { charout('?'); - ch_lblmod(start, DATLABEL | UNKNOWN | FORCE); + ch_lblmod(start, DATLABEL | FORCE | (lblmode)UNKNOWN); return FALSE; } charout('<'); @@ -533,12 +533,12 @@ static boolean branchToOdd(DisParam* disp, address start, address limit) { if (Dis.acceptAddressError) { // -j: 奇数アドレスへの分岐を未定義命令と「しない」 - regist_label(code->jmp, DATLABEL | UNKNOWN); + regist_label(code->jmp, DATLABEL | (lblmode)UNKNOWN); return TRUE; } // 奇数アドレスへの分岐があればプログラム領域ではない - ch_lblmod(start, DATLABEL | UNKNOWN | FORCE); + ch_lblmod(start, DATLABEL | FORCE | (lblmode)UNKNOWN); not_program(start, MIN(code->pc, limit)); return FALSE; } @@ -561,7 +561,7 @@ static boolean branch_job(DisParam* disp, address start, analyze_mode mode, // 分岐先の領域を解析する if (!analyze(opval, mode) && mode != ANALYZE_IGNOREFAULT && !Dis.i) { // 分岐先がプログラム領域でなければ、呼び出し元も同じ - ch_lblmod(start, DATLABEL | UNKNOWN | FORCE); + ch_lblmod(start, DATLABEL | FORCE | (lblmode)UNKNOWN); not_program(start, MIN(disp->pc, limit)); return FALSE; } @@ -628,7 +628,7 @@ static boolean analyzeJump(DisParam* disp, CodeFlow* flow, address start, // 実際の分岐先は実行時のインデックスレジスタの値次第で、ラベルの場所が // プログラムではない可能性もあるので、解析はせずラベル登録だけに留める。 // (README.txtの「参照されないラベル」と同様のケース) - regist_label(code->jmp, DATLABEL | UNKNOWN); + regist_label(code->jmp, DATLABEL | (lblmode)UNKNOWN); break; } @@ -703,9 +703,9 @@ static int analyzeRelativeTable(address table, opesize size, // (別のデータ形式かもしれないし、プログラム領域かもしれない) // ただしアドレス値だけで判定しているので確実とは言えない if (table == ptr) - regist_label(ptr, DATLABEL | UNKNOWN | FORCE); + regist_label(ptr, DATLABEL | (lblmode)UNKNOWN | FORCE); else - regist_label(ptr, DATLABEL | UNKNOWN); + regist_label(ptr, DATLABEL | (lblmode)UNKNOWN); break; } @@ -713,7 +713,7 @@ static int analyzeRelativeTable(address table, opesize size, printReltblAddress(table, ptr, offs, label); #endif if (table != label) { - regist_label(label, DATLABEL | UNKNOWN); + regist_label(label, DATLABEL | (lblmode)UNKNOWN); } ptr += bytes; @@ -800,7 +800,7 @@ static int hasReltblData(address table) { // テーブルの解析は他の解析が終わって判明した限りのラベルが登録されてからとなる。 void registerReltblOrder(ArrayBuffer* rtbuf, address table, opesize size, boolean isProgram, lblmode mode) { - if (mode) regist_label(table, mode | size); + if (mode) regist_label(table, mode | (lblmode)size); if (hasReltblData(table)) { ReltblOrder* p = getArrayBufferNewPlace(rtbuf); @@ -820,7 +820,7 @@ extern void z_table(address table) { while (ptr + 4 <= tableend) { address label = (address)peekl(ptr + Dis.Ofst); - regist_label(label, DATLABEL | UNKNOWN); + regist_label(label, DATLABEL | (lblmode)UNKNOWN); ptr += 4; tableend = next(ptr)->label; } @@ -835,7 +835,7 @@ extern void not_program(address from, address to) { DisParam disp; disasm* code = &disp.code; - ch_lblmod(from, DATLABEL | UNKNOWN | FORCE); + ch_lblmod(from, DATLABEL | FORCE | (lblmode)UNKNOWN); setDisParamPcPtr(&disp, from, Dis.Ofst); disp.pcEnd = to; @@ -862,45 +862,45 @@ static void regist_data(disasm* code, operand* op) { case IMMED: if (code->size2 == LONGSIZE && INPROG(op->opval, op->eaadrs)) - regist_label(op->opval, DATLABEL | UNKNOWN); + regist_label(op->opval, DATLABEL | (lblmode)UNKNOWN); break; case AbLong: if (INPROG(op->opval, op->eaadrs)) - regist_label(op->opval, DATLABEL | code->size2); + regist_label(op->opval, DATLABEL | (lblmode)code->size2); break; case PCDISP: case PCIDX: - regist_label(op->opval, DATLABEL | code->size2); + regist_label(op->opval, DATLABEL | (lblmode)code->size2); break; case AregIDXB: if (op->exbd == 4 && INPROG(op->opval, op->eaadrs)) - regist_label(op->opval, DATLABEL | code->size2); + regist_label(op->opval, DATLABEL | (lblmode)code->size2); break; case AregPOSTIDX: case AregPREIDX: if (op->exbd == 4 && INPROG(op->opval, op->eaadrs)) - regist_label(op->opval, DATLABEL | LONGSIZE); + regist_label(op->opval, DATLABEL | (lblmode)LONGSIZE); if (op->exod == 4 && INPROG(op->opval2, op->eaadrs2)) - regist_label(op->opval2, DATLABEL | code->size2); + regist_label(op->opval2, DATLABEL | (lblmode)code->size2); break; case PCIDXB: if ((op->flags & OPFLAG_PC_RELATIVE) || (op->exbd == 4 && INPROG(op->opval, op->eaadrs))) - regist_label(op->opval, DATLABEL | code->size2); + regist_label(op->opval, DATLABEL | (lblmode)code->size2); break; case PCPOSTIDX: case PCPREIDX: if ((op->flags & OPFLAG_PC_RELATIVE) || (op->exbd == 4 && INPROG(op->opval, op->eaadrs))) - regist_label(op->opval, DATLABEL | LONGSIZE); + regist_label(op->opval, DATLABEL | (lblmode)LONGSIZE); if (op->exod == 4 && INPROG(op->opval2, op->eaadrs2)) - regist_label(op->opval2, DATLABEL | code->size2); + regist_label(op->opval2, DATLABEL | (lblmode)code->size2); break; } } diff --git a/src/analyze2.c b/src/analyze2.c index ba80247..dc3d2ba 100644 --- a/src/analyze2.c +++ b/src/analyze2.c @@ -2,7 +2,7 @@ // 自動解析モジュール2 // Copyright (C) 1989,1990 K.Abe // All rights reserved. -// Copyright (C) 1997-2023 TcbnErik +// Copyright (C) 2025 TcbnErik #include @@ -137,7 +137,8 @@ extern void analyze_data(void) { /* アドレス依存のデータがあれば、そのアドレスを登録する */ for (adrs = data_from; (adrs = nearadrs(adrs)) < data_to && adrs < data_to; adrs += 4) { - regist_label((address)peekl(adrs + Dis.Ofst), DATLABEL | UNKNOWN); + regist_label((address)peekl(adrs + Dis.Ofst), + DATLABEL | (lblmode)UNKNOWN); } if (Dis.h && data_from < Dis.availableTextEnd) { @@ -146,13 +147,13 @@ extern void analyze_data(void) { if (word1 == 0x4e75) { // rts の次のアドレスを登録する - regist_label(adrs + 2, DATLABEL | UNKNOWN); + regist_label(adrs + 2, DATLABEL | (lblmode)UNKNOWN); } if (Dis.findLinkW) { // link 命令に注目 if ((word1 & 0xfff8) == 0x4e50) - regist_label(adrs, DATLABEL | UNKNOWN); + regist_label(adrs, DATLABEL | (lblmode)UNKNOWN); } } } diff --git a/src/eval.c b/src/eval.c index d69cbe1..39a215e 100644 --- a/src/eval.c +++ b/src/eval.c @@ -2,7 +2,7 @@ // テーブル行構文解析・評価 // Copyright (C) 1989,1990 K.Abe // All rights reserved. -// Copyright (C) 1997-2023 TcbnErik +// Copyright (C) 2025 TcbnErik // This file is part of dis (source code generator). // @@ -258,7 +258,7 @@ static ParseResult parseStrOrExp(Parser* parser, Expr* result) { if (parser->writePtr == NULL) { // 解析中ならラベル登録 // テーブルでないと判定された場合に取り消す処理を追加したほうがよいかも - regist_label((address)expr.value.ul, DATLABEL | UNKNOWN); + regist_label((address)expr.value.ul, DATLABEL | (lblmode)UNKNOWN); } *result = createExprLabel(expr.value.ul); } @@ -832,8 +832,7 @@ static StrSpan getKeywordSpan(char first, char* s) { char c; if (isalpha(first) || first == '.') { - while (isalnum(c = *p++) || c == '.') - ; + while (isalnum(c = *p++) || c == '.'); } return (StrSpan){s - 1, p - s}; } @@ -898,8 +897,7 @@ static Token fetchToken(Tokenizer* tokenizer) { char c, c2; tokenizer->_error = NULL; - while ((c = *tokenizer->_p++) == ' ' || c == '\t' || c == '\n') - ; + while ((c = *tokenizer->_p++) == ' ' || c == '\t' || c == '\n'); if (c == '\0') { tokenizer->_p -= 1; return (Token){TOKEN_NUL, 0}; diff --git a/src/human.c b/src/human.c index 8a2e1ba..229f458 100644 --- a/src/human.c +++ b/src/human.c @@ -1,6 +1,6 @@ // ソースコードジェネレータ // Human68k -// Copyright (C) 2024 TcbnErik +// Copyright (C) 2025 TcbnErik // This file is part of dis (source code generator). // @@ -254,8 +254,9 @@ static void analyzeDeviceDriver(void) { break; } - regist_label(dev + DH_NEXT, DATLABEL | LONGSIZE | FORCE | DEVLABEL); - regist_label(dev + DH_TYPE, DATLABEL | WORDSIZE | FORCE | HIDDEN); + regist_label(dev + DH_NEXT, + DATLABEL | (lblmode)LONGSIZE | FORCE | DEVLABEL); + regist_label(dev + DH_TYPE, DATLABEL | (lblmode)WORDSIZE | FORCE | HIDDEN); // ストラテジルーチンと割り込みルーチンはリロケート情報があるので登録不要 // ``` @@ -263,8 +264,8 @@ static void analyzeDeviceDriver(void) { // regist_label(dev + DH_INTERRUPT, DATLABEL | LONGSIZE | FORCE); // ``` - regist_label(dev + DH_NAME, DATLABEL | STRING | FORCE | HIDDEN); - regist_label(dev + DH_SIZE, DATLABEL | UNKNOWN); + regist_label(dev + DH_NAME, DATLABEL | (lblmode)STRING | FORCE | HIDDEN); + regist_label(dev + DH_SIZE, DATLABEL | (lblmode)UNKNOWN); analyze((address)peekl(ptr + DH_STRATEGY), ANALYZE_IGNOREFAULT); analyze((address)peekl(ptr + DH_INTERRUPT), ANALYZE_IGNOREFAULT); diff --git a/src/label.c b/src/label.c index 4407e0f..8c63824 100644 --- a/src/label.c +++ b/src/label.c @@ -2,7 +2,7 @@ // ラベル管理モジュール // Copyright (C) 1989,1990 K.Abe // All rights reserved. -// Copyright (C) 2024 TcbnErik +// Copyright (C) 2025 TcbnErik #include "label.h" @@ -25,7 +25,7 @@ #include "./avl/avl.c" static avl_root_node* LabelRoot; -static lblbuf Nomore = {(address)-1, NULL, DATLABEL | UNKNOWN, 0, 1}; +static lblbuf Nomore = {(address)-1, NULL, DATLABEL | (lblmode)UNKNOWN, 0, 1}; static int compare(lblbuf* label1, lblbuf* label2) { return (ULONG)label1->label - (ULONG)label2->label; @@ -96,7 +96,7 @@ boolean registerLabel(address adrs, lblmode mode) { if (isPROLABEL(mode)) { if (isOdd(adrs)) return FALSE; if (adrs > Dis.availableTextEnd) { - regist_label(adrs, DATLABEL | UNKNOWN); + regist_label(adrs, DATLABEL | (lblmode)UNKNOWN); return FALSE; } } diff --git a/src/labelcheck.c b/src/labelcheck.c index 930bed8..6abd383 100644 --- a/src/labelcheck.c +++ b/src/labelcheck.c @@ -2,7 +2,7 @@ // ラベルチェック // Copyright (C) 1989,1990 K.Abe // All rights reserved. -// Copyright (C) 1997-2023 TcbnErik +// Copyright (C) 2025 TcbnErik #include @@ -159,7 +159,7 @@ static void search_change_data(address from, address end) { while (dependadrs < nlabel && nlabel < dependadrs + 4) { charout('!'); nadrs->shift = nlabel - dependadrs; - regist_label(dependadrs, DATLABEL | UNKNOWN); + regist_label(dependadrs, DATLABEL | (lblmode)UNKNOWN); nadrs = Next(nadrs); nlabel = nadrs->label; } diff --git a/src/labelfile.c b/src/labelfile.c index b5f8f62..16a27f1 100644 --- a/src/labelfile.c +++ b/src/labelfile.c @@ -2,7 +2,7 @@ // ラベルファイルモジュール // Copyright (C) 1989,1990 K.Abe // All rights reserved. -// Copyright (C) 2024 TcbnErik +// Copyright (C) 2025 TcbnErik #include /* toupper */ #include @@ -127,7 +127,7 @@ static int error(const char* filename, int line, const char* msg) { // データ系の属性文字列を変換する static int parseLabelAttrD(const char* filename, int line, const char** pStr, lblmode* pAttr) { - lblmode attr = DATLABEL; + opesize size = BYTESIZE; const char* p = *pStr; if (*p == '\0') @@ -138,52 +138,52 @@ static int parseLabelAttrD(const char* filename, int line, const char** pStr, return error(filename, line, "属性Dのサイズが不正です。"); case 'B': - attr |= BYTESIZE; + size = BYTESIZE; break; case 'W': - attr |= WORDSIZE; + size = WORDSIZE; break; case 'L': - attr |= LONGSIZE; + size = LONGSIZE; break; case 'Q': - attr |= QUADSIZE; + size = QUADSIZE; break; case 'F': - attr |= SINGLESIZE; + size = SINGLESIZE; break; case 'D': - attr |= DOUBLESIZE; + size = DOUBLESIZE; break; case 'X': - attr |= EXTENDSIZE; + size = EXTENDSIZE; break; case 'P': - attr |= PACKEDSIZE; + size = PACKEDSIZE; break; case 'S': - attr |= STRING; + size = STRING; break; case 'Z': - attr |= ZTABLE; + size = ZTABLE; break; case 'U': - attr |= UNKNOWN; + size = UNKNOWN; break; // 過去のバージョンでは相対オフセットテーブルをDR、DRL // と規定していたので、互換性のために残す case 'R': - attr |= RELTABLE; + size = RELTABLE; if (upper(*p) == 'L') { p += 1; - attr ^= (RELTABLE ^ RELLONGTABLE); + size = RELLONGTABLE; } break; } *pStr = p; - *pAttr = attr; + *pAttr = DATLABEL | (lblmode)size; return 0; } @@ -207,10 +207,10 @@ static int parseLabelAttribute(const char* filename, int line, const char* p, default: return error(filename, line, "属性Rにはサイズの指定が必要です。"); case 'W': - *pAttr |= RELTABLE; + *pAttr |= (lblmode)RELTABLE; break; case 'L': - *pAttr |= RELLONGTABLE; + *pAttr |= (lblmode)RELLONGTABLE; break; } break; diff --git a/src/main.c b/src/main.c index b985070..e5715e1 100644 --- a/src/main.c +++ b/src/main.c @@ -2,7 +2,7 @@ // メインルーチン // Copyright (C) 1989,1990 K.Abe, 1994 R.ShimiZu // All rights reserved. -// Copyright (C) 2024 TcbnErik +// Copyright (C) 2025 TcbnErik #include // PATH_MAX #include @@ -219,12 +219,12 @@ static void printTarget(char* str, int bits, int size, const TargetTable* tbl) { */ static void register_default_labels(void) { - regist_label(Dis.beginTEXT, DATLABEL | UNKNOWN); - regist_label(Dis.beginDATA, DATLABEL | UNKNOWN); - regist_label(Dis.beginBSS, DATLABEL | UNKNOWN); + regist_label(Dis.beginTEXT, DATLABEL | (lblmode)UNKNOWN); + regist_label(Dis.beginDATA, DATLABEL | (lblmode)UNKNOWN); + regist_label(Dis.beginBSS, DATLABEL | (lblmode)UNKNOWN); /* unregist されないように SYMLABEL を指定 */ - regist_label(Dis.LAST, DATLABEL | UNKNOWN | SYMLABEL); + regist_label(Dis.LAST, DATLABEL | SYMLABEL | (lblmode)UNKNOWN); } // データ領域の中からプログラム領域を探す diff --git a/src/search.c b/src/search.c index 3dfc7b6..a470bab 100644 --- a/src/search.c +++ b/src/search.c @@ -2,7 +2,7 @@ // 文字列判定 // Copyright (C) 1989,1990 K.Abe // All rights reserved. -// Copyright (C) 1997-2023 TcbnErik +// Copyright (C) 2025 TcbnErik #include #include @@ -15,7 +15,7 @@ static void foundstr(address pc) { charout('s'); - regist_label(pc, DATLABEL | STRING); + regist_label(pc, DATLABEL | (lblmode)STRING); } /* @@ -93,7 +93,7 @@ static int check_data_area(address pc, address nlabel, int str_min) { foundstr(pc); num_of_str++; while (depend_address(ltemp) && ltemp + 4 <= nlabel2) ltemp += 4; - regist_label(ltemp, DATLABEL | UNKNOWN); + regist_label(ltemp, DATLABEL | (lblmode)UNKNOWN); pc = ltemp; ltemp = MIN(nearadrs(pc), nlabel); } else diff --git a/src/symbol.c b/src/symbol.c index 0c65b47..917aae4 100644 --- a/src/symbol.c +++ b/src/symbol.c @@ -2,7 +2,7 @@ // シンボルネーム管理モジュール // Copyright (C) 1989,1990 K.Abe // All rights reserved. -// Copyright (C) 1997-2023 TcbnErik +// Copyright (C) 2025 TcbnErik #include "symbol.h" @@ -232,7 +232,7 @@ static void registerAddressSymbol(UWORD type, address adrs, codeptr name) { // 特定アドレスの初回時はラベルを登録する // ラベルファイル読み込み時はすでに登録されているかもしれないし、 // 登録されていない(ラベルファイルから記述が削除されていた)可能性もある。 - regist_label(adrs, DATLABEL | UNKNOWN | SYMLABEL); + regist_label(adrs, DATLABEL | SYMLABEL | (lblmode)UNKNOWN); } if (Dis.g) { @@ -389,8 +389,7 @@ symlist* symbol_search2(address adrs, int type) { if (symbolptr) { symlist* sym = &symbolptr->first; - while (sym->type != (UWORD)type && (sym = sym->next)) - ; + while (sym->type != (UWORD)type && (sym = sym->next)); return sym; } return NULL; diff --git a/src/table.c b/src/table.c index 743b46c..a8df5ce 100644 --- a/src/table.c +++ b/src/table.c @@ -2,7 +2,7 @@ // テーブル処理モジュール // Copyright (C) 1989,1990 K.Abe // All rights reserved. -// Copyright (C) 2024 TcbnErik +// Copyright (C) 2025 TcbnErik #include "table.h" @@ -233,7 +233,7 @@ static void interpret(table* table_ptr, const char* filename) { eprintfq("テーブルは" PRI_ADRS "-" PRI_ADRS "(%d個)と判断しました。\n", tabletop, pc, loop); - regist_label(pc, DATLABEL | ENDTABLE | UNKNOWN); + regist_label(pc, DATLABEL | ENDTABLE | (lblmode)UNKNOWN); if (table_ptr->loop == TIMES_AUTOMATIC || table_ptr->loop == TIMES_DECIDE_BY_BREAK) {