Utility to set/reset No-Slot-Clock device.

This commit is contained in:
Rémy GIBERT 2016-01-19 23:09:26 +01:00
parent 7688473fa8
commit 71a36fddb0

View File

@ -13,7 +13,7 @@ AUTO 6
.INB INC/LIBSTR.I
.INB INC/LIBTCPIP.I
*--------------------------------------
ZPPTR1 .EQ ZPBIN
ZPPtr1 .EQ ZPBIN
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
@ -33,19 +33,16 @@ CS.START cld
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBSTR .DA LIBSTR
L.SSCANF.DATE .DA SSCANF.DATE
L.MSG.READ.KO .DA MSG.READ.KO
L.MSG.READ.OK1 .DA MSG.READ.OK1
L.MSG.READ.OK2 .DA MSG.READ.OK2
L.BUFFER .DA BUFFER
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.READ.OK4 .DA MSG.READ.OK4
L.MSG.USAGE .DA MSG.USAGE
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBSTR
>SYSCALL SYS.LoadLibYA
sta hLIBSTR
ldy #S.PS.hARGS
CS.INIT ldy #S.PS.hARGS
lda (pPs),y
bne CS.INIT.SET
@ -59,44 +56,103 @@ CS.INIT.READ jsr NSC.Select
cmp #$FF
bne .2
>PUSHW L.MSG.READ.KO
>SYSCALL SYS.PSTROutA
>LDYA L.MSG.READ.KO
>SYSCALL SYS.PSTROutYA
bra .8
.2 jsr PrintDateTime
.2 jsr NSC.Dump
>LDYA L.MSG.USAGE
>SYSCALL SYS.PSTROutYA
.8 lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory
rts
CS.INIT.SET pha
>PUSHW L.BUFFER
>PUSHW L.SSCANF.DATE
pla
>SYSCALL SYS.GetMemPtrA
>PUSHYA
>LIBCALL hLIBSTR,LIBSTR.SSCANF
CS.INIT.SET >SYSCALL SYS.GetMemPtrA
>STYA ZPPtr1
lda (ZPPtr1)
cmp #17
bne .9
ldy #1
stz DS1216E.DATA+7
jsr GetBCD
bcs .9
sta DS1216E.DATA+2
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
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.Select
jsr NSC.Write
lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory
rts
.9 lda #SYSMGR.ERRSYN
sec
rts
*--------------------------------------
CS.RUN
CS.DOEVENT clc
rts
*--------------------------------------
CS.QUIT lda hLIBSTR
>SYSCALL SYS.UnloadLibA
clc
CS.DOEVENT
CS.QUIT clc
rts
*--------------------------------------
NSC.Select php
sei
sta $CFFF
sta $C00A
lda $C304 Reset DS1216E comparison register with READ A2=1
ldx #7 Read 8 bytes...
@ -121,8 +177,6 @@ NSC.Select php
*--------------------------------------
NSC.Read php
sei
sta $CFFF
sta $C00A
ldx #7
@ -140,8 +194,57 @@ NSC.Read php
plp
rts
*--------------------------------------
PrintDateTime >PUSHW L.MSG.READ.OK1
>SYSCALL SYS.PSTROutA
NSC.Write php
sei
ldx #7
.3 lda DS1216E.DATA,x
phx
ldx #8 ....of 8 bits
.4 ldy #0
lsr
bcc .5
iny
.5 sta $C300,y Write Pattern bit in A0, with A2=0
dex
bne .4
plx
dex
bpl .3
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
>LDYA L.MSG.READ.OK1
>SYSCALL SYS.PSTROutYA
>LDYA L.MSG.READ.OK2.24
bit DS1216E.DATA+4
bpl .3
>LDYA L.MSG.READ.OK2.12
.3 >SYSCALL SYS.PSTROutYA
>LDYA L.MSG.READ.OK3
>SYSCALL SYS.PSTROutYA
lda DS1216E.DATA+2
jsr PrintBCD
lda #'/'
@ -152,15 +255,14 @@ PrintDateTime >PUSHW L.MSG.READ.OK1
>SYSCALL SYS.COutA
lda DS1216E.DATA
jsr PrintBCD
lda #13
>SYSCALL SYS.COutA
>PUSHW L.MSG.READ.OK2
>SYSCALL SYS.PSTROutA
>LDYA L.MSG.READ.OK4
>SYSCALL SYS.PSTROutYA
lda DS1216E.DATA+4
bmi .3
bpl .4
and #$1F
.3 and #$3F
.4 and #$3F
jsr PrintBCD
lda #':'
>SYSCALL SYS.COutA
@ -174,8 +276,6 @@ PrintDateTime >PUSHW L.MSG.READ.OK1
>SYSCALL SYS.COutA
lda DS1216E.DATA+7
jsr PrintBCD
lda #13
>SYSCALL SYS.COutA
rts
*--------------------------------------
PrintBCD pha
@ -192,18 +292,43 @@ PrintBCD pha
>SYSCALL SYS.COutA
.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
LIBSTR >PSTRING "libstr.o"
LIBTCPIP >PSTRING "libtcpip.o"
MSG.READ.KO >PSTRING "DS1216E Not Detected.\n"
MSG.READ.OK1 >PSTRING "DS1216E Detected,\nDate:"
MSG.READ.OK2 >PSTRING "Time:"
SSCANF.DATE >PSTRING "%d/%d/%d %d:%d:%d"
BUFFER .BS 16
MSG.READ.OK1 >PSTRING "DS1216E Detected:/OSC=%d,/RST=%d,mode="
MSG.READ.OK2.12 >PSTRING "am/pm"
MSG.READ.OK2.24 >PSTRING "24h"
MSG.READ.OK3 >PSTRING "\nDate:"
MSG.READ.OK4 >PSTRING "\nTime:"
MSG.USAGE >PSTRING "\n\nTo Reset the chip and set clock, type:\nNSCUTIL DD/MM/YY hh:mm:ss\n"
TmpByte .BS 1
DS1216E.PATTERN .HS 5CA33AC55CA33AC5 Reverted 7->0
DS1216E.DATA .HS FFFFFFFFFFFFFFFF Reverted YY MM DD Day HH mm SS CS
hLIBSTR .BS 1
hLIBTCPIP .BS 1
*--------------------------------------
DS.START
DS.END