A2osX/LIB/LIBBLKDEV.S.D2.txt

522 lines
7.5 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
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
lda MotorOn
asl
2021-01-12 21:14:13 +00:00
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
2021-01-12 21:14:13 +00:00
2020-06-27 18:30:09 +00:00
clc
2021-01-12 21:14:13 +00:00
2020-05-28 21:13:52 +00:00
.9 rts
*/--------------------------------------
*\--------------------------------------
D2Recalibrate >PULLB DrvSlt
jsr CheckDiskII
bcs .9
2021-01-12 21:14:13 +00:00
* ldx Slotn0
2020-11-19 15:34:02 +00:00
ldy Slotn0
2021-01-12 21:14:13 +00:00
2020-11-19 15:34:02 +00:00
lda #168
2020-06-17 19:05:36 +00:00
2021-01-12 21:14:13 +00:00
.1 dec
2020-11-19 15:34:02 +00:00
dec
2020-06-17 19:05:36 +00:00
2021-01-12 21:14:13 +00:00
pha
2020-06-11 21:04:56 +00:00
2020-06-13 19:27:06 +00:00
and #6
ora Slotn0
2021-01-12 21:14:13 +00:00
phy
plx
2020-11-19 15:34:02 +00:00
tay
2021-01-12 21:14:13 +00:00
lda IO.D2.Ph0On,y
lda #IO.D2.SeekTimeR
jsr D2.Wait100usecA
lda IO.D2.Ph0Off,x
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
2021-01-12 21:14:13 +00:00
2020-06-17 19:05:36 +00:00
jsr D2.Wait25600usec
2021-01-12 21:14:13 +00:00
* ldy Slotn0
lda IO.D2.Ph0Off,y
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-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
2021-01-12 21:14:13 +00:00
beq .8
2020-07-06 12:03:05 +00:00
2021-01-12 21:14:13 +00:00
sta IO.D2.Ph0Off,x
2021-01-13 16:57:41 +00:00
nop
nop
2021-01-12 21:14:13 +00:00
sta IO.D2.Ph0Off,y
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
2021-01-12 21:14:13 +00:00
bcc .4
2020-11-24 17:49:46 +00:00
* move out : invert 2 phases
2020-09-20 18:35:54 +00:00
2021-01-12 21:14:13 +00:00
phx
tax
pla
2020-11-24 17:49:46 +00:00
.4 tay
2021-01-12 21:14:13 +00:00
sta IO.D2.Ph0On,x
2021-01-13 16:57:41 +00:00
nop
nop
2021-01-12 21:14:13 +00:00
sta IO.D2.Ph0On,y
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
2021-01-12 21:14:13 +00:00
.8 jsr D2.Wait25600usec
2020-11-19 15:34:02 +00:00
2021-01-12 21:14:13 +00:00
sta IO.D2.Ph0Off,x
2021-01-13 16:57:41 +00:00
nop
nop
2021-01-12 21:14:13 +00:00
sta IO.D2.Ph0Off,y
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
2021-01-12 21:14:13 +00:00
.1 ldx #20 (2)
2020-11-24 17:49:46 +00:00
.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)
2021-01-12 21:14:13 +00:00
2020-11-24 17:49:46 +00:00
plx
2021-01-12 21:14:13 +00:00
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
2021-01-12 21:14:13 +00:00
* PUSHB = TrackNum * 4 : 0->136+
2020-06-17 19:05:36 +00:00
* 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
2021-01-12 21:14:13 +00:00
2020-06-17 19:05:36 +00:00
lda VolNum
clc
2021-01-12 21:14:13 +00:00
.9 rts
2020-05-09 19:08:20 +00:00
*/--------------------------------------
* # D2TrkWrite16s
* Write a track (16 sectors)
* PUSHB = DSSS0000
2021-01-12 21:14:13 +00:00
* PUSHB = TrackNum * 4 : 0->136+
2020-05-09 19:08:20 +00:00
* 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
2021-01-12 21:14:13 +00:00
>LDYAI TRACK16.LEN+256+1
2020-08-23 19:46:37 +00:00
>SYSCALL2 GetMem
2020-05-09 19:08:20 +00:00
bcs .9
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
>STYA ZPPtr2
stx hTrkBuf
stz SectNum
2021-01-12 21:14:13 +00:00
ldy #0 put 256 FF sync bytes for slooooow drives
jsr PutSyncBytePtr2
2020-05-09 19:08:20 +00:00
ldy #TRACK16.GAP1
jsr PutSyncBytePtr2
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
.1 jsr PutAddrHeadPtr2
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
jsr HeaderCheckSum
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
ldy #3
.2 lda Checksum,y
jsr PutByte44Ptr2
dey
bpl .2
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
jsr PutTailPtr2
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
ldy #TRACK16.GAP2
jsr PutSyncBytePtr2
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
jsr PutDataHeadPtr2
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
jsr PutData
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
jsr PutTailPtr2
ldy #TRACK16.GAP3
jsr PutSyncBytePtr2
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
inc ZPPtr1+1
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
inc SectNum
lda SectNum
cmp #16
bne .1
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
lda #0
sta (ZPPtr2)
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
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
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
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
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
ldx #3 4 bytes to check
.1 ldy DiskII.OFS,x
.2 lda (ZPPtr3),y
cmp DiskII.SIG,x
bne .9
dex
bpl .1
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
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
2021-01-12 21:14:13 +00:00
.1 pha
pla
cmp IO.D2.RData,x
2020-05-09 19:08:20 +00:00
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
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
iny
clc
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
.1 sta ZPPtr3
sty ZPPtr3+1
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
adc #86
bcc .2
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
iny
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
.2 sta ZPPtr4
sty ZPPtr4+1
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
ldy #85
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
.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
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
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
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
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
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
eor Checksum
sta Checksum
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
lda FC2Nib,x
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
jsr PutBytePtr2
dey
bpl .3
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
ldy #0
2021-01-12 21:14:13 +00:00
2020-05-10 16:03:51 +00:00
.4 lda (ZPPtr1),y
2020-05-09 19:08:20 +00:00
and #$FC
2021-01-12 21:14:13 +00:00
2020-07-13 19:29:31 +00:00
tax
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
eor Checksum
sta Checksum
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
lda FC2Nib,x
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
jsr PutBytePtr2
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
iny
bne .4
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
ldx Checksum
lda FC2Nib,x
jsr PutBytePtr2
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
rts
*--------------------------------------
PutByte44Ptr2 pha
ror
jsr .1
pla
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
.1 ora #$AA
*--------------------------------------
PutBytePtr2 sta (ZPPtr2)
inc ZPPtr2
bne .8
inc ZPPtr2+1
2021-01-12 21:14:13 +00:00
.8 rts
2020-05-09 19:08:20 +00:00
*--------------------------------------
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
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
.1 lda TrkWriter-1,y
sta $1ff,y
dey
bne .1
2021-01-12 21:14:13 +00:00
2020-05-09 19:08:20 +00:00
ldx Slotn0
jsr $200
2021-01-12 21:14:13 +00:00
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