8bit 時代のプログラミング事情を訪ねて

37
suno (すの) 8bit 時代のプログラミング 事情を訪ねて 2010.5.22(Sat) 於 長野市・もんぜんぷら座

Upload: suno88

Post on 25-Jun-2015

2.551 views

Category:

Technology


7 download

TRANSCRIPT

Page 1: 8bit 時代のプログラミング事情を訪ねて

suno (すの)

8bit 時代のプログラミング

事情を訪ねて

2010.5.22(Sat) 於 長野市・もんぜんぷら座

Page 2: 8bit 時代のプログラミング事情を訪ねて

● 春原 宏保 (すのはら ひろやす)

● プログラマー (Win32/Web)

● 議事録係http://d.hatena.ne.jp/suno88/

NHK 山口放送局長 春原秀一郎(元ワシントン支局長)

Page 3: 8bit 時代のプログラミング事情を訪ねて

今回の NSEG 勉強会は

JK がいない!

Page 4: 8bit 時代のプログラミング事情を訪ねて

平均年齢が高い!

Page 5: 8bit 時代のプログラミング事情を訪ねて

そこで、ちょっとばかり

昔話でも……。

Page 6: 8bit 時代のプログラミング事情を訪ねて

~私のパソコン遍歴~

● 1980 年 5 月(今から 30 年前!)

松下電器 JR-100

● RAM 16KB

● モノクロ画面

● 英字は大文字のみ

● サウンドなし

Page 7: 8bit 時代のプログラミング事情を訪ねて

~私のパソコン遍歴~

● 1981 年日本電気 PC-6001

● RAM 16KB

● 8 オクターブ 3 重和音

● 128×192 ドット4 色表示のグラフィック

Page 8: 8bit 時代のプログラミング事情を訪ねて

すがやみつる氏(@msugaya)の著書『こんにちはマイコン』でこの世界に入った人、多数。

Page 9: 8bit 時代のプログラミング事情を訪ねて

~私のパソコン遍歴~

● 1983 年 5 月日電 PC-8001mk2

● RAM 64KB

● 320×200 ドット4 色表示のグラフィック

● 晴れてナイコン族卒業!

Page 10: 8bit 時代のプログラミング事情を訪ねて

PC-8001mk2 とは──

● 名機 PC-8001 の後継機種

● Z80 4MHz

● PC-8001 の「N-BASIC」とPC-8001mk2 の「N80-BASIC」の2 モード

Page 11: 8bit 時代のプログラミング事情を訪ねて

PC-8001 は NHK テレビ「マイコン入門」に「機種 X」として登場

Page 12: 8bit 時代のプログラミング事情を訪ねて

我が愛機 PC-8001mk2 のプログラミング環境は……

● 電源を入れると BASIC 環境(OS という概念はなし)

● 機械語(マシン語)も 16 進ダンプ入力可能(アセンブラはなし)

Page 13: 8bit 時代のプログラミング事情を訪ねて

1. メモリの制約がキツい

Page 14: 8bit 時代のプログラミング事情を訪ねて

電源投入直後の画面

Page 15: 8bit 時代のプログラミング事情を訪ねて

ROM-BASIC ではフロッピーディスクを使えない→フロッピー ディスクを使うには N80-Disk BASIC を 起動

Page 16: 8bit 時代のプログラミング事情を訪ねて

N80-Disk BASIC 起動直後の画面

Page 17: 8bit 時代のプログラミング事情を訪ねて

BEEP 音しか鳴らない P8mk2 にサウンドボードを挿す高校生の私→サウンド拡張BASIC を 読み込まないと音が出ない

Page 18: 8bit 時代のプログラミング事情を訪ねて

N80-Disk BASIC + サウンド拡張BASIC で起動直後の状態

Page 19: 8bit 時代のプログラミング事情を訪ねて

マルチステートメントを多用してメモリ節約

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

Page 20: 8bit 時代のプログラミング事情を訪ねて

無駄なコメントは書かない

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

Page 21: 8bit 時代のプログラミング事情を訪ねて

書かなくていいことは書かない

1050 LET MX=1001060 IF A1=0 THEN GOTO 350

1050 MX=1001060 IF A1=0 THEN 350

Page 22: 8bit 時代のプログラミング事情を訪ねて

余談ながら、マシン語でも……

LD A, 00H ; A <- 00H

アセンブルすると「3E 00」の 2 バイト

XOR A ; A <- A XOR A

アセンブルすると「AF」の 1 バイト

Page 23: 8bit 時代のプログラミング事情を訪ねて

2. 言語の制約がキツい

Page 24: 8bit 時代のプログラミング事情を訪ねて

N(80)-BASIC の制約

● 変数名は 2 文字まで

● 構造化 BASIC が使えない

● while 文がなく、goto のみ

Page 25: 8bit 時代のプログラミング事情を訪ねて

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

Page 26: 8bit 時代のプログラミング事情を訪ねて

3. 実行速度がキツい

Page 27: 8bit 時代のプログラミング事情を訪ねて

なんてったって BASIC

● 画面表示も遅い

● 8bit だしね!

Page 28: 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 秒

Page 29: 8bit 時代のプログラミング事情を訪ねて

変数を整数型宣言して高速化

10 DEFINT A-G

以降、A~G で始まる変数は整数型とみなされ、若干速くなる

10 DEFINT A-Z

すべての変数を整数型とする(ゲームプログラミングでは定石)

Page 30: 8bit 時代のプログラミング事情を訪ねて

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

Page 31: 8bit 時代のプログラミング事情を訪ねて

結論

年は取りたくないねぇ……。

……そうじゃなくて :-)

Page 32: 8bit 時代のプログラミング事情を訪ねて

速度最優先・メモリ効率最優先プログラマーの都合なんてお構いなし機械に余裕がなかった

当時のプログラミング環境

読みやすさ優先・ライブラリー充実富豪的プログラミング真の問題解決に集中できる環境

現在のプログラミング環境

Page 33: 8bit 時代のプログラミング事情を訪ねて

プログラマーにとって

いい時代になりました

青年よ、もっとプログラムを書こう!

Page 34: 8bit 時代のプログラミング事情を訪ねて

 ところで、

30 年前(1980 年)の

5/22 は……

Page 35: 8bit 時代のプログラミング事情を訪ねて

が生まれた日でもありますが……

Page 36: 8bit 時代のプログラミング事情を訪ねて

妻の生まれた日につき、本日の懇親会は欠席させてくださいm(_ _)m

※今回の NSEG 勉強会は JK がいないので、 無意味に JK 時代の 写真を貼ってみた。

Page 37: 8bit 時代のプログラミング事情を訪ねて

お目汚し、失礼しました。

すの (春原 宏保)http://d.hatena.ne.jp/suno88/

http://twitter.com/suno88

 これはごまよごし。