BASICという昔のプログラミング言語を使用して絵を描いたので記録として書いてみた。
いきさつ
日課である倉庫の整理をしていたところ、何故か椅子の上にPC98が置いてあったので中身を漁ることに。結果いくつかのイラストを発見。大昔は座標を指定して線を引いたりすることで絵を描いたりしていたとTwitterで見た記憶と結びつき、自分もやってみることに。
やること
BASICというプログラミング言語を使用した絵の描画。
PC98/BASICについて
PC98はNECが1980年代から販売していたパソコンの総称。今の一般的なパソコンとRAM容量で比較すると約1万倍性能に差がある。ちなみに物理部には4台のPC98が眠っている。
BASICは1964年に誕生した初期のプログラミング言語の1つ。Beginner's All-purpose Symbolic Instruction Code(初心者向け汎用記号命令コード)の頭文字を取って名付けられた。これのいくつかある派生形の1つであるMicrosoftが開発したGWBASICを今回は使用する。
実行準備
GWBASICは太古の遺物なのでもちろん今のWindowsPCでは動作しない。年代を合わせて物理部にあるPC98でコードを書いても良いのだが、自宅での作業を考慮して今回は自分のWindowsPCを使用する。 Windows11上で動作させるためにDOSBoxというエミュレータを使用。また、描く対象については直線が多く描きやすそうだったので物理部のロゴに決定。

描画
使用する関数紹介
座標などの数値を入力したら線を引いてくれる関数がGWBASICには備わっているのでそれを用いて絵を描いていく。そんな関数たちの紹介。
LINE直線を引く。点Aから点Bまで線を引くには LINE(\(X_{A}\),\(Y_{A}\))-(\(X_{B}\),\(Y_{B}\)) と書く。CIRCLE楕円を描く。楕円の中心\(O\)、x軸方向の半径\(r\)、始点の傾角\(θ_1\)、終点の傾角\(θ_2\)、楕円の縦横比\(a\)を指定する必要がある。 CIRCLE(\(X_o,Y_o\)),\(r\),2,\(θ_!\),\(θ_2\),\(a\) と書くと楕円の一部を描画してくれる。PAINT塗りつぶす。図形の内側の座標を代入するとそれを塗りつぶしてくれる。PAINT(\(X,Y\)) と書くだけでいい。楽!
この3つの関数のみで図形を描くことができる(らしい)。 しかしロゴの各点を座標でおかないとこれらの関数が使えなく、がんばって計測した。

実際描いてみて
A
ものすごく簡単。直線を引くだけ。PAINT関数も正常に動作した。
P,C
結構めんどい。単純な直線の部分をとりあえず描画。曲線部を弧としたときの中心とx,yが最大・最小になる点の座標を調べてGeminiAIくんに投げたら式を考えてくれた、優秀!

周りの枠みたいなやつ
Aとほとんどやることは同じだが、右下にあるネジの描画に手間がかかった。やることはP、Cと同じだがサイズが小さく調整が難しかった。

なんか微妙。右下の部分のクオリティをもっと上げられると良いかも。
おわりに
本当はPC98でコード実行したかったのだが、別の作業をPC98上で行っていたところ壊れてしまったので仮想環境での実行になってしまった。残念。
原理的にはSVGから直接変換できそうだなーと思ったので興味を持った人は実装してみてください。
ここまで読んでいただきありがとうございました。
以下にGWBASICのコードとおまけ話を載せています。気が向いたら読んでみてください。
実際のコード
| |
細かい話
パス指定
MS-DOSでは9文字以上のパスを単純に入力できず、以下の規則に従って指定するパスで入力しなければならない。(例:Documents→Docume~1)
ここで問題になるのが~(チルダ)である。DOSBoxでのテキストの入力は普段我々が使用しているキーボードと配列が違っている。その関係上~を入力することができないので、わざわざ設定を弄る必要がある。といってもキーボードのキー割り当てを変更するだけだが。
- 参考: DOSBoxのキーボード問題

https://indo-ka.sakura.ne.jp/dos_v/dosbox/keyboard.html

座標の特定
ロゴのSVGファイルを持っていたのでそれを製図ソフトに挿入し、座標を調べた。使用したのはAutodeskFusion
BASIC実行画面
何もしないと画像のようにログが溜まって描画された図が見えづらくなるが、CLSコマンドを使用してログ表示を消去することができる。
