2018年8月16日木曜日

SBC6800で走るS形式のプログラム(2)メモリテスト

1. SWTPCのメモリテストプログラム
🔀ソースリストと取説のリンク先(海外サイト)🔀

 取説にはCDAT2, ROBIT2, MEMCON3, SUMTEST2の4つのメモリテストプログラムがあるが、
このうち、当Blogで使いやすいと考えたSUMTEST2をSBC6800に移植した。

【ファイル置き棚のリンク先】
    SUMTEST2.ZIP
  • 変更箇所


  •  利用法



以上

2018年8月12日日曜日

NAKAMOZU 開発者のソースリスト公開を受けて

NAKAMOZU BASIC の原ソースと当Blogの相違点

中段 「新たに発掘」の記事
ntbv9X.zipファイル
(ntbv9X.S, ntbv9X.asm, ntbv9X.LST, ntbv9X.MAP)

1. 当Blogの明らかなBUG
STACKラベルを訂正した。従前のプログラムは起動すると、NTBプログラムの先頭$0D00から6バイトを破壊していた。
ラベル   原ソース    当Blogソース   修正   
      FSTCK     L6C06     MONSTK

  •  訂正箇所




2. BUGでは無いが、修正した改良

  • 当Blogでは、ステートメント1行実行する毎にNULL($00)を出力して、FT231XS(USBシリアルインターフェース)の緑色LED点滅で動作を監視していたが、原ソースでにはないので修正
  • 実行中はSBC6800が沈黙してしまうので、不安になるかも。但し、CTL-Cで割り込みによる中断で動作確認可能
  • 修正箇所



3. 併せて改善した点

  • NTBから「EX」コマンドでMONITOR(MIKBUG,MIXDBUG)に戻った後、MONITORの「G」コマンドでNTBがホットスタートするようにした。これで、NTBプログラムにMONITORのブレークポイント設定「B」コマンドが利用できる。
  • 修正箇所

4. その他
  • 読みやすくするために、ラベルは原ソースに可能な限り修正していくこととしたい。
以上

2018年8月8日水曜日

NAKAMOZU BASIC の当Blogバージョン比較

⏩NAKAMOZU TINY BASIC 当Blog Ver.の説明⏪

BASIC ASCIIの記事のリンク先
【ソースリスト置き棚のリンク先】


➡とりあえず、NAKAMOZU TINY BASIC を使ってみたいという方は、
(1) SBC6800を製作する。
  製作事例のリンク先
(2) ソースリスト置き棚の ntbv9X.zipをダウンロードして、ntbv9X.SファイルをSBC6800にアップロードする。
  アップロード方法のリンク先
⬅ここまでです。

1. それぞれの相違点(NTBV3は削除しました)
     開始番地 NTB本体のメモリ配置 MONITOR(1) 割り込み 画面のBUG 
ntbv3  $0D00   オリジナルと同じ   あり    無し   あり      
ntbv7  $0D00   オリジナルと同じ   あり    無し   あり      
ntbv9X $0D00     異なる       無し    あり   無し       

      メモリ領域    ワーク領域        BASICプログラム容量    
ntbv3  $0100-$18F8    $1E00-$1F80        $1900-$1D00      
ntbv7  $0A00-$1E60    $08C0-$09FF     $0100-$08C0         
ntbv9X   $0D00-$1DE7(4.4KB) $0C00-$0CFF(256B)         $0100-$0C00(2.8KB)   

  • 注(1)ここで言うMONITORは当Blog手持ちのMEK6800 DII ROMで採用していたもので、NTBを走らせるのに必要ないものです。


2.それぞれをどう利用するか
  • ntbv3
    • とりあえず動くバージョンであり、本日の時点で不要と思うが。
  • ntbv7
    • NTB本体のメモリ配置が同じなので、自らVRAM制御ルーチンを開発して、それぞれのシステムに移植する。
  • ntbv9X
    •  BUG無し、割り込みありでNTBが走る。VRAMは使ってない。ROM化可能だが、NTBの特色である、グラフィック機能が生かせてない。

3.画面のBUG(変竹林)の解決
  • ROM版MIXDBUG (SWTBUGもどき)のブレークポイント機能でただひたすら追い込んで解決した。
  • プログラムテキストをRAMから読み込む時に1行に複数のステートメントを記述するための『:』を出力していたために発生していた。
  • 手持ちのROMをディスアセンブルした後の解析ミスが原因か?
    【修正部分はこのリンク先の第3章】

★ 今後の課題
  • BASICのアセンブリソース解き明かしについては、「ここらでよかろうかい」と考える。
  • BUGや改良策などについては、Twitterなどで発信していただけるとありがたいです。
  • 当Blogは、引き続きntbv9Xを使って、懸案課題のSBC6800用VRAMに関して考えていきたい。

以上




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を下記のように書き換え、再アセンブルした。



以上

2018年7月30日月曜日

SBC6800でROM化MONITORが走る

ROMでも、RAMでも走るMONITORが完成

🔁SBC6800走る🔁
当BlogではMIKBUG ROMに代えて、このMONITORを使っています
の中のMIXDBUGフォルダー
★ 特徴
 *ブレークポイントの設定
 *メモリ書き換えで後戻り可
 *メモリ上のデータ検索
 *コマンド一覧表示
 *SWTBUGコマンドコンパチブル
 SWTBUGのソースリスト、取説SWTPC-6800開発者のHPにある。

1.SBC6800用MONITOR

JBUG、MIKBUG、MINIBUGもどきなど試した結果、SWTPCのSWTBUGに行き着きました。移植作業+D、?コマンドを付加して使い勝手を改良し、SBC6800用にしたものです。

  • Motorola MONITOR共通のサブルーチン(ROM)
    • 1文字入力 $E1AC  INEEE
    • 1文字出力   $E1D1  OUTEEE
    • START        $E0D0
    • CONRL       $E0E3

2.MONITORコマンド




SWTBUGの記事については、置き棚のリンク先、BILLBUG関連資料のサイトにもある。
SWTPC SWTBUG, Ver 1.0[1977]

3.RAMでの利用法(まずはRAMで)

 ★ メモリ領域
           ワーク  - $0780 - $07C8
   プログラム- $0800 - $0C7D (約1.2KB)
 ★ 開始番地
   - $08D0
  • 置き棚フォルダーの「swtbugv1.zip」ファイルをダウンロード、解凍する。
  • MIKBUGの「L」コマンドでswtbugv1.SファイルをSBC6800にアップロードする。
  • アップロード方法については、次のリンク先を参考にして下さい。

  • MIKBUGの「M」コマンドでプログラム開始番地を設定する。
      • M 1F48
      • 1F48 ✖︎✖︎ 08
      • 1F49 ✖︎✖︎ D0
  • MIKBUGの「G」コマンドでMONITORが起動。プロンプト「$」が表示される。

4.ROMでの利用法

 ★ メモリ領域
           ワーク       - $1F00 - $1FC8
   プログラム - $E000 - $E47D(約1.2KB)
 ★ 開始番地
   - $E0D0
 ★ ベクトル
   FFF8 E000                    FDB      IRQV       IRQ VECTOR
   FFFA E181                    FDB      SFE         SOFTWARE INTERRUPT
   FFFC E197                    FDB      NMIV       NMI VECTOR
   FFFE E0D0                    FDB      START     RESTART VECTOR

【当Blogで使用した道具とROM】

  • Universal Programmer TL866IIPLUS(http://www.Xgecu.com)
    • ソフトウェア Xgpro v7.22
  • ROM(32KB)
    • ATMEL AT28C256 15PI
    • CATALYST CAT28C256P
  • 置き棚フォルダーの「mixdbugv1.zip」ファイルをダウンロード、解凍する。
  • ROMの焼き方
    • Win10 PCでXgpro v7.22を起動
      • 起動時に「Config file error!」が出るがそのまま使用
      • HEXファイルが読み込めなかったので、binファイルを使用
    • mixdbug.v1binファイルをOPEN
      • File load Options で矢印のように設定する。
WIN10では文字,アイコンが小さすぎる。WIN8.1ならOKなのだが
Programming successful ! の表示
  • SBCにROMを挿してPOWER ONし、プロンプト「$」が表示されれば起動OK
    • ?」コマンドでコマンド一覧が表示される。

ROMの選択や焼き方については下記の記事を大いに参考にしました。

「Old MC6800」さんのHPのリンク先


 ★ ワークメモリ領域



以上

2018年7月27日金曜日

SBC6800で走るS形式のプログラム(1)MONITOR

(1)🔂monitor🔂
🔀MONITORのソースリスト🔀
★メモリダンプやメモリ変更、パンチ、ロード★
の中のBILLBUGフォルダー
1. 海外のサイト記事をSBC6800に移植したMONITOR
S形式のファイルBILLBUGv1.Sを上記の置き棚よりPCに取り込む。
MIKBUGのLコマンドでSBC6800にアップロードする。

【プログラムのアップロード方法】を参考にしてください。


2.  MONITOR コマンド

3. アセンブリソースリストの内容
リストはBILLBUGv1.S, billbugv1.asm, BILLBUGv1.LST

    • MONITORの開始番地 $0A00
    •             ☆ $0A00-$0C86
  • MIKBUGのサブルーチンは使用していないので、ROM化が可能なはずですが、当Blogでは試していない。
    • INEEE は  ソースリストのCHRIN
    • OUTEEEは ソースリストのCHROUT

以上

2018年7月18日水曜日

当ブログ確定版:NAKAMOZU TinyBasicアセンブリソースリスト

🔂NAKAMOZU TINY BASIC🔂

当BLOG確定版ソースリスト

🔀付録MONITORのソースリスト🔀
★メモリダンプやメモリ変更、NTB起動★

1. アセンブリソースリストの内容
☆当Blog確定版は次のように整理☆
リストはntbv7.S, ntbv7.asm, ntbv7.LST, ntbv7.MAP, ntbv7.MAP, ntb7.bin
  • ntbv3.asmに残っていたゴミを取り除き,付録MONITORを含めたプログラム部分を$0A00-$1E60(5.5KB)にパックしました。
  • これで、Basicプロブラムテキストが$0100-$08C0までの約2KBになりました。
  • NTBインタープリッタ領域はNOPを挿入してオリジナルと同一の配置にしました。
  • 従って、NTBの記事に基づくbinaryレベルでの移植が可能です。

    • MONITORの開始番地 $0A00
    •             ☆ $0A00-$0CC3
    • NTBの開始番地    $0D00
    •             ☆ $0D00-$185A
    • VRAM制御ルーチン
    •         ☆ $185B-$1E60



★ソースレベルで移植するときのクロスアセンブラの作法の参照元は


2. MONITOR コマンド
  • ソースリストはVRAM制御ルーティンが含まれたままになっている。
    • D メモリダンプ
    • G 指定番地にジャンプ
      • G 0D00 改行でNTBスタート
    • J  NTBスタート
    • M メモリ書き換え
    • B,C,T 不明

  • MIKBUG→MONITOR→ NTB の順に起動しますが、スタックの処理が十分でないため、NTB→MIKBUGに戻る時にハングすることがある。
  • リセットでも解消しないため、POWER OFF→ONを必要とする。
  • 追加:MIKBUGから M 1F48 0D. 1F49 00を書き込んでG スタートすれば、MIKBUGNTBの往復が可能になる。



3. NAKAMOZU TINY BASIC
  •  素数の計算、EXP(指数)の計算、πの計算とも走ることを当BlogのSBC6800で確認しています。




  • Binaryでntbv7.binと当Blog所有のMEK6800D IIのPROMのNTBプログラム領域を比較したものです。



4.追加:ntbv7.SのSBC6800へのアップロード
  • Tera Term シリアル設定:送信遅延を下図のように設定すれば、1分以内で完了することを当Blog環境(Win10)で確認。


★未解決課題
  • プログラム(ASCIIの記事)を走らせるとわかるようにFOR NEXT,DO UNTIL実行時に「:」が出力されてしまう変竹林!
  • STACK処理が定かでないので、MONITOR実行中にハングすることがある。NTBでは無い。

  • Binaryでntbv7.binと当Blog所有のMEK6800D IIのPROMのNTBプログラム領域をなんども比較しているが、問題は見当たらない。



以上







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

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

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