HI-TECH Cのインラインアセンブラの条件アセンブル

が、できないみたいだ。
いろいろやったけど全部エラー。
HI-TECH CでMSX-BASICのOS上で動くプログラムを作る方法は分かってテストプログラムも動作したが、条件アセンブルできないのではMSX-DOSとMSX-DISK-BASICでソースを分けないといけない。
それはしたくない。ひとつのソースで管理したい。
ソースを分けるとど片方のソースファイルを書き換えても、もう片方には反映されず、もう片方も書き換えればいいんだが二度手間になる。
そこでBDS C用に作った条件アセンブルプリプロセッサーのAAPPを試してみたがHI-TECH Cのインラインアセンブラの仕様には合わなくてエラーが出る。
AAPPのソースを少し書き換えれば済む話ではあるが、実はソースは間違って削除してしまってソースがないのだ。
最初からAAPPを作り直さないといけない話。
簡単なプログラムではあるが入れ子(ネスト)にも対応させてあって多少ややこしい。
CR3のHI-TECH C版はMSX-DISK-BASICに移植できるとは思いますが、その前にAAPPをいちから作り直そうと思います。
すぐにとりかかるかどうかは分からない。
気が向いたらやります。

HI-TECH Cで、MSX-BASICのBLOADファイルを作れた

作れないとあちこちに書いたけど、いろいろ調べてやってみたらできた。
分かったのは、置き換えないといけないのはランタイムルーチンは含まず、スタートアップルーチンだけだ。
BDS Cはランタイムルーチンを含んだスタートアップルーチンを置き換えないといけなかった。
(ソースファイルは同じひとつのもの)
そして、BDS Cはライブラリを設定を変えて再コンパイル、Cソースもオプションを変えて再コンパイルが必要だったが、HI-TECH Cはそれが必要ない。
MSX-BASICのプログラムやROM化までのプログラムを作る環境を整えるまでの労力はHI-TECH Cのほうがずいぶんと楽だ。
これだけ言うとHI-TECH Cのほうがすごく思えるがそうでもないかも知れない。
なぜなら、HI-TECH CでMSX-BASICに対応させるとprintfなどの標準ライブラリが使えなくなった。
ランタイムルーチンも書き換えたBDS Cではprintfやgetcharその他は使える。
(fopenなど使えないものもあるが。)
BDS Cはランタイムルーチンのソースも用意されて変更できるので書き換えればだが別のOSでも標準ライブラリがある程度使えるようになっている。
大変更しなくても、CP/Mシステムコールのジャンプアドレスの5番地を、MSX-BASICからMSX-DOSシステムコールを呼ぶジャンプアドレスのF37DHにEQU定義を変えるだけでprintfが使える。
それと同じことをHI-TECH Cでする方法が今のところ分からない。
標準ライブラリのソースを書き換えてコンパイルしてライブラリを作り直すしかないだろう。
必要な関数のみをリンクするようにするにはライブラリマネージャーも使わなければいけない。
やればおそらくできるだろうが面倒くさい。

CR3(落ち物ミニゲーム)+BDS C用MSXライブラリ

http://www.nabeta.tk/msx/cr3.html

バージョンアップしました。
MSXライブラリはMSX-DISK-BASICにも対応して、MSX-DOSがなくても動作するプログラムを作れるようになりました。
そして、CR3のソースは、asu ansi2krを使用することによりANSI C記述に変えました。
また、HI-TECH Cにも対応しました。
HI-TECH CでのMSX機能は自作しました。
HI-TECH CのMSX機能はライブラリ化せずCソースの中にC言語とZ80インラインアセンブラで書いています。
HI-TECH CのほうはMSX-DOSでMSX-DISK-BASICに対応しません。

add MSX BLOAD header tool for binary file

http://www.nabeta.tk/msx/bloadmake1.0.zip

MSXのBLOADファイルのヘッダをバイナリファイルに付けるプログラムを作りました。
一度作ってすぐ消してしまってまた作りました。
Windows版です。C++ Builderで作りました。
C言語ソース付きです。
デフォルトは読み込みアドレスと実行アドレスは8100H、
読み込みサイズはファイルサイズです。
値はオプションで任意に変更できます。
また、これから公開する予定のBDS CのMSX-BASIC環境の初期化ルーチンに対応させるためのオプションを持っています。

ANSI C to K&R converter for BDS C,MSX-C asu ansi2kr version up 1.2

add MSX-DOS2 version
Windows、CP/M、MSX-DOSに続きMSX-DOS2専用版も登場。
support BDS C and MSX-C
ANSI C to K&R C converter, asu ansi2kr for CP/M,MSX-DOS and for MSX-DOS2 download

ANSI C to K&R C converter, asu ansi2kr for Windows download

このソースはANSI Cで書かれてWindowsのC++ Builderでコンパイルしたものですが、
asu ansi2krで自身のソースを変換することにより、BDS CでもMSX-Cでもコンパイルできました。
つまり、K&RのはずのBDS CもMSX-Cもasu ansi2krさえあれば、ANSI Cにある程度対応したコンパイラとして使えるわけです。

やはりZ80のセルフコンパイラはBDS Cが最強だった。

ANSI CのソースをKR&Cのソースに変換するasu ansi2kr を開発中ですが、
Windows版だけではなくCP/M、MSX-DOS版も用意したいと思い、
BDS C V1.60、HI-TECH C(CP/M)、Ver 3.90、MSX-C Ver 1.2でもコンパイルしてみたんですが
MSX-Cは論外のような感じ。
式を分解しないとエラーになるし、関数を小さく分けないとエラーになる。
関数名は6文字までしか区別できないので関数名も短く変えまくりました。
それらをやってコンパイルできるところまで持っていっても生成したバイナリは正しく動作しなかった。
後での追記です、ソースの先頭に#pragma noregaloを書いて且つ MSX-Cのcfに、-t オプションを付けたら正しく動作しました。
#pragma noregaloとcfの-tオプションなしのMSX-Cは爆弾抱えたような状態で使うべきではないですね。
大きなソース修正が必要でしたが一応コンパイルはできたのでなんとか使えないこともないです。
MSXエミュレーターのturboRモードでもMSX-Cは遅いです。
HI-TECH Cはasu ansi2krの最初のバージョンはコンパイルできたんですが処理を追加して少しソースが大きくなったら、”$TMP1.$$$:5561: Too many temporary labels”とエラーが出てコンパイルできなくなった。
ソースを分ければいいんだろうけども、BDS CでコンパイルできているのにわざわざHI-TECH Cのためだけにそんなことはしたくない。

MSX-Cは論外と最初思いましたが、生成したファイルサイズがすごく小さいものができました。
BDS Cよりも5000バイトぐらい小さかった。
今はもうHI-TECH Cではコンパイルできなくなりましたが、コンパイルできたVer 1.0ではBDS CよりもHI-TECH Cのほうが2000バイトぐらいファイルサイズが大きくなりました。
メモリが少ないMSXではファイルサイズは結構重要なんです。
ファイルサイズが大きいということはそれだけ使えるメモリが少ないということです。

なくしたプログラムの作り直し

今からDOS窓のDELコマンドのミスで削除してしまった自作プログラムを最初から作り直します。
これをしないことには先に進めない。
完成してあまり間があいてないのに削除してしまったのは初めてかも知れない。

やりはじめたけども、いちど作って完成したものをまたはじめから作り直すとか
ばかばかしい感が半端ないです。
やる気もあまり出ないです。

追記、
二回目作が完成しました。
しかし、他にもまだソースを間違って削除したものが残っています。

ANSI C to K&R C converter for CP/M,MSX-DOS

Update Ver 1.2 18 Mar 2017
add MSX-DOS2 version
バージョンアップしてリンクも書き換えました。
MSX-DOS2専用版も登場。
ANSI C to K&R C converter, asu ansi2kr for CP/M,MSX-DOS and for MSX-DOS2 download

ANSI C to K&R C converter, asu ansi2kr for Windows download

Windows版に続いて、CP/M,MSX-DOS版も公開しました。
OSを超えて動くところがC言語のすごいところです。

ZCASMB. BDS C’s ZCASM for Windows

including file Version up 18 Mar 2017
but zcasmb same version.
同梱している関連ソフトのバージョンアップにより中身を替えました。
zcasmb自体は変更していません。
http://www.nabeta.tk/msx/zcasmb1.6a.zip

BDS Cでアセンブリ言語とのリンクをするためのプリプロセッサーのZCASMをWindowsに移植しました。
名前はZCASMBに変えました。
C++ Builderで、ANSI C記述で書きました。
ソース込みです。
ZCASMのバグも修正してほんの少しだけ機能も強化しています。
セットで使うであろう関連ソフトのasu ihex2bin.exe と、aapp.exeと、asu ansi2krも同梱しています。
別途フリーのWindows版のZ80アセンブラのzmac があるといいです。