デジットのジャンク基板もう2枚を動かした

大阪・日本橋のデジットで大安売りされていたらしいジャンクのマイコンボード、前回の投稿のあとさらにもう2枚をT.Tomo JE6LVE/JP3AELさんから頂いてしまった。写真のKBC-Z11とTMP68301基板(正式名称不明)。どうもすみません、ありがとうございます。てわけで関東在住であるにもかかわらず工作机周辺がデジットのジャンクだらけになっている。

KBC-Z11のCPUはTMPZ84C011で、Z80とCTCと独自設計のポートをいっぱい持っている。蔵書の『プロセッサ』に解説があって、たちまちLチカのプログラムが完成。しかし、コネクタのピン配置とジャンパの設定を調べる作業に難航。写真を撮ってパターンをなぞるんだけど、何でまたこんなところにべったりとシルク印刷しちゃうかね。

なぁんて愚痴を言っているうちに前回と同様、みかんとひよどりさんが調査結果を公開してくれた。いやボクもそれなりのところまでは調べたんだけど、結局、果報は寝て待て、になっちゃった。プログラムを27256に書き、JP3のH側にジャンパを挿し、組み込みLEDでLチカに成功。シリアルがないCPUだからこれがすべて。はいミッションを完了。

TMP68301基板のCPUは68kと制御信号設定機能とシリアルとパラレルを組み込んだ凄いやつ。自慢じゃないけどボクは68kをまったく知らないから動かすのは無理、そのうちやってみる、なんて言ってたらcomonekoさんがちゃっちゃと動かしてROMのジャンパ設定RAMのジャンパ設定を教えてくれた。両方とも32Kバイトのタイプだとこんな感じ。

こうなったらもう他人の褌で相撲を取るわ。comonekoさんのプログラムをほぼそのままパクり、パラレルでLチカに成功。68kのプログラムを初めて書いた記念にソースをGistへ貼っておく。まだシリアルを動かしていないが、それは昔ながらの格好をしていて現在のパソコンだとつなぎにくいため先送り。てことでさしあたりのミッションを完了。

ことによっては廃棄されていたかもしれない基板で規則正しく点滅するLEDは、ちょっと感動的な光景だね。基板を進呈してくれたT.Tomo JE6LVE/JP3AELさん、KBC-Z11の情報をくれたみかんとひよどりさん、TMP68301基板のLチカでボクのやる気スイッチを押したばかりか最後は褌まで貸してくれたcomonekoさんに改めてお礼申し上げます。

カテゴリー: 68000, Z80 | 2件のコメント

デジットのKBC-Z84015Sを動かした

大阪・日本橋のデジットが移転にともなう閉店セールで大安売りをやっていると知った(6月13日まで)。一般的な部品は通販で買えるがマイコン基板はジャンクの扱いになって実店舗販売のみ。関東在住の身としては指をくわえて見てるだけ、かと思ったら、このブログにたびたびお越しになるDAIさんが進呈してくれた。どうもありがとうございます。

KBC-Z84015SはTMPZ84C015のマイコン基板、KBC-Z84015EMはそのICE対応版。コネクタのピン配置などは同じで、それをみかんとひよどりさんが公開してくれた。ボクはこれらの基板とよく似たKBC-Z84Sをもっていて、取り扱い説明書は多くの説明が共通にあてはまるようだ。両方を突き合わせ、全貌が判明。さあ端末をつないでBASICを動かすぞ。

CPUがTMPZ84C015だと動かしかたはどれもみな似たようなもの。すでに秋月電子通商のAKI-80でBASICが動いており、あとは微妙な差異を埋めるだけ。問題はCTCのタイマモードで通信速度を決めているところ。デジットのマイコン基板はクロックが6.144MHzで、その方法だと半端な通信速度になってしまうから、CTCをカウンタモードで使った。

KBC-Z84015Sで動くBASICのソースとHEX-MBKBC.zip(116Kバイト)

CN1(50ピン)の結線図を下に示す。 KBC-Z84015S/KBC-Z84015EMとも同じ。CLKはCN2(30ピン)の29番ピンから引っ張ってきてここへつなぐ。電源はUSB-シリアル変換アダプタからとっている(バスパワー)が、基板上のコンデンサがすべて放電した状態でつなぐと突入電流に耐えられないことがあるため、別にスイッチ付き電源を用意するほうが無難。

KBC-Z84015S/KBC-Z84015EMには32KバイトのSRAMが取り付けられているが、ソルダバッドの初期設定により8Kバイトのみが有効。ただし、ゴーストの影響でBASICからは32Kバイトに見え、起動時、フリーのサイズを間違って表示する。小さなプログラムはそのまま動かして問題がない。きちんとしたい場合はソルダバッドJ2のAを短絡、Bを開放。

上の画面表示例で起動メッセージに続いて入力しているのはいわゆるLチカ、基板上の2本のLEDを交互に点灯させるプログラム。実行結果を下に示す。ジャンクの扱いとはいえ機能は完璧、見た目もきれい。普通に売っていても魅力的なのに聞くところでは百数十円らしい。いけね、いただきものを値踏みしちゃった。ボクにとってはプライスレスです。

知らない土地の行ったことがないお店で段ボール箱に放り込まれていたジャンクが、こうして手もとで動いているのは、考えてみれば不思議なもんだね。あちこちに散らばる個人の思いや情報をネットが結びつけた結果だと思う。進呈してくれたDAIさんと貴重な資料を公開してくれたみかんとひよどりさんに改めてお礼申し上げます。

カテゴリー: Z80 | 1件のコメント

SBC1802最終版が完成

RCA(インターシル/ルネサス)のCDP1802、通称COSMACはレトロCPUの実物を動かしてみる趣味と相性がいいと思う。ガリレオに乗って木星へ行った実績があり、微妙に偏屈な仕様を備え、速度はともかく低消費電力を目指した点が個性的。すなわち、夢と壁と設計上の目標が揃っている。そりゃあ挑戦するよね。出来上がったのがこちら、SBC1802。

CDP1802はインテルのCPUを基準にすればプログラミングモデルが偏屈だがハードウェアはまあ普通。特に8085とよく似ていてメモリまわりはSBC8085のコピペで完成。32KバイトのROMとRAMをつなぐもっとも簡単な構成だからアドレスデコーダは74HC04の1素子しか使わない。残り5素子がもったいないのでステータス等のインジケータを付けた。

まだ消費電力がどのくらい低いかわからない段階で作った試作機がこちら。バスパワーで動くだろうとは思ったが、ぜんぜんダメだったときに備えてACアダプタがつながる。そしてもしギリギリでダメだったらインジケータを簡略化して消費電力を抑えようという魂胆。この配線は最終版に残してあるが、説明が面倒くさいから隠し機能ってことで。

ソフトウェアはRCA BASIC3。端末との通信速度を自動判別するためクロックは適当でいいやと思ったら一部のUSB-シリアル変換アダプタでうまくいかない。しかたなく1.79MHz指定、RCAの方針どおり速度より低消費電力を重視することになった。ASCIIARTの実行時間は45分48秒。遅い! んだけどクロックを2倍にしたところでやっぱりダンペコ。

はせりんさん集計のASCIIART(マンデルブロ集合)ベンチマーク

ソフトウェアは、狙ったわけではないが、The 1802 Membership Cardで配布しているバイナリのいくつかが使えると判明。yanatakaさんに教えてもらってEPROMにMCSMP20A.binを焼いたらBASIC3を含むモニタを起動することができた。ソフトウェアの勉強不足は認めよう。その分これから先もいろいろな発見があると思う。

SBC1802に関する技術的な資料とソフトウェアを下のリンクで公開する。プリント基板はスイッチサイエンスさんとオレンジピコショップさんで頒布している。

SBC1802技術資料-PDF直リンク
SBC1802データパック-ZIPダウンロード
プリント基板頒布元
スイッチサイエンス-SBC1802ルーズキット
オレンジピコショップ-SBC1802専用プリント基板

前回の投稿で述べたとおり、SBC1802の開発過程ではたくさんのかたにアドバイスをいただいた。まさか、リリースしたあともなおみなさんの力で機能が向上するとは思わなかった。ありがたい限り、といって気付いたのだが、過去の製作物でも多かれ少なかれボクのチョンボをみなさんに救ってもらってるよね、ごめんなさい、全部まとめてありがとう。

カテゴリー: COSMAC | 2件のコメント

実はCOSMACやってます

1970年代のCPUを語って間もなく14年めに突入するこのブログでいまだCOSMACに一言も触れていないのは恥ずかしながらその存在を知らなかったから。知ったのは3年前、世界で最初のCMOSマイクロプロセッサはHD6303だよねってツイッターで言ったらほうめいさんが違うよCOSMACだよと教えてくれた。いまさらわかったような解説をするのもどうかと思うので概要はWikipediaのRCA 1802にお任せする。実物(同等品)はこれね。

COSMACの実践的な情報源は、世界的にはThe 1802 Membership Card、日本ではCOSMAC研究会かな。実物を入手したあと動かしかたで悩んでいたらCOSMAC研究会のかんぱぱさんがCPUボードとプログラムローダーボードをプレゼントしてくださって、とんとん拍子にLチカへ到達。おかげでハードウェアの構造はほぼ理解できた。ソフトウェアは勉強不足だが、よくできたBASICが流通しており、困ったことにぜんぜん困らない。

このブログでは、CPUをひとつモノにしたら、なるべくシンプルな回路に組み直し、プリント基板を頒布するのが恒例となっている。回路を組み直す段階で見落としていた知識を拾えるし、うまく動いたとき関心を寄せてくれたみんなと達成感を共有できたら嬉しい。てことでSBC1802の第1号機はこんな感じ。動くには動いたが、多少の問題があるし、なくていいものがいくつか付いている。それに気づかせてくれたことが第1号機 の成果。

COSMACは最高速を目指すより適度な速度にとどめて消費電力を抑える傾向があり、典型的なクロックは 1.79MHz付近。既成のソフトウェアを流用するためSBC1802はクロックを1.79MHzとしたが、もはやその周波数の水晶振動子が存在しない。解決策はnot logicalさんにいただいた。水晶振動子のまわりに余計な穴をあけておいて、既存のソフトウェアが1.79MHzを要求するときには分周可能な水晶発振器を取り付けられるようにした。

クロック1.79MHzを要求する代表的なソフトウェアRCA BASIC3が第1号機で起動。ただし電源スイッチをオフにした状態でも起動してしまう。全部のICをCMOSとしたときに起きるいつもの現象に対策を講じ忘れたことは、うかつではあったが致命的な問題ではない。SBCV20ほかで経験しており、Electrelicさんのアイデアによりすっきり解決することがわかっている。具体的なことは SBCV20の紆余曲折をご覧いただきたい。

電源スイッチがオフでも起動するくらい負荷が軽いならバスパワーで動く可能性が高い。同じく負荷が軽いSBCV20は、バスパワーだと電源スイッチを入れたとたんUSB-シリアル変換アダプタがリセットしてしまったが、SBC1802のほうは大丈夫だった。以上のとおり、みなさんのお知恵を拝借してSBC1802の第2号機を設計。その姿は、もうだいぶ話が長くなったので、次回の投稿で紹介する。

カテゴリー: COSMAC | 1件のコメント

WRT8755最終版が完成

WRT8755(インテル8755ライター)は過去に動いたと言ったりやっぱりダメだったと言ったり暫定的に完成と言ったりして混乱の極致にあった。それが都合7回目の作り直しでようやく完璧に動いたから最後のほうでやった修正の内容とともにご報告する。はいこちらちゃちゃっと動かす予定が結果として莫大な開発費を食い潰してくれた基板です。

WRT8755を暫定的に完成とすると投稿したあと最初に発覚したのは本質から外れたつまらないミス。PICkit2~4が基板の端につっかえて書き込み端子に挿さらない。どんなミスだろうと役割を果たせない基板は作り直さなければならない。今にして思えば、この時点でもっと丁寧にテストしていたら、さらにもう1回の作り直しを避けられたのだった。

作り直した基板は、だいたいは正しく動くが、これでリリースしていいのかと自問しながらテストすると、やっぱり不安定さが気になる状態。本来なら点滅するはずのLEDがときどき点灯または消灯しっぱなしになり、困ったことに原因を調べようとすると復帰する。だから記憶に頼って確かここらへん触るとヘンになるよなってところをプルアップ。

このあてずっぽうが大当たりで、不安定さが完全に払拭された。あらゆる動作の最中、どこをどう触っても異常をきたさない。とにかく動いているので、動いた理由はあとから考えることにして、すべての資料とソフトウェアを下のリンクで公開する。その後オレンジピコショップさんのご協力が得られ、プリント基板の頒布もできた。

WRT8755技術資料-PDF直リンク(2.87Mバイト)
WRT8755 データパック-ZIPダウンロード(51.9Kバイト)
プリント基板頒布元-WRT8755専用プリント基板

ちょっと言っておこうかな。回路規模の大きなコンピュータはよくバスをプルアップするでしょ。WRT8755は小さいけれど比較的大きな電流を取り扱う昇圧回路とナノワットPICが同居して似たような状況にある感じがしたんだ。あてずっぽうのプルアップは、頭の中にある論理をまだ言語化できていないだけで、でたらめとは違うんだ、知らんけど。

カテゴリー: 8085, 書き込み装置 | 1件のコメント

MCS8085最終版が完成

もうとっくに動いているのにいまだあれこれいじりまわしているMCS8085。DIP40ピンのICが3個、TTLなしで直結し、見た目がとてもきれいなだけに、すみずみのちょっとしたところが気になるんだよね。その工程に、とうとう終止符を打つときがきた。ほらこれ何もかも完璧に完成しちゃった最終版、どうだいカッコいいだろ。

最終版で追加したのは8085のSIDとSODにつながるシリアル端子。SIDとSODは以前から標準コネクタに出ていたんだが、USB-シリアル変換アダプタでパソコンとつなぐにはジャンパー線を引き回さなければならなかった。最終版ではシリアル端子にUSB-シリアル変換アダプタを差し込むだけでいい。とっても便利だよね。

MCS8085の原型はインテルMCS-85ファミリーの標準回路。それは組み込み用で、ポートがいっぱいあるがシリアルがない。従来、シリアル端子がなかったのはそういうわけで、今回、シリアル端子を付けたのはソフトウェアシリアルができたから。ついでに簡易アセンブラ付きモニタも作ったぞ。はいこちらお馴染みのハローワールド。

こうしてようやく思い残すところのないコンピュータが出来上がり、開発を完了することができた。すべての資料とソフトウェアを下のリンクで公開する。また、オレンジピコショップさんのご協力を得てプリント基板を頒布する。

MCS8085技術資料-PDF直リンク(2.87Mバイト)
MCS8085データパック-ZIPダウンロード(51.9Kバイト)
プリント基板頒布元-MCS8085専用プリント基板

MCS8085はRAMの総量が256バイト、そのうち簡易アセンブラ付きモニタが使う分を差し引くと、ユーザーが安全に使える領域は200バイトくらいになる。えっ、それだけ、とか言わないでね。その200バイトのためにプリント基板を4回も作り直し、アセンブリ言語で1168行のプログラムを書いたのだ。これこそアマチュア技術者のロマンではないか。

カテゴリー: 8085 | 5件のコメント

SBCV20のソフト開発

前回の投稿に続きSBCV20のソフトウェアの話。最初にネイティブモードのハローワールドとエコーバックテスト(受信割り込み付き)でハードウェアの動作を確認。次に、エミュレーションモード(CPU判定付き)で同じことをやって8080の機械語の動作を確認。参考までにソースをGistに貼っておく。これで8080の機械語の、いわば入れ物が完成。あとはいまハローワールドとエコーバックテストが書いてあるところにBASICを埋め込むだけ。

sbcv20_hello

8080とV20はROM、RAMの順序が逆なので、8080のBASICは前後を入れ替えてからV20へ持ち込むことになる。その入れ替えがしやすいように、8080のBASICをあらかじめアドレス非依存に書き直しておく。この過程で1バイトのRST命令を3バイトのCALL命令へ置き換えたが、先頭のスカスカな領域が詰まって、全体では1バイト減。これをSBC8080で動作確認。実行速度はASCIIART.BASによるベンチマークテストで変化なし。

SBC8080opt_trim

SBC8080で動いたBASICをSBCV20へ埋め込み可能な形に微修正。すなわち、端末制御はネイティブのサブルーチンを呼び出ように書き換え、8080の側でやっている割り込み処理を削除し、ROMとRAMの開始アドレスを変更。これは過渡的なBASICであり、単体ではテストできないから、失敗できない緊張感でいっぱい。その機械語をテキストに書きだし、SBCV20のBASICのソースに埋め込んでアセンブル。ROMに焼いてテスト。

SBCV20rom

SBCV20のBASICは、基本的にエミュレーションモードで動くが、端末制御でネイティブモードのサブルーチンを呼び出すし、端末からの受信割り込みで勝手にネイティブモードへ戻ってしまう。この往来にあたり、セグメントをどう取り扱うかで何度かやり直しを余儀なくされた。最終的にセグメントは終始0000H固定として起動に成功。V20と8080のコードが同じセグメントに混在するが、むしろアドレスの関係がわかりやすくなった。

sbcv20_basic

SBCV20のBASICでASCIIART.BASが完走。これをもって当面の目標を達成したと判断する。実行時間は2分30秒。下の写真でタイマーが1分56秒を表示しているのは途中経過だから。この結果を、はせりんさんが公開しているASCIIART(マンデルブロ集合)ベンチマークのデータと照合すると、V20/10MHzのエミュレーションモードは8080/10MHzに相当。リアルな8080ではついぞ実現しなかった、未知の領域を体験しているわけだね。

SBCV20asciiart

SBCV20の関連ファイルをGitHubに置いておく。そのうち、MSBAS80V.HEXはSBC8080で動く。V20BASIC.HEXはSBCV20で動く。MSBASV20.LSTはSBCV20に埋め込まれたBASICのリスティングに相当し、たとえば、BASICのUSR関数で機械語を実行する際、内部構造を知るために必要となる。下の例は、USR関数の引数を取得し、1増加させ、戻り値とする処理。引数や戻り値の取り扱いでMSBASV20.LSTが示すアドレスを参照した。

sbcv20arg

SBCV20は、さしあたりスイッチサイエンスさんのマーケットプレイスで頒布するべく準備を進めているところ。あわせてオレンジピコショップさんにも協力を求めている。とはいえ、事務処理が苦手な上に一部の機能のテストができておらず、あれこれやっているうちにとうとう年末を迎えてしまった。恒例のお祭り騒ぎができるのは来年になると思う。まだちょっと早いかもしれないけれど2021年もよろしくお願い致します。

[2021年3月11日追記]
SBCV20は次の販売店で頒布しています。
スイッチサイエンス-SBCV20ルーズキット
オレンジピコショップ-SBCV20専用プリント基板

カテゴリー: 8088/V20 | 1件のコメント

SBCV20の紆余曲折

日本電気V20(μPD70108)の平凡なコンピュータSBCV20は、このたびエミュレーションモードで8080のBASICが動き、めでたく当面の目標を達成した。ネイティブモードではハローワールドしか動いていないし、インテル8088はまだテスト中だが、先行きの見通しは立った。さしあたり、ここに至る紆余曲折をまとめておきたい。現時点の模範製作例を下に示す。シルクのREV04が試作4回めのプリント基板であることを示している。

別窓でPDFの回路図を開く

V20はじめましたで自信満々に「正しく動く」と予言したREV01はROMとRAMが逆順に配置されているという致命的な欠陥があった。8080の機械語を動かす目標に気をとられ、つい8080と同様、アドレスの前半にROM、後半にRAMを配置してしまった。V20は前半がRAM、後半がROMでなければならない。これを手配線で修正し、ハローワールドに成功。ついでにArduino方式の自動リセットを試して失敗しているが、そこはご愛敬。

sbcv20_cs

さらにテストを進めるとICが全部CMOSのとき電源オフでも走り出す現象が発覚。わかりづらいと思うが、下の写真はACアダプタをつないでいないのにLEDが薄く点灯している。この問題は、忘れていたけれど、SBC6303とSBCZ80で経験済み。シリアルの受信信号が電源に回り込んでいるらしく、これらはRxDに抵抗を入れることで解決した。SBCV20はRxDの周辺にお誂え向きのスペースがあり、抵抗の1本くらいは簡単に追加できる。

SVCV20_power

REV02は、ROMとRAMの配置を修正し、RxDに抵抗を入れ、あともうひとつ、そんなに負荷が軽いのならUSBのバスパワーでも動くだろうと考えて電源選択用のピンヘッダを立てた。このいきあたりばったりで追加した試みが大失敗。バスパワーを選択すると、電源をオンにした瞬間、USB-シリアルアダプタがリセットしてしまう。数秒後に復帰するが、パソコンの端末ソフトが回線を見失って再起動を余儀なくされ、不便きわまりない。

SVCV20_buspower

陶芸家は窯焼きに失敗した作品をその場で割っちゃうでしょ。まあそんな気持ち。電源選択用のピンヘッダは、パスパワーで動かそうとして失敗した証拠であり、一刻も早く取り去りたい。てことで、ほかの部分を十分にテストしないままREV03を製作。案の定、問題が発覚。シリアルの受信信号が電源に回り込む件、RxDに抵抗を入れただけでは解決していない。下の写真はACアダプタをつないでいないのにLEDが煌々と点灯している。

SVCV20_rev3

ここまでひどい事態は経験がない。もしかしたらRxDの受信信号だけでなくRTSの制御信号も流入している恐れがある。どうしたものかと考えあぐねていたら、ありがたいことにネットで知り合った同好の士からいくつかの対策が寄せられた。そのうちElectrelicさんのアイデアを拝借。RxDの抵抗をダイオードに替え、根元をプルアップ。またCTSを端子から切り離し、GNDへ接続。これで一件落着。最終形のREV04は冒頭で紹介したとおり。

いやもう苦労話を始めたら言いたいことがたくさんあって終わらない。このあとソフトウェアの開発でもいろいろあるわけだが、それは次回の投稿に送ろうと思う。

カテゴリー: 8088/V20 | 3件のコメント

SBCF8が完成

F8(3850/3853)で動くシンプルボードコンピュータSBCF8は最大の難関だったタイニーBASICの移植に成功し、このたびようやく完成にこぎつけた。SBCF8の大きな特徴は下に示すとおりSBC8080サブボードと接続してそのメモリと8251を利用するところ。特にF8を8251と組み合わせて端末制御する仕組みは世界で最初に実現した快挙、だと思う。

F8system

SBCF8の成果を第三者に検証していただけるよう、技術的な資料を下に公開する。最後まで苦しめられたタイニーBASICはデータパックに含まれる。そのソースは一見ダセぇ書きかたをしており、もうちょっとどうにかならないかと言われることが予想されるため、アセンブラを一緒に入れておいた。やれるもんならやってください。

回路図-sbcf8sch.pdf
部品表-sbcf8bom.pdf
データパック-sbcf8_datapack.zip(2.44Mバイト)

このブログではコンピュータがひとつ完成するたびにプリント基板を頒布してお祭り騒ぎをするのが恒例になっている。ところがSBCF8は、F8が入手困難すぎて、今のところプリント基板を頒布できる状況にない。いつもはドヤ顔でお披露目するのに、今回は心なしか勢いを欠いているなと感じたら、まあそのあたりが原因だと思ってもらいたい。ぴえん。

カテゴリー: F8 | 1件のコメント

手ごわいぞF8

SBCF8は固有の装置が端末だけなので、普通、端末制御サブルーチンを書けばプログラムの移植が完了する。なのにいまだタイニーBASICを動かせないのはボクがとろいからではなく、いやまあそういう側面はあるにしろ、大きな理由はF8が普通でないからだ。ボクが書いた端末制御サブルーチンは、hello, worldを成功させたものの、タイニーBASICで使えるかどうか判断しきれていない。そのへんの事情を理路整然と説明してみる。

1.SBC8080サブボードの8251を流用するという妙案が仇となる
SBCF8はSBC8080サブボードと組み合わせてそのメモリと8251を拝借する。メモリは問題ない。8251は、8080だとIOアドレスに割り当てるが、F8のIOアドレスは内蔵IO専用だから、SBCF8ではメモリアドレスに割り当てた。これが問題の芽となる。でもさ、SBC8080サブボードと組み合わせるのは経済的に合理的で、悪くない構成だと思うんだよね。

2.F8ではメモリアドレスを必ずDCで指定する
F8ではメモリアドレスをDCで指定する。8251のレジスタもDCによる間接指定となる。DCは随所で使われるため、端末制御サブルーチンはこれを保護しなければならない。じゃあどうやるか。ちなみに、タイニーBASICのもとの記述は端末をポート0で制御しており、DCを使わないため、DCの保護をやらない。つまり、そのままパクれる例がない。

3.F8にはスタックがないんだぜ
想定外だったのはF8にスタックがないこと。かわりに、サブルーチンの呼び出し時に戻りアドレスを持つPC1と、DCの裏レジスタともいうべきDC1がある。これらはスタックでなく上書きだから、サブルーチンのネストが1回に限られ、それ以上のやりかたは「各自工夫」となる。プログラムの移植にあたっては、その流儀と合わせる必要がある。

4.SBCF8のhello, worldで使った端末制御サブルーチン
SBCF8の端末制御サブルーチンはhello, worldが動けばいいという前提で簡単にまとめてある。一例として1文字出力を下に示す。ここからもうひとつサブルーチンを呼び出すことはないのでPC1を保護していない。DCはDC1と入れ替えて保護した。どこか別のところでもDC1を使っていたら問題になりかねないが、hello, worldでは大丈夫だと確認した。

;	Scratchpad01の文字を8251で送信
;
PUTCH XDC ;DCをDC1と入れ替える(退避)
PU1 DCI UARTC ;DCに8251制御レジスタのアドレスを入れる
LM ステータスをAに読む
NI $01 ;Aの送信可ビット以外をマスク
BZ PU1 ;送信可でなければ繰り返す
DCI UARTD ;DCに8251データレジスタのアドレスを入れる
LR A,1 ;Scratchpad01の文字をAに読む
ST ;Aの文字を書く
XDC ;DCをDC1と入れ替える(復帰)
POP ;RETURN

ついでだから言っておくとDCの値はメモリアドレスを指定したあと自動的に1増加する。そのため、8251のレジスタを繰り返し読むときは、随時、DCにアドレスを入れる必要がある。もうひとついうとDCは3853(SMI)にあり、3850(CPU)のレジスタ構成図をいくら探しても見付からない。それやこれや意表を突いた仕様に悩まされているが、こまごまと説明すると愚痴っぽくなるので、そのへんはまた別の機会に述べようと思う。

5.サブルーチンのネストはこうやった
SBCF8の端末制御サブルーチンのうち文字列出力を下に示す。文字列出力は1文字出力を繰り返し呼び出す。1文字出力がPC1を上書きし、文字列出力が戻れなくなってしまう事態を避けるため、先頭でPC1をKに退避し、末尾で復帰させる。これで1回のネストが実現する。hello, worldでは、それ以上のネストがないことを確認してある。

;    DCで文字列の先頭を指し示して8251で送信
;
PUTS	LR	K,P	;PC1(戻りアドレス)をKに保存
PS1	LM		;DCの指し示す文字をAに読む
	CI	0	;Aの文字が末尾(0)かどうかを検査
	BZ	PS2	;もし末尾だったら処理を終了
	LR	1,A	;Aの文字をScratchpad01に入れる
 	PI	PUTCH	;PUTCHを呼び出す
	JMP	PS1	;繰り返す
PS2	PK		;Kにある戻りアドレスを復帰

以上のとおり、ボクが書いた端末制御サブルーチンはhello, worldのように小さくて見とおしのいいプログラムだと完璧に機能するが、タイニーBASICではわからない。少なくとも丸ごと流用はできそうにない。というわけで今タイニーBASICの構造を調べているところ。F8の面白さを存分に味わっているが、電子工作の神様、もうお腹いっぱいです。

カテゴリー: F8, TinyBASIC | コメントをどうぞ