SSブログ
English Version

Z80GALの構想(その3)ブレッドボードでの仮組 [Z80]

 前回の「Z80GALの構想(その2)GALの設計」でGALの基本的な設計はできたのでブレッドボードを使って組んでみました。

 現時点でのチップ構成は下記の5チップ構成となっています。
  • Z80CPU
     Z84C0020PEG(40PIN):クロック上限の20MHzで動作
  • RAM
     UM61512-15(32PIN):64K x 8bitのスタティックメモリ アクセスタイム:15ns
  • EEPROM
     W27C512-45Z(28PIN):64K x 8bitのEEPROM アクセスタイム:45ns
  • GAL
     GAL22V10D(24PIN):10個のOLMC(Output Logic Macrocell)を持つ、GALの中では最も容量が大きく新しいチップ
  • クロック生成&タイマー割込み
     PIC12F683(8PIN):ピン数が少ないので74HCU04でクロック発振するより実装効率が良い(シリアル受信用のタイマー割込み信号も生成)

 それではブレッドボードで結線後の作業概要をメモしておきます。

  1. ROM上でのループ試験
     最初にROM上でのループ試験を行いました。シリアル出力(Tx)への出力データをトグルにして矩形波を出力しています(Lチカのようなもの)。この時点ではまだハンドアセンブルで、E2PROMに書込み無事動作しました。

    ■テストプログラム1
    0000 F3         DI                     ; 4
    0001 AF         XOR     A              ; 4
    0002 D3 80      OUT     (080h),A       ; 11 loop:28 states
    0004 EE 01      XOR     1              ; 7   ->(1/20*28)*2=2.8us
    0006 C3 02 00   JP      0002H          ; 10
    

     下図はTx信号の波形です。

    ROM上でのループ処理


  2. RAM上でのループ試験
     ROMの内容をRAMに書込み後、リードもRAM側になるように切替えてループする試験です。

    ■テストプログラム2
    0000 21 00 00   LD      HL,0
    0003 11 00 00   LD      DE,0
    0006 01 20 00   LD      BC,0020H
    0009 ED B0      LDIR
    000B 3E 01      LD      A,1
    000D D3 E0      OUT     (0E0H),A        ; select RAM
    000F D3 80      OUT     (080H),A        ; 11 loop:30 states
    0011 EE 01      XOR     1               ;  7  ->(1/20*30)*2=3.0us
    0013 18 FA      JR      000FH           ; 12
    
    ※ここまではハンドアセンブルですが、以降はアセンブラを使用しています。

     しかし、ソフトでRAMレジスタをセットしても直ぐにクリアされてしまう現象が発生しました。

     尚、リセット回路は下図のような一般的なものです。

    リセット回路

     電源ON時の電源電圧リセット信号 の推移が下図で、Z80が走り始めてもGALの方がリセット状態になっているようでZ80側の初期処理でRAMレジスタをセットしてもレジスタが直ぐにクリアされる状態でした。
     黄色(ch1)が電源電圧 リセット信号 で水色(ch2)が水晶発振部分の波形です。

    ★修正 2020/10/29 (誤)電源電圧 → (正)リセット信号

    電源ON時のリセット信号変化

     対処としては、ROMからRAMへ16KBコピー(21state/byteなので約17.2ms)後にRAMレジスタをセットすることでうまく動作しました。
     下図は黄色(ch1)がRAMレジスタの出力(RAMが選択状態になっている)で水色(ch2)がTxの波形です。

    RAM上でのループ試験


  3. ソフトウェアシリアルの実装
     最初から割込みでのシリアル受信を作るのは大変なので開発環境を整えるためにまずは割込みを使わないシリアル通信を実装しました。
     ステート数を数えて通信速度に合わせればいいだけなので実装は簡単です。
     下図はTx信号のサンプル波形で通信速度は9600bpsです。中央右寄りの箇所で1bit分の信号幅を計測していて丁度1/9600sであることを確認しています。

    シリアル送信信号(Tx)のサンプル波形

    ★追記 2020/10/27
     ソフトウェアで実現したシリアル通信部のリストを追記します。

    ソフトウェアシリアル通信処理部のリスト
    ;*** softqare serial *** ; 9600bps 1bit length = 1000000/9600 = 104.17 us ; = (1000000/9600)/(1/20) = 2083.3 states(20MHz) 0823 STIMST EQU 2083 ; (10000/96*20) ; state par serial 1bit 0099 STICNT EQU (STIMST-11-4-12-17-13-11-7-8-10-10)/13+1 ; serial out ; A <- data 0031 B7 Putc: OR A ; 4 clear Cy(start bit) 0032 17 RLA ; 4 0033 06 09 LD B,9 ; 7 set bit counter 0035 D3 80 Putc10: OUT (AdSeri),A ; 11 0037 1F RRA ; 4 0038 18 00 JR Putc20 ; 12 = 4x3 dummy state 003A CD 0043 Putc20: CALL STimer ; 17 003D 10 F6 DJNZ Putc10 ; 13/8 003F F6 01 OR 1 0041 D3 80 OUT (AdSeri),A ; out stop bit 0043 C5 STimer: PUSH BC ; 11 0044 06 99 LD B,STICNT ; 7 0046 10 FE DJNZ $ ; 13/8 0048 C1 POP BC ; 10 0049 C9 RET ; 10 00EF STICNT2 EQU (STIMST*3/2-11/2-7-7-7)/13+1 004D STICNT3 EQU (STIMST/2-8-4-7-10-10-10)/13+1 ; serial in ; A -> data 004A C5 Getc: PUSH BC 004B DB 80 Getc10: IN A,(AdSeri) ; 11 004D E6 01 AND 01H ; 7 004F 20 FA JR NZ,Getc10 ; 12/7 0051 06 EF LD B,STICNT2 ; 7 0053 10 FE DJNZ $ ; 13/8 0055 06 08 LD B,8 0057 DB 80 Getc20: IN A,(AdSeri) ; 11 get Rx(LSB) 0059 1F RRA ; 4 005A 79 LD A,C ; 4 005B 1F RRA ; 4 005C 4F LD C,A ; 4 005D CD 0043 CALL STimer ; 17 0060 10 F5 DJNZ Getc20 ; 13/8 0062 79 LD A,C ; 4 0063 06 4D LD B,STICNT3 ; 7 0065 10 FE DJNZ $ ; 13/8 0067 C1 POP BC ; 10 0068 C9 RET ; 10


  4. エコーバック試験
     シリアル通信ができるようになったのでエコーバックの試験を行いました。結果は問題なく動作しました。

    エコーバック試験


  5. GAME言語の移植
     今後、割込み処理やSPIを実装していくための環境として簡単なモニタを作って実装しようかとも思いましたが、メモリ確認等の作業効率を考えてGAME言語を移植することにしました。
     シリアル送受信ができているので移植は簡単です。
     但し、今の時点では割込みを使わないキー入力処理なのでキーセンスができない状態で使い勝手が少しよくありません。

    GAME言語の画面サンプル

     以前GAME言語を使って作成した迷路生成&探索プログラムも動作しました。

    迷路プログラム画面例


  6. 直近の予定
     パソコン側からファイルを手軽に持ってこれるようにしないと開発効率が良くないのでHEXファイルの受信処理を実装する予定です。



★追記 2021/01/26
 ブレッドボードで仮組したZ80GALの写真を追記します。

ブレッドボードで組んだZ80GAL



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

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