発掘隊では、TK-80の 2K-BASIC環境構築のために「東大版」の PATBから調べ始めました。
過去に誌上で発表された 2K-BASICの中から、発掘隊での標準構成を決めたいという目論見もありました。
「東大版」はいくつかの媒体で発表されており、バージョンの異なるものも存在する様だったので、 最初期の物と思われる ASCII誌掲載のアセンブルリストを打ち込み、各バーションの差分に対応する形に調整しました。
詳細は後述しますが、細かな差異が多すぎて発掘環境の標準化という目的に叶う精度での情報提供は困難と判断し、 オリジナルソースに TK-80用のパッチを当てる形で紹介する方向で再調査することにしました。
このページは、そんな感じで放棄に至った十年以上前の記録を基に書き起こしたものです。 いわゆる供養というやつです。 自分でも訳が分からなくなってしまった呪文の様な記述もありますが、ご容赦ください。
バイナリで入手したものを逆アセンブルしたらしくラベルがオリジナルと異なっています。 国内で発表された拡張記事はこのアセンブルソースを前提としたものが多いので注意が必要です。
発表者の名義は違いますが、ASCII誌に掲載されたものと I/O誌に掲載されたものは基本的に同じ様です。
オリジナルのソースにはROM専用版からRAM対応版への変更方法(実装)がコメントで記述されているのですが、 バイナリからの変更では各自で対応している様です。 基本的に RST を CALL に書き変えるだけですが、エントリまわりに差異が生じています。
オリジナルの PATB は TTY仕様ですが、住宅内での運用に適していませんしお金もかかります。 TK-80では、キーボードと「VRAM」を拡張したシステム上に移植する例が多かった様に感じます。 具体的には、採用例が多かったかは不明ですが、ADTEK社の KB-02(キーボード) と TVD-02(「VRAM」) を接続した例が書籍に良く載りました。 この構成を採用した場合は ADTEK社の「PROM-04」を使ってソフトウェア側の実装を簡素化することができるという利点もありました。
ただこれにも欠点があって、コントロールコードの扱いやカーソルメンテで BASICのスクリーンエディタと競合する部分があり、 キレイに動作させようとすると BASIC側がパッチまみれになってしまいます。
スクリーンエディタ側の実装を生かしながら自力実装した方が納まりが良くなるので、 u80付属の PATBの I/Oルーチンには「PROM-04」を使用しないことにしましたが、 ASCII誌, I/O誌掲載の TK-80用 PATB の実行には必要となる情報なのでここに残しておくことにしました。
「PROM-04」は、TVD-02 と KB-02 用の入出力ルーチンです。 ROM で供給されていて、TK-80 の空きソケット(0x0400~0x04FF)に挿して使用します。 「PROM-04」は書籍にアセンブルリストが掲載されているため現在でも入手可能です。
アセンブルリストにはオブジェクトコードも載っていますので、そのまま打ち込めます。 0328H あたりのオブジェクトとソースが一致しませんが、ソースを無視して、オブジェクトを打ち込んでください。
| 0325:A0 | ANA | B | CLEAR UPPER 2BITS | ||
| 0326:F640 | ORI | 0100_0000B | SET "KANA BIT" | ||
| ----:-- | ;; × | MOV | B, A | SAVE CHARACTER DATA | |
| 0328:06 | DB | 06H | MVI B,0A0H → SKIP NEXT 'ANA B' | ||
| 0329:A0 | OU30: | ANA | B | CLEAR UPPER 2BITS | |
| 032A:77 | MOV | M, A | WRITE CHARACTER | ||
アセンブルリスト:東京大学大型計算センター提供
合本リストは未修正
修正済み:TK-80 2K BASIC と文法 (ASCII:1977/11) 飯田陽一
TK-80 の ROMをバンク切り替えできるようにして、メモリマップを合わせたもの
0x2000~にリロケートしたもの
略
略
メモリマップの関係から機能拡張時にスパゲッティになりやすい様です。
IN33 はキー・リリースまで戻ってこないので、BREAK ではストローブの事前チェックが必要
上記実装だけでは、キーを押している間カーソルを点滅しながら止まる / 未対策
GETL1 のポーリングループはそのままでも動作するが、カーソルの点滅表示が死ぬ
→ ここのループを廃し、IN33 側に任せる
IN33 側に Ctrl-C(画面クリア)が実装済みで、コードが返って来ない
→ Ctrl-B で代用
PUT がうまく動いていない様です。(OUT33 が Aレジを壊す)
→ 独自に書き変え
ディスプレイコード:0x00 にグリフが設定されている環境用のパッチです。
ASCII誌掲載のアセンブルリストを基に、全バリエーション対応したソースからの抜粋です。
独自の BugFIX等が含まれるバリエーションもあるため、メモリマップは記事に掲載されたものと異なるかもしれません。
[BugFIX:5] は、RND の読み出しアドレス初期化漏れ対応です。
;=======================================================================================;
;・ASCII版 (TVD-02用) ;
;・TVD-02, KB-02 対応は独自コードを追加 ;
;・レイアウト: ;東大版 ;ASCII版;I/O別冊:2 ;I/O ★拡張★;
; ; (I/O版); ;改良版 (2K拡張);カナ版 (12K);
; ;---------------;-------;---------------;---------------;
; MB ;SDK-80 ;TK-80 ;SDK-80 ;TK-80 ;
; OUT ;TTY ;TVD-02 ;TTY ;TVD-02 ;
; IN ;TTY ;(独自) ;TTY ;KB-02 ;
;-------------------------------;-------;-------;-------;-------;-------;-------;-------;
STACK EQU 4000H ;1400H ;1400H ;4000H ;1400H ;1800H ;1400H ;4000H ;
VTOP EQU 3F00H ;1300H ;1300H ;3F00H ;1300H ;1700H ;1300H ;3F00H ;
LBUF EQU 3F37H ;1337H ;1337H ;3F37H ;1337H ;1737H ;1337H ;3F37H ;
MSTK EQU 3FA7H ;13A7H ;13A7H ;3FA7H ;13A7H ;17A7H ;13A7H ;3FA7H ;
IENT EQU 2000H ;0000H ;0400H ;2000H ;0400H ;0400H ;0400H ;0400H ;
;-------------------------------;-------;-------;-------;-------;-------;-------;-------;
VENT EQU 2800H ;1000H ;1000H ;2800H ;1000H ;1000H ;1000H ;1000H ;※VENT:I/O版(東大版では未定儀)
;=======================================================================================;
; [BugFIX:5] (掲載リストとの整合チェック用テーブルを兼ねる → RBTM で末尾アドレスを設定&コード差し替え)
;-------------------------------;-------;-------;-------;-------;-------;-------;-------; Fix前の値
RW00 EQU IENT ;0000H ;0000H ;2000H ;0000H ;0000H ;0000H ;0400 ;※独自定儀(RND) 0000H(不定?)
RTOP EQU IENT ;0000H ;0000H ;2000H ;0000H ;0000H ;0000H ;0400 ;※独自定儀(RND) 0000H
;RBTM EQU FFFFH ;★ ;07FFH ;07FFH ;26FFH ;07FFH ;07FFH ;07FFH ;0BFF ;※独自定儀(RND) 07FFH
;=======================================================================================;
; TTY ;東大版 ;I/O版 ;ASCII版;I/O改版 ;カナ版 ;
;-------------------------------;-------;-------;-------;-------;-------;-------;-------;
;IFLG EQU 0FBH ;0FBH ; ;----- ;3BH ;3BH ;----- ;-------;※IFLG:I/O改版では未定儀(写植で直パッチ)
;OFLG EQU 0FBH ;0FBH ; ;----- ;3BH ;3BH ;----- ;-------;※OFLG:I/O改版では未定儀(写植で直パッチ)
;OCNT EQU 0FBH ;0FBH ; ;----- ;----- ;----- ;----- ;-------;※OCNT:I/O改版では未定儀(未使用)
;ITTY EQU 0FAH ;0FAH ; ;----- ;3AH ;3AH ;----- ;-------;※ITTY:I/O改版では未定儀(写植で直パッチ)
;OTTY EQU 0FAH ;0FAH ; ;----- ;3AH ;3AH ;----- ;-------;※OTTY:I/O改版では未定儀(写植で直パッチ)
;IMSK EQU 02H ;02H ; ;----- ;02H ;02H ;----- ;-------;※IMSK:I/O改版では未定儀(直値)
;OMSK EQU 01H ;01H ; ;----- ;----- ;----- ;----- ;-------;※OMSK:I/O改版では未定儀(未使用)
;=======================================================================================;
;
; +- - - - - - - - - - - - - - - -+ 1000H
; : :
; : :
; : 空き(4Kbyte) : ※拡張用
; : :
; : :
; IENT +-------------------------------+ 2000H
; | |
; | |
; | インタプリタ |
; | |
; | |
; IEND +-------------------------------+
; : 空き(100byte強) :
; VENT +-------------------------------+ 2800H
; | ワーク(21byte) |
; OTOP +-------------------------------+ 2815H
; : :
; : :
; : ユーザー(5.8Kbyte) :
; : :
; : :
; VTOP +- - - - - - - - - - - - - - - -+ 3F00H
; : 変数 :
; LBUF +- - - - - - - - - - - - - - - -+ 3F37H
; : ラインバッファ :
; FULL +- - - - - - - - - - - - - - - -+
; : :
; MSTK +- - - - - - - - - - - - - - - -+ 3FA7H
; : :
; STACK +- - - - - - - - - - - - - - - -+ 4000H
;
ソノシート収録イメージ 4byte目 0xFB は 0xF3(DI) の間違い?
初出時と合本では記事の構成,内容が異なっていて混乱しがちなので別表にまとめました。
詳細未調査
略
発掘作業用に纏めていた資料(途中で放棄)からの抜粋です。
資料の入手性から、国会図書館の蔵書の利用を想定しています。
1巻1号から2巻9号(1977.9)までの蔵書は合本のみの様です。 合本は一部の記事がアップデートされたり再編集された形跡があります。
オリジナルの資料を参照する場合は、このページの記述のママではうまくいかないかもしれません。
関連資料は下表にまとめましたが、必須なのは下記2点です
| 掲載号 | 記事タイトル / 掲載頁, 著者, コラム名等 / 記事内容 | ||
|---|---|---|---|
| I/O:1977.9 (合本) | キャラクタ・ディスプレイを使いこなそう! | ||
| 48- 56 | 鎌田勇,片桐明 | 特集:BASICを使いこなそう! | |
・TVD-02
・■PROM-04 アセンブルリスト ・PROM-04 フローチャート ・テストプログラム ・万年カレンダー (TVD-02 + KB-02L) ※バグあり? | |||
| I/O:1977.9 (合本) | 8080 2K BASIC | ||
| 98- 99, 110, 109 | 東大マイコン同好会 | 9月号付録 マイコン新聞 BINARY No.2 | |
|
・0x0400~ リロケート済み ...(合本のみ確認)
・TTY仕様のまま (SDK-80用) ・アセンブルリストなし [MEMO] p.110 (SDK-80用?) ダンプリスト (IntelHEX) p.109 ラベル [9月号付録 マイコン新聞 BINARY No.2] ノンブルは混乱しているが p.94-99,110,109,162-172 は(この順番で)連続しているので注意 | |||
| I/O:1977.9 (合本) | 8080 2K BASIC についてのコメント | ||
| 98- 99 | 福島真 | 合本編集時に追加された?
元記事?:「8080 2K BASIC」(1977.11[ソフトウェア道場]) ...国会図書館で確認忘れた | |
|
・PROM-04 対応改造方法 (アセンブルリストのみ)
※アセンブルリストのため、オリジナルソースが判らないとパッチ困難 | |||
| I/O:1977.9 (合本) | 東大版 2K BASIC の改造 - 8080 カナ BASIC | ||
| 162-167 | 根飛裕太 | (合本編集時に追加された? ← 1977.12 BINARY No.5) | |
|
・ハードウェア改造方法
※1977.12 BINARY No.5 掲載記事と同じ | |||
| I/O:1977.9 (合本) | 東大版 2K BASIC の改造 - BASIC ソフトウェア | ||
| 168-172 | 根飛裕太 | (合本編集時に追加された? ← 1977.12 BINARY No.5) | |
|
・リファレンスマニュアル (※1977.12 BINARY No.5 掲載記事と同じ)
・サンプルプログラム (数当てゲーム) ・I/O:1977.12 BINARY No.5 にある「I/O 9月号 P102~108より変更を行った点」のリストなし ・I/O:1977.12 BINARY No.5 にあるダンプリストなし | |||
| 掲載号 | 記事タイトル / 掲載頁, 著者, コラム名等 / 記事内容 | ||
| I/O:1977.9 | 8080 2K BASIC | ||
| 未確認 | 東大マイコン同好会 | 9月号付録 マイコン新聞 BINARY No.2 | |
|
・0x0400~ リロケート済みのアセンブルリストが掲載されているらしい
| |||
| I/O:1977.12 | 東大版 2K BASIC の改造 - 8080 カナ BASIC | ||
| 82- 87 | 根飛裕太 | BINARY No.5 | |
|
・ハードウェア改造方法
| |||
| I/O:1977.12 | 東大版 2K BASIC の改造 - BASIC ソフトウェア | ||
| 88- 95 | 根飛裕太 | BINARY No.5 | |
・■リファレンスマニュアル
・サンプルプログラム (数当てゲーム) ・■TK-80 + TVD-02&KB-02(PROM-04)用パッチ(全パッチ?) ・■2K BASIC ダンプリスト (未パッチ) アドレス付きのオブジェクトも載っているので、パッチ当て簡単! ノド部分がコピーに写りにくいので注意 | |||
PROM-04 では リリース時に確定 → キャンセルが2回(press/release)発生
ASCII誌掲載のアセンブルリストを基に、全バリエーション対応したソースからの抜粋です。
独自の BugFIX等が含まれるバリエーションもあるため、メモリマップは記事に掲載されたものと異なるかもしれません。
[BugFIX:5] は、RND の読み出しアドレス初期化漏れ対応です。
;=======================================================================================; ;・I/O カナ版 ; ;・12K 拡張 ★★★ ; ;・No WAIT 化 ★★★ ; ;・レイアウト: ;東大版 ;ASCII版;I/O別冊:2 ;I/O ★拡張★; ; ; (I/O版); ;改良版 (2K拡張);カナ版 (12K); ; ;---------------;-------;---------------;---------------; ; MB ;SDK-80 ;TK-80 ;SDK-80 ;TK-80 ; ; OUT ;TTY ;TVD-02 ;TTY ;TVD-02 ; ; IN ;TTY ;(独自) ;TTY ;KB-02 ; ;-------------------------------;-------;-------;-------;-------;-------;-------;-------; STACK EQU 4000H ;1400H ;1400H ;4000H ;1400H ;1800H ;1400H ;4000H ; VTOP EQU 3F00H ;1300H ;1300H ;3F00H ;1300H ;1700H ;1300H ;3F00H ; LBUF EQU 3F37H ;1337H ;1337H ;3F37H ;1337H ;1737H ;1337H ;3F37H ; MSTK EQU 3FA7H ;13A7H ;13A7H ;3FA7H ;13A7H ;17A7H ;13A7H ;3FA7H ; IENT EQU 0400H ;0000H ;0400H ;2000H ;0400H ;0400H ;0400H ;0400H ; ;-------------------------------;-------;-------;-------;-------;-------;-------;-------; VENT EQU 1000H ;1000H ;1000H ;2800H ;1000H ;1000H ;1000H ;1000H ;※VENT:I/O版(東大版では未定儀) ;=======================================================================================; ; [BugFIX:5] (掲載リストとの整合チェック用テーブルを兼ねる → RBTM で末尾アドレスを設定&コード差し替え) ;-------------------------------;-------;-------;-------;-------;-------;-------;-------; Fix前の値 RW00 EQU IENT ;0000H ;0000H ;2000H ;0000H ;0000H ;0000H ;0400 ;※独自定儀(RND) 0000H(不定?) RTOP EQU IENT ;0000H ;0000H ;2000H ;0000H ;0000H ;0000H ;0400 ;※独自定儀(RND) 0000H ;RBTM EQU FFFFH ;★ ;07FFH ;07FFH ;26FFH ;07FFH ;07FFH ;07FFH ;0BFF ;※独自定儀(RND) 07FFH ;=======================================================================================; ; TTY ;東大版 ;I/O版 ;ASCII版;I/O改版 ;カナ版 ; ;-------------------------------;-------;-------;-------;-------;-------;-------;-------; ;IFLG EQU 0FBH ;0FBH ; ;----- ;3BH ;3BH ;----- ;-------;※IFLG:I/O改版では未定儀(写植で直パッチ) ;OFLG EQU 0FBH ;0FBH ; ;----- ;3BH ;3BH ;----- ;-------;※OFLG:I/O改版では未定儀(写植で直パッチ) ;OCNT EQU 0FBH ;0FBH ; ;----- ;----- ;----- ;----- ;-------;※OCNT:I/O改版では未定儀(未使用) ;ITTY EQU 0FAH ;0FAH ; ;----- ;3AH ;3AH ;----- ;-------;※ITTY:I/O改版では未定儀(写植で直パッチ) ;OTTY EQU 0FAH ;0FAH ; ;----- ;3AH ;3AH ;----- ;-------;※OTTY:I/O改版では未定儀(写植で直パッチ) ;IMSK EQU 02H ;02H ; ;----- ;02H ;02H ;----- ;-------;※IMSK:I/O改版では未定儀(直値) ;OMSK EQU 01H ;01H ; ;----- ;----- ;----- ;----- ;-------;※OMSK:I/O改版では未定儀(未使用) ;=======================================================================================; ; ; IENT +-------------------------------+ 0400H ; | | ; | | ; | インタプリタ | ; | | ; | | ; IEND +-------------------------------+ ; : : ; : 空き(約1Kbyte) : ※拡張用 ; : : ; VENT +-------------------------------+ 1000H ; | ワーク(21byte) | ; OTOP +-------------------------------+ 1015H ; : : ; : : ; : ユーザー(12Kbyte) : ; : : ; : : ; VTOP +- - - - - - - - - - - - - - - -+ 3F00H ; : 変数 : ; LBUF +- - - - - - - - - - - - - - - -+ 3F37H ; : ラインバッファ : ; FULL +- - - - - - - - - - - - - - - -+ ; : : ; MSTK +- - - - - - - - - - - - - - - -+ 3FA7H ; : : ; STACK +- - - - - - - - - - - - - - - -+ 4000H ;
単行本に掲載されたものがあったはず
東大版 (8080) Palo Alto Tiny BASICベース、移植者小野、石田晴久著 共立出版刊『マイクロコンピュータのプログラミング』