No-Slot-Clock (Dallas SmartWatch DS1216) GEOS driver "NoSlot Clock". Partial disassembly and comments by Nick Westgate (and CiderPress). Note: This code requires the clock to be in the internal C8 ROM space. (CD or CF ROM sockets.) 0800- 4C 15 08 JMP $0815 ;read time 0803- 4C B8 08 JMP $08B8 0806- 4C BC 08 JMP $08BC ;write time 0809- 4C E4 08 JMP $08E4 080C- 4C F1 08 JMP $08F1 080F- 4C 12 08 JMP $0812 0812- A2 30 LDX #$30 0814- 60 RTS 0815- A9 00 LDA #$00 0817- 10 37 BPL $0850 0819- A9 3B LDA #$3B 081B- 8D 16 08 STA $0816 081E- 20 6E 08 JSR $086E ;init clock 0821- 20 93 08 JSR $0893 ;get clock data byte (0, discard centiseconds) 0824- A2 03 LDX #$03 ;(4 bytes) 0826- 20 93 08 JSR $0893 ;get clock data byte (1-4 -> F202-F205: day h m s) 0829- 9D 02 F2 STA $F202,X 082C- CA DEX 082D- 10 F7 BPL $0826 082F- A2 02 LDX #$02 ;(3 bytes, this overwrites day at F202) 0831- 20 93 08 JSR $0893 ;get clock data byte (5-7 -> F200-F202: Y M D) 0834- 9D 00 F2 STA $F200,X 0837- CA DEX 0838- 10 F7 BPL $0831 083A- 2C 06 F2 BIT $F206 083D- 10 11 BPL $0850 083F- AD 03 F2 LDA $F203 0842- C9 FF CMP #$FF 0844- D0 0A BNE $0850 0846- AD 04 F2 LDA $F204 0849- C9 FF CMP #$FF 084B- D0 03 BNE $0850 084D- 4E 06 F2 LSR $F206 0850- 4C DB 08 JMP $08DB ;exit safely 0853- A9 00 LDA #$00 ;*** write 0 byte to clock 0855- 84 09 STY $09 ;*** write byte to clock 0857- 38 SEC 0858- A0 FF LDY #$FF 085A- C8 INY 085B- E9 0A SBC #$0A 085D- 10 FB BPL $085A 085F- 69 0A ADC #$0A 0861- 85 07 STA $07 0863- 98 TYA 0864- 0A ASL 0865- 0A ASL 0866- 0A ASL 0867- 0A ASL 0868- 05 07 ORA $07 086A- A0 00 LDY #$00 086C- F0 11 BEQ $087F 086E- 78 SEI ;*** init clock 086F- AD 15 C0 LDA $C015 r:RDCXROM 0872- 85 0F STA $0F 0874- 8D 07 C0 STA $C007 w:SETINTCXROM 0877- AD 04 C8 LDA $C804 087A- A0 07 LDY #$07 087C- B9 F7 08 LDA $08F7,Y 087F- 38 SEC 0880- 6A ROR 0881- A2 00 LDX #$00 0883- 90 02 BCC $0887 0885- A2 01 LDX #$01 0887- DD 00 C8 CMP $C800,X 088A- 4A LSR 088B- D0 F4 BNE $0881 088D- 88 DEY 088E- 10 EC BPL $087C 0890- A4 09 LDY $09 0892- 60 RTS 0893- A0 07 LDY #$07 ;*** get clock data byte (convert BCD to hex) 0895- AD 04 C8 LDA $C804 0898- 6A ROR 0899- 66 07 ROR $07 089B- 88 DEY 089C- 10 F7 BPL $0895 089E- A5 07 LDA $07 08A0- A8 TAY 08A1- 29 0F AND #$0F 08A3- 85 07 STA $07 08A5- 98 TYA 08A6- 4A LSR 08A7- 4A LSR 08A8- 4A LSR 08A9- 4A LSR 08AA- 18 CLC 08AB- A8 TAY 08AC- F0 07 BEQ $08B5 08AE- A9 00 LDA #$00 08B0- 69 0A ADC #$0A 08B2- 88 DEY 08B3- D0 FB BNE $08B0 08B5- 65 07 ADC $07 08B7- 60 RTS 08B8- CE 16 08 DEC $0816 08BB- 60 RTS 08BC- 20 6E 08 JSR $086E ;init clock 08BF- 20 53 08 JSR $0853 ;write 0 byte to clock 08C2- A0 02 LDY #$02 08C4- B9 03 00 LDA $0003,Y 08C7- 20 55 08 JSR $0855 ;write byte to clock 08CA- 88 DEY 08CB- 10 F7 BPL $08C4 08CD- 20 53 08 JSR $0853 ;write 0 byte to clock 08D0- A0 02 LDY #$02 08D2- B9 00 00 LDA $0000,Y 08D5- 20 55 08 JSR $0855 ;write byte to clock 08D8- 88 DEY 08D9- 10 F7 BPL $08D2 08DB- 26 0F ROL $0F ;prepare for exit 08DD- B0 03 BCS $08E2 08DF- 8D 06 C0 STA $C006 w:SETSLOTCXROM 08E2- 58 CLI 08E3- 60 RTS 08E4- A5 00 LDA $00 08E6- 8D 43 08 STA $0843 08E9- A5 01 LDA $01 08EB- 8D 4A 08 STA $084A 08EE- A2 80 LDX #$80 08F0- 2C A2 00 BIT $00A2 08F3- 8E 06 F2 STX $F206 08F6- 60 RTS 08F7- 5C A3 3A C5 5C A3 3A C5 ;*** clock pattern 08FF- 59 0900- FA PLX 0901- 88 DEY 0902- 10 F8 BPL $08FC 0904- 20 B7 5C JSR $5CB7 0907- 68 PLA 0908- C9 0F CMP #$0F 090A- D0 03 BNE $090F 090C- 4C 4C 71 JMP $714C 090F- C9 80 CMP #$80 0911- 90 20 BCC $0933 0913- C9 8E CMP #$8E 0915- B0 1C BCS $0933 0917- 20 D7 65 JSR $65D7 091A- C9 81 CMP #$81 091C- D0 03 BNE $0921 091E- 4C D9 93 JMP $93D9 0921- C9 82 CMP #$82 0923- F0 04 BEQ $0929 0925- C9 8A CMP #$8A 0927- D0 03 BNE $092C 0929- 4C 6E 71 JMP $716E 092C- C9 83 CMP #$83 092E- D0 0A BNE $093A 0930- 4C 7B 71 JMP $717B 0933- C9 FF CMP #$FF 0935- D0 03 BNE $093A 0937- 4C EA AB JMP $ABEA 093A- 20 40 71 JSR $7140 093D- A2 00 LDX #$00 093F- 60 RTS 0940- A9 00 LDA #$00 0942- 8D F8 70 STA $70F8 0945- A2 72 LDX #$72 0947- A9 DB LDA #$DB 0949- 4C 08 4D JMP $4D08 094C- 20 13 74 JSR $7413 094F- A9 00 LDA #$00 0951- 85 AA STA $AA 0953- 20 91 5D JSR $5D91 0956- 20 81 03 JSR $0381 0959- 8A TXA 095A- F0 03 BEQ $095F 095C- 4C 64 5E JMP $5E64 095F- A9 00 LDA #$00 0961- 85 70 STA $70 0963- 68 PLA 0964- 68 PLA 0965- 20 32 5F JSR $5F32 0968- 8A TXA 0969- D0 F1 BNE $095C 096B- 4C 45 5F JMP $5F45 096E- A9 FF LDA #$FF 0970- 48 PHA 0971- A9 58 LDA #$58 0973- 48 PHA 0974- A9 00 LDA #$00 0976- 85 00 STA $00 0978- 4C 8D 03 JMP $038D 097B- A9 80 LDA #$80 097D- 8D B1 61 STA $61B1 0980- 20 D7 4D JSR $4DD7 0983- A5 12 LDA $12 0985- 18 CLC 0986- 69 01 ADC #$01 0988- 85 08 STA $08 098A- A5 13 LDA $13 098C- 69 00 ADC #$00 098E- 85 09 STA $09 0990- A9 12 LDA #$12 0992- 85 07 STA $07 0994- A9 85 LDA #$85 0996- 85 06 STA $06 0998- A2 08 LDX #$08 099A- A0 06 LDY #$06 099C- 20 61 4D JSR $4D61 099F- A9 12 LDA #$12 09A1- 85 05 STA $05 09A3- A9 71 LDA #$71 09A5- 85 04 STA $04 09A7- A2 08 LDX #$08 09A9- 20 98 64 JSR $6498 09AC- A2 08 LDX #$08 09AE- A0 04 LDY #$04 09B0- A9 0F LDA #$0F 09B2- 20 EA FE JSR $FEEA 09B5- A9 00 LDA #$00 09B7- 8D 80 12 STA $1280 09BA- A0 1F LDY #$1F 09BC- B1 12 LDA ($12),Y 09BE- 85 02 STA $02 09C0- C8 INY 09C1- B1 12 LDA ($12),Y 09C3- 85 03 STA $03 09C5- 20 24 66 JSR $6624 09C8- F0 0B BEQ $09D5 09CA- 20 3C 4E JSR $4E3C 09CD- A5 80 LDA $80 09CF- 8D 0D F6 STA $F60D 09D2- 4C C2 5E JMP $5EC2 09D5- AD CE F6 LDA $F6CE 09D8- D0 03 BNE $09DD 09DA- 4C 40 71 JMP $7140 09DD- A9 F6 LDA #$F6 09DF- 85 03 STA $03 09E1- A9 CE LDA #$CE 09E3- 85 02 STA $02 09E5- A9 12 LDA #$12 09E7- 85 15 STA $15 09E9- A9 99 LDA #$99 09EB- 85 14 STA $14 09ED- A2 02 LDX #$02 09EF- A0 14 LDY #$14 09F1- A9 0C LDA #$0C 09F3- 20 63 4D JSR $4D63 09F6- 20 3F 72 JSR $723F 09F9- 8A TXA 09FA- D0 CE BNE $09CA 09FC- AD 21 12 LDA $1221 09FF- D0 00 BNE $0A01 0A01- 00 BRK