ベーシックマスターの使い方

ベーシックマスター L3 と区別するため「レベル2」と呼ばれることもあるようですが、ここでは「ベーシックマスター」とします。

機種・構成の概要

ベーシックマスターは、Jr.でグラフィックが追加された以外は機種間のハードの差異はあまりありません。

ベーシックマスター用のソフトウェアは、モニタ・ルーチンを利用しているものが多いため MONITOR のバージョンによる非互換があります。 モニタ・ルーチンの呼び出しは、バージョンに依存しない形に書き変え可能な場合もあります。

メモリの実装量により調整

フック書き換えで機能強化する
メモリの搭載量でいろいろ調整が必要
何をどうしたらよいか混乱しがち
ゼロページが余っていない
発掘用の標準環境を決める

MB-6880

  • MONITOR [V1.1]
  • BASIC [L1-V1.1]

発掘隊では [L1] と表記しています。

MB-6880(L2)

  • MONITOR [V1.1]
  • BASIC [L2-V1.0]

ROM交換により LEVEL-2 BASIC V1.0 にバージョンアップしたもの。

発掘隊では MB-6880L2 と区別せず [L2] と表記しています。

MB-6880L2

  • MONITOR [V1.1]
  • BASIC [L2-V1.0]

記事によっては LII, Level-II などと表記されていることもあり、MONITOR,BASICとも異なるバージョンが載っている MB-6881(レベル2II) と紛らわしい。

[RESET/BREAK]+[カナ記号] : [カナ記号] を先に放すとホット・リセット (モニタに落ちる)

発掘隊では [L2] と表記しています。

MB-6881 (レベル2II)

  • MONITOR [V1.2]
  • BASIC [L2-V1.1]

発掘隊では [II] と表記しています。

MB-6885 (ベーシックマスター Jr.)

  • MONITOR [V1.2]
  • BASIC [L2-V1.1]
  • グラフィック(「ハイレゾ」と呼ばれたりする) 機能追加
  • カラーアダプタによるカラー化可能
  • 64K All RAM化対応可能
  • 1200baud対応「ターボ感覚」

1200baud対応は ROM交換だけでなく時定数の変更が必要になるため販売店で実施したようです。 時期に拠っては 1200baud仕様で販売されたようですが、型番の違いなど識別方法は不明。 また、この時定数の変更により非互換問題が生じたようです。(BMUG:198x.x)

64K に拡張しても通常使えるのは 44K です。(BASICでは配列に $8000を超えられない制約もあり?)

発掘隊では [Jr] と表記しています。

MONITOR

MONITOR:概要

機種 MONITOR BASIC 備考
L1 MB-6880 V1.1 拡張ROMは外部I/O に搭載 L1 (V1.1)
(L2) MB-6880(L2) V1.1 拡張ROMは外部I/O に搭載 L2 (V1.0) ROM交換
L2 MB-6880 L2 V1.1 拡張ROMは外部I/O に搭載 L2 (V1.0)
L2-II MB-6881 V1.2 拡張ROMは外部I/O に搭載 L2 (V1.1)
Jr. MB-6885 V1.2 PrinterROM + MT-2 ROM L2 (V1.1) 後期は 1200baudROM が標準
ROM交換の場合は時定数の変更も必要 
V1.2 PrinterROM + 1200baudROM L2 (V1.1)

起動

  • BASICから MONITOR[復改] でモニタに移る
  • 操作は対話式
  • [space] が 決定 / [復改] が キャンセル なので注意

コマンド (抜粋)

L LOAD テープから読み込む
P PUNCH テープにセーブする
M MEMORY 編集
G GO 実行
E ESCAPE BASICへ戻る

MONITOR:ダンプリストの入力から実行まで

操作方法

入力方法

セーブ方法

PUNCH コマンド ⇒ 指示に従いパラメータを入力する
※ファイル名に二重引用符は不用
 付けた場合は二重引用符もファイル名に含まれる

ロード方法

LOAD コマンド ⇒ 指示に従いパラメータを入力する

プログラムの実行方法

j68での入力方法

BASIC

BASIC:概要

LEVEL-2 BASIC には V1.0, V1.1 の二種類があり、互換性問題があります。

V1.0 は MB-6880 の ROMを交換したものと MB-6880L2 に搭載
V1.1 は MB-6881, MB-6885(ベーシックマスター Jr.) の 二機種に搭載
雑誌の投稿記事では L2 を「LII」と表記している例もみられるので注意が必要です。
レベル1とレベル2の比較
BASICゲーム徹底研究 [2] 
構成と被るので整理する
  • LEVEL-1 BASIC
    ➡ MB-6880

  • LEVEL-2 BASIC V1.0 (L2 BASIC)
    ➡ ROM交換した MB-6880, MB-6880L2

  • LEVEL-2 BASIC V1.1 (L2-II BASIC)
    ➡ MB-6881, MB-6885(ベーシックマスター Jr.)

BASIC:NOTE

  • プリンタ出力 : LIST# 等

BASIC:プログラムリストの入力から実行まで

操作方法

プログラムの入力方法

スクリーンエディタの仕様が L1/L2で異なる
L1はほぼラインエディタ
L2,L2-II で微妙に違う

プログラムのセーブ方法

プログラムのロード方法

※ファイル名に二重引用符は不用
 付けた場合は二重引用符もファイル名に含まれる

プログラムの実行方法

j68での入力方法

グラフィック・キャラクタ等の入力について

ベーマスのスクリーン・エディタから英小文字やグラフィック文字を入力することができません。

でも不思議なことに、グラフィック文字等が混在するリストが掲載されているんですよ!

I/O誌掲載の「完全フルキーボード化プログラム」を利用する方法

完全フルキーボード化プログラム (I/O:1980.3) BASIC MAN
改良版 (I/O:1980.8p96 RANDOM BOX) BASIC MAN

概要

  • 文字入力のフックを書き換えてグラフィック文字に置換するコードを通す

    プログラム冒頭にフック書き換え(初期化)プログラムがあります。

    改良版では CALL $1FB0 でフックが書き変わりフルキーボード化プログラムが有効になります。 実装メモリに合わせてリロケートした際はアドレスが変わります。

  • '_' : [英記号]+[\ろ] で入力モードを切り替える ('_' は文字として入力できない)

     使用例 : "_カキクケ_カキクケ" ⇒ "♣♦♥♠カキクケ"
  • 初版(I/O:1980.3)は、切り替え時の '_' が空白文字として入力されてしまい再編集が必要になるので非推奨

    通常の入力では何とかなりますが、j68で自動タイプさせる用途には向かないと思います。

  • 掲載されたプログラムは MONITOR V1.1専用

    モニタルーチンをジャンプ・テーブル経由で呼ぶことで、モニタのバージョンの違いを吸収できます。

    MONITOR 1.1/1.2 両対応化の例:
     初版  : $1FBB-C:$FA44→$F012, $1FFA-B:$F7A6→$F015
     改良版 : $1FC6-7:$FA44→$F012
  • RAM 8K を想定したレイアウト

    大きなプログラムを入力する場合はリロケートが必要になります。

    参考:改良版を実装メモリに合わせてリロケートする例
     $**B1,**B6,**BB,**BF,**CD,**D1:** → 1F(8K) / 3F(16K) / 7F(32K) / CF(64K)
  • [BREAK] で機能停止した場合は再度初期化が必要

入力文字
文字モード
char code

$20

$21

$22

$23

$24

$25

$26

$27

$28

$29

$2A

$2B

$2C

$2D

$2E

$2F
図形モード
UTF-8
char code

0020
$20
α
03B1
$10
β
03B2
$11
γ
03B3
$12
η
03B7
$13
θ
03B8
$14
λ
03BB
$15
μ
03BC
$16
π
03C0
$17
τ
03C4
$18
φ
03C6
$19
ψ
03C8
$1A
ω
03C9
$1B
Σ
03A3
$1C
Ω
03A9
$1D
χ
03C7
$1E
入力文字
文字モード
char code

$30

$31

$32

$33

$34

$35

$36

$37

$38

$39

$3A

$3B

$3C

$3D

$3E

$3F
図形モード
UTF-8
char code

0030
$30

0031
$31

0032
$32

0033
$33

0034
$34

0035
$35

0036
$36

0037
$37

0038
$38

0039
$39

003A
$3A

003B
$3B

003C
$3C

2797
$1F

003E
$3E

253C
$80
入力文字
文字モード
char code

$40

$41

$42

$43

$44

$45

$46

$47

$48

$49

$4A

$4B

$4C

$4D

$4E

$4F
図形モード
UTF-8
char code

25A0
$60

0061
$61

0062
$62

0063
$63

0064
$64

0065
$65

0066
$66

0067
$67

0068
$68

0069
$69

006A
$6A

006B
$6B

006C
$6C

006D
$6D

006E
$6E

006F
$6F
入力文字 _
文字モード
char code

$50

$51

$52

$53

$54

$55

$56

$57

$58

$59

$5A

$5B

$5C

$5D

$5E
MODE
🔽
図形モード
UTF-8
char code

0070
$70

0071
$71

0072
$72

0073
$73

0074
$74

0075
$75

0076
$76

0077
$77

0078
$78

0079
$79

007A
$7A

2190
$7B

2192
$7C

2193
$7D

2191
$7E
🔼

$5F
入力文字
文字モード
char code
 
$A1

$A2

$A3

$A4

$A5

$A6

$A7

$A8

$A9

$AA

$AB

$AC

$AD

$AE

$AF
図形モード
UTF-8
char code
 
2514
$81

2518
$82

2510
$83

250C
$84

2500
$85

2502
$86

254B
$87

2524
$88

252C
$89

251C
$8A

2534
$8B

2570
$8C

256F
$8D

256E
$8E

256D
$8F
入力文字
文字モード
char code

$B0

$B1

$B2

$B3

$B4

$B5

$B6

$B7

$B8

$B9

$BA

$BB

$BC

$BD

$BE

$BF
図形モード
UTF-8
char code

2329
$90

2304
$91

232A
$92

2303
$93

25CB
$94

25CF
$95

2663
$96

2666
$97

2660
$98

2665
$99

51FA
$9A

266A
$9B

265E
$9C

2591
$9D

2617
$9E

FE68
$9F
入力文字
文字モード
char code

$C0

$C1

$C2

$C3

$C4

$C5

$C6

$C7

$C8

$C9

$CA

$CB

$CC

$CD

$CE

$CF
図形モード
UTF-8
char code

6642
$E0

5206
$E1

79D2
$E2

5E74
$E3

6708
$E4

65E5
$E5

706B
$E6

6C34
$E7

6728
$E8

91D1
$E9

571F
$EA

4EBA
$EB

70B9
$EC

56DE
$ED

6587
$EE

540D
$EF
入力文字
文字モード
char code

$D0

$D1

$D2

$D3

$D4

$D5

$D6

$D7

$D8

$D9

$DA

$DB

$DC

$DD

$DE

$DF
図形モード
UTF-8
char code

258F
$F0

258E
$F1

258D
$F2

2595
$F3

F0F4

$F4

F0F5

$F5

2594
$F6

F0F7

$F7

F0F8

$F8

2581
$F9

2582
$FA

2583
$FB

FF0F
$FC

FF3C
$FD

29D3
$FE

29D7
$FF
※「図形モード」欄は「j68 UTF代替マップ」で採用した文字
  j68 UTF代替マップは UTFの基本多言語面から「意味」や「雰囲気」で採用しました
  基本多言語面に適当な字形が無いコードは「私用領域」に割り当てています ⇒ Symbolフォントと同じ
 「Symbols for Legacy Computing」(補助文字) の採用については今後検討します

完全フルキーボード化プログラム(改良版) のパッケージ化

  • 実機で使いやすい様に、リロケータを付けてパッケージ化すると良いかも

入力方法

  • 「完全フルキーボード化プログラム(改良版)」をロードする
  • 「CALL $1FB0」で初期化する (改良版/8K : リロケートした際はアドレスに注意) / 書きかけ(仕様毎に具体的に)

    [BREAK] で機能停止した場合は再度初期化が必要なので注意してください。

  • '_' : [英記号]+[\ろ] で入力モードを切り替える ('_' は文字として入力できない)

j68 での入力方法

  • 実機と同じ方法で入力するか、テキストファイルを用意して自動タイプ機能で入力する
  • 「完全フルキーボード化プログラム」はメモリエディタにドロップするのが便利
  • 自動タイプの場合は、テキスト先頭に "NEW" と "CALL $1FB0"(改良版/8K) を記述しておくと便利
  • 長いプログラムを自動タイプする際は改行コードを「CR+LF」にしておくと安定する
  • さらに「Type Speed」を 500cpm以下にすると安全

RAM誌掲載の「フルキーボード化のプログラム」を利用する方法

L2/II版「フルキーボード化のプログラム」 (RAM:1981.9 SUMプラザ) 加藤裕司

概要

  • プログラムサイズが大きめ (多機能)

入力方法


j68 での入力方法


j68 同梱の「FullCharPatch.asm」を利用する方法

概要

  • BASIC MAN作「改良版完全フルキーボード化プログラム」をコンパクトにしたもの
  • j68 の自動タイプでの使用に限定することでマップ(変換ロジック)を簡素化
  • MONITOR 1.1/1.2 両対応
  • アセンブルソースで提供しているので、RAMの実装量に合わせたバイナリを生成可能
  • バイナリの先頭アドレス(コンソールに表示されます) を CALLして有効化する

入力方法

  • 人の手で入力することを想定したマップになっていないので非推奨

j68 での入力方法

  • 自動タイプ以外での使用は非推奨

    自動タイプはテキストファイル指定だけでなくコピペも可能です。

  • フルキーボード化プログラム用の仮文字への変換と、'_' の挿入は不要

    グラフィック文字から仮文字への変換と '_' の挿入は j68が行ないます。 グラフィック文字は UTFにマップした文字でも入力可能です。

    j68用のシンボルフォントを使えば、LIST# でファイルに落としたリスト等もそのまま利用可能です。

  • 自動タイプ前に [Keyboard] > FullChar Patch... を有効化する

    有効化した時にベーマス側で動かす変換プログラムを送り込むのでロード作業は不要です。

    ベーマス側にロードする変換プログラムはメモリの実装に合わせ、cfg で予め指定しておくことができます。

  • ベーマス側プログラムの準備はメモリへのロードまでなので別途初期化が必要

    タイプするテキストの先頭に「CALL $7FD0[改行]」(32K版) を記述しておくと楽ができます。

  • 後始末

    「FullChar Patch」を無効化しても変換プログラムはアンロードされません。

    基本的に後始末は不要なので、気にしなくて良いと思います。

  • RESET時のオプション「✅Clear RAM」が有効になっている場合の注意

    リセット時にメモリの内容が起動時の状態に戻ります。 パッチが有効になっていても、ベーマス側のプログラムがクリアされるので動作しなくなります。

    「FullChar Patch」のチェックを外す→付ける で再ロードされます。

LEVEL-2 BASIC のスクリーンエディタで編集する方法

概要

PRINT CHR$(...) で表示したグラフィック文字をスクリーンエディタで「拾って」打ち込む方法です。

L2(V1.0) でも不可能ではないけれど、色々クセがあって失敗しがち。 推奨方法なら L2(V1.0) でも失敗しにくいと思います。

L2(V1.0) では CHR$() が列挙に対応していないので CHR$($96);CHR$($97);CHR$($98);CHR$($99) の様に記述してください。

入力方法 (基本)

  • PRINT CHR$($96,$97,$98,$99)RETURN

    ⇒ 次の行に ♣♦♥♠ が表示される

  • カーソルを ♠ の後ろに持って行って「"」を追加する
  • カーソルを ♣ の位置に持って行って「"」を追加する
  • カーソルをふたつ左(「"」の左=一行上の右端) まで戻す
  • DELを連打して前の行の PRINT の後ろまで持っていく

    ⇒ > PRINT_"♣♦♥♠"

  • カーソルを PRINT の「P」またはその前のスペースの位置まで持っていきDELを押す

    ⇒ カーソルを戻し過ぎると失敗する

    DELを押しても見た目は変化しないが、この手順を踏まないと失敗する

  • 行番号を追加してRETURN

入力方法 (推奨)

タイプ量は若干増えるけれど失敗が少ない方法です。

  • PRINT CHR$($96,$97,$98,$99)RETURN

    ⇒ 次の行に ♣♦♥♠ が表示される

  • 表示されたグラフィック文字の前後に「行番号 PRINT "」「"」を追加する
  • カーソルを行番号の先頭に置く
  • DELを連打して前の行を完全に消した後RETURN

    ⇒ 戻り切るとDELは反応しなくなるので安心して連打できる

入力方法 (応用)

  • PRINT "100 PRINT ";CHR$($22,$96,$97,$98,$99,$22)RETURN

    ⇒ 次の行に 100 PRINT "♣♦♥♠" が表示される

  • カーソルを行番号の先頭に置く
  • DELを連打して前の行を完全に消した後RETURN

    ⇒ 戻り切るとDELは反応しなくなるので安心して連打できる

グラフィック文字の追加方法

  • LIST 100RETURN

    ⇒ 次の行に 100 PRINT "♣♦♥♠" が表示される

  • 行番号を削除し PRINT CHR$($FE);"♣♦♥♠";CHR$($FF)RETURN

    ⇒ 次の行に ⧓♣♦♥♠⧗ が表示されるので、あとは入力作業と同じ

モニタからバイナリ編集する方法

概要

  • 文字数を合わせた適当な文字列で仮入力しておく
  • メモリ上の文字コードを打ち変える

入力方法

  • 非推奨

    でも、ちょっとだけなら ///

j68 での入力方法

  • メモリエディタの利用を推奨

    ベーマスのグリフで ASCIIダンプされるので確認しながら作業できます。

    コントロールコードに割り当てられた文字もベーマスのグリフでダンプされますが、BASICでは使用できません。

  • メモリエディタではテキストの検索,置換が可能

    文字列で指定する場合は先頭に「asc:」付けてください。

    仮文字を工夫しておけば書き換えが楽になります。

    例:"AAAA" を "♣♦♥♠" に置換する
    Search
    asc:AAAA
    Replace
    96979899

付録

付録:メモリマップ

移植モノの調査で時々必要になるのでまとめておきたい


0400-08FF	BASICのワークエリア
0900-		BASIC TEXT

	

付録:ゼロページ

移植モノの調査で時々必要になるのでまとめておきたい

MB-6881
アドレス	ラベル	内容									初期設定値
00 01		USRNMI	ユーザーNMIベクトル						F0C6
02 03		USRIRQ	ユーザーIRQベクトル						F06E
04 05		BREAKV	BREAKキーからのNMIベクトル				B:BB7E
															M:F0D0
06 07		TIMERV	タイマー用割り込みベクトル				F06E
08 09		RAMEND	RAMの最大番地							16K:3FFF
0A			TIME1											0000
0B			TIME2	
0C			TIME3	1秒タイマー 0≦TIME3≦59				00

0D-27		------	※モニタのワークエリア

28 29 2A	ASCIN	1文字入力用ジャンプテーブル			7EFA44
2B 2C 2D	ASCOUT	1文字出力用ジャンプテーブル			7EF7A6
2E 2F 30	BYTIN	メモリーブロック入力用ジャンプテーブル	7EF71A
31 32 33	BYTOUT	メモリーブロック出力用ジャンプテーブル	7EF615

34-3A		------	※モニタのワークエリア

3B 3C		RECTOP	カセット記録の先頭番地					----
			LDTOP	カセット再生の先頭番地
			MSTTOP	メモリー転送の先頭番地
3D 3E		RECEND	カセット記録の最終番地					----
			LDMAX	カセット再生の最終番地
			MSTEND	メモリー転送の最終番地
3F 40		CPYTOP	メモリー転送のコピー先の先頭番地		----
41 42		CPYEND	メモリー転送のコピー先の最終番地		----
43-4A		FNAME	カセット記録, 再生時のファイル名		--------

4B-71		------	※モニタのワークエリア
72-FF		------	※BASICのワークエリア

ラベル アドレス 内容 備考
RAMEND $0008,$0009 $1FFF 実装メモリ 8K
$3FFF 実装メモリ 16K
$7FFF 実装メモリ 32K
$AFFF 実装メモリ 64K
 
ラベル エントリ アドレス MON 1.1 MON 1.2 備考
ASCIN $0028 $0029,$002A $FA44 $FA55 1文字入力用ジャンプテーブル
ASCOUT $002B $002C,$002D $F7A6 $F7AB 1文字出力用ジャンプテーブル
BYTIN $002E $002F,$0030 $F71A $F71F メモリーブロック入力用ジャンプテーブル
BYTOUT $0031 $0032,$0033 $F615 $F619 メモリーブロック出力用ジャンプテーブル

付録:モニタルーチン

ラベル エントリ アドレス MON 1.1 MON 1.2 備考
CHRGET $F012 $F013,$F014 $FA44 $FA55 1文字入力用ジャンプテーブル
CHROUT $F015 $F016,$F017 $F7A6 $F7AB 1文字出力用ジャンプテーブル
LOAD $F018 $F019,$F01A $F71A $F71F メモリーブロック入力用ジャンプテーブル
SAVE $F01B $F01C,$F01D $F615 $F619 メモリーブロック出力用ジャンプテーブル

参考資料

  • ベーシックマスター レベル2II 取扱説明書 p.106 メモリーマップ
  • ベーシックマスター レベル2II 取扱説明書 pp.141-143
  • ベーシックマスターJr. 取扱説明書 p.124 メモリーマップ
  • ベーシックマスターJr. 取扱説明書 pp.159-161
  • モニタサブルーチン解説 (BMUG:1982.1) 瑞慶覧辰
  • BASIC ENTRY MAP (BMUG:1984.9-10) JR6TEW
  • BASIC ENTRY MAP NO,2 (BMUG:1984.11-12) JR6TEW

付録:代替モニタルーチン

フック書き換えで利用可能なもの

B.M.U.G.の 1200BPS I/O

ターボ化された個体での非互換について

日立純正の 1200baud ROM

完全フルキーボード化プログラム

付録:BASIC拡張プログラム

グラフィックユーティリティ・プログラム

I/O:1982.5 | ベーシックマスター活用研究

カセットでは「カラーグラフィックユーティリティ」との表記だが「カラーアダプタ」が無くても有用
ソースリストでは「COLOR AND GRAPHIC UTILITY PROGRAM」
I/O:1982.5, ベーシックマスター活用研究

モニタから使う場合の手順等も記事にあったはず

付録:入力時の注意

削除予定 (独立した文書としてまとめる)