dernière mise à jour le 20.06.2011

Vous trouverez ici tous les documents actuellement disponibles sur le net ainsi que des programmes perso développés pour la NO-SLOT Clock ou plutôt son composant de base encore disponible et facilement trouvable à savoir la puce DS1216 "SmartWatch".

Version utilisable sur Apple II : uniquement la DS1216E (28 pins/version ROM). Se place sous la ROM CD ou CF suivant les versions de l'Apple II.
Attention : si vous voulez vous procurer une Smartwatch, la version n'est pas toujours spécifiée notamment sur eBay. Dans ce cas, se référer au descriptif et prendre la version ROM en 28 Pins.

Documents :

On apprend dans le Manuel utilisateur que la puce était fournis avec une disquette utilitaire contenant des outils ProDOS (que l'on peut facilement retrouver et disponible plus bas) mais aussi deux programmes DOS, ClockREAD et ClockWrite qui fournissaient un moyen simple d'interagir avec l'horloge.
Ces deux programmes sont actuellement introuvables, je vous propose donc deux petits bouts de code écrits en assembleur afin de lire (NSC) ou écrire (NSCWRITE) vers la puce. Ils sont très inspirés de portions de code issues de l'utilitaire et du driver ProDOS. Les sources sont bien évidemment fournies, permettant de mieux comprendre le processus particulier d'accès à  la DS1216. Ces deux programmes fonctionnent sous DOS et n'ont pas besoin de driver car ils accèdent directement à la SmartWatch :
NSC(read) ne fait qu'afficher l'heure. NSCWRITE quant à lui remet la pendule à zéro !
Leur utilité en tant que tel est bien évidemment nulle mais les codes sources pourront servir de base à quelque chose de plus élaboré.

Images DSK :


Codes Sources :

NSC (lecture) :

1 ORG $1000
2
3 *==============================================
4 * ROM
5 *==============================================
6
7 CLRROM EQU $CFFF
8 WRTNSC EQU $C300
9 READNSC EQU $C304
10
11 HOME EQU $FC58
12 SETTXT EQU $FB39
13 RKEYB EQU $C000
14 KBDSTRB EQU $C010
15 CLR80COL EQU $C00C
16
17 *==============================================
18
19 POSI EQU $05B7
20
21 *==============================================
22 STA CLR80COL
23 JSR SETTXT
24 JSR HOME
25
26
27 BP LDA RKEYB
28 BPL SUITE
29 BIT KBDSTRB
30 CMP #$A0
31 BEQ FIN
32
33 SUITE JSR LECTURE
34 JSR AFFICHE
35 JMP BP
36
37 FIN RTS
38
39 ***********************************************
40 * *
41 * AFFICHAGE *
42 * *
43 ***********************************************
44
45 AFFICHE LDX #$00
46 LDY #$04
47
48 BL1 LDA MASK,Y
49 STA POSI,X
50 INX
51 LDA BUFBCD,Y  ; REGISTRE NSC
52 PHA  ; SAUVE A
53 LSR  ; PARTIE HAUTE ONLY
54 LSR
55 LSR
56 LSR
57 ORA #$B0  ; RENDRE AFFICHABLE
58 STA POSI,X  ; CHIFFRE 1
59 INX
60 PLA  ; ON RECUPERE A
61 AND #$0F  ; PARTIE BASSE
62 ORA #$B0  ; RENDRE AFFICHABLE
63 STA POSI,X  ; CHIFFRE 2
64 INX
65 INY
66 CPY #$07
67 BCC BL1
68 RTS
69
70 MASK HEX A0A0A0A0A0BABA
71
72 ***********************************************
73 * ROUTINE LECTURE *
74 ***********************************************
75
76 LECTURE PHP  ; SAUVE P
77 SEI  ; INHIBITION INT
78 LDA CLRROM  ;
79 PHA  ; SAUVE A
80 STA WRTNSC  ;
81 LDA READNSC  ;
82
83 *==============================================
84 * PHASE 1 :
85 * ENVOI PATTERN D'ACTIVATION BIT A BIT VERS NSC
86 *==============================================
87
88 LDX #$08  ; INIT BOUCLE 8 OCTETS
89
90 BPAT LDA PATTERN-1,X ; PREMIER OCTET PAT
91 SEC  ; C = 1
92 ROR  ; A : C->BIT7 BIT0->C
93
94 B1 PHA  ; SAUVE A
95 LDA #$00  ; A=0
96 ROL  ; A : C->BIT0
97 TAY  ; Y=A=0000000C
98 LDA WRTNSC,Y  ; ECRITURE NSC
99 PLA  ; RESTAURE A (POUR BIT SUIVANT)
100 LSR  ; A : 0->BIT7 BIT0->C
101 BNE B1  ; IL RESTE DES BITS ?
102
103 DEX
104 BNE BPAT  ; IL RESTE DES OCTETS ?
105
106 *===============================================
107 * PHASE 2 :
108 * LECTURE DES REGISTRES DE LA NSC (8X8BITS)
109 *===============================================
110
111 LDX #$08  ; 8 OCTETS
112
113 BREAD LDY #$08  ; DE 8 BITS
114
115 B2 LDA READNSC  ; LECTURE
116 ROR  ; BIT0->C
117 ROR BUFBCD-1,X ; C->BIT7 BUF
118 DEY
119 BNE B2  ; IL RESTE DES BITS ?
120
121 * TRANSFORMATION BCD->HEXA
122
123 LDA BUFBCD-1,X ; OCTET (BCD)
124 LSR  ;
125 LSR
126 LSR
127 LSR
128 TAY
129 BEQ B3
130 LDA BUFBCD-1,X
131 AND #$0F
132 CLC
133
134 B4 ADC #$0A
135 DEY
136 BNE B4
137
138 B3 STA BUFHEX-1,X ; OCTET (HEXA)
139
140 DEX  ;
141 BNE BREAD  ; IL RESTE DES OCTETS ?
142
143 * FIN DE ROUTINE READ
144
145 PLA  ; RESTAURATION A
146 BMI FINL
147 STA CLRROM
148 FINL PLP
149 RTS
150
151
152 BUFHEX HEX 0000000000000000
153 BUFBCD HEX 0000000000000000
154 PATTERN HEX 5CA33AC55CA33AC5
155
156 ***************************************************
157 * ECRITURE *
158 ***************************************************
159
160 ECRITURE PHP
161 SEI
162 LDA CLRROM
163 PHA
164 STA WRTNSC
165 LDA READNSC
166
167 LDX #$10  ; ON PREND PATTERN+BUFBCD !
168
169 B6 LDA BUFBCD-1,X
170 SEC  ; C=1 (LE BIT7 SERT DE COMPTEUR)
171 ROR  ; C->BIT7 BIT0->C
172 B5 PHA  ; SAUVEGARDE A
173 LDA #$00
174 ROL  ; A : C->BIT0
175 TAY  ; A=Y=0000000C
176 LDA WRTNSC,Y  ; ECRITURE
177 PLA  ; RECUPERE A
178 LSR  ; DECALLAGE D BIT0->C
179 BNE B5  ; IL RESTE DES BIT ?
180 DEX
181 BNE B6  ; IL RESTE DES OCTETS ?
182 PLA
183 BMI FINE
184 STA CLRROM
185 FINE PLP
186 RTS
187
188 *******************************************************

NSCWRITE (écriture) :

1 ORG $1000
2 LST OFF
3 *==============================================
4 * ROM
5 *==============================================
6
7 CLRROM EQU $CFFF
8 WRTNSC EQU $C300
9 READNSC EQU $C304
10
11 HOME EQU $FC58
12 SETTXT EQU $FB39
13 VIDOUT EQU $FBFD  ; COUT PLANTE !
14 RKEYB EQU $C000
15 KBDSTRB EQU $C010
16 CLR80COL EQU $C00C
17
18 *==============================================
19
20 POSI EQU $05B7
21
22 *==============================================$
23 STA CLR80COL
24 JSR SETTXT
25 JSR HOME
26 LDX #$00
27 BA LDA CHA1,X
28 BEQ BP
29 JSR VIDOUT
30 INX
31 BNE BA
32
33 CHA1 ASC "NO-SLOT CLOCK - R TO RESET - ESC TO QUIT"00
34
35 BP LDA RKEYB
36 BPL SUITE
37 BIT KBDSTRB
38 CMP #$9B  ; ESC
39 BEQ FIN
40 CMP #$D2  ; R
41 BNE SUITE
42
43 ** RESET ! REMISE A ZERO DE L'HEURE
44 JSR LECTURE
45 LDX #$04
46 LDA #$00
47 BRESET STA BUFBCD,X
48 INX
49 CPX #$08
50 BNE BRESET
51 JSR ECRITURE  ; ECRITURE NSC
52
53 SUITE JSR LECTURE
54 JSR AFFICHE
55 JMP BP
56
57 FIN RTS
58
59 ***********************************************
60 * *
61 * AFFICHAGE *
62 * *
63 ***********************************************
64
65 AFFICHE LDX #$00
66 LDY #$04
67
68 BL1 LDA MASK,Y
69 STA POSI,X
70 INX
71 LDA BUFBCD,Y  ; REGISTRE NSC
72 PHA  ; SAUVE A
73 LSR  ; PARTIE HAUTE ONLY
74 LSR
75 LSR
76 LSR
77 ORA #$B0  ; RENDRE AFFICHABLE
78 STA POSI,X  ; CHIFFRE 1
79 INX
80 PLA  ; ON RECUPERE A
81 AND #$0F  ; PARTIE BASSE
82 ORA #$B0  ; RENDRE AFFICHABLE
83 STA POSI,X  ; CHIFFRE 2
84 INX
85 INY
86 CPY #$07
87 BCC BL1
88 RTS
89
90 MASK HEX A0A0A0A0A0BABA
91
92 ***********************************************
93 * ROUTINE LECTURE *
94 ***********************************************
95
96 LECTURE PHP  ; SAUVE P
97 SEI  ; INHIBITION INT
98 LDA CLRROM  ;
99 PHA  ; SAUVE A
100 STA WRTNSC  ;
101 LDA READNSC  ;
102
103 *==============================================
104 * PHASE 1 :
105 * ENVOI PATTERN D'ACTIVATION BIT A BIT VERS NSC
106 *==============================================
107
108 LDX #$08  ; INIT BOUCLE 8 OCTETS
109
110 BPAT LDA PATTERN-1,X ; PREMIER OCTET PAT
111 SEC  ; C = 1
112 ROR  ; A : C->BIT7 BIT0->C
113
114 B1 PHA  ; SAUVE A
115 LDA #$00  ; A=0
116 ROL  ; A : C->BIT0
117 TAY  ; Y=A=0000000C
118 LDA WRTNSC,Y  ; ECRITURE NSC
119 PLA  ; RESTAURE A (POUR BIT SUIVANT)
120 LSR  ; A : 0->BIT7 BIT0->C
121 BNE B1  ; IL RESTE DES BITS ?
122
123 DEX
124 BNE BPAT  ; IL RESTE DES OCTETS ?
125
126 *===============================================
127 * PHASE 2 :
128 * LECTURE DES REGISTRES DE LA NSC (8X8BITS)
129 *===============================================
130
131 LDX #$08  ; 8 OCTETS
132
133 BREAD LDY #$08  ; DE 8 BITS
134
135 B2 LDA READNSC  ; LECTURE
136 ROR  ; BIT0->C
137 ROR BUFBCD-1,X ; C->BIT7 BUF
138 DEY
139 BNE B2  ; IL RESTE DES BITS ?
140
141 DEX
142 BNE BREAD  ; IL RESTE DES OCTETS ?
143
144 PLA  ; RESTAURATION A
145 BMI FINL
146 STA CLRROM
147 FINL PLP
148 RTS
149
150
151 BUFBCD HEX 0000000000000000
152 PATTERN HEX 5CA33AC55CA33AC5
153
154 ***************************************************
155 * ECRITURE *
156 ***************************************************
157
158 ECRITURE PHP
159 SEI
160 LDA CLRROM
161 PHA
162 STA WRTNSC
163 LDA READNSC
164
165 LDX #$10  ; ON PREND PATTERN+BUFBCD !
166
167 B6 LDA BUFBCD-1,X
168 SEC  ; C=1 (LE BIT7 SERT DE COMPTEUR)
169 ROR  ; C->BIT7 BIT0->C
170 B5 PHA  ; SAUVEGARDE A
171 LDA #$00
172 ROL  ; A : C->BIT0
173 TAY  ; A=Y=0000000C
174 LDA WRTNSC,Y  ; ECRITURE
175 PLA  ; RECUPERE A
176 LSR  ; DECALLAGE D BIT0->C
177 BNE B5  ; IL RESTE DES BIT ?
178 DEX
179 BNE B6  ; IL RESTE DES OCTETS ?
180 PLA
181 BMI FINE
182 STA CLRROM
183 FINE PLP
184 RTS
185
186 *******************************************************

 :

Remarques / Bugs :

  • Vous remarquerez que le source est quasiment identique pour les deux programmes. En effet, j'ai intégré la routine ECRITURE commentée dans le code de NSC(read). Elle y est inutilisée. Ce code était en fait celui que je voulais diffuser à la base. J'ai ensuite décidé de mettre en pratique la partie écriture d'où le programme NSCWRITE.


Galerie Photos :