N80SR-BASIC という代物は・・・ [近況報告]
Dash-80 を移植すべく解析していた PC-8001mkII SR ですが、搭載されている N80SR-BASIC ははっきり言って難物です^^;
PC-8001 / PC-8001mkII の N-BASIC では BASIC のワークエリア内に通常は使用されない未使用エリア(RS-232C用のデータバッファ/IEEE-488 ワーク等)が 760 バイトほど在るため、拙作 Dash-80 はフリーエリアを消費しないで動作することが可能でした。
本体側ルーチン 400 バイト+コミュニケーションバッファ 128 バイト=528+α バイトを確保できたのです。
PC-8001mkII SR では、E600H 以降のワークエリア内に判明しているだけで 150 バイトほどしか未使用エリアが存在しません。
これだと、今までのやり方では Dash-80SR の実現は不可能です OTL
とは言うものの、裏技を使えば何とかなるような気はするんですが。。。
GraphicEditor 88 でやっていたように、グラフィック RAM の未使用部分にルーチンを置くことも可能なんですが、今回は描画ルーチンではないので現実的には無理ですし・・・
I/O 誌に載っていた某 DOS がやっていたように、本体側のルーチンをサブシステム側に置いておいて、必要に応じて本体側へ転送&実行するようにすれば、うまくいくような気がします。
仕組みは既にあるので、ルーチンレイアウトをうまく考えればいいだけの話なんですが。。。
問題は、「未使用エリアの絶対的な少なさ」ですね。
80SR の解析は一旦終了して Dash-80 へのセーブ機能追加に注力することにします。
mkII と 80SR への移植はその後で考えます。
PC-8001 / PC-8001mkII の N-BASIC では BASIC のワークエリア内に通常は使用されない未使用エリア(RS-232C用のデータバッファ/IEEE-488 ワーク等)が 760 バイトほど在るため、拙作 Dash-80 はフリーエリアを消費しないで動作することが可能でした。
本体側ルーチン 400 バイト+コミュニケーションバッファ 128 バイト=528+α バイトを確保できたのです。
PC-8001mkII SR では、E600H 以降のワークエリア内に判明しているだけで 150 バイトほどしか未使用エリアが存在しません。
これだと、今までのやり方では Dash-80SR の実現は不可能です OTL
とは言うものの、裏技を使えば何とかなるような気はするんですが。。。
GraphicEditor 88 でやっていたように、グラフィック RAM の未使用部分にルーチンを置くことも可能なんですが、今回は描画ルーチンではないので現実的には無理ですし・・・
I/O 誌に載っていた某 DOS がやっていたように、本体側のルーチンをサブシステム側に置いておいて、必要に応じて本体側へ転送&実行するようにすれば、うまくいくような気がします。
仕組みは既にあるので、ルーチンレイアウトをうまく考えればいいだけの話なんですが。。。
問題は、「未使用エリアの絶対的な少なさ」ですね。
80SR の解析は一旦終了して Dash-80 へのセーブ機能追加に注力することにします。
mkII と 80SR への移植はその後で考えます。
解析作業,お疲れ様でした。
N80SR-BASICって,そんなに未使用エリアが少ないのですか。
RS-232Cのバッファとか一体どうしているのだろう.....
80SRの省メモリDOSが出ないのはユーザが少ないとか技術情報が少ないといった理由だと思っていたのですが,実はこの未使用エリアが少ないという問題が大きいのかもしれませんね。
by apaslothy (2009-06-02 00:40)
apaslothyさん、コメントありがとうございます。
どうやら RS-232C のバッファはテープのファイル名に用意されている6バイト×2を使用しているようです。
実はECE3HからF034Hまでは直接参照されていないんですが、「LD IX,ECE2H」と言う一行があるため怖くて使えません。
前回書いたように、SRで拡張されたコマンド部分では「ADD IX,BC」や「LD (IX+8),A」等がゴロゴロしてますから・・・
まだ試してませんが、コマンドエントリとハンドシェークルーチンさえ置ければ、何とかなるんじゃないかと思ってます。
by Thunderbolt (2009-06-02 01:38)