福野泰介の一日一創 - create every day

はじめてパソコンに触れた8才、カセットテープに保存できると知り、自宅のダブルラジカセに接続するも、一度も読み込み(CLOAD)に成功できなかったあの頃。33年後、Macから自作CMTケーブルで接続して、初成功!

なんちゃってカンサスシティエンコードでWebAudioを復習しつつ、仕様書片手に本格実装!
2章 カセット・インターフェイス - テクハンwiki、2400bpsのヘッダ構成は4800Hzの誤記)


KansasEncoder for MSX
BASIC中間コード、BSAVE形式のバイナリ、ASCIIコードと3種類ある内、ASCIIを実装。
テキストエリア内に書いたプログラムをカンザス生まれのカンサスシティエンコードMSX版で再生!
"PLAY"ボタンを押すと、ピーーーー、ギョロギョロギョロっと懐かしの音がします。

CMTケーブルをつないだMSX上で、RUN"CAS:" と動かし、"PLAY"、Found: TEST と表示され、Ok が出れば、読み込み成功!2400ボーにする場合は、SCREEN,,,2 と設定しましょう。


自作のCMTケーブル(CMT変換器)
* CMT = Cassette Magnetic Tape、カセットマグネティックテープ、カセット磁気テープ、いわゆるテープやカセット、MSXにはスロットに刺すカセットもあるのでテープとカートリッジと呼び分ける

端子は8ピンのDINですが、使っている信号線は下3ピンのみなので、MIDI用の5ピンのDINソケットや、MIDIケーブルがそのまま使えます! (プラグ80円ソケット70円基板取付用ソケット60円DIP化ソケットキット180円ステレオミニジャック50円ステレオミニジャックDIP化キット150円 - 秋月電子)

ソケット側を裏から見て、一番下がGND、右下がMacのスピーカー端子へ接続するMSXの入力側端子(左下が出力端子)。ステレオミニジャックと直結でOK!便利なので、IchigoJamでも対応したい。


CMTとシリアル、2系統でつながるMacとMSX。今回作ったCMTケーブルで、ジョイスティックポートを使ったシリアル通信用ドライバを書き込み、より高速で柔軟なクロス開発環境が完成!

福井高専入学時には、ポケコン用アプリのクロス開発環境のホストとして活躍したMSX、今度はターゲットに!(最終機種、MSXturboRがカセットインターフェイスを廃止なのは惜しい)

かつてはたどり着けなかったパソコンの深い世界。ネットがある今なら、サクサク!
思い出のMSX1パソコン、CANON V-10のジョイスティックポートを経由して、IchigoJamからプログラムを送り込むことに成功!


左はIchigoJamの画面、右はMSXの画面(COLOR15,1,1で色変更)
IchigoJam側で打ち込んだ文字をOUT1とOUT2を使って、SPI非同期通信。MSX BASICで書いた受信プログラムで受け取ったデータを表示しつつ、マシン語用に確保したメモリに書き込めた。


どこかで100円で購入したD-Sub9ピンのオスケーブルを、ブレッドボードで使えるように準備。
テスターで導通チェックしながら、1から9番ピンまで並べます。(シールドも9番のGNDにはんだづけしましたが、どうだろう)


ピンはどちらでも使えるように、長ピンソケットをはんだづけしてできあがり!


ジョイスティックポート、MSX BASICのSTRIG命令を使ってボタンの押し下げを取得できます。 8番ピンを6番や7番へショートすれば、押したなることを確認できます。確認用のMSX BASICプログラムはこれだけ!

10 ?STRIG(1),STRIG(3):GOTO 10

続いて、IchigoJamとの接続です。


IchigoJamのOUT1とOUT2を、6番、7番ピンへ接続。9番ピンのGNDの接続ついでに、5番ピンの5VをIchigoJam用に拝借!

IchigoJamから確認してみましょう

OUT1,1 OUT1,0 OUT2,1 OUT2,0


無事、IchigoJamからMSXへ伝わりました!
(IchigoJam同士でOUT1からIN1へ接続しても遊べます)

あとは、この2本を使って送受信プログラムをつくるだけ。最初のMSX BASIC上のプログラムは手で打ち込まないといけないので、できるだけ短く実装できる、通信方式に同期式通信であるSPIを採用。

IchigoJam用送信プログラム

10 OUT1,1:OUT2,1:W=2 20 K=INKEY():IF!KCONT 30 FORI=7TO0STEP-1:OUT2,~K>>I&1:OUT1,0:WAITW:OUT1,1:WAITW:NEXT 40 GOTO 20

MSX BASIC用受信プログラム

10 CLEAR200,&HCFFF:DEFINTA-Z:A=&HD000 20 N=0:B=128 30 IF NOT STRIG(1) THEN 30 40 N=N+(STRIG(3)AND1)*B 50 IF STRIG(1) THEN 50 60 B=B/2:IF B THEN 30 70 ?CHR$(N); 80 POKE A,N:A=A+1:GOTO 20

BASICのプログラムも、中間コードをバイナリ#D000以降に受け取ったデータを、#8000や#C000などのBASICプログラム領域にコピーすればOK!

Z80用のCコンパイラ&アセンブラなどのツールキット「Z88DK」もいい感じに動いたので、いろいろ捗りそうです。

STICKコマンドを含めて、BASICでも最大6つの信号を受け取れるので、MSXをIchigoJamから音源としてとして使う、PanCake的にグラフィックボード的に使うなどもありですね! 身近なコンピューター、いろいろつないで遊んでみましょう!

はじめて買ってもらったパソコン「MSX CANON V-10」で、IchigoJamが動いた!?

見慣れた、黒背景白文字、LED1で、CAPSLOCKのLEDがつく!

LED1

IchigoJamが誕生した2014年からの伝統、はじめのいっぽは、LED1!
出荷はなんと、5万台!国内外、多くのこどもたちにお届けていただき感謝です!

こちらが、MSXでIchigoJam風のプログラム。
IchigoJam BASIC がわかる人にはなんとなく読めるはず。

10 COLOR 15,0,0 15 CLEAR 200,&HCFFF 20 KEY OFF:CLS 30 PRINT"IchigoJam BASIC 1.3 for MSX?":PRINT"OK" 45 C$="" 50 IF T MOD 30=0 THEN LOCATE,,T/10MOD2 60 T=T+1:K$=INKEY$:IF K$="" GOTO 50 75 PRINTK$;:IF ASC(K$)<>13 THEN C$=C$+K$:GOTO 60ELSEPRINT 85 IF C$="LED1" THEN N=0:GOSUB100 86 IF C$="LED0" THEN N=1:GOSUB100 89 PRINT"OK":GOTO45 100 A$="3E01CD3201C9":FORI=0TO5:POKE&HD000+I,VAL("&H"+MID$(A$,I*2+1,2)):NEXT 110 POKE&HD001,N:DEFUSR=&HD000:A=USR(0):RETURN

CAPSLOCKを光らせるためにZ80マシン語を使用!
完全移植してしまうのもおもしろいかもしれません。


MSXフォントではこちら。

実装のポイント
- IchigoJam ver 1.3 で実装したカーソルスイッチ(LOCATE,,1)を使ってIchigoJam風
- LED1でつけるCAPSLOCKのLED、BIOSのCHGCAP(0132H)を使用(Aの説明逆?)
- LD A,1 / CALL 0132H / RET をZ80マシン語に変換(不思議とほぼ覚えてる)
- マシン語用にCLEARでメモリ確保(RAM16KBのBASICはC000スタートと判明
- MID$でマシン語書き込みテクニック(POKEの連続書き込みができるIchigoJamは便利!)
- マシン語の呼び出しは、DEFUSRしてからUSR!(IchigoJamのマシン語では、直接USR!)


MSX CANON V-10 表面、カートリッジにつなぐ何かつくるのもおもしろいですね。
とりあえず、Macと接続してクロス開発できたら便利そう。


MSX CANON V-10 裏面、カセットのインターフェイス!
コンポジットのビデオ出力はいまでも生きてます。


MSX CANON V-10 前面、ジョイスッティックポート x2


MSX CANON V-10 左面、2つカートリッジがさせるとは今、気が付きました。


MSX CANON V-10 背面、スロットからとれる電流表記あり。今なら意味がわかります。


1984年製のMSX、33年前に買ってもらったパソコンと同型、まだ立派に動いてくれました!
定価54,800円! RAM16KB

MSX魂を込めた、IchigoJam、これからも多くのこどもたちにプログラミングのきっかけ届けます!

本日、鯖江Hana道場にて、感謝の気持ちを込みた、ひみつのプレゼント!
IchigoJam生誕祭(5才の誕生日)
→ ひみつのこたえは「イチゴ焼!

links
- IchigoJam5才の誕生日!【IchigoJam生誕祭】: Hana道場
- IchigoJam 5th Annivarsary | PCN プログラミング クラブ ネットワーク
- IchigoCake BASIC | Programming Club Network
- 2014年 目指すはMSX! Raspberry Pi より安価な IchigoJam 発表!
- 2015年 創る人を創ろう! Pepper より安価な こどもロボットPaprika 発表!
- 2016年 MSXになりたい「こどもパソコンIchigoJam」あの起動ロゴを搭載!
- 2017年 IchigoJam Zero the World's Lightest PC 0g 150yen for IchigoJam Things!
- 2018年 盲聾のこどもたちにもプログラミングを! 体で感じる体表点字、IchigoBrailleでブラインドプログラミング、IchigoJam 4th Birthday!
- 2019年 IchigoJam for MSX!? はじめてパソコン CANON V-10 と IchigoJam 5th anniversary!

小学生の頃、MSXの投稿されてすごいゲームが使っていたZ80マシン語に憧れ、挑戦したハンドアセンブル。
16進数で、#CD = サブルーチンのCALL、#C9 は、RET(サブルーチンから戻る)、#00 はNOP(何もせずスキップ)くらいは、ずっと覚えているまま。

国産ルネサスの8bit/16bit CPU、RL78用IchigoJamの移植も進む中、Z80 to RL78 converterを考えてみる。

RL78 ファミリ ユーザーズマニュアル ソフトウェア編」を見てみると、懐かしいレジスタ群!

A, B, C, D, E, H, Lという8bitレジスタ構成はZ80とほぼいっしょ。Xレジスタという、AXと合わせて16bitにできるレジスタや、1Mbyteまでのメモリ空間を扱うための、ES、CSレジスタを使うあたりに成長したZ80の姿を見た気がして感動できる。

RL78は16bit CPUと分類されているが、厳密にはRL78/G10のS1コアは8bit CPU、G13など一般ライン用S2コアは16bit、G14のS3コアは更に乗除算積和演算命令が加わっている。そんなこと言いながら本当は全部8bit CPUなんじゃないかと思ったが、レジスタを16bitとして使う命令に必要なクロックが、S1コアは2clock、S2/S3コアは1clockになっているので、確かにS2/S3は16bit CPUっぽい。 Z80の上位互換CPU、R800を積んだMSXturboRみたいなものだと思うと、一層愛着が湧いてくる。

命令表は下記のような感じでこれもまた馴染みやすい。

「命令マップ (1st MAP)」
RL78 ファミリ ユーザーズマニュアル ソフトウェア編に複数バイト命令用マーク追記

さすがにバイナリ互換ではないが、Z80のCALL:CD nn nn → FD nn nn、RET:CC → D7、NOP:00 → 00。など、ほぼ読み替えでいける。 Z80では、LDと表記するところ、MOV表記になっていたり、16bit操作命令が大幅増、レジスタに0や1をセットするCLRB/CLRW/ONEB/ONEWなど、進化しているなど、RL78はZ80愛好家が作ったに違いない親しみやすいマシン語となっている。

以前、逆アセンブルして解析したMSX用太字処理をするZ80のコードをRL78でかいてみると、こんな感じになる

MOVW BC,700H MOVW HL,100H @LOOP CALL 004AH MOV E,A SHL A OR A,E CALL 004DH INCW HL DECW BC MOV A,B OR A,C BNZ @LOOP RET

LD → MOV/MOVW、SRL → SHL、JR NZ → BNZ、ORはオペランドを取るのでOR A,Eなどと変わるところ、DECWでBCを1減らしてもゼロフラグが変わらないので、Aレジスタを使ってなんとかするスタイルも一緒。
*すみません、記述当初は16bitレジスタで普通にゼロフラグが使えると思っていましたが、間違ってました。Z80感覚で正しいようです。

かつてのソニーのパソコン、SMC-70の後継機、SMC-777Cの紹介記事「御三家に食い込むことはできなかった技術の結晶「ソニー SMC-777C」 - AKIBA PC Hotline!」から気になったANN表記は、asm15と同じような思想で作られていた。

BASICのようにイコールでレジスタ間転送がかけてシンプル。ローテートやジャンプ命令も短い記号を使ったところがちょっとややこしく感じちゃう点と、小文字を使って敷居が高く見えちゃう点が残念だったのかも。

コンピューターの進化に関わるエンジニアの想いが直接感じられるのが、マシン語のおもしろいところ。
RL78搭載IchigoJamが登場すれば、マシン語で伝説の16進数を直接手打ちするプログラミングするスーパーテクニックを子供に見せるチャンスかも!?

IchigoJamの太字化、MSXの例に習ってマシン語化してみました。

POKE#800,7,34,18,2,137,24,10,120,19,70,82,8,26,67,10,112,1,49,1,56,247,209,112,71

PCGの#700に使いたい文字のパターンをコピー(この例は0〜9の数字をALT+0〜9へコピー)

COPY#700,ASC("0")*8,10*8

あとは太字化処理したいバイト数を指定してマシン語呼び出し!(2度実行すると更に太字に!)

U=USR(#800,10*8)

ALT+0〜9で書いてみましょう!プログラムでももちろん使えます

FOR I=0 TO 9:?CHR$(224+I):NEXT

ベースのアイデアはこちらMSX版

MSX BASICのプログラム、70行で書き込んでいる23byteのマシン語部分を解析(逆ハンドアセンブル)してみました。(表示用につくった MSXLIST

Z80のニーモニックを、asm15表記風に書いてみるとこんな感じです。

BC=#700 HL=#100 @LOOP GOSUB @RDVRM E=A A>>=1 A|=E GOSUB @WRVRM HL+=1 BC-=1 A=B A|=C IF !0 GOTO @LOOP RET

Z80のレジスタは基本8bitなので、16bitとして使うBCレジスタの0判定がおもしろいですね! MSXのVRAMはRAMに割り当てられていないので、BIOSというMSX組み込みのコードを呼び出していました(RDVRM/WRVRM)。 どうもこの呼出が結構遅い様子。VDPという一種のGPUを使って高速化するのが常套手段だったようです。(VDPはGPUの元祖かも?)

IchigoJam用に書き換えたマシン語がこちら(asm15 assemblerでアセンブルできます)

R2=7 R2=R2<<8 R1=R1+R2 @LOOP R2=[R1] R3=R2 R2=R2>>1 R2|=R3 [R1]=R2 R1+=1 R0-=1 IF !0 GOTO @LOOP RET

ほぼ一緒ですね!

このようにCPUが違うとそのCPUで使えるレジスタや、コマンドが違いますが、やっていることは基本的に同じ。 C言語やJavaなどは、このようなCPU毎の差を埋めるプログラム(コンパイラ)が助けてくれているわけです。

何でも作れちゃう感がアップする「マシン語」おすすめです!
連載、IchigoJamではじめる、Armマシン語入門 1. はじめてのマシン語

テレコムサービス協会北陸支部の総会での講演
誰でもIoTで加速する、オープンデータによる次世代web社会

こんな感じのおなじみBASICで、IoTが実現できます、に沸く会場!

10 CLS 20 X=15:Y=22:A=1 30 X=X+A:IF X<1 OR X>29 A=-A 40 LC X,Y:?CHR$(252-A);:WAIT10:?CHR$(28,0); 50 GOTO30

ちょうど懐かしの MSX BASIC が盛り上がっていたので、IchigoJam BASICで名作「8192階建ての塔」の移植しかけてみました。まずは左右に歩くプログラム。?CHR$(28,0)がちょっとしたテクニック。
突如パソピアIQを手に入れたJKが突如twitterに現れたオッサンからMSX-BASICを教わってゲームをプログラム - Togetterまとめ

次に、塔にするための次のステップ、段をつくっただけのものが上記動画。

10 CLS:FORI=0TO9:LCRND(25),2+I*2:?"oooooo":NEXT

続き、ぜひ挑戦してみてください!


支部会長のアイオーデータ機器の細野社長ほか、BASICを知っている人、多数!
IchigoJam BASIC(1500円) x sakura.io(60円/月) で、お手軽IoT、いろいろ実験しましょう!


I-O DATA製1080/60p高画質録画 GV-HDREC を使って IchigoJam をHDMIモニターに映すことができました。ライブコーディング実況にも挑戦しちゃおうか!?

links
- 突如パソピアIQを手に入れたJKが突如twitterに現れたオッサンからMSX-BASICを教わってゲームをプログラム - Togetterまとめ
- MSX-BASIC の1画面プログラミング技術 - nagix
- MSXユーザーのためのIchigoJam入門 - MSX Advent Calendar 2015

発表から2年を迎えたこどもパソコンIchigoJam、念願の起動ロゴを搭載!

ボタンを押さなくても自動起動
IchigoJamのCPU、NXP LPC1114FN28のRAMは4KB!ユーザー用プログラムメモリは1KB!

起動後は懐かしい画面からBASICのプログラミングが始められます。

はじめのいっぽは「LED1、エンター」
5つキーを押すだけでコンピューターに命令して動かす本質を体感できます。

続いて、3行のプログラムを入力して、F5キー(RUN)を押せば、永遠にエルチカ(LEDをチカチカ点滅させる専門用語)を命ずることができるプログラマーの誕生です!

10 LED1:WAIT30 20 LED0:WAIT30 30 GOTO10 RUN

1Hzで点滅するLEDプログラム for IchigoJam BASIC


人類史上最高の発明「コンピューター」それを自在に操る「プログラミング」
はじめのいっぽ」はじめてみませんか?


MSX風、起動ロゴの種明かし。
魔法のように見えるロボットにも、ウラにはこんなプログラムが潜んでいます。
このまま打ち込めば、動きます!(ロゴ部分はSHIFT+ALT+0〜Fを駆使しましょう)

24KBカツカツのIchigoJam OSに起動ロゴプログラムをいれる余地はなく、ファイル0のプログラムをプリセットすることで実現しています。

・・・その結果、いま保存しているファイルが消えることになるので注意!
2周年特別ファームウェア(IchigoJam ver 1.2 beta 14 / 2th anniversary edition)のダウンロードは、Facebookグループ「IchigoJam-FAN」からどうぞ!

こどもたちにプログラミングの楽しさ伝える「プログラミング クラブ ネットワーク PCN」は、福井、仙台、三重、金沢、モンゴル、大阪、山口と拡大中!
電子立国発祥の地、秋葉原に「PCNフラッグシップ秋葉原byASSEMBLAGE | PCN プログラミング クラブ ネットワーク」もオープン!

2歳になったこどもパソコンIchigoJam、今後ともよろしくおねがいします!

2周年記念リンク
- IchigoJam誕生2周年記念 イチゴガリ3 | MASAHARUの魂のプログラム
- paprika | PCN プログラミング クラブ ネットワーク2015.4.1発表
- ドロ四空| PCN プログラミング クラブ ネットワーク(今度は空だ!)
- PCNフラッグシップ秋葉原byASSEMBLAGE | PCN プログラミング クラブ ネットワーク(4/1オープン!)
- PCNパリオクラブ | PCN プログラミング クラブ ネットワーク(福井パリオにて、5/14開講)
- 野生獣捕獲装置 亥(とざす)| PCN プログラミング クラブ ネットワーク(イノシシシシステムの製品版、ついに発売開始!)
- こどもモーターボード MapleSyrup(4/25発売予定)
- こどもネットワークボード MixJuice(4/25発売予定)
- PanCake プチコン3号Edition(4/25発売)
- PanCake×PAC-MAN コラボ(PanCake x PAC-MAN コラボ決定!)
- ひかりTVショッピング:IchigoJam Get Started Set U | ひかりTVショッピング

links
- 2014年 目指すはMSX! Raspberry Pi より安価な IchigoJam 発表!
- 2015年 創る人を創ろう! Pepper より安価な こどもロボットPaprika 発表!(Kids Robot paprika)
- 2016年 MSXになりたい「こどもパソコンIchigoJam」あの起動ロゴを搭載!(boot logo)
- 2017年 IchigoJam Zero the World's Lightest PC 0g 150yen for IchigoJam Things!
- 2018年 盲聾のこどもたちにもプログラミングを! 体で感じる体表点字、IchigoBrailleでブラインドプログラミング、IchigoJam 4th Birthday!

中心から渦巻状に素数にあたるところをマークしながら描くプログラムによる模様。

(素数の渦巻き on IchigoJam - 元ネタ:長野高専 伊藤翔一先生

長野高専にて講演「ICTネイティブ時代のサバイバル術 - Glass x IoT x OpenData」

時代の転換期、創造は最大の防御なり!ちょっとしたプログラム、0からでも始められます!
オープンデータ JavaScript アプリチュートリアル
長野県オープンデータなど、全国179箇所のオープンデータを見てピンときたら手を動かす!

数学好きなのにパソコン嫌いな学生にオススメしたい、こどもパソコンIchigoJam。
渦巻き模様は、IchigoJam BASICではこのように創れます。(電源オン、即入力、即実行!)

10 LET[0],0,-1,1,0,0,1,-1,0 20 CLS 30 X=32/2:Y=24/2:D=0:N=2:M=N/2 40 LC X,Y:?CHR$(1); 50 X=X+[D*2]:Y=Y+[D*2+1]:IF Y=22 END 60 M=M-1:IF M=0 D=(D+1)%4:N=N+1:M=N/2 70 WAIT:3:GOTO 40 RUN

続いて、素数判定プログラムはこちら

100 IF C<2 F=1:RETURN ELSE I=C-1 110 IF I=1 F=1:RETURN 120 IF C%I=0 F=0:RETURN 130 I=I-1:GOTO 110

Cに判定したい数値をいれ、GOSUBで呼び出し、Fの値で判定します。例えば、このように・・・

C=13:GOSUB100:?F 1 OK C=12:GOSUB100:?F 0 OK

2つのプログラムを組み合わせて、素数渦巻きをつくります。

35 C=1 65 C=C+1 40 GOSUB100:IF F=1 LC X,Y:?CHR$(1); RUN

素数を使った模様といえば、JavaScriptで2012年の一日一創「素数模様」もありました。 実は、素数は現代セキュリティを支える重要技術。「httpsが危ない!脅威の量子コンピュータ / 福野泰介の一日一創
高専プロコン創始者、堀内さん、事務局長で長野高専の鈴木先生、信州大学でオープンデータでもご一緒している不破さんとの長野懇親会。 「現代」を因数分解していくと見つかる数々のステキなストーリー、楽しく次世代につないでいきたいですね!


伊藤先生の部屋は宝の山!初めて見たMSX-FANの前身、プログラムポシェット!!
当時のマイコン少年と雑誌社の人との熱い記事の数々に感動!

帰路は北陸新幹線で3時間弱、長野はぐっと近くなりました!

大切な宝物、雑誌MSX-FANと、その存在に気が付かせてくれた別冊の「MSXプログラムコレクション50本ファンダムライブラリー」、 読者投稿のBASICのプログラムから厳選されて掲載される、雑誌MSX-FANの大好きなコーナー「ファンダム」から更に厳選された50本が載っている。


1988年1月30日発行 MSXプログラムコレクション50本ファンダムライブラリー2

ゲームが大好きだった当時、ファミコンなどのカセットは高価でそう何本も手に入れられるものではない時代(交換も流行りましたね!)。 手軽に手に入る雑誌に掲載された数々のゲームはとても魅力的でした。 ただ、そのゲームを遊ぶには掲載されたプログラムを「打ち込む」必要があります。 長いプログラムは当然打ち込むのも大変・・・。

MSX-FANのいいところは、1画面プログラム部門といって、32文字x24行の1画面に収まる部門が設定され、コンパクトでおもしろいゲームが多数掲載されたところにあります。 キーボードに不慣れな子供でも、ページの半分以下に書かれた文字数であれば、小一時間がんばれば打ち込み、遊ぶことができます。 慣れてきたら、5画面や10画面など、より長いプログラムの打ち込みにチャレンジ!(間違いをチェックするプログラムも付いていたのも助かりました)

投稿されたゲーム、1本ずつに下記のような充実したコンテンツ
- 画面キャプチャー
- ゲームのレビュー
- キー操作方法説明
- プログラム(BASICのソースコード)
- 作者からの声
- プログラム内で使用している変数の説明
- 番号毎の説明
- ものによって、改造法(オリジナルステージの追加方法)
- ものによって、使われているテクニックの解説

GitHubなどオープンソースは山のようにありますが、ここまで丁寧に解説されたものはそうありません。


プロコレ2掲載ゲーム、浜田伸一郎氏作「TINY MOOB」をIchigoJamに移植(別のハードウェアで動くように改造すること)してみました。 大流行した倉庫番型のパズルゲームで、数字を3x3のスライドパズルのように中央に並べればクリアというゲーム。 なかなか歯ごたえありました!


こどもプロコン3冠のMASAHARUによる最新作「凧上ゲーム

強風と時々現れるおじゃまドローンに注意しながら、凧を高くあげて点数を稼ぐゲーム。

プログラムという表現手段に燃える気持ちは30年経っても変わりません。

いま見ても新鮮に感じられるゲームアイデアが詰まっていて楽しいMSXの投稿ゲーム達。 1画面部門はシンプルなので、1KB制限のあるIchigoJamへの移植もしやすいです。

残念ながら、このすばらしいコンテンツは現在入手困難。徳間書店さん、MSXプログラムコレクションの電子書籍化いかがでしょう?

1 'TINY MOOB 10 S=1:F=ASC(":") 20 CLS:X=14:Y=7:GOSUB100*S 30 K=INKEY():A=(K=RIGHT)-(K=LEFT):B=(K=DOWN)-(K=UP) 40 X=X+A:Y=Y+B:Q=SCR(X,Y) 50 IF Q=32 OR Q<>F AND SCR(X+A,Y+B)<>F X=X-A:Y=Y-B ELSE LCX-A,Y-B:?":":IF Q<>F AND Q<>32 LC X+A,Y+B:?CHR$(Q) 60 IF K=SPACE GOTO 20 70 LC X,Y:?CHR$(236) 80 C=0:FOR I=0 TO 8:C=C+(SCR(16+I%3,9+I/3)=ASC("1")+I):NEXT:IF C=9 IF S=3 ?"OMEDETO!":END ELSE ?"CLEAR!":WAIT60:S=S+1:GOTO20 90 GOTO30 100 LC14, 7:?"::: :::" 110 LC14, 8:?":1:::3:" 120 LC14, 9:?":::2:::" 130 LC14,10:?" :456: " 140 LC14,11:?":::8:::" 150 LC14,12:?":7: :9:" 160 LC14,13:?"::: :::" 170 RETURN 200 LC14, 7:?"::: :::" 210 LC14, 8:?":4:::3:" 220 LC14, 9:?"::5:6::" 230 LC14,10:?" ::9:: " 240 LC14,11:?"::8:2::" 250 LC14,12:?":1: :7:" 260 LC14,13:?"::: :::" 270 RETURN 300 LC14, 7:?":::::::" 310 LC14, 8:?": 987 :" 320 LC14, 9:?":::::::" 330 LC14,10:?"::654::" 340 LC14,11:?":::::::" 350 LC14,12:?": 321 :" 360 LC14,13:?":::::::" 370 RETURN

IchigoJam版「TINY MOOB」 by 浜田伸一郎氏
チュートリアル代わりに簡単なステージ1を追加し、原作ステージ1と2を収録。
ぜひオリジナルステージを追加して遊んでみてください!

パズルゲームは遊ぶだけでなく、ステージづくり、ルールづくりと多重に楽しめてお得です!


IchigoJam買えるところマップ
書籍扱うジャムハウスさん、オープンデータ公開してくれました!

この記事は「MSX Advent Calendar 2015 - Adventar」の13日目の記事です。

MSX-BASIC の1画面プログラミング技術 - nagix」を拝見し、参加しました!
MSX-FANという投稿雑誌で見た「8192階建ての塔」のエラーメッセージを利用したエンディングというスゴ技、今でもその感動を鮮明に覚えてます。

小3からのMSX育ちで、30周年を機に修理したMSXturboRで、BASICを見直し、MSXリスペクトでつくったIchigoJam。 RAM4KB、FlashROM32KB、1つのBASICプログラムは1KBまでというMSX1以上に厳しい環境を使うので、MSX時代の技が活かせます!

ということで、今回はnagixさん記事をなぞった、MSXユーザーのためのIchigoJam入門です。

・初級

変数を1文字にする
MSXは2文字まで使えた変数名ですが、TinyBasicをベースにしているIchigoJamでは変数1文字しか使えません!

行番号を1文字にする
10から始まって20、30と増やしていき、途中の行追加に備えるという古のテクニックはIchigoJamでも有効です。 ラベルの対応も検討中ですが、ラベル名を考える手間、ラベルに必要なメモリ、ラベルを探すための処理時間を考えるとさほど優先度は高くないかも。 画面ではなく1KBまでのIchigoJamですが、中間コードを使わないテキスト保存なので、行番号短縮は有効です! ちなみに、MSXで使えた行番号0は、IchigoJamでは使えません。(追記、ver1.2でラベル対応

空白は全て削除
こちらも有効です。字句解析で後述の16進数表記以外での空白は無視しています。

演算子の優先順位を把握して括弧を削減
プログラム領域節約のため、ぐっとシンプルにした演算子の優先順位。ビット演算を含めて掛け算割り算系を1つの優先順位にまとめています。 同一優先順であれば左から順に実行されるので、それを見越したカッコづかいがポイントです。 また、カッコが多いとスタックがあふれてしまい、Complex expressionエラーがでるので、その点でも有効です。

リプレイはRUN
GOTO1より短い!有効です。ちなみに、LRUN(=LOAD & RUN)というコマンドを使って、別のプログラムに連携起動して、1KBの壁を超えることもできます。

・中級

1行の文字数を40文字の倍数に近づける
IchigoJamでは横文字数32文字なので、1画面でカメラでとって共有する際は有効かも。メモリ容量的にはできるだけ長くが基本です。

比較演算子の結果を制御または計算に利用
とても有効です。Java/JavaScript言語などでいう三項演算子的なBASICならではの記述方法が懐かしい!

10 K=INKEY() 20 IF K=RIGHT X=X+1 30 IF K=LEFT X=X-1

と書くところを

10 K=INKEY() 20 X=X+(K=RIGHT)-(K-LEFT)

と短くかけます。比較演算子が真なら1を偽なら0を返すからです。MSXでは真の時-1だったので注意です。 C言語的にもTRUEは1で、プチコンでも真は1を採用しているようです。

スプライトパターンの定義
スプライトはありませんが、代わりにキャラクターパターンを簡単に定義できます。

POKE224*8,0,1,2,4,8,#10,#20,#40

#で始めると16進数です。MSXでいう&Hですね。ちなみに2進数は&Bの代わりに`を使います。 コンマで区切って連続して書き込めるのがいいでしょう!ちなみに、配列も連続代入できます。

LET[0],1,2,3,4,5

NEXTの変数の省略
有効・・・というか、NEXTの後に変数はつけられません。

キーの入力待ち
有効です。

FORI=0TO1:I=!!INKEY():NEXT

でキー入力待ちができます。(!!は否定論理演算子を2つ重ね、INKEY()<>0 と同じ意味となる)

LINE ではなく DRAW
無効、グラフィックス命令はないので使えません。ただし、セミグラフィックが定義されているので自前でLINEコマンドなどをつくると楽しめます。 マシン語を使って速度アップも!

命令の省略形を使う
有効です。
PRINT → ?
LOCATE → LC
GOSUB → GSB (ver1.1)
RETURN → RTN (ver1.1)

・上級

スプライト操作にVPOKEを使う
スプライトはありませんが、画面描画はVRAM直接変更が有効です。

エスケープシーケンスの利用
エスケープシーケンスの代わりに、いくつかのキーコードをカーソル移動など特殊な画面操作に割り当ててあります。

?"AB";CHR$(LEFT,LEFT,DOWN);"CD";

・変態級

マシン語直書き
USRコマンドでArm Thumb-2 マシン語を直接呼び出せます。詳しくは「IchidoJamでArmマシン語入門」へ!
また、プログラム領域1KBはそのままバイナリを書いておけば、保存読み出し可能なので、一見プログラムが無いように見えても実はマシン語で動くゲームとかはつくれるはず!

おまけ

8192階建ての塔風の画面を紹介しておきます。
ぜひ1KB以内でつくってみてください!

おわりに
nagixさんはじめ、たくさんの憧れのMSXプログラマーさん達に育ててもらえたこと、本当に感謝です!
MSXのような楽しいプログラミングを今度は自分が次世代のこどもたちに伝えてあげる番だと思ってつくったのがIchigoJamです。 小学生MASAHARUを始め、ソフトコンペでのこどもの活躍がうれしい限りです!

IchigoJamは、プログラミングの入り口なだけでなく、RaspberryPiやArduinoなどと同様、流行りのIoT電子工作など、シンプルでフィジカルなハードウェアいじりが楽しいコンピューター。 FacebookグループIchigoJam-FANでは大人な投稿も多数あります。

懐かしのテクニック、ぜひ周りのこどもたちにもご披露ください!

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像