A2osX/SYS/KM.NSC.S.txt
2017-03-29 17:48:15 +02:00

304 lines
5.2 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PR#3
PREFIX /A2OSX.BUILD
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF /A2OSX.BUILD/SYS/KM.NSC
*--------------------------------------
.INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/IO.I
.INB /A2OSX.BUILD/INC/MONITOR.I
.INB /A2OSX.BUILD/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
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
*--------------------------------------
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 >CSTR "NSC ('No-Slot-Clock'/DS1216E) Driver For A2osX"
NSC.MSG1 >CSTR "A Clock Driver Is Already Installed."
NSC.MSG2 >CSTR "DS1216E Chip Not Detected."
NSC.MSG3 >CSTR "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 /A2OSX.SRC/SYS/KM.NSC.S
ASM