diff --git a/SYS/KM.NSC.S.txt b/SYS/KM.NSC.S.txt new file mode 100644 index 00000000..7e619a30 --- /dev/null +++ b/SYS/KM.NSC.S.txt @@ -0,0 +1,294 @@ +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