2025-06-05
かわくだりゲームをROM化してみます。MSX BASICのプログラムをROM化する手順に従い、MSX BASIC版のかわくだりゲームをBSAVEします。
(参考、3章 カートリッジソフトの作成法 - MSX Datapack wiki化計画

BSAVE(バイナリセーブ)は、指定した範囲のメモリをバイナリデータとして保存するコマンドで、開始アドレス、終了アドレスに加え、実行アドレスを指定することで、BLOAD時に実行することが可能です。MSX BASICコンパイラ「BACON」でも使われていました。


「BSAVE」

まず、BSAVE形式を扱うライブラリをつくっておきます。


「bsave2bin」
src on GitHub
続いて、BSAVEを使って、ブラウザ上で簡単に使えるツールにしました。HTMLで機能的なところをつくり、CSSはChatGPTにMSX風でいい感じに作ってもらったものを使っています。


ROMファイルで動きました!かわくだりゲームROMカセットにもできるはず!


「bsave2bin on GitHub」

コマンドラインから使う方法も記述してあります。ESモジュールを使ってどんどん楽しましょう!

2025-06-04
ZMA版に続き、MSX BASICで書いた「かわくだりゲーム」MSX BASIC COMPILER「BACON」を使って、マシン語化して動かしてみました。


見た目ではわからない、MSX BASIC版をマシン語にコンパイルした「かわくだりゲーム


「IchigoJam/kawakudari_bacon_msx」

ソースコードや、動かし方はGitHubにアップしてあります。


BACONへも使用方法を追記してプルリクしてみました。


「zma_doc.md」

マクロやR800命令対応がうれしいZ80アセンブラ、ZMAのドキュメントをPDFからスマホでも読みやすい、Markdown形式に手変換!マージいただきました!

コンピューターの気持ちが分かる、マシン語のススメ。

links
- Z80アセンブラ「zma」でつくる「かわくだりゲーム」
- 文杉の中学3年生向けIoT電子工作&プログラミング入門Day2、MSX BASIC版かわくだりゲーム
- はじめてのマシン語 - IchigoJamではじめるArmマシン語その1

2025-06-03
再燃する、MSX BASIC!現代のBASICの在り方を模索中。

MSX-BASICコンパイラ BACON」を動かす準備として、このコンパイラが出力するアセンブリ言語が対応する「Z80/R800クロスアセンブラ zma」を使ってみました。

C言語で書かれた「ZMA」のコンパイルは、シンプルなテキスト処理。Linux用のコンパイル環境をそのまま使って、macOSでもアセンブラ「zma」をコンパイルすることができました。

cd src/linux make ls -l zma


できた、zmaにパスを通して準備はOK。テストで「MIX」と表示するコード。

アセンブラ用アセンブリ言語で書かれた「かわくだりゲーム」をZMA用に修正しました。

org 0x4000 dw 0x4241, 0x4010, 0, 0, 0, 0, 0, 0 main: ; cls call cls ; a = 15 ld a, 15 push af loop_game: ; lc a, 5 pop af ld h, a ld l, 5 push af call locate ; print "O" ;ld a, 79 ; O ld a, 236 ; neko call putchar ; lc rnd(32)+1,24 ld a, r ; random and 31 inc a ld h, a ld l, 24 call locate ; print "*" ld a, '*' call putchar call scrolldown ; wait 6 ld a, 6 call wait ; a = a - btn(7) + btn(3) call inkey cp 3 jr nz, skip1 pop af inc a push af jr skip3 skip1: cp 7 jr nz, skip3 pop af dec a push af skip3: ; if scr(a, 5)!=asc("*") goto loop_game pop af ld h, a ld l, 5 push af call scr cp '*' jr nz, loop_game ; wait 200 ld a, 200 call wait ; run jr main inkey: ; a: 1=up, 2=right up, 3=right, 4=right down, 5=down, 6=left down, 7=left, 8=left up ld a, 0 call 0x00D5 ret scr: ; h: X, l: y dec h dec l ld d, h ld e, l ld c, l ld b, 0 ; bc <<= 5 SLA C RL B SLA C RL B SLA C RL B SLA C RL B SLA C RL B ; bc += d ld a, c add a, d ld c, a jp nc, scr_skip inc b scr_skip: ld hl, 0x1800 add hl, bc call 0x004A ret scrolldown: ld h, 1 ld l, 24 call locate ld a, 10; enter call putchar ld a, 13; enter call putchar ret wait: ; count: a ld b, 255 wait_loop: nop nop nop nop nop nop nop nop nop nop djnz wait_loop dec a or a jr nz, wait ret locate: ; H: x, L: y call 0x00C6 ; POSIT(カーソル表示と位置制御に関わる) ret putchar: ; A: char call 0x00A2 ; CHPUT ret width32: ld a, 32 ;WIDTH=32 ld [0xF3AF], a ret cls: call width32 ; width 32 ld a, 1 call 0x005F ; CHGMOD - スクリーンモード切替 call 0x00C3 ; CLS - 画面全体をクリア ret

疑似命令も先頭に . を付けないスタイルで、アドレスの表記に () ではなく [] を使いますが、大きな違いはありません。マクロを定義できて便利そう!日本製の比較的新しいC言語のオープンソースなので、動作の解析もしやすそう!


「IchigoJam/kawakudari_zma_msx」

Z80のマシン語に対応するいろんなちょっとずつ方言があるアセンブリ言語の違いを見てみるのも楽しいですね。

links
- DenoだけでOK、Z80/ASM80で開発しMIXでデバッグするMSX用ROM開発
- 文杉の中学3年生向けIoT電子工作&プログラミング入門Day2、MSX BASIC版かわくだりゲーム

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS