レベル3 VRAMエリアが移動できるか確認してみる^^

スポンサーリンク

レベル3でCP/MやFLEX9を動作させるためにはALLRAMモードで動作させる必要があると思うのですが、
そうなると$400から始まるVRAMエリアは邪魔になりそうです。

というわけで、CRTCの参考書籍を確認してみるとHD46505ではレジスタR12とR13でVRAMの先頭アドレスを
指定するとの説明がありました。

早速、L3エミュでCRTCのR12,R13レジスタに何が書かれているのか調べたところ

R12=$04
R13=$00

と、VRAMの先頭アドレスががそのままセットされておりました^^
レベル3の回路図見た感じではVRAMは独立したメモリがあるわけではなく主記憶の一部を間借りしている
だけっぽいので、そのままR12,R13を変更するとVRAMエリアを移動できそうです。

S1の取説にはCRTCの設定パラメータの記述があるのですがレベル3の取説は持っていないのでパラメータが不明
(レベル3マーク5の取説をお持ちの方是非貸して下さい^^;;;)

資料が無いのでL3エミュでCRTCのアドレス$FFC6,$FFC7にストアしてる部分をトレースして値を確認

結局、S1の取説にあったパラメータと同じでした・・・^^;;;

これを踏まえて整理すると
R4~R7は全モード共通
グラフィック解像度はMODE-SELの違いのみでCRTCパラメータの違いはない
R10,R11,R14,R15はカーソル表示用←設定パラメータではない?
R12,R13はVRAMの先頭アドレス

となるので

こんな感じにテーブルにまとめてみました

各テーブル1バイト目にCRTSのRegNo, その後データ, デリミタを$FFにしてみました

これをまとめてVRAMが移動できるか確認するテストプログラムを作成^^

エミュで確認した値とS1の取説にあった値は同じでしたので、

その値をCRTCにセットするだけのプログラムですが、

思うように動作しません・・・・

参考にした書籍によると画面モードによってCRTCに供給されるクロックを変える必要があるそうです。
レベル3の資料でこれを調べると$FFD0にMODE-SELというレジスタがあり40/80文字モードとグラフィックの
解像度を変更できるレジスタがありましたのでCRTCのパラメータに加えMODE-SELもセットしています

S1には上記に加えSCRN-MODEというレジスタがあるようですがL3にはなさそうです
何か別の手続きが必要で、それが抜けているんだと思います^^;;;
そもそも、CRTCのパラメータを変えただけではダメで他に何かする必要があるのかも・・・
知識がなく、完全に手探り状態です^^;;;


しかし、この状態でも表示は出ているのでVRAMが移動できるものなのか調べてみました。

CRTCの設定でVRAMの先頭アドレスを$3000~と指定して

$3000~データをセットしてみると

無事表示されました。

カラーRAMの関係もあるのか文字色は青でした

カラーRAMの扱い方は調べないとわからないので、簡単に変更できる背景色を変更
POKE &HFFD0,&HC4

色々と残件が残りましたが、VRAMエリアが移動できることが確認できました。

そんなレベル3VRAM移動の記録・・・

 


残件メモ
CRTCパラメータ設定後の表示の乱れ
$400~VRAMを移動したときのカラーRAMの扱い

スポンサーリンク

「レベル3 VRAMエリアが移動できるか確認してみる^^」への20件のフィードバック

  1. VRAMの領域を移動できるとは考えていませんでした.
    VRAMの部分にはアトリビュートRAMもありますので,アトリビュートRAMの無いアドレスには移動できないのでは無いでしょうか?例えば$6000とかに移動できますでしょうか??

    1. Level3さんの予想通りカラーRAMの無いエリア($4400以降~)をCRTCに指定して同じことをしてみると文字が表示されませんでした。
      レベル3でCP/MやFLEX9を動作させる場合$400~のVRAMは邪魔だと思うのですがLevel3さんのCP/M80ではVRAMエリアはどのように実装されておられるのでしょうか
      カラーRAMの関係で別のエリアに移動できないとなると更に困ると思うのですがどのようにするのが良いのでしょう・・色々迷走中です^^;;;

      1. お返事が遅くなってしまいましたが,HuEngineは独自に64KBのRAMを持っていますのでCP/M80のTPAには何の制限もありません.09側のBIOSルーチンで画面への書き込みを行うだけですから…

        1. そうでした!HuEngineを使ったCP/M80はHuEngine側の64KメモリにTPAがあるので問題なかったですね。
          S1も同じようにZ80側が使うメモリと6809が使うメモリはエリアが違うので問題ありませんでした
          S1はメモリ管理の難しさがあるので、レベル3で訓練しようかとレベル3に路線変更しようと思いましたが、VRAMや割込みベクタなどBASIC以外で使う場合のレベル3にはレベル3の難しさがありました^^;;;

    1. やっぱりVRAMエリアは固定での使用ですよね^^
      S1やFM-7はCP/Mのメモリ範囲から見えない位置にVRAMがあるので問題無いと思うのですが、
      レベル3だとTPAエリア内にあるので邪魔なのではと思い色々調べています。
      (もしかすると的外れな考えなのかもしれません・・・^^;;)
      オールRAMモードで動作させる場合は入出力はROMのサブルーチンを使わずに自前で実装すると
      聞いたので、自前で実装するのであれば邪魔にならない位置に移動できればと思い実験中です^^

      1. CP/Mで必要なメモリがどれぐらいかよくわかっていないのですが(^^、VRAMエリアにもプログラムを置いて実行できますので、例えばテキスト表示のみに限定して$3C00~$43FFの2KBをVRAMにして残りをプログラム領域にすることはできます。
        ただ別の問題として、$00FD~$0111を割り込みベクタとして使用するので、この領域は避ける必要があります。
        CRTCの件については、エミュレータのバグのような気もしてきましたので、こちらで調査してみます。

        1. $3C00~$43FFをVRAMにして残りをTPAにするのは良さそうですが、TPA領域を歯抜けにする方法が分からないので色々調べています^^;;;
          テキスト表示のみでグラフィックを使わないことで画面表示に影響を与えない方法があればいいのですが、$3C00~$43FFにプログラムがロードされてしまうとテキスト表示に影響が出るのではないかと思っています^^

          割込みベクタも悩ましいですね。
          FM7は$FFF2からのベクタが書き換えられるのですがレベル3は書換できないようですね
          $0100からのワークエリアを使うしかなさそうで、こちらも謎が残っています^^;;
          CRTCの件は私も検証不足ですので、私のテストがポンコツの可能性が高いです・・・

          1. TPAはコマンドをロードするのでしたね。となると歯抜けには出来なさそう。割り込みベクタ$FFF2~$FFFFもROMなので変更できないですね。マーク5限定ならバンク切り替えでRAMに出来ますが。やはり、拡張カードに何らかの細工がありそうです。なので私はお手上げ(^^;;;;

            CRTCの件ですが、こちらはバグではなくレベル3 BASICのワークエリアを同時に変更する必要があります。
            $00A2が文字数(40 or 80)、$00A3-A4が表示画面の開始アドレス(CRTCのR12,R13と同じ値)、$00A7がスクリーンモード($00:40字ノーマル、$01:80字ノーマル、 $02:40字ハイレゾ、 $03:80字ハイレゾ)となります。
            また、カーソルの位置ずれはCRTCのR8を$4xから$8xにすると直ります。レベル3とS1ではカーソルスキューが違うようです。
            インターレス・ノンインターの文字セット切り替えは$FFD6(INTERACE-SEL)のビット3で行います。

            1. レベル3のVRAMエリアと割込ベクタは引き続き色々調べてみます^^
              CRTCの件、情報ありがとうございます
              ROMのサブルーチンを使用しない環境でCRT出力をしたくて実験していたのですが、CRTCのパラメータ設定の後にワークエリアに設定しないといけないというのは悩ましいですね^^
              CRTCのパラメータを設定した後に頂いたコメントの通りワークエリアを設定すると正常に表示できました。
              ROMのサブルーチンを調べる際にワークエリアに関連する部分も調査が必要ってことですね^^
              なかなか奥が深いです(笑

  2.  こんばんは、MB-6892 の資料(MARK5解体新書)を少し見てみました。
     VRAMの影響を受けずにフルRAM化するには、64KB拡張RAMカードを追加する想定のようで、PIA-Aポートと BANK-REG($FFE8) を操作して拡張RAMを2分割でバンク切換し、制御を移して利用する説明になっていました。
     標準の VRAM領域($0400-)は裏にあるカラーRAM の関係もあり、CRTCとの関係は固定されているように思いましたがどうでしょうか。

    1. マーク5は拡張RAMを使うとオールRAMで動作できそうなのですが、初代やマーク2ではどうしてもVRAMが邪魔になりそうで、悩んでおります^^;;
      当時はレベル3用のFLEX9やOS-9が存在したようですので、何かいい方法があると思います^^
      それにしてもFM7用のFLEX9やOS-9は時々見かけますがレベル3用は見たことが無いですね。

      1.  なるほど L3/MarkII でどうなっていたかも気になりますね。
         FLEX09 はソフトウェアのみで、S1のL3モードでも動作可能と書かれていました。
         L3/MarkII/Mark5 ともにカラーRAM と CRTCの関係から、$0400-$4767 以外を VRAMとすることは基本的にないと思えますので、FLEX09は仕様通りユーザエリアの先頭(ハイレゾを使うのであれば $4768)以降のアドレスで実装されていたのではないでしょうか。
         他方 OS-9L1は専用カードを使うようですので、ワークや VRAM領域をバンク切換して先頭からリニアな RAM空間を作っていた可能性は考えられそうです。

        1. ホント、初代レベル3やマーク2でどうやってFLEX9を動かしていたのか興味深いです。
          FLEX9のソフトはバイナリ内にロードアドレスや実行アドレスを持っているようなのでOS側でTPAの開始アドレスを自由に設定できないのではと予想しています。
          OS-9の専用カードの写真を見ると一つのLSIはRTC(MC146818)で、もう一つはPIA(6821)で拡張プリンタ用だと予想しているのですが、バンク切替などもあるんですかね!?
          でもバンク切替できるRAMは無さそうな感じも・・・
          せるじおさんの方で今後レベル3のFLEX9を見る機会がありましたら、情報をお願い致します^^

          1.  OS-9カードの写真あるんですね!RAMが載ってないようでしたらバンク切換してなさそうですね・・・失礼しました。しかし外部プリンタ用のコネクタがあるんでしょうか?不思議なカードですね。
             ちょうど AppleII の 6809カード(THE MILL)上で動作する OS-9L1 の記事があったので見てみましたが、このカードも RAM は積んでおらず、本体側の RAM を使うようでした。
             また L3 の OSについて何か発見がありましたらまたレポートしたいと思います^^

            1. せるじおさんから貸し出し頂いた資料の写しで確認致しましたので同じ写真かと思います^^;;;
              基板左側はアンフェノールの36Pっぽいコネクタが見えますので40PのLSIがPIAだと予想致しました。
              基板右側にリボンケーブルのコネクタが見えるので、もしかすると2枚セットの基板でもう一枚にRAMがあるのかもしれません。
              基板の写真を見ているだけで想像が広がってきてワクワクしますね^^

          2. 初代のL3ではRAMはMAX40KBでしたから,このエリア内でFLEXを動かしていたのではないでしょうか?
            なお,私の初代L3は自前で改造してフルRAM化してあります.もっとも後2KBはROMが優先されるようになっていますので実際には62KB-RAMですが.この状態でROMの部分をDISK-BASICの後に書き加えてBOOTルーチンを改造することで62KB-RAMの状態でBOOT時にRAM上にROMの内容を上書きする形でBASICをRAM化して動かしていました.
            ちなみに当時はレジスタへの書き込みで切り替えるような工作ができなかったのでフロントパネルにトグルスイッチを付けてスイッチで切り替えるようにしていました…

            1. その後、情報を頂いてレベル3用のFLEX9はOS起動後にソフトをリロケートしてレベル3のメモリマップ変換するソフトが添付されていたそうです。
              それでFLEX9からもVRAMエリアを使わないように工夫をしないとダメだと思いますのでOSにも何らかの工夫があったと思われます。
              これでは私の手に負えないのでマーク5の拡張RAMを使ってチャレンジしようと思います。

  3. FLEX9のドキュメントによるとメモリに関しては
    1)$C000から8KBのRAM、$0000から少なくとも12KBのRAM ・・・△(半分NG)
    が要求事項ということですが一般には
    $0000~$BFFFはUSER RAM領域でこの領域の最上位アドレスが$CC2B-$CC2C(Memory End)
    に格納されているということのようです。
    FLEX9のバイナリ(.CMD)はCP/M80(.COM)より柔軟でたとえば
    $0400-$43FFを避けてプログラムを配置するということが可能です。
    「バイナリをVRAM領域に配置しないでね」という制限付きなら
    まぁ実現可能ではないでしょうか?

    1. トランジェントコマンドについてはご想像の通りVRAMのエリアを避ければOKのようで、レベル3用FLEX9にはアセンブラやエディタ等のソフトをリロケートするソフトが付属していたという情報を頂きました^^
      それでもVRAMエリアにデータがロードされてしまうと即座に画面が乱れると思いますのでOS側にも何かの細工が必要そうですね。
      VRAM以上に始末が悪いのが割込みベクタでFMの割込みベクタは$FFF2~のエリアが書換できるようなのですがレベル3はワークエリアに飛んできておりここが変更できないので、これは難儀です・・・
      私にはマーク5の拡張RAMを使ったALLRAM構成でなければ解決できそうにないです^^;;;

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。 本文に全角文字を2文字以上含めて下さい (スパム対策)