ラベル TK-80サブボード基板 の投稿を表示しています。 すべての投稿を表示
ラベル TK-80サブボード基板 の投稿を表示しています。 すべての投稿を表示

TK-80サブボード基板の製作(モニターアップデート編)

2019/05/09

 TK-80サブボード用モニターV0.90の不具合修正・新機能追加を行いましたので、改めてベータ2版V0.91(ZIPファイル)を公開します。


修正点:

①サブルーチンSRIOT(027CH)、SRIIN(02A0H)、INPUT(0223H)に問題がある。

②アセンブラがPOP, CPE、STAXを生成できない。

③アセンブラが正しいレジスタオペランドを生成できないケースがある。

④相対アドレス入力のための {READ INCR}key、{READ DECR}keyの設定が誤っていた。


新機能:

プログラムを簡易アセンブラで入力してみると、プログラムの移動ができないため、プログラム修正が結構大変でした。

①MOVEアセンブラコマンドの追加(現在のアドレスがdestination)

 MOVE{sp}{source address}{sp}{length}{sp}

②FILLアセンブラコマンドの追加(現在のアドレスがdestination)

 FILL{sp}{byte data}{sp}{length}{sp}

③オペランド入力状態がわかりにくいため、3桁目の少数点を点灯するようにした。


お試しください。

(再クロール更新:2022/12/22)


TK-80サブボード基板の製作(モニター公開編)

2019/05/03

 少し手間取りましたが、TK-80サブボード用モニターの動作確認がとれましたので、公開します。

非商用の範囲で自己責任でご使用ください。なお、オリジナル・改訂版を含め、再配布される場合は、ソースコード・ライセンス条件を同梱していただけるようお願いします。


今回のモニターは、C言語(Small-C)で作成しましたので、サイズが約8KBとオリジナルに比べると大きくなりましたが、下記の特徴を備えています。


①SBC8080 2・3MHz、SBC8085 2・3・4・5MHzに対応(4・5MHz動作には高速メモリが必要)

②簡易アセンブラを搭載

③ブレーク時にレジスタ内容の参照・修正が簡単

④自動トレース機能(0.5秒/命令で自動実行)


①SBC8080 2・3MHz、SBC8085 2・3・4・5MHzに対応


電源立ち上げ時のLED表示
8080 2.0MHz 1-Wait "8080" "2.0-1" (TK-80オリジナル設定)
8080 2.0MHz 0-Wait "8080" "2.0-0" (SBC8080標準設定)
8080 3.0MHz "8085" "3.0 "
8085 2.0MHz "8085" "2.0 "
8085 3.0MHz "8085" "3.0 " (SBC8085標準設定)
8085 4.0MHz "8085" "4.0 "
8085 5.0MHz "8085" "5.0 "

CPUが変わってもモニター内のタイマーの待ち時間が変わらないように自動切り替えします。


②簡易アセンブラを搭載


下記のようにキーボードにアルファベット文字をオーバーレイさせることで、


C D E F {ADRS SET} --> V W X Y Z
8 9 A B {READ INCR} --> Q R S T U
4 5 6 7 {READ DECR} --> L M N O P
0 1 2 3 {WRITE INCR} --> G H I J K

{LOAD DATA} --> {sp}(区切り記号)


下記は、キーボードにオーバーレイシールを貼った例です。



8080/8085のプログラムをニーモニックで入力できるようになります。<ADRS SET}keyを2回連続入力させると、アセンブラに入れます。アセンブラに入ると、プロンプトとして、アドレス最下位桁の小数点が点灯します。ニーモニックが誤っていたり、レジスタ指定が誤っていると、"...."が表示されます。アセンブラから出るには、小数点が点灯しているとき{sp}のみ入力します。


下記が基本入力フォーマットです。

1) {opcode}{sp}

2) {opcode}{sp}{register operand}

3) {opcode}{sp}{data address perand}{sp}

ここで、オペランド部の区切り記号","は、入力不要です。


なお、オペランドの種類は、


{dd} 8 bit data
{rp}{dddd} regiter pair, 16 bit data
{d}{dd} distination register, 8 bit data
{dddd} 16 bit data
{aaaa} 16 bit address({READ INCR},{READ DECR}keyで相対指定)
{s} source register
{d} destination register
{d}{s} source, distination register
{rp} register pair
{rp} register pair for PUSH/POP
{rp} B or D register
{n} 0-7 number
none no operand

また、16ビットアドレスは、命令アドレスに近い範囲であれば、相対入力が可能にしています。誤った入力を検出するとLEDに「....」が表示されます。


③ブレーク時にレジスタ内容の参照・修正が簡単


TK-80は、ブレーク機能でデバックやプログラム動作を学習できる機能がありますが、命令実行前後のレジスタの設定・確認は、絶対メモリアドレスしか使えないので手間がかかり、使い勝手が良くありません。そこで、この領域は、アドレス表示ではなく16bitレジスタ名表示で、設定・確認ができるようにしました。併せてブレークアドレス・回数も簡単に設定できるようにしてみました。


具体的には、ブレーク停止直後に下記のように、{READ INCR}key,{READ DECR}keyで表示できます。さらに、{READ INCR}key,{READ DECR}keyで、アップ・ダウンできます。内容を変更する場合は、{WRITE INCR}keyで可能です。


Program Counter "PC"
Stack Pointer "SP"
HL register "HL" <-- br="" incr="" key="">DE register "DE"
BC register "BC"
Processor Status word "PS"
Break Address "BA"
break Address Counter "AC" <-- br="" decr="" key="">

④自動トレース機能(0.5秒/命令で自動実行)


一旦、ステップ状態でブレークさせ、上記のbreak Address Counter=FFと設定後、{RET}keyで、0.5秒/命令で実行中のアドレスを表示しながら動作を確認できます。実行中に適当なキーを押し続けると、break Address Counter=0となり、再ブレークします。


現在、ベータ版として、V0.90(ZIPファイル)を公開します。

不具合があれば、随時修正していきたいと思います。


併せて、Twitter(jr2xzy)を始めましたので、必要な方は、フォローしていただけます。

(再クロール更新:2022/12/22)

TK-80サブボード基板の製作(モニター作成編)

2019/04/27

 オリジナルのTK-80は、ROM/RAMサイズが限られているため、16進入力でプログラム入力をする必要があります。そこで、SBC8080/SBC8085 ルーズキットの十分なROM/RAMサイズを活かし、簡易アセンブラ機能を備えた互換モニターを作成することにしました。


TK-80のキーボードのままでは、アルファベット入力ができません。そこで、海外の電話機で用いられている電話番号をアルファベットで表記するアイディアを拝借して、TK-80のキーコードに21種類にアルファベットを割り当てることにしました。


具体的には、下記左側キー配列に右オーバーレイキー配列を割り当てます。


C D E F {ADRS SET} --> V W X Y Z
8 9 A B {READ INCR} --> Q R S T U
4 5 6 7 {READ DECR} --> L M N O P
0 1 2 3 {WRITE INCR} --> G H I J K

さらに、区切り記号{SP}を{LOAD DATA}に割り当てます。


これで、アセンブラコードが入力可能になります。幸い、オーバーレイした文字によるニーモニックの重複は無いようです。


例えば、「MVI D,55」を入力する場合、オペコードとオペランドに区切り記号(SP)を用い、オペランドの「,」は、無くてもアセンブル可能なので省略し、最後に区切り記号(SP)を入れることにすると、「5 C 2 {LOAD DATA} D 5 5 {LOAD DATA}」キーを打てばよいことになります。キートップの端にアルファベットのラベルを貼れば簡単操作できます。


さて、このモニターをアセンブラで書くことはできますが、やはりC言語の方が簡単に済みます。そこで、C言語の開発環境を探すことにしました。


下記が要件になります。

①8080に対応していること

②アセンブラがインライン記述できること

③ROM化に対応できること

④できれば、Windows上で稼働可能であること


調査の結果、下記が最も要件に近いC言語の開発環境でした。


・Small-C "FUTURE FORUM"版 V3.0

・MACRO80アセンブラ

・LINK80リンカー

・CP/M-80 program EXEcutor for Win32 V0.4


とは言っても、いくつかの注意点があります。

①Small-Cは、C言語のサブセットになっているので、使用できる文法に注意する必要がある。

②Small-Cは、基本的にCP/Mを前提にしているので、いくつかの組込関数が、RAM領域の プログラムを書換えているので、使用する場合は、確認が必要になる。

③アセンブラからC言語を呼び出す必要ある公開サブルーチンは、都度、引数の変換・スタック消費量の制約からスタックの切替が必要になる。

④MACRO80は、通常、リロケータブルなプログラムの作成をおこなうため、固定的なRAM領域は、ASEG(絶対番地セグメント)を用いる必要がある。

⑤LINK80は、リンク順に結合するようになっているため、固定的なRAM領域を含むオブジェクトファイルを最後に配置する必要がある。

⑥リンクの設定で「Origin below loader memory, move anyway(Y or N)?n」を指定し、0番地からプログラムを配置する必要がある。

⑦出力されたHEXファイルは、固定的なRAM領域を含むすべての領域が含まれるため、ROM領域のみを抜き出し、不要な部分を削除する必要がある。


結構制約がありますが、他に良い環境が見つかりませんでした。ただ先人の成果を使えますので幸いです。現在、モニターコマンド・簡易アセンブラが動作し始めましたので、もうすぐです。

(再クロール更新:2022/12/22)

TK-80サブボード基板の製作(頒布編)

2019/04/25

 今回、オレンジピコショップさんから「TK-80互換機 TK-80サブボード 専用基板」としてRev0.91を頒布していただけるようになりました。オリジナルのTK-80は、現存するものの希少となっています。電子工作のファンや教育的な利用など、興味を持っていただける方に提供できたらと思います。


動作させるためには、TK-80サブボード基板の組み立て以外に下記が必要になります。

①SBC8080 CPUルーズキットまたは、SBC8085 CPUルーズキット

②SBC8080 SUBルーズキット

③TK-80サブボード用モニターROM

④ZK-80-KB 組立てキット(オレンジピコショップさんより)


SBC8080ルーズキットでは、SBC8080システムROM「機械語モード付きタイニーBASIC」が標準ですが、TK-80サブボードを動作させるためには、SBC8080 SUBルーズキットに「TK-80モニター」が必要になります。


「復活!TK-80」をお持ちの方は、付属CDの「TK‐80ユーザーズ・マニュアル」に記載された「TK-80モニター」を以前のブログに紹介したように、私的利用の範囲でROMに焼く必要があります。


「復活!TK-80」は、すでに絶版状態で、ヤフオク・メルカリに時々出品されていますが、入手が難しい状況です。そのため、現在、オープンソース版「簡易アセンブラ付TK-80モニター」を作成中ですので動作確認が済めば、公開したいと思います。


いずれにしても、TK-80サブボード基板の組み立て~動作は、難易度が高いとは思いますが、チャレンジしてみてください。電脳伝説さん、オレンジピコさん、ご協力ありがとうございました。


まずは、回路図(PDF)部品表(PDF)を掲載します。

(再クロール更新:2022/12/22)

TK-80サブボード基板の製作(CMTインタフェース編)

2019/04/03

 地中海クルーズに行ってきましたので、動作確認が中断していました。下記は、乗船したMSCメラビリアです。5か国周遊をしてきました。



さて、CMTインタフェースの動作確認を行ったところ、CMT出力は問題なかったのですが、CMT入力の問題がみつかりました。設計当初、ゲート数の削減を行いましたが、フィルター部分の変更を忘れていました。幸いプリント基板の配線を切ったりするまでの対応は必要なく、ダイオードD1の極性入替と抵抗R7のプルアップへの変更で済みました。


下記は、JP2、JP3、JP4のハンダ付ショートとR7の実装変更部分です。また、基板表側のダイオードD1は、極性を入れ替えてください。



下記は、回路図上の変更箇所です。



CMTインタフェースの信号は、1200BPSである必要がありますが、このタイミングは、ソフトウェア・タイマーを使い作成していますので、CPUの動作速度に依存してしまいます。オリジナルのTK-80は、CPUクロックが2.048MHzで、バスサイクルにWAITを1サイクル入れています。一方、SBC8080では、CPUクロックが2.0MHzで、WAITサイクルは入っていません。SBC8085では、CPUクロックが3.0MHzで、WAITサイクルは入っていません。このような差を吸収するため、CPUの種類、CPU周波数の検出を行い、適切なソフトウェア・タイマーを動作させるようにしました。


①CPUの種類の検出

8085には、RIM命令が追加されています。8080では、NOP扱いになりますので、RIM命令でアキュームレータの値が変われば、8085であることを検出できます。


②CPU周波数の検出

CPU周波数検出のため、JP4を設けました。このジャンパは、8255のポートB1からCMT用の変調用信号を読み込むことができるようにしました。この信号は、無安定マルチバイブレータで作られ、CRの値やロジックの閾値電圧によって若干周波数偏差がありますが、1MHz単位程度の検出はできます。検出方法は、4サイクルの信号をループカウント値で求めています。検出結果は、電源立ち上げ時に約3秒間LED表示させるようにしました。

                   電源立ち上げ時のLED表示
8080 2.0MHz 1-Wait "8080" "2.0-1"
8080 2.0MHz 0-Wait "8080" "2.0-0"
8080 3.0MHz "8085" "3.0 "
8085 2.0MHz "8085" "2.0 "
8085 3.0MHz "8085" "3.0 "
8085 4.0MHz "8085" "4.0 "
8085 5.0MHz "8085" "5.0 "

③ソフトウェア・タイマー

オリジナルのTK-80モニター「BIT TIMER & CHATTERING TIMER」の内部では、125uSのタイマーを必要回数実行するようになっています。上記の7種類に対応した125uSのタイマーを用意し、動的切替できるようにしました。


以上の拡張機能パッチをオリジナルに当てることで、CMTインタフェースを正しく動作させることができます。


<font color="#ff0000">SBC8080 SUBボードのRAMが32KBより小さい場合問題があるため、更新しました。<font color="#000000">


下記は、そのソースコードです。


T125US EQU 8400H ; 125uS Timer Subroutine Pointer Address
MONST EQU 003BH ; TK-80 "INITIALIZE ROUTINE" Address
MONSP EQU 83D1H ; STACK for TK-80 monitor
TLOOP EQU 02E5H ; TK-80 "BIT TIMER & CHATTERING TIMER" Loop Entry Address
LED0 EQU 3FH ; Segment Value of "0"
LED5 EQU 6DH ; Segment Value of "5"
LED3P EQU 0CFH ; Segment Value of "3."
LED4P EQU 0E6H ; Segment Value of "4."
LED5P EQU 0EDH ; Segment Value of "5."
LED80 EQU 3F7FH ; Segment Values of "80"
LED_1 EQU 0640H ; Segment Values of "-1"
LED2P0 EQU 3FDBH ; Segment Values of "2.0"
LED3P0 EQU 3FCFH ; Segment Values of "3.0"
DIG1 EQU 83F8H ; Digit #1 LED Segment Data Address
DIG2 EQU 83F9H ; Digit #2 LED Segment Data Address
DIG3 EQU 83FAH ; Digit #3 LED Segment Data Address
DIG4 EQU 83FBH ; Digit #4 LED Segment Data Address
DIG5 EQU 83FCH ; Digit #5 LED Segment Data Address
DIG6 EQU 83FDH ; Digit #6 LED Segment Data Address
DIG7 EQU 83FEH ; Digit #7 LED Segment Data Address
DIG8 EQU 83FFH ; Digit #8 LED Segment Data Address
PPI_CW EQU 0FBH ; PPI 8255 Control Word I/O Address
PPI_PC EQU 0FEH ; PPI 8255 Port-C Register I/O Address
PPI_PB EQU 0FDH ; PPI 8255 Port-B Register I/O Address

ORG 0004H ; RESET routine
JMP START ; Patch Instruction

ORG 02DFH ; TK-80 "BIT TIMER & CHATTERING TIMER" 125uS Timer Entry Address
WAIT: PUSH H ; Patch Instruction
LHLD T125US ; Patch Instruction
PCHL ; Patch Instruction
NOP ; Patch Instruction

ORG 0300H ; TK-80 Extension
; for 8080(2MHz 1Wait,3MHz)/8085(2,3,4,5MHz) Entry Address
START: MVI A,92H ; Initialize PPI
OUT PPI_CW
MVI A,01H
OUT PPI_PC
LXI SP,MONSP; SETUP SP
MVI D,00H ; Sensing CPU Clock Frequency
LOOP1: INR D
JZ DONE
CALL TEST
JNZ LOOP1 ; Searching 1->0 edge of PB1(CMT Modulation Generator)
INR D
JZ DONE
LOOP2: INR D
JZ DONE
CALL TEST
JZ LOOP2 ; Searching 0->1 edge of PB1(CMT Modulation Generator)
INR D
JZ DONE
LOOP3: INR D
JZ DONE
CALL TEST
JNZ LOOP3 ; Searching 1->0 edge of PB1(CMT Modulation Generator)
INR D
JZ DONE
LOOP4: INR D
JZ DONE ; Searching 0->1 edge of PB1(CMT Modulation Generator)
CALL TEST
JZ LOOP4
DONE: MOV A,D
ORA A
JZ EXIT ; if timeout, exit TK-80 Extension
LXI H,LED80
SHLD DIG1 ; Set LED "80**" "****"
MVI A,55H
RIM ; 8085 instruction
CPI 55H ; Examine 8085 CPU
JNZ CPU85
CPU80: SHLD DIG3
LXI H,LED2P0 ; Set LED "****" "2.0**"
SHLD DIG5
LXI H,LED_1 ; Set LED "****" "**_1"
MOV A,D
LXI D,D80_1W ; Set 8080 2MHz 1Wait 125uS Timer Address
CPI 42H ; CPU Clock Frequency Threshold Value
JC I80_1W
CPI 5DH ; CPU Clock Frequency Threshold Value
JC I80_0W
I80_3M: LXI H,LED3P0 ; Set LED "****" "3.0**"
LXI D,D80_3M ; Set 8080 3MHz 125uS Timer Address
JMP VECT85
I80_0W: MVI H,LED0 ; Set LED "****" "***0"
LXI D,D80_0W ; Set 8080 2MHz 125uS Timer Address
I80_1W: SHLD DIG7
JMP VECT
CPU85: MVI H,LED5
SHLD DIG3
LXI H,LED2P0 ; Set LED "****" "2.0**"
MOV A,D
LXI D,D85_2M ; Set 8085 2MHz 125uS Timer Address
CPI 0B3H ; CPU Clock Frequency Threshold Value
JNC I85_5M
CPI 8BH ; CPU Clock Frequency Threshold Value
JNC I85_4M
CPI 62H ; CPU Clock Frequency Threshold Value
JC VECT85
I85_3M: MVI L,LED3P ; Set LED "****" "3.***"
LXI D,D85_3M ; Set 8085 3MHz 125uS Timer Address
JMP VECT85
I85_4M: MVI L,LED4P ; Set LED "****" "4.***"
LXI D,D85_4M ; Set 8085 4MHz 125uS Timer Address
JMP VECT85
I85_5M: MVI L,LED5P ; Set LED "****" "5.***"
LXI D,D85_5M ; Set 8085 5MHz 125uS Timer Address
VECT85: SHLD DIG5
MVI L,00H
MOV H,L ; Set LED "****" "** "
SHLD DIG7
VECT: XCHG
LDA T125US
CMP L
JNZ DISP
LDA T125US+1
CMP H
JZ EXIT ; Skip displaying LED
DISP: SHLD T125US
MVI A,80H
OUT PPI_PC
MVI A,4AH
TIMER: MVI D,0D8H
CALL WAIT
DCR A
JNZ TIMER
EXIT: JMP MONST

TEST: MOV B,D ; Searching 0->1 edge of PB1 and
; sensing PB1 after for while
SENCE1: IN PPI_PB
ANI 02H
JNZ SENCE1 ; Waiting for PB1 = 0
SENCE2: IN PPI_PB
ANI 02H
JZ SENCE2 ; Waiting for PB1 = 1 (0->1 edge)
DCR B
JNZ $-1 ; Waiting until B = 0
IN PPI_PB
ANI 02H ; Sensing PB1
RET

D80_1W: POP H ; 8080 2MHz 1Wait 125uS Timer(TK-80 Original Setting)
MVI E,08H
MVI E,08H
DCR E
JNZ $-1
JMP TLOOP
D80_0W: POP H ; 8080 2MHz 125uS Timer
NOP
MVI E,0BH
MVI E,0BH
DCR E
JNZ $-1
JMP TLOOP
D80_3M: POP H ; 8080 3MHz 125uS Timer
NOP
NOP
NOP
NOP
MVI E,13H
DCR E
JNZ $-1
JMP TLOOP
D85_2M: POP H ; 8085 2MHz 125uS Timer
NOP
NOP
NOP
NOP
MVI E,0BH
MVI E,0BH
DCR E
JNZ $-1
JMP TLOOP
D85_3M: POP H ; 8085 3MHz 125uS Timer
NOP
NOP
NOP
NOP
NOP
MVI E,14H
DCR E
JNZ $-1
JMP TLOOP
D85_4M: POP H ; 8085 4MHz 125uS Timer
NOP
NOP
NOP
MVI E,1DH
MVI E,1DH
DCR E
JNZ $-1
JMP TLOOP
D85_5M: POP H ; 8085 5MHz 125uS Timer
NOP
NOP
NOP
MVI E,26H
MVI E,26H
DCR E
JNZ $-1
JMP TLOOP

下記は、アセンブル後のパッチです。オリジナルに追加してROMを焼くことになります。


:03000400C3000333
:0602DF00E52A0084E9009D
:100300003E92D3FB3E01D3FE31D183160014CA4185
:1003100003CDDF03C20D0314CA410314CA4103CD48
:10032000DF03CA1B0314CA410314CA4103CDDF0310
:10033000C2290314CA410314CA4103CDDF03CA37DB
:10034000037AB7CADC03217F3F22F8833E5520FEA3
:1003500055C2820322FA8321DB3F22FC832140061F
:100360007A11F703FE42DA7C03FE5DDA770321CFD0
:100370003F111004C3B203263F11030422FE83C3BE
:10038000BB03266D22FA8321DB3F7A111E04FEB3E4
:10039000D2AD03FE8BD2A503FE62DAB2032ECF11DB
:1003A0002E04C3B2032EE6113D04C3B2032EED1199
:1003B0004C0422FC832E006522FE83EB3A0084BDB0
:1003C000C2CA033A0184BCCADC032200843E80D343
:1003D000FE3E4A16D8CDDF023DC2D303C33B0042E6
:1003E000DBFDE602C2E003DBFDE602CAE70305C26D
:1003F000EE03DBFDE602C9E11E081E081DC2FC0378
:10040000C3E502E1001E0B1E0B1DC20904C3E50279
:10041000E1000000001E131DC21704C3E502E10045
:100420000000001E0B1E0B1DC22704C3E502E100E5
:10043000000000001E141DC23604C3E502E10000E6
:10044000001E1D1E1D1DC24504C3E502E100000083
:0B0450001E261E261DC25404C3E50238
:00000001FF


下記は、電源投入時LED表示(TK-80 オリジナル相当)です。



下記は、電源投入時LED表示(8085 5MHz)です。



下記は、8085 5MHzでCMT録音後、8080 2MHz 1-Waitで無事読み込みが成功しました。



ということで、今後必要に応じ、基板の修正(Rev0.91)を行いたいと思います。

(再クロール更新:2022/12/22)

TK-80サブボード基板の製作(基板組立編)

2019/03/16

 特に基板に大きなバグもなく無事動作させることができました。初めて基板を起こしたにしては上出来です。


では、組み立て・動作確認をご紹介します。


まずは、部品の調達ですが、部品は、例のごとく、秋月・若松・マルツ・千石を利用させてもらいました。74ACT573、74HC30、74HC93は、少しずつ入手し辛いようになってきた感じです。試作時にLEDの表示が結構明るかったので、R12~R19は、100Ωにしてみました。(好みで調整してください)

部品がそろったら、組み立てです。


抵抗・コンデンサ・ダイオード・FETなど小物をはんだ付けしていきます。なお、基板サイズの関係で、縦型実装と1/8W小型抵抗を使用します。ただし、R21は、1/2Wを使用してください。このR21は、バスコネクタの5ピンがSBC8085ではINTA-に割り付けられているため、使用時に実装してください。SBC8080では、12Vに割り付けられているため、意図せずに接続してもロジック入力を保護するための抵抗です。(仮に連続でも約0.2Wの消費電力になり、少し熱くなりますが、12Vラインへの影響もほとんどありません。)SBC8080のみ使用する場合は不要ですが、SBC8085も切替えて使う場合、丸ピンソケットを使うと切替が容易です。


次に、半固定抵抗・集合抵抗・トグルSW・3.5mmオーディオジャックをはんだ付けしていきます。最後は、コネクタ・ヘッダ・ICソケット・バスコネクタです。


40ピンのバスコネクタについては、SBC8080/SBC8085をすでにお持ちの場合は、縦型ボックスヘッダを使用できます。ただし、両端コネクタ付フラットケーブルにコネクタを追加して、3枚の基板を接続する必要があります。これからSBC8080/SBC8085を組み立てる方は、ラズパイ用スタッキングコネクタをお勧めします。


下記は、基板に実装した縦型ボックスヘッダ+フラットケーブルとラズパイ用スタッキングコネクタです。



次に、ステップ動作用のジャンパ配線が必要です。ピンフレームと線材などで配線をします。


①SBC8080の場合、J4の7ピン、9ピン、11ピンからCPUボードへジャンパ配線が必要です。

・J4の7ピン(INTE)からCPU(8080)の16ピン

・J4の9ピン(CPU_D5)からCPU(8080)の4ピン

・J4の11ピン(STBST-)からクロック(8224)の7ピン

・J4の1ピンと3ピンをショートジャンパでショート

・J4の2ピンと4ピンをショートジャンパでショート


②SBC8085の場合、J4の10ピン、12ピンからCPUボードへジャンパ配線が必要です。

・J4の10ピン(S0)からCPU(8085)の29ピン

・J4の12ピン(S1)からCPU(8085)の33ピン

・J4の3ピンと5ピンをショートジャンパでショート

・J4の4ピンと6ピンをショートジャンパでショート

・R21に、1/2W 220Ωを実装(丸ピンソケットを使うとSBC8080切替が便利)

・基板設計編で問題になったHOLDAに47pFのコンデンサ追加をお忘れなく


SBC8080時の動作確認です。


①SBC8080を機械語モード付きタイニーBASICが動作する状態にします。

②TK-80 SUB Boardの半田状態を確認後、電源5VとGNDがショートしていないことを確認します。

③NE555PのみをICソケットに差し込み、TK-80 SUB Boardをバスに接続後、電源をONにし、SBC8080のBASICが立ち上がることを確認します。

④U4(74HC30)、U5(74HC10)、U13(74HC00)を空きにして、8255以外のICをICソケットに差し込み、TK-80 SUB Boardをバスに接続後、電源をONにし、SBC8080のBASICが 立ち上がることを確認します。

⑤SBC8080のROMをTK-80用に交換し、シリアルコントローラ8251をICソケットから外します。これは、8251が割り込み(INT)を使用しているので、競合を避けるためです。

⑥8255をICソケットに差し込み、TK-80 SUB Boardをバスに接続後、電源をONにし、LEDに「0000 0000」が表示されれば、OKです。


SBC8085時の動作確認です。


①SBC8085を機械語モード付きタイニーBASICが動作する状態にします。

②TK-80 SUB Boardの半田状態を確認後、電源5VとGNDがショートしていないことを確認します。

③NE555PのみをICソケットに差し込み、TK-80 SUB Boardをバスに接続後、電源をONにし、SBC8085のBASICが立ち上がることを確認します。

④U4(74HC30)、U5(74HC10)、U13(74HC00)を含み、8255以外のICをICソケットに 差し込み、TK-80 SUB Boardをバスに接続後、電源をONにし、SBC8085のBASICが立ち上がることを確認します。

⑤SBC8085のROMをTK-80用に交換し、シリアルコントローラ8251をICソケットから外します。これは、8251が割り込み(INT)を使用しているので、競合を避けるためです。

⑥8255をICソケットに差し込み、TK-80 SUB Boardをバスに接続後、電源をONにし、LEDに「0000 0000」が表示されれば、OKです。


上記で問題があれば、はんだ付け状態の再確認、部品の数値、ダイオードやICの向きの確認などを行います。あとは、キーボードで、モードSWとRUNキーでステップ動作など、個々に機能確認します。


次にCMTインタフェースについてです。CMTインタフェースは、JP2および、JP3を半田でショートさせると8255と接続されます。(オリジナルでは、オプション)


ただし、オリジナルのTK-80では、クロック周波数が、18.432MHzでWAITが1サイクル入っていますが、BC8080の場合では、18MHz、WAITが入っていませんので、CMT等で使用している遅延サブプログラムの時間が若干短くなってしまいます。SBC8085では、さらに高速化されています。


このため、CPU周波数検出のため、JP4を設けました。検出には誤差が出ますが、1MHz単位程度の検出ができるのではないかと考えています。TK-80 SUB Board用のパッチを作成して、CPUの判別、CPU周波数などを電源投入時に表示し、併せて遅延サブプログラムの自動調整を行いたいと考えています。同時にCMTインタフェースの動作確認をしていきたいと思います。


下記は、SBC8080と組合わせた動作中のようすです。



下記は、SBC8085と組合わせた動作中のようすです。



下記は、SBC8085と組合わせた動作中で、スタックの上段に積んだ場合です。



下記は、SBC8085と組合わせた動作中で、TK-80 SUB Boardの拡大です。


(再クロール更新:2022/12/22)

TK-80サブボード基板の製作(基板到着編)

2019/03/05

 2/16に基板を発注しましたが、結構早く基板が到着しました。

メールで下記のようなチェックポイントが報告されました。


2/16 スイッチサイエンスにガーバーデータをアップロードし基板を発注

2/17 Seeedの工場への製造依頼

2/17 ガーバーデータ確認開始

2/20 基板の製造開始

3/1  基板を中国から日本に発送

3/4  スイッチサイエンスから基板を発送

3/5  到着


今回10枚の基板を発注しましたが、下記は、その一部の基板たちです。



部品面の様子です。



半田面の様子です。



まず、部品の位置・寸法を確かめました。

①基板の取り付け穴、バスコネクタの位置は、SBC8080とぴったり一致しました

②部品のパターンを作成したトグルSW、3.5mmステレオジャックは、問題なく部品の挿入ができました


初めての基板製作を思い立ち、KiCadを触りだして約1ヶ月、その後基板を発注してわずか17日で手元に届きました。その昔、基板を手作業で設計して製品化していた時代とは隔世の感があります。


ほっと一息ですが、次は、組み立て、基板のデバッグに入ります。バグがなければ良いのですが。。。

(再クロール更新:2022/12/22)

TK-80サブボード基板の製作(基板設計編)

2019/02/14

 次は基板設計です。今回初めてですが、トランジスタ技術等で紹介されている内容を参考に進めました。まず、CADの選定ですが、①無償であること、②10x12センチメートルの基板設計ができることより、KiCadを採用しました。


初めての基板設計ですので、勝手がわかりにくいところもありましたが、これまで色々な基板を見てきた経験から、それなりの基板ができそうです。


①回路図入力


今回、SBC8080/SBC8085切替対応とするため、下記の対応を行いました。


・SBC8080用のステップ動作割込み信号の生成部をSBC8085と類似した回路に変更する

・SBC8080/SBC8085切替は、ジャンパーヘッダー切替と、ロジックICの追加で行う

・SBC8080の12Vライン誤接続の保護回路を追加する


これが<a href="/jr2xzy/doc/TK-80-SUB_pcb_sch.pdf" target="_blank">回路図(PDF)</a>です。


②基板レイアウト


まず、特殊部品(LEDディスプレイとトグルSW)の類似フットプリントをRSコンポーネンツから入手し、編集後、使用しました。


トランジスタ技術の記事(DVD)を参考にしながら、スイッチサイエンスのSeeedプロジェクトに対応した基板設計ルールでレイアウトを行いました。部品がつめこみ気味になったので、配線の引き回しと、ベタアースの配置バランスに手間がかかりました。


下記が、概略の基板レイアウトです。



下記は、基板の3D表示です。



ガーバーデータを抽出し、これから、発注する予定です。

基板到着には、春節の関係で、1ヶ月以上必要なようですので、気長に待ちたいと思います。

ただ、そのまま組み立ててうまく動作するか、寸法のミスや部品同士が当たらないかなど、どきどきです。

(再クロール更新:2022/12/22)

TK-80サブボード基板の製作(SBC8085ルーズキット対応編)

2019/02/12

 積み残しになっていたTK-80サブボード基板の製作にチャレンジすることにしました。

その前段階として、バス互換のSBC8085ルーズキットに対応してみました。8085を採用したTK-85がありますが、マニュアルが入手できませんでしたので、紹介しているホームページを参考に仕様の確認をしましたが、


・2.4576MHzクロックで8085を使用している

・ROM:2Kバイト、RAM:1Kバイトに拡張されている

・CMTインタフェースが含まれている

・LED表示の「0」が縦長表示になっている

・モニタコマンドが拡張されているようであるが、詳細は不明である


そこで、無理してTK-85を目指すのではなく、SBC8085でTK-80を実現することにしました。


①SBC8085ルーズキットの製作とTK-80サブボードの動作確認


SBC8085がバス互換であるので、大半は、SBC8080対応のTK-80サブボードを流用できそうでしたので、まず、SBC8085の組み立て後、機械語モード付きタイニーBASICを動作させましたが、問題なく動作しました。


次にTK-80サブボードを接続して、TK-80モニタを動作させると、困ったことにLEDの表示が消えたり、キーボードを接続しなくてもキー入力動作になったり、誤動作しているようですが、暴走まではしていないような感じでした。


8255の動作がおかしくなっていると思われるので、オシロで信号波形を確認しましたが、異常な波形やグリッジなどは、発見できませんでした。そこで、LEDが消える瞬間(8255のPC7信号がhighからlow遷移)を確認したところ、-IOW信号の立ち上がりが非常に鈍っていることを見つけました。この現象は、HOLDA信号直前で起こっていましたので、74HCT257の-IOW信号出力がhighになりきらないうちにHOLDA信号で3stateになったようでした。


SBC8080では、8288が何らかの対策をおこなっているかもしれません。8085のスペック上、-WR信号と同時にHOLDA信号が出ているはずですが、74HCT257の遅延との関係でうまくいかない可能性があります。TK-85でどのようにな回路になっているのか定かではありませんが、本来、HOLDA信号は、DMA遷移のため早めに出力されて、DMAコントローラ(例えば8257)で最適な遅延でバス切替を行うように使用するようです。従って、HOLDA信号を適度な遅延をおこなえば、問題を回避できるかもしれません。


そこで、20nS程度遅延させるため、HOLDA信号に47pFを追加してみました。問題なくTK-80サブボードが動き出しました。下記は、HOLDA信号を遅延させ、-IOW信号の問題が回避できた時の波形です。HOLDA信号の遅延によって、-IOW信号(上側)の立ち上がりがHOLDA信号(下側)の立ち上がり開始に対して約16nS遅延していてもしっかり立ち上がっています。




また、8085の-RD信号、-WR信号、M/IO信号は、HOLD期間中に3stateとなるので、今回は74LS257ではなく74HCT257を使用したため、フロート回避のプルアップ抵抗(4.7K)を追加しました。



②SBC8085用ステップ動作割込み信号生成部の試作


SBC8080とSBC8085では、CPUからの信号が異なるため、ステップ動作を行うための割込み信号の生成部を変更する必要があります。


SBC8080の場合、INTE信号がhighになった後、2命令目のフェッチでINT信号をhighにして、INTE信号がlowでリセットしています。SBC8085の場合、INTE信号がありませんので、EI命令のフェッチを検出した後、2命令目のフェッチでINT信号をhighにして、-INTA信号がlowまたは、RES信号がhighでリセットすることにします。これでソフトウェア完全互換性が保てます。


下記がSBC8085用ステップ動作割込み信号の生成部回路です。




下記は、HOLDA問題対応とステップ動作割込み信号のためのS0、S1信号取り出しを行った、SBC8085ボード裏側と表側です。





下記は、TK-80サブボードにステップ動作割込み信号ドーターボードを追加して、SBC8085でステップ動作ができるようにしたようすです。


(再クロール更新:2022/12/22)