8bit 時代のプログラミング事情を訪ねて
TRANSCRIPT
suno (すの)
8bit 時代のプログラミング
事情を訪ねて
2010.5.22(Sat) 於 長野市・もんぜんぷら座
● 春原 宏保 (すのはら ひろやす)
● プログラマー (Win32/Web)
● 議事録係http://d.hatena.ne.jp/suno88/
NHK 山口放送局長 春原秀一郎(元ワシントン支局長)
今回の NSEG 勉強会は
JK がいない!
↓
平均年齢が高い!
そこで、ちょっとばかり
昔話でも……。
~私のパソコン遍歴~
● 1980 年 5 月(今から 30 年前!)
松下電器 JR-100
● RAM 16KB
● モノクロ画面
● 英字は大文字のみ
● サウンドなし
~私のパソコン遍歴~
● 1981 年日本電気 PC-6001
● RAM 16KB
● 8 オクターブ 3 重和音
● 128×192 ドット4 色表示のグラフィック
すがやみつる氏(@msugaya)の著書『こんにちはマイコン』でこの世界に入った人、多数。
~私のパソコン遍歴~
● 1983 年 5 月日電 PC-8001mk2
● RAM 64KB
● 320×200 ドット4 色表示のグラフィック
● 晴れてナイコン族卒業!
PC-8001mk2 とは──
● 名機 PC-8001 の後継機種
● Z80 4MHz
● PC-8001 の「N-BASIC」とPC-8001mk2 の「N80-BASIC」の2 モード
PC-8001 は NHK テレビ「マイコン入門」に「機種 X」として登場
我が愛機 PC-8001mk2 のプログラミング環境は……
● 電源を入れると BASIC 環境(OS という概念はなし)
● 機械語(マシン語)も 16 進ダンプ入力可能(アセンブラはなし)
1. メモリの制約がキツい
電源投入直後の画面
ROM-BASIC ではフロッピーディスクを使えない→フロッピー ディスクを使うには N80-Disk BASIC を 起動
N80-Disk BASIC 起動直後の画面
BEEP 音しか鳴らない P8mk2 にサウンドボードを挿す高校生の私→サウンド拡張BASIC を 読み込まないと音が出ない
N80-Disk BASIC + サウンド拡張BASIC で起動直後の状態
マルチステートメントを多用してメモリ節約
10 WIDTH 40,2520 CONSOLE 0,25,0,130 S=10040 P1=3
10 WIDTH 40,25:CONSOLE 0,25,0,1:S=100:P1=3
無駄なコメントは書かない
100 REM ザヒョウケイノ ヘンスウヲ ショキカ110 X1=0:X2=0:Y1=0:Y2=0:M=5
100 '110 X1=0:X2=0:Y1=0:Y2=0:M=5
書かなくていいことは書かない
1050 LET MX=1001060 IF A1=0 THEN GOTO 350
1050 MX=1001060 IF A1=0 THEN 350
余談ながら、マシン語でも……
LD A, 00H ; A <- 00H
アセンブルすると「3E 00」の 2 バイト
XOR A ; A <- A XOR A
アセンブルすると「AF」の 1 バイト
2. 言語の制約がキツい
N(80)-BASIC の制約
● 変数名は 2 文字まで
● 構造化 BASIC が使えない
● while 文がなく、goto のみ
GOTO 文による制御構造
250 WHILE F3>0260 IF X3>0 THEN Y3=-Y3270 F3=F3-1280 WEND290 T1=0:T2=0
250 IF F3=0 THEN 290260 IF X3>0 THEN Y3=-Y3270 F3=F3-1280 GOTO 250290 T1=0:T2=0
3. 実行速度がキツい
なんてったって BASIC
● 画面表示も遅い
● 8bit だしね!
DMA(Direct Memory Access) を止めて実行速度アップ
10 OUT 104,0 ' DMA off20 TIME$="00:00:00"30 FOR I=1 To 500040 S=S+I50 NEXT60 WIDTH, ' DMA on70 PRINT S80 PRINT TIME$
実行結果……DMA off 17 秒、DMA on 22 秒
変数を整数型宣言して高速化
10 DEFINT A-G
以降、A~G で始まる変数は整数型とみなされ、若干速くなる
10 DEFINT A-Z
すべての変数を整数型とする(ゲームプログラミングでは定石)
IF 文を避けて高速化
500 P1=5510 IF X1>0 THEN P1=P1+5520 IF Y1>0 THEN P1=P1-3
500 P1=5+(X1>0)*-1+(Y1>0)*3
論理式が真の値は -1、偽の値は 0
結論
年は取りたくないねぇ……。
……そうじゃなくて :-)
速度最優先・メモリ効率最優先プログラマーの都合なんてお構いなし機械に余裕がなかった
当時のプログラミング環境
読みやすさ優先・ライブラリー充実富豪的プログラミング真の問題解決に集中できる環境
現在のプログラミング環境
プログラマーにとって
いい時代になりました
青年よ、もっとプログラムを書こう!
ところで、
30 年前(1980 年)の
5/22 は……
が生まれた日でもありますが……
妻の生まれた日につき、本日の懇親会は欠席させてくださいm(_ _)m
※今回の NSEG 勉強会は JK がいないので、 無意味に JK 時代の 写真を貼ってみた。
お目汚し、失礼しました。
すの (春原 宏保)http://d.hatena.ne.jp/suno88/
http://twitter.com/suno88
これはごまよごし。