STIME のTurboBasic用のBASICソースを J31BASICに逆移植しました。
元々は J3100で開発、運用していたので、動くようになるまで1時間も掛かりませんでした。
ところが、その後の各エミュでの挙動が違いすぎてその対応は非常に困難なものでした。
まるで底なし沼に落ちたような、藻掻けば藻掻くほど深くなるその深淵は、地獄か。
ということで、地獄から生還した私の地獄巡り体験記(違う)改造遍歴を書いてみたいと思います。(^^;
始めに両コンパイラの違いの説明です。
ソースの冒頭
TurboBasic
1 'STIME5 Menu 1994-08-10 96-05-27 97-9-12 98-04-23 09- 24-04-21
10 'TB
50 REM $DYNAMIC
55 $INCLUDE "REGNAMES.INC"
J31BASIC
1 'STIME6 Menu 1994-08-10 96-05-27 97-9-12 98-04-23 09- 24-04-22
10 'J31
50 REM $DYNAMIC
55 rem '$INCLUDE "REGNAMES.INC"
1994年頃は J3100で運用していましたが、Windows95が出てPCもWinノートに変わりました。
DOSの画面モードは VGAになり、J31用のプログラムは動かない。(>_<)
仕方なく手持ちのTurboBasicに移植することに。それが恐らく 96年以降の日付。
50行は J31用の設定ですが、TurboBasicでも同じようです。REM も含めてメタコマンドか。
55行は、TurboBasic用で、J31コンパイラではエラーになります。
55 '$INCLUDE "REGNAMES.INC"
55 rem $INCLUDE "REGNAMES.INC"
実は上のどちらにしてもエラーになるので、REM ' としてやっとコメントになりました。
後はテキストカラー属性指定かな。
TurboBasicは、
COLOR 7,0 グラフィックモード
COLOR 7,0,0 テキストモード
J31
COLOR 7,0 グラフィック
COLOR @7,0,0 テキスト
"@" だけの違いのように見えますが、実は TurboBasicでは文字の反転はテキストモードだけ
つまり、SCREEN 0 の英語テキストモードでしか使えないようです。
J31は基本グラフィックモードだけなので、@でテキスト文字用に使い分けできます。
他にもあったかもですが、僅かの変更でコンパイラは通るようになり、動き始めました。
だが本当の地獄はこれから始まるのであった。
続く ・・・のか
新しい STIME では、TIMER.DAT にタイマー画面を退避させています。
J31用BASICコンパイラを動作させてみると、その画面がおかしい。
ぐちゃぐちゃになっているのです。
TurboBasic では、48桁 23行で以下のように表示されます。
1行目は、d-他の受け渡しに使っています。
1 1
>
1日 17:16:31 0: 0: 0 0: 0: 9
中略
1日 17:16:33 0: 0: 0 0: 0: 7
J31BASIC では、各エミュごとに全部違っています。
VTDOS 4/13
13 把 0Oマ: 4Sマ: 4Sツ 8:12'45 0: 0:19
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
VTDOS 4/21
21日^@^@02:38:31 0: 0: 0 0: 6:48 ^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
VTDOS 5/1
1日 17:22:54 0: 0: 0 0: 0: 8
最初は2バイト文字が変に文字化けして、背景のスペースがヌルになっています。
現在は正常表示になっていますが、ここまでするのに一苦労でした。
DOSVAXJ3 VGAモード
12日cc 1PP6UU:2QQ9XX:1PP0OO 0 8:40:54 0: 0: 3
ロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロ
ロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロ
DOSVAXJ3 J31モード
13日日 0011:0077:4477 0: 0'26 0: 0:13
MS-DOS Player
13日c 0O0O:5T3R:3R0O 0: 0' 0 0: 0:11
このように、どのエミュでも2バイト文字が化けたり2重になったりしています。
その原因は、J31BASIC の CDBL$() という、1バイトの数字を2バイト文字に変換する関数でした。
元々は J3100 でこの関数を使って表示していたので元に戻してみたらこうなったということです。
しかたがないので、TurboBasic と同じやり方に戻しました。
背景の空白が ヌル文字になったり、DOSVAXJ3 VGAモード では、$DB で埋められています。
これは、VRAM領域のメモリの状況によると思われます。
C000h セグメントは VGAの領域で確保されていると思いますが、初期化の問題なのかな。
VTDOS では、TPAEXT などでメモリ拡張していると干渉すると思われるので要注意です。
ともかく、動くのが不思議な状態なので、このまま使うのがよろしいようです。
> C000h セグメントは VGAの領域で確保されていると思いますが、初期化の問題なのかな。
> VTDOS では、TPAEXT などでメモリ拡張していると干渉すると思われるので要注意です。
C000h セグメントはパソピア16 でした。思い込みで間違えました。m(__)m
J3100用BASICコンパイラでは、画面モード 75 (SCREEN 4) でカラーモードが使えます。
J3100テクニカルブックによるとこのモードでは VRAM領域 A000h - AFFFh となっています。
確認のために STIME実行中に SHELL で画面情報を見てみました。
・DOSVAXJ3 J31
CHEJ.EXE <MultiMode CHEV> ver 6.10 by Natrium.
現在 DOS/V(Normal)、日本語環境です。
現在のビデオモードは 03h です。
V - Video mode information R1.0 (C)ChaN,1993
Current Video Mode = 03h
Screen Size = 80x25
Character Height = 19
VRAM Mode = APA
VRAM Address = C741:0000 (Virturl VRAM)
・DOSVAXJ3 VGA
現在 DOS/V(Normal)、日本語環境です。
現在のビデオモードは 03h です。
Current Video Mode = 03h
Screen Size = 80x25
Character Height = 19
VRAM Mode = APA
VRAM Address = C679:0000 (Virturl VRAM)
・VTDOS
現在 DOS/V(V-Text)、日本語環境です。
現在のビデオモードは 70h です。
Current Video Mode = 70h
Screen Size = 110x35
Character Height = 12
VRAM Mode = A/N
VRAM Address = D000:0000 (Real VRAM)
・MS-DOS Player
現在 DOS/V(V-Text)、日本語環境です。
現在のビデオモードは 75h です。
Current Video Mode = 75h
Screen Size = 80x25
Character Height = 22
VRAM Mode = A/N
VRAM Address = B800:0000 (Real VRAM)
うーむ、どのエミュも A000h - AFFFh の領域は使用していないようですが
VRAMアドレスがバラバラですね。