******************************** * RTC DS1685 TIME SET PROGRAM * FOR MC3 * DANIEL TUFVESSON 2013 ******************************** ******************************** * MONITOR LABLES ******************************** RETURN EQU $C000 RETURN TO PROMPT INCHAR EQU $C006 INPUT CHAR FROM CONSOLE AND ECHO PDATA EQU $C009 PRINT TEXT STRING @ X ENDED BY $04 INBYTE EQU $C01B INPUT 1 BYTE TO A. CARRY SET = OK BADDR EQU $C01E INPUT ADDRESS TO X. CARRY SET = OK ******************************** * RTC REGS ******************************** RTCBASE EQU $8010 RTCDATA EQU RTCBASE+0 DATA READ/WRITE RTCADDR EQU RTCBASE+1 ADDRESS WRITE ONLY ******************************** * START OF PROGRAM ******************************** ORG $0100 JMP START CRLFTX FCB $0A,$0D,$04 BCOLTX FCB $08,':,$04 BDSHTX FCB $08,'-,$04 BBCKTX FCB $08,$04 TXSEC FCB $0A,$0D FCC 'SECONDS [00-59]' FCB $0A,$0D,$04 TXMIN FCB $0A,$0D FCC 'MINUTES [00-59]' FCB $0A,$0D,$04 TXHOU FCB $0A,$0D FCC 'HOURS [00-23]' FCB $0A,$0D,$04 TXDAY FCB $0A,$0D FCC 'DAY OF WEEK [01-07, SUN=01 SAT=07]' FCB $0A,$0D,$04 TXDAT FCB $0A,$0D FCC 'DATE [01-31]' FCB $0A,$0D,$04 TXMON FCB $0A,$0D FCC 'MONTH [01-12]' FCB $0A,$0D,$04 TXYEA FCB $0A,$0D FCC 'YEAR [0000-9999]' FCB $0A,$0D,$04 TXCOR FCB $0A,$0D FCC 'CORRECT? [CR=YES]' FCB $0A,$0D,$04 TXABO FCB $0A,$0D FCC 'ABORTED' FCB $0A,$0D,$04 TXSET FCB $0A,$0D FCC 'TIME SET' FCB $0A,$0D,$04 SEC RMB 1 SECONDS MIN RMB 1 MINUTES HOU RMB 1 HOURS DAY RMB 1 DAY OF WEEK DAT RMB 1 DATE MON RMB 1 MONTH YEA RMB 4 YEAR ORG * START LDX #CRLFTX JSR PDATA LDAA #$00 STAA $0002 * READ YEAR LDX #TXYEA JSR PDATA JSR BADDR STX YEA * READ MONTH LDX #TXMON JSR PDATA JSR INBYTE STAA MON * READ DATE LDX #TXDAT JSR PDATA JSR INBYTE STAA DAT * READ DAY OF WEEK LDX #TXDAY JSR PDATA JSR INBYTE STAA DAY * READ HOURS LDX #TXHOU JSR PDATA JSR INBYTE STAA HOU * READ MINUTES LDX #TXMIN JSR PDATA JSR INBYTE STAA MIN * READ SECONDS LDX #TXSEC JSR PDATA JSR INBYTE STAA SEC * ENTER CORRECT? LDX #TXCOR JSR PDATA JSR INCHAR CMPA #$0D BEQ TOK LDX #TXABO JSR PDATA JMP RETURN TOK JSR RTCINIT JSR RTCSET LDX #TXSET JSR PDATA JMP RETURN ******************************** * RTC DS1685 READ REGISTER * IN: ADDRESS IN A * OUT: DATA IN A ******************************** RTCRD PSHA RTCRDL LDAA #$0A WAIT FOR RTC READY STAA RTCADDR LDAA RTCDATA ANDA #$80 CMPA #$80 BEQ RTCRDL PULA STAA RTCADDR SET RTC ADDRESS LDAA RTCDATA READ DATA RTS ******************************** * RTC DS1685 WRITE REGISTER * IN: ADDRESS IN A * IN: DATA IN B ******************************** RTCWR PSHA RTCWRL LDAA #$0A WAIT FOR RTC READY STAA RTCADDR LDAA RTCDATA ANDA #$80 CMPA #$80 BEQ RTCWRL PULA STAA RTCADDR SET RTC ADDRESS STAB RTCDATA WRITE DATA RTS ******************************** * RTC DS1685 INIT ******************************** RTCINIT LDAA #$0A REG A LDAB #%00110000 ENABLE OSC, BANK 1 JSR RTCWR LDAA #$4B EXT REG 4B * LDAB #%00000000 6pF CRYSTAL LDAB #%00100000 12.5pF CRYSTAL JSR RTCWR LDAA #$0A LDAB #%00100000 ENABLE OSC, BANK 0 JSR RTCWR LDAA #$0B REG B LDAB #%00000010 BCD, 24H JSR RTCWR RTS ******************************** * RTC DS1685 SET TIME ******************************** RTCSET LDAA #$0B REG B LDAB #%10000010 SET, BCD, 24H JSR RTCWR LDAA #$00 SECONDS LDAB SEC JSR RTCWR LDAA #$02 MINUTES LDAB MIN JSR RTCWR LDAA #$04 HOURS LDAB HOU JSR RTCWR LDAA #$06 DAY LDAB DAY JSR RTCWR LDAA #$07 DATE LDAB DAT JSR RTCWR LDAA #$08 MONTH LDAB MON JSR RTCWR LDAA #$09 YEAR LDAB YEA+1 JSR RTCWR LDAA #$48 CENTURY LDAB YEA+0 JSR RTCWR LDAA #$0B REG B LDAB #%00000010 BCD, 24H JSR RTCWR RTS