--- nono/util/iasm/iasm.cpp 2026/04/29 17:04:28 1.1.1.1 +++ nono/util/iasm/iasm.cpp 2026/04/29 17:05:16 1.1.1.3 @@ -5,39 +5,14 @@ // 簡易アセンブラ // -#include -#include -#include +#include "header.h" +#include #include -#include -#include #include #include #include #include "iasm.h" -// OSX で iconv はちょっと置いておく -#if !defined(__APPLE__) -#define IASM_USE_iconv -#endif - -#if defined(IASM_USE_iconv) -#include -#elif defined(IASM_USE_wxWidgets) -#include -#include -#endif - -/* - * iconv(3) の第2引数は本来は char** だが (Linux)、 - * 歴史的経緯により const char** な環境もある (NetBSD、FreeBSD)。 - */ -#if defined(IASM_ICONV_CONST) -typedef const char **iconv_src_t; -#else -typedef char **iconv_src_t; -#endif - #define BUFSIZE (1024) #define D_INOUT (0x0001) /* 入出力のみ */ @@ -527,20 +502,9 @@ const char *iocscall[] = { void usage(const char *progname) { -#if defined(_WIN32) - const char *conv = "Win32"; -#elif defined(IASM_USE_iconv) - const char *conv = "iconv"; -#elif defined(IASM_USE_wxWidgets) - const char *conv = "wxWidgets"; -#else - const char *conv = "none"; -#endif - fprintf(stderr, "usage: %s [-d] [-f ] []\n", progname); fprintf(stderr, " -f output format: c, binary\n"); - fprintf(stderr, "compile option: charset conversion '%s'\n", conv); exit(1); } @@ -1733,7 +1697,7 @@ get_reglist(String& inbuf, uint16_t& lis // 単独もしくは範囲指定の1つ目のレジスタ指定 list |= (1 << num); state = NUM1; - } else { + } else { // 範囲指定の2つ目のレジスタ for (int i = prevnum; i <= num; i++) { list |= (1 << i); @@ -1830,7 +1794,11 @@ output_ea(EA& ea) output_l(ea.val); break; case EA_IMMEDIATE: - output_bin(ea.val, ea.size); + if (ea.size == 4) { + output_l(ea.val); + } else { + output_w(ea.val); + } break; default: /* それ以外は何もしない */ @@ -2319,26 +2287,6 @@ parse_string(String& src) String convert_charset(String& src) { -#if defined(_WIN32) - /* - * Win32 API を使う - */ - int size; - WCHAR wsrc[BUFSIZE]; - char mdst[BUFSIZE]; - - /* まず(UTF-8の)ワイド文字列に変換 */ - size = MultiByteToWideChar(CP_UTF8, 0, src.c_str(), -1, NULL, 0); - MultiByteToWideChar(CP_UTF8, 0, src.c_str(), -1, wsrc, size); - - /* Shift_JIS のマルチバイト文字に変換 */ - size = WideCharToMultiByte(932, 0, wsrc, -1, NULL, 0, 0, NULL); - WideCharToMultiByte(932, 0, wsrc, -1, mdst, size, 0, NULL); - - String dst(mdst); - return dst; - -#elif defined(IASM_USE_iconv) /* * iconv(3) を使う */ @@ -2360,7 +2308,7 @@ convert_charset(String& src) memset(dstbuf, 0, sizeof(dstbuf)); dstptr = dstbuf; dstsize = sizeof(dstbuf); - r = iconv(cd, (iconv_src_t)&srcptr, &srcsize, &dstptr, &dstsize); + r = ICONV(cd, &srcptr, &srcsize, &dstptr, &dstsize); if (r == -1) { error("cannot conversion string: %s\n", srcptr); } @@ -2372,26 +2320,6 @@ convert_charset(String& src) String dst(dstbuf); return dst; - -#elif defined(IASM_USE_wxWidgets) - /* - * wxWidgets の wxCSConv を使う - */ - char buf[src.size() * 2]; /* 適当 */ - - wxString wstr(src.c_str(), wxConvUTF8); - wxCSConv conv(wxT("SHIFT_JIS")); - conv.WC2MB(buf, wstr.wc_str(), sizeof(buf)); - - String dst(buf); - return dst; - -#else - /* - * 文字コード変換ライブラリがない場合は何もしない - */ - return src; -#endif } /* デバッグ表示 (ap版) */ @@ -2413,7 +2341,7 @@ DPRINTN(int flag, const char *fmt, ...) DPRINTV(flag, fmt, ap); va_end(ap); } - + /* デバッグ表示 (行頭のマーク付き) */ void DPRINTF(int flag, const char *fmt, ...)