A2osX/LIB/LIBBLKDEV.S.D2.txt

468 lines
7.5 KiB
Plaintext
Raw Normal View History

2020-05-09 19:08:20 +00:00
NEW
AUTO 3,1
.LIST OFF
*/--------------------------------------
*\--------------------------------------
D2MotorControl >PULLB MotorOn
>PULLB DrvSlt
jsr CheckDiskII
bcs .9
lda MotorOn
asl
2020-05-28 21:13:52 +00:00
lda #IO.D2.DrvOff
2020-05-09 19:08:20 +00:00
adc Slotn0
tax
lda $C000,x
* clc
2020-05-28 21:13:52 +00:00
.9 rts
*/--------------------------------------
*\--------------------------------------
D2Recalibrate >PULLB DrvSlt
jsr CheckDiskII
bcs .9
stz MoveTo
lda #252
sta MoveFrom
jsr D2MoveHead.1
lda #0
jsr D2.PhaseOn
lda #0 wait 25.6 ms
jsr D2.Wait100msA Trash X
lda #0 wait 25.6 ms
jsr D2.Wait100msA Trash X
lda #0 wait 25.6 ms
jsr D2.Wait100msA Trash X
lda #0 wait 25.6 ms
jsr D2.Wait100msA Trash X
jsr D2.PhaseOn.2
clc
.9 rts
2020-05-09 19:08:20 +00:00
*/--------------------------------------
*\--------------------------------------
D2MoveHead >PULLB MoveTo
>PULLB MoveFrom
>PULLB DrvSlt
jsr CheckDiskII
2020-05-28 21:13:52 +00:00
bcs .9
php
sei
jsr D2MoveHead.1
plp
clc
.9 rts
D2MoveHead.1 ldy #0
2020-05-09 19:08:20 +00:00
2020-05-28 21:13:52 +00:00
.1 ldx MoveFrom
2020-05-17 17:34:32 +00:00
2020-05-28 21:13:52 +00:00
tya
beq .2
txa
jsr D2.PhaseOff
.2 cpx MoveTo
beq .8
2020-05-17 17:34:32 +00:00
2020-05-28 21:13:52 +00:00
bcs .3
2020-05-09 19:08:20 +00:00
2020-05-28 21:13:52 +00:00
inx MoveFrom<MoveTo, must move in
2020-05-12 15:17:25 +00:00
.HS B0 BCS
2020-05-09 19:08:20 +00:00
2020-05-28 21:13:52 +00:00
.3 dex MoveFrom>MoveTo, must move out
2020-05-09 19:08:20 +00:00
2020-05-28 21:13:52 +00:00
stx MoveFrom
2020-05-09 19:08:20 +00:00
2020-05-28 21:13:52 +00:00
txa
2020-05-23 18:45:32 +00:00
2020-05-26 14:23:09 +00:00
jsr D2.PhaseOn
2020-05-28 21:13:52 +00:00
lda #104
2020-05-26 14:23:09 +00:00
jsr D2.Wait100msA Trash X
2020-05-23 18:45:32 +00:00
iny
2020-05-09 19:08:20 +00:00
2020-05-17 17:34:32 +00:00
bra .1
2020-05-09 19:08:20 +00:00
2020-05-28 21:13:52 +00:00
.8 tya
beq D2.PhaseOff.8
2020-05-09 19:08:20 +00:00
2020-05-28 21:13:52 +00:00
lda #0 wait 25.6 ms
2020-05-23 18:45:32 +00:00
jsr D2.Wait100msA Trash X
2020-05-28 21:13:52 +00:00
lda MoveTo
2020-05-23 18:45:32 +00:00
*--------------------------------------
2020-05-28 21:13:52 +00:00
D2.PhaseOff bit #1 1,3,5,7 ?
beq D2.PhaseOff.2 only half track
D2.PhaseOff.1 bit IO.D2.Ph0Off SELF MODIFIED
D2.PhaseOff.2 bit IO.D2.Ph0Off SELF MODIFIED
D2.PhaseOff.8 rts
2020-05-09 19:08:20 +00:00
*--------------------------------------
2020-05-19 13:00:17 +00:00
D2.PhaseOn bit #1 1,3,5,7 ?
2020-05-28 21:13:52 +00:00
bne .1 only half track
2020-05-19 13:00:17 +00:00
2020-05-26 14:23:09 +00:00
jsr .7
2020-05-28 21:13:52 +00:00
bra D2.PhaseOn.2
2020-05-26 14:23:09 +00:00
.1 pha
2020-05-19 13:00:17 +00:00
jsr .7
pla
2020-05-28 21:13:52 +00:00
inc
jsr .7
bra D2.PhaseOn.1
2020-05-09 19:08:20 +00:00
2020-05-20 21:06:05 +00:00
.7 and #6 mask for 0,2,4,6
2020-05-26 14:23:09 +00:00
ora Slotn0 Slot $n0
ora #IO.D2.Ph0On
2020-05-09 19:08:20 +00:00
tax
2020-05-28 21:13:52 +00:00
lda D2.PhaseOn.2+1
sta D2.PhaseOn.1+1
stx D2.PhaseOn.2+1
2020-05-26 14:23:09 +00:00
lda D2.PhaseOff.2+1
sta D2.PhaseOff.1+1
dex
stx D2.PhaseOff.2+1
rts
*--------------------------------------
2020-05-28 21:13:52 +00:00
D2.PhaseOn.1 bit IO.D2.Ph0On SELF MODIFIED
D2.PhaseOn.2 bit IO.D2.Ph0On SELF MODIFIED
2020-05-26 14:23:09 +00:00
rts
2020-05-09 19:08:20 +00:00
*--------------------------------------
2020-05-12 15:17:25 +00:00
D2.Wait100msA sec
2020-05-19 13:00:17 +00:00
.1 ldx #19
2020-05-09 19:08:20 +00:00
.2 dex
bne .2
2020-05-12 15:17:25 +00:00
sbc #1
2020-05-09 19:08:20 +00:00
bne .1
rts
*/--------------------------------------
*\--------------------------------------
D2TrkRead16s
*/--------------------------------------
* # D2TrkWrite16s
* Write a track (16 sectors)
* **In:**
* PUSHB = DSSS0000
* PUSHB = TrackNum * 4 : 0->136+
* PUSHW = Ptr to 16*256 buffer
* ## RETURN VALUE
* CC : success
* CS : A = Error
* A=0, currently starting/seeking...
*\--------------------------------------
D2TrkWrite16s >PULLW ZPPtr1
>PULLB TrkNum
>PULLB VolNum
>PULLB DrvSlt
jsr CheckDiskII
bcs .9
>LDYAI TRACK16.LEN+1
>SYSCALL2 getmem
bcs .9
>STYA ZPPtr2
stx hTrkBuf
stz SectNum
ldy #TRACK16.GAP1
jsr PutSyncBytePtr2
.1 jsr PutAddrHeadPtr2
jsr HeaderCheckSum
ldy #3
.2 lda Checksum,y
jsr PutByte44Ptr2
dey
bpl .2
jsr PutTailPtr2
ldy #TRACK16.GAP2
jsr PutSyncBytePtr2
jsr PutDataHeadPtr2
jsr PutData
jsr PutTailPtr2
ldy #TRACK16.GAP3
jsr PutSyncBytePtr2
inc ZPPtr1+1
inc SectNum
lda SectNum
cmp #16
bne .1
lda #0
sta (ZPPtr2)
jsr D2WriteTrackPtr2
php
pha
lda hTrkBuf
>SYSCALL2 FreeMem
pla
plp
.9 rts
*/--------------------------------------
*\--------------------------------------
D2TrkReadNIB
*/--------------------------------------
* # D2TrkWriteNIB
* Write a track (NIBBLE)
* **In:**
* PUSHB = DSSS0000
* PUSHW = Ptr to NIBBLE buffer (0 ended)
* ## RETURN VALUE
* CC : success
* CS : A = Error
* A=0, currently starting/seeking...
*\--------------------------------------
D2TrkWriteNIB >PULLW ZPPtr1
>PULLB DrvSlt
jsr CheckDiskII was it a DISK II ?
bcs .9
.9 rts
*--------------------------------------
* A=DSSS0000
*--------------------------------------
CheckDiskII pha
and #$70 only 0SSS
sta Slotn0
lsr
lsr
lsr
lsr
ora #$C0 make Cn
sta ZPPtr3+1
stz ZPPtr3
ldx #3 4 bytes to check
.1 ldy DiskII.OFS,x
.2 lda (ZPPtr3),y
cmp DiskII.SIG,x
bne .9
dex
bpl .1
pla all bytes match, Disk II
asl
lda #0
adc #IO.D2.DrvSel1
adc Slotn0
tax
lda $C000,x
* clc
rts
.9 pla
lda #MLI.E.NODEV
sec
rts
*--------------------------------------
* A=DSSS0000
*--------------------------------------
DrvSpinCheck ldy #0
lda IO.D2.RData,x
.1 cmp IO.D2.RData,x
bne .8 spinning
dey
bne .1
clc CC:not spinning
rts
.8 sec
rts
*--------------------------------------
PutSyncBytePtr2 lda #$7f
.1 jsr PutBytePtr2
dey
bne .1
rts
*--------------------------------------
PutAddrHeadPtr2 ldy #2
.1 lda ADDR.Head,y
jsr PutBytePtr2
dey
bpl .1
rts
*--------------------------------------
PutDataHeadPtr2 ldy #2
.1 lda DATA.Head,y
jsr PutBytePtr2
dey
bpl .1
rts
*--------------------------------------
PutTailPtr2 ldy #2
.1 lda TAIL,y
jsr PutBytePtr2
dey
bpl .1
rts
*--------------------------------------
HeaderCheckSum lda VolNum
eor TrkNum
eor SectNum
sta Checksum
rts
*--------------------------------------
PutData stz Checksum
lda ZPPtr1
ldy ZPPtr1+1
clc
adc #86
bcc .1
iny
clc
.1 sta ZPPtr3
sty ZPPtr3+1
adc #86
bcc .2
iny
.2 sta ZPPtr4
sty ZPPtr4+1
ldy #85
.3 lda (ZPPtr1),y
and #3
tax
2020-05-12 15:17:25 +00:00
lda D2.XX000000,x
2020-05-09 19:08:20 +00:00
pha
lda (ZPPtr3),y
and #3
tax
pla
2020-05-12 15:17:25 +00:00
ora D2.00XX0000,x
2020-05-09 19:08:20 +00:00
pha
lda (ZPPtr4),y
and #3
tax
pla
2020-05-12 15:17:25 +00:00
ora D2.0000XX00,x
2020-05-09 19:08:20 +00:00
eor Checksum
sta Checksum
tax
lda FC2Nib,x
jsr PutBytePtr2
dey
bpl .3
ldy #0
2020-05-10 16:03:51 +00:00
.4 lda (ZPPtr1),y
2020-05-09 19:08:20 +00:00
and #$FC
eor Checksum
sta Checksum
tax
lda FC2Nib,x
jsr PutBytePtr2
iny
bne .4
ldx Checksum
lda FC2Nib,x
jsr PutBytePtr2
rts
*--------------------------------------
PutByte44Ptr2 pha
ror
jsr .1
pla
.1 ora #$AA
*--------------------------------------
PutBytePtr2 sta (ZPPtr2)
inc ZPPtr2
bne .8
inc ZPPtr2+1
.8 rts
*--------------------------------------
D2WriteTrackPtr2
sei
ldy #TrkWriter.Size
.1 lda TrkWriter-1,y
sta $1ff,y
dey
bne .1
lda hTrkBuf
>SYSCALL2 GetMemPtr
>STYA ZPPtr1
ldx Slotn0
jsr $200
2020-05-25 14:01:28 +00:00
cli
2020-05-09 19:08:20 +00:00
rts
*--------------------------------------
MAN
2020-05-26 14:23:09 +00:00
SAVE usr/src/lib/libblkdev.s.d2
LOAD usr/src/lib/libblkdev.s
2020-05-09 19:08:20 +00:00
ASM