DX人材への近道は、コンピューターに遊んでもらうのではなく、コンピューターで遊ぶこと。 じっくり時間が取れる夏休みは良い機会!
(参考、LED65536で消える!? 福井高専ジュニアドクター育成塾「クラフテックラボ」講座、はじめてのプログラミング、メモリになってみよう


USBキーボード対応した、IchigoJam Rですが、ロボット制御などノイズが多い環境の場合、PS/2キーボードの方が相性が良いとのことで、ナチュラルスタイル協力の元、PS2にも対応版ファームができました。

IchigoJam BASIC 1.5β10 ファームウェア (RISC-V版 IchigoJam R用)
- PS/2キーボードにも対応(USBのみキーボードでもOK)
- EEPROMへのファイル読み書きが失敗することがある不具合を修正(最大10回のリトライ)
(書き換えには IJUtilities が便利です)


たまたま見かけたパソコンの広告にベーマガ/電子工作マガジンでおなじみ、電波新聞社のマイコンソフト開発、SONY販売の「センサーキッド」を発見!


MSXに目と耳と触覚と、2つのリレー制御を追加する「センターキッド」、拡張したMSX BASICで自作のプログラムに取り込める!

CALL ONDO(A) CALL OTO(A) CALL HIKARI(A) CALL PORT0(N) CALL PORT1(N)

MSX BASIC、CALLは _ で省略可。IchigoJamでは、ANA(P) や、OUT P,N と書きますね。


掲載誌は、こちら MSX-FAN 1988年8月号、当時9才。


SONYと言えば、PS/2キーボードとは無関係な、PS2ことプレスト2も写っているこちら、PS5付属のアクションゲーム「ASTRO's PLAYROOM」のバーチャルミュージアム。 懐かしのプレステ1の起動画面と起動音がちゃんとアナログっぽく再現されてました!コンピューターの進化が感じられるプレステ愛が詰まったステキな作品。

小さなコンピューターからハイパワーなコンピューターまで、いろいろ揃った現代、じゃんじゃんおもしろいもの作っちゃおう!

数学的美しさを感じる弾幕シューティングゲーム。 「crisp-game-lib」の作者、ABAさんによる、弾幕を記述するXML「BulletML」と弾幕オープンデータ「弾幕やさん」を発見。

JavaScript実装である「bulletml.js」をESモジュール化した「bulletml.js-es」を作って、 ABA Gamesさんのオープンソースからシューティングゲームっぽい「smilyangry」を改造してドラッグで動く版「smilyangry-d」を作って、 弾幕やさんのデータ一覧をCSV化して、CORS対応のGitHub Pagesに「danmakuya」として設置して、下ごしらえ完了。

これらを使って作った、弾幕シューティングゲーム風、15秒でたくさんスマイルを集めようゲームがこちら。

smily15s」(src on GitHub)
弾幕データにはうまく動かないものが混ざっているため、ひとまずいくつかピックアップして使用しています。

レトロ調だけど多数のオブジェクトがあっても処理落ちせず滑らか動く様子を伝えるのに動画化は必須ですね。 「gif-capture-canvas」が使われていたところを、似たインターフェイスでmp4で記録できる「mp4-capture-canvas」を作成。

TypeScriptと外部モジュールで開発されているcrisp-game-libを、ESモジュール化するにあたって、外部モジュールのESモジュール化。 元ソースを少し調整し、TypeScriptからJavaScriptへの変換とimportのマッピングの変更を行うスクリプト「makees.sh」を作成。 HTML内にimport文ひとつですっきり記述できるようになりました。
→「crisp-game-lib ES module ver.


新しいサンプル「tilted-easy (forked from tilted)」を合わせてご覧ください。
もっとシンプルなものがよければ「kawakudari」をどうぞ。

開発者のABAさんもMSX出身と判明!
個人サイトをリニューアルして自作ゲーム一覧を作ったら250個くらいあった - ABAの日誌

ESモジュールというシンプルでグローバルな抽象化、便利ですね!
いろいろ作りたい高専生や学生向け、jigインターンもエントリー受付中!

6/16、MSXという規格が誕生した日!
西さんVS 孫さん!? MSXの誕生秘話をちょっと語るぞ!:MSX30周年 - 週刊アスキー

MSX30周年記念がきっかけで誕生したIchigoJam。図書館で本を借りたり、カセットを買ったり、雑誌を見て打ち込んだりのあの感覚、だいぶ再現できてきました。

IchigoDake&IchigoDyhookで学べる タイピング・算数・英語学習セット | ...
カセット差し込み即起動、余計な時間はかかりません! IchigoDyhookの開発元、I-O DATAさんのご協力による新製品!学校のちょっとした時間に、算数、英語、タイピングが自学できます。 (三種のカセットを動かすロング版動画 on YouTube)


ハコの中身はプログラムが書かれた紙・・・ではなく、書き込み禁止ファームを使ったプログラム入りIchigoDake! プログラムを止めて、LISTを見て、いろいろいたずらできますが、保存はできない安心仕様。


KAZUATE.md
プログラミングに少し慣れたこどもには、プログラミングを使った学習をオススメします。 IchigoJamプリント、もっと作りやすくMarkdownで書いてみるテスト第一弾です。CSSを加えてIchigoJamプリント化や、PDF出力など発展させたい。


1行1行、入力して、プログラムを組んでいく感じを体験できます。オンライン学習にも使える「IchigoJam web」と合わせてお試しください。

いい具合にこどもたちに伝えていきたいです、ネットで無限に学習できる現代。
インターネットが無い頃、TAKERUでソフトが買えたのはありがたかった!

おめでとう&ありがとう、MSX38周年

鯖江のHana道場、会津若松の寺子屋Hanaに続くHanaシリーズ3拠点目、沖縄県沖縄市に「Hanaわらび」オープン! IchigoJamによるはじめてのプログラミングから、JavaScriptなどプロも使うソフトウェア技術まで、電子工作、レーザーカッター、3Dプリンターなどを使ったものづくりなど、可能性伸ばす場づくりが広がっています。


Hanaわらびの代表、玉城哲真さんからの熱い事業発表!


すべての世代に可能性を!大人も学生もこどもも地域も!


Hana道場寺子屋Hana、そして、Hanaわらび


ニッポンの「未来」を現実にするをビジョンとする、SAP Japan、大我さんから祝辞!地方創生、人材育成、製品開発、スタートアップまでの強力なエコシステム!
沖縄市に、多世代向け教育プログラムの実施拠点 「Hanaわらび」を開設、地域教育を支援 - SAP Japan プレスルーム

この語、HanaわらびではIchigoJamを使ったプログラミングワークショップ。楽しそうな写真がシェアされてました!

福井県鯖江市のHana道場の取り組みを知ってから約2年、やっと沖縄にもHanaをオープンさせることができました。 ご参加いただいた皆さん本当にありがとうございました! 多世代向け教育プログラム実施拠点Hanaわらびをよろしくおねがいします!

Kenichiro Toyosatoさんの投稿 2021年4月3日土曜日

すぐ楽しいのがBASIC、でも、意外と奥も深いのです。
たったの10行のコードで作られたMSX用RPG「10 Lines Hero」をブラウザで遊んでみた - GIGAZINE
IchigoJam誕生のきっかけ、34年前に出会ったパソコンMSXで育ったエンジニアは数多く、今でもファンやユーザーが多くいます。その新作、BASIC10行で作られたロールプレイングゲームが話題です!

こちらプログラムのすべて!縦読みもできちゃうスゴイプログラム!1行の上限いっぱい255文字で10行、サイズは約2.5KB、IchigoJam BASICは1KBのプログラムが4つ保存、連携できるので、規模的には同じくらい。

IchigoJam BASIC ユーザーのための、MSX BASICの読み方を紹介。
1. コメントにデータ埋め込みは共通技(プログラムはメモリの#8000にあります、IchigoJamは#C00)
2. PCGの書き換えはVRAMへ書き込む、VPOKEを使う(アドレスはIchigoJamと同じ)
3. テキスト画面と独立したキャラクターを表示するスプライトがあります(PUT SPRITE、VRAMにパターン書き込み)
4. 8文字単位で色をつけられます(VRAMの所定パターンに値設定)
5. =などの条件が正しいときは -1 になる(IchigoJamはC言語に合わせて 1 )
6. NEXT変数名で、特定のFORループへ戻れる(IchigoJamではFORループの指定はできません)
7. 二種類の割り算、/は結果を小数で返し、¥は整数で返します(IchigoJamは整数を返す/のみ)
8. 配列は()を使い、10コ以上使う場合はDIMで宣言(IchigoJamは主流言語と合わせて[]を使用)
9. ステージ生成用のマイナスを指定して乱数初期化(IchigoJamのSRND命令)
10. 変数は2文字まで使えます(IchigoJamは1文字)
11. T$は文字列変数、MID$など文字列専用の命令あり(IchigoJamはSTR$を使います)

JavaScriptのように読みやすくインデントすると、データ部を除き180行くらいと、やはりコンパクト。GOTOを使っているのはクリア時の無限ループの一箇所のみ。おもしろい作りです!


なめらかに動く体力ゲージがステキだったので、IchigoJamでも1ドット毎に増減するレベルメーターを作ってみました。

10 FORI=0TO8:FORJ=0TO7:POKE#700+(8-I)*8+J,255<<I:NEXT:NEXT 20 N=32+SIN(I*8)/8:GSB@BAR:?:I=I+1:CONT 40 @BAR:?STR$("████████",N/8);:IFN>=64RTNELSE?CHR$(224+N%8);STR$(" ",7-N/8);:RTN

Nに0から64までの数を入れて表示したい場所へLOCATE(LC)した後、GSB@BAR と呼び出すとレベルメーターが表示されます。

RPGを自分で創ってみたい人、まずはこちらのゲームの打ち込みからチャレンジしてみよう!
Beat the Z for IchigoJam - プログラミングして過ごそう! PCN仙台オンラインIchigoJam講座とミニテクニック


いろんな連携、楽しみですね!

鯖江の新拠点、名称決定「Sabae Creative Community」記者会見!

鯖江ブランド伝えるロゴ「SABAE MADE」のネオンサイン


鯖江商工会議所、黒田会頭と、総合プロデューサー黒崎輝男さん!
市内外、福井県のみならず、世界中からクリエイターとの交流の場、2020年1月誕生!


32bit波形メモリ音源
ソフトウェアクリエイターとして、記念に何か作っておきたいところ。 SCCと言えば思い出す。こどもの頃のパソコン、MSX用に開発された、波形メモリ音源の一種、SCC音源、わずか32byteの波形メモリだったということで、大雑把に再現してみました。 32x8のドット絵キャンバス風なところで、波形を描いて鳴らせます。

絵、動画、3D、音、音楽ソフトウェア、ハードウェア、彫刻、服飾、焼き物、料理など、いろんなクリエイターが集い、相互に刺激しあえる場所になる予感。

ちょうどこの日、福井高専地域連携アカデミアのイベントも!

初のポスターセッション「こども実業団」
地域と高専で育てる創造的IT人材!スポーツと同様、県大会で盛り上げよう、福井発、越前がにロボコン

こども実業団 = こどもプログラミング必修化 x ロボコン県大会 x 企業の土日の会議室 x 小学生を持つ社員 x 地域の子供たち

企業メリット:地域のこどもたち育成、地域の親からの感謝、社員福利厚生、県大会で応援する楽しみ、遊休資産活用
月に1度程度でOK、高専生にサポートに来てもらうのもあり、大人向けIoT講習をとっかかりとするのもあり
こどもプログラミング+IoT=大人プログラミング! 総務省 デジタル活用共生社会実現会議 ICT地域コミュニティ創造部会にて情報提供&体験会


福井高専と地域企業との交流の場。創ろう、横のつながり、縦のつながり。


すでに世界103ヶ国に日本酒を輸出する、梵!
創り、学び、創る!

はじめてパソコンに触れた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. はじめてのマシン語

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