1と2のリビジョン間の差分
2020-11-06 11:37:56時点のリビジョン1
サイズ: 3029
編集者: keitaroh
コメント:
2020-11-06 11:39:19時点のリビジョン2
サイズ: 3044
編集者: keitaroh
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 20: 行 20:
   * ※実際に停止した場合はウォッチドッグ機構により再起動がかかる。    * ※実際にシステムが停止した場合はウォッチドッグ機構により再起動がかかる。

概要

  • 実際にドルアーガの塔を遊べるモード。通常モード。
  • 起動時処理部やテストモード処理部と異なり、マルチタスクで動作している。
  • ディップスイッチ等でテストモード起動設定へ切り替えると、起動時処理部へ分岐する(つまり再起動する)。
  • ディップスイッチで「画面の停止」設定へ切り替えると、動作を一時的に停止する。

マルチタスク機構

  • ゲームモードではマルチタスク機構が起動しており、大半の処理が「タスク」として記述され(見かけ上)並列動作する。

特徴

  • 協調的マルチタスク(ノンプリエンプティブ・マルチタスク)である。
    • タスク切り替えをタスク側で能動的に行う。
    • したがって、あるタスクが切り替え処理をしないまま無限ループに入るとシステム全体が停止する。
      • ドルアーガのマルチタスク機構は垂直同期割り込み処理と連携動作しているので、垂直同期割り込み処理も道連れにする。
      • ※実際にシステムが停止した場合はウォッチドッグ機構により再起動がかかる。
    • 自主的に切り替えない限りタスクの切り替えが行われないので、あるタスクの実行中に他のタスクが割り込むことがない。
      • タスク実行中は垂直同期割り込みが停止されるので、垂直同期割り込み処理すら実行されない。
  • メモリ保護はされない(というより、出来ない)。
  • レジスタの退避をしない。
    • タスクを切り替えた時点で全レジスタの内容が失われると考えなければならない。
    • 切り替え後に引き継ぎたいデータがある場合はワークエリアに保存する必要がある。
  • 軽量で高速に動作する。当時の非力な CPU でも十分なパフォーマンスが得られる。
  • 各タスクは一つの用途に専念できるため、単純で読みやすいプログラムコードを簡便に書くことができる。
    • 経験の乏しいプログラマでも、バグが少なくデバッグのしやすいコードを書ける。
    • とはいえマルチタスクには違いないので、同期ミスによるバグが混入するリスクがある。
      • そして同期ミスによるバグは発見が難しい。
  • ドルアーガのような「状態情報」を持つ敵のプログラミングをする場合でも、状態情報IDのような変数を用いずにプログラムできる(詳しくは後述)。
  • スプライト制御用のタスクと、非制御用のタスクの二種類がある。
    • スプライト制御用のタスクにはタスク一つにつきスプライト一枚が割り当てられる。また、専用のワークエリアが32バイト分確保される。

ゲームモード (最終更新日時 2020-11-20 15:33:16 更新者 keitaroh)