2018年12月1日土曜日

SBC6800+SBC-IOのサンプルプログラム(2)オセロ

乾謙一氏制作の「オセロ」(Ascii,june,1979)を走らせる


このプログラムは、カセットテープに記録していた時代物を当Blog所有のMEK6800 DIIにロードしてから、SBCに転送し、Tera TermのTEK4010エミュレーションで表示可能なように、加筆・修正を加えたものです⏪
NTB_PROV3.TXT,OTHELLOV3.S
OTHELLV3.zip
(otheV3.asm,otheV3.LST,otheV3.S,tekv3.asm,TEKV3.LST,TEKV3.S)

1. NAKAMOZU TINY BASIC ROMのバージョンアップ
 オセロプログラムでは、駒を移動するためにBASICのKEY関数を使用するので、割込みを使った関数を組み入れた。合わせて、ROMのメモリ割り付けを整理しバージョンをV9にあげた。
 従って、V9を焼いたROMに差し替えておく必要がある。
ファイルは置き棚にアップした。
【置き棚のリンク先】 ntbmixdV9.zipのBIN,HEXファイル
 ★ KEY関数のテストプログラム
  KEYはPCのキーが押されていない時、100を返す。
  次のプログラムは押されたキーのヘキサデシマル値を表示する。

10 A=KEY
20 IF A=100 GOTO 10
30 PRINT HDT(A);
40 GOTO 10
50 END

2. オセロプログラム
 ★ 下記ルーチンを合体したOTHELLOV3.S をロードする。
   ・オセロのサブルーチン(otheV3.S)
   ・TEK4010エミュレーションサブルーチン(TEKV3.S)
 ★Serial portのTransmit delay 20msec/charに変更する。
 ★Monitorの Z コマンドでNTBを起動した後、
  NTB_PROV3.TXTをTera Term画面にCOPY&PASTEする。
  途中でERRORが出る時にはさらに、Transmit delay 200msec/lineにしてみる。
 ★>RUNでスタートする。

3. オセロの遊び方
  • NANNIN DE YARU ? 
   0:コンピュータ同士 1:コンピュータと対決 2:二人の対決
  • BEGINNER ?
   0:初心者      1:熟練者 SBCが5分位、熟考することがある

  • 駒の移動法(割込みによるKEY関数を使用している,4155行)
   I:上 J:左 K:右 M:下

  • CTL-Cで停止、終了
コンピュータ同士対決中

対決終了画面
画面右側のABCD表示は無視してください。
(4060,4070行を消去すればなくなります)

4. TEK4010のアルファベットモードのデモプログラム
 *OTHELLOV3.S をロードした後、 TEKDEMOV3.TXTを走らせる。



5. オセロプログラムを移植した手順


◎1.制作当時の機種
◎2.SBC6800+IOとMEK6800 DIIのメモリ構成
◎3.当Blog環境と条件
◎4.BinaryデータのSBC6800への転送
  1.〜4.は 当Blogの記事【SBC6800+IOのサンプルプログラム(1)】と同じ
 BASICプログラムの転送
  MEK6800 DIIのBASICテキストRAM領域をPコマンドでSBCに転送する。
  SBCのRAM領域に転送されたテキストデータをTera Termに表示させる。
  PCのCopy&Pasteでテキストファイルにする。

以上

2018年11月25日日曜日

NAKAMOZU TINY BASIC ROMでできること

⏮NTBasic ROMはNTBとSWTBUG及びその追加ツールを合体⏯

ROMの内容を順次解説していく


1. SWTBUG拡張(版MIXDBUG)

★コマンド
 ・?(拡張)
   HELP
 ・B
   BREAK POINTの設定
   1つのみ
 ・C
   CLEAR
 ・D(拡張)
   DUMP
   ・E
   Sフォーマットの終了データ出力
 ・F
   指定範囲のデータ探索
 ・G
   アドレス$A048のデータ番地に移動
   NTBを起動した後は、NTBのホットスタート番地から起動
 ・J
   指定アドレスプログラムを起動
 ・L
   SフォーマットデータのLOAD
    SBC6800のACIAからLOAD
 ・M
   指定アドレスのメモリ変更
   スペースで次へ
   ^で前に戻る
   CRで終了
 ・P
   SフォーマットデータのPUNCH
    SBC6800のACIAへPUNCH
 ・R
  レジスタ内容表示
 X(拡張;HELPには表示されない)
   追加版TBUGに移動
 ・Z
   BASICの起動

2. TBUG(追加版)


★コマンド 
 ・B
   ブランチ範囲のチェック
   ・D
   DUMP
 ・G
   SWTBUGに移動
 ・J
   指定アドレスにJUMP
 ・L
   カンザスシティフォーマットデータのLOAD
    SBC-IOのACIAからLOAD
 ・M
   指定アドレスのメモリ変更
   スペースで次へ
   CRで終了
 ・P
   カンザスシティフォーマットデータのPUNCH
    SBC-IOのACIAへPUNCH
 ・T
   指定した範囲のデータを命令語長形式に変換

 ・Z
   BASICの起動

3. サンプルプログラム
 ・電源ON後、DRAG&DROPでNTBプログラムのスタート
  当Blogの【ファイル置き棚 SBC6800+IO】のTEK_RUN.txtをDRAG&DROPする。


以上

2018年11月22日木曜日

NAKAMOZU TINY BASIC(NTB)をROMに焼いてみた

🔀NTBとSWTBUGもどきMonitorを1つのアセンブルソースリストに合体🔀

ntbmixdv9.zip
(ntbmixdv9.asm,ntbmixdv9.LST,ntbmixdv9.HEX,ntbmixdv9.bin)
🔀SBC6809の記事は【SBC6809をつくる】です🔀
SBC6800 2種とSBC-IO 2枚の組合せでプログラムの試験を実施

1. 当Blogの環境と条件
 ★PC:
  ・ TeraTerm Setup
    - Terminal
      New line Receive  : AUTO
      Auto switch(VT<->TEK) ☑️
図1サンプルプログラム起動時
    - Serial port
      Transmit delay :
       この設定はPCとの相性で、適宜変更を要する。以下は当Blogの例示
図2 S ファイルの読込み時
図3 BASICプログラム読込み時(CPU clock 1MHz)
clock 614KHzの時は20msec/char必要
  ・ Xgpro TL866II Pus
    Universal Programmer EEPROMの焼き込み


 ★SBCシリーズの製作:
  SBC6800 (スイッチサイエンス)  *32KBRAMの実装で試験
  SBC6800 Adapter Rev.02 (ORANGE pico)
  SBC-IO Rev.02  (ORANGE pico) *16KBRAM、MC68B21、MC68B50の実装
  SBC-BUS Rev.02 (ORANGE pico)

 ★稼働時の消費電流:
  4.83V  0.22A  

 SBC6800+IOとMEK6800 DIIのメモリ構成
図4 メモリマップ

2. ソースリストのメモリ割当
ROM(図4の$E000-$FFFF)
 *NTB                            $F300  -  $FF38
 *TBUG(SWT extension) $E600  -  $F2B6
   VRAM CONTROLを含む
 *MIXDBUG                   $E000  -  $E5CB
RAM(図4の$0000-$5FFF)
  *TBUG                        $A100  -  $A1FF   STACK&WORK
  *MIXDBUG                  $A000  -  $A0FF   STACK&WORK
  *NTB                            $4000  -  $5FFF  VRAM予約
                                        $2000  -  $3FFF    BASICプログラム
                                        $0000  -  $00FF    WORK
RAM(空き領域)
 *          $A200  -  $DFFF
 *          $6000  -  $7FFF
 *          $0100  -  $1FFF

3. EEPROMに焼き込む
  • 使用したEEPROM(32KB)
   ・CATALYST CAT28C256P
   ・ATMEL AT28C256 15P
  • Select ICで 32KB AT28C256を選択し、「TO Buffer Start Addr(HEX)」を 6000に設定する。
  • File ntbmixdv7.binを読み込む。



4. BASICの起動
  • SBC6800にEEPROMを挿して、電源ONするとMonitorのプロンプト「$」が表れる。
  • ZコマンドでNTBが起動し、プロンプト「>」となる。
  • プログラムのSAVE、LOADはSBC-IOのACIA(MC6850)からも可能になっている。
5. サンプルプログラム
 ★電子音楽プログラム【denonv1.S】をロードした後、
 ★Serial portのTransmit delay 10msec/charに変更(図3)する。
 ★Copy&Pasteで次のプログラムを入力する。
 ★USER($01A0,X,C)は、先頭番地$01A0の電子音楽サブルーチンです。
10 REM *** KEY TUNE PROGRAM ***
20 IN. "PITCH :" A
30 IN. "LENGTH:" B
40 N=0
50 DO:N=N+1
60 C=B*$100+A
70 K=USER($01A0,X,C)
80 U.(N>100)
90 GOTO 20
130 END
  • RUNで起動、電子音楽サブルーチンの音階テストが動作する(図1、2、3)
  • コントロールCで終了する。
★その他のサンプルプログラム
    【プログラムの置き棚】のSBC68IOフォルダ
 *MIXDBUG Monitorでtekv1.Sをロードした後、NTBasicのTEKDEMO.txtを走らせる。
TEK 4010 DRAWING DEMO
*置き棚のBASICPROフォルダにあるプログラム(NTB関連記事より引用)
  checksum.txt  メモリダンプ
  EXPkeisan.txt  指数の計算
  sosukeisan.txt  素数の計算
  PAIkeisan.txt   πの計算
  
6. 参考
 ASCII, VOL.3, #4 April, 1979 記事 表3 変更箇所(1)とROMとの対応表

😄twitterは  @Leo_yumesichi

以上 

2018年11月18日日曜日

SBC6800+SBC-IOのサンプルプログラム(1)電子音楽

PCのキーで音階を生成する

このサンプルプログラムは機械語で制作し、カセットテープに記録していたものを読み解いて、アセンブル言語に翻訳したものである⏪
(denonv1.asm, denonv1.LST, denonv1.S) 
1. 制作当時の機種
 *MEK6800 DII(MOTOROLA)
 *ROM,RAM基板

 *VRAM基板
 *パラレルキーボード(YEC製、TOUCH KEYBOARD)
 *静電プリンタ(関東電子機器、MODEL TSP-7706B)

1978年

2. SBC6800+IOとMEK6800 DIIのメモリ構成



  図のSWTBUGにはDUMPコマンドなどを追加した当Blogの【MIXDBUG】を使用している。

3. 当Blog環境と条件
 ★PC:
 win10に次のコマンドをインストール:
  TeraTerm

  dasmx
  mbhconv
 
 ★SBCシリーズの製作:
  SBC6800 (スイッチサイエンス)  *32KBRAMの実装で試験
  SBC6800 Adapter Rev.02 (ORANGE pico)
  SBC-IO Rev.02  (ORANGE pico) *16KBRAM、MC68B21、MC68B50の実装
  SBC-BUS Rev.02 (ORANGE pico)
 ★稼働時の消費電流:

  4.83V  0.22A  
 参照記事:
  「電脳伝説さん」の【ホームページ】
  「レトロな雰囲気さん」の【SBC6800/SBC6809ルーズキットを動かす】
  「kuni-netさん」の【CPUボード(SBC6800)で電大版TinyBASICを動かす】
   当Blog の製作記事【SBC6800+SBC-IOで走るプログラム】


4. SBC6800への転送
  •  MEK6800 DIIのカセットインターフェースに使用しているACIA MC6850のTXD,GNDをSBC-IOのシリアル入力コネクタのRXD,GNDに接続。



SBC-IO Rev.2回路図の一部



  •  MIXEDBUGのカンサスシティスタンダードデータ入力サブルーチンで、MEK6800DIIのプログラムをSBC6800のメモリに取り込む。
  •  SBC6800のPコマンドで、PCにモトローラSフォーマットで送り込む。
  •  SフォーマットデータをCopy&Pasteでテキストファイルにする。-->denonv1.S
  •  Sフォーマットをバイナリ変換する。--> denonv1.bin
  • Binaryファイルをディスアセンブルする。
    • Binaryファイルをdasmxで逆アセンブル
    • dasmx -a -o先頭番地 -c6800 denonv1bin
      • dasmxはググってインストール
      • -o先頭番地はプログラムの先頭アドレスで0x1234など
      • denonv1.asmを出力 
  • アセンブル出力を読み解く。
5. 電子音楽サンプルプログラム
    denonv1.zip(denonv1.asm, denonv1.LST, denonv1.S)
  • プログラム開始番地 $0100
  • プログラム領域   $0100-$02BE
  • メロディ記録領域  $0400-$0800
  • 音階データ領域   $025A-   ソースリストの306行目以降
             このデータを変更すればPITCHが変わる。
  • PIA ポートB アドレス $8052.$8053 を使い、CB2をON/OFFしてAUDIO出力します。
  • 同時にレジスタアドレス $8000 にPITCHデータが書き込まれ、4個のLEDが音階に合わせて点滅します、
  • CB2(J3 pin 26) とGND(J3 pin 6) にアンプを接続すればメロディが出力されます。
 ★ 使用法
  PCのキーで音階を生成する。
   0-9 :音痴な音階
   P    :プレイモード
   E    :プレイ中のストップ

★ 電子音楽プログラム(denonv1.s)

S1130100CE0400DF08CE0800DF0CBD0248BD022883
S11301108D627F000396014C97019105273EBD0235
S11301203524EF861F9702BD01B99C0C2A2E8D64DD
S1130130BD023524DD80309702BD01DB9600D60474
S11301408D5C7C0001BD0235815027108030910206
S113015027EA8D659C0C2A048D3A20B686409704C4
S1130160CE8000BD0224BD01EF259F96044627ECF6
S1130170970420EC8650DE08A700089C0C26F94F53
S1130180CE8052A7014AA7008604A70086409704A0
S1130190DE08DF064F97009701970297033937C6A9
S11301A03EF78053165A26FDC636F78053165A2654
S11301B0FD335A2AE9B7800039DE0696028AC0A7C1
S11301C000089601A70008DF0639DE06A600843F72
S11301D0970208A600970108DF06399602CE025856
S11301E009088C027727034A2AF7A600970039DE0C
S11301F006DF0A8D9B8DD39C0A27198DDE96013666
S1130200D60496008D98324A26F5368D33814527DB
S11302100D3220E1368D2981452703320C39320D08
S113022039CE10000926FD39B680184724FAB68065
S113023019BDE1D139B6801847B68019BDE1D1396D
S1130240B6801847B6801939CE02782004BDE1D1B2
S113025008A600810426F63940AA96887C6C60586A
S11302605548403830282018FFF8F0E8E0D8D0C8C6
S1130270C0B8B0A8A09890010D0A20504C45415335
S113028045204B455920494E3F202020203A302D0F
S1130290390D0A205020202020202020203A504CC4
S11302A041590D0A204520202020202020203A53A7
S11002B0544F5020504C41590D0A2D3E046E
S9030000FC

以上

2018年9月6日木曜日

SBC6800+SBC-IO用のMONITOR ROMを試してみる

SBC-IO用のROM化MONITOR

🔁SBC6800とSBC-IO Rev.2基板、SBC-BUS基板が必要🔁

★ SBC6800の参照先電脳伝説さんのHP 】
★ SBC-IO開発者の参照先【レトロな雰囲気さん】
★ SBC-IO基板の製作について【当Blogの参照先】
★ MONITOR【プログラムファイル置き棚のリンク先】
  置き棚にSBC-IO専用フォルダーを設置 
 - ROM版 mixdbugv5.zip RAM版 swtbugv5.zip swtbugv5.S
 - RAM版は動作確認用に作成したもので、システムRAMは$1F00に設定されている。

1. MONITORのメモリ割当
* ユーザRAM領域  $0000 -      SBC6800
* IO領域      $8000 -      SBC6800  SBC-IO
* システムRAM領域 $A000 - $A100         SBC-IO
* MONITOR領域   $E000 - $FFFF   SBC6800
* ユーザ領域    $0000 - $7FFF  SBC6800
* ユーザ領域    $A100 - $DFFF         SBC-IO

2. 特徴

 *ブレークポイントの設定
 *メモリ書き換えで後戻り可
 *メモリ上のデータ検索
 *コマンド一覧表示
 *SWTBUGコマンドコンパチブル

  • Motorola MONITOR共通のサブルーチン(ROM)
    • 1文字入力 $E1AC  INEEE
    • 1文字出力   $E1D1  OUTEEE
    • START        $E0D0
    • CONTRL       $E0E3
  • カンザスシティ標準の入出力ルーチン(ROM)
   SBC-IOのACIA(MC6850)での入出力。入出力時にSBC-IOのLEDが点滅
    •    PUNCH  $E600
    •      アドレス開始番地を $A002 、終了番地を $A004 に設定して
    •           J E600 と入力
    •    LOAD   $E680
    •           J E680 と入力
3. MONITORコマンド

> CコマンドはSWTPCの端末CT-1024のカーソル制御で、$10(CLEAR),$07(BEL)が出力されます。
> Gコマンドは$A048、$A049に書き込まれた番地からプログラムを起動します。             (注)SBC6800のMIKBUGでは$1F48、$1F49になっています。



4. ブレークポイントの使い方
   開発者のHP「SWTBUG USERS GUIDE」より
   → http://www.swtpc.com/mholley/swtbug/SWTBUG_Users_Guide.pdf

  • $A048 と $A049 にデバッグするプログラムの開始番地を設定します。
  • コマンド「B」を一時停止させたいアドレスに設定します。この時、このアドレスにはSWI($3F)が書き込まれます。
  • 「G」コマンドでプログラムをSTARTさせるとプレークポーントのアドレスで停止し、レジスタ内容を表示します。
  • 次のブレークポイントを設定します。この時、最初のブレークポイントアドレスに書き込まれた$3Fはもとのインストラクションコードに戻されます。
  • 「G」コマンドで最初のブレークポイントアドレスからプログラムが実行されます。この過程で$A048,$A049は再実行アドレスが書き込まれているので「M」コマンドで書き換えてはいけません。
  • ❶ SWIVアドレスはブレークポイントで使用されていますので、デバッグするプログラム内で使用していると正常な動作は保証されません。
  •  同様にプログラム内でスタックポインタを書き換えていると正常な動作は保証されません。
  • ❷ ブレークポイントが設定されていない時はSWIVアドレス、$A012 に$E125、設定されている時は$E124が書き込まれています。
  • ❸ ブレークポイントは次のように、連続して同じアドレスに設定すると、元のインストラクションが失われ、プログラム内容は失われてしまいます。
   B 1377
   G
   B 1377
     次の場合にはプログラム内容が失われることはありません。
   B 0100
   B 1377
   B carriage return

  • ❹ ブレークポイントルーチンはRAM $A014-$A016の3バイトを使用しています。

以上










2018年9月1日土曜日

SBC6800+SBC-IOで走るS形式のプログラム(3)SBC-IO 基板テスト

SBC-IO Rev.2 の製作

 まず、HPをよく読んでおくことですが、基本的には基板のシルク印刷通りに部品を配置し、半田付けをすれば終わりです。RAM挿入時は下記に注意



★ 参考までに、当Blogがルーズキット製作時に出会った躓き例を紹介します。
  • 接触不良の大半は、半田忘れ、芋半
  • 接触不良で難儀したのは、ロゴ印刷が新品同様なセコハンICのPIN汚れ(写真参照)
  • ICの逆挿し。EPROMはお釈迦、SRAMは無事
  • 基板の細部のブリッジの見逃し(写真参照)


ピンの油汚れ
パターンプリッジ


1. 各機能ICのアドレスと当Blogで走らせたテストプログラム

          番地            部品               テストプログラム 
レジスタ $8000         74LS173   4個のLED ON/OFF     MUSIC.S               
RAM  $A000-$DFFF HM28128ALP 拡張RAM (16KB)      sumtest2.S            
ACIA    $8094-$8095   MC68B50       

PTM  $8030-$8037   MC68B40      
PIA    $8050-$8053   MC68B21      コネクタJ1に出力    MUSIC.S               


2. メモリテストプログラム
  • sumtest2.S
    • MONITORのM コマンドで、$1F02-05 に開始アドレス $A000 と 終了アドレス $D000を書き込んで G コマンドでメモリチェック開始
    • この例では、終了アドレスを$D000としているが、$E000にすれば、全RAMチェックとなる。当Blogで確認済み
  • このBlog】を参照

  

3. レジスタとPIAテストプログラム

  • MUSIC.S
    • プログラム開始番地 $0020
    • プログラム領域   $0000-$0086  MELODY data $00C0以降
    • MEK6800 DIIのマニュアルに掲載されているサンプルプログラムにレジスタ書き込みを追加したものです。
    • PIA ポートB アドレス $8052.$8053 を使い、CB2をON/OFFしてAUDIO出力します。
    • 同時にレジスタアドレス $8000 にPITCHデータが書き込まれ、4個のLEDが音階に合わせて点滅します、
    • CB2(J3 pin 26) とGNDにアンプを接続すればメロディが出力されます。













以上




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

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

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