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

IchigoJamがサウンド対応したのはちょうど1年前の2015.1.3
サウンドの魔力、MMLでつくる音楽と効果音に対応 IchigoJam

パソコン用OSとして動く「IchigoJam PC」も(自分が)待望のサウンド対応!

子供の頃好きだったお正月番組、新春かくし芸大会のテーマソングでもある「一月一日」
IchigoJamのPLAY文で使える、MML(ミュージック・マクロ・ランゲージ)化したものはこちら。
(出典、祝日大祭日歌詞並楽譜 - Wikisource

A2BAF+.E8DDEEA.G8F+2.R A2BAF+.E8DDEEF+.E8D2.R >DDD<B>D2D<AABBA.G8F+2.R A2BA>D.D<B8AGF+AG.E8D2.R

合わせて、WebMMLを少しまともに改良。
Web上でお試しできます!(スマホ非対応かも)
一月一日 - WebMML」 ※ MMLの解説もこちら

だいぶ出来てきたIchigoJam PC、「IchigoJam-FAN」にてベータ公開中です。

公開後、多くの方に使ってもらったPC用OS版IchigoJam、CDブートとエルチカに対応!

エルチカとは、LEDをチカチカさせる、電子工作、つまりコンピューターのはじめのいっぽ、IchigoJam BASICでは、ハローワールドではなく、「LED 1」から体験してもらっています。

外部にむき出しの端子がないPC、仕方なく使ったLEDは、大文字小文字を表すCAPSLOCK、テンキー用のNUMLOCKと並ぶ、SCROLLLOCKという謎仕様。(Excelで使うと便利そうです)。


LED1でF11の上辺りで緑色に光るインジケーター。
でも、IchigoJamのむき出しの部品として光るLEDと比べ、圧倒的に薄い感動。


部品がコンピューターにつながっている感がよくわかる、IchigoJamの第一手量産モデルの裏。
過保護すぎる世の中、コンピューターに興味を持つきっかけは確実に奪われています。

PC版IchigoJamを使った新たな作戦、子どもたちに「IchigoJamはじめのいっぽ」で、プログラミングのおもしろさを感じてもらい、それが自分の手でも作れること、自分の手にも届くことを伝え、実際自分で作ってもらう。 するときっと、もっと強く興味をもってオリジナルゲームを作って誰かに見せたくて仕方なくなるに違いない。

小学生でも読めるプログラミングの教科書「IchigoJamでプログラミング」で、BASIC言語の学習はでき、SwiftやJavaなど、第一線の言語を学習する基礎が身につきますが、ある程度の粘り強さは必要。 自分で組み立てる、LEDをつけたり、ボタンを自分の手ではんだづけしたり、ロボットを動かすなどのリアルな体験が、ドロップ率は下げてくれるはず!


IchigoJam-FAN」にてベータテスト中のPC/AT互換機用OSとして作っている「IchigoJam for PC」、isoイメージでCDRブートも確認!


USBメモリではうまく起動しなかった、Windows XP時代のVAIO、CDブート成功!

この仕組みで起動する、PC/AT互換機の元祖は1981年8月のIBM PC(5150)と、もう35年前!
開発者のDavid Bradley氏へのメールインタビューもある、下記記事もステキです。
Assembler/なぜx86ではMBRが"0x7C00"にロードされるのか?(完全版) - Glamenv-Septzen.net

あけましておめでとうございます!
2016年、最初の一日一創は、10秒で起動する普通のPC用のOSとして起動するIchigoJam BASIC。


「眠っているジャンクPCが、IchigoJamとして蘇る!」

こちら、ケータイ契約した時のおまけとしてもらった、Windows 7 Starterが入っていた、FMV-BIBLOLOOX M/G20、IchigoJam BASICをUSBメモリに書き込み、挿しこんで起動。 10秒でBASICでプログラミングできる状態になります。お子様のおもちゃにいかがでしょう?

案ずるより創るが易し。

制限多数ですが、ひとまず動いたので、ベータ1をIchigoJam-FANグループ内に公開します。

今年もよろしくお願いします!

※追記
- 「CDから起動もOK「IchigoJam for PC」でエルチカ!に物足りないもの
- 「ジャンクパソコンでDTM!? 1bit BEEPサウンドに対応したIchigoJam PC

現代のパソコンは電源を入れるとOSがすでにインストールされていて、当たり前のようにウィンドウな画面が出てきます。 これをOS部分から作って使ってみます(これを近年はベアメタルと呼ぶらしい)。

先日作りかけた「IchigoJam for PC」は、残念ながら実機では起動しなかったので、もう一度名著「30日でできる! OS自作入門」を読みながら、挑戦! ちょっとプログラミングをかじったことある人向けに書かれているので非常に楽しく読めます。 (Amazonさんによると私はこの本、2006/4/4に購入した様子、もう約10年前!Kindle版もでています!)

Intelのマシン語を使うのは実は初めて。8bit時代から、レジスタがA(8bit)、AX(16bit)、EAX(32bit)と歴史が感じられて楽しい。


今日は、画面モード320x200に切り替えて、文字とドットを表示してみるところまで。

本書内のリンクが変更されているので注意。
http://community.osdev.info/?(AT)memorymap → http://oswiki.osask.jp/?(AT)memorymap
0x7c00 に起動用のプログラムが設置される!

http://community.osdev.info/?(AT)BIOS → http://oswiki.osask.jp/?(AT)BIOS
INT命令で呼び出すさまざまなBIOS(=Basic Input Output System)の呼び出し方が書いてある。
BASIC言語のことではなく、現代風にいうと基本的な入出力APIのこと。
INT 0x1a を使うと時間が取得できるので、壊れたパソコンを変わった時計にしておくのもありかも。
「INT(0x18); ROM-BASICを起動 」とかあっておもしろい。(残念ながら動きません、動くパソコンあったら楽しい!)

こちらがOS入門から改造した今回のコードです。naskという筆者オリジナルのアセンブラ言語で書かれていますが、だいたい標準?

ORG 0x7c00 ; このプログラムがどこに読み込まれるのか ; 以下は標準的なFAT12フォーマットフロッピーディスクのための記述 JMP entry DB 0x90 DB "IPL-15 " ; ブートセクタの名前を自由に書いてよい(8バイト) DW 512 ; 1セクタの大きさ(512にしなければいけない) DB 1 ; クラスタの大きさ(1セクタにしなければいけない) DW 1 ; FATがどこから始まるか(普通は1セクタ目からにする) DB 2 ; FATの個数(2にしなければいけない) DW 224 ; ルートディレクトリ領域の大きさ(普通は224エントリにする) DW 2880 ; このドライブの大きさ(2880セクタにしなければいけない) DB 0xf0 ; メディアのタイプ(0xf0にしなければいけない) DW 9 ; FAT領域の長さ(9セクタにしなければいけない) DW 18 ; 1トラックにいくつのセクタがあるか(18にしなければいけない) DW 2 ; ヘッドの数(2にしなければいけない) DD 0 ; パーティションを使ってないのでここは必ず0 DD 2880 ; このドライブ大きさをもう一度書く DB 0,0,0x29 ; よくわからないけどこの値にしておくといいらしい DD 0xffffffff ; たぶんボリュームシリアル番号 DB "IchigoJamPC" ; ディスクの名前(11バイト) DB "FAT12 " ; フォーマットの名前(8バイト) RESB 18 ; とりあえず18バイトあけておく ; プログラム本体 entry: MOV AX,0 ; レジスタ初期化 MOV SS,AX MOV SP,0x7c00 MOV DS,AX MOV ES,AX ;basic: ; INT 0x18 ; ROM BASICを起動! chmod: MOV AH,0x00 ; 画面モード変更 ; MOV AL,0x12 ; 640x480x4bit MOV AL,0x13 ; 320x200x8bit ; MOV AL,0x03 ; 80x25 text INT 0x10 ; ビデオBIOS呼び出し ; JMP screen screen: MOV AX,0x1010 MOV BX,1 MOV DH,0xff MOV CH,0xff MOV CL,0xff INT 0x10 MOV AH,0x0c MOV AL,1 MOV CX,40 MOV DX,40 INT 0x10 MOV AH,0x0c MOV AL,1 MOV CX,20 MOV DX,20 INT 0x10 MOV AH,0x0c MOV AL,1 MOV CX,30 MOV DX,30 INT 0x10 MOV SI,msg putloop: MOV AL,[SI] ADD SI,1 ; SIに1を足す CMP AL,0 JE fin MOV AH,0x0e ; 一文字表示ファンクション MOV BX,1 ; カラーコード INT 0x10 ; ビデオBIOS呼び出し JMP putloop fin: HLT ; 何かあるまでCPUを停止させる JMP fin ; 無限ループ msg: DB "IchigoJam BASIC pc ver0.0.1 by jig.jp" DB 0x0d, 0xa ; 改行 DB 0 RESB 0x7dfe-$ ; 0x7dfeまでを0x00で埋める命令 DB 0x55, 0xaa

年末年始、OSからの再入門、いかがでしょう?

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