Almost lost technologies

ここは昔の CPU を用いた工作記事を書くために用意しました。

MELPS740 SBC チェック(8) - UART テスト(続き)

RESET 後にノイズが乗るのは、これも KiCAD化の時に余計なことした(TXD をプルダウン)影響でした。

Power On 時も問題ないようにするなら、インターフェース側からプルアップを引くのが良さそう。まだこちらの方はやっていません。

読み込みが上手くいかないのは …… このUARTって受信後に 受信バッファに書かないと 受信レディが消えないのね。

直してこうなりました。

       1/       0 :                     ;;; UARTTEST for MELPS740
       2/       0 :                     ;;; 2023-04/11 efialtes_htn
       3/       0 :                     ;;;
       4/       0 :                     ;;; Assumes PHI=8MHz - UART external clock = 307.2KHz
       5/       0 :                     ;;;
       6/       0 :                     ;;; 2023-04-09 parameter should be 8bit no-parity
       7/       0 :                     ;;;
       8/       0 :                         CPU    MELPS740
       9/       0 :                     ;    
      10/       0 : =MELPS740           TARGET:    EQU    "MELPS740"
      11/       0 :                     ;
      12/       0 :                     ;; VECTORS
      13/    FFFA :                         ORG    $FFFA
      14/    FFFA : 00 00                   FDB    $0000    ; NMI
      15/    FFFC : 00 F0                   FDB    $F000    ; RESET
      16/    FFFE : 00 F0                   FDB    $F000    ; IRQ/BRK
      17/   10000 :                     ;
      18/    F000 :                         ORG    $F000
      19/    F000 : A9 12               CSTART:    LDA    #$12    ; Stack-page1, Microprocessor mode
      20/    F002 : 85 FF                   STA    $0FF
      21/    F004 : A6 FF                   LDX    $0FF
      22/    F006 : 9A                      TXS
      23/    F007 : D8                      CLD
      24/    F008 : 12                      CLT
      25/    F009 : A9 FF                   LDA    #$FF    ; all output
      26/    F00B : 85 EB                   STA    $0EB    ; port4 directional reg
      27/    F00D :                     ;
      28/    F00D : A9 08                   LDA    #$08    ; No sleep, 8bit UART, SCLK=P36/16
      29/    F00F : 85 F4                   STA    $0F4    ; T/R Mode register
      30/    F011 :                     ;
      31/    F011 : EA                      NOP
      32/    F012 : EA                      NOP
      33/    F013 : EA                      NOP
      34/    F014 : EA                      NOP
      35/    F015 : A9 00                   LDA    #$0    ; reset every errors. then enable
      36/    F017 : 85 F5                   STA    $0F5
      37/    F019 : A9 05                   LDA    #$5    ; RSV/TRN enabled
      38/    F01B : 85 F5                   STA    $0F5
      39/    F01D :                     ;
      40/    F01D : A2 00                   LDX    #$0
      41/    F01F : EA                      NOP
      42/    F020 : EA                      NOP
      43/    F021 :                     CONOUT0:
      44/    F021 : EA                      NOP
      45/    F022 : EA                      NOP
      46/    F023 : BD 00 F2                LDA    WSTR,X    ; WSTR
      47/    F026 : F0 09                   BEQ    ECHOBACK
      48/    F028 :                     CONOUT:
      49/    F028 : 37 F5 FD                BBC    1,$0F5,CONOUT
      50/    F02B : 85 F6                   STA    $0F6
      51/    F02D : E8                      INX
      52/    F02E : EA                      NOP
      53/    F02F : 80 F0                   BRA    CONOUT0
      54/    F031 :                     ;
      55/    F031 :                     ECHOBACK:
      56/    F031 : EA                      NOP
      57/    F032 : 77 F5 FC                BBC    3,$0F5,ECHOBACK    ;get one character
      58/    F035 : A5 F7                   LDA    $0F7        ;get received char
      59/    F037 : 85 F7                   STA    $0F7        ; ... write back to clear RI
      60/    F039 : EA                      NOP
      61/    F03A :                     CONOUT1:
      62/    F03A : 37 F5 FD                BBC    1,$0F5,CONOUT1
      63/    F03D : 85 F6                   STA    $0F6
      64/    F03F : EA                      NOP
      65/    F040 : EA                      NOP
      66/    F041 : 80 EE                   BRA    ECHOBACK
      67/    F043 :                     ;
      68/    F200 :                         ORG    $F200
      69/    F200 :                     WSTR:
      70/    F200 : 4F 20 62 72 61 76       FCB    "O brave new world, That has such people in't!",$0D,$0A,$00
                    65 20 6E 65 77 20 
                    77 6F 72 6C 64 2C 
                    20 54 68 61 74 20 
                    68 61 73 20 73 75 
                    63 68 20 70 65 6F 
                    70 6C 65 20 69 6E 
                    27 74 21 0D 0A 00 
      71/    F230 :                     
      72/    F230 :                         END

うまくいっている感じ。次は Asano さんの Universal Monitor をナントカしましょう。

 

MELPS740 SBC チェック(7) - UART テスト(続き)

すこしウェイトを入れてみましたが上手くいかない。リセット直後に UART をDisable している処理でノイズが載る、ような気がしてきた。

それと、入力もうまく取れない。これは私の考え違いのような気がする。

MELPS740 SBC チェック(6) - UART テスト(続き)

puts っぽい処理だと 8bit no-parity で取れるので良いのかな。

ただ、リセット直後がおかしい。もう少し待たないとだめみたい。何回かリセット押しているとうまくいくけど、気のせいだと思う。

       1/       0 :                     ;;; UARTTEST for MELPS740
       2/       0 :                     ;;; 2023-03/26 efialtes_htn
       3/       0 :                     ;;;
       4/       0 :                     ;;; Assumes PHI=8MHz - UART external clock = 307.2KHz
       5/       0 :                     ;;;
       6/       0 :                         CPU    MELPS740
       7/       0 :                     ;    
       8/       0 : =MELPS740           TARGET:    EQU    "MELPS740"
       9/       0 :                     ;
      10/       0 :                     ;; VECTORS
      11/    FFFA :                         ORG    $FFFA
      12/    FFFA : 00 00                   FDB    $0000    ; NMI
      13/    FFFC : 00 F0                   FDB    $F000    ; RESET
      14/    FFFE : 00 F0                   FDB    $F000    ; IRQ/BRK
      15/   10000 :                     ;
      16/    F000 :                         ORG    $F000
      17/    F000 : A9 12               CSTART:    LDA    #$12    ; Stack-page1, Microprocessor mode
      18/    F002 : 85 FF                   STA    $0FF
      19/    F004 : A6 FF                   LDX    $0FF
      20/    F006 : 9A                      TXS
      21/    F007 : D8                      CLD
      22/    F008 : 12                      CLT
      23/    F009 : A9 FF                   LDA    #$FF    ; all output
      24/    F00B : 85 EB                   STA    $0EB    ; port4 directional reg
      25/    F00D :                     ;
      26/    F00D : A9 08                   LDA    #$08    ; No sleep, 8bit UART, SCLK=P36/16
      27/    F00F : 85 F4                   STA    $0F4    ; T/R Mode register
      28/    F011 : EA                      NOP
      29/    F012 : EA                      NOP
      30/    F013 : EA                      NOP
      31/    F014 : EA                      NOP
      32/    F015 : A9 00                   LDA    #$0    ; reset every errors. then enable
      33/    F017 : 85 F5                   STA    $0F5
      34/    F019 : A9 05                   LDA    #$5    ; RSV/TRN enabled
      35/    F01B : 85 F5                   STA    $0F5
      36/    F01D :                     ;
      37/    F01D : A2 00                   LDX    #$0
      38/    F01F : EA                      NOP
      39/    F020 : EA                      NOP
      40/    F021 :                     CONOUT0:
      41/    F021 : EA                      NOP
      42/    F022 : EA                      NOP
      43/    F023 : BD 00 F2                LDA    WSTR,X    ; WSTR
      44/    F026 : F0 09                   BEQ    ECHOBACK
      45/    F028 :                     CONOUT:
      46/    F028 : 37 F5 FD                BBC    1,$0F5,CONOUT
      47/    F02B : 85 F6                   STA    $0F6
      48/    F02D : E8                      INX
      49/    F02E : EA                      NOP
      50/    F02F : 80 F0                   BRA    CONOUT0
      51/    F031 :                     ;
      52/    F031 :                     ECHOBACK:
      53/    F031 : 77 F5 FD                BBC    3,$0F5,ECHOBACK    ;get one character
      54/    F034 : A5 F7                   LDA    $0F7
      55/    F036 :                     CONOUT1:
      56/    F036 : 37 F5 FD                BBC    1,$0F5,CONOUT1
      57/    F039 : 85 F6                   STA    $0F6
      58/    F03B : 80 F4                   BRA    ECHOBACK
      59/    F03D :                     ;
      60/    F200 :                         ORG    $F200

      61/    F200 :                     WSTR:
      62/    F200 : 4F 2C 20 62 72 61       FCB    "O, brave new world, That has such people in't",$0D,$0A,$00
                    76 65 20 6E 65 77 
                    20 77 6F 72 6C 64 
                    2C 20 54 68 61 74 
                    20 68 61 73 20 73 
                    75 63 68 20 70 65 
                    6F 70 6C 65 20 69 
                    6E 27 74 0D 0A 00 
      63/    F230 :                     
      64/    F230 :                         END

 

MELPS740 SBC チェック(5) - UART テスト

最初 0x55 (ascii で 'U') でテストして切れ目がわかりにくかったので、'U:' の2文字連続出力でテストしました。

       1/       0 :                     ;;; UARTTEST for MELPS740
       2/       0 :                     ;;; 2023/03/26 efialtes_htn
       3/       0 :                     ;;;
       4/       0 :                     ;;; Assumes PHI=8MHz - UART external clock = 307.2KHz
       5/       0 :                     ;;;
       6/       0 :                         CPU    MELPS740
       7/       0 :                     ;    
       8/       0 : =MELPS740           TARGET:    EQU    "MELPS740"
       9/       0 :                     ;
      10/       0 :                     ;; VECTORS
      11/    FFFA :                         ORG    $FFFA
      12/    FFFA : 00 00                   FDB    $0000    ; NMI
      13/    FFFC : 00 F0                   FDB    $F000    ; RESET
      14/    FFFE : 00 F0                   FDB    $F000    ; IRQ/BRK
      15/   10000 :                     ;
      16/    F000 :                         ORG    $F000
      17/    F000 : A9 12               CSTART:    LDA    #$12    ; Stack-page1, Microprocessor mode
      18/    F002 : 85 FF                   STA    $0FF
      19/    F004 : A6 FF                   LDX    $0FF
      20/    F006 : 9A                      TXS
      21/    F007 : D8                      CLD
      22/    F008 : 12                      CLT
      23/    F009 : A9 FF                   LDA    #$FF    ; all output
      24/    F00B : 85 EB                   STA    $0EB    ; port4 directional reg
      25/    F00D :                     ;
      26/    F00D : A9 08                   LDA    #$08    ; No sleep, 8bit UART、Ext CLK
      27/    F00F : 85 F4                   STA    $0F4    ; T/R Mode register
      28/    F011 : EA                      NOP
      29/    F012 : EA                      NOP
      30/    F013 : EA                      NOP
      31/    F014 : EA                      NOP
      32/    F015 : A9 00                   LDA    #$0    ; reset every errors. then enable
      33/    F017 : 85 F5                   STA    $0F5
      34/    F019 : A9 05                   LDA    #$5    ; RSV/TRN enabled
      35/    F01B : 85 F5                   STA    $0F5
      36/    F01D :                     ;
      37/    F01D : EA                      NOP
      38/    F01E : EA                      NOP
      39/    F01F :                     CONOUT0:
      40/    F01F : EA                      NOP
      41/    F020 : EA                      NOP
      42/    F021 : A9 55                   LDA    #$55    ; U
      43/    F023 :                     CONOUT:
      44/    F023 : 37 F5 FD                BBC    1,$0F5,CONOUT
      45/    F026 : 85 F6                   STA    $0F6
      46/    F028 : EA                      NOP
      47/    F029 : EA                      NOP
      48/    F02A : A9 3A                   LDA    #$3A
      49/    F02C :                     CONOUT1:
      50/    F02C : 37 F5 FD                BBC    1,$0F5,CONOUT1
      51/    F02F : 85 F6                   STA    $0F6
      52/    F031 : 80 EC                   BRA    CONOUT0

出てきたのがこれです。

なんかそれなりにもっともらしそうに見えるんですけど、CH340E の設定だと 7-bit EVEN Parity でないと取れないなぁ。 ’U8' にするとこうなるのでパリティがあるようには見えない。

もうすこしテストしないといけないかもしれません。

 

MELPS740 SBC チェック(4)

修正済。とりあえずLチカは OK。

       1/       0 :                     ;;; L-chika for MELPS740
       2/       0 :                     ;;; 2022-11/08 efialtes_htn
       3/       0 :                     ;;;
       4/       0 :                         CPU    MELPS740
       5/       0 :                     ;    
       6/       0 : =MELPS740           TARGET:    EQU    "MELPS740"
       7/       0 :                     ;
       8/       0 :                     ;; VECTORS
       9/    FFFA :                         ORG    $FFFA
      10/    FFFA : 00 00                   FDB    $0000    ; NMI
      11/    FFFC : 00 F0                   FDB    $F000    ; RESET
      12/    FFFE : 00 F0                   FDB    $F000    ; IRQ/BRK
      13/   10000 :                     ;
      14/    F000 :                         ORG    $F000
      15/    F000 : A9 12               CSTART:    LDA    #$12    ; Stack-page1, Microprocessor mode
      16/    F002 : 85 FF                   STA    $0FF
      17/    F004 : A6 FF                   LDX    $0FF
      18/    F006 : 9A                      TXS
      19/    F007 : D8                      CLD
      20/    F008 : 12                      CLT
      21/    F009 : A9 FF                   LDA    #$FF    ; all output
      22/    F00B : 85 EB                   STA    $0EB    ; port4 directional reg
      23/    F00D :                     ;
      24/    F00D : A9 00               CSTA1:    LDA    #$00
      25/    F00F : 85 10                   STA    $010    ; 0x10 - internal port value
      26/    F011 :                     ;
      27/    F011 : A5 10               CSTA2:    LDA    $010
      28/    F013 : 85 EA                   STA    $0EA    ; Port P4 - output port
      29/    F015 :                     ;
      30/    F015 : A9 20               CSTA2B:    LDA    #$20    ; 256x32x11cy
      31/    F017 : 85 12                   STA    $012
      32/    F019 :                     ;
      33/    F019 : A9 00               CSTA3:    LDA    #$0
      34/    F01B : 85 11                   STA    $011    ; 0x11 - wait counter
      35/    F01D : EA                  CSTA4:    NOP        ; 2cy
      36/    F01E : EA                      NOP        ; 2cy
      37/    F01F : E6 11                   INC    $011    ; 5cy
      38/    F021 : D0 FA                   BNE    CSTA4    ; 2cy
      39/    F023 :                     ;
      40/    F023 : C6 12                   DEC    $012
      41/    F025 : D0 F2                   BNE    CSTA3
      42/    F027 :                     ;
      43/    F027 : E6 10                   INC    $010
      44/    F029 : 80 E6                   BRA    CSTA2
      45/    F02B :                     
      46/    F02B :                     

本来の 6502 にない命令が多数ありますが、ZPのポートを叩くのは実に便利です。

MELPS740 SBC チェック(3)

通電してみたところ動かないので、とりあえずオシロのデジタル入力に繋いでみました。

 

ループしているっぽいんですけど、R/\W の信号が変です。よくよく見たところ、

 

上は回路図から

M50747データシートから。

あー、やってしまった。手製のライブラリバグだ。前回のポートの間違いと今回のライブラリバグ、何れも元回路図の Bsch3V 版では正しくて、KiCad6に移植した際のエンバグです。だからバラックのときは問題なかったんだ。

プリント基板化する際は最初から KiCad ベースでやらないといけないなぁ ……

 

MELPS740 SBC チェック(2)

まずU5のPICを焼きました。これは単に 307.2 KHz (ボーレート生成) を作るだけのものなので中身は殆どなにもないです。鈴木さんのとこ(電脳伝説)から適当に(ありがとうございます)流用です。

 

ま、こんな感じかな。

あちこち見ていたら M50747 の入力しきい値を勘違いしていたのが発覚。H電圧に 4Vを要求します。TTLじゃないのね。まぁRAMとROMは CMOS なので軽負荷ならフルスイングするはず。

まずいのがシリアルUSBからの信号で、R7の 4.7KΩ は 2kΩぐらいに削るべきか。秋月の CH340E のモジュールの利用を予定していて、これは5Vフルスイングするはずなので実力で OK かも知れない。何れにせよ 3.3V系の FTDI や Prolific のモジュールは利用不可です。