diff --git a/.Floppies/A2OSX.BLANK.woz b/.Floppies/A2OSX.BLANK.woz index 55e648cf..5c74821c 100644 Binary files a/.Floppies/A2OSX.BLANK.woz and b/.Floppies/A2OSX.BLANK.woz differ diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index 39ff8650..7061974b 100644 Binary files a/.Floppies/A2OSX.BOOT.po and b/.Floppies/A2OSX.BOOT.po differ diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index c72fade9..043b860b 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.TEST.po b/.Floppies/A2OSX.TEST.po index 1ad1fbfe..5e4a0724 100644 Binary files a/.Floppies/A2OSX.TEST.po and b/.Floppies/A2OSX.TEST.po differ diff --git a/DRV/X.U2.DRV.S.txt b/DRV/X.U2.DRV.S.txt index 4b038c66..bb9a1a74 100644 --- a/DRV/X.U2.DRV.S.txt +++ b/DRV/X.U2.DRV.S.txt @@ -19,7 +19,7 @@ CS.START cld .DA #$61 6502,Level 1 (65c02) .DA #1 DRV Layout Version 1 .DA 0 - .DA CS.END-CS.START Code Length + .DA CS.END-CS.START Code Length .DA 0 .DA 0 .DA 0 @@ -60,14 +60,14 @@ Dev.Detect >STYA ARGS .10 dec give some time.... bne .10 - lda #W5100.MR.AI+W5100.MR.IND + lda #W5100.MR.PB+W5100.MR.AI+W5100.MR.IND sta W5100.MR,x pha pla lda W5100.MR,x - cmp #W5100.MR.AI+W5100.MR.IND + cmp #W5100.MR.PB+W5100.MR.AI+W5100.MR.IND bne .2 >AR.SELECT RTR @@ -97,9 +97,6 @@ Dev.Detect >STYA ARGS .3 stx DEVSLOTx0 sty DEVSLOT0x - lda #A2osX.S.NIC - sta A2osX.S,y - jsr Dev.ParseArgs bcs .99 @@ -283,7 +280,7 @@ OPEN.I jsr CLOSE * ldx DEVSLOTx0 Done by CLOSE - lda #W5100.MR.AI+W5100.MR.IND + lda #W5100.MR.PB+W5100.MR.AI+W5100.MR.IND sta W5100.MR,x >AR.SELECT SHAR diff --git a/LIB/LIBBLKDEV.S.D2.txt b/LIB/LIBBLKDEV.S.D2.txt new file mode 100644 index 00000000..ceb8dc6b --- /dev/null +++ b/LIB/LIBBLKDEV.S.D2.txt @@ -0,0 +1,402 @@ +NEW + AUTO 3,1 + .LIST OFF +*/-------------------------------------- +*\-------------------------------------- +D2MotorControl >PULLB MotorOn + >PULLB DrvSlt + jsr CheckDiskII + bcs .9 + + lda MotorOn + asl + + lda #0 + adc #IO.D2.DrvOff + adc Slotn0 + tax + lda $C000,x + +* clc + +.9 rts +*/-------------------------------------- +*\-------------------------------------- +D2MoveHead >PULLB MoveTo + >PULLB MoveFrom + >PULLB DrvSlt + jsr CheckDiskII + bcs .9 + +.1 lda MoveTo + cmp MoveFrom + beq .8 + + bcc .2 + +* sec + lda #0 MoveFrom>MoveTo, must move in + bra .3 + +.2 lda #$ff MoveFrom136+ +* 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 + lda XRW.XX000000,x + pha + + lda (ZPPtr3),y + and #3 + tax + pla + ora XRW.00XX0000,x + pha + + lda (ZPPtr4),y + and #3 + tax + pla + ora XRW.0000XX00,x + + eor Checksum + sta Checksum + + tax + lda FC2Nib,x + + jsr PutBytePtr2 + dey + bpl .3 + + ldy #0 + +.4 lda (ZPPtr3),y + 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 + + cli + rts +*-------------------------------------- +MAN +SAVE USR/SRC/LIB/LIBBLKDEV.S.D2 +LOAD USR/SRC/LIB/LIBBLKDEV.S +ASM diff --git a/LIB/LIBBLKDEV.S.txt b/LIB/LIBBLKDEV.S.txt index f6fff205..0a184956 100644 --- a/LIB/LIBBLKDEV.S.txt +++ b/LIB/LIBBLKDEV.S.txt @@ -294,402 +294,8 @@ BuildProDOSCat >PULLW ZPPtr1 DstBuf inc ZPPtr1+1 bra .7 -*/-------------------------------------- -*\-------------------------------------- -D2MotorControl >PULLB MotorOn - >PULLB DrvSlt - jsr CheckDiskII - bcs .9 - - lda MotorOn - asl - - lda #0 - adc #IO.D2.DrvOff - adc Slotn0 - tax - lda $C000,x - -* clc - -.9 rts -*/-------------------------------------- -*\-------------------------------------- -D2MoveHead >PULLB MoveTo - >PULLB MoveFrom - >PULLB DrvSlt - jsr CheckDiskII - bcs .9 - -.1 lda MoveTo - - sec - sbc MoveFrom - beq .8 - - bcc .2 - - lda #1 A>curtrk, must move in - bra .3 - -.2 lda #$ff A136+ -* 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 - lda XRW.XX000000,x - pha - - lda (ZPPtr3),y - and #3 - tax - pla - ora XRW.00XX0000,x - pha - - lda (ZPPtr4),y - and #3 - tax - pla - ora XRW.0000XX00,x - - eor Checksum - sta Checksum - - tax - lda FC2Nib,x - - jsr PutBytePtr2 - dey - bpl .3 - - ldy #0 - -.4 lda (ZPPtr3),y - 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 - - cli - rts + .INB USR/SRC/LIB/LIBBLKDEV.S.D2 *-------------------------------------- CS.END *-------------------------------------- diff --git a/ProDOS.FX/ProDOS.S.XRW.txt b/ProDOS.FX/ProDOS.S.XRW.txt index 0ae1a331..d8d53078 100644 --- a/ProDOS.FX/ProDOS.S.XRW.txt +++ b/ProDOS.FX/ProDOS.S.XRW.txt @@ -746,14 +746,15 @@ XRW.Seek ldx XRW.UnitIndex bcc .2 - lda #1 A>curtrk, must move in +* sec + lda #0 CurrentQTrack>TargetQTrack, must move in bra .3 -.2 lda #$ff A