NEW PREFIX AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 .TF BIN/NSCUTIL *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I .INB INC/MLI.E.I *-------------------------------------- ZPPtr1 .EQ ZPBIN *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- CS.START cld jmp (.1,x) .DA #$61 6502,Level 1 (65c02) .DA #1 BIN Layout Version 1 .DA #0 .DA #0 .DA CS.END-CS.START CS .DA DS.END-DS.START DS .DA #16 SS .DA #2 ZP .DA 0 *-------------------------------------- * Relocation Table *-------------------------------------- .1 .DA CS.INIT .DA CS.RUN .DA CS.DOEVENT .DA CS.QUIT L.MSG.READ.KO .DA MSG.READ.KO L.MSG.READ.OK1 .DA MSG.READ.OK1 L.MSG.READ.OK2.12 .DA MSG.READ.OK2.12 L.MSG.READ.OK2.24 .DA MSG.READ.OK2.24 L.MSG.READ.OK3 .DA MSG.READ.OK3 L.MSG.USAGE .DA MSG.USAGE L.MSG.CRLF .DA MSG.CRLF .DA 0 *-------------------------------------- CS.INIT clc rts *-------------------------------------- CS.RUN ldy #S.PS.ARGC lda (pPS),y cmp #1 bcs CS.RUN.SET CS.RUN.READ jsr NSC.Init jsr NSC.Read ldx #7 .1 lda DS1216E.DETECT,x eor DS1216E.DATA,x bne .8 dex bpl .1 >PUSHBI 0 >LDYA L.MSG.READ.KO >SYSCALL PrintF lda #MLI.E.NODEV sec rts .8 jsr NSC.Dump >PUSHBI 0 >LDYA L.MSG.USAGE >SYSCALL PrintF lda #0 tell TSKMGR that all done ok, but sec we do not want to stay in memory rts CS.RUN.SET lda #1 >SYSCALL ArgV >STYA ZPPtr1 >SYSCALL strlen cpy #17 bne .9 ldy #0 stz DS1216E.DATA+7 jsr GetBCD bcs .9 sta DS1216E.DATA lda (ZPPtr1),y cmp #'/' bne .9 iny jsr GetBCD bcs .9 sta DS1216E.DATA+1 lda (ZPPtr1),y cmp #'/' bne .9 iny jsr GetBCD bcs .9 sta DS1216E.DATA+2 lda (ZPPtr1),y cmp #',' bne .9 iny jsr GetBCD bcs .9 sta DS1216E.DATA+4 lda (ZPPtr1),y cmp #':' bne .9 iny jsr GetBCD bcs .9 sta DS1216E.DATA+5 lda (ZPPtr1),y cmp #':' bne .9 iny jsr GetBCD bcs .9 sta DS1216E.DATA+6 stz DS1216E.DATA+7 jsr NSC.Write lda #0 tell TSKMGR that all done ok, but sec we do not want to stay in memory rts .9 lda #E.SYN sec rts *-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- CS.QUIT clc rts *-------------------------------------- NSC.Init php sei lda $CFFF pha ldx #7 .1 ldy #8 .2 lda $C304 lsr ror DS1216E.DETECT,x dey bne .2 dex bpl .1 pla bmi .99 sta $CFFF .99 plp rts *-------------------------------------- NSC.Select sta $C300 lda $C304 Reset DS1216E comparison register with READ A2=1 ldx #7 Read 8 bytes... .3 lda DS1216E.PATTERN,x phx ldx #8 ....of 8 bits .4 ldy #0 lsr bcc .5 iny .5 pha lda $C300,y Write Pattern bit in A0, with A2=0 pla dex bne .4 plx dex bpl .3 rts *-------------------------------------- NSC.Read php sei lda $CFFF pha jsr NSC.Select ldx #7 .1 ldy #8 .2 lda $C304 lsr ror DS1216E.DATA,x dey bne .2 dex bpl .1 pla bmi .99 sta $CFFF .99 plp rts *-------------------------------------- NSC.Write php sei lda $CFFF pha jsr NSC.Select ldx #7 .3 lda DS1216E.DATA,x phx ldx #8 ....of 8 bits .4 ldy #0 lsr bcc .5 iny .5 pha lda $C300,y Write Pattern bit in A0, with A2=0 pla dex bne .4 plx dex bpl .3 pla bmi .99 sta $CFFF .99 plp rts *-------------------------------------- NSC.Dump ldx #1 ldy #1 lda DS1216E.DATA+3 bit #%00010000 beq .1 dex .1 bit #%00100000 beq .2 dey .2 txa >PUSHA tya >PUSHA >PUSHBI 2 >LDYA L.MSG.READ.OK1 >SYSCALL PrintF >PUSHBI 2 >LDYA L.MSG.READ.OK2.24 bit DS1216E.DATA+4 bpl .3 >LDYA L.MSG.READ.OK2.12 .3 >SYSCALL PrintF >PUSHBI 0 >LDYA L.MSG.READ.OK3 >SYSCALL PrintF lda DS1216E.DATA jsr PrintBCD lda #'/' >SYSCALL PutChar lda DS1216E.DATA+1 jsr PrintBCD lda #'/' >SYSCALL PutChar lda DS1216E.DATA+2 jsr PrintBCD lda #',' >SYSCALL PutChar lda DS1216E.DATA+4 bpl .4 and #$1F .4 and #$3F jsr PrintBCD lda #':' >SYSCALL PutChar lda DS1216E.DATA+5 jsr PrintBCD lda #':' >SYSCALL PutChar lda DS1216E.DATA+6 jsr PrintBCD * lda #'.' * >SYSCALL PutChar * lda DS1216E.DATA+7 * jsr PrintBCD >PUSHBI 0 >LDYA L.MSG.CRLF >SYSCALL PrintF rts *-------------------------------------- PrintBCD pha lsr lsr lsr lsr ora #$30 >SYSCALL PutChar bcs .9 pla and #$0f ora #$30 >SYSCALL PutChar .9 rts *-------------------------------------- GetBCD lda (ZPPtr1),y iny jsr IsDigit bcs .9 asl asl asl asl sta TmpByte lda (ZPPtr1),y iny jsr IsDigit bcs .9 and #$0f ora TmpByte .9 rts *-------------------------------------- IsDigit cmp #'0' bcc .9 cmp #'9'+1 and #$0f rts cc if ok, cs if not .9 sec rts *-------------------------------------- CS.END MSG.READ.KO .AZ "DS1216E Not Detected.\r\n" MSG.READ.OK1 .AZ "DS1216E Detected : /OSC=%d, /RST=%d, mode=" MSG.READ.OK2.12 .AZ "am/pm" MSG.READ.OK2.24 .AZ "24h" MSG.READ.OK3 .AZ "\r\n\r\nCurrent Date/Time : " MSG.USAGE .AS "\r\nTo Reset the chip and set clock, type:\r\nNSCUTIL YY/MM/DD,hh:mm:ss" MSG.CRLF .AZ "\r\n" DS1216E.PATTERN .HS 5CA33AC55CA33AC5 Reverted 7->0 DS1216E.DETECT .BS 8 DS1216E.DATA .BS 8 Reverted YY MM DD Day HH mm SS CS TmpByte .BS 1 *-------------------------------------- DS.START DS.END *-------------------------------------- MAN SAVE USR/SRC/BIN/NSCUTIL.S ASM