KM.NSC.S Initial Commit

This commit is contained in:
Rémy GIBERT 2015-03-13 16:40:32 +01:00
parent 53fe243b01
commit 8e56af9fe3
1 changed files with 294 additions and 0 deletions

294
SYS/KM.NSC.S.txt Normal file
View File

@ -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