2018年8月6日月曜日

SBC6800で割り込み処理を使ってみる。

割り込みでNTB BASICプログラム実行を中断させる

🔁割り込み処理の試験プログラム🔁
🔁NAKAMOZI TINY BASIC に組み込む🔁

1. 割り込み処理の試験プログラム

  • 6800の割り込みの実践プログラムはググってもあまり見当たらない。そこで「Old MC6800」さんのHPを参考にして、アセンブルソース(irqv1.asm)で試験した。6850の割り込み出力を6800が検出して処理を行う。
  • ソースリスト
    • irqv1.zip ファイル
    • irqv1.asm     irqv1.LST     irqv1.S     irqv1.MAP
★ MC6800    CLI で割込み待ちとする。
★ MC6850    ACIAコントロールレジスタに$95を書き込み、割込み出力モードにする。

【 http://www.swtpc.com/mholley/Notebook/Hardware_ACIA.pdf より引用】
  • Main Routine:割込み待ちのループで、ワークメモリIRQCHR ($1F17)がNULL($00)で無ければ「IRQ OK」のメッセージを出力する。
    • MIXDBUGで $1F14 - $1F16 はブレークポイントのワークメモリ
    • そのため、IRQCHRはMIXDBUGの空きである $1F17  とした。


  • 割込み Routine:CTL C($03)が入力された時に、ワークメモリ($1F17)に$03を書き込む。


  • DELAY Routineがあると割込が発生しない。複数の割込でIRQCHRがリセットされると推測される。従って、IRQON直後にACIAデータを読み込む必要がある。


2. NAKAMOZU TINY BASICに組込む
  • BASICプログラム実行時にステートメント1行を読む毎に割込を受け付ける。
  • サブRoutine(IRQON)は、ACIA(MC6850)のコントロールレジスタ($8108)に$95を書き込み、CLIを実行する。
  • 割込RoutineでCTL C($03)の入力があればNTBのHOT STARTにジャンプする。 
3. BASIC出力画面の変竹林が解消しているが、現在テスト中なので、別途Blog予定
  • プログラムテキストをRAMから読み込む時に1行に複数のステートメントを記述するための「:」を出力していたために発生していた。
  • ソースリストの変更部分
    • ソースリスト置き棚のntbv7.asmを下記のように書き換え、再アセンブルした。



以上

1 件のコメント:

  1. SBC6800データパックのTESTINT.ASMが割り込み受信をやっています。夢七Leoさんがやろうとしているのは何か別のことなのかな。

    返信削除

SBC6800+SBC-IOのサンプルプログラム(3)TEK4010 Emulation

SBC6800のVRAM出力をTEK4010 Emulationでシミュレーションする 【当Blogのプログラムファイル置き棚のリンク先】 1. 当Blogの環境と条件  ★PC:    ・  TeraTerm   Setup     - Terminal ...

これまでによく読まれた記事