ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

大人の科学 4bitマイコン GMC-4コミュのこんなプログラムを作ってみました

  • mixiチェック
  • このエントリーをはてなブックマークに追加
皆さんの作られたプログラムを公開してみませんか?
大人の科学マガジンでコンテストもあるようですが、
とりあえず出来たものをみんなで試してみたり、
ブラッシュアップしたりして、腕を磨きましょう。

コメント(37)

プログラミングするに当たって、ニーモニックがアルファベット読みだけだと、疲れそうですね。

そこで、GMC-4の親戚?にあたるMicrocomputer Trainerの資料を元に、英文読みを考えてみました。
http://heisencoder.net/2008/02/microcomputer-trainer.html#comments
http://www.polylith.com/%7Ebrendan/ClassicComputers/Tandy/uCptrTrainManual1.html

コード 記号 英文読み
0 KA Key value into Ar
1 AO Ar Output
2 CH exCHange registers sets
3 CY exChange ar and Yr
4 AM Ar to Memory
5 MA Memory to Ar
6 M+ Memory + into ar
7 M- Memory - into ar
8 TIA Transfer Immediate into Ar
9 AIA Add Immediate into Ar
A TIY Transfer Immediate into Yr
B AIY Add Immediate into Yr
C CIA Compare Immediate to Ar
D CIY Compare Immediate to Yr
E CAL Call
F JUMP JUMP on flag

今ひとつしっくりとは決まりませんが、お役に立てば。
プログラムの実行モードについて
 
本誌では、プログラムを打ち込んだ後に、[RESET]1[RUN]の順にキーを押して実行させるとの説明ですが、
プログラムの実行には、実は他の方法もあります。

[RESET]2[RUN]の順にキーを押して実行させると、2進LEDに現在実行中のアドレスが表示されます。
実行速度が速いので、ほとんど分かりませんが(^^;
通常の[RESET]1[RUN]と合わせて、RUNモードといいます。

[RESET]5[RUN]の順にキーを押して実行させると、STEPモードになります。
この後、[INCR]を押すごとに、1命令ずつ実行します。
作ったプログラムが上手く動いていない時は、この方法で動かすと間違っているところを見つけやすくなるかもしれません。

[RESET]6[RUN]の順にキーを押して実行させても、STEPモードになります。
この時は[RESET]2[RUN]で実行と同様に、2進LEDに現在実行中のアドレスが表示されます。
2進LEDに表示を行わないプログラムのチェックは、こちらが便利ですね。

まとめ
操作  モード  LEDでアドレス表示
[RESET]1[RUN] RUNモード  なし
[RESET]2[RUN] RUNモード  あり
[RESET]5[RUN] STEPモード なし
[RESET]6[RUN] STEPモード あり

また、RUNモード中に[INCR]キー、STEPモード中に[RUN]キーを押すと
モードを切り替えできます。

この情報は、本誌P.73にも紹介されている、FX-マイコンシミュレータの
ヘルプを参考に作成しました。
このソフトのヘルプは、大変詳しく書かれていて貴重な情報源です。
http://homepage2.nifty.com/kocha_web/fxms/fxms.html
実行モードは、よく本誌を見たら、P.50に書いてありましたね。
なんで7章(P.56)と離れた場所にあるのやら(^^;
まぁ、補足説明という事で。
オフィシャルページの「補足説明・ダウンロード」に
「FX−マイコン・全マニュアル」が掲載されました
5.3MBのPDFファイルです。

これで、プログラムを作らなくても、色んなプログラムを入力して遊べますよ。
http://otonanokagaku.net/magazine/vol24/description.html
小熊猫さん、ナイスです。
短いプログラムは、早い者勝ち・アイディア出したもんがちですね(^^)
私は、超古いパソコン雑誌を引っ張り出して、1次元ライフゲームを作っていたのですが、
予定の半分くらい出来たところでアセンブラにかけたところ、ほぼメモリを使い切ってしまってorz
違うネタを探さないといけなくなってしまいました(^^;
ナイトライダー作ってみました。

http://www.geocities.jp/yasuho68k/gmc4/index.html#knightrider

もっと短く書けそうな気もしますが、習作ということでお許しを。

yasuhoさん、なかなかいいんじゃないでしょうか(^^)
同時に光るLEDが3つなのも迫力があって良いですね。
つかさん
これは、2進数と16進数を関連付けて覚えるのに
とても良い学習ゲームになりますね。
本当に初心者にはもってこいって感じです(^^)

ところで、このゲームにタイトルは無いですか?
2進数→Binary、16進数→Hexadecimal、なので
頭文字をとって「BHクイズ」でどうでしょう?
ところで、リストが縦に長いと入力が大変なので、
ダンプリストにしてみました。
左端の2桁がその行のプログラムの最初のアドレスで、
コロンの右がそのアドレスの入力コード、
さらに右は[INCR]で進んだ次のアドレスのコード
と順に1行で8ワード分を表します。

小熊猫さんのコードだと
00 0 <- 押されたキーをArに格納
01 1 <- Arの内容を7segに表示
02 F <- 00番地へジャンプ!!
03 0
04 0

00:0 1 F 0 0
こんな感じに表されます。
yasuhoさん作 「ナイトライダー」

00:8 0 2 A 0 E 1 A
08:1 E 1 A 2 E 1 A
10:0 8 3 E 2 3 E 1
18:3 2 E C 2 9 1 B
20:1 C 7 F 1 3 3 9
28:F B F E 2 3 E 1
30:3 2 E C 2 9 F B
38:F C F F 2 B F 0
40:F

すみません、勝手にダンプ形式にしてみました。
不都合があるようでしたら、削除します。
つかさん作「BHクイズ」(仮称)

00:A F 8 0 4 A E 2
08:A E 4 E D 2 9 1
10:0 F 0 D 7 C 0 F
18:1 F E 9 F 0 7 E
20:8 F 0 7

すみません、勝手にダンプ形式にしてみました。
不都合があるようでしたら、削除します。
>まりす さん
全然問題ないです。
たしかに16進ダンプ形式の方が見やすいですね。
私もかつてI/Oやアスキーに掲載されていたダンプリストを思い出しました。:)
つかさん、ブログ拝見しました。
かなり精力的にプログラムを作られてますね。すばらしい。
アニメーションも面白かったです。
もしかするとbとdを交互にタイミングよく出せば、
踊っているように見えるかもしれませんね。
「BHゲーム」のタイトル採用もありがとうございます。

yasuhoさん
やはりマシン語(機械語)の打ち込みにはダンプリストですよね。
FM-7を買った当時、ゲームを早くやりたくて兄弟で
ダンプリストの読み上げと打ち込みを交代交代でやりました。
そこまでは仲良くやるのですが、いざどちらが先に遊ぶかとなると(^^;
今ではいい思い出です。

PS.コメント遅くなってすみません。

という訳で、bとdで作る、ピコピコダンスのプログラムです(^^;

address code mnemonic
00 (0000000) 8 B  TIA <B>
02 (0000010) 1   AO
03 (0000011) 8 A  TIA <A>
05 (0000101) E B  CAL SUND
07 (0000111) 8 D  TIA <D>
09 (0001001) 1   AO
0A (0001010) 8 E  TIA <E>
0C (0001100) E B  CAL SUND
0E (0001110) F 0 0 JUMP <00>

むぅ、もうチョッとリズムの展開がほしいなぁ

00:8 B 1 8 A E B 8
08:D 1 8 E E B F 0
10:0
まだまだ単純ですけど、ピコピコダンスVer.2

00 (0000000) 8 B  TIA <B>
02 (0000010) 1   AO
03 (0000011) E B  CAL SUND
05 (0000101) E 0  CAL RSTO
07 (0000111) E B  CAL SUND
09 (0001001) 1   AO
0A (0001010) E B  CAL SUND
0C (0001100) E 0  CAL RSTO
0E (0001110) E B  CAL SUND
10 (0010000) 8 D  TIA <D>
12 (0010010) 1   AO
13 (0010011) E B  CAL SUND
15 (0010101) E 0  CAL RSTO
17 (0010111) E B  CAL SUND
19 (0011001) 1   AO
1A (0011010) E B  CAL SUND
1C (0011100) E 0  CAL RSTO
1E (0011110) E B  CAL SUND
20 (0100000) F 0 0 JUMP <00>

00:8 B 1 E B E 0 E
08:B 1 E B E 0 E B
10:8 D 1 E B E 0 E
18:B 1 E B E 0 E B
20:F 0 0

あ、なんか思いついた。
繰り返し部分をデータメモリに持っていって、サブルーチンぽく出来るかな?
サブルーチン化、出来るには出来たけど
結構複雑になってしまった(^^;

00 E 5  CAL CHNG ;補助レジスタ呼び出し
02 8 0  TIA <0>  ;戻りアドレス上位セット
04 2   CH    ;裏レジスタ退避
05 8 E  TIA <E>  ;戻りアドレス下位セット
07 E 5  CAL CHNG ;補助レジスタ退避
09 8 B  TIA <B>  ;サブルーチン引数セット
0B F 3 6 JUMP <36> ;サブルーチンへジャンプ
0E E 5  CAL CHNG ;以下同様
10 8 1  TIA <1>
12 2   CH
13 8 C  TIA <C>
15 E 5  CAL CHNG
17 8 D  TIA <D>
19 F 3 6 JUMP <36>
1C F 0 0 JUMP <00> ;ループ先頭へ戻る
  
36 1   AO    ;引数を16進LEDへ表示
37 E B  CAL SUND ;引数のサウンドを鳴らす
39 E 0  CAL RSTO ;16進LEDを消灯
3B E B  CAL SUND ;引数のサウンドを鳴らす
3D 1   AO    ;もう一度繰り返し
3E E B  CAL SUND
40 E 0  CAL RSTO
42 E B  CAL SUND
44 E 5  CAL CHNG ;補助レジスタ呼び出し
46 A 1  TIY <1>  ;書き換えアドレス下位
48 4   AM    ;戻りアドレス下位を書き込み
49 2   CH    ;裏レジスタ呼び出し
4A A 0  TIY <0>  ;書き換えアドレス上位
4C 4   AM    ;戻りアドレス上位を書き込み
4D E 5  CAL CHNG ;補助レジスタ退避
4F F 0 0 JUMP <00> ;書き換えられた戻り先にジャンプ

00:E 5 8 0 2 8 E E
08:5 8 B F 3 6 E 5
10:8 1 2 8 C E 5 8
18:D F 3 6 F 0 0
    
30:      1 E ;←36からスタート
38:B E 0 E B 1 E B
40:E 0 E B E 5 A 1
48:4 2 A 0 4 E 5 F
50:0 0

プログラムの最後がデータメモリにハミ出ているのがポイントです。
上のプログラム、アセンブラで出来たコードのサブルーチンのアドレスを
最後が4Fになるように手作業で書き換えたんですよ。

だけど、よく考えたらサブルーチンの最後にJUMP 4Fをつければ
サブルーチン全体をずらす必要なかったですね(^^;
『数字読み取りゲーム(仮称)』

http://blogs.yahoo.co.jp/keto_chon/3599033.html

少ない命令と少ないメモリで、かなり苦労しましたたらーっ(汗)

最初は『戦艦ヤマト砲撃ゲーム』という名前だったのです。
「味方の観測機が報告してきた敵艦の座標にむけて砲撃する。
座標を間違えるとその間に敵から攻撃を食らってしまう」という
ストーリー。
でも、ゲームの仕様がストーリーに合ってないような気になり
結局『数字読み取りゲーム(仮称)』です(笑)

力作(のつもり)なので1度あそんでくださいねわーい(嬉しい顔)
まぇけん.さん、
『数字読み取りゲーム(仮称)』やってみました。
なかなか面白くて、かつそれなりに難しいですね。
同じ数字が連続するところは、リズムを作って読み取らないと、間違ってしまいます(^^;

出来れば、一度まちがっても、同じ数字列に再チャレンジしたいところですが、どうでしょう?
同じ数字列で3回間違うとエラー音(E8)がでて次の問題になると最高ですが、
正解するまで同じ問題でLED再表示からスタートではどうですか?

逆アセンブルが面倒なので(^^;解説が発表されたら、こちらでも改造してみたいと思いますので
よろしくお願いします。
まりすさん>

早速、プレイして頂き、ありがとうございますぴかぴか(新しい)わーい(嬉しい顔)

> 同じ数字列で3回間違うとエラー音(E8)がでて次の問題になると最高ですが、
> 正解するまで同じ問題でLED再表示からスタートではどうですか?

いいですねぇ!ゲームとして完成度が上がりそうです。

問題は改良に耐えられるだけのメモリがあるかどうか・・・(^^;
(まだまだプログラムを短縮できるかもしれませんが。)

とりあえず、ソースと簡単な解説をアップしましたので、もしよろしければ
ご覧ください。

http://blogs.yahoo.co.jp/keto_chon/3647869.html
ソースと解説、拝見させていただきました(^^)

同じ問題で再スタートだけなら、最後のジャンプ先アドレスを
 >◆17〜25
 >アドレス50〜56までの7桁分の数値を順に表示します。
にすれば良さそうですね。

さらに
 >◆00〜05
 >ゲームが始まる前に数字LEDを消灯し、約1秒の間をあけます。

 >◆06〜16
 >乱数っぽい数を作ります。
を入れ替えて、
間違った時は、
 >ゲームが始まる前に数字LEDを消灯し、約1秒の間をあけます。
に戻るようにすると、なお良いかも
昔なつかしのゲームSimonを作ってみました。

http://www.geocities.jp/yasuho68k/gmc4/index.html#simon

ゲームとしては未完成品ですが、もうこのへんが限界・・・

00: e 7 0 f 0 2 a 0 2 a 0 2 e 6 4 e
10: 6 9 4 4 b 1 f 0 0 8 f 4 2 a 0 5
20: b 1 c f f 2 a f 3 0 1 e b f 1 f
30: a 0 5 c f f 3 b f 0 b 2 9 1 2 0
40: f 3 b 1 e b 7 f 0 0 b 1 5 f 3 2
まりすさん>

ありがとうございますぴかぴか(新しい)
早速、数字読み取りゲーム(仮称)ver1.1として
アップさせていただきましたぴかぴか(新しい)

http://blogs.yahoo.co.jp/keto_chon/3680899.html
yasuhoさん
80nibbleぴったりですね。すごいです。
ただ、遊んでみたところ、人間の回答後、直ぐに次の問題が始まるので、
結構分かりにくいです(^^;
とは言え、ウエイトを入れるには、かなり頭をひねってメモリをあけないといけませんね。
>まりす さん
そうなんです。いろいろ不満はあるんですけど、私の技術力ではこれが限界でした・・・
既に多くの人が作られてますが、GMC-4アセンブラです。

http://www.geocities.jp/yasuho68k/gmc4/index.html#gmc4asm
yasuhoさん
限界はメモリ容量の方かと(^^)
アセンブラ、やっぱりコマンドライン版が雰囲気でますよね。
需要がなさそうな GMC-4 逆アセンブラを作ってみました。

http://akiba.geocities.jp/consolehomebrewprogramming/gmc4/index.html

必要最低限しか用意されてない GMC-4 には
逆に自給で何か用意してやろうかって気にさせてくれる
ナイスなマイコンだと思うのです。
GMC-4初プログラミングです。
題して、『マイクロスイーパー』。
マインスイーパーの2進LED版を
作ろうと始めたのですが、
とにかくメモリが足りなくて足りなくて…。

泣く泣く機能を削って、マイクロ版になりました。

00:A 8 8 0 4 B 1 D
08:0 F 0 4 2 9 1 2
10:0 F 0 C 2 E 6 9
18:8 3 8 1 4 2 F 2
20:5 0 F 2 1 9 9 F
28:2 1 9 F 3 5 C 1
30:F 3 8 E 7 F 3 5
38:8 3 4 B 8 5 E 1
40:A 7 B 1 D F F 4
48:E E A F 3 5 5 C
50:0 F 4 2 F 2 1

2進LEDのどこかに地雷が隠れています。
(まれに、地雷が隠れていない場合があります。)
地雷を踏まないよう、2進LEDに対応する数字キーを
押して下さい。
地雷を踏むと、終了音が鳴って終了します。
クリアすると、長いビープ音が鳴って終了します。
(音は逆の方が良かったかも…。)

メモリが足りなかったので、地雷は一つだけです(涙)。
メモリが足りなかったので、地雷の近くを
踏んでも、何の反応もありません(涙)×2。
メモリが足りなかったので、数字キーを押しても
ビープ音は鳴りません(涙)×3。

始めにフル機能でコーディングしたため、
アセンブル結果を見て愕然となりました。
コードを縮めつつ、機能を落としていきました…。
わだまんさん、プログラムのアップありがとうございます。
遊んでみました。
ミニ黒髭危機一髪と思えば十分面白いかも。
なので、クリアした時は終わらずに、
最初に戻って地雷を踏むまで続くようにすると
より、それっぽくなりそうですね(^^)

GMC-4をシーケンサにするプログラムを作ってみました。
本誌にも簡単なプログラムがありますが、
こちらは、ステップ番号表示付きで、実行中にテンポ変更したり、発声するノート番号を変更出来たりします


そのかわりステップ数は8です。
また8種類(無音含む)のいずれかのノートを発声させます。


プログラムを走らせると16進LEDが1〜8に順番に光り、
2進LEDの0〜2で、2進数で発声するノート番号が光ります。
また2進LEDの3番が、どのノート番号を出力しても、光りますので、
タイミング合わせ等に使えます。

プログラム実行中に0〜7のキーを押すと、
そのステップの発声ノート番号が押したキーの番号に変わります。
また、8〜Fを押すと、それに応じてテンポが変わります。
8がもっとも速く、Fが最も遅くなります。

アセンブルリスト中にカスタマイズポイントを乗せておいたので、
アレンジして使ってもよいでしょう。

アセンブラはyasuhoさんのを使わせていただきました。ありがとうございます。

--------------------------------------------------------
GMC-4 Sequencer Ver1.21
2009/08/25 by まりす

00: 8 1 1 a d 4 3 0 f 1 b 9 8 f 1 4
10: 4 f 1 b a 0 4 a d 5 3 5 a e 4 e
20: d 8 0 e c 8 0 4 e d a 0 5 9 3 a
30: 8 2 2 b f f 3 1 9 f f 2 f a d 5
40: 9 1 c 9 f 0 2 f 0 0 f f f f f f
50: 0 9 8 9 8 9 8 9 8 0 0 0 0 0 0 0
      ;GMC-4 Sequencer Ver1.21
      ;2009/08/25 by まりす
      
      L01:       ;ステップ1〜8全体のループトップ
00:8 1       TIA 1   ;Arにステップ番号1を代入
      L02:       ;1ステップのループトップ
02:1        AO    ;ステップ番号を16進LEDに表示
03:a d       TIY D   ;Yrにステップ番号保存アドレスを代入
05:4        AM    ;ステップ番号を保存
06:3        CY    ;ステップ番号をYrに移す
      
07:0        KA    ;Arにキーボードから入力
08:f 1 b      JUMP L03 ;入力がなければ信号出力に進む
0b:9 8       AIA 8   ;Arに8を足す
0d:f 1 4      JUMP L04 ;繰り上がったらテンポ変更
10:4        AM    ;入力値を現ステップに保存(ノート番号+8:EnableBit)
11:f 1 b      JUMP L03 ;信号出力に進む
      L04:       ;テンポ変更
14:a 0       TIY 0   ;Yrにテンポ保存アドレスを代入
16:4        AM    ;入力値(8〜F)に8が足されて0〜7をテンポに保存
17:a d       TIY D   ;Yrにステップ番号保存アドレスを代入
19:5        MA    ;Arに現在ステップ番号を読込み
1a:3        CY    ;Yrに現在ステップ番号を復元
      L03:
1b:5        MA    ;Arに現在ステップのノート番号を読込み
      
1c:a e       TIY E   ;Yrに2進LED下位アドレスを代入
1e:4        AM    ;2進LED下位アドレスにノート番号(EnableBit込)を書込み
1f:e d       CAL DSPR ;2進LEDを表示
      
21:8 0       TIA 0   ;ArにON期間を代入(カスタマイズ:0〜1程度)
23:e c       CAL TIMR ;(Ar+1)*100msウェイト
25:8 0       TIA 0   ;ArにLED消去値を代入
27:4        AM    ;2進LED下位アドレスにLED消去値を書込み
28:e d       CAL DSPR ;2進LEDを消去
      
2a:a 0       TIY 0   ;Yrにテンポ保存アドレスを代入
2c:5        MA    ;Arにテンポ値を代入
2d:9 3       AIA 3   ;Arにテンポ底上げ値を加算(カスタマイズ:0〜8)
      L05:       ;ウェイト外ループトップ
2f:a 8       TIY 8   ;Yrに1テンポ値当りのループ回数を代入(カスタマイズ:0〜F)
      L06:       ;ウェイト内ループ
31:2        CH    ;時間稼ぎ
32:2        CH    ;時間稼ぎ(上と対でNOP相当)
          
33:b f       AIY F ;YrにFを加算(Yrを1減らす)
35:f 3 1      JUMP L06 ;繰り上がれば(繰り下がらなければ)内ループに戻る
      
38:9 f       AIA F   ;ArにFを加算(Arを1減らす)
3a:f 2 f      JUMP L05 ;繰り上がれば(繰り下がらなければ)外ループに戻る
      
3d:a d       TIY D   ;Yrに現在ステップ保存アドレスを代入
3f:5        MA    ;Arに現在ステップ値を代入
40:9 1       AIA 1   ;現在ステップ値に1を加算
42:c 9       CIA 9   ;現在ステップ値を9と比較
44:f 0 2      JUMP L02 ;9にならなければ1ステップのループトップに戻る
47:f 0 0      JUMP L01 ;9になっていればステップ1〜8全体のループトップに戻る
      
          org    50H
50:0        dn     0        ;底上げ前のテンポ値
51:9 8 9 8     dn     9,8,9,8,9,8,9,8 ;8(EnableBit)を加算したノート番号
  9 8 9 8
59:0 0 0 0     dn     0,0,0,0     ;未使用
5d:0        dn     0        ;現在ステップアドレス
5e:0 0       dn     0,0       ;2進LEDアドレス
さて、これだけでは、何も面白いことはできませんが、
LEDの信号を取り出してチョットした電子工作をすれば
SX-150につないだりできますので、興味がある方はやってみてください。
詳細は「改造しちゃいます?」の方に掲載予定です。

と書き込み準備をしている内に、
2進LEDの光をフォトトランジスタで受ければ、本体無改造でもいけるかもと
アイディアが湧いてきました。
乞うご期待。

ログインすると、残り4件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

大人の科学 4bitマイコン GMC-4 更新情報

大人の科学 4bitマイコン GMC-4のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング