0001 0000 ; Turn each display segment on and off, moving through all possible 0002 0000 ; display hardware addresses. Real ET-3400 hardware turns on each 0003 0000 ; successive segment without ever delaying between segments or digits. 0004 0000 ; Address bits 3 and 7 are "don't care" as shown on manual p87, Memory 0005 0000 ; Decoding, DISPLAYS. Rick Nungester, 5/8/22. 0006 0000 0007 0000 DIGADD .equ $00F0 ; Monitor RAM hardware display digit and segment: 0008 0000 ; 1100 0001 xddd xsss (x = don't care) 0009 0000 ; \-------/ ||| ||| 0010 0000 ; constant ||| segment 000('-') to 111(DP) 0011 0000 ; digit 000 (right) to 110 (left) 0012 0000 0013 0000 .org $0000 ; start of user RAM 0014 0000 0015 0000 CE C1 10 DSPTST LDX #$C110 ; digit 1 (right) segment 0 ('-') 0016 0003 DF F0 STX DIGADD 0017 0005 0018 0005 86 01 OUT LDAA #1 ; turn one segment on 0019 0007 DE F0 LDX DIGADD 0020 0009 A7 00 STAA 0,X 0021 000B 0022 000B CE 2F 00 LDX #$2F00 ; wait to see the segment 0023 000E 09 WAIT DEX 0024 000F 26 FD BNE WAIT 0025 0011 0026 0011 86 00 LDAA #0 ; turn that segment off 0027 0013 DE F0 LDX DIGADD 0028 0015 A7 00 STAA 0,X 0029 0017 0030 0017 7C 00 F1 INC DIGADD+1 ; next segment, each digit twice, next digit 0031 001A 96 F1 LDAA DIGADD+1 0032 001C 81 F0 CMPA #$F0 ; done with both address ranges? 0033 001E 27 E0 BEQ DSPTST ; if so, start over 0034 0020 0035 0020 81 70 CMPA #$70 ; done with the first address range? 0036 0022 26 E1 BNE OUT ; if not, continue in this range 0037 0024 0038 0024 CE C1 90 LDX #$C190 ; if so, start 2nd address range 0039 0027 DF F0 STX DIGADD 0040 0029 20 DA BRA OUT 0041 002B 0042 002B .end Label Value Label Value Label Value ------------------ ------------------ ------------------ DIGADD 00F0 DSPTST 0000 OUT 0005 WAIT 000E tasm: Number of errors = 0