Z80アセンブラ

Javaで書かれたアセンブラがあったので、めも。
※vgmplay-MSXで使われていた。

https://bitbucket.org/grauw/glass
https://www.msx.org/forum/msx-talk/development/glass-z80-assembler?page=5

こっちは同じ人の書いてる vgmplay-msx
https://bitbucket.org/grauw/vgmplay-msx

8bitパソコンとWindows機でデータのやりとりって…

テープ機種の場合の面白い方法を知ったので、めも。

実機での動作テスト【X1でゼビウスを作る】
レトロゲーマーへの道~JODAN-DOSを手に入れろ!アゲイン

カセット・アダプタ

なるほど、この手があったか…って感じ。
リンクのアダプタはX1F(model10)で稼働実績あるようなので、これが良いのかもしれない。

MGSC

MGSDRV向けの mml->mgsコンパイラがgithubに公開されていたので、メモ。

>MGSC@github
https://github.com/digital-sound-antiques/mgsc

>MSXplay.js
>※こちらはmgs形式など、MSX向けサウンドドライバ向けプレーヤ(及び、コンパイラ)
http://digital-sound-antiques.github.io/msxplay-js/index.html

MAXで chiptuneシンセを作る

MAXパッチを構築することについて、いろいろ考察を含めて書かれたドキュメントを見つけたのでメモ。

>PhillPhelps-ChiptuneSynth.pdf
http://www.zenpho.co.uk/PhillPhelps-ChiptuneSynth.pdf

実機で聴くVGMカセット

めも。

>(FC/FC互換機用) 8BIT MUSIC POWER (8ビットミュージックパワー)
http://www.amazon.co.jp/dp/B018I0R4OS/

その後

 第二弾も出たし、CDが発売になっている…(´・ω・)
 CDは正直本末転倒な気もするけど、実機の音をいつでも聴けるのはメリットなのか。あと聴くだけと考えればCDの方が安いね…実機へのこだわりがすべてとも言える作品なんだけども…(´・ω・
)

>(FC/FC互換機用) 8BIT MUSIC POWER (8ビットミュージックパワー)Final
https://www.amazon.co.jp/dp/B01MQU3LW5

>8BIT MUSIC POWER (8ビットミュージックパワー)
https://www.amazon.co.jp/gp/aw/d/B01LW4AAA6/

chiptune 関連のサイト

なんとなくググって出てきた奴ら。
>vgm midi 投稿サイト
http://www.vgmusic.com/

>chiptuneコミュニティサイト
http://chipmusic.org/

>シンセ関連のニュースサイトのログ
http://www.synthtopia.com/content/tag/chiptune/

>ブラウザベースのSIDエミュレータ
http://www.igorski.nl/experiment/websid

>アーケードのコンパネ形態のMIDIコントローラ
http://www.pianocade.com/

>MIDI音源(NES,C64の音源エミュレータ)@kickstarter

>Famicompo PICO
http://bitpuritans.eu/compo/

[Cコンパイラ] I/OマップトI/Oへの対応

 sdcc利用のページに書かれていて思い出したので。。

 Z80には in, out命令というのがあります。
 以下のような書き方をしたりして、あたかもI/O専用のメモリがあるかのようにアクセスして、実際は外部チップへの入出力インターフェースからデータを出し入れする機能。


■SDCC
 C言語記述でI/OマップトI/Oへのアクセスができるディレクティブが実装されている…てことのようです。
 ※HITEC-C同様、inp, outp関数もあり。


■HITECH-C
 Standard Library Functions(STDIO)に、以下の記述は見つけました。

inp(port) Read port
outp(port, data) Write data to port

 I/Oアドレスの定義についての記述は、現状見当たらず。


■z88dk

 HITECH-Cと同様にライブラリ関数は見つけた。
 I/Oアドレスの定義についての記述は、現状見当たらず。

[Cコンパイラ] 関数への引数渡し

 C言語とアセンブリ言語の混在でコーディングする場合の話。

 基本的な流れをC言語で書きつつ、高速化やコンパクト化の為にアセンブリ言語を部分的に用いようとする時に、Cから呼び出す関数をアセンブリ言語で記述すると『どうやって引数を渡して、また戻り値を返すのか』という話が出ます。

 関数への引数渡しには規約がありますが、コンパイラごとにポリシーが違います。

 ※以下、調査毎に記載追加の予定..


■SDCC の場合

 スタックに積む方式。
 sdcc利用
 


■HITECH-C の場合

 スタックに積む方式。
 以下のサイトの『アセンブラ』の項を参照。
 MSX C Magazine HI-TECH C部屋
 HI-TECH Cを256倍(!?)使うドキュメント


■z88dk の場合

 スタックに積む方式。
 The Stack Frameの項を参照。

 『__FASTCALL__』という修飾子を使うことで、
 引数が1個だけの場合に限り(HLによる)レジスタ渡しができるようです。

[z88dk] S-OS対応について

 英語だし面倒そう…と敬遠していたのですが、
 2013.11.29以降のNightly buildsで対応されているということで、めも。

 http://www.retropc.net/ohishi/s-os/z88dk.htm

 Small-Cベースなので基本はサブセット版の仕様ということになると思いますが、それなりに現代仕様を取り入れている模様.

 基本的な注意点が記述されていました。

 なお現時点ではファイルI/Oなどは未実装です(標準がないので仕方ないですが)。使用できる表現、および他のオプションなどはWikiやインストールされているdocフォルダにあるドキュメントを参照して下さい。

[HI-TECH C] S-OSのサブルーチンを呼んでみる

 掲題の通り。
 実のところZ80の頃にC言語を使った経験もなくて、判らないところをだらだらコードを書いてみることにした。

 S-OSのサブルーチンは、レジスタに値を入れてコールするのが基本的なお作法なんですが、コード中にインライン・アセンブラを使う場合にやり取りのレジスタの使いまわし方が全然判らない。

 とりあえずメモリ経由でやり取りする形で書いてみた。

 久々にZ80環境弄るけど、C言語を使うには64KBは結構狭いなぁ…と感じました。
 呼び出しに専用関数を作るのでは無駄が多過ぎなので、なんか良い方法ないかと考え込む今日この頃。。

CP/M実行環境について

 CP/M Executer, CP/M Playerといったアプリが公開されている。
 このアプリを使うと、過去にCP/M用に公開されてきたプログラムをWindows上で実行できる。

 要は、CP/Mエミュレータです。

 Windowsがあれば、その上ではWindowsアプリが動く。
 では、このCP/M実行環境の場合は…というと、

 Windowsの上でCP/M実行用アプリが動き、その上でCP/Mのアプリが動く。

 イメージ的には、図のような感じ。

CPM実行環境イメージ

 CP/M実行用アプリ(CP/M実行環境)単体で見てみると、
 8bitCPUを積んだ仮想マシン上にロードされたOSという体をとっている。(インテル製8080がCP/MのメインターゲットCPU)

 Windows-PCがあり、その上でWindowsアプリが動くのと同じように…
 8bit-PCがあり、その上でCP/Mが動く。

CPMイメージ

 このような形態を、Windows上で仮想的に作っている。

 ファイルの方は…というと、Windowsのディスクに読み書きできるので、Windows上にありながらCP/M OSを使う感覚になっている。(間に1枚噛むわけだから、全く同じではないのだけれど。)

 最近のエミュレータのように専用のウィンドウが1枚開いて、その中で別のマシンを操作するという仕組みではない。(RCCP.EXEを併用すれば、コマンドプロンプトで別マシンを操作する形態をとれる。これはリモートで別マシンのshellを使う形と同じだけれども、真価はそこにはないと思う.)
 むしろコマンドの接頭子として “cpm ” を書き加えるだけで良いので、コマンドラインを使える人であればWindowsと別OSを行ったり来たりせずに済み、かえってラクちん。

 Windows-OSネイティブアプリだけで完全なクロス開発環境を作るならともかく、CP/Mの遺産を活用した現代の8bit開発環境としては、こういうのがない方が困る…という感じの環境だった。

>CP/M関連の情報サイト(英語)
http://www.seasip.demon.co.uk/Cpm/index.html