PR#3 PREFIX /DATA/A2OSX NEW INC 1 AUTO 6 .LIST OFF .OP 65C02 .OR $2000 .TF SYS/KM.NSC *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I .INB INC/IO.I .INB INC/MONITOR.I .INB INC/PRODOS.I *-------------------------------------- TmpPtr1 .EQ $0 TmpPtr2 .EQ $2 *-------------------------------------- NSC.Init >LDAXI NSC.MSG0 jsr NSC.Print lda MACHID and #MACHID.CLK Clock already installed ? beq .1 >LDAXI NSC.MSG1 jsr NSC.Print rts .1 jsr NSC.Detect bcc .2 >LDAXI NSC.MSG2 jsr NSC.Print rts .2 jsr NSC.Install lda MACHID ora #MACHID.CLK sta MACHID >LDAXI NSC.MSG3 jsr NSC.Print rts *-------------------------------------- NSC.Detect php sei sta $CFFF sta $C00A 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 sta $C300,y Write Pattern bit in A0, with A2=0 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 ldx #7 .8 lda DS1216E.DATA1,x cmp DS1216E.DATA2,x bne .9 dex bpl .8 plp sec rts .9 plp clc rts *-------------------------------------- DS1216E.DATA1 .BS 8 DS1216E.DATA2 .BS 8 *-------------------------------------- NSC.Install lda DATETIME+1 sta TmpPtr1 sec sbc #NSCDRV.B.START sta NSCDRV.OFFSET lda DATETIME+2 sta TmpPtr1+1 sbc /NSCDRV.B.START sta NSCDRV.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 NSCDRV.OFFSET sta (TmpPtr2) lda (TmpPtr2),y adc NSCDRV.OFFSET+1 sta (TmpPtr2),y inx bne .1 .2 lda RRAMWRAMBNK1 lda RRAMWRAMBNK1 .3 ldy #0 .7 lda NSCDRV.B.START,y sta (TmpPtr1),y iny cpy #NSCDRV.SIZE bne .7 lda RROMBNK1 lda #$4C sta DATETIME rts *-------------------------------------- NSCDRV.OFFSET .BS 2 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 >STAX TmpPtr1 ldy #0 .1 lda (TmpPtr1),y beq .9 ora #$80 jsr COUT iny bne .1 .9 jmp CROUT *-------------------------------------- NSC.MSG0 >CSTRING "NSC ('No-Slot-Clock'/DS1216E) Driver For A2osX." NSC.MSG1 >CSTRING " A Clock Driver Is Already Installed." NSC.MSG2 >CSTRING " DS1216E Chip Not Detected." NSC.MSG3 >CSTRING " DS1216E Driver Successfully Installed." *-------------------------------------- * Driver For DS1216E *-------------------------------------- NSCDRV.B.START .EQ * NSCDRV php sei sta $CFFF Make cards release $C8xx space sta $C00A Force IIe/IIc Internal C300 rom lda $C304 Reset DS1216E comparison register with READ A2=1 ldx #7 Read 8 bytes... NSCDRV.1 NSCDRV.R1 lda DS1216E.PATTERN,x phx ldx #8 ....of 8 bits NSCDRV.2 ldy #0 lsr bcc NSCDRV.21 iny NSCDRV.21 sta $C300,y Write Pattern bit in A0, with A2=0 dex bne NSCDRV.2 plx dex 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 *-------------------------------------- NSCDRV.B.END .EQ * NSCDRV.SIZE .EQ NSCDRV.B.END-NSCDRV.B.START *-------------------------------------- * CONTROL SECTION : *-------------------------------------- .DO NSCDRV.SIZE>125 ERROR:NSCDRV.SIZE too big .FIN *-------------------------------------- MAN SAVE SYS/KM.NSC.S ASM