m@3記念館 QA 2026/2/6改

[このサイト何]
8~32bitコンピュータの記念館として収集物の記念撮影した画像を上げてます。
(元は博物館でも作ろうかと集めたのですが、10年ほったらかした挙句故障多発して止めました。)
実用性を重視する趣味により初代とかよりFDD付き後期モデルに偏ってます。
あまり奇麗な画像ではないですがご容赦。

ついででコンピュータで何か作って動かそうというソフト研究実験室になってます。
(アセンブラでの最適化は先人に任せてCでどこまで出来るかという趣旨です。)
→とか言ってますが割と適当です。(2026/2/1)

[動かない/バグってる]
PC-88VA以外の16/32bit機及びMSXの物は動作確認してる物もありますが、後は手間と都合により実機では確認してません。(修正前提でソースを出しています。)

FM TOWNSのは2M以上V2.1L20以降で起動します。X68000も2Mで動くはず。PC-88はfiles=0にして下さい。

[ソース]
あえて清書してません。(AS IS)

[バイナリが無い]
主にC言語関係でGPLでなくてMITで配布できるか色々検討して、問題ないと思われるもの含めていったん削除してあります。
付けている物は恐らく問題ないとの判断から。(今後消す可能性はあります。)
各ライブラリの著作権は各製作者にあります。

昔ならフリーソフトと書くだけで済んでいたのですが、今はライセンスを意識しなければいけない。時代の変化です。

[技術資料]
大体は図書館やネットにあります。
なお日高さんのページには氏の本の正誤表があります。

[BDS-CとSDCCとz88dkどれがいいですか]
全ては試してないので何とも。どれが速いのかも知りません。
SDCCはz88dkにパッチ当ててZSDCCとして取り込まれてます。(Winでは別配布のパッチでないとうまく動かなかった→今はそうでもない?)
SCCZ80より速いけど最適化に癖があったりして動かすのに一苦労します。MSX-BASICから呼ぶとexit(0)しないとSyntax Errorになるのは直ったらしい。

SCCZ80とZSDCCではスタックに積む引数の順番が標準では逆です。
癖と言うかBIOSコール時にIXレジスタ退避してないから変数が化けてたとか、みたく。

(LSI C-80よりSDCCやCLANGのがLSI Cメーカーの商品Webの再帰問題は速い?)

SDCC4.2.0で引数のレジスタ渡しが出来るようなので調査中。
→ZSDCCではオプション --sdcccall1を付ける…がライブラリ(乗除算も?)が対応してないので駄目。--sdcccall0だと引数をレジスタとスタック両方に積むが、ドキュメントに無いのでスタックだけ見た方がいいと思われる。1だとレジスタだけになる(使用されるレジスタも一部違う。戻り値も16bitではhlからdeになる)。引数のある関数ごとに__sdcccall(1)付けるしかない。
本家のドキュメントでは1が標準とあるのでZではあえて0にしてあると思われる。

[後期PC-88のキーボードのタイプ、HC-95の本体のタイプ]
探せば出てきます。

[HC-90/95、FM77AV40SXのD-Sub25ピンやHX-34等のRGBピン配置]
探せば出てきます。

[X1turboZのロゴの色の組み合わせ]
1~3全部違うらしい。

[無印X1とかファミコンとか割り込みじゃなくポーリングでBGM鳴ってるんですか]
らしいですね。

[gcc6809の通し方]
ビルドに必要なパッケージ全部入れて、ちゃんとビルドできるバージョン(Cygwin32なら4_3_branchとか)を解凍してbuild-6809からmake everythingする。
改行コードの問題、GCCのバージョンの互換性、カレントフォルダのパスもクリアしておく。
crt0.Sが何故かフォルダ名で誤生成されたら、フォルダに直してまっさらからもう一回。
終わったらcrt0.Sをmain呼ぶだけにいじり、crt0.oを生成。先頭番地を指定できるようアセンブラとリンカをわざわざ通すようにスクリプトを書く
インラインアセンブラの書式とラベル(行頭に_とか入れないとno headerとか出る)も直す。あとは先頭番地から実行できます。
なおnewlibの生成はできず?。tarballも間違ってました。libc.a欲しければgcc6809-CoCoが参考になります。

gcc6809 CoCoで探せばCygwin用バイナリがあるらしい。今はWSL2/Ubuntuで.debがある(後述)。

4_3_branchをMSYS2でビルドする場合。MINGWでなくMSYS2 MSYSを起動。makefile内のSudoを潰す。zlib1.dllが無いかもしれないのでどうにかする。上手く行けばパス通してコマンドプロンプトからも使えます。

[CMOCって何]
6809のCライクコンパイラ。動かすまで難解なgcc6809に代わる物かも。ただWin版はうまく動かなかったのでCygwin等でmakeする必要あり
BASICからだとスタートアップが動かないので逆アセンブラした結果、mainの実行番地を直接呼んでます。アセンブラ・リンカ通せばいいのかもしれないけど、投げた
ビルド前にcrt.asmをいじっておくらしい。やり方は特に書かない。0.1.58はgcc6809より遅かったけど0.1.81は幾らか速くなった。
(UbuntuにPPA通した後sudo apt-get install cmocで入るサイトがあります。ただしスタートアップは別にリンクしないと駄目。)

[FM TOWNS HR等の電源が直らない]
トランジスタ周りの抵抗とかやられてるのかも。壊れるのはコンデンサだけでないのです。ATX化するしかないかも。電源修理は下手すると失明するので注意。

[X68030 compact等の音量が直らない]
オペアンプ周りのスルーホールとかやられてるのかも。壊れるのはコンデンサだけでないのです。-12Vも出てるか見る。

[gcc-ia16がWindowsでビルドできない]
WSL2入れてUbuntu版を使う。これで98や88VAが試せる。
→build-gccと言うツールがあるらしいが未確認。(2026/2/1)

[gcc-ia16でI/Oポートを叩きたい]
libi86-ia16-elfをsudo apt-get installで入れて(解説には書いてない)、dos.hを#includeしてoutportb(,)/inportb()関数を使う。
-li86でリンクできる。#define _BORLANDC_SOURCEしないとWarning出る。
メモリモデルはtiny/small/mediumのようです。
何か.EXEで終了後ディスク読みに行けなかったりするので調査中。

WatcomCやDigitalMarsCの方が速いか?→-O2で最適化してみたらどっこい。

[USBセガサターンパッドが動かない・おかしい]
ATARI仕様ではなくてメガドライブ6ボタンパッド+CPA001やアナログパッドを選択してみて下さい。

[X1のDMA]
X1 turbo DMAで出てくるBDS Cのページ、DMAのリセットコマンドはC0ではなくてC3です。

[LSX-Dodgers]
z88dkではMSX-DOS形式ではなくて+cpmでないと駄目らしい。
PC-88版で何故かALUが効かず暴走する。→スタックポインタがOS側でC000H以降になってしまってるため。I/O 35HでVRAM選択するとおかしくなる。無理矢理スタックポインタを変更しても変数がおかしくなる。→VRAM選択中はスタックをいじらないことで解決。
似非DOSforMSXってのもある。メモリマッパ対応ではないようなのでMGSDRVが常駐できなかった(プレイヤーでの再生はできる)。

[CSCP]
77AVのDOSモード効いてない気がする。CSCPのMSX2Pは横スクロールしないしDOS1/2切り替えスイッチ無い。PC-6601は何処へ。

[8ビット機のグラフィックツール]
PC-88はPUT@/GET@で配列とやりとりしてそれ以上はマシン語で、PC-98はDEFSEG=でプレーン指定してBLOAD/BSAVEしてた時代。MSX2はBLOAD/BSAVE,Sで行けましたが。
→作りかけだったBASICのキャラクタエディタを手直して公開しました。

[TOWNS-gcc クロスコンパイル環境]
試したところFarポインタが無いのでVRAMアクセスに関数でひたすら書くしかない。サウンドドライバさえどうにかなれば。
gccが古い版らしく__attribute__((interrupt));は逆立ちしてもありません。

[xdev68Kのビルド]
CF-SZ5では出来なかった。CF-QV1の方で構築して持ってきた。カーソルがOFFにならない。→B_CUROFF()の後にESCシーケンスで画面クリアしてたため。

[elf2X68k]
インラインアセンブラはレジスタ名に%つける。pc相対アドレスは絶対アドレスに直せば一応通る(アドレスが離れすぎる?)。
→さらに%%にするとレジスタ名を勝手に置き換えなくなる。なお-O2だとインラインアセンブラをラベルごと展開して勝手に重複エラーになったりする(-O1にする)。(2026/2/1)

[CLANGサンプルの改訂版]
z88dkで+MSXしようとするとeZ80-CLANGではこけます。エラーの該当箇所を削れば通ります。
またはこうするらしい。(2025/12/18)
#define MSX2_SUBTYPE (*(volatile unsigned char *)0x2d)

インライン展開させたくない時は関数名プロトタイプの後に__attribute__((noinline));を付けて下さい。(gccと同じ)

ez80-CLANGでchar型の演算に失敗するようです。またlong型使うとリンクが通らないz88dkの版が出てるようです。(2025/7/4)
→リンクが通らないのはz88dk\lib\clibs\z80_crt0.libの問題らしい。
z88dk\libsrc\_DEVELOPMENT\l\clang.lstへの__ldivs.asmの記入漏れ。
signed char用の__bdivsはそもそも無いらしい。
演算がおかしいのは_bsh*.asmのループからdec bが抜けているからか。
掛け算使わないで足し算で強行するなら変数にvolatileつけるといいらしい。(2025/7/6)
→ライブラリが未完成みたいなので対応待ち。(2026/2/1)

[他]
メモリマップドI/Oやワークエリアを参照するにはポインタ変数を使うのではなくて#define pointer ((volatile unsigned char *)0x0000)のようにマクロ定義した方がメモリが小さくなります。(修正は当面見送ります)constともまた違うらしい。

WSL2/Ubuntu上にgcc-ia16/elf2X68k/gcc6809/gcc6502/amiga-gcc(旧版)を何とか構築できました。ただ今後はLLVM-CLANGの時代かもしれず(何年後だ)。
6502はcc65が必要。C64用にコンパイルすると文字列を小文字にしないとおかしい。
6809のdebのはPPAを通した後sudo apt-get install gcc6809で入りますが、アセンブラ・リンカ等の書式が違うので書き直しが必要。(レジスタ変数bの挙動もおかしい。bでなくてdにする必要あり/例をMAP表示に追加しました)
→前述のとおり旧版4_3_blanchがMSYS2 MSYSでコンパイルできました。(2025/12/18)
AMIGAのは内容古くて繋がらないサイトがあるのとgitがhttpsでないと通らないことがあるのと直接落としてあれば入れなくていい物があるので修正が必要。FD起動アプリ作るには色々サンプルの修正が必要。
→現在のWindows(MSYS2)版を入れてみました。(2025/12/18)
→68020以上用みたくて68000向けにしようとすると色々問題出ます。
elf2X68kはmake内のファイル名を小文字に統一する等の修正がコンパイル時に必要なこともあり。
→MINGW64版がコマンドプロンプトで動きます。(2025/12/18)


C64/AMIGAはスプライトマルチプレクサー(ダブラー)考えないと、というところで中断。
→(使わないで済む)PlusTaker2と言うゲームを作りました。(2026/2/1)

Ubuntuは環境の更新と容量不足で消してしまいました。(2026/2/1)→一部復活させました。(2026/2/6)

[PC-98のWin2000/Win98マルチブート下でWin98側が起動しなくなった]
IO.SYSをWINBOOT.SYSにリネームしてコピーしてみてください。

[llvm-mc6809のビルド]
Ubuntuからgcc抜いてClangで通った。未完成。
→新版を同じ環境でCmakeしようとしたら途中でユーザーが停止させたになってその後WSLごと落ちた。(2025/6/27)
→メモリ不足が原因。.wslconfigでmemory=12GB、swap=8GB以上にいじった上で、ninja -j1で再開する。なおClangは環境変数CC/CXXで指定できる。でも絶賛未完成。あと、素だと70GB位持っていかれます。(2026/2/6)

[X68000のBG面はラスタースクロールできないの]
InsideX68000のミスでXとYのレジスタが逆になってます。

[最近のz88dk]
ZSDCCの昔のソースとか持ってきてコンパイルするとバグったりします。普通に書いてもそうかも。関数呼び出し規約の変更とかあってライブラリと整合性が取れてないのかもしれない。(2025/7/5)
→ZSDCCのバージョンが4.4.0から4.5.0に変わったあたりで何かあった?(2025/7/6)
→オプションに --sdcccall0を入れれば回避可能らしい。(2025/7/6)
→それだけでは済まないっぽいので4.4.0を使ってください。(2025/7/9)
→修正されて正しく生成されることを確認。(2025/12/16)

[TOWNS-gccクロスコンパイル環境でDJGPP 12.2.0を使いたい](2026/2/1)
-Sでアセンブラファイルを出力し、sedに通して色々削ります。
sed -i 's/\t\.section\s\+//' $*.s
sed -i 's/\.lcomm \([^,]*\),\([^,]*\),[0-9]*/\.lcomm \1, \2/' $*.s
あとは「元々の」as以下に通せばいいです。ヘッダも元々のをインクルードしますが、ワーニングは出ます。

[戻]