Almost lost technologies

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

TMS9900 ボードのシリアル

とりあえず TMS9902A を使ったシリアル送信だけはできるようにやっとなりました。原因は、シリアルのボーレートセットから送信までの待ちが足りていなかったこと。この石適切な設定がされていないと RTS を落としてだんまりになるのよねぇ……

懸案が片付いたのでさっさと終わらせようと。TMS99105A Board 側の Basic が反応しなかったのはボーレート設定の関連と思われるのでなんとかなるかなと。

       1/       0 :                         cpu    tms9900
       2/       0 :                         padding on
       3/       0 :                     ;
       4/       0 :                     ; TEST for TMS9900/9995/99105
       5/       0 :                     ;
       6/       0 : =0FFB0H             MREGS EQU 0FFB0H
       7/       0 : =0FFBAH             EREGS EQU 0FFBAH
       8/       0 : =0FFC6H             IREGS EQU 0FFC6H
       9/       0 : =0FFD2H             DUMYBF EQU    0FFD2H
      10/       0 : =0FFD4H             XREGS  EQU    0FFD4H
      11/       0 : =0FFF4H             ASR    EQU    0FFF4H
      12/       0 : =0FFF6H             DUMPFG EQU    0FFF6H
      13/       0 : =0FFF8H             STEPFG EQU    0FFF8H
      14/       0 : =0FFFAH             HALTFG EQU    0FFFAH
      15/       0 :                     ;
      16/       0 : =3H                 COUNT  EQU    3    ; reg3
      17/       0 : =7H                 POINT  EQU    7    ; reg7
      18/       0 : =0BH                LINK   EQU    11    ; reg11 = user register
      19/       0 : =0CH                CRUBAS EQU    12    ; reg12
      20/       0 :                     ;
      21/       0 : =7FF0H              LEDAD EQU 07FF0H
      22/       0 : =0H                 SERAD EQU 0000H
      23/       0 : =1FH                SERRES EQU 01FH
      24/       0 : =15H                SEROSEN EQU 015H
      25/       0 : =14H                SERTIM EQU 014H
      26/       0 : =13H                SERXBIE EQU 013H
      27/       0 : =12H                SERRIE EQU 012H
      28/       0 : =11H                SERBKON EQU 011H
      29/       0 : =10H                SERRTSO EQU 010H
      30/       0 : =0FH                SERTST EQU 00FH
      31/       0 : =0EH                SERLDC EQU 00EH
      32/       0 : =0DH                SERLSI EQU 00DH
      33/       0 : =0CH                SERLRD EQU 00CH
      34/       0 : =0BH                SERLXD EQU 00BH
      35/       0 :                     ;
      36/       0 : =1FH                SERINT EQU 01FH
      37/       0 : =1EH                SERFLG EQU 01EH
      38/       0 : =1DH                SERDSC EQU 01DH
      39/       0 : =1CH                SERCTS EQU 01CH
      40/       0 : =1BH                SERDSR EQU 01BH
      41/       0 : =1AH                SERRTS EQU 01AH
      42/       0 : =19H                SERTLP EQU 019H
      43/       0 : =18H                SERTER EQU 018H
      44/       0 : =17H                SERXSR EQU 017H
      45/       0 : =16H                SERXBR EQU 016H
      46/       0 : =15H                SERRBR EQU 015H
      47/       0 : =14H                SERDSCI EQU 014H
      48/       0 : =13H                SERTIMI EQU 013H
      49/       0 : =11H                SERXBI EQU 011H
      50/       0 : =10H                SERRBI EQU 010H
      51/       0 : =0FH                SERRIN EQU 00FH
      52/       0 : =0EH                SERRSB EQU 00EH
      53/       0 : =0DH                SERRFB EQU 00DH
      54/       0 : =0CH                SERRFE EQU 00CH
      55/       0 : =0BH                SERROV EQU 00BH
      56/       0 : =0AH                SERRPE EQU 00AH
      57/       0 : =9H                 SERRCER EQU 009H
      58/       0 :                     ;
      59/       0 :                         ORG 0
      60/       0 : FFB0 0100               DATA MREGS,INIT
      61/       4 : FFFF FFFF FFFF          DATA -1,-1,-1,-1
                    FFFF             
      62/       C : FFFF FFFF FFFF          DATA -1,-1,-1,-1
                    FFFF             
      63/      14 :                     
      64/      14 : FFFF FFFF FFFF          DATA -1,-1,-1,-1
                    FFFF             
      65/      1C : FFFF FFFF FFFF          DATA -1,-1,-1,-1
                    FFFF             
      66/      24 : FFFF FFFF FFFF          DATA -1,-1,-1,-1
                    FFFF             
      67/      2C : FFFF FFFF FFFF          DATA -1,-1,-1,-1
                    FFFF             
      68/      34 : FFFF FFFF FFFF          DATA -1,-1,-1,-1
                    FFFF             
      69/      3C : FFFF FFFF               DATA -1,-1
      70/      40 :                     ;
      71/      40 :                     ; Note: baud rate 9600, 8bit-character, even  parity 2 stop bit
      72/      40 :                     ;            control by polling
      73/     100 :                         ORG    100H
      74/     100 :                     INIT:
      75/     100 : 020C 0000               LI    R12,SERAD
      76/     104 :                     ;
      77/     104 : 1D1F                    SBO    SERRES    ; reset TMS9902 UART
      78/     106 : 0202 0010               LI    R2,10H
      79/     10A :                     ILOOP0:
      80/     10A : 0200 0000               LI    R0,0    ; small wait
      81/     10E : 0602                    DEC    R2
      82/     110 : 16FC                    JNE    ILOOP0
      83/     112 :                     ;
      84/     112 :                     VVV:
      85/     112 : 1D0E                    SBO    14
      86/     114 : 3220 014E               LDCR    @CRCR,8    ; initialize control reg
      87/     118 : 1E0E                    SBZ    14
      88/     11A : 1D0C                    SBO    12
      89/     11C : 3320 014A               LDCR    @V9600R,12    ; write both LRDR and LXDR
      90/     120 : 1E0C                    SBZ    12
      91/     122 : 1D0B                    SBO    11
      92/     124 : 3320 014C               LDCR    @V9600T,12    ; write both LRDR and LXDR
      93/     128 : 1E0B                    SBZ    11
      94/     12A : 1E11                    SBZ    17
      95/     12C : 0202 FFFF               LI    R2,0FFFFH
      96/     130 :                     VVVLP:
      97/     130 : A000                    A    R0,R0
      98/     132 : 0602                    DEC    R2
      99/     134 : 16FD                    JNE    VVVLP
     100/     136 :                     WCHAR:
     101/     136 : 1D10                    SBO    16        ; turn on transmitter
     102/     138 :                     WCLOOP:
     103/     138 : 1F16                    TB    22
     104/     13A : 16FE                    JNE    WCLOOP
     105/     13C : 3220 0150               LDCR    @ADATA,8
     106/     140 : 0202 0005               LI    R2,5
     107/     144 :                     WCLOP1:
     108/     144 : 0602                    DEC    R2
     109/     146 : 16FE                    JNE    WCLOP1
     110/     148 : 10F7                    JMP    WCLOOP
     111/     14A :                     ;
     112/     14A : 0034                V9600R:  DATA    34H        ; 9600bps
     113/     14C : 0034                V9600T:  DATA    34H        ; 9600bps
     114/     14E :                     ;
     115/     14E : 6300                CRCR:    DATA    6300H        ; CTRL, 2stop bit, even parity, div3, 7bit
     116/     150 : 4100                ADATA:    DATA    4100H        ; 'A'
     117/     152 :                     ;