確率を使った円周率の求め方です
この記事はリニューアルしました
https://ulprojectmail.blogspot.com/2022/04/n88-basicpi.html
N88-BASICで円周率
確率を使った円周率の求め方です
この記事はリニューアルしました
https://ulprojectmail.blogspot.com/2022/04/n88-basicpi.html
N88-BASICで円周率
VL-BASICのPLAY(MML)をSMF(.mid)に変換
N88-BASIC(PC-9801)、NL-BASIC、VL-BASICのPLAY(MML)
やVL-BASICのMPU PLAY(MPU MIDI)などの
演奏データをSMF(Standard MIDI File)
~.midに変換する方法を紹介します。
(ただし、VL-BASICで動くものに限ります)
mid20516.zip(tron2txt.exe、txt2mid.exe)、
VL-BASICは以下からダウンロードして下さい。
VL-BASIC(N88-BASIC互換?)ホームページへのリンク
ホームページに書いてあるパスワードを入力して、
Readme.txtを読んで、遊んで見て下さい。
すべて、windows用です。
次の3Stepで変換します。
変換方法(MPU TRONの出力をa.txtで説明)
Step1
VL-BASICを起動し、
LOAD "ファイル名" で演奏プログラムをロードします。
CMD MPU ON
MPU TRON("a")
RUN 音はなりませんが演奏データ(MIDI)を出力します。
MPU TROFF ファイルをクローズします。
Step2
a.txtを
tron2txt.exe
に重ねる
Step3
a_txt.txtを
txt2mid.exe
に重ねる
a_txt_txt.midを
MIDIプレーヤーで演奏
もう少し、詳しく解説
Step1
VL-BASICのPLAYやMPU PLAYなどで演奏した。
データ(MIDI)をファイルに出力します。
LOAD "ファイル名" で演奏プログラムをロードします。
CMD MPU ON
MPU TRON("a") aは任意のファイル名
RUN 音はなりませんが演奏データ(MIDI)を出力します。
MPU TROFF ファイルをクローズします。
a.txtができます。
内容は
wait(msec), midiデータ...
...
です。
Step2
tron2txt.exe
にa.txtを重ねるとa_txt.txtを出力します。
重ねるファイル名に.が複数個あると誤動作します。
a.txtのwaitをSMF(Standard MIDI File)の
wait形式に変換しヘッダーを付けます。
二進数で(16進では最大FFFFFFF)
aaaa bbbbbbbb cccccccc dddddddd
は、SMF形式では(16進では最大FFFFFF7F)
1aaaabbb 1bbbbbcc 1ccccccd 0ddddddd
1byteの最上位bitが1は続きがあり
0はそこで終わりという符号で、
1バイト7bitで数値を表します。
例
十進 16進 SMF16進
0 → 0 00 00 00 → 00
127 → 0 00 00 7F → 7F
128 → 0 00 00 80 → 81 00
255 → 0 00 00 FF → 81 7F
256 → 0 00 01 00 → 82 00
Step3
txt2mid.exe
にa_txt.txtを重ねるとa_txt_txt.midを出力します。
重ねるファイル名に.が複数個あると誤動作します。
.txtは.midに、それ以外は.txtに変換します。
バイナリファイルを、16進数のダンプリストにして
テキストファイルに出力します。
例
4D,54,68,64,00,00,00,06,00,00,00,01,01,E0,4D,54,72 ; MThd・・・・・・・・・潼Tr
....
また、16進を,で区切った(;はコメント)テキストファイルを
バイナリーに変換できます。
(拡張子は.midになりますが、必要に応じて変更して下さい。)
N88-BASICで円と色塗り
下記リストをマウスで選択しCtrl+cでコピーし、
NL-BASICの画面でAlt+v(Ctrl+vではないので注意)
でプログラムを読込めます。
100 SCREEN 3
110 CLS 3
120 FOR R=16 TO 160 STEP 16
130 CIRCLE(320, 200), R, 6
140 NEXT
150 VIEW(0, 200)-(639, 399)
160 ROLL , -16
170 VIEW(0, 0)-(639, 399)
180 A$ = CHR$(&HFF)+CHR$(&H55)+CHR$(&H55)+CHR$(&HFF)+CHR$(&HAA)+CHR$(&HAA)
190 PAINT(320, 300), A$, 6
NL-BASIC最新版以外では不具合の為動きません
ので、下記よりダウンロードして下さい。
NL-BASICは、下記リンクよりダウンロードできます。
NL-BASIC(N88-BASIC互換?)ホームページへのリンク
Readme.txtを読んで、遊んで見て下さい。
プログラムの説明
SCREEN 3 (640×400 カラー2page)でVIEWをリセット
CLS 3 でテキスト(1)とグラフィック画面(2)の両方(1+2=3)消去
CIRCLE(320,200),R,Cで同心円を描き、
VIEW(0,200)-(639,399)で画面下半分のみ描画にし、
ROLL , -16で右に16dotずらし、
VIEW(0,0)-(639,399)で全画面描画にし、
PAINTで以下のパターンでタイルペイントしました。
16進 2進
Blue FF 11111111 1の位(この位が1なら1)
Red 55 01010101 2の位(この位が1なら2)
Green 55 01010101 4の位(この位が1なら4)
17171717 … 合計
Blue FF 11111111 1の位(この位が1なら1)
Red AA 10101010 2の位(この位が1なら2)
Green AA 10101010 4の位(この位が1なら4)
71717171 … 合計
(0:黒 1:青 2:赤 3:紫 4:緑 5:水色 6:黄 7:白)
よって、A$は、
青白青白...
白青白青...
...
というタイルパターンで塗りつぶします。
以下、NL-BASICマニュアルから抜粋
詳しくはマニュアルを見て下さい
多少違いはありますが、
PC-9801(N88-BASIC)のマニュアルの方が
より詳しいと思います。
CIRCLE(X,Y),R[,C][,a1][,a2][,e][,F][,B/T$]
半径RのC色の円を描く
a1~a2ラジアンの弧を描画(a1,a2 < 0で弦を描く)
楕円半径比a;b = 1:e 大きいほうがRになる
FならB色(タイルパターンT$)で塗りつぶす
VIEW(X1,Y1)-(X2,Y2)[,C][,B]
描画領域の指定、C色で塗潰し、B色の枠で描画領域の外を囲む
ROLL [H][,W][,N/Y]
VIEW内を上下H,左右Wドットスクロールする
H>0上,W>0左 空いた領域は、N又は省略は0、Yは消去色で埋める
勝手にリンクの紹介です(ゲーム保存協会)
N88-BASICのプログラムを探していたところ、
N-BASIC(Mini PC-8001)のページに行きつき、
そこから、さらにゲーム保存協会のページに
たどり着きました。
勝手にリンクを貼っておきます。
本格的な感じがします。
主に80年代のデジタルゲームを中心に保存と
書いてありますが、
BASICのお絵描きプログラムなども保存されて
いるのでしょうか