N88-BASIC
Language
Sunflat
自己紹介
• Twitter: @sunflat
• 仕事
• Sunflat GAMES: ゲーム開発
• Misoca: 請求書サービス開発
• ドラクエ10: 冒険者
N88-BASIC言語とは?
• 昔、NECのPC-88/PC-98シリーズに
搭載されていたプログラミング言語
• 25年ほど前(1991年〜)
EPSON製のPC-98互換機で
N88-BASICを使っていた
• 当時自分で書いたプログラムを
読み返してみよう!
EPSON PC-286C
• PC-98互換機
• CPU 80286 10MHz
• RAM 640KB
• FDD2基
• NECのPC-98より
だいぶ安かった
• 定価168,000円
• キーボード一体型
MSXっぽくて良い
ディスクのデータ吸出し
• エミュレータで実行させるため、
当時のFDのデータを吸い出した
• ノート型PC-98をヤフオクで落札
(2008年ごろ。3000円ぐらい)
• P.D.P.というツールで吸出し
http://d.hatena.ne.jp/sunflat/20081205
発掘されたプログラム例
• エミュレータ(T98-Next)で動作デモ
• 洞窟探検ゲーム(スペースキーで操作)
洞窟探検ゲームのプログラム
• 当時はYISoftと名乗っていた
謎1: ぎっしり詰まったコード
• Minifyした結果ではない
MSX-FANより
• MSX-FAN(雑誌)に掲載された1画面プログラム
などを打ち込んでプログラミングを覚えた
• 「長方形にぎっしり詰まったコード = 美しいコード」
という、歪んだ美意識が育まれた
謎2: 無意味なコード
• 変数名も適当(キーボード配置が近い3文字)
無意味なコードを除去後
• 動作は同じだが、長方形が崩れて美しくない
• 綺麗な長方形にするために、わざと
無意味なコードを追加したと思われる
謎3: 周辺チップへの直接アクセス
• OUT命令: グラフィックチップ(GDC)にアクセスして
映像を縦に拡大表示している(高速化のため)
• VOICE REG 命令: FM音源チップ(YM2608)に
アクセスして音を出している(詳細不明)
謎4: バイナリデータ列
機械語(マシン語)
自機の画像
パレット(色)
機械語の中身を解析
• Online Disassembler(Webサービス)
• i8086(16ビット)の機械語をアセンブリ言語に変換
VRAMのデータをスライドさせて、
画面を左スクロールしている
その他は、割と普通のコード
• 読みづらいけど
初期設定
データ読込
描画
自機移動
ゲームオーバー
まとめ
• 昔N88-BASICで書いたプログラムを
読んでみたが、解析が大変だった
• ぎっしり詰まったコードスタイル
• 高速化のため、一部が機械語
• ポート番号などを直接数値で記述
• 25年後に読んでも分かりやすい
ソースコードを書こう!

N88-BASIC Language