mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-26 13:49:18 +00:00
500 lines
7.4 KiB
Plaintext
500 lines
7.4 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
*/--------------------------------------
|
||
*\--------------------------------------
|
||
D2MotorControl >PULLB MotorOn
|
||
>PULLB DrvSlt
|
||
jsr CheckDiskII
|
||
bcs .9
|
||
|
||
lda MotorOn
|
||
asl
|
||
|
||
lda #IO.D2.DrvOff
|
||
adc Slotn0
|
||
tax
|
||
lda $C000,x
|
||
|
||
clc
|
||
|
||
.9 rts
|
||
*/--------------------------------------
|
||
*\--------------------------------------
|
||
D2Recalibrate >PULLB DrvSlt
|
||
jsr CheckDiskII
|
||
bcs .9
|
||
|
||
ldx Slotn0
|
||
|
||
lda IO.D2.DrvOn,x
|
||
|
||
ldy #168
|
||
|
||
.1 lda IO.D2.Ph0Off,x
|
||
|
||
dey
|
||
dey
|
||
|
||
tya
|
||
|
||
and #6
|
||
ora Slotn0
|
||
tax
|
||
lda IO.D2.Ph0On,x
|
||
|
||
lda #IO.D2.SeekTimeR
|
||
jsr D2.Wait100usecA
|
||
|
||
tya
|
||
bne .1
|
||
|
||
jsr D2.Wait25600usec
|
||
|
||
ldx Slotn0
|
||
lda IO.D2.Ph0Off,x
|
||
|
||
jsr D2.Wait25600usec
|
||
|
||
clc
|
||
.9 rts
|
||
*/--------------------------------------
|
||
*\--------------------------------------
|
||
D2MoveHead >PULLB MoveTo
|
||
>PULLB MoveFrom
|
||
>PULLB DrvSlt
|
||
jsr CheckDiskII
|
||
bcs .9
|
||
|
||
ldx Slotn0
|
||
ldy Slotn0
|
||
|
||
.1 lda MoveFrom
|
||
cmp MoveTo
|
||
beq .7
|
||
|
||
jsr .8
|
||
|
||
bcs .2
|
||
|
||
* Current < Target, must move in
|
||
|
||
inc
|
||
|
||
.HS B0 BCS
|
||
|
||
* Current > Target, must move out
|
||
|
||
.2 dec
|
||
|
||
sta MoveFrom
|
||
|
||
pha
|
||
|
||
and #6
|
||
ora Slotn0
|
||
tax
|
||
|
||
pla
|
||
|
||
bcs .3
|
||
|
||
* Current < Target, must move in
|
||
|
||
inc
|
||
|
||
.HS B0 BCS
|
||
|
||
* Current > Target, must move out
|
||
|
||
.3 dec
|
||
|
||
and #6
|
||
ora Slotn0
|
||
|
||
bcc .4
|
||
|
||
* move out : invert 2 phases
|
||
|
||
phx
|
||
tax
|
||
pla
|
||
|
||
.4 tay
|
||
|
||
lda IO.D2.Ph0On,x
|
||
nop
|
||
nop
|
||
|
||
lda IO.D2.Ph0On,y
|
||
nop
|
||
nop
|
||
|
||
lda #IO.D2.SeekTimeF
|
||
jsr D2.Wait100usecA
|
||
|
||
bra .1
|
||
|
||
.7 jsr D2.Wait25600usec
|
||
|
||
clc
|
||
|
||
.8 bit IO.D2.Ph0Off,x
|
||
nop
|
||
nop
|
||
|
||
ldx IO.D2.Ph0Off,y
|
||
nop
|
||
nop
|
||
|
||
.9 rts
|
||
*--------------------------------------
|
||
D2.Wait25600usec
|
||
lda #0
|
||
|
||
D2.Wait100usecA
|
||
phx (3)
|
||
|
||
.1 ldx #18 (2)
|
||
|
||
.2 dex (2)
|
||
bne .2 (3)
|
||
|
||
ldx Slotn0 (3)
|
||
bit IO.D2.DrvOn,x (4) Slow down ACC boards
|
||
|
||
sec (2)
|
||
sbc #1 (2)
|
||
bne .1 (3)
|
||
|
||
plx (4)
|
||
|
||
rts (6)
|
||
*/--------------------------------------
|
||
* # 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
|
||
*\--------------------------------------
|
||
D2TrkRead16s >PULLW ZPPtr1
|
||
>PULLB TrkNum
|
||
>PULLB DrvSlt
|
||
|
||
jsr CheckDiskII
|
||
bcs .9
|
||
|
||
|
||
lda VolNum
|
||
clc
|
||
.9 rts
|
||
*/--------------------------------------
|
||
* # 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
|
||
>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
|
||
lda D2.XX000000,x
|
||
pha
|
||
|
||
lda (ZPPtr3),y
|
||
and #3
|
||
tax
|
||
pla
|
||
ora D2.00XX0000,x
|
||
pha
|
||
|
||
lda (ZPPtr4),y
|
||
and #3
|
||
tax
|
||
pla
|
||
ora D2.0000XX00,x
|
||
|
||
tax
|
||
|
||
eor Checksum
|
||
sta Checksum
|
||
|
||
lda FC2Nib,x
|
||
|
||
jsr PutBytePtr2
|
||
dey
|
||
bpl .3
|
||
|
||
ldy #0
|
||
|
||
.4 lda (ZPPtr1),y
|
||
and #$FC
|
||
|
||
tax
|
||
|
||
eor Checksum
|
||
sta Checksum
|
||
|
||
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
|
||
lda hTrkBuf
|
||
>SYSCALL2 GetMemPtr
|
||
>STYA ZPPtr1
|
||
|
||
php
|
||
sei
|
||
|
||
ldy #TrkWriter.Size
|
||
|
||
.1 lda TrkWriter-1,y
|
||
sta $1ff,y
|
||
dey
|
||
bne .1
|
||
|
||
ldx Slotn0
|
||
|
||
jsr $200
|
||
|
||
plp
|
||
rts
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE usr/src/lib/libblkdev.s.d2
|
||
LOAD usr/src/lib/libblkdev.s
|
||
ASM
|