ここから本文です
ブログを始めました・・・

書庫全体表示

往々にしてあることですが予想より修正が多岐に渡りました。
ただし運良くメモリに常駐するFM7DRV27_20181124については
予定以上の機能を88バイトで収めることができました。苦労として
ヘッダに関するソフトHeader27_20181124をカセットバッファの
$0600以降に展開して動かそうとしましたがカセットバッファ・PSG
以外でも使用されており、使えませんでした。他の領域を探して
自分は何とか$460-$4D8で使えることを確認しましたが、他の方も
同一の領域で使えることの保証は控えます。とは言え試行錯誤しま
したのでコード自体は粉れた水準になったと認識してます。
Header27_20181124の使用領域を$460-$4D8として説明します。

またBASICは拡張してませんのでchain等の命令は使えません。
あくまでメモリに存在してるデータを保存したり保存したデータを
メモリに展開するだけの機能です。

なお現在の自分の使い方として、FM7DRV27_20181124は
カセットにセーブして、使用時にカセットからロードしてます。
Header27_20181124はLinux側に保存しており、使用する際に
Linux側から転送しFM-7で受信して使ってます。

<データ転送ハードのおける対応ソフトの構成>
FM7DRV27_20181124とHeader27_20181124で構成する。
ただしFM7DRV27_20181124、Header27_20181124とも
単一の機能ではなく複数の機能を有する。
二本のソフトにした理由はリニアな領域を確保できないから。
なお、$FC00-$FC57の領域を使うソフトには対応しません。

<速度について>
読み込みで7Kバイト/秒、買い込みで15Kバイト/秒程

<データを読む込む時の仕組みと各ルーチンの機能>
FM7DRV27_20181124
常駐アドレス:$FC00-$FC57、使用バイト数:88バイト、
ワークエリア:$FC00-$FC07、下の(1)から(3)の機能を持つ
FM7DRV27_20181124のプリミティブなデータ送受信ルーチンは
ポジション・インディベンドですがヘッダ付きデータの受信機能を
使う時はサブルーチンから固定アドレスの$FC12を更にコールして
ますのでアドレスの変更は不可です。
<補足>
前回はデータを読む込み機能のみメモリに常駐する予定でしたが
運良く読む込み機能以外にプリミティブなデータ送信ルーチンも
メモリに常駐させても88バイトに収まりました。プリミティブな
データ送信ルーチンもメモリに常駐してると細かなデータの保存
をする時に便利です。

(1)プリミティブなデータ受信ルーチン
エントリ:$FC12、ワークエリアにデータを設定しコールする
機能:受信バッファのデータをメモリに展開する
コールする前に下のアドレスにデータを(手動で)設定すること
先頭アドレスを$FC02からの2バイトに、終端+1を$FC04からの
2バイトに設定する
<補足>
終了条件として二つの場合を想定してます。一つはXレジスタが
[終端+1]になった時、もう一つは$FDFEの7ビット(最上位ビット)
が[hi]になった時(受信バッファにデータがない)また後者で終了
した場合は、その時のXレジスタの内容を$FC06に書かない。
I/O操作をメモリを節約するためサブルーチン化したのでせめて、
速度低下を少しでも抑えようとした結果です。

(2)プリミティブなデータ送信ルーチン
エントリ:$FC39、ワークエリアにデータを設定しコールする
機能:メモリの内容を送信バッファに送る
コールする前に下のアドレスにデータを(手動で)設定すること
先頭アドレスを$FC02からの2バイトに、終端+1を$FC04からの
2バイトに設定する
<補足>
終了条件はXレジスタが[終端+1]になった時この領域($FC00-$FC57)
で使えるメモリが少なかったので終了時のXレジスタの内容を$FC06に
書き出す機能は省略する。

(3)ヘッダ付きデータの受信ルーチン
エントリ:$FC51、ワークエリアにデータを設定しコールする
機能:ヘッダ付き受信データをメモリに展開する
アドレス$FC02からの2バイトに#0460(16進数)を設定しアドレス
$FC04からの2バイトに#04A0(16進数)を設定する。
また$FC54からの3バイトは[JSR $470]になってると思います。

・第一段階でヘッダをメモリに展開する
ファイルの先頭から64バイトのヘッダ情報を$460-$4A0に展開する。
第二段階で展開する領域(先頭アドレスと終端アドレス+1)は
ヘッダにデータとして保有してるので、第二段階の下準備をする。
<注意>先頭アドレス及び終端アドレス+1はファイルにヘッダを
付加する際に固有値が書き込まれてる(か、あるいは書き込む)。
詳しくは、<データを送信(保存)する時の使い方>で説明します。

・第二段階でヘッダ情報に基ずき、保存データを指定領域に展開する
$FC51からサブルーチン($470)をコールした後に、($470から始まる)
サブルーチンがデータ本体のメモリを展開する領域をヘッダ情報から
取得し、そのデータを$FC02、$FC04に設定して$FC12をコールする。
またbasicソフトの時は($33・$34)、($35・$36)の復元もします。
因みに、ここの作業はプログラムが自動的にします。

<補足>
$FC51からサブルーチン($470)をコールする際に$FC02、$FC04に
設定したデータを作業の後に復元したかったのですがメモリが足り
ませんでした。ですので$FC02、$FC04の値はデータを展開した
アドレスに書き変わったままの状態です。$FC51を使う時にはコール
する毎に$FC02、$FC04に、それぞれ#0460、#04A0を設定して下さい。

・注意
BASICのアプリをメモリに展開し動かした後はアプリによってメモリ
使用領域に制限がかけられることがあります(例:clear命令等で)
この場合、次のアプリを続けてEXEC命令で$FC51をコールしメモリに
展開しようとすると制御が戻らないことがあります。アプリの動作後は
リセットして再度FM7DRV27_20181124を展開・設定して下さい。

<FM7DRV27_20181124.dat>と<Header27_20181124>のコード
及び、<データを送信(保存)する時のソフトと使い方>は
次回に投稿します。

  • 顔アイコン

    <速度の表記において、訂正>
    ×)読み込みで7Kバイト/秒、買い込みで15Kバイト/秒程
    ○)読み込みで7Kバイト/秒、書き込みで15Kバイト/秒程

    [ shuji_akita2001 ]

    2018/12/15(土) 午前 8:42

shuji_akita2001
shuji_akita2001
男性 / O型
人気度
Yahoo!ブログヘルプ - ブログ人気度について
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

最新のコメント最新のコメント

すべて表示

Yahoo!からのお知らせ

よしもとブログランキング

もっと見る
本文はここまでですこのページの先頭へ

[PR]お得情報

お肉、魚介、お米、おせちまで
おすすめ特産品がランキングで選べる
ふるさと納税サイト『さとふる』
数量限定!イオンおまとめ企画
「無料お試しクーポン」か
「値引きクーポン」が必ず当たる!
ふるさと納税サイト『さとふる』
実質2000円で特産品がお手元に
11/30までキャンペーン実施中!

その他のキャンペーン

みんなの更新記事