A2osX/LIB/LIBBLKDEV.S.D2.txt

524 lines
7.7 KiB
Plaintext
Raw Normal View History

2020-05-09 19:08:20 +00:00
NEW
AUTO 3,1
*/--------------------------------------
*\--------------------------------------
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
2020-06-27 18:30:09 +00:00
clc
2020-05-09 19:08:20 +00:00
2020-05-28 21:13:52 +00:00
.9 rts
*/--------------------------------------
*\--------------------------------------
D2Recalibrate >PULLB DrvSlt
jsr CheckDiskII
bcs .9
2020-11-19 15:34:02 +00:00
ldy Slotn0
2020-05-28 21:13:52 +00:00
2020-11-19 15:34:02 +00:00
lda IO.D2.DrvOn,y
nop
nop
2020-06-22 05:59:53 +00:00
2020-11-19 15:34:02 +00:00
lda #168
2020-07-13 19:29:31 +00:00
2020-11-19 15:34:02 +00:00
.1 sta IO.D2.Ph0Off,y
2020-06-17 19:05:36 +00:00
2020-11-19 15:34:02 +00:00
dec
dec
2020-06-17 19:05:36 +00:00
2020-11-19 15:34:02 +00:00
pha
2020-06-11 21:04:56 +00:00
2020-06-13 19:27:06 +00:00
and #6
ora Slotn0
2020-11-19 15:34:02 +00:00
tay
sta IO.D2.Ph0On,y
2020-06-13 19:27:06 +00:00
2020-09-11 15:01:48 +00:00
lda #IO.D2.SeekTimeR
2020-07-26 19:16:13 +00:00
jsr D2.Wait100usecA
2020-11-19 15:34:02 +00:00
pla
2020-06-13 19:27:06 +00:00
bne .1
2020-06-17 19:05:36 +00:00
jsr D2.Wait25600usec
2020-06-11 21:04:56 +00:00
ldx Slotn0
lda IO.D2.Ph0Off,x
2020-06-22 05:59:53 +00:00
2020-09-11 15:01:48 +00:00
jsr D2.Wait25600usec
2020-05-28 21:13:52 +00:00
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
2020-06-05 19:26:34 +00:00
2020-11-19 15:34:02 +00:00
php
sei
2020-11-24 17:49:46 +00:00
jsr D2MoveHead.SEI
plp
clc
.9 rts
2020-07-25 07:05:25 +00:00
2020-11-19 15:34:02 +00:00
2020-11-24 17:49:46 +00:00
D2MoveHead.SEI ldx Slotn0
ldy Slotn0
2020-11-19 15:34:02 +00:00
2020-11-24 17:49:46 +00:00
.1 lda MoveFrom
cmp MoveTo
beq .7
2020-07-06 12:03:05 +00:00
2020-11-24 17:49:46 +00:00
jsr .8
2020-11-23 22:05:27 +00:00
2020-11-24 17:49:46 +00:00
bcs .2
2020-05-17 17:34:32 +00:00
2020-11-24 17:49:46 +00:00
* Current < Target, must move in
2020-05-09 19:08:20 +00:00
2020-11-24 17:49:46 +00:00
inc
2020-05-09 19:08:20 +00:00
2020-11-24 17:49:46 +00:00
.HS B0 BCS
2020-05-26 14:23:09 +00:00
2020-11-24 17:49:46 +00:00
* Current > Target, must move out
.2 dec
2020-06-17 19:05:36 +00:00
2020-11-19 15:34:02 +00:00
sta MoveFrom
2020-11-24 17:49:46 +00:00
pha
2020-11-19 15:34:02 +00:00
2020-11-24 17:49:46 +00:00
and #6
ora Slotn0
tax
2020-11-19 15:34:02 +00:00
2020-11-24 17:49:46 +00:00
pla
2020-09-28 15:43:38 +00:00
2020-11-24 17:49:46 +00:00
bcs .3
2020-09-13 19:05:38 +00:00
2020-11-24 17:49:46 +00:00
* Current < Target, must move in
inc
2020-11-19 15:34:02 +00:00
2020-11-24 17:49:46 +00:00
.HS B0 BCS
2020-11-19 15:34:02 +00:00
2020-11-24 17:49:46 +00:00
* Current > Target, must move out
2020-11-19 15:34:02 +00:00
2020-11-24 17:49:46 +00:00
.3 dec
2020-11-19 15:34:02 +00:00
2020-11-24 17:49:46 +00:00
and #6
ora Slotn0
2020-11-19 15:34:02 +00:00
2020-11-24 17:49:46 +00:00
bcc .4
* move out : invert 2 phases
2020-09-20 18:35:54 +00:00
2020-11-24 17:49:46 +00:00
phx
tax
pla
.4 tay
lda IO.D2.Ph0On,x
nop
nop
lda IO.D2.Ph0On,y
2020-09-07 20:40:50 +00:00
nop
nop
2020-11-23 22:05:27 +00:00
2020-09-07 20:40:50 +00:00
lda #IO.D2.SeekTimeF
2020-07-25 07:05:25 +00:00
jsr D2.Wait100usecA
2020-09-20 18:35:54 +00:00
2020-11-24 17:49:46 +00:00
bra .1
2020-06-27 18:30:09 +00:00
2020-11-24 17:49:46 +00:00
.7 jsr D2.Wait25600usec
2020-11-19 15:34:02 +00:00
2020-11-24 17:49:46 +00:00
.8 bit IO.D2.Ph0Off,x
2020-09-07 20:40:50 +00:00
nop
nop
2020-11-23 22:05:27 +00:00
2020-11-24 17:49:46 +00:00
ldx IO.D2.Ph0Off,y
2020-09-07 20:40:50 +00:00
nop
nop
2020-08-07 19:49:24 +00:00
2020-11-27 16:37:47 +00:00
ldx Slotn0
bit IO.D2.RData,x
2020-11-19 15:34:02 +00:00
rts
2020-06-25 15:39:51 +00:00
*--------------------------------------
2020-06-09 13:40:21 +00:00
D2.Wait25600usec
lda #0
2020-05-12 15:17:25 +00:00
2020-11-24 17:49:46 +00:00
D2.Wait100usecA phx
2020-05-09 19:08:20 +00:00
2020-11-24 17:49:46 +00:00
.1 ldx Slotn0 (3)
bit IO.D2.RData,x (4)
ldx #18 (2)
.2 dex (2)
2020-05-30 20:38:47 +00:00
bne .2 (3)
2020-05-09 19:08:20 +00:00
2020-11-19 15:34:02 +00:00
dec (2)
2020-06-07 08:06:51 +00:00
bne .1 (3)
2020-05-09 19:08:20 +00:00
2020-11-24 17:49:46 +00:00
plx
2020-06-17 19:05:36 +00:00
rts (6)
2020-05-09 19:08:20 +00:00
*/--------------------------------------
2020-06-17 19:05:36 +00:00
* # D2TrkRead16s
* Write a track (16 sectors)
* PUSHB = DSSS0000
* PUSHB = TrackNum * 4 : 0->136+
* PUSHW = Ptr to 16*256 buffer
* ## RETURN VALUE
* CC : success, A = VolNum
* CS : A = Error
2020-05-09 19:08:20 +00:00
*\--------------------------------------
2020-06-17 19:05:36 +00:00
D2TrkRead16s >PULLW ZPPtr1
>PULLB TrkNum
>PULLB DrvSlt
jsr CheckDiskII
bcs .9
lda VolNum
clc
.9 rts
2020-05-09 19:08:20 +00:00
*/--------------------------------------
* # D2TrkWrite16s
* Write a track (16 sectors)
* PUSHB = DSSS0000
* PUSHB = TrackNum * 4 : 0->136+
* PUSHW = Ptr to 16*256 buffer
* ## RETURN VALUE
* CC : success
* CS : A = Error
*\--------------------------------------
D2TrkWrite16s >PULLW ZPPtr1
>PULLB TrkNum
>PULLB VolNum
>PULLB DrvSlt
jsr CheckDiskII
bcs .9
>LDYAI TRACK16.LEN+1
2020-08-23 19:46:37 +00:00
>SYSCALL2 GetMem
2020-05-09 19:08:20 +00:00
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
2020-11-19 15:34:02 +00:00
ldx Slotn0
lda IO.D2.ReadMode,x
lda IO.D2.RData,x
lda IO.D2.Ph0Off,x
lda IO.D2.Ph1Off,x
lda IO.D2.Ph2Off,x
lda IO.D2.Ph3Off,x
2020-05-09 19:08:20 +00:00
* clc
rts
.9 pla
lda #MLI.E.NODEV
sec
rts
*--------------------------------------
* A=DSSS0000
*--------------------------------------
DrvSpinCheck ldy #0
lda IO.D2.RData,x
2020-11-19 15:34:02 +00:00
2020-05-09 19:08:20 +00:00
.1 cmp IO.D2.RData,x
bne .8 spinning
2020-11-19 15:34:02 +00:00
2020-05-09 19:08:20 +00:00
dey
bne .1
clc CC:not spinning
rts
.8 sec
rts
*--------------------------------------
PutSyncBytePtr2 lda #$7f
.1 jsr PutBytePtr2
dey
bne .1
2020-11-19 15:34:02 +00:00
2020-05-09 19:08:20 +00:00
rts
*--------------------------------------
PutAddrHeadPtr2 ldy #2
.1 lda ADDR.Head,y
jsr PutBytePtr2
dey
bpl .1
2020-11-19 15:34:02 +00:00
2020-05-09 19:08:20 +00:00
rts
*--------------------------------------
PutDataHeadPtr2 ldy #2
.1 lda DATA.Head,y
jsr PutBytePtr2
dey
bpl .1
2020-11-19 15:34:02 +00:00
2020-05-09 19:08:20 +00:00
rts
*--------------------------------------
PutTailPtr2 ldy #2
.1 lda TAIL,y
jsr PutBytePtr2
dey
bpl .1
2020-11-19 15:34:02 +00:00
2020-05-09 19:08:20 +00:00
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
2020-07-13 19:29:31 +00:00
tax
2020-05-09 19:08:20 +00:00
eor Checksum
sta Checksum
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
2020-07-13 19:29:31 +00:00
tax
2020-05-09 19:08:20 +00:00
eor Checksum
sta Checksum
2020-07-13 19:29:31 +00:00
2020-05-09 19:08:20 +00:00
lda FC2Nib,x
2020-07-13 19:29:31 +00:00
2020-05-09 19:08:20 +00:00
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
2020-09-22 05:56:28 +00:00
lda hTrkBuf
>SYSCALL2 GetMemPtr
>STYA ZPPtr1
php
2020-05-09 19:08:20 +00:00
sei
ldy #TrkWriter.Size
.1 lda TrkWriter-1,y
sta $1ff,y
dey
bne .1
ldx Slotn0
jsr $200
2020-09-22 05:56:28 +00:00
plp
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