MZ-80 パソコン開発物語

今だから話せる、パソコン開発記録を連載します。 感想をコメントに残して頂けたら 嬉しい・・。

過去の投稿日別表示

[ リスト | 詳細 ]

全1ページ

[1]

MZ80レプリカ (6)

イメージ 1

MZメモリ管理について、構造をご理解していただく為、初期化とストリングの代入例の説明をします。
以前のMZ80シリーズも、略 これに近い形で、作っておりました。 30年振りのリバイバルです・・。

今回 MZメモリは、Cの領域外に設定して、MenManage.cファイルの処理関数で管理しています。
起動時メモリの初期化InitializeMemory()と 実行(RUN)時のメモリの初期化RunInit()を抜き出しました。

まず、領域は、6,7行のMemoryStartとMemoryEndで、定義しております。
エリア64Kバイトも? 多すぎ?、じゃ MemoryEnd=0x217FFFにすれば、32Kバイトになるよね。 
8,9行で、BASE 〜 TOPの値・・メモリを分割する セグメント名前を定義します。
10行で、番地データの配列を宣言しています。各セグメントの開始アドレスが格納されます。

初期化 InitializeMemory();を実行した場合、Segment[BASE]〜Segment[TOP]まで、MemoryStart値に
+2 しながら値を代入する。    それを間接アドレスとして、MZメモリ内に、0x0000を書き込む。
なお、RUN命令が発行された時、TEXTデータ(LIST領域)以外を、初期化して、テキストを実行します。

変数名Cは、セグメントの区別で、C,C(3)、C (3,4)、C$、C$(2)、C$(2,5)の変数形が使用できます。
今 例えば C$を格納する場合に付いて説明すると、変数のヘッダー部の最初のワードは、名前。次の
ワードは、ヘッダーを含めた総バイト数、・・の形式です。 
今 ヘッダーを含めた総バイト数を38とすると、 ヘッダーは0x0043, 0x0026,・・の並びになりますね。
一方、Segment[STR]はメモリ上のストリング名の位置を示しているので、そのデータが0x0000ならば、
データなしだから、新規に書き込む事になります。 Segment[STR]番地から、38バイト分メモリを上方に
移動(メモリ領域を空ける)させ、C$のデータを埋め込みます。
また、それより上位のSegment[STR1] 〜Segment[TOP]のアドレスの値は+38される事になります。

次にC$の内容が変わった時、Segment[STR]を起点に名前0x0043を探します。違う場合、総バイト数を
加算して 次の名前は?・・と走査します。 一致した時 C$データファイルのC$実体部分にアドレスに
移動し、ストリングの増減量分のメモリ獲得、または解放を行いC$実体データを埋め込みます。 
そしてヘッダー部の総バイト数を修正し、それより上位のSegment[STR1] 〜Segment[TOP]のアドレスの
増減変更で、完了です。

空きメモリは、MemoryEnd− Segment[TOP]です。 必要なバイト数を取るとSegment[TOP]の値が
上昇し、バイト数が解放されると、Segment[TOP]の値が下降します。
不要になったメモリは常に 空きメモに加えられます。 不明?な メモリエリアは存在しません。

メモリへのByteアクセス ReadByte(unsigned long Adr) 、WriteByte(unsigned long Adr,unsigned char Byte)
メモリ獲得のGetArea( StartAdress, Size)、解放のFreeArea(StartAdress, Size), 及び メモリ領域の残量が
チェックできる CheckMemory( Size)は、今回、 紙面の都合で、割愛しました。
尚 GetArea()、FreeArea()は、メモリの領域の増減とSegment[]の変更を、一括処理するようにしています。

     < つづく > 

 MZ80レプリカ製作は連載物です。 最初のページ(1)から ご覧下さい。
  MZ80レプリカ製作(1)

全1ページ

[1]

[PR]お得情報

数量限定!イオンおまとめ企画
「無料お試しクーポン」か
「値引きクーポン」が必ず当たる!
ふるさと納税サイト『さとふる』
11/30まで5周年記念キャンペーン中!
Amazonギフト券1000円分当たる!

その他のキャンペーン


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事