So-net無料ブログ作成
English Version

3チップ構成68Kマイコンの構想(その13)プリント基板完成 [68K]

3チップ構成68Kマイコンの構想(その11)回路図整理とパターン設計」の記事に書いたように今回は最初からCNCでのプリント基板製造は諦め、プリント基板製造業者に製造を依頼することにしました。

 10/8にポチリ、10/24に到着しました。
 仕上がり具合は特に問題なく、綺麗に作って貰っています。
 今回は青色のソルダレジストにしてみました。トラック幅はCNCで切削し易い設定のままなので太めですw

PCB Top side



PCB Bottom side


 早々に部品を実装してみましたが、CP/Mが立ち上がりません・・orz
 「3チップ構成68Kマイコンの構想」の記事で書いたような簡単なプログラムは動作しましたが、メモリの末尾(0x0007fc00)を使ったPICと68Kとのデータの受け渡しができていないようです・・
 簡易的なモニタプログラムを作成して確認してみようかとも思いましたが、PICと68Kとのパラメータ渡しが出来ていない(メモリの先頭ではokのようですが、どの範囲がNGなのか不明)ので68Kからコンソール入出力ができないため、メモリ編集機能を実装することもできません・・・

 そこでこんなプログラムを作成してみました。
  1. 0x001000~0X07FF00の範囲で0x0100毎にメモリアドレスを書込む。(例 0x001800には0x00001800が書き込まれる)
  2. 次に0x001000~0X07F000の範囲で0x1000毎にメモリに書き込まれたアドレス値を拾い、0x0100からのメモリ領域に書き込む。
  3. 0x0100からのメモリ内容を調べることで68Kのメモリアクセス状況を確認する。また、PIC側からメモリダンプを調べることで68Kとのアクセスアドレスが一致しているかを確認する。(※確認は人手で行う)


 68K側のプログラムはこんな感じです。EASy68Kを使用しています。

メモリ確認用68Kプログラム
00000380 Starting Address Assembler used: EASy68K Editor/Assembler v5.16.01 Created On: 2018/10/28 0:31:53 00000000 1 * as68 -P -S c: SrcFile -O ObjFile 00000000 2 * lo68 [-S] -Ztext_address -Ddata_addressObjFile -O OutFile 00000000 3 00000000 4 * text 00000000 5 00000380 6 org $0380 00000380 7 00000380 203C 00001000 8 START: move.l #$1000,d0 * start adr 00000386 2600 9 move.l d0,d3 * save para 00000388 223C 00000100 10 move.l #$00000100,d1 * inc width 0000038E 243C 00080000 11 move.l #$00080000,d2 * end adr 00000394 2040 12 loop: move.l d0,a0 00000396 2080 13 move.l d0,(a0) 00000398 D081 14 add.l d1,d0 0000039A B082 15 cmp.l d2,d0 0000039C 66F6 16 bne loop 0000039E 17 0000039E 227C 00000100 18 move.l #$0100,a1 * result save area 000003A4 2003 19 move.l d3,d0 000003A6 2203 20 move.l d3,d1 * inc:$1000 000003A8 2040 21 loop2: move.l d0,a0 000003AA 22D0 22 move.l (a0),(a1)+ 000003AC D081 23 add.l d1,d0 000003AE B082 24 cmp.l d2,d0 000003B0 66F6 25 bne loop2 000003B2 26 000003B2 60FE 27 bra * 000003B4 28 000003B4 29 end START No errors detected No warnings generated SYMBOL TABLE INFORMATION Symbol-name Value ------------------------- LOOP 394 LOOP2 3A8 START 380


 アセンブルしてできたSレコードファイルをバイナリ変換し、picleのステートメントに自動変換後、picleソースに埋め込み、実行した結果は次のとおりでした。


picleソースに埋め込み実行した結果
:l 1:# 3chips MC68008 OneBoard test 2018/10/27 2:# by skyriver 3: 4:use LibCpm; 5:use LibSpi; 6: 7: 8:proc main() { 9: var adr; 10: init(); 11: initPmp(); 12: initSpi(); 13:# initSd(); 14: 15: LATA[-2]=LATA[-2]&$fffc; # on reset:a0 halt:a1 16: 17: PmpOn(); 18: PmpSetAdr(0); 19: MemWr($00); # stack 20: MemWr($02); 21: MemWr($00); 22: MemWr($00); 23: MemWr($00); # PC 24: MemWr($00); 25: MemWr($03); 26: MemWr($80); 27: 28: adr = $0380; # 68K's ADR:00000380 29: PmpSetAdr(adr); 30: 31: MemWr($20); 32: MemWr($3c); 33: MemWr($00); 34: MemWr($00); 35: MemWr($10); 36: MemWr($00); 37: MemWr($26); 38: MemWr($00); 39: MemWr($22); 40: MemWr($3c); 41: MemWr($00); 42: MemWr($00); 43: MemWr($01); 44: MemWr($00); 45: MemWr($24); 46: MemWr($3c); 47: MemWr($00); 48: MemWr($08); 49: MemWr($00); 50: MemWr($00); 51: MemWr($20); 52: MemWr($40); 53: MemWr($20); 54: MemWr($80); 55: MemWr($d0); 56: MemWr($81); 57: MemWr($b0); 58: MemWr($82); 59: MemWr($66); 60: MemWr($f6); 61: MemWr($22); 62: MemWr($7c); 63: MemWr($00); 64: MemWr($00); 65: MemWr($01); 66: MemWr($00); 67: MemWr($20); 68: MemWr($03); 69: MemWr($22); 70: MemWr($03); 71: MemWr($20); 72: MemWr($40); 73: MemWr($22); 74: MemWr($d0); 75: MemWr($d0); 76: MemWr($81); 77: MemWr($b0); 78: MemWr($82); 79: MemWr($66); 80: MemWr($f6); 81: MemWr($60); 82: MemWr($fe); 83: 84: PmpOff(); 85: dump(0); 86:# dump(adr); 87: 88: BusRelease(); 89: LATA[-2]=LATA[-2]|$3; # off reset:a0 halt:a1 90: 91: Timer_=10; 92: while (Timer_) {} # 100ms wait 93: 94: LATA[-2]=LATA[-2]&$fffc; # on reset:a0 halt:a1 95: PrnStr_( "\n-------" ); 96: dump(adr); 97: PrnStr_( "\n-------" ); 98: dump($0100); 99: dump($0180); 100: dump($0200); 101: dump($0280); 102: PrnStr_( "\n-------" ); 103: dump($0400); # 68K's adr:0007fc00 104:} :run 0000 : 00 02 00 00 00 00 03 80 00 00 4D E0 00 00 4D E4 0010 : 00 00 4D E8 00 00 4D EC 00 00 4D F0 00 00 4D F4 0020 : 00 00 4D F8 00 00 4D FC 00 00 4E 00 00 00 4E 04 0030 : 00 00 4E 08 00 00 4E 0C 00 00 4E 10 00 00 4E 14 0040 : 00 00 4E 18 00 00 4E 1C 00 00 4E 20 00 00 4E 24 0050 : 00 00 4E 28 00 00 4E 2C 00 00 4E 30 00 00 4E 34 0060 : EE 28 41 85 9E 4D AA 06 BA 69 2F 1D D6 1B 03 AE 0070 : F7 2B AC FB 37 6A 10 BE 0B 03 1F 12 17 FC 3C 6C ------- 0380 : 20 3C 00 00 10 00 26 00 22 3C 00 00 01 00 24 3C 0390 : 00 08 00 00 20 40 20 80 D0 81 B0 82 66 F6 22 7C 03A0 : 00 00 01 00 20 03 22 03 20 40 22 D0 D0 81 B0 82 03B0 : 66 F6 60 FE FE 00 72 7F 24 D8 51 C9 FF FC 52 40 03C0 : 51 CA FF E8 4E D3 0D 2E 2E 2E 20 6C 6F 61 64 69 03D0 : 6E 67 20 00 02 41 00 FF 00 41 03 00 32 81 4E 70 03E0 : 4E 75 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ------- 0100 : 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 0110 : 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 0120 : 00 00 90 00 00 00 A0 00 00 00 B0 00 00 00 C0 00 0130 : 00 00 D0 00 00 00 E0 00 00 00 F0 00 00 01 00 00 0140 : 00 01 10 00 00 01 20 00 00 01 30 00 00 01 40 00 0150 : 00 01 50 00 00 01 60 00 00 01 70 00 00 01 80 00 0160 : 00 01 90 00 00 01 A0 00 00 01 B0 00 00 01 C0 00 0170 : 00 01 D0 00 00 01 E0 00 00 01 F0 00 00 02 00 00 0180 : 00 02 10 00 00 02 20 00 00 02 30 00 00 02 40 00 0190 : 00 02 50 00 00 02 60 00 00 02 70 00 00 02 80 00 01A0 : 00 02 90 00 00 02 A0 00 00 02 B0 00 00 02 C0 00 01B0 : 00 02 D0 00 00 02 E0 00 00 02 F0 00 00 03 00 00 01C0 : 00 03 10 00 00 03 20 00 00 03 30 00 00 03 40 00 01D0 : 00 03 50 00 00 03 60 00 00 03 70 00 00 03 80 00 01E0 : 00 03 90 00 00 03 A0 00 00 03 B0 00 00 03 C0 00 01F0 : 00 03 D0 00 00 03 E0 00 00 03 F0 00 00 04 00 00 0200 : 00 04 10 00 00 04 20 00 00 04 30 00 00 04 40 00 0210 : 00 04 50 00 00 04 60 00 00 04 70 00 00 04 80 00 0220 : 00 04 90 00 00 04 A0 00 00 04 B0 00 00 04 C0 00 0230 : 00 04 D0 00 00 04 E0 00 00 04 F0 00 00 05 00 00 0240 : 00 05 10 00 00 05 20 00 00 05 30 00 00 05 40 00 0250 : 00 05 50 00 00 05 60 00 00 05 70 00 00 05 80 00 0260 : 00 05 90 00 00 05 A0 00 00 05 B0 00 00 05 C0 00 0270 : 00 05 D0 00 00 05 E0 00 00 05 F0 00 00 06 00 00 0280 : 00 06 10 00 00 06 20 00 00 06 30 00 00 06 40 00 0290 : 00 06 50 00 00 06 60 00 00 06 70 00 00 06 80 00 02A0 : 00 06 90 00 00 06 A0 00 00 06 B0 00 00 06 C0 00 02B0 : 00 06 D0 00 00 06 E0 00 00 06 F0 00 00 07 00 00 02C0 : 00 07 10 00 00 07 20 00 00 07 30 00 00 07 40 00 02D0 : 00 07 50 00 00 07 60 00 00 07 70 00 00 07 80 00 02E0 : 00 07 90 00 00 07 A0 00 00 07 B0 00 00 07 C0 00 02F0 : 00 07 D0 00 00 07 E0 00 00 07 F0 00 97 54 9F D4 ------- 0400 : 00 03 FC 00 00 00 00 00 00 07 FC 22 00 01 27 E8 0410 : 00 00 00 00 60 36 00 00 00 00 00 00 00 00 00 01 0420 : 00 01 00 07 FC 58 00 01 09 58 FF F7 00 01 00 00 0430 : 00 07 FC 4A 00 01 27 E8 00 00 00 00 60 36 00 00 0440 : 00 00 00 00 00 00 00 01 00 01 2E F0 00 01 44 70 0450 : FF F7 17 72 FF FF 00 00 00 01 63 BA 00 01 4C F7 0460 : 00 07 FC 98 00 01 2D B2 00 07 FC 78 00 01 63 BB 0470 : 00 08 00 00 00 01 4C F0 61 36 58 58 00 01 2E F0 :


 上の0x0100部のダンプリスト内容から68K側からのメモリアクセスは特に問題無いようです。
 0x0400部(実メモリ上のアドレスは0X0007fc00)のダンプ結果からPICからの0X07fc00のアクセスはA18がhighにならずlowの状態(結果0x0003fc00が読める)のようです。

 だいぶ状況が判ってきました^^
 次にシンクロでA18がhighになった状態の電圧レベルを確認しました(リファレンスとしてA16と比較)
 黄色がアドレス信号で紫色はトリガを取るためのBG/信号です。

A16の信号波形 A18の信号波形


 A16ももう少し高い電圧の方がいいのですが(今回は回路を限界的に簡略化しているのでこれでOKとします・・LEDの数は多めだけどw)、A18は明らかに電圧が低くなっています・・・・

 ボードから電源を抜いた状態でA18とGND間の抵抗を計ってみると2.6Kほどでした(他のアドレス線は15K程度)
 一応、半田付け状態も確認しましたが、問題なさそうだったのでメモリを抜いてみると抵抗が他のアドレス線と同じ15K程度になりました。

 このことからメモリチップが原因である可能性大です。今回使用している512KBのメモリは2個しか持っていないのでブレッドボードで使っているメモリを抜いてPCBに付けてみたところ無事にCP/M-68Kが立ち上がりました(^^)/

 消費電流を計ってみたところ、CP/M起動状態での通常時は170mA、SDカードアクセス時に190mA程度でした。
 通常時(キー入力待ち状態)は68KはバスをPICに引き渡して何もしていない状態ですが、使用しているMC68008P10はHMOSプロセスで製造されてるので消費電流はスイッチング速度によらず一定です。

 最後にCP/M-68Kが動作中のボード写真を貼っておきます^^
 メモリはブレッドボードで使用していたものに交換したのでピン番号と信号名の書かれた紙が貼ってありますw

CP/M-68K動作中の写真


★2018/11/03 追記
 「3チップ構成68Kマイコンの構想(その11)回路図整理とパターン設計」の回路図で
  • PL3
    1-2 の接続を解除
  • PL4
    1-2 -> 2-3 にジャンパピン変更

にジャンパピンを変え、PICの31ピンから16MHzが出力されるようにconfigを変更、更にバスリクエスト(BR/:low)時にBG/チェックをしなようにPIC側のソフトを変更することで、MC68008P10(10MHz版)への供給クロックを16MHzにしてみました。

 この状態でCP/M-68Kを起動したところ、Cold Boot Loaderが出力している「...booting」が表示された後、「ERAC」のLEDが点灯(メモリ実装外のアドレスをアクセス)して反応がなくなりました^^;
 (メモリのアクセスタイムは70nsなので大丈夫だと思いますが)やはり68Kの10MHz版では16MHz動作は厳しいようです。


★2018/12/04 追記
 ebayで注文していた512KBのSRAMが届いたのでブレッドボード用にラベルの付けたメモリからラベル無しのものに交換しました。
 記念として撮った写真を貼っておきます。TOP面のR23がDCジャックと若干干渉気味ですがDCジャック用の丸穴が大きめなので位置調整で何とか入りそう(若干削るといいかも^^;)
 初期バージョンとしてはまぁまぁのできではないでしょうか?

Pic24CPM68K部品実装写真(top面)


Pic24CPM68K部品実装写真(bottom面)


[TOP] [ 前へ ] 連載記事 [ 次へ ]

nice!(0)  コメント(2) 
共通テーマ:趣味・カルチャー

nice! 0

コメント 2

skyriver

68Kへの供給クロックを8MHzから16MHzに変更してCP/M-68Kを起動した結果をブログに追記しました。

by skyriver (2018-11-03 22:54) 

skyriver

ebayで注文していた512KBのSRAMが届いたのでPic24CPM68Kの部品実装写真を撮り、ブログに追記しました。
by skyriver (2018-12-04 00:34) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。