|
前回、紙面の都合で掲載出来なかった、バイトの読み出しunsigned char ReadByte(unsigned long Adr) バイトの書き込みのvoid WriteByte(unsigned long Adr, ,unsigned char Byte) メモリエリアを獲得するvoid GetArea(unsigned long StartAdress, unsigned int Size) メモリエリアを解放するvoid FreeArea(unsigned long StartAdress, unsigned int Size) メモリ残量確認するunsigned int CheckMemory( unsigned int Size) を、追加 掲載します。 ReadByte(Adr)とWriteByte(Adr, Byte)は、H8アセンブラで・・アセンブラを使いたかった・・のだ? ヘッダーの形態は、前回記載しましたので、名前ブロックの検索、挿入場所サーチ、廃止は、以下の関数で・・。 名前ブロックのアドレスを探す関数unsigned long GetNameBlockAdr( unsigned int Seg,unsigned int Name); 名前ブロックが 存在しない時、挿入可能な位置アドレスを見つける関数、
unsigned long InsertableNameBlockAdr(unsigned int Seg, unsigned int Name);
名前ブロックの廃止。 void DeleteNameBlock( unsigned int Seg,unsigned int Name);以上で、メモリエリアを SegとNameのパラメータにより、基本的なファイル管理処理が、行えます。 使えそうと思われる方が 居られたら どうぞ 参考にして 使って下さい。 少ないメモリを使い切る ケチなメモリ管理ソフトに なっちゃったな〜。 えっ、ケチる必要ないって・・。そうだね。今は、PCだって、飽食の時代になってしまったからね。 でも、メーカにいた時、石油ファンヒータ、洗濯機のマイコン・ソフトも開発した事あるけど、材料費は 何銭の単位で計算するんだよ。 一円の100分の1が 銭の単位だ。 より安いマイコンを 選定して 乏しい資源を使いきり、更にハードを安く・・。組み込み系プログラマーの プロ(職人)の仕事だよね< つづく > |

- >
- コンピュータとインターネット
- >
- コンピュータ
- >
- パソコン





BASICの使うメモリエリアを仮想化した設計とみました.たまたまメインメモリ上にとる実装だが,通信等で別のメモリ装置にアクセスする仕掛けにしても書き換えるのは readbyte/writebyte だけ…
2006/11/2(木) 午前 11:13 [ ectoyfan ]
そうですね。私もわりとこういう構成(仮想化)は好きな方ですが、せいぜいブロック単位。こういう忙しいところでの実装はあまりやったことがありません。パフォーマンス的にどうなんでしょうか>御大。
2006/11/2(木) 午後 0:36 [ かの ]
物理的的なRAMへはByte入出力のみ、Ectoyfanさんの言われる通り、シリアル通信等で、リモートメモリ?にも出来るでしょう。 ▼ソフトは、一括りに纏めるべきと思っていますので、結果的に、可搬性は良く、命令は、マクロで・・、CPU変更?にも・・。▼プログラムが 走った時メモリへのアクセス頻度は、テキストの読み込み、ストリングが255バイト長で大量に処理した時とか、複雑な式の解釈で、テータのPUSH,POPが多く発生する時だと思います。▼今は、実装で、スピード的には問題ないですが・・。
2006/11/3(金) 午前 7:21 [ nag*sa_*ei ]
たしかにこの設計ならメモリ格納時の endian の問題もありませんね.かのさんのご懸念は,機械語レベルでのワードアクセス,ダブルワードアクセスを使わないことによる効率の問題とか,8086 のように(っていまのもか?)本質的にワード単位でしかメモリにアクセスできないCPUにおける効率の問題とか,でしょうか.でもとても保守性のよさそうなソースコードです.
2006/11/3(金) 午前 10:46 [ ectoyfan ]
おっしゃるように、保守性は抜群ですね。エンディアンのことまでは思い当たりませんでした。ちょっと恥ずかちい。^_^;▼心配なのは、1バイトアクセスするたびにこのコード列を通るとすると、メモリ移動でパフォーマンス低下を招きはしないかという点です▼まぁ、石も早くなっていることですし、心配するほどではないかも知れませんけど。貧乏性なアタシです。^_^;
2006/11/3(金) 午後 3:58 [ かの ]
C言語、CPUによって、ワード・ロングワード・・は、配置的に偶数番地が絡んできますが、MZメモリ上では、奇数番地からでも全く関係なく並びとして配置されます。 C言語、CPUとは系が違う感じですね。かのさんが懸念されてるスピードは、今の所心配していませんが、スピードアップの対策としては、バーストモードを追加する方法・・、WhileBlock、ReadBlock・・で、,アセンブラレベルに入ると、ブロック転送終了までC言語領域に帰らないモードを作る・・が良いですね。
2006/11/4(土) 午前 7:31 [ nag*sa_*ei ]