NEW PREFIX AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 .TF SYS/KM.NSC *-------------------------------------- .INB INC/MACROS.I .INB INC/IO.I .INB INC/MONITOR.I .INB INC/MLI.I *-------------------------------------- TmpPtr1 .EQ $0 TmpPtr2 .EQ $2 offset .EQ $4 *-------------------------------------- NSC.Init >LDYAI NSC.MSG0 jsr NSC.Print lda MACHID and #MACHID.CLK Clock already installed ? beq .1 >LDYAI NSC.MSG1 jmp NSC.Print .1 jsr NSC.Detect bcc .2 >LDYAI NSC.MSG2 jmp NSC.Print .2 jsr NSC.Install lda MACHID ora #MACHID.CLK sta MACHID >LDYAI NSC.MSG3 jmp NSC.Print *-------------------------------------- DS1216E.DATA1 .EQ $10 DS1216E.DATA2 .EQ $18 *-------------------------------------- NSC.Detect php sei lda $CFFF pha sta $C300 ldx #7 .1 ldy #8 .2 lda $C304 lsr ror DS1216E.DATA1,x dey bne .2 dex bpl .1 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 ldx #7 .6 ldy #8 .7 lda $C304 lsr ror DS1216E.DATA2,x dey bne .7 dex bpl .6 pla bmi .8 sta $CFFF .8 plp ldx #7 .81 lda DS1216E.DATA1,x cmp DS1216E.DATA2,x bne .9 dex bpl .81 sec rts .9 clc rts *-------------------------------------- NSC.Install lda DATETIME+1 sta TmpPtr1 sec sbc #NSCDRV.B.START sta offset lda DATETIME+2 sta TmpPtr1+1 sbc /NSCDRV.B.START sta offset+1 ldy #1 ldx #0 .1 lda NSCDRV.RELOC,x beq .2 sta TmpPtr2 inx lda NSCDRV.RELOC,x sta TmpPtr2+1 lda (TmpPtr2) clc adc offset sta (TmpPtr2) lda (TmpPtr2),y adc offset+1 sta (TmpPtr2),y inx bne .1 .2 lda RRAMWRAMBNK1 lda RRAMWRAMBNK1 .3 ldy #NSCDRV.SIZE-1 always < 128 .7 lda NSCDRV.B.START,y sta (TmpPtr1),y dey bpl .7 lda RROMBNK1 lda #$4C sta DATETIME rts *-------------------------------------- NSCDRV.RELOC .DA NSCDRV.R1+1 .DA NSCDRV.R2+1 .DA NSCDRV.R3+1 .DA NSCDRV.R4+1 .DA NSCDRV.R5+1 .DA NSCDRV.R6+1 .DA NSCDRV.R7+1 .DA NSCDRV.R8+1 .DA NSCDRV.R9+1 .DA #0 *-------------------------------------- NSC.Print sty TmpPtr1 sta TmpPtr1+1 ldy #0 .1 lda (TmpPtr1),y beq .8 jsr COUT iny bne .1 .8 jmp CROUT *-------------------------------------- NSC.MSG0 .AZ -"NSC 'No-Slot-Clock'/DS1216E Driver For A2osX" NSC.MSG1 .AZ -"Clock Already Present!" NSC.MSG2 .AZ -"No DS1216E Detected!" NSC.MSG3 .AZ -"DS1216E Driver Successfully Installed." *-------------------------------------- * Driver For DS1216E *-------------------------------------- NSCDRV.B.START .EQ * NSCDRV php sei sta $CFFF Make cards release $C8xx space sta $C300 lda $C304 Reset DS1216E comparison register with READ A2=1 ldy #7 Read 8 bytes... NSCDRV.1 NSCDRV.R1 lda DS1216E.PATTERN,y phy ldy #8 ....of 8 bits NSCDRV.2 ldx #0 lsr bcc NSCDRV.21 inx NSCDRV.21 bit $C300,x Write Pattern bit in A0, with A2=0 dey bne NSCDRV.2 ply dey bpl NSCDRV.1 ldx #7 NSCDRV.4 ldy #8 NSCDRV.5 lda $C304 Read Byte... lsr NSCDRV.R2 ror DS1216E.DATA,x dey bne NSCDRV.5 NSCDRV.R3 lda DS1216E.DATA,x pha lsr lsr lsr lsr tay pla and #$0F clc .HS 2C Bit Absolute to skip adc #$0A NSCDRV.6 adc #$0A dey bpl NSCDRV.6 NSCDRV.R4 sta DS1216E.DATA,x dex bpl NSCDRV.4 NSCDRV.R5 lda DS1216E.DATA+4 Get HH sta TIMELO+1 NSCDRV.R6 lda DS1216E.DATA+5 Get mm sta TIMELO NSCDRV.R7 lda DS1216E.DATA+1 Get MM asl asl asl asl asl NSCDRV.R8 ora DS1216E.DATA+2 Get DD sta DATELO NSCDRV.R9 lda DS1216E.DATA Get YY rol sta DATELO+1 plp rts *-------------------------------------- DS1216E.PATTERN .HS 5CA33AC55CA33AC5 Reverted 7->0 DS1216E.DATA .BS 8 Reverted YY MM DD Day HH mm SS CS *-------------------------------------- .LIST ON NSCDRV.SIZE .EQ *-NSCDRV.B.START .LIST OFF *-------------------------------------- * CONTROL SECTION : *-------------------------------------- .DO NSCDRV.SIZE>125 * ERROR:NSCDRV.SIZE too big .FIN *-------------------------------------- MAN SAVE USR/SRC/SYS/KM.NSC.S ASM