ベーマガイベント その2

(投稿日:2018-01-25)

先日行ってきたベーマガイベント、トークショー以外にも物販コーナーやちょっとした展示もあったので、そちらもちょっと紹介します。


入口すぐのところに置いてあった懐かしのマイコンたち。
当時のゲームが動いてるんですが、PC-9801版ギャプラスを縦画面で動かしていたりして凝ってます。


伝説のタイニーゼビウス(のmk2?)
これのmk2でない方は元々中学生が作成したんですよね。
いやぁ、本当に凄いことだ。


入口奧には表紙がずらっと並べてありました。
私がよく読んでいたのは、このあたりの表紙の時ですね。


ベーマガのバックナンバー(古本)も売っていたんですが、お値段なんと4000円(年代によって変わる)。
捨ててしまったのがいろいろな意味で惜しい。


手元に残っているベーマガはこの2冊のみ。
左は最終号で、右は捨てられずに残っていた1988年9月号。
アーケードゲーム基板を動かそうという特集がマニアック。


中身はこんな感じでプログラムリストが掲載されていました。
ゲームで遊ぶために自分でせっせと入力したもんです。

投稿者:

ベーマガイベント「ALL ABOUT マイコンBASICマガジン II」

(投稿日:2018-01-22)


先日東京で開催されたベーマガのイベントに参加してきました。

ベーマガこと「マイコンBASICマガジン」は私が中学生くらいの頃によく読んでいたコンピュータ雑誌。
名前の通りBASICを主体としたプログラムの投稿や解説が連載されていて、私のプログラム歴の原点ともいえます。

その誌面で活躍していた編集者さんや執筆者さんが、休刊から15年を経てトークイベントをやるというのだから、見に行かずにはいられません。
(と言いつつ今回で2回目のイベント。前回の開催を知った時には、既にチケットは売り切れでした)

イベント本編

イベントは4部に分かれていて、13時から19時まで実に6時間に及ぶもの。
これはさすがに長くてしんどいのではないかと思ってたんだけど、実際は面白すぎてあっという間でした。

第1部 ベーマガ編集部 再集結!


第1部での登壇者。
もう散々言われてることですが・・・つぐ美さんは実在した!

つぐ美さんはマイナー機種の担当で長いこと「ぴゅう太」を担当していたからか、しまいにはつぐ美さんの事が「ぴゅう太」みたいになっていたとか。
辞められるときは「ぴゅう太」を貰ったそうです。

ちなみに、登壇者紹介時以外は写真撮影禁止だったのと、スマホではうまく撮れなかったので他に写真はありません。
気になるつぐ美さんのお写真は、ネットで探せばあるかも!?

第2部 スタープログラマー VS ○○プログラマー

第2部ではベーマガ誌上で有名なスタープログラマーが当時の投稿作品をわざわざ実機を使って紹介するというもの。
ですが、これがやはりというか、なかなか上手くいかない。

Bug太郎さんが壇上の88をフロッピーで起動しようとしてもうまくいかず、その後予備のディスクで起動するも、今度は非情なBEEP音とともに「DISK I/O ERROR」が発生。

相次ぐトラブルで場がしらけるかと思いきや、「予備ディスクで起動して元のディスクでLoadしてみたら?」とか「2ドライブ側で読み込んでみたら?」とか「V2モードがどうのこうの(詳細忘れた)」とか試行錯誤があり、そんなトラブル対応を見ているのもまた面白い。

「2HDドライブで書いたから2Dドライブで読めないのでは?」とか言ってる人もいて、「そういえばそんなのがあったなぁ~」と懐かしんでたんですが、こんなネタが分かる人がどれだけいるのやら。
(結局動きませんでしたが、この後最新作「N-TYPE2」で挽回)

ファミベのよっしんさんはデータレコーダでテープをLoadするという、さらにハラハラする状況でしたが、こちらは無事に読み込めました。

よっしんさんの作品はファミリーベーシックでグラディウスのようなレーザー攻撃を再現するシューティングゲームなんですが、これが本当にファミリーベーシックなのかと思う凄い完成度。
どこで見つけたのかよっしんさんのWebサイトは昔から知っていて、グラディウス風レーザーも見たことあったんですが、やはり実機で動いてるのは感動ですね。

ちなみに、そのWebサイトにはファミリーベーシックのマニアックな情報も載っていて読み応えがあります。
メモリ節約のためにはDr.Dに叱られるのを躊躇してはいけません。

第3部 DEMPAサウンドチーム クロストーク

古代祐三さんをはじめとする、ゲームミュージック関連記事執筆者のクロストーク。

またしてトラブル発生もブラインドタッチ(本当に画面が表示されない)で乗り切る古代さんもすごかったですが、「はちみつ川野」改め「とちもち川野」こと川野俊充さんや粟田英樹さんなどが当時中学生だったというのが驚きでした。
だって、当時は自分も中学生でしたからね。

第4部 スーパーソフトコーナー プレイバック

ベーマガはプログラムだけでなく、ゲームも扱ってました。
それもパソコンとアーケードのみを対象としてコンシューマは扱わず、内容も結構「濃い」もの。
そのライター陣のトークが第4部。

ここでもいろいろ面白い話がありましたが、一番印象に残ったのはベーマガにあまり関係ないけど、MMR(コンピュータ用語とかでなくて、マガジンミステリー調査班)のイケダ隊員がベーマガライターだったという事だったりして。

まとめ

機器トラブル続出だったイベントですが、そんな中でも慌てることもなくスムーズに司会進行する山下章さんが凄かった。
えーと、山下さんの本職はなんでしたっけ?

最後にサプライズでベーマガ休刊で未完となっていた「バトル・オブ・スト2」を完成させた単行本が会場で販売されたんですが、残念ながら時間がなくて買えず。
イベントは今思い出しても楽しく大満足でしたが、これだけ後悔してます。

3回目もやって欲しいですが、ベーマガ読者は東京だけじゃなく日本中にいたわけですので、次はそこら辺も何とかしてもらえると嬉しいですね。

投稿者:

IchigoJamで遊ぶ・その6 「7セグで3桁表示する」

(投稿日:2016-05-09)

ひさびさのIchigoJamネタです。

前回に引き続き7セグLEDを使うんですが、今回を桁を増やして3桁にチャレンジします。

3桁7セグLED

7seg3-1

今回使うのは、こういう3桁表示の7セグLED。
何故3桁という中途半端な桁になったのかというと、ちょうどこの部品が手許にあったから。

7seg3-2

裏はこんな感じで、ピンが12本あります。
7セグが3つのわりにピン数が少ない気がしますが、実はこれはダイナミック点灯用だから。

ダイナミック点灯とは

ダイナミック点灯というのは、LEDなどを高速に点滅させて使う方法のこと。
点滅スピードが速いと人間の目には普通に光ってるようにしか見えないため、点けっぱなしにするより消費電力を抑えたりできます。
(多少はチラチラしますが)

今回の場合のダイナミック点灯は、1桁目から3桁目に順番に高速に点灯させることによって、瞬間的には1桁しか点灯してないけど、あたかも3桁同時に光っているように見せるというもの。

こうすることで使用するピンを減らせて、マイコン等につなぐ際にポートの節約が出来るというワケです。

lg2
なぜピンが減らせるのかというと、内部の配線がこういう風に各桁で共通となっているため。
(図ではaの配線のみで他は省略してます)

信号の出口(図の上側)は別々になっているので、ここを制御することで点灯する桁を選べる仕組みです。
上側を3つとも接続すると同時に点灯できますが、表示内容が全部同じになってしまうのであまり意味が無いです。

ちなみに前回のように点滅させずに点灯させたままなのは「スタティック点灯」と言います。

目の錯覚を利用するなんて邪道、スタティック点灯こそ正義・・・とかいうのであれば、前回使った1桁のモノを3つ使えばできますが、配線も大変そうだし、ポートが足りなくなるのも何とかしないといけません。

なので、今回はダイナミックに点灯させます。

ダイナミック点灯でもポートが足りない?

前回、7セグを利用する時のポートを4つに節約できましたが、それでも残りは2ポート。
それでどうやって3桁を制御するのか?

まぁ、そこは例によって便利な汎用ロジックICがあるのです。

74138
今回使うのは74HC138、「3to8 ラインデコーダ」というもの。
(ピンセットでつまんでいるのは特に意味はない)
これは3ビットの入力信号から、8ビットのうち1つを選択した出力が得られるというもの。

table
真理値表はこんな感じ。
(フェアチャイルドのデータシートより引用)

左側のG1、G2というのはとりあえず無視して、A・B・Cが「X」でない3行目以降に注目。
このA・B・Cが入力する3ビットの信号で、この値によってOutputsのY0からY7のどれかが「L」になってます。

「L」とはLowのことで、電圧が低いことを表します。
今回は電流の出口側で桁を制御したいので、選択したビットの電圧が「L」になると電流が流れて好都合です。
(電流は電圧の高い方から低い方へ流れるため・・・と、理解してますが、厳密には違うかも)

しかし、入力に3ビット必要なら、やっぱりポートが足りない?
かと言うとそういうことは無く、今回使いたいのは3桁だけなので、真理値表でいうところのY0~Y2を制御できれば十分。
なので2ビットだけを使って、残り1ビットは「L」に固定してしまえば問題なしです。

実際に接続する

説明はこれくらいにして、実際にIchigoJamにつないでみましょう。

lg3
回路図?はこんな感じで、だんだんややこしくなってきました。

ij51
パズルめいてきたブレッドボード上の実装。
いかにヒモ状のジャンパーワイヤーを使わずに作れるかを考えるとちょっと楽しい。
(全然減らせてないですが)

それはさておき、この接続では出力する6ビットのうち、上位2ビット(ポート5と6)で桁の選択、下位4ビットが表示する値になります。

「5」は2進数で「000101」なので、「out 5」とすると1桁目が「5」になります。
ij54

2桁目を点灯させようとおもえば、表示させる値に2進数の「010000」、すなわち16を足せばOK。
「OUT 19」だと、2桁目が3になります。
ij52

同様に3桁目の場合は32をプラス。
「9」を3桁目に表示したいなら、「OUT 41」。
ij53

なので、以下のようなプログラムを実行すると。

10 OUT 5
20 OUT 19
30 OUT 41
40 GOTO 10

7seg3

3桁表示できました。
といっても、固定値を表示しただけなので、次はもうちょっとまともな表示を行ってみたいと思いますが。

ところで、このプログラムを実行すると、3桁目の「9」が若干明るく見えます。
これは、3桁目の表示後にGOTO文を処理するため、その分他の桁より長く光ってるからでしょう。

明るさを均等にするには、以下のようにGOTO文の前に全桁を消灯すると良いかと(40行目)。

10 OUT 5
20 OUT 19
30 OUT 41
40 OUT 10
50 GOTO 10

「OUT 0」では、1桁目に0が表示されてしまうので、何も表示されない値である「10」を1桁目に出力してます。

ちなみに、40行目を「OUT 0」にすると、「839」と表示されてるように見えます。
(そして8だけ微妙に明るさが違う)

というわけで、たぶん続きます。

投稿者:

IchigoJamで遊ぶ・その5 「7セグディスプレイを使う」

(投稿日:2016-04-06)

なんだか久々になりましたが、今回は7セグメント(略して7セグ)LEDを使ってみたいと思います。
ええ、また光りモノですとも。

7seg
7セグというのは、こういう「日」の字型になっている、よく見かけるお馴染みのやつです。
光る棒の部分が7本あるので7セグメント。
小数点のドット部分を入れると8セグメントですけどね。

(ドットのことは忘れて)これを制御するには7本の信号が必要になるんですけど、ここで困った問題が。

Ichigo Jamには出力ポートが6つしかない!

さて、どうしましょう?

※ Ichigo Jam も日々進化しており、新しいバージョンでは出力ポートはもっと増えています。

7セグメントデコーダを使う

しかし、世の中には便利なものがあるものです。
汎用ロジックICの中に、その名も7セグメントデコーダという7セグ用の「74HC4511」というICがありますので、これを使いましょう。

74HC4511
これが「74HC4511」です。
足が16本あります。

74hc4511ds
(日立(現ルネサス)のデータシートから引用)

構造はこんな感じになっていて、左側のABCDの4ビットを使って0から9の信号を入力すると、それに対応した7セグ用の信号が右側のa~gから出力されます。
入力が4ビットなので、これを使えば4本の出力ポートで7セグ表示が可能になるというワケです。

他に、このICが動作するためには電源も必要なので、VCCには電源を接続します。
LT,BT,LEといったのは制御用?なので、今は特に気にしなくても良いかと。

ちなみに、10以上の信号を入力(4ビットなので15まで入力可能)した場合、全てのセグメントが消えて何も表示されません。

BASICで制御する

kairo

というわけで、74HC4511と7セグLEDをこんな感じで接続します。
LT,BT,LEは、VCCやGNDに固定します。
(本当は他にも抵抗やらコンデンサやらを追加した方がいいんだと思いますが省略しています)

あとは、表示したい数字をOUT命令に指定すれだけでOK!
OUT命令はパラメータが1つだと、2ビット化して各ポートに出力してくれるためです。

早速、「OUT 1」を実行してみると・・・
7seg_1
この通り。

7seg_2
「OUT 9」だとこうなります。
下の横棒が光らないデザインですね。

7seg_a
「OUT 10」とすると何も表示されません。

プログラムでグルグル回してみます。

10 FOR I=0 TO 9
20 OUT I
30 WAIT 30
40 NEXT
50 GOTO 10

電子ルーレット

グルグルカウントするだけでは面白くないので、電子ルーレットみたいなのを作ってみました。

10 REM INIT
20 M=0
30 W=0
50 REM RANDOM
60 A=RND(10)
70 IF R=A THEN GOTO 60
80 R=A
90 OUT R
100 IF M=0 AND BTN(0)=1 THEN M=1
110 IF M=1 THEN W=W+1
120 IF W>20 THEN M=2
130 WAIT W
140 IF M<>2 THEN GOTO 60
150 REM RESULT
160 FOR I=1 TO 5
170 OUT R
180 WAIT 30
190 OUT 10
200 WAIT 30
210 NEXT
220 GOTO 10

本体のスイッチを押すとルーレットが遅くなっていき、最後に出目の数値か点滅します。

数値はカウントアップではなくランダムです。

「ルーレットなら、別に7セグ使わなくても画面で表示すればいいじゃん」 とか言われそうですけど、それを無理矢理作るのが電子工作なのです。
・・・ほんとかよ(笑)

というわけで、ではまた。

投稿者:

IchigoJamで遊ぶ その4 アナログ入力で温度計

(投稿日:2016-03-18)

IchigoJamには(あのRaspberry Piにも付いていない)アナログ入力が備わっていて、0V~3.3Vの範囲の電圧を0~1023の数値として取得できます。
今回はこのアナログ入力を使ってみようと思います。

アナログ温度センサで温度を測る

IMG_8590_
見た目はトランジスタみたいですけど、温度センサです。
(この形だとトランジスタだと思っていた時期が私もありました)

これはTMP36というアナログ温度センサで、この三つある足のひとつから、温度が25℃の時には750mVが出力され、そこから温度が1℃変わる毎に電圧も10mV増減します。
なので、この足をIchigoJamのアナログ入力につないで電圧を測れば、温度が分かるというわけです。
(ちなみに残り2本の足は、電源とGND)

ondo
例によってつなぎ方はこんな感じ。

TMP36のVoutというのが温度の出力で、Vsが電源です。
今回はIN2のアナログ入力を使うので、VoutとIN2をつないでます。

IMG_8608_
実際の接続はこんな感じ。

アナログ入力の値はANAという関数で調べられるので、早速取得してみます。

tmp36
IchigoJamのアナログ入力は0~3.3Vが1024段階なので、1段階あたりは 3.3V ÷ 1024 ≒ 0.0032V =3.2mV。
アナログ入力の値が225ということは、3.2mvをかけると720mv。

25℃の時の750mVとの差は-30mVなので、温度は22℃という事になります。
若干肌寒い。

IMG_8610_
温度計で測ってみると22.8℃。
まぁまぁ近い値でした。

温度計プログラム

しかし、いちいちアナログ入力の値を調べて計算するのは面倒なので、こういうことはコンピュータにやらせましょう。

5 CLS
10 O=ANA(2)*32-5000
20 LOCATE 10,10
30 PRINT O/100;
40 PRINT ".";
50 PRINT O%100/10
60 GOTO 20

20行目、IchigoJamは小数を扱えない(たぶん)ので、アナログ入力の値に3.2mV分の32を掛け、500mV分の5000を引いておきます。
この値を100で割ると温度が求まるハズ。
40行目や60行目で、100で割ったり余りを求めたりして小数1桁まで表示してます。
温度の数字以外何も出さない、手抜きプログラムです。

では、実行~。

速すぎっ!
こんな温度計はせわしなさすぎる。

というわけで、途中にウェイトを入れて調整。

55 WAIT 10

まだ速い気もしますけど、そこはWAITを調整かな。
単にWAITを入れるだけではなくて、待ってる間にも値を測定し、それを平均化したものを表示するのが良いかもしれない。

温度計の分解能

温度計を動かしていると、値はころころ変わるわりに、小数部分は同じ数字ばかり出てきます。

これは、IcihgoJamのアナログ入力の分解能が約3.2mVであるのと、温度センサの1℃あたり10mVという仕様とが相まって、約0.3度単位でしか温度を測れないからでしょう。

もっと細かく温度を測ろうと思ったら、センサを1℃あたり20mVとかのものに換えたり、出力電圧を増幅したりが必要かと。

あるいは、上に書いた平均を求めるようにプログラムを改造しても、ある程度は細かくなりそうな気がします。

投稿者:

IchigoJamで遊ぶ その3 信号機を作る

(投稿日:2016-03-16)

信号機っぽいものを作ろう

前回は1個のLEDを制御したので、今度は三つくらい制御してみましょう。
せっかくなので、青(緑)・黄色(橙)・赤の3色のLEDを用意して、信号機もどきにチャレンジ。

led2
こんな感じで、前回同様にOUT1には緑色のLEDを取り付け、加えてOUT2に黄色のLED、OUT3に赤色のLEDを接続します。

前回は「OUT 1」というコマンドを使っていましたが、実はこのOUTコマンドはパラメータを二つ指定することができて、以下のように使えます。

OUT 1,1  'OUT1をオンにする
OUT 2,1  'OUT2をオンにする
OUT 1,0  'OUT1をオフにする

※オンにするというのは正確には電圧をHighにする事ですが、今のところは単純にオンとオフとしておきます。

OUT 2,1 にすると黄色のLEDが光り、OUT 3,1にすると赤色のLEDが光るというわけです。
簡単ですねぇ。

で、こんなプログラムで、緑が6秒、黄色が1.5秒、赤色が6秒というような信号機っぽいものを作ってみました。

10 OUT 1,1
20 WAIT 360
30 OUT 1,0
40 OUT 2,1
50 WAIT 90
60 OUT 2,0
70 OUT 3,1
80 WAIT 360
90 OUT 3,0
100 GOTO 10

見た目はちょっとアレですけど、信号機っぽい動作になってるハズ。

プログラムが分かりづらい!

しかし、このプログラムはちゃんと動きはしますが、出力先の指定とオンとオフが入り乱れていてややこしいし、なんだか無駄に長いです。

プログラムを一端途中で止めてから再度実行すると、初期化してないので青と赤が同時に光ったりする不具合もあります。

なので、ここは複数の出力を一度にオンとオフできる方法を使ってみます。
といっても、何のことは無い(前回も使っていた) OUTコマンドをパラメータ一つで使うだけなんですけどね。

OUTコマンドをパラメータ一つのみで使うと、そのパラメータを2進数にしたときの各ビットに対応したOUT端子がオン・オフされます。
たとえば、パラメータが「6」の場合、2進数だと「00000110」なので、OUT2とOUT3がオンで他はオフとなるわけです。

というわけで、プログラムをこういう風に書き換えました。

10 OUT 1
20 WAIT 360
30 OUT 2
40 WAIT 90
50 OUT 4
60 WAIT 360
70 GOTO 10

50行目の「OUT 4」 が、OUT4端子をオンにするものと思いがちですけど、実際は「OUT3端子のみオン」にしています。

個人的には分かりやすくなったと思ってますが、2進数を知らないと余計に分かりにくくなったかも?
ただ、プログラムは短くなったので良しとします・・・してください。

おまけ・歩行者用信号機

ほとんど同じようなプログラムですけど、歩行者用信号機も作ってみました。

10 OUT 1
20 WAIT 360
30 FOR I=1 TO 5
40 OUT 0
50 WAIT 30
60 OUT 1
70 WAIT 30
80 NEXT
90 OUT 4
100 WAIT 360
110 GOTO 10

動き的にはこちらの方が面白いかも(笑)

投稿者:

IchigoJamで遊ぶ その2

(投稿日:2016-03-13)

ハルチカ・・ではなくLチカ

今回は、電子工作での「Hello,World!」と言われるLチカ(LEDをチカチカ点滅させる)にチャレンジしてみましょう。

といっても、私の買ってきたIchigoJamのボードには最初からLEDが実装されています。
BASICにもLEDコマンドというものがあり、実に簡単に制御できます。

IMG_8544

というわけで、以下のようなプログラムを作成。

10 LED 1
20 WAIT 30
30 LED 0
40 WAIT 30
50 GOTO 10

LEDをオンにして、30フレーム(0.5秒)待機し、LEDをオフにして、また30フレーム待機、を繰り返すだけのプログラム。
実行させると・・・

Lチカ完成です!
(刺さってる赤い線やらは今のところ気にしないでください)

外付けLEDをチカチカさせる。

しかし、基板上のLEDをチカチカさせるだけでは、いまいち面白くない。
なので、ブレッドボードを用意して、そこにLEDを取り付けてチカチカさせてみます。


つなぎ方はこういう感じ。
IchigoJamの出力ポートのOUT1とGNDの間にLEDを接続。
LEDに電流が流れすぎないよう、途中に抵抗も入れます。


実際の接続。
白い線がOUT1、黒い線がGNDで、IchigoJamのそれぞれのポートに刺さってます。

プログラムも出力ポートを使用するように変更。
といっても「LED」を「OUT」に変えるだけですけどね。

10 OUT 1
20 WAIT 30
30 OUT 0
40 WAIT 30
50 GOTO 10

そして実行。

無事にチカチカしました。

やっていることは基板上のLEDを動かす事と変わり無いんですけど、自分で取り付けた部品を動かすというのが楽しいところですね。

次回、LEDでもうちょっと遊んでみたいと思います。

謝辞

回路図(と言うほどのものではないですが)の作成には、水魚堂さんのBSch3Vを使用させて頂きました。

ハルチカとは

初野晴さんによる日常系の青春ミステリ小説。及び、それを原作としたPA WORKS制作によるアニメーション。
個人的に好きな作品ですけど、Ichigo Jamには全然関係ありません。

投稿者:

IchigoJamで遊ぶ

(投稿日:2016-03-10)

IchigoJamとは

IMG_8544

ビデオ出力とPS2キーボードを接続すればすぐに使える、小さなワンボードコンピュータ。
電源ONでBASICが起動する、昔のMSXライクなパソコンです。

GPIOというハードウェアの入出力端子もついていて、これもBASICで簡単に制御できるので、電子工作にも最適。

「こどもパソコン」という触れ込みですが、MSX世代の大人の琴線に触れるのも間違いなし(?)

値段も1500円(完成品は2000円)とお手頃です。

Hello,World!

では、早速モニタをつないで起動。

ichigojam1
起動後の画面はこんな感じで、とてもシンプル。

続いて、Hello,World をプログラムしてみます。

ichigojam2
BASICのスタイルも昔懐かしい行番号付き。

入力できたら「RUN」でプログラムを実行します。

ichigojam3
動いた!

起動から、プログラム入力、実行までを動画にしてみました。

動くHello,World

これだけでは面白くないので、動くHello,World!というのを作ってみました。

プログラムはこんな感じです。

10 CLS
20 FOR X=0 TO 10
30 LOCATE X,10
40 PRINT" Hello,World!"
50 FOR I=0 TO 50:NEXT
60 NEXT

実行結果は、コチラ。

「Hellow,World!」の文字が左から右に動きます。
ただそれだけです。

ポイントは、40行目で表示する「Hello,World!」の前にスペースを一つ置いてあり、これにより先頭文字を消しながら動いているように見せかけていること。
あと、50行目の何もしないループで時間稼ぎをしてるところでしょうか。

まぁ、今となっては、ほとんど何の役にも立たないテクニックですけどね。

実際、IchigoJam BASICには指定されたフレームだけ待機するWAITというコマンドがあるので、50行目は以下のようにするのが良いかも。

50 WAIT 5

というわけで、IchigoJamでは、もうちょっと遊んでみたいと思います。

投稿者: