結構 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----------