AS V1.42 Beta [Bld 172] - Source File i2c_asm_mt.asm - Page 1 - 10/24/2020 14:44:21 1/ 0 : PAGE 0,80 2/ 0 : ;Program:- i2c_asm_mt.asm 3/ 0 : ;Bit Bangs the I2C interface in order to read the RTC module's registers, 4/ 0 : ;and then prints the time & date on the Microtan screen. 5/ 0 : ;Powershell command for assembling with AS assembler 6/ 0 : ;PS C:\Microtan\AS> .\bin\asw -cpu 65C02 i2c_asm_mt.asm -L -o a.out ; if ($?) { .\bin\p2bin a.out } 7/ 0 : ORG $0 8/ 0 : 9/ 0 : 10/ 0 : =$BC00 AY_BASE_ADR: EQU $BC00 ; (Base address of the AY chip.) 11/ 0 : =$BC01 AY_WRITE_ADR: EQU AY_BASE_ADR+1 12/ 0 : =$7 EN: EQU 7 ;Address of ENABLE register in AY chip. 13/ 0 : =$E PA: EQU 14 ;Address of Port A register in AY chip. 14/ 0 : =$F PB: EQU 15 ;Addresses of Port B register in AY chip. 15/ 0 : =$13 NUM_REGS EQU 19 ;Number of RTC registers 16/ 0 : =$7E4D RTC_SECS: EQU RTC_VARS+0 ;Seconds 17/ 0 : =$7E4E RTC_MINS: EQU RTC_VARS+1 ;Mins 18/ 0 : =$7E4F RTC_HRS: EQU RTC_VARS+2 ;Hours 19/ 0 : =$7E50 RTC_DOW: EQU RTC_VARS+3 ;Day Of Week 20/ 0 : =$7E51 RTC_DATE: EQU RTC_VARS+4 ;Date 21/ 0 : =$7E52 RTC_MTH: EQU RTC_VARS+5 ;Month 22/ 0 : =$7E53 RTC_YEAR: EQU RTC_VARS+6 ;Years 23/ 0 : =$7E5E RTC_TEMPMSB: EQU RTC_VARS+$11 ;MSB of temperature 24/ 0 : =$7E5F RTC_TEMPLSB: EQU RTC_VARS+$12 ;LSB of temperature 25/ 0 : =$202 TIMESCNADD: EQU $202 ;Start address of time display 26/ 0 : =$224 TEMPSCNADD: EQU $224 ;Start address of temperature display 27/ 0 : 28/ 0 : 29/ 7C00 : ORG $7C00 ; (31744) 30/ 7C00 : 31/ 7C00 : 32/ 7C00 : 33/ 7C00 : 34/ 7C00 : 20 BD 7D CLOCK: JSR CLR_I2C 35/ 7C03 : 20 5F 7D JSR I2C_START 36/ 7C06 : A9 D0 LDA #$D0 ;RTC address 37/ 7C08 : 20 D7 7D JSR SEND_I2C_BYTE 38/ 7C0B : A9 00 LDA #$0 39/ 7C0D : 20 D7 7D JSR SEND_I2C_BYTE 40/ 7C10 : 20 66 7D JSR I2C_STOP 41/ 7C13 : 20 5F 7D JSR I2C_START 42/ 7C16 : A9 D1 LDA #$D1 43/ 7C18 : 20 D7 7D JSR SEND_I2C_BYTE 44/ 7C1B : 45/ 7C1B : A0 00 LDY #$0 ;first register = seconds 46/ 7C1D : 20 F3 7D JSR RCV_I2C_BYTE ; 47/ 7C20 : AD 4C 7E LDA I2C_TEMP ;get the seconds value 48/ 7C23 : CD 4D 7E CMP RTC_SECS ;is the new value different to the current value? 49/ 7C26 : F0 28 BEQ QUIT ;if not then stop processing 50/ 7C28 : 20 70 7D JSR I2C_ACK ;else ACK it 51/ 7C2B : AD 4C 7E LDA I2C_TEMP ;get the seconds value again 52/ 7C2E : 99 4D 7E STA RTC_VARS,Y ;and store the new value 53/ 7C31 : C8 INY 54/ 7C32 : 20 F3 7D NEXT: JSR RCV_I2C_BYTE ;get the next register's value 55/ 7C35 : AD 4C 7E LDA I2C_TEMP ; 56/ 7C38 : 99 4D 7E STA RTC_VARS,Y ;save it 57/ 7C3B : C8 INY 58/ 7C3C : C0 13 CPY #NUM_REGS ;have we done all registers? 59/ 7C3E : D0 0A BNE DO_ACK ;No then do an Acknowlege 60/ 7C40 : 61/ 7C40 : 20 7D 7D FINISH: JSR I2C_NAK ;Do a Not Acknowledge 62/ 7C43 : 20 66 7D JSR I2C_STOP ;and a final Stop. 63/ 7C46 : 20 57 7C JSR PRINTTIME ;display the time and date. 64/ 7C49 : 60 RTS 65/ 7C4A : 66/ 7C4A : 20 70 7D DO_ACK: JSR I2C_ACK 67/ 7C4D : 4C 32 7C JMP NEXT 68/ 7C50 : 69/ 7C50 : 20 7D 7D QUIT: JSR I2C_NAK ;Do a Not Acknowledge 70/ 7C53 : 20 66 7D JSR I2C_STOP ;and a final Stop. 71/ 7C56 : 60 RTS 72/ 7C57 : 73/ 7C57 : 74/ 7C57 : A2 00 PRINTTIME: LDX #$00 ; 75/ 7C59 : A9 20 LDA #$20 ;Century = 20 76/ 7C5B : 20 AC 7C JSR PRINT2BCD ;print it 77/ 7C5E : E8 INX ;next location 78/ 7C5F : AD 53 7E LDA RTC_YEAR ;get year 79/ 7C62 : 20 AC 7C JSR PRINT2BCD ;print it 80/ 7C65 : E8 INX ;next location 81/ 7C66 : 20 59 7D JSR PRINTSEP ;print a separator 82/ 7C69 : E8 INX ;next location 83/ 7C6A : 20 C0 7C JSR PRINTDOW ;print Day Of Week 84/ 7C6D : E8 INX ;next location 85/ 7C6E : 20 59 7D JSR PRINTSEP ;print a separator 86/ 7C71 : E8 INX ;next location 87/ 7C72 : AD 51 7E LDA RTC_DATE ;get the day of the month. 88/ 7C75 : 20 AC 7C JSR PRINT2BCD ;print it 89/ 7C78 : E8 INX ;next location 90/ 7C79 : 20 59 7D JSR PRINTSEP ;print a separator 91/ 7C7C : E8 INX ;next location 92/ 7C7D : 20 FB 7C JSR PRINTMTH ;print month 93/ 7C80 : E8 INX ;next location 94/ 7C81 : 20 59 7D JSR PRINTSEP ;print a separator 95/ 7C84 : 96/ 7C84 : E8 INX ;next location 97/ 7C85 : AD 4F 7E LDA RTC_HRS ;get the hours 98/ 7C88 : 29 3F AND #$3F ;only the hours BCD bits req. 99/ 7C8A : 20 AC 7C JSR PRINT2BCD ;print hours 100/ 7C8D : 101/ 7C8D : E8 INX ; 102/ 7C8E : A9 3A LDA #':' ;time separator = : 103/ 7C90 : 9D 02 02 STA TIMESCNADD,X ;display it 104/ 7C93 : 105/ 7C93 : E8 INX ;next location 106/ 7C94 : AD 4E 7E LDA RTC_MINS ;get the mins 107/ 7C97 : 29 7F AND #$7F ;only the mins BCD bits req. 108/ 7C99 : 20 AC 7C JSR PRINT2BCD ;print mins 109/ 7C9C : 110/ 7C9C : E8 INX ; 111/ 7C9D : A9 3A LDA #':' ;time separator = : 112/ 7C9F : 9D 02 02 STA TIMESCNADD,X ;display it 113/ 7CA2 : 114/ 7CA2 : E8 INX ;next location 115/ 7CA3 : AD 4D 7E LDA RTC_SECS ;get the seconds 116/ 7CA6 : 29 7F AND #$7F ;only the seconds BCD bits req. 117/ 7CA8 : 20 AC 7C JSR PRINT2BCD ;print seconds 118/ 7CAB : 60 RTS 119/ 7CAC : 120/ 7CAC : 121/ 7CAC : 122/ 7CAC : 123/ 7CAC : 124/ 7CAC : PRINT2BCD: ;print 2 ASCII characters from the value in A 125/ 7CAC : 48 PHA ;save BCD value 126/ 7CAD : 4A LSR A ;convert MSD to ASCII 127/ 7CAE : 4A LSR A ; 128/ 7CAF : 4A LSR A ; 129/ 7CB0 : 4A LSR A ; 130/ 7CB1 : 09 30 ORA #'0' ; 131/ 7CB3 : 9D 02 02 STA TIMESCNADD,X ;display it 132/ 7CB6 : E8 INX ;next display location 133/ 7CB7 : 68 PLA ;retrieve BCD value 134/ 7CB8 : 29 0F AND #$0F ;convert LSD to ASCII 135/ 7CBA : 09 30 ORA #'0' 136/ 7CBC : 9D 02 02 STA TIMESCNADD,X ;display it 137/ 7CBF : 60 RTS 138/ 7CC0 : 139/ 7CC0 : 140/ 7CC0 : PRINTDOW: ;print the Day Of Week from value in A 1-7 (3 chars) 141/ 7CC0 : ; 1 = Sun, 2 = Mon etc. 142/ 7CC0 : AD 50 7E LDA RTC_DOW ;get DOW 143/ 7CC3 : 38 SEC ;multiply by 3 (each DOW string is 3 chars) 144/ 7CC4 : E9 01 SBC #1 ;subtract 1 as the strings are '0' indexed 145/ 7CC6 : 8D 4C 7E STA I2C_TEMP ;store it for a moment 146/ 7CC9 : 0A ASL A ;x2 147/ 7CCA : 18 CLC ; 148/ 7CCB : 6D 4C 7E ADC I2C_TEMP ;+ itself again = x3 in total 149/ 7CCE : A8 TAY ;Y = offset of DOW string 150/ 7CCF : B9 E6 7C LDA DOWSTRGS,Y ;Get character 151/ 7CD2 : 9D 02 02 STA TIMESCNADD,X ;display it 152/ 7CD5 : E8 INX ;next location 153/ 7CD6 : C8 INY ;next char 154/ 7CD7 : B9 E6 7C LDA DOWSTRGS,Y ;Get character 155/ 7CDA : 9D 02 02 STA TIMESCNADD,X ;display it 156/ 7CDD : E8 INX ;next location 157/ 7CDE : C8 INY ;next char 158/ 7CDF : B9 E6 7C LDA DOWSTRGS,Y ;Get character 159/ 7CE2 : 9D 02 02 STA TIMESCNADD,X ;display it 160/ 7CE5 : 60 RTS 161/ 7CE6 : 162/ 7CE6 : 53 75 6E 4D 6F 6E DOWSTRGS: BYT 'SunMonTueWedThrFriSat' 7CEC : 54 75 65 57 65 64 7CF2 : 54 68 72 46 72 69 7CF8 : 53 61 74 163/ 7CFB : 164/ 7CFB : 165/ 7CFB : PRINTMTH: ;print the Day Of Week from value in A 1-7 (3 chars) 166/ 7CFB : ; 1 = Sun, 2 = Mon etc. 167/ 7CFB : AD 52 7E LDA RTC_MTH ;get MTH 168/ 7CFE : 29 10 AND #$10 ;is 10's of months set? 169/ 7D00 : F0 0B BEQ NOTENS ;if not branch 170/ 7D02 : 171/ 7D02 : AD 52 7E LDA RTC_MTH ; 172/ 7D05 : 29 0F AND #$0F ;get just the month units value 173/ 7D07 : 18 CLC 174/ 7D08 : 69 0A ADC #10 ;Add ten to the month units value 175/ 7D0A : 4C 12 7D JMP PRNTMTH2 ;carry on 176/ 7D0D : 177/ 7D0D : AD 52 7E NOTENS: LDA RTC_MTH ; 178/ 7D10 : 29 0F AND #$0F ;just the month units value 179/ 7D12 : 180/ 7D12 : 38 PRNTMTH2: SEC ; 181/ 7D13 : E9 01 SBC #1 ;subtract 1 as the strings are '0' indexed 182/ 7D15 : 8D 4C 7E STA I2C_TEMP ;store it for a moment 183/ 7D18 : ;multiply by 3 (each month string is 3 chars) 184/ 7D18 : 0A ASL A ;x2 185/ 7D19 : 18 CLC ; 186/ 7D1A : 6D 4C 7E ADC I2C_TEMP ;+ itself again = x3 in total 187/ 7D1D : A8 TAY ;Y = offset of Month string 188/ 7D1E : B9 35 7D LDA MTHSTRGS,Y ;Get character 189/ 7D21 : 9D 02 02 STA TIMESCNADD,X ;display it 190/ 7D24 : E8 INX ;next location 191/ 7D25 : C8 INY ;next char 192/ 7D26 : B9 35 7D LDA MTHSTRGS,Y ;Get character 193/ 7D29 : 9D 02 02 STA TIMESCNADD,X ;display it 194/ 7D2C : E8 INX ;next location 195/ 7D2D : C8 INY ;next char 196/ 7D2E : B9 35 7D LDA MTHSTRGS,Y ;Get character 197/ 7D31 : 9D 02 02 STA TIMESCNADD,X ;display it 198/ 7D34 : 60 RTS 199/ 7D35 : 200/ 7D35 : 4A 61 6E 46 65 62 MTHSTRGS: BYT 'JanFebMarAprMayJunJulAugSepOctNovDec' 7D3B : 4D 61 72 41 70 72 7D41 : 4D 61 79 4A 75 6E 7D47 : 4A 75 6C 41 75 67 7D4D : 53 65 70 4F 63 74 7D53 : 4E 6F 76 44 65 63 201/ 7D59 : 202/ 7D59 : PRINTSEP: ;print a seperator 203/ 7D59 : A9 20 LDA #' ' ;separator = space 204/ 7D5B : 9D 02 02 STA TIMESCNADD,X ;display it 205/ 7D5E : 60 RTS 206/ 7D5F : 207/ 7D5F : 208/ 7D5F : ;I2C routines : -based in part on work published by WilsonMinesco 209/ 7D5F : ; See - http://wilsonminesco.com/6502primer/GENRLI2C.ASM 210/ 7D5F : 211/ 7D5F : 20 22 7E I2C_START: JSR I2C_DATA_DN ; Data down. 212/ 7D62 : 20 3E 7E JSR I2C_CLK_DN ; Clk down. 213/ 7D65 : 60 RTS 214/ 7D66 : ;----------------------- 215/ 7D66 : 216/ 7D66 : 20 22 7E I2C_STOP: JSR I2C_DATA_DN 217/ 7D69 : 20 30 7E JSR I2C_CLK_UP 218/ 7D6C : 20 14 7E JSR I2C_DATA_UP 219/ 7D6F : 60 RTS 220/ 7D70 : ;----------------------- 221/ 7D70 : 222/ 7D70 : 20 22 7E I2C_ACK: JSR I2C_DATA_DN ;The ACK bit in I2C is the 9th bit of a "byte". 223/ 7D73 : 20 30 7E ia1: JSR I2C_CLK_UP ; 224/ 7D76 : 20 3E 7E JSR I2C_CLK_DN ; 225/ 7D79 : 20 14 7E JSR I2C_DATA_UP 226/ 7D7C : 60 RTS 227/ 7D7D : ;----------------------- 228/ 7D7D : 229/ 7D7D : 20 14 7E I2C_NAK: JSR I2C_DATA_UP ; 230/ 7D80 : 20 30 7E JSR I2C_CLK_UP ; 231/ 7D83 : 20 3E 7E JSR I2C_CLK_DN ; 232/ 7D86 : 60 RTS 233/ 7D87 : ;----------------------- 234/ 7D87 : 235/ 7D87 : 20 14 7E I2C_ACKR: JSR I2C_DATA_UP ; At end of write, N=0 means ACK. N=1 means NAK. 236/ 7D8A : 20 30 7E JSR I2C_CLK_UP 237/ 7D8D : A9 0F LDA #15 238/ 7D8F : 8D 00 BC STA AY_BASE_ADR 239/ 7D92 : AD 00 BC LDA AY_BASE_ADR ; Read the data. 240/ 7D95 : 20 3E 7E JSR I2C_CLK_DN ; Clk down. 241/ 7D98 : 60 RTS 242/ 7D99 : ;----------------------- 243/ 7D99 : 244/ 7D99 : INIT_I2C: ;Set up the port bit directions and values, clk & data low. 245/ 7D99 : A9 0E LDA #PA ;Clk line is on port A bit 0 246/ 7D9B : 8D 00 BC STA AY_BASE_ADR 247/ 7D9E : A9 01 LDA #1 ;Clk high 248/ 7DA0 : 8D 01 BC STA AY_WRITE_ADR 249/ 7DA3 : 250/ 7DA3 : A9 0F LDA #PB ;Data line is on port B bit 0 251/ 7DA5 : 8D 00 BC STA AY_BASE_ADR 252/ 7DA8 : A9 00 LDA #0 ;Set data line bit low 253/ 7DAA : 8D 01 BC STA AY_WRITE_ADR 254/ 7DAD : 255/ 7DAD : A9 07 LDA #EN ;Set the port directions 256/ 7DAF : 8D 00 BC STA AY_BASE_ADR 257/ 7DB2 : AD 00 BC LDA AY_BASE_ADR 258/ 7DB5 : 09 40 ORA #%01000000 ;port A o/p, don't affect other bits 259/ 7DB7 : 29 7F AND #%01111111 ;port B i/p, don't affect other bits 260/ 7DB9 : 8D 01 BC STA AY_WRITE_ADR ;Implement setting 261/ 7DBC : 262/ 7DBC : 60 RTS 263/ 7DBD : ;--------------------- 264/ 7DBD : 265/ 7DBD : CLR_I2C: ;This clears any unwanted transaction that might be in progress, 266/ 7DBD : 20 66 7D JSR I2C_STOP ;by giving enough clock pulses to finish a byte and, 267/ 7DC0 : 20 5F 7D JSR I2C_START ;not acknowledging it. 268/ 7DC3 : 20 14 7E JSR I2C_DATA_UP ;Keep data line released so we don't ACK any byte sent by a device. 269/ 7DC6 : A2 09 LDX #9 ;Loop 9x to send 9 pulses to finish any byte a device might send. 270/ 7DC8 : 20 30 7E ci2c: JSR I2C_CLK_UP 271/ 7DCB : 20 3E 7E JSR I2C_CLK_DN 272/ 7DCE : CA DEX 273/ 7DCF : D0 F7 BNE ci2c 274/ 7DD1 : 20 5F 7D JSR I2C_START 275/ 7DD4 : 4C 66 7D JMP I2C_STOP 276/ 7DD7 : ;------------------ 277/ 7DD7 : 278/ 7DD7 : SEND_I2C_BYTE: ;Start with byte in A, and clock low. Ends with I2C_ACKR. 279/ 7DD7 : 8D 4C 7E STA I2C_TEMP ;Store the byte in a variable so we can use A. 280/ 7DDA : A2 08 LDX #8 ;We will do 8 bits. 281/ 7DDC : 20 14 7E sIb2: JSR I2C_DATA_UP ;Release data line. 282/ 7DDF : 0E 4C 7E ASL I2C_TEMP ;Get next bit to send and put it in the C flag. 283/ 7DE2 : B0 03 BCS sIb1 284/ 7DE4 : 20 22 7E JSR I2C_DATA_DN ;If the bit was 0, pull data line down by making it an output. 285/ 7DE7 : 20 30 7E sIb1: JSR I2C_CLK_UP ;Do a high pulse on the clock line. 286/ 7DEA : 20 3E 7E JSR I2C_CLK_DN ;register bit 287/ 7DED : CA DEX 288/ 7DEE : D0 EC BNE sIb2 289/ 7DF0 : 4C 87 7D JMP I2C_ACKR ;get the receiver's ACK (or NAK) bit. 290/ 7DF3 : ;------------------ 291/ 7DF3 : 292/ 7DF3 : RCV_I2C_BYTE: ;Starts with clock low. Ends with byte in I2C_TEMP. 293/ 7DF3 : 20 14 7E JSR I2C_DATA_UP ;Make sure we're not holding the data line down. 294/ 7DF6 : A2 08 LDX #8 ;We will do 8 bits. There's no need to init I2C_TEMP. 295/ 7DF8 : 20 30 7E rIb1: JSR I2C_CLK_UP ;Set clock line high. 296/ 7DFB : 0E 4C 7E ASL I2C_TEMP ;Get ready to accept the bit. 297/ 7DFE : A9 0F LDA #PB 298/ 7E00 : 8D 00 BC STA AY_BASE_ADR 299/ 7E03 : AD 00 BC LDA AY_BASE_ADR ;Read the data. 300/ 7E06 : 29 01 AND #$1 ;LSB is the data 301/ 7E08 : F0 03 BEQ rIb2 ;If the data line was high, 302/ 7E0A : EE 4C 7E INC I2C_TEMP ;increment the 1's place to a 1 in the forming byte. 303/ 7E0D : 20 3E 7E rIb2: JSR I2C_CLK_DN ;Put clock line back low. 304/ 7E10 : CA DEX 305/ 7E11 : D0 E5 BNE rIb1 ;Go back for next bit if there is one. 306/ 7E13 : 60 RTS 307/ 7E14 : ;------------------ 308/ 7E14 : 309/ 7E14 : 310/ 7E14 : I2C_DATA_UP: 311/ 7E14 : A9 07 LDA #EN ;Set PB as input. 312/ 7E16 : 8D 00 BC STA AY_BASE_ADR 313/ 7E19 : AD 00 BC LDA AY_BASE_ADR 314/ 7E1C : 29 7F AND #$7F ;MSB=0 315/ 7E1E : 8D 01 BC STA AY_WRITE_ADR 316/ 7E21 : 60 RTS 317/ 7E22 : ;----------------------- 318/ 7E22 : 319/ 7E22 : I2C_DATA_DN: 320/ 7E22 : A9 07 LDA #EN ;Set PB as output. 321/ 7E24 : 8D 00 BC STA AY_BASE_ADR 322/ 7E27 : AD 00 BC LDA AY_BASE_ADR 323/ 7E2A : 09 80 ORA #$80 ;MSB=1 324/ 7E2C : 8D 01 BC STA AY_WRITE_ADR 325/ 7E2F : 60 RTS 326/ 7E30 : ;----------------------- 327/ 7E30 : 328/ 7E30 : I2C_CLK_UP: 329/ 7E30 : A9 0E LDA #PA ;Set PA0 high 330/ 7E32 : 8D 00 BC STA AY_BASE_ADR 331/ 7E35 : AD 00 BC LDA AY_BASE_ADR 332/ 7E38 : 09 01 ORA #$1 ;LSB=1 333/ 7E3A : 8D 01 BC STA AY_WRITE_ADR 334/ 7E3D : 60 RTS 335/ 7E3E : ;----------------------- 336/ 7E3E : 337/ 7E3E : I2C_CLK_DN: 338/ 7E3E : A9 0E LDA #PA ;Set PA0 low. 339/ 7E40 : 8D 00 BC STA AY_BASE_ADR 340/ 7E43 : AD 00 BC LDA AY_BASE_ADR 341/ 7E46 : 29 FE AND #$FE ;LSB=0. 342/ 7E48 : 8D 01 BC STA AY_WRITE_ADR 343/ 7E4B : 60 RTS 344/ 7E4C : ;----------------------- 345/ 7E4C : 346/ 7E4C : I2C_TEMP: dfs 1 ;Define Storage for variables, 347/ 7E4D : RTC_VARS: dfs 18 ;storage area for the read RTC registers. 348/ 7E5F : ;END 349/ 7E5F : 350/ 7E5F : AS V1.42 Beta [Bld 172] - Source File i2c_asm_mt.asm - Page 2 - 10/24/2020 14:4 4:21 Symbol Table (* = unused): -------------------------- *ARCHITECTURE : "i386-unknown-win32" - | AY_BASE_ADR : BC00 - | AY_WRITE_ADR : BC01 - | *BIGENDIAN : 0 - | *BRANCHEXT : 0 - | *CASESENSITIVE : 0 - | CI2C : 7DC8 C | *CLOCK : 7C00 C | CLR_I2C : 7DBD C | *CONSTPI : 3.141592653589793 - | *DATE : "10/24/2020" - | DOWSTRGS : 7CE6 C | DO_ACK : 7C4A C | EN : 7 - | *FALSE : 0 - | *FINISH : 7C40 C | *FULLPMMU : 1 - | *HAS64 : 0 - | *HASDSP : 0 - | *HASFPU : 0 - | *HASPMMU : 0 - | I2C_ACK : 7D70 C | I2C_ACKR : 7D87 C | I2C_CLK_DN : 7E3E C | I2C_CLK_UP : 7E30 C | I2C_DATA_DN : 7E22 C | I2C_DATA_UP : 7E14 C | I2C_NAK : 7D7D C | I2C_START : 7D5F C | I2C_STOP : 7D66 C | I2C_TEMP : 7E4C C | *IA1 : 7D73 C | *INEXTMODE : 0 - | *INIT_I2C : 7D99 C | *INLWORDMODE : 0 - | *INMAXMODE : 0 - | *INSRCMODE : 0 - | *INSUPMODE : 0 - | *LISTON : 1 - | *MACEXP : 7 - | *MOMCPU : 65C02 - | *MOMCPUNAME : "65C02" - | MTHSTRGS : 7D35 C | *NESTMAX : 100 - | NEXT : 7C32 C | NOTENS : 7D0D C | NUM_REGS : 13 - | PA : E - | *PACKING : 0 - | *PADDING : 1 - | PB : F - | PRINT2BCD : 7CAC C | PRINTDOW : 7CC0 C | PRINTMTH : 7CFB C | PRINTSEP : 7D59 C | PRINTTIME : 7C57 C | PRNTMTH2 : 7D12 C | QUIT : 7C50 C | RCV_I2C_BYTE : 7DF3 C | *RELAXED : 0 - | RIB1 : 7DF8 C | RIB2 : 7E0D C | RTC_DATE : 7E51 - | RTC_DOW : 7E50 - | RTC_HRS : 7E4F - | RTC_MINS : 7E4E - | RTC_MTH : 7E52 - | RTC_SECS : 7E4D - | *RTC_TEMPLSB : 7E5F - | *RTC_TEMPMSB : 7E5E - | RTC_VARS : 7E4D C | RTC_YEAR : 7E53 - | SEND_I2C_BYTE : 7DD7 C | SIB1 : 7DE7 C | SIB2 : 7DDC C | *TEMPSCNADD : 224 - | *TIME : "14:44:21" - | TIMESCNADD : 202 - | *TRUE : 1 - | *VERSION : 142F - | *Z80SYNTAX : 0 - | 81 symbols 36 unused symbols AS V1.42 Beta [Bld 172] - Source File i2c_asm_mt.asm - Page 3 - 10/24/2020 14:4 4:21 Code Pages: ---------- STANDARD (0 changed characters) 1 code page AS V1.42 Beta [Bld 172] - Source File i2c_asm_mt.asm - Page 4 - 10/24/2020 14:4 4:21 Space Used in CODE : -------------------- 7C00-7E5E 0.04 seconds assembly time 350 lines source file 2 passes 0 errors 0 warnings