「東大版」Palo Alto TINY BASIC [8080]

発掘隊では、TK-80の 2K-BASIC環境構築のために「東大版」の PATBから調べ始めました。

過去に誌上で発表された 2K-BASICの中から、発掘隊での標準構成を決めたいという目論見もありました。

「東大版」はいくつかの媒体で発表されており、バージョンの異なるものも存在する様だったので、 最初期の物と思われる ASCII誌掲載のアセンブルリストを打ち込み、各バーションの差分に対応する形に調整しました。

詳細は後述しますが、細かな差異が多すぎて発掘環境の標準化という目的に叶う精度での情報提供は困難と判断し、 オリジナルソースに TK-80用のパッチを当てる形で紹介する方向で再調査することにしました。

このページは、そんな感じで放棄に至った十年以上前の記録を基に書き起こしたものです。 いわゆる供養というやつです。 自分でも訳が分からなくなってしまった呪文の様な記述もありますが、ご容赦ください。

東大版PATB:概要

バイナリで入手したものを逆アセンブルしたらしくラベルがオリジナルと異なっています。 国内で発表された拡張記事はこのアセンブルソースを前提としたものが多いので注意が必要です。

発表者の名義は違いますが、ASCII誌に掲載されたものと I/O誌に掲載されたものは基本的に同じ様です。

オリジナルのソースにはROM専用版からRAM対応版への変更方法(実装)がコメントで記述されているのですが、 バイナリからの変更では各自で対応している様です。 基本的に RST を CALL に書き変えるだけですが、エントリまわりに差異が生じています。

関連情報

  • ASCII誌掲載の「東大版」Palo Alto TINY BASIC
    • 「2K BASIC」 (ASCII:1977.8p6-??? | 合本:1p68-79) 今井高雄
    • 「TK-80 2K BASIC」 (ASCII:1977.9 | 合本:1p95-98) 佐藤咲男
    • 「TK-80 2K BASIC と文法」 (ASCII:1977.11 | 合本:1p80-91) 飯田陽一
  • I/O誌掲載の「東大版」Palo Alto TINY BASIC
    • 「8080 2K BASIC」 (I/O:1977.9p98-??? BINARY No.2) 東大マイコン同好会
    • 「東大版 2K BASIC の改造 - 8080 カナ BASIC」根飛裕太
    • 「東大版8080 2K BASICの改良版」 (I/O別冊:2 | BASICゲーム徹底研究) 出原良夫
  • その他の「東大版」Palo Alto TINY BASIC

ADTEK社の I/Oルーチンについて

オリジナルの 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 (ASCII:1977.9p29 | 合本:1p99) - 著作者の情報なし
  • PROM-04 (I/O:1977.9) 鎌田勇,片桐明
  • PROM4 (CRTソフトウェア技法) 鈴木八十二 ※8400H~にリロケート

「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

ASCII誌掲載の「東大版」Palo Alto TINY BASIC

東大版PATB:ASCII版

「2K BASIC」 (ASCII:1977.8p6-??? | 合本:1p68-79) 今井高雄
  • SDK-80(要改造) 推奨
  • 0x0000~
  • TTY仕様

アセンブルリスト:東京大学大型計算センター提供

deBUG記事
  • 「東京大学 小野芳彦氏よりの手紙」 (ASCII:未確認 | 合本:1p82)
    • コマンドモードでのエラー処理が異常を起こす
    • 重ね打ちのための[←]が使えない
    • OMASK の初期化漏れ
    • RND の参照アドレス初期化漏れ

    合本リストは未修正

    修正済み:TK-80 2K BASIC と文法 (ASCII:1977/11) 飯田陽一

関連情報

  • 「TK-80 2K BASIC」 (ASCII:1977.9 | 合本:1p95-98) 佐藤咲男

    TK-80 の ROMをバンク切り替えできるようにして、メモリマップを合わせたもの

  • 「TK-80 2K BASIC と文法」 (ASCII:1977.11 | 合本:1p80-91) 飯田陽一

    0x2000~にリロケートしたもの

メモリマップ



ASCII:ROM版 [TK-80]

「TK-80 2K BASIC」 (ASCII:1977.9 | 合本:1p95-98) 佐藤咲男
  • TK-80(独自拡張あり)用差分
  • 0x0000~
  • TVD-02, 自作キーボード

特徴

  • 0000H~ をバンク切り替え可能にして ASCII版の ROMを載せる
  • TTY入出力部分を NOP化
  • 入力は自作キーボード(入力ルーチンあり)で、ストローブが特殊
  • 出力は TVD-02 を想定しているようだが、そのまま使えるコードは提示されていない
  • OMASK は使わないことを前提にしているようだ

メモリマップ



ASCII:RAM版 [TK-80]

「TK-80 2K BASIC と文法」 (ASCII:1977.11 | 合本:1p80-91) 飯田陽一
  • TK-80 + TVD-02用変更
  • 0x2000~
  • TVD-02, JISキーボードを使用(ASCII推奨)

特徴

  • ASCII版を 2000H~ にリロケートし、入出力部分を TVD-02, KB-02 にあわせたもの

    メモリマップの関係から機能拡張時にスパゲッティになりやすい様です。

  • PROM-04 を使用 (OMASK は使わない)

    IN33 はキー・リリースまで戻ってこないので、BREAK ではストローブの事前チェックが必要

    上記実装だけでは、キーを押している間カーソルを点滅しながら止まる / 未対策

    GETL1 のポーリングループはそのままでも動作するが、カーソルの点滅表示が死ぬ
     → ここのループを廃し、IN33 側に任せる

    IN33 側に Ctrl-C(画面クリア)が実装済みで、コードが返って来ない
     → Ctrl-B で代用

    PUT がうまく動いていない様です。(OUT33 が Aレジを壊す)
     → 独自に書き変え

  • +符号をNULL化すると '@'などに化ける環境への対策例示あり (合本:1p83)

    ディスプレイコード:0x00 にグリフが設定されている環境用のパッチです。

備考

  • リロケート忘れやミスが数ヶ所あるようです
    • TBN (ASCII:1978.2p.57? | 合本:1p381) 掲載分は、合本:1 では修正済み
    • 上記 DEBUG 以外にも修正が必要な部分あり
  • TVD-02 への出力は、記事の内容では不十分と思われます
  • 使わないTTYルーチンで NOP化していない部分があります

関連情報

  • PROM-04 (ASCII:1977.9p29 | 合本:1p99) - 著作者の情報なし
  • PROM-04 (I/O:1977.9) 鎌田勇,片桐明
  • PROM4 (CRTソフトウェア技法) 鈴木八十二 ※8400H~にリロケート

メモリマップ

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
;

I/O誌掲載の「東大版」Palo Alto TINY BASIC

東大版PATB:I/O版

「8080 2K BASIC」 (I/O:1977.9p98-??? BINARY No.2) 東大マイコン同好会
  • SDK-80
  • 0x0400~
  • TTY仕様 (ASR-33)

ソノシート収録イメージ 4byte目 0xFB は 0xF3(DI) の間違い?

関連情報

  • TK-80 への移植関連記事

    初出時と合本では記事の構成,内容が異なっていて混乱しがちなので別表にまとめました。

  • 改良版 (I/O別冊:2 | BASICゲーム徹底研究) 出原良夫

    詳細未調査

メモリマップ



付録:TK-80 への移植関連記事

発掘作業用に纏めていた資料(途中で放棄)からの抜粋です。




資料の入手性から、国会図書館の蔵書の利用を想定しています。

1巻1号から2巻9号(1977.9)までの蔵書は合本のみの様です。 合本は一部の記事がアップデートされたり再編集された形跡があります。

オリジナルの資料を参照する場合は、このページの記述のママではうまくいかないかもしれません。

関連資料は下表にまとめましたが、必須なのは下記2点です

  • I/O:1977.9(合本) pp.48-56 キャラクタ・ディスプレイを使いこなそう!(鎌田勇,片桐明)
  • I/O:1977.12 pp.88-95 東大版 2K BASIC の改造 - BASIC ソフトウェア(根飛裕太)

I/O誌掲載「東大版」環境整備に必要な記事一覧
掲載号記事タイトル / 掲載頁, 著者, コラム名等 / 記事内容
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 ダンプリスト (未パッチ)
 アドレス付きのオブジェクトも載っているので、パッチ当て簡単!
 ノド部分がコピーに写りにくいので注意
 

I/O:カナ版 [TK-80]

「東大版 2K BASIC の改造」根飛裕太
  • TK-80
  • 0x0400~
  • TVD-02, KB-02

特徴

  • 入出力ルーチンに ADTEK社の PROM-04 を使用
    一文字入力とキャンセル・チェック:

    PROM-04 では リリース時に確定 → キャンセルが2回(press/release)発生

  • Ctrl-B でブレイク
  • Ctrl-O (出力マスク/トグル) は生きている
  • GETL1 のポーリングループが削除されているので '@' が表示されてしまう
  • BREAKから投入された場合 Ctrl-O のトグルが不安定
  • TTYO0 に WAITあり (演出?)
  • 東大版から若干の拡張あり? (INPT7 あたり)
  • ABS にパッチあり

関連情報

  • PROM-04 (ASCII:1977.9p29 | 合本:1p99) - 著作者の情報なし
  • PROM-04 (I/O:1977.9) 鎌田勇,片桐明
  • PROM4 (CRTソフトウェア技法) 鈴木八十二 ※8400H~にリロケート

メモリマップ

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
;

I/O:改良版 [SDK-80]

「東大版8080 2K BASICの改良版」 (I/O別冊:2 | BASICゲーム徹底研究) 出原良夫
  • SDK-80
  • 0x0400~
  • TTY仕様

特徴

  • ラベルが若干異なる
  • 東大版から若干の拡張あり? (INPT7 あたり)
  • ABS にパッチあり

メモリマップ

その他の「東大版」Palo Alto TINY BASIC

単行本に掲載されたものがあったはず


東大版 (8080) Palo Alto Tiny BASICベース、移植者小野、石田晴久著 共立出版刊『マイクロコンピュータのプログラミング』


「東大版」Palo Alto TINY BASIC