Almost lost technologies

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

tms9902 の駆動失敗

結構 TMS9900 の命令の勘違いがあったのですけど、ロジアナで見ても変な動きをしないようになってもシリアルからの結果がおかしい。なんとなくまだなにか錯覚しているような。

 

------>8------------>8------------>8------------>8----------

       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 :                     ;SERBASE EQU 000H	; to EQU 7
      59/       0 :                     ;
      60/       0 :                     	ORG 0
      61/       0 : FFB0 0100           	DATA MREGS,INIT
      62/       4 : FFFF FFFF FFFF      	DATA -1,-1,-1,-1
                    FFFF             
      63/       C : FFFF FFFF FFFF      	DATA -1,-1,-1,-1
                    FFFF             
      64/      14 :                     
      65/      14 : FFFF FFFF FFFF      	DATA -1,-1,-1,-1
                    FFFF             
      66/      1C : FFFF FFFF FFFF      	DATA -1,-1,-1,-1
                    FFFF             
      67/      24 : FFFF FFFF FFFF      	DATA -1,-1,-1,-1
                    FFFF             
      68/      2C : FFFF FFFF FFFF      	DATA -1,-1,-1,-1
                    FFFF             
      69/      34 : FFFF FFFF FFFF      	DATA -1,-1,-1,-1
                    FFFF             
      70/      3C : FFFF FFFF           	DATA -1,-1
      71/      40 :                     ;
      72/      40 :                     ; Note: baud rate 9600, 8bit-character, no parity 2 stop bit
      73/      40 :                     ;		    control by polling
      74/     100 :                     	ORG	100H
      75/     100 : 020C FFF4           INIT:	LI	R12,ASR
      76/     104 : 04FC                	CLR	*R12+	;clear ASR
      77/     106 : 073C                	SETO	*R12+
      78/     108 : 04FC                	CLR	*R12+
      79/     10A : 04DC                	CLR	*R12
      80/     10C : 020C 0000           	LI	CRUBAS,00H
      81/     110 :                     ;
      82/     110 : 1D1F                	SBO	SERAD+SERRES	; reset TMS9902 UART
      83/     112 : 3220 0142           	LDCR	@CRCR,8	; initialize control reg
      84/     116 : 1E0D                	SBZ	13	; do not int interval reg
      85/     118 :                     ;	CLR	COUNT	; reset loop count
      86/     118 :                     ;
      87/     118 : 0207 013E           MATCH:	LI	POINT,V2400	; set to 9600bps
      88/     11C : 3317                	LDCR	*POINT,12	; write both LRDR and LXDR
      89/     11E : 1D0B                	SBO	11		; LXDR Register
      90/     120 : 3317                	LDCR	*POINT,12
      91/     122 :                     ;
      92/     122 : 04C9                	CLR	R9
      93/     124 : 05C9                ULOOP:	INCT	R9
      94/     126 : 0249 001F           	ANDI	R9,1FH
      95/     12A : 0269 0040           	ORI	R9,40H
      96/     12E : 06A0 0134           	BL	@WENTRY
      97/     132 : 10F8                	JMP	ULOOP	
      98/     134 :                     ;
      99/     134 :                     ;
     100/     134 :                     ;
     101/     134 : 1D10                WENTRY:	SBO	16		; set RTSON
     102/     136 : 1F16                WENTRY2: TB	22		; transmit buffer empty?
     103/     138 : 16FE                	JNE	WENTRY2 	; no. wait until it is.
     104/     13A : 3209                	LDCR	R9,8		; to UART
     105/     13C : 045B                	B	*R11
     106/     13E :                     ;
     107/     13E : 0034                V2400:  DATA	034H		; 9600bps
     108/     140 :                     ;
     109/     140 : 4300                CTNL0:  DATA    4300H
     110/     142 : 4343                CRCR:	DATA	4343H		; CTRL, 2stop bit, no parity, div3, 7bit
     111/     144 :                     ;

------>8------------>8------------>8------------>8----------