依然として動いていないけど、ボーレート生成までは問題ない様になっています。バラックに近い雰囲気です。
下に示したようなシングスステップ回路を使って、Data/Address ピン全部を見ている状態です。
1/ 0 : ; Lchika for INS8070 by efialtes_htn 2/ 0 : CPU 8070 3/ 0 : =INS8070 TARGET: EQU "INS8070" 4/ 0 : 5/ 0 : ; 0x0000-0x3fff ROM 6/ 0 : ; 0x4000-0xadff, 0xfe00-0xffff RAM 7/ 0 : ; 0xfc00-0xfc3f SERIAL INTERFACE 8/ 0 : 9/ 0 : ; more constants 10/ 0 : =0x4200 STACK: EQU 0x4200 ; hardware stack 11/ 0 : =0xFC00 SERBASE: EQU 0xfc00 ; serial interface base address 12/ 0 : =0xFC01 SERINTE: EQU 0xfc01 ; serial interrupt enable 13/ 0 : =0xFC02 SERIID: EQU 0xfc02 ; serial interrupt identification (READ) 14/ 0 : =0xFC02 SERFCNT: EQU 0xfc02 ; serial interrupt FIFO control (WRITE) 15/ 0 : =0xFC03 SERLCNT: EQU 0xfc03 ; serial line control 16/ 0 : =0xFC04 SERMCNT: EQU 0xfc04 ; serial MODEM control 17/ 0 : =0xFC05 SERLSTA: EQU 0xfc05 ; serial line status 18/ 0 : =0xFC06 SERMSTA: EQU 0xfc06 ; serial MODEM status 19/ 0 : =0xFC00 SERDIVL: EQU 0xfc00 ; serial divisor latch (low) 20/ 0 : =0xFC01 SERDIVH: EQU 0xfc01 ; serial divisor latch (high) 21/ 0 : 22/ 0 : =0xFF81 CNT0H: EQU 0xff81 23/ 0 : 24/ 0 : =0x80 divacc: EQU 0x80 ; divisor latch access code 25/ 0 : =0x14 lowdiv: EQU 0x14 ; lower divisor (19200) 26/ 0 : =0x0 uppdiv: EQU 0x00 ; upper divisor (19200) 27/ 0 : =0x17 dataspc: EQU 0x17 ; DLAB=0, 8bit, 2stop, no parity 28/ 0 : =0xC1 fifospc: EQU 0xc1 ; FIFO enabled TRIG=14 no-DMA 29/ 0 : =0x0 intmask: EQU 0x00 ; interrupt mask - disable interrupt 30/ 0 : 31/ 0 : ; interpreter starts here 32/ 0 : ; assumptions "should be" refer to 1K RAM at X'1000-X'13ff) 33/ 0 : ORG 0 34/ 0 : 00 NOP ; lost byte because of PC preincrement 35/ 1 : 24 3F 00 JMP COLD ; Jump to cold start 36/ 4 : 24 3F 00 JMP COLD ; Jump to interrupt a handler 37/ 7 : 24 3F 00 JMP COLD ; Jump to interrupt b handler 38/ A : 39/ 40 : ORG 0x0040 40/ 40 : 25 00 42 COLD: LD SP,=STACK 41/ 43 : 26 00 FC SERINI: LD P2,=SERBASE 42/ 46 : C4 80 LD A, =divacc 43/ 48 : CA 03 ST A, SERLCNT-SERBASE, P2 44/ 4A : C4 14 LD A, =lowdiv 45/ 4C : CA 00 ST A, SERBASE-SERBASE, P2 46/ 4E : C4 00 LD A, =uppdiv 47/ 50 : CA 01 ST A, SERINTE-SERBASE, P2 48/ 52 : C4 17 LD A, =dataspc 49/ 54 : CA 03 ST A, SERLCNT-SERBASE, P2 50/ 56 : C4 C1 LD A, =fifospc 51/ 58 : CA 02 ST A, SERFCNT-SERBASE, P2 52/ 5A : C4 00 LD A, =intmask 53/ 5C : CA 01 ST A, SERINTE-SERBASE, P2 54/ 5E : C2 05 LD A, SERLSTA-SERBASE, P2 ; read LSR to clear any false 55/ 60 : C2 06 LD A, SERMSTA-SERBASE, P2 ; read MSR to clear any false 56/ 62 : ; 57/ 62 : 26 6D 00 MAIN: LD P2,=HELLOSTRING 58/ 65 : 20 A4 00 JSR PUTS 59/ 68 : MAIN1: 60/ 68 : 20 87 00 JSR GETC 61/ 6B : 74 FB BRA MAIN1 62/ 6D : ; 63/ 6D : HELLOSTRING: 64/ 6D : 57 48 41 54 20 49 DB 'W','H','A','T',' ','I','S',' ','P','A','S','T' 53 20 50 41 53 54 65/ 79 : 20 49 53 20 50 52 DB ' ','I','S',' ','P','R','O','L','O','G','U','E',0x0d,0x0a,0x00 4F 4C 4F 47 55 45 0D 0A 00 66/ 88 : ; 67/ 88 : ; GETC: output single character in A 68/ 88 : ; 69/ 88 : 56 GETC: PUSH P2 70/ 89 : 26 00 FC LD P2,=SERBASE 71/ 8C : C2 05 GETC1: LD A,SERLSTA-SERBASE, P2 72/ 8E : D4 01 AND A,=0x01 ; bit0 = DR 73/ 90 : 6C FA BZ GETC1 ; NOT EMPTY 74/ 92 : C2 00 LD A,SERBASE-SERBASE, P2 ; poke to Trasmit reg. 75/ 94 : 5E POP P2 76/ 95 : ; 77/ 95 : ; PUTC: output single character in A 78/ 95 : ; 79/ 95 : 56 PUTC: PUSH P2 80/ 96 : 0A PUSH A 81/ 97 : 26 00 FC LD P2,=SERBASE 82/ 9A : C2 05 PUTC1: LD A,SERLSTA-SERBASE, P2 83/ 9C : D4 20 AND A,=0x20 ; bit5 = THRE 84/ 9E : 6C FA BZ PUTC1 ; NOT EMPTY 85/ A0 : 38 POP A 86/ A1 : C2 00 LD A,SERBASE-SERBASE, P2 ; poke to Trasmit reg. 87/ A3 : 5E POP P2 88/ A4 : 5C RET 89/ A5 : ; 90/ A5 : ; PUTS: output P2 pointed string terminated by '0' 91/ A5 : 0A PUTS: PUSH A 92/ A6 : 92 00 PUTS1: ILD A,0x00, P2 93/ A8 : DC 00 OR A,=0x00 94/ AA : 6C 05 BZ PUTSE 95/ AC : 20 94 00 JSR PUTC 96/ AF : 74 F5 BRA PUTS1 97/ B1 : ; 98/ B1 : 38 PUTSE: POP A 99/ B2 : 5C RET 100/ B3 :
なにか命令処理の勘違いのような気がする。