diff --git a/.Floppies/A2OSX.BLANK.woz b/.Floppies/A2OSX.BLANK.woz deleted file mode 100644 index 60d0724a..00000000 Binary files a/.Floppies/A2OSX.BLANK.woz and /dev/null differ diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index f3be3ac1..a97f5498 100644 Binary files a/.Floppies/A2OSX.BOOT.po and b/.Floppies/A2OSX.BOOT.po differ diff --git a/.Floppies/A2OSX.BOOTHD.woz b/.Floppies/A2OSX.BOOTHD.woz index eb16d2ab..8e3a71ae 100644 Binary files a/.Floppies/A2OSX.BOOTHD.woz and b/.Floppies/A2OSX.BOOTHD.woz differ diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index da32ecf2..938b46f0 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 3c48d622..a4d1e536 100644 Binary files a/.Floppies/A2OSX.TEST.po and b/.Floppies/A2OSX.TEST.po differ diff --git a/.Floppies/ProDOSFX.BOOT.po b/.Floppies/ProDOSFX.BOOT.po index f2cbe983..1b98eba0 100644 Binary files a/.Floppies/ProDOSFX.BOOT.po and b/.Floppies/ProDOSFX.BOOT.po differ diff --git a/BASIC.FX/BASIC.S.A.txt b/BASIC.FX/BASIC.S.A.txt index 964d3fbb..5aba1175 100644 --- a/BASIC.FX/BASIC.S.A.txt +++ b/BASIC.FX/BASIC.S.A.txt @@ -882,196 +882,37 @@ BS.WriteTBUFAY sta GP.MLIRW.COUNT LA020 rts *-------------------------------------- -LA021 jsr BS.KW.FRE - bcs LA020 +BS.FRE0 ldx #BSX.Fre0.X + .HS 2C BIT ABS +BS.KW.FRE +BS.FRE1 ldx #BSX.Fre0.X - lda AS.PGRMSTART+1 - sta BS.TXTTAB+1 - lda AS.PGRMSTART - sta BS.TXTTAB + ldy #13 - lda AS.HIMEM+1 - sta XBBD8 - lda #$03 - sta XBBD9 +.1 lda AS.PGRMSTART,y + sta ASX.PGRMSTART,y + dey + bpl .1 - lda AS.STRINGSTART+1 - sta BS.MEMSIZE+1 + jsr BS.ToAUX + bcs .9 - lda #$00 - sta BS.MEMSIZE - bra LA089 Z + pha + phy + ldy #13 + +.2 lda ASX.PGRMSTART,y + sta AS.PGRMSTART,y + dey + bpl .2 + + ply + pla + +.9 rts *-------------------------------------- -BS.KW.FRE stz BS.TXTTAB - - lda #$03 - sta XBBD9 - lda AS.HIMEM+1 - sta XBBD8 - - lda AS.STRINGSTART+1 - sta BS.TXTTAB+1 - sec - sbc AS.ARRAYEND+1 - cmp #$07 - bcc .1 - - sbc #$03 - sta XBBD9 - - lda AS.ARRAYEND+1 - adc #$00 - sta XBBD8 - - lda AS.HIMEM+1 - sbc AS.STRINGSTART+1 - adc #$01 - cmp XBBD9 - bcs .1 - - sta XBBD9 - -.1 lda AS.HIMEM+1 - sta BS.MEMSIZE+1 - - lda AS.HIMEM - sta BS.MEMSIZE - sta AS.STRINGSTART +* DUPLICATE CODE in BASIC.S.XM.txt *-------------------------------------- -LA089 clc - beq LA08D - - sec - -LA08D lda BS.MEMSIZE+1 - sta AS.STRINGSTART+1 - sbc #$00 - sta XBBDA - adc #$00 - sta XBBDB - lda AS.ARRAYEND+1 - adc #$01 - sta XBBDD - -LA0A3 lda AS.VARSTART - sbc #$06 - sta ZP.A2L - - lda AS.VARSTART+1 - sbc #$00 - sta ZP.A2H - - lda AS.ARRAYSTART - sta XBBDC - lda XBBDA - cmp BS.TXTTAB+1 - bcc LA0FA - - sbc XBBD9 - sta XBBD7 - - lda AS.STRINGSTART+1 - sbc XBBDA - sbc XBBD7 - eor #$FF - adc #$02 - cmp XBBD7 - bcc LA0D6 - - lda XBBD7 - -LA0D6 cmp BS.TXTTAB+1 - bcs LA0E0 - - lda BS.TXTTAB+1 - sbc #$00 - -LA0E0 sta XBBDA - jsr LA199 - ldx AS.ARRAYSTART+1 - jsr LA0FB - bcs LA0F8 - - jsr LA131 - lda XBBDA - sta XBBDB - bcc LA0A3 - -LA0F8 lda #BS.E.NOBUFFER -LA0FA rts -*-------------------------------------- -LA0FB clc - -LA0FC lda ZP.A2L - adc #$07 - sta ZP.A2L - bcc LA106 - - inc ZP.A2H - -LA106 eor AS.ARRAYSTART - bne LA10E - - cpx ZP.A2H - beq LA12F - -LA10E ldy #$00 - lda (ZP.A2L),y - iny - eor (ZP.A2L),y - bpl LA0FB - - lda (ZP.A2L),y - bpl LA0FB - - ldy #$04 - lda (ZP.A2L),y - cmp XBBDA - bcc LA0FC - - cmp XBBDB - bcs LA0FB - - jsr LA1BC - bcc LA0FC - - rts - -LA12F clc - rts -*-------------------------------------- -LA131 jsr LA160 - bcs LA12F - -LA136 ldy #$02 - lda (ZP.A2L),y - cmp XBBDA - bcc LA14A - - cmp XBBDB - bcs LA14A - - jsr LA1BC - bcc LA14B - - rts - -LA14A clc -LA14B lda #$03 - adc ZP.A2L - sta ZP.A2L - bcc LA155 - - inc ZP.A2H - -LA155 cmp XBBDC - bne LA136 - - cpx ZP.A2H - bne LA136 - - beq LA131 - LA160 clc lda XBBDC sta ZP.A2L @@ -1109,69 +950,6 @@ LA170 ldy #$02 clc LA198 rts *-------------------------------------- -LA199 lda XBBD7 - sta ZP.PCH - lda XBBD8 - sta ZP.A1H - ldy #$00 - sty ZP.PCL - sty ZP.A1L - ldx XBBD9 - inx - -.1 lda (ZP.PCL),y - sta (ZP.A1L),y - iny - bne .1 - - inc ZP.A1H - inc ZP.PCH - dex - bne .1 - - rts -*-------------------------------------- -LA1BC cmp XBBD7 - bcc LA1C8 - - sbc XBBD7 - clc - adc XBBD8 - -LA1C8 sta ZP.PCH - dey - lda (ZP.A2L),y - sta ZP.PCL - dey - sec - lda AS.STRINGSTART - sbc (ZP.A2L),y - sta AS.STRINGSTART - iny - sta (ZP.A2L),y - lda AS.STRINGSTART+1 - sbc #$00 - sta AS.STRINGSTART+1 - iny - sta (ZP.A2L),y - dey - dey - lda (ZP.A2L),y - beq LA1F2 - - tay - -LA1EA dey - lda (ZP.PCL),y - sta (AS.STRINGSTART),y - tya - bne LA1EA - -LA1F2 clc - lda XBBDD - sbc AS.STRINGSTART+1 - rts -*-------------------------------------- MAN SAVE usr/src/basic.fx/basic.s.a LOAD usr/src/basic.fx/basic.s diff --git a/BASIC.FX/BASIC.S.B.txt b/BASIC.FX/BASIC.S.B.txt index 063f7e9c..6dcc6bd6 100644 --- a/BASIC.FX/BASIC.S.B.txt +++ b/BASIC.FX/BASIC.S.B.txt @@ -3,7 +3,7 @@ NEW *-------------------------------------- BS.GetSysBuf lda #$04 -LA1FB sta XBBB5 +BS.GetSysBufA sta XBBB5 jsr BS.KW.FRE bcs .99 @@ -54,7 +54,7 @@ LA1FB sta XBBB5 XBBB5 .BS 1 *-------------------------------------- BS.FreeSysBuf jsr BS.KW.FRE - bcs LA29D + bcs .9 lda AS.HIMEM+1 sbc #$00 @@ -86,24 +86,27 @@ BS.FreeSysBuf jsr BS.KW.FRE lda BS.BUFPAGE cmp AS.HIMEM+1 - beq LA2B7 + beq .8 pha ldx GP.OPENCNT - beq LA29B + beq .2 lda AS.HIMEM+1 -LA293 cmp BS.BUFPAGEs-1,x +.1 cmp BS.BUFPAGEs-1,x beq LA29E dex - bne LA293 + bne .1 -LA29B pla +.2 pla sec -LA29D rts +.9 rts +.8 clc + rts +*-------------------------------------- LA29E pla *-------------------------------------- BS.SetFileBuf sta GP.SBUFADR+1 @@ -114,52 +117,49 @@ BS.SetFileBuf sta GP.SBUFADR+1 sta GP.MLIMRKEOFBUF.REFNUM lda #MLI.C.SETBUF jmp GP.GOSYSTEM - -LA2B7 clc - rts *-------------------------------------- -BS.GETBUFR jsr LA1FB - bcs LA304 +BS.GETBUFR jsr BS.GetSysBufA + bcs LA2F6.9 pha sbc #$03 sta XBBB8 pla -LA2C5 sta GP.SBUFADR+1 +.1 sta GP.SBUFADR+1 ldx GP.OPENCNT - beq LA2EE + beq .4 lda XBBB7 clc adc #$04 sta XBBB7 -LA2D6 cmp BS.BUFPAGEs-1,x - bne LA2EB +.2 cmp BS.BUFPAGEs-1,x + bne .3 lda GP.SBUFADR+1 jsr LA356 jsr BS.SetFileBuf lda GP.SBUFADR+1 adc #$04 - bcc LA2C5 + bcc .1 -LA2EB dex - bne LA2D6 +.3 dex + bne .2 -LA2EE lda GP.SBUFADR+1 +.4 lda GP.SBUFADR+1 bit GP.EXECACTV - bpl LA303 - + bpl LA2F6.8 +*-------------------------------------- LA2F6 ldx #$08 jsr LA356 jsr BS.SetFileBuf lda GP.SBUFADR+1 adc #$04 -LA303 clc -LA304 rts +LA2F6.8 clc +LA2F6.9 rts *-------------------------------------- BS.FREEBUFR lda GP.OPENCNT asl @@ -171,21 +171,21 @@ BS.FREEBUFR lda GP.OPENCNT sta XBBB8 lda GP.RSHIMEM cmp AS.HIMEM+1 - beq LA354 + beq .8 sta AS.HIMEM+1 bit GP.EXECACTV - bpl LA327 + bpl .1 jsr LA2F6 - bcc LA345 + bcc .3 -LA327 lda XBBB7 +.1 lda XBBB7 ldx GP.OPENCNT - beq LA351 + beq .5 -LA32F cmp BS.BUFPAGEs-1,x - bne LA34E +.2 cmp BS.BUFPAGEs-1,x + bne .4 lda AS.HIMEM+1 jsr LA356 @@ -195,19 +195,20 @@ LA32F cmp BS.BUFPAGEs-1,x sbc #$04 sta XBBB7 -LA345 lda AS.HIMEM+1 +.3 lda AS.HIMEM+1 sec sbc #$04 sta AS.HIMEM+1 - bcs LA327 + bcs .1 -LA34E dex - bne LA32F +.4 dex + bne .2 -LA351 jsr BS.KW.FRE -LA354 clc +.5 jsr BS.KW.FRE + +.8 clc rts - +*-------------------------------------- LA356 pha lda XBBB8 jsr BS.SetFileBuf @@ -242,6 +243,7 @@ BS.MoveMemUp ldy BS.ReqMem XA386 beq LA38F SELF MODIFIED LA388 jsr LA39A + dec ZP.A1H dec ZP.PCH @@ -264,63 +266,63 @@ LA3A3 lda AS.VARSTART+1 lda AS.VARSTART ldx AS.ARRAYSTART+1 clc - bcc LA3B3 + bcc .2 -LA3AE clc +.1 clc lda ZP.A2L adc #$07 -LA3B3 sta ZP.A2L - bcc LA3B9 +.2 sta ZP.A2L + bcc .3 inc ZP.A2H -LA3B9 eor AS.ARRAYSTART - bne LA3BF +.3 eor AS.ARRAYSTART + bne .4 cpx ZP.A2H -LA3BF clc - beq LA3D6 +.4 clc + beq .5 ldy #$00 lda (ZP.A2L),y iny eor (ZP.A2L),y - bpl LA3AE + bpl .1 lda (ZP.A2L),y - bpl LA3AE + bpl .1 iny jsr LA3FD - bra LA3AE + bra .1 -LA3D6 lda ZP.A2L +.5 lda ZP.A2L sta XBBDC -LA3DB clc +.6 clc jsr LA160 bcs LA410 -LA3E1 ldy #$00 +.7 ldy #$00 clc jsr LA3FD clc lda #$03 adc ZP.A2L sta ZP.A2L - bcc LA3F2 + bcc .8 inc ZP.A2H -LA3F2 cmp XBBDC - bne LA3E1 +.8 cmp XBBDC + bne .7 cpx ZP.A2H - bne LA3E1 + bne .7 - beq LA3DB + beq .6 *-------------------------------------- LA3FD lda (ZP.A2L),y beq LA410 @@ -337,8 +339,8 @@ LA3FD lda (ZP.A2L),y LA410 rts *-------------------------------------- -LA411 jsr LA021 - bcs LA47F +LA411 jsr BS.FRE0 + bcs .9 lda AS.ARRAYEND sec @@ -401,7 +403,7 @@ LA411 jsr LA021 sta XBBEC clc -LA47F rts +.9 rts *-------------------------------------- LA480 lda BS.BAS.HDR sta BS.ReqMem @@ -442,20 +444,26 @@ LA480 lda BS.BAS.HDR sec lda AS.HIMEM+1 sbc BS.BAS.HDR+4 - beq LA4D0 + beq .8 sta XBBE2 jsr LA3A3 -LA4D0 clc +.8 clc rts + + + + + + *-------------------------------------- BS.LINEBUFCLR80 lda #$A0 ldx #$4F -LA67E sta IO.LINEBUF+1,x +.1 sta IO.LINEBUF+1,x dex - bpl LA67E + bpl .1 rts *-------------------------------------- @@ -491,11 +499,12 @@ LA6BA stz GP.FoundBITS stz GP.FoundBITS+1 stz BS.CMDBUF stz MLI.PATHBUF - + lda GP.VDEFSLT sta GP.ParamS lda GP.VDEFDRV sta GP.ParamD + lda AS.HIMEM+1 sta BS.BUFPAGE @@ -508,13 +517,13 @@ LA6BA stz GP.FoundBITS beq LA744 asl - bmi LA747 + bmi LA747 CMDBITS0.SLOT jsr BS.GetKWInCmdBuf php pha lda GP.AllowedBITS - bpl LA6F8 + bpl LA6F8 CMDBITS0.PFIX lda #MLI.C.GETPREFIX jsr GP.GOSYSTEM @@ -529,10 +538,10 @@ LA6F8 pla LA703 cmp #'/' beq LA70B - + cmp #'.' .. or ../ beq LA70B - + cmp #'A' bcc LA73D @@ -564,7 +573,7 @@ LA70B dex lda GP.AllowedBITS lsr - bcs LA770 + bcs LA770 CMDBITS0.FN1 LA73A jmp BS.SYNERR @@ -648,7 +657,7 @@ LA7A6 lda GP.ParamS cmp #$03 bcs LA76C - +* >DEBUG lda GP.AllowedBITS and #CMDBITS0.RRUN+CMDBITS0.FN1 lsr @@ -669,7 +678,7 @@ LA7C9 bcc LA80B lda GP.FoundBITS lsr - bcs LA7E1 + bcs LA7E1 CMDBITS0.FN1 lda GP.AllowedBITS and #CMDBITS0.PFIX+CMDBITS0.FNOPT @@ -692,7 +701,7 @@ LA7ED lda GP.FoundBITS+1 stz BS.CMDBUF.LEN stz BS.CMDBUF - + lda #CMDBITS0.FN1 tsb GP.FoundBITS @@ -711,7 +720,7 @@ LA80B lda GP.XCNUM lda GP.AllowedBITS+1 and #CMDBITS1.SD beq .8 - + lda GP.FoundBITS lsr bcc LA844 @@ -723,7 +732,7 @@ LA80B lda GP.XCNUM bne LA849 lda GP.AllowedBITS - and #$08 + and #CMDBITS0.CRFLG bne LA844 lda #BS.E.PATHNFND6 @@ -945,13 +954,13 @@ LAB63 cmp #$FF LAB6F pha jsr BS.CloseAll jsr LB36B - + stz GP.ParamA stz MLI.MEMTABL+20 stz MLI.MEMTABL+21 stz MLI.MEMTABL+22 - + lda #$01 sta MLI.MEMTABL+23 lda #$20 @@ -976,12 +985,12 @@ LABA6 sec *-------------------------------------- BS.KW.CHAIN jsr LA411 lda AS.HIMEM+1 - sta BS.AS.HIMEMSave + pha ldx XBBEA dex stx AS.HIMEM+1 jsr BS.LoadBAS - ldx BS.AS.HIMEMSave + plx stx AS.HIMEM+1 bcs BS.LoadBAS0.RTS @@ -1023,7 +1032,7 @@ BS.KW.LOAD jsr BS.LoadBAS0 BS.ENTRY jsr AS.CLEAR1 jsr BS.SetState0 - + stz ZP.CH jmp AS.RESTART1 *-------------------------------------- @@ -1238,7 +1247,7 @@ BS.KW.RENAME lda GP.FoundBITS BS.KW.DELETE lda #MLI.C.DESTROY .HS 2C BIT ABS BS.SETPREFIX lda #MLI.C.SETPREFIX - + LAD9E jmp GP.GOSYSTEM *-------------------------------------- BS.KW.LOCK jsr BS.GetFileInfo diff --git a/BASIC.FX/BASIC.S.C.txt b/BASIC.FX/BASIC.S.C.txt index 68bcdf44..efdff6d8 100644 --- a/BASIC.FX/BASIC.S.C.txt +++ b/BASIC.FX/BASIC.S.C.txt @@ -409,7 +409,7 @@ BS.RAMReset bit GP.CISPARE1 lda #$FF sta AUX.RAMSIG - dec + dec $FE sta AUX.RAMSIG+1 Set $E000-$FEFF as BLOCK FREE sta IO.CLRWRITEAUX @@ -576,7 +576,7 @@ BS.ReadDirEnt lda #$59 lda $27D sta BS.CAT.EPB - lda $27C + lda $27C sta BS.CAT.EL sta GP.MLIRW.COUNT @@ -799,43 +799,44 @@ LB364 lda #$FF rts *-------------------------------------- LB36B lda GP.EXECACTV - bpl LB37B + bpl .8 sta GP.EXECFILE ldx #$08 lda BS.REFNUMs,x jsr BS.CloseA -LB37B rts +.8 rts *-------------------------------------- BS.KW.VERIFY bcs LB3B7 lda GP.FoundBITS and #CMDBITS1.R - bne LB38D + bne .8 ldy #0 jsr BS.GetMSGY jsr MON.CROUT -LB38D clc +.8 clc rts * lda #$00 -* beq LB39F +* beq LB39F BS.KW.FLUSH.1 +*-------------------------------------- BS.KW.FLUSH lda GP.FoundBITS and #CMDBITS1.R - beq LB39F + beq .1 jsr BS.CheckFilename - bcs LB3A7 + bcs .9 -LB39F sta GP.MLICF.REFNUM +.1 sta GP.MLICF.REFNUM lda #MLI.C.FLUSH jsr GP.GOSYSTEM -LB3A7 rts +.9 rts *-------------------------------------- BS.KW.OPEN php jsr BS.CheckFilename @@ -1584,6 +1585,182 @@ BS.KW.ONLINE jsr MON.CROUT BS.KW.NOMON clc rts *-------------------------------------- +* FORMAT VOLNAME,Sx,Dy +* ,A,E,F +* ,L,B +* +* d : 1,2 heads +* sss : 4,3,2,1 steppings +* => T : dev type, 0 = BLK, 255 = D2 +* => V : d0000sss +*-------------------------------------- +BS.KW.FORMAT ldx #BSX.FMT.CheckP.X + jsr BS.ToAUX + bcs .99 + + bit GP.ParamT + bmi .5 +*-------------------------------------- +* Format BLK dev +*-------------------------------------- + lda #10 + sta ZP.BUFPTR+1 fake Buffer for status & format + stz ZP.BUFPTR + + lda GP.FoundBITS+1 + and #CMDBITS1.B + bne .1 + + jsr .2 A = cmd = 0 = status + bcs .19 + + stx GP.ParamB + sty GP.ParamB+1 + stz GP.ParamB+2 + +.1 lda #3 cmd = 3 = format + + jsr .2 + + bcc BS.KW.FORMAT.CAT + +.19 lda #BS.E.IO + rts + +.2 sta ZP.CMD + + lda BS.WBlock.P.NUM unitnum : DSSS0000 + sta ZP.UNITNUM + + lsr + lsr + lsr + tax 000DSSS0 + jmp (MLI.DEVPTRS,x) +*-------------------------------------- +* Format Disk II +*-------------------------------------- +.5 stz GP.ParamB+1 Total Block Count + + ldx #3 + + bit GP.ParamV + bpl .6 + + inx 2 heads.... + +.6 lda GP.ParamE + +.7 asl + rol GP.ParamB+1 + dex + bne .7 + + sta GP.ParamB + + ldx #BSX.FMT.D2.X + jsr BS.ToAUX + bcs .99 + + bra BS.KW.FORMAT.CAT + +.99 rts +*-------------------------------------- +BS.KW.FORMAT.CAT + lda #2 512 bytes buffers + jsr BS.GETBUFR + bcs .99 + + sta BS.WBlock.P.PTR+1 + + ldx GP.ParamV + bne .10 + + lda #0 BB.ProDOS + ldx #BSX.FMT.GetCatBlk.X + jsr BS.ToAUX + + jsr BS.WBlock + bcs .9 + + ldx #BSX.FMT.GetCatBlk.X + lda #1 BB.SOS + jsr BS.ToAUX + + jsr BS.WBlock + bcs .9 + + bra .11 + +.10 ldx #BSX.FMT.GetCatBlk.X + lda #2 BB.FX 1/2 + jsr BS.ToAUX + + jsr BS.WBlock + bcs .9 + + ldx #BSX.FMT.GetCatBlk.X + lda #3 BB.FX 2/2 + jsr BS.ToAUX + + jsr BS.WBlock + bcs .9 + +.11 ldx #BSX.FMT.GetCatBlk.X + lda #4 Ist CAT block + jsr BS.ToAUX + + jsr BS.WBlock + bcs .9 + +.1 ldx #BSX.FMT.GetCatBlk.X + lda #5 Next CAT block + jsr BS.ToAUX + bcs .2 + + jsr BS.WBlock + bcs .9 + + bra .1 + +.2 ldx #BSX.FMT.GetCatBlk.X + lda #6 BM blocks + jsr BS.ToAUX + bcs .3 + + jsr BS.WBlock + bcs .9 + + bra .2 + +.3 + + + clc + +.9 php + jsr BS.FREEBUFR + lda #BS.E.IO + plp +.99 rts +*-------------------------------------- +BS.WBlock jsr MLI + .DA #MLI.C.WRITEBLOCK + .DA BS.WBlock.P + bcs .9 + + inc BS.WBlock.P.BLK + rts + +.9 lda #BS.E.IO + + rts +*-------------------------------------- +BS.WBlock.P .DA #3 +BS.WBlock.P.NUM .BS 1 +BS.WBlock.P.PTR .BS 2 +BS.WBlock.P.BLK .BS 2 +*-------------------------------------- BS.Expand2.P .DA #1 .DA MLI.PATHBUF *-------------------------------------- diff --git a/BASIC.FX/BASIC.S.D.txt b/BASIC.FX/BASIC.S.D.txt index 0a113dba..1786e584 100644 --- a/BASIC.FX/BASIC.S.D.txt +++ b/BASIC.FX/BASIC.S.D.txt @@ -141,16 +141,13 @@ XBBB8 .BS 1 *-------------------------------------- *BS.IVERSION .DA #5 *-------------------------------------- -BS.AS.HIMEMSave .BS 1 -XBBD7 .BS 1 -XBBD8 .BS 1 +* XBBD6 .BS 1 + + -XBBD9 .DA #4 -XBBDA .BS 1 -XBBDB .BS 1 XBBDC .BS 1 -XBBDD .BS 1 +*-------------------------------------- BS.TXTTAB .DA $0800 BS.MEMSIZE .DA HIMEM-$400 @@ -191,6 +188,15 @@ BS.CAT.EL .BS 1 BS.CAT.EPB .BS 1 *BS.CAT.FileCnt .BS 2 BS.CAT.EICB .BS 1 + +*-------------------------------------- +ASX.PGRMSTART .BS 2 +ASX.VARSTART .BS 2 +ASX.ARRAYSTART .BS 2 +ASX.ARRAYEND .BS 2 +ASX.STRINGSTART .BS 2 +ASX.STRINGPTR .BS 2 +ASX.HIMEM .BS 2 *-------------------------------------- .LIST ON BS.FREESPACE .EQ $BC17-* diff --git a/BASIC.FX/BASIC.S.LDR.txt b/BASIC.FX/BASIC.S.LDR.txt index 6763a6e4..dc35c6e4 100644 --- a/BASIC.FX/BASIC.S.LDR.txt +++ b/BASIC.FX/BASIC.S.LDR.txt @@ -37,26 +37,6 @@ LDR.START1 ldx #$FF jsr LDR.ShrinkRAM bcs .3 - stz Ptr1 - stz Ptr2 - - lda /LDR.MAIN.SRC - sta Ptr1+1 - lda /LDR.MAIN.DST - sta Ptr2+1 - - ldx /$BD00-HIMEM - - jsr LDR.MoveXpages - - lda /LDR.GP.SRC - sta Ptr1+1 - lda /LDR.GP.DST - sta Ptr2+1 - - ldx #$01 - jsr LDR.MoveXpages - lda bRAMFlag sta GP.CISPARE1 @@ -77,20 +57,25 @@ LDR.START1 ldx #$FF lda #%11000011 pages $B8,$B9,...,$BE,$BF protected sta MLI.MEMTABL+23 + ldx #PAKME.MAIN-PAKME.Table + ldy #LDR.MAIN.DST + lda /LDR.MAIN.DST + jsr X.Unpak.XatYA + + ldx #PAKME.GP-PAKME.Table + ldy #LDR.GP.DST + lda /LDR.GP.DST + jsr X.Unpak.XatYA + bit IO.RRAMWRAMBNK2 bit IO.RRAMWRAMBNK2 + sta IO.SETALTZP - stz Ptr1 - stz Ptr2 - - lda /LDR.AUX.SRC - sta Ptr1+1 + ldx #PAKME.AUX-PAKME.Table + ldy #LDR.AUX.DST lda /LDR.AUX.DST - sta Ptr2+1 - - ldx #$10 - jsr LDR.MoveXpages + jsr X.Unpak.XatYA sta IO.CLRALTZP bit IO.RROMBNK2 @@ -114,20 +99,8 @@ LDR.START1 ldx #$FF sta MON.POWERUPBYTE sta MON.POWERUP+1 - bmi * + bra * *-------------------------------------- -LDR.MoveXpages ldy #0 - -.1 lda (Ptr1),y - sta (Ptr2),y - iny - bne .1 - - inc Ptr1+1 - inc Ptr2+1 - dex - bne .1 - L20D3 rts *-------------------------------------- LDR.CSW cmp #$DD @@ -368,8 +341,6 @@ LDR.ShrinkRAM stz bRAMFlag dex bpl .7 - dec bRAMFlag Tell BYE to reset that... - php sei @@ -381,6 +352,8 @@ LDR.ShrinkRAM stz bRAMFlag sta IO.CLRWRITEAUX plp + + dec bRAMFlag Tell BYE to reset that... LDR.GFInfoRAM ldy #LDR.RAM lda /LDR.RAM @@ -448,7 +421,6 @@ LDR.COPYRIGHT.L .EQ *-LDR.COPYRIGHT .LIST ON LDR.SIZE .EQ *-LDR.START .LIST OFF - .BS $2400-* *-------------------------------------- MAN SAVE usr/src/basic.fx/basic.s.ldr diff --git a/BASIC.FX/BASIC.S.X.txt b/BASIC.FX/BASIC.S.X.txt index eb74c2eb..7cb6428b 100644 --- a/BASIC.FX/BASIC.S.X.txt +++ b/BASIC.FX/BASIC.S.X.txt @@ -1,9 +1,6 @@ NEW AUTO 3,1 *-------------------------------------- -ZPXPtr1 .EQ 0 -ZPXPtr2 .EQ 2 -*-------------------------------------- BSX.JMPX jmp (BSX.JMP,x) BSX.JMP @@ -25,8 +22,20 @@ BSX.MkCatLineF.X .EQ *-BSX.JMP .DA BSX.MkCatLineF BSX.Online.X .EQ *-BSX.JMP .DA BSX.Online +*-------------------------------------- +BSX.FMT.CheckP.X .EQ *-BSX.JMP + .DA BSX.FMT.CheckP +BSX.FMT.D2.X .EQ *-BSX.JMP + .DA BSX.FMT.D2 +BSX.FMT.GetCatBlk.X .EQ *-BSX.JMP + .DA BSX.FMT.GetCatBlk +*-------------------------------------- BSX.Mem.X .EQ *-BSX.JMP .DA BSX.Mem +BSX.Fre0.X .EQ *-BSX.JMP + .DA BSX.Fre0 +BSX.Fre1.X .EQ *-BSX.JMP + .DA BSX.Fre1 *-------------------------------------- BSX.CheckOpt jsr BS.TMPBUF3Reset @@ -418,7 +427,7 @@ BSX.IsIntCmd lda #BSX.IntCmds lda /BSX.IntCmds sta ZPXPtr1+1 - ldx #36 + ldx #37 stx GP.XCNUM .1 ldy #$ff @@ -472,7 +481,8 @@ BSX.IsIntCmd lda #BSX.IntCmds sec rts *-------------------------------------- -BSX.IntCmds .AT "CD" +BSX.IntCmds .AT "FORMAT" + .AT "CD" .AT "ONLINE" .AT "MEM" .AT "MTR" @@ -545,6 +555,9 @@ BSX.KW.PBITS .DA $8040 IN .DA $0000 MEM .DA $0000 ONLINE .DA $0491 CD + + .DA #$18 FORMAT + .DA #$F6 *-------------------------------------- BSX.KW.JMP .DA BS.KW.EXTERNAL 0 .DA BS.KW.IN 1 @@ -583,6 +596,7 @@ BSX.KW.JMP .DA BS.KW.EXTERNAL 0 .DA BS.KW.MEM 34 .DA BS.KW.ONLINE 35 .DA BS.KW.PREFIX 36 (CD) + .DA BS.KW.FORMAT 37 *-------------------------------------- BSX.GetErrA tax ldy BSX.MSG.IDX-2,x diff --git a/BASIC.FX/BASIC.S.XF.txt b/BASIC.FX/BASIC.S.XF.txt new file mode 100644 index 00000000..c279d1aa --- /dev/null +++ b/BASIC.FX/BASIC.S.XF.txt @@ -0,0 +1,677 @@ +NEW + AUTO 3,1 +*-------------------------------------- +BSX.HeadSelect asl A = 0/2 + + ora BSX.Slotn0 + tax x=n0/n2 + + lda IO.D2.Ph0On,x + lda IO.D2.Ph0On+4,x + + lda #1 + jsr BSX.Wait100usecA + + lda IO.D2.Ph0Off,x + lda IO.D2.Ph0Off+4,x + rts +*-------------------------------------- +BSX.Recalibrate lda #168 + + ldy BSX.Slotn0 + lda IO.D2.Ph0On,y + + lda #IO.D2.SeekTimeR + jsr BSX.Wait100usecA + +.1 dec + dec + + pha + + and #6 + ora BSX.Slotn0 + phy + plx + tay + lda IO.D2.Ph0On,y + + lda #IO.D2.SeekTimeR + jsr BSX.Wait100usecA + + lda IO.D2.Ph0Off,x + + lda #IO.D2.SeekTimeR + jsr BSX.Wait100usecA + + pla + bne .1 + + jsr BSX.Wait25600usec + + lda IO.D2.Ph0Off,y + + jmp BSX.Wait25600usec +*-------------------------------------- +BSX.MoveHead sta BSX.TargetQTrack + + lda BSX.CurrentQTrack + + bit #1 + bne .1 + + jsr BSX.SeekPhOnY we are on 0/4 or 2/4 track + bra .9 no wait, next operation will be phy/plx/Ph0On,y + +.1 cmp BSX.TargetQTrack we are on 1/4 or 3/4 + bcs .2 if CS, C > T, must move out + + inc CC: C < T, ON next PH + + .HS B0 BCS + +.2 dec CS: C > T, ON prev PH + + sta BSX.CurrentQTrack + + bra .6 Ph ON to go to 0/4 or 2/4, then wait +*-------------------------------------- +.3 bcs .4 if CS, C > T, must move out + + inc CC: C < T, ON next PH + + .HS B0 BCS + +.4 dec CS: C > T, ON prev PH + + sta BSX.CurrentQTrack + + bit #1 + bne .5 + + lda IO.D2.Ph0Off,x we must go to 0/4 or 2/4 : Off Prev Ph + bra .8 go wait.... + +.5 phy we must go on 1/4 or 3/4 + plx Y already ON, -> X for Ph0Off,x + + bcs .6 if CS, C > T, must move out + + inc CC: C < T, ON next PH + +.6 jsr BSX.SeekPhOnY now X and Y on + +.8 lda #IO.D2.SeekTimeF + + jsr BSX.Wait100usecA ...wait... + +.9 lda BSX.CurrentQTrack + cmp BSX.TargetQTrack + bne .3 + + lsr CS if X,Y on + + jsr BSX.Wait25600usec + + lda IO.D2.Ph0Off,y + bcc .90 + + lda IO.D2.Ph0Off,x + +.90 rts +*-------------------------------------- +BSX.SeekPhOnY and #6 + ora BSX.Slotn0 + tay + lda IO.D2.Ph0On,y + rts +*-------------------------------------- +BSX.Wait25600usec + lda #0 + +BSX.Wait100usecA + phx + +.1 ldx #20 (2) + +.2 dex (2) + bne .2 (3) + + dec (2) + bne .1 (3) + + plx + + rts (6) +*-------------------------------------- +BSX.FMT.CheckP lda GP.ParamS + asl + asl + asl + asl + asl + pha + lda GP.ParamD + lsr + lsr + pla + ror + sta BS.WBlock.P.NUM unitnum : DSSS0000 + + stz BS.WBlock.P.BLK + + stz GP.ParamV Standard BB + + stz GP.ParamT BLK/DiskII flag + + lda #1 + sta GP.ParamA default Head Count + + lda #4 + sta GP.ParamL default Cat Block Count + + lda GP.FoundBITS+1 + bit #CMDBITS1.L + beq .10 + + lda GP.ParamL+1 + bne .9 + + lda GP.ParamL + bne .11 + +.9 lda #BS.E.RANGE + sec + rts +*-------------------------------------- +.10 lda #4 + sta GP.ParamL Cat Block Count + +.11 lda GP.ParamS + + ora #$C0 make Cn + sta ZPXPtr1+1 + stz ZPXPtr1 + + ldx #3 4 bytes to check + +.1 ldy BSX.DiskII.OFS,x + +.2 lda (ZPXPtr1),y + eor BSX.DiskII.SIG,x + bne BSX.FMT.CheckBLK + + dex + bpl .1 + + dec GP.ParamT +*-------------------------------------- +BSX.FMT.CheckD2 lda GP.FoundBITS+1 + bit #CMDBITS1.B + bne .99 not allowed for D2 + + bit #CMDBITS1.A + beq .10 + + lda GP.ParamA+1 + bne .98 + + lda GP.ParamA + beq .98 + + cmp #3 + bcs .98 + + lsr + lsr CS if 2 heads + ror GP.ParamV => V : d0000sss + + lda GP.FoundBITS+1 + +.10 bit #CMDBITS1.E + beq .19 + + lda GP.ParamE+1 + bne .98 + + bra .20 + +.19 lda #35 + sta GP.ParamE + +.20 lda GP.FoundBITS+1 + bit #CMDBITS1.F + beq .29 + + lda GP.ParamF+1 + bne .98 + + lda GP.ParamF + beq .98 + + cmp #5 + bcs .98 + + tsb GP.ParamV => V : d0000sss + + rts + +.29 lda #4 + sta GP.ParamF Stepping + + clc + rts + +.98 lda #BS.E.RANGE + .HS 2C BIT ABS +.99 lda #BS.E.INVOPT + sec + rts +*-------------------------------------- +BSX.FMT.CheckBLK + lda GP.FoundBITS+1 + bit #CMDBITS1.A+CMDBITS1.E+CMDBITS1.F + bne .99 not allowed for BLK dev + + bit #CMDBITS1.B + beq .8 + + lda GP.ParamB+2 + bne .98 + +.8 clc + rts + +.98 lda #BS.E.RANGE + .HS 2C BIT ABS +.99 lda #BS.E.INVOPT + sec + rts +*-------------------------------------- +BSX.DiskII.OFS .HS 010305FF +BSX.DiskII.SIG .HS 20000300 +*-------------------------------------- +* GP.ParamS : Slot (1/7) +* GP.ParamD : Drive (1/2) +* GP.ParamA : Head count (1/2) +* GP.ParamE : Track count (0,...) +* GP.ParamF : Stepping (1..4) +* GP.ParamV : VolNum (0..255) +*-------------------------------------- +BSX.FMT.D2 lda GP.ParamS + asl + asl + asl + asl + sta BSX.Slotn0 + tax + +* clc + adc GP.ParamD + tay + lda IO.D2.DrvSel1-1,y + lda IO.D2.DrvOn,x + + lda #0 + ldy #6 + +.11 jsr BSX.Wait100usecA + dey + bne .11 + + jsr BSX.Recalibrate + + lda #0 + jsr BSX.HeadSelect + + lda GP.ParamV + sta X.TRKFMT.VolNum + + stz X.TRKFMT.TrkNum + stz BSX.CurrentQTrack + +.1 ldx BSX.Slotn0 + lda IO.D2.ReadProt,x test for write protected + lda IO.D2.ReadMode,x + asl + lda #BS.E.WPROT + bcs .9 + + php + sei + jsr X.TRKFMT + plp + + lda GP.ParamA head count + dec + beq .2 + + jsr BSX.HeadSelect + + inc X.TRKFMT.TrkNum + + php + sei + jsr X.TRKFMT + plp + + lda #0 + jsr BSX.HeadSelect + +.2 dec GP.ParamE track count + beq .8 + + inc X.TRKFMT.TrkNum + + lda BSX.CurrentQTrack + clc + adc GP.ParamF stepping + jsr BSX.MoveHead + bra .1 + +.8 lda #0 + jsr BSX.MoveHead + + clc + +.9 bit IO.D2.DrvOff,x + + rts +*-------------------------------------- +BSX.Slotn0 .BS 1 +BSX.CurrentQTrack .BS 1 +BSX.TargetQTrack .BS 1 +*-------------------------------------- +BSX.FMT.GetCatBlk + asl + tax + jmp (.1,x) + +.1 .DA BSX.GetCatBlk.PRODOS + .DA BSX.GetCatBlk.SOS + .DA BSX.GetCatBlk.FX1 + .DA BSX.GetCatBlk.FX2 + .DA BSX.GetCatBlk.1ST + .DA BSX.GetCatBlk.NEXT + .DA BSX.GetCatBlk.BM + +BSX.GetCatBlk.PRODOS + lda /BB.PRODOS + .HS 2C BIT ABS +BSX.GetCatBlk.SOS + lda /BB.SOS + .HS 2C BIT ABS +BSX.GetCatBlk.FX1 + lda /BB.FX2 + .HS 2C BIT ABS +BSX.GetCatBlk.FX2 + lda /BB.FX2+512 + + sta ZPXPtr1+1 + stz ZPXPtr1 + + lda BS.WBlock.P.PTR+1 + sta ZPXPtr2+1 + stz ZPXPtr2 + + ldy #0 + ldx #2 + +.1 lda (ZPXPtr1),y + sta (ZPXPtr2),y + iny + bne .1 + + inc ZPXPtr1+1 + inc ZPXPtr2+1 + dex + bne .1 + + clc + rts +*-------------------------------------- +BSX.GetCatBlk.1ST + jsr BSX.GetCatBlk.Size + jsr BSX.GetCatBlk.CLR + + lda BS.WBlock.P.PTR+1 + sta ZPXPtr2+1 + + lda GP.ParamL cat blocks + dec + sta BSX.GetCatBlk.CNT + beq .1 + + lda #3 + sta BSX.GetCatBlk.IDX + + ldy #$02 Next Cat Block = 3 + sta (ZPXPtr2),y + +.1 +* lda BS.CMDBUF.LEN +* and #$F0 +* bne .9 + +* lda BS.CMDBUF.LEN + + lda #$F7 BLANK+s+d + + ldy #$04 storage_type+filelen + sta (ZPXPtr2),y + + ldx #0 + +.2 +* lda BS.CMDBUF,x +* jsr BSX.ToUpper + + lda BSX.GetCatBlk.BLANK,x + inx + iny + sta (ZPXPtr2),y +* cpx BS.CMDBUF.LEN + cpx #5 + bne .2 + + lda GP.ParamS + ora #$30 + iny + sta (ZPXPtr2),y + lda GP.ParamD + ora #$30 + iny + sta (ZPXPtr2),y + + ldy #$1C+3 date_time + ldx #3 + +.3 lda MLI.DATETIME,x + sta (ZPXPtr2),y + dey + dex + bpl .3 + + ldy #$22 access + lda #$C3 + sta (ZPXPtr2),y + + iny entry_length + lda #$27 + sta (ZPXPtr2),y + + iny entries_per_block + lda #$0D + sta (ZPXPtr2),y + + ldy #$27 bit_map_pointer + + lda GP.ParamL + inc + inc + sta (ZPXPtr2),y + + ldy #$29 total_blocks + + lda GP.ParamB + sta (ZPXPtr2),y + eor #$ff + sta BSX.GetCatBlk.nCnt + + iny + lda GP.ParamB+1 + sta (ZPXPtr2),y + eor #$ff + sta BSX.GetCatBlk.nCnt+1 + + clc + rts + +.9 lda #BS.E.INVOPT + sec + rts +*-------------------------------------- +BSX.GetCatBlk.NEXT + sec + dec BSX.GetCatBlk.CNT + bmi .9 + + jsr BSX.GetCatBlk.CLR + + lda BSX.GetCatBlk.IDX + dec + sta (ZPXPtr2) previous block# + + ldy BSX.GetCatBlk.CNT + beq .1 + + inc + inc + sta BSX.GetCatBlk.IDX + + ldy #2 next block# + sta (ZPXPtr2),y + +.1 clc + +.9 rts +*-------------------------------------- +BSX.GetCatBlk.BM + sec + dec BSX.GetCatBlk.BMCNT + bmi .9 + + jsr BSX.GetCatBlk.CLR + +* ldy #0 + ldx #2 + + lda BSX.GetCatBlk.UB + beq .4 + +.1 lda #%10000000 + +.2 dec BSX.GetCatBlk.UB + bmi .5 + + inc BSX.GetCatBlk.nCnt + bne .3 + + inc BSX.GetCatBlk.nCnt+1 + +.3 lsr + bne .2 + + iny + bra .1 + +.4 lda #%10000000 + +.5 inc BSX.GetCatBlk.nCnt + bne .6 + + inc BSX.GetCatBlk.nCnt+1 + beq .8 + +.6 pha + eor (ZPXPtr2),y + sta (ZPXPtr2),y + pla + lsr + bne .5 + + iny + bne .4 + + inc ZPXPtr2+1 + dex + bne .4 + +.8 clc + +.9 rts +*-------------------------------------- +BSX.GetCatBlk.Size + clc + lda GP.ParamB total blocks + beq .1 + + sec + +.1 lda GP.ParamB+1 + bit #$0f + beq .2 + + sec + +.2 php + lsr + lsr + lsr + lsr + plp + adc #0 + sta BSX.GetCatBlk.BMCNT + + inc +1 (ProDOS) + inc +1 (SOS) + adc GP.ParamL +x (cat blocks) + sta BSX.GetCatBlk.UB + + rts +*-------------------------------------- +BSX.GetCatBlk.CLR + lda BS.WBlock.P.PTR+1 + sta ZPXPtr2+1 + pha + stz ZPXPtr2 + + lda #0 + tay + + ldx #2 + +.1 sta (ZPXPtr2),y + iny + bne .1 + + inc ZPXPtr2+1 + dex + bne .1 + + pla + sta ZPXPtr2+1 + + rts +*-------------------------------------- +BSX.GetCatBlk.BLANK .AS "BLANK" +BSX.GetCatBlk.BMCNT .BS 1 +BSX.GetCatBlk.UB .BS 1 +BSX.GetCatBlk.CNT .BS 1 +BSX.GetCatBlk.IDX .BS 1 +BSX.GetCatBlk.nCnt .BS 2 +*-------------------------------------- +MAN +SAVE usr/src/basic.fx/basic.s.xf +LOAD usr/src/basic.fx/basic.s +ASM diff --git a/BASIC.FX/BASIC.S.XM.txt b/BASIC.FX/BASIC.S.XM.txt new file mode 100644 index 00000000..cee8afbb --- /dev/null +++ b/BASIC.FX/BASIC.S.XM.txt @@ -0,0 +1,313 @@ +NEW + AUTO 3,1 +*-------------------------------------- +XBBD7 .BS 1 +XBBD8 .BS 1 + +XBBD9 .BS 1 .DA #4 ???? +XBBDA .BS 1 +XBBDB .BS 1 +XBBDD .BS 1 +*-------------------------------------- +BSX.FRE0 jsr BSX.FRE1 + bcs .9 + + lda ASX.PGRMSTART+1 + sta BS.TXTTAB+1 + lda ASX.PGRMSTART + sta BS.TXTTAB + + lda ASX.HIMEM+1 + sta XBBD8 + lda #$03 + sta XBBD9 + + lda ASX.STRINGSTART+1 + sta BS.MEMSIZE+1 + + lda #$00 + sta BS.MEMSIZE + bra BSX.FRE2 Z + +.9 rts +*-------------------------------------- +BSX.FRE1 stz BS.TXTTAB + + lda ASX.HIMEM+1 + sta XBBD8 + lda #$03 + sta XBBD9 + + lda ASX.STRINGSTART+1 + sta BS.TXTTAB+1 + sec + sbc ASX.ARRAYEND+1 + cmp #$07 + bcc .1 + + sbc #$03 + sta XBBD9 + + lda ASX.ARRAYEND+1 + adc #$00 + sta XBBD8 + + lda ASX.HIMEM+1 + sbc ASX.STRINGSTART+1 + adc #$01 + cmp XBBD9 + bcs .1 + + sta XBBD9 + +.1 lda ASX.HIMEM+1 + sta BS.MEMSIZE+1 + + lda ASX.HIMEM + sta BS.MEMSIZE + sta ASX.STRINGSTART +*-------------------------------------- +BSX.FRE2 clc + beq .1 + + sec + +.1 lda BS.MEMSIZE+1 + sta ASX.STRINGSTART+1 + sbc #$00 + sta XBBDA + adc #$00 + sta XBBDB + lda ASX.ARRAYEND+1 + adc #$01 + sta XBBDD + +.2 lda ASX.VARSTART + sbc #$06 + sta ZP.A2L + + lda ASX.VARSTART+1 + sbc #$00 + sta ZP.A2H + + lda ASX.ARRAYSTART + sta XBBDC + lda XBBDA + cmp BS.TXTTAB+1 + bcc .9 + + sbc XBBD9 + sta XBBD7 + + lda ASX.STRINGSTART+1 + sbc XBBDA + sbc XBBD7 + eor #$FF + adc #$02 + cmp XBBD7 + bcc .3 + + lda XBBD7 + +.3 cmp BS.TXTTAB+1 + bcs .4 + + lda BS.TXTTAB+1 + sbc #$00 + +.4 sta XBBDA + jsr BSX.LA199 + ldx ASX.ARRAYSTART+1 + jsr BSX.LA0FB + bcs .5 + + jsr BSX.LA131 + lda XBBDA + sta XBBDB + bcc .2 + +.5 lda #BS.E.NOBUFFER +.9 rts +*-------------------------------------- +BSX.LA0FB clc + +.1 lda ZP.A2L + adc #$07 + sta ZP.A2L + bcc .2 + + inc ZP.A2H + +.2 eor ASX.ARRAYSTART + bne .3 + + cpx ZP.A2H + beq BSX.LA12F + +.3 ldy #$00 + lda (ZP.A2L),y + iny + eor (ZP.A2L),y + bpl BSX.LA0FB + + lda (ZP.A2L),y + bpl BSX.LA0FB + + ldy #$04 + lda (ZP.A2L),y + cmp XBBDA + bcc .1 + + cmp XBBDB + bcs BSX.LA0FB + + jsr BSX.LA1BC + bcc .1 + + rts + +BSX.LA12F clc + rts +*-------------------------------------- +BSX.LA131 jsr BSX.LA160 + bcs BSX.LA12F + +.1 ldy #$02 + lda (ZP.A2L),y + cmp XBBDA + bcc .2 + + cmp XBBDB + bcs .2 + + jsr BSX.LA1BC + bcc .3 + + rts + +.2 clc + +.3 lda #$03 + adc ZP.A2L + sta ZP.A2L + bcc .4 + + inc ZP.A2H + +.4 cmp XBBDC + bne .1 + + cpx ZP.A2H + bne .1 + + beq BSX.LA131 +*-------------------------------------- +BSX.LA160 clc + lda XBBDC + sta ZP.A2L + stx ZP.A2H + eor ASX.ARRAYEND + bne .1 + + cpx ASX.ARRAYEND+1 + beq .9 + +.1 ldy #$02 + lda (ZP.A2L),y + adc ZP.A2L + sta XBBDC + iny + lda (ZP.A2L),y + adc ZP.A2H + tax + ldy #$00 + lda (ZP.A2L),y + iny + eor (ZP.A2L),y + bpl BSX.LA160 + + ldy #$04 + lda (ZP.A2L),y + asl + adc #$05 + adc ZP.A2L + sta ZP.A2L + bcc .9 + + inc ZP.A2H + + clc +.9 rts +*-------------------------------------- +BSX.LA199 lda XBBD7 + sta ZP.PCH + lda XBBD8 + sta ZP.A1H + ldy #$00 + sty ZP.PCL + sty ZP.A1L + ldx XBBD9 + inx + +.1 lda (ZP.PCL),y + sta (ZP.A1L),y + iny + bne .1 + + inc ZP.A1H + inc ZP.PCH + dex + bne .1 + + rts +*-------------------------------------- +BSX.LA1BC cmp XBBD7 + bcc .1 + + sbc XBBD7 + clc + adc XBBD8 + +.1 sta ZP.PCH + dey + lda (ZP.A2L),y + sta ZP.PCL + dey + + sec + lda ASX.STRINGSTART + sbc (ZP.A2L),y + sta ASX.STRINGSTART + sta .3+1 + iny + sta (ZP.A2L),y + + lda ASX.STRINGSTART+1 + sbc #$00 + sta ASX.STRINGSTART+1 + sta .3+2 + iny + sta (ZP.A2L),y + dey + dey + lda (ZP.A2L),y + beq .8 + + tay + +.2 dey + lda (ZP.PCL),y +.3 sta $FFFF,y SELF MODIFIED + tya + bne .2 + +.8 clc + lda XBBDD + sbc ASX.STRINGSTART+1 + rts +*-------------------------------------- +*-------------------------------------- +MAN +SAVE usr/src/basic.fx/basic.s.xm +LOAD usr/src/basic.fx/basic.s +ASM diff --git a/BASIC.FX/BASIC.S.txt b/BASIC.FX/BASIC.S.txt index 8b065a8b..a13492e7 100644 --- a/BASIC.FX/BASIC.S.txt +++ b/BASIC.FX/BASIC.S.txt @@ -10,6 +10,8 @@ NEW bpl :1 sta $C010 .EM +*-------------------------------------- + .INB inc/io.d2.i *-------------------------------------- HIMEM .EQ $A000 LOWERCASE .EQ 1 @@ -35,29 +37,40 @@ BS.E.DUPFILE .EQ $13 BS.E.FBUSTY .EQ $14 BS.E.FSTILLOPEN .EQ $15 *-------------------------------------- -CMDBITS0.PFIX .EQ $80 ;Prefix needs fetching, pathname optional -CMDBITS0.SLOT .EQ $40 ;No parameters to be processed -CMDBITS0.RRUN .EQ $20 ;Command only valid during program -CMDBITS0.FNOPT .EQ $10 ;Filename is optional -CMDBITS0.CRFLG .EQ $08 ;CREATE allowed -CMDBITS0.T .EQ $04 ;File type -CMDBITS0.FN2 .EQ $02 ;Filename '2' for RENAME -CMDBITS0.FN1 .EQ $01 ;Filename expected +CMDBITS0.PFIX .EQ $80 Prefix needs fetching, pathname optional +CMDBITS0.SLOT .EQ $40 No parameters to be processed +CMDBITS0.RRUN .EQ $20 Command only valid during program +CMDBITS0.FNOPT .EQ $10 Filename is optional +CMDBITS0.CRFLG .EQ $08 CREATE allowed +CMDBITS0.T .EQ $04 File type +CMDBITS0.FN2 .EQ $02 Filename '2' for RENAME +CMDBITS0.FN1 .EQ $01 Filename expected -CMDBITS1.A .EQ $80 ;Address -CMDBITS1.B .EQ $40 ;Byte -CMDBITS1.E .EQ $20 ;End address -CMDBITS1.L .EQ $10 ;Length -CMDBITS1.LINE .EQ $08 ;'@' line number -CMDBITS1.SD .EQ $04 ;Slot and drive numbers -CMDBITS1.F .EQ $02 ;Field -CMDBITS1.R .EQ $01 ;Record -CMDBITS1.V .EQ $00 ;Volume number ignored +CMDBITS1.A .EQ $80 Address +CMDBITS1.B .EQ $40 Byte +CMDBITS1.E .EQ $20 End address +CMDBITS1.L .EQ $10 Length +CMDBITS1.LINE .EQ $08 '@' line number +CMDBITS1.SD .EQ $04 Slot and drive numbers +CMDBITS1.F .EQ $02 Field +CMDBITS1.R .EQ $01 Record + +CMDBITS1.V .EQ $00 Volume number ignored *-------------------------------------- -Ptr1 .EQ 0 -Ptr2 .EQ 2 -ZPCode .EQ 4 -bRAMFlag .EQ 6 +ZPPtr1 .EQ 0 +ZPPtr2 .EQ 2 +ZPInBufPtr .EQ 4 +ZPOutBufPtr .EQ 6 + +ZPnCnt .EQ 8 + +ZPInMask .EQ 10 +ZPBLOfsLBits .EQ 11 +ZPBLOfsHBits .EQ 12 +ZPBLLenBits .EQ 13 +bRAMFlag .EQ 14 + +ZPCode .EQ 15 ZP.WNDLFT .EQ $20 ZP.WNDWDT .EQ $21 @@ -79,6 +92,13 @@ ZP.A1L .EQ $3C ZP.A1H .EQ $3D ZP.A2L .EQ $3E ZP.A2H .EQ $3F +ZP.A4L .EQ $40 +ZP.A4H .EQ $41 + +ZP.CMD .EQ $42 +ZP.UNITNUM .EQ $43 +ZP.BUFPTR .EQ $44 +ZP.BLKNUM .EQ $46 AS.LINNUM .EQ $50 @@ -99,6 +119,9 @@ AS.ERRNUM .EQ $DE AS.TRCFLG .EQ $F2 AS.REMSTK .EQ $F8 *-------------------------------------- +ZPXPtr1 .EQ 0 +ZPXPtr2 .EQ 2 +*-------------------------------------- IO.LINEBUF .EQ $200 *-------------------------------------- DIRENTBUF .EQ $259 @@ -168,6 +191,7 @@ MLI.DEVNUM .EQ $BF30 MLI.DEVCNT .EQ $BF31 MLI.DEVLST .EQ $BF32 MLI.MEMTABL .EQ $BF58 +MLI.DATETIME .EQ $BF90 MLI.LEVEL .EQ $BF94 MLI.MACHID .EQ $BF98 MLI.SLTBYT .EQ $BF99 @@ -222,22 +246,67 @@ MON.SETVID .EQ $FE93 MON.ENTERMON .EQ $FF69 *-------------------------------------- .INB usr/src/basic.fx/basic.s.ldr +*-------------------------------------- +X.Unpak.XatYA sty ZPOutBufPtr + sta ZPOutBufPtr+1 + lda PAKME.Table,x + sta ZPInBufPtr + lda PAKME.Table+1,x + sta ZPInBufPtr+1 + .INB usr/src/shared/x.unpak.s +*-------------------------------------- +PAKME.Table +PAKME.MAIN .DA MAIN.PAK +PAKME.GP .DA GP.PAK +PAKME.AUX .DA AUX.PAK + +MAIN.PAK .DA #0 + .DA MAIN.LEN + LDR.MAIN.SRC .PH HIMEM LDR.MAIN.DST .EQ * .INB usr/src/basic.fx/basic.s.a .INB usr/src/basic.fx/basic.s.b .INB usr/src/basic.fx/basic.s.c .INB usr/src/basic.fx/basic.s.d - .EP +MAIN.LEN .EQ *-LDR.MAIN.DST + .EP + +GP.PAK .DA #0 + .DA GP.LEN + LDR.GP.SRC .PH $BE00 LDR.GP.DST .EQ * .INB usr/src/basic.fx/basic.s.gp - .EP -LDR.AUX.SRC .PH $E000 -LDR.AUX.DST .EQ * - .INB usr/src/basic.fx/basic.s.x - .INB usr/src/basic.fx/basic.s.xm +GP.LEN .EQ *-LDR.GP.DST .EP + +AUX.PAK .DA #0 + .DA AUX.LEN + +LDR.AUX.SRC .EQ * +LDR.AUX.DST .EQ $E000 +BB.PRODOS .EQ $E000 + .INB usr/src/shared/x.bb.prodos.s +BB.SOS .EQ $E200 + .INB usr/src/shared/x.bb.sos.s +BB.FX2 .EQ $E400 + .INB usr/src/shared/x.bb.fx2.s +X.TRkFMT.Z .EQ $10 + .PH $E800 + .INB usr/src/shared/x.trkfmt.s + .BS $E900-* + .LIST OFF + .INB usr/src/basic.fx/basic.s.xf + .INB usr/src/basic.fx/basic.s.xm + .INB usr/src/basic.fx/basic.s.x + .EP +AUX.LEN .EQ *-LDR.AUX.SRC +*-------------------------------------- + .AS "PAKME" TAG + .DA $2000 BIN ORG + .DA #3 Chunk Count + .DA PAKME.Table Chunks *-------------------------------------- MAN SAVE usr/src/basic.fx/basic.s diff --git a/BIN/FORMAT.S.txt b/BIN/FORMAT.S.txt index 98beaf59..47dd8eae 100644 --- a/BIN/FORMAT.S.txt +++ b/BIN/FORMAT.S.txt @@ -357,33 +357,36 @@ CS.RUN.LL.DISKII .2 jsr CS.RUN.CheckCtrlC bcs .9 - >PUSHW L.MSG.LLDISK2 - >PUSHB CurHead - >PUSHB CurTrack - inc - >PUSHA - >PUSHB TrkCnt - >PUSHBI 4 - >SYSCALL PrintF + jsr CS.RUN.LL.DISKII.P bcs .9 - >PUSHB DSSS0000 - >PUSHB VolNum - >PUSHB CurHead - >PUSHB CurTrack - >PUSHWZ Empty track - >LIBCALL hLIBBLKDEV,LIBBLKDEV.D2TrkWrite16s + jsr CS.RUN.LL.DISKII.FT bcs .9 + inc CurTrack + inc CurHead dec HCounter - bne .2 + beq .3 - dec TCounter - beq .8 + >PUSHB DSSS0000 + >PUSHBI 1 + >LIBCALL hLIBBLKDEV,LIBBLKDEV.D2HeadSelect + bcs .9 + + jsr CS.RUN.LL.DISKII.FT + bcs .9 + + >PUSHB DSSS0000 + >PUSHBI 0 + >LIBCALL hLIBBLKDEV,LIBBLKDEV.D2HeadSelect + bcs .9 inc CurTrack +.3 dec TCounter + beq .8 + lda CurQTrack * clc adc Stepping @@ -414,20 +417,25 @@ CS.RUN.LL.DISKII jsr CS.RUN.LL.DISKII.V bcs .99 - -* jsr CS.RUN.MotorOn -* lda #20 -* jsr CS.RUN.Wait - -.80 -* >PUSHB DSSS0000 -* >LIBCALL hLIBBLKDEV,LIBBLKDEV.D2Recalibrate - -* lda #20 -* jsr CS.RUN.Wait - - clc +.80 rts +*-------------------------------------- +CS.RUN.LL.DISKII.P + >PUSHW L.MSG.LLDISK2 + >PUSHB CurHead + >PUSHB CurTrack + inc + >PUSHA + >PUSHB TrkCnt + >PUSHBI 4 + >SYSCALL PrintF + rts +*-------------------------------------- +CS.RUN.LL.DISKII.FT + >PUSHB DSSS0000 + >PUSHB VolNum + >PUSHB CurTrack + >LIBCALL hLIBBLKDEV,LIBBLKDEV.D2TrkFmt16s rts *-------------------------------------- CS.RUN.LL.DISKII.V @@ -795,7 +803,7 @@ OptionVars .DA #bLL,#bLL,#bCustomBlkSize,#bCustomBlkSize Disk2.Default .DA 280 BlkCnt .DA #35 TrkCnt .DA #4 Stepping - .DA #1 VolNum + .DA #$00 VolNum .DA #0 AltBB .DA #1 HeadCnt .BS 1 @@ -803,7 +811,7 @@ Disk2.Default .DA 280 BlkCnt Disk2.X .DA 320 BlkCnt .DA #40 TrkCnt .DA #4 Stepping - .DA #2 VolNum + .DA #$00 VolNum .DA #0 AltBB .DA #1 HeadCnt .BS 1 @@ -811,7 +819,7 @@ Disk2.X .DA 320 BlkCnt Disk2.H .DA 384 BlkCnt .DA #48 TrkCnt .DA #3 Stepping - .DA #129 VolNum + .DA #$03 VolNum .DA #$80 AltBB .DA #1 HeadCnt .BS 1 @@ -819,7 +827,7 @@ Disk2.H .DA 384 BlkCnt Disk2.HX .DA 432 BlkCnt .DA #54 TrkCnt .DA #3 Stepping - .DA #130 VolNum + .DA #$03 VolNum .DA #$80 AltBB .DA #1 HeadCnt .BS 1 @@ -827,7 +835,7 @@ Disk2.HX .DA 432 BlkCnt Disk2.DefaultD .DA 640 BlkCnt .DA #40 TrkCnt .DA #4 Stepping - .DA #192 VolNum + .DA #$84 VolNum .DA #$80 AltBB .DA #2 HeadCnt .BS 1 @@ -835,7 +843,7 @@ Disk2.DefaultD .DA 640 BlkCnt Disk2.XD .DA 640 BlkCnt .DA #40 TrkCnt .DA #4 Stepping - .DA #192 VolNum + .DA #84 VolNum .DA #$80 AltBB .DA #2 HeadCnt .BS 1 @@ -843,7 +851,7 @@ Disk2.XD .DA 640 BlkCnt Disk2.HD .DA 1280 BlkCnt .DA #80 TrkCnt .DA #2 Stepping - .DA #193 VolNum + .DA #$82 VolNum .DA #$80 AltBB .DA #2 HeadCnt .BS 1 @@ -851,7 +859,7 @@ Disk2.HD .DA 1280 BlkCnt Disk2.HXD .DA 1280 BlkCnt .DA #80 TrkCnt .DA #2 Stepping - .DA #193 VolNum + .DA #$82 VolNum .DA #$80 AltBB .DA #2 HeadCnt .BS 1 diff --git a/INC/IO.D2.I.txt b/INC/IO.D2.I.txt index df116cb2..a6255238 100644 --- a/INC/IO.D2.I.txt +++ b/INC/IO.D2.I.txt @@ -31,5 +31,7 @@ IO.D2.WLoad .EQ $C08D W IO.D2.ReadMode .EQ $C08E R IO.D2.WriteMode .EQ $C08F W *-------------------------------------- +*IO.D2.ReadSect .EQ $Cn5C +*-------------------------------------- MAN SAVE inc/io.d2.i diff --git a/INC/LIBBLKDEV.I.txt b/INC/LIBBLKDEV.I.txt index 6cc4d178..482995b5 100644 --- a/INC/LIBBLKDEV.I.txt +++ b/INC/LIBBLKDEV.I.txt @@ -6,8 +6,10 @@ LIBBLKDEV.BuildProDOSCat .EQ 6 LIBBLKDEV.D2MotorControl .EQ 8 LIBBLKDEV.D2Recalibrate .EQ 10 LIBBLKDEV.D2MoveHead .EQ 12 -LIBBLKDEV.D2TrkRead16s .EQ 14 -LIBBLKDEV.D2TrkWrite16s .EQ 16 +LIBBLKDEV.D2HeadSelect .EQ 14 +LIBBLKDEV.D2TrkFmt16s .EQ 16 +LIBBLKDEV.D2TrkRead16s .EQ 18 +LIBBLKDEV.D2TrkWrite16s .EQ 20 *-------------------------------------- MAN SAVE inc/libblkdev.i diff --git a/LIB/LIBBLKDEV.S.D2.txt b/LIB/LIBBLKDEV.S.D2.txt index 32b38c8b..df955fe5 100644 --- a/LIB/LIBBLKDEV.S.D2.txt +++ b/LIB/LIBBLKDEV.S.D2.txt @@ -65,6 +65,31 @@ D2.Recalibrate >PULLB D2.DrvSlt .9 rts */-------------------------------------- *\-------------------------------------- +D2.HeadSelect >PULLB D2.HeadNum + >PULLB D2.DrvSlt + + jsr D2.CheckDiskII + bcs .9 + + lda D2.HeadNum A = 0/1 + + asl A = 0/2 + + ora D2.Slotn0 + tax x=n0/n2 + + lda IO.D2.Ph0On,x + lda IO.D2.Ph0On+4,x + + lda #1 + jsr D2.Wait100usecA + + lda IO.D2.Ph0Off,x + lda IO.D2.Ph0Off+4,x + +.9 rts +*/-------------------------------------- +*\-------------------------------------- D2.MoveHead >PULLB D2.TargetQTrack >PULLB D2.CurrentQTrack >PULLB D2.DrvSlt @@ -136,7 +161,7 @@ D2.MoveHead.SEI lda D2.CurrentQTrack jsr D2.Wait25600usec - lda IO.D2.Ph0Off,y + lda IO.D2.Ph0Off,y bcc .90 lda IO.D2.Ph0Off,x @@ -149,11 +174,61 @@ D2.SeekPhOnY and #6 lda IO.D2.Ph0On,y rts */-------------------------------------- +* # D2TrkFmt16s +* Write a track (16 sectors) +* PUSHB DSSS0000 +* PUSHB VolNum +* PUSHB HeadNum (0,1) +* PUSHB TrackNum +* ## RETURN VALUE +* CC : success +* CS : A = Error +*\-------------------------------------- +D2.TrkFmt16s >PULLB D2.TrkNum + >PULLB D2.VolNum + >PULLB D2.DrvSlt + + jsr D2.CheckDiskII + bcs .99 + + php + sei + + lda D2.VolNum + sta X.TRKFMT.VolNum + + lda D2.TrkNum + sta X.TRKFMT.TrkNum + + ldy #D2.TrkFormat.Size + +.1 lda D2.TrkFormat-1,y + sta $1ff,y + dey + bne .1 + + ldx D2.Slotn0 + lda IO.D2.ReadProt,x + lda IO.D2.ReadMode,x + bmi .9 Write protected + + jsr $200 + + plp + clc + rts + +.9 lda #MLI.E.WRTPROT + + plp + sec +.99 rts +*/-------------------------------------- * # D2TrkRead16s * Write a track (16 sectors) -* PUSHB = DSSS0000 -* PUSHB = TrackNum * 4 : 0->136+ -* PUSHW = Ptr to 16*256 buffer +* PUSHB DSSS0000 +* PUSHB TrackNum +* PUSHW Ptr to 16*256 buffer * ## RETURN VALUE * CC : success, A = VolNum * CS : A = Error @@ -173,10 +248,9 @@ D2.TrkRead16s.RTS */-------------------------------------- * # D2TrkWrite16s * Write a track (16 sectors) -* PUSHB = DSSS0000 -* PUSHB = VolNum -* PUSHB = HeadNum (0,1) -* PUSHB = TrackNum * 4 : 0->136+ +* PUSHB DSSS0000 +* PUSHB VolNum +* PUSHB TrackNum * PUSHW = Ptr to 16*256 buffer * ## RETURN VALUE * CC : success @@ -184,7 +258,6 @@ D2.TrkRead16s.RTS *\-------------------------------------- D2.TrkWrite16s >PULLW ZPPtr1 >PULLB D2.TrkNum - >PULLB D2.HeadNum >PULLB D2.VolNum >PULLB D2.DrvSlt @@ -258,12 +331,9 @@ D2.TrkWrite16s >PULLW ZPPtr1 lda #0 sta (ZPPtr2) - bit D2.VolNum - bvc .80 - jsr D2.HeadSelect -.80 jsr D2.WriteTrackPtr2 + jsr D2.WriteTrackPtr2 php pha @@ -291,9 +361,9 @@ D2.TrkWriteNIB >PULLW ZPPtr1 >PULLB D2.DrvSlt jsr D2.CheckDiskII was it a DISK II ? - bcs .9 + bcs .99 -.9 rts +.99 rts *-------------------------------------- * A=DSSS0000 *-------------------------------------- @@ -361,23 +431,6 @@ D2.DrvSpinCheck ldy #0 .8 sec rts *-------------------------------------- -D2.HeadSelect lda D2.HeadNum A = 0/1 - - asl A = 0/2 - - ora D2.Slotn0 - tax x=n0/n2 - - lda IO.D2.Ph0On,x - lda IO.D2.Ph0On+4,x - - lda #1 - jsr D2.Wait100usecA - - lda IO.D2.Ph0Off,x - lda IO.D2.Ph0Off+4,x - rts -*-------------------------------------- D2.Wait25600usec lda #0 diff --git a/LIB/LIBBLKDEV.S.txt b/LIB/LIBBLKDEV.S.txt index d3db55ea..04d2aaba 100644 --- a/LIB/LIBBLKDEV.S.txt +++ b/LIB/LIBBLKDEV.S.txt @@ -40,6 +40,7 @@ ZPPtr1 .EQ ZPLIB ZPPtr2 .EQ ZPLIB+2 ZPPtr3 .EQ ZPLIB+4 ZPPtr4 .EQ ZPLIB+6 +X.TRkFMT.Z .EQ ZPLIB+8 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -62,13 +63,16 @@ CS.START cld .DA D2.MotorControl .DA D2.Recalibrate .DA D2.MoveHead + .DA D2.HeadSelect + .DA D2.TrkFmt16s .DA D2.TrkRead16s .DA D2.TrkWrite16s .DA D2.TrkReadNIB .DA D2.TrkWriteNIB -L.D2.TrkWriter .DA D2.TrkWriter -L.ProDOS.Boot .DA ProDOS.Boot -L.ProDOSFX.Boot .DA ProDOSFX.Boot +L.X.BB.PRODOS .DA X.BB.PRODOS +L.X.BB.SOS .DA X.BB.SOS +L.X.BB.FXpart1 .DA X.BB.FX2 +L.X.BB.FXpart2 .DA X.BB.FX2+512 .DA 0 *-------------------------------------- LIB.LOAD @@ -97,11 +101,15 @@ GetProDOSCatSize.I clc for now, no partial bitmap blk to add tay DevSize is xxxxxxxx00000000 ? beq .1 + sec + .1 lda VolDirHdr.TB+1 Get DevSizeHI bit #$0f DevSize is xxxx000000000000 ? beq .2 + sec + .2 php lsr lsr @@ -142,41 +150,33 @@ BuildProDOSCat >PULLW ZPPtr1 DstBuf ldx #3 -.1 lda DATELO,x +.10 lda DATELO,x sta VolDirHdr.CT,x dex - bpl .1 + bpl .10 + + bit VolDirHdr.Options + bmi .11 * Blk 0 : ProDOS Boot Code - >LDYA L.ProDOS.Boot - bit VolDirHdr.Options - bpl .11 - - >LDYA L.ProDOSFX.Boot - -.11 >STYA ZPPtr3 - - ldy #0 - ldx #2 2 pages - -.2 lda (ZPPtr3),y - sta (ZPPtr1),y - iny - bne .2 - - inc ZPPtr3+1 - inc ZPPtr1+1 - dex - bne .2 + >LDYA L.X.BB.PRODOS + jsr Add2Pages * Blk 1 : (SOS boot code) - inc ZPPtr1+1 - inc ZPPtr1+1 + >LDYA L.X.BB.SOS + jsr Add2Pages + bra .20 + +.11 >LDYA L.X.BB.FXpart1 + jsr Add2Pages + + >LDYA L.X.BB.FXpart2 + jsr Add2Pages * Blk 2 : First Directory Block - jsr ZeroPtr1 +.20 jsr ZeroPtr1 * ldy #0 @@ -333,10 +333,36 @@ ZeroPtr1 phy ply rts *-------------------------------------- +Add2Pages >STYA ZPPtr3 + + ldy #0 + ldx #2 2 pages + +.1 lda (ZPPtr3),y + sta (ZPPtr1),y + iny + bne .1 + + inc ZPPtr3+1 + inc ZPPtr1+1 + dex + bne .1 + + rts +*-------------------------------------- .INB usr/src/lib/libblkdev.s.d2 *-------------------------------------- CS.END *-------------------------------------- +* TrkFormat +* X = Slot Cn +*-------------------------------------- +D2.TrkFormat .PH $200 +D2.TrkFormat.Start + .INB usr/src/shared/x.trkfmt.s +D2.TrkFormat.Size .EQ *-D2.TrkFormat.Start + .EP +*-------------------------------------- * TrkWriter * X = Slot Cn * ZPPtr1 = Ptr To NibbleBuf @@ -529,73 +555,9 @@ FC2Nib .HS 96 *-------------------------------------- LC.BitMap .HS 8040201008040201 *-------------------------------------- -ProDOS.Boot .HS 01.38.b0.03.4c.32.a1.86.43.c9.03.08.8a.29.70.4a - .HS 4a.4a.4a.09.c0.85.49.a0.ff.84.48.28.c8.b1.48.d0 - .HS 3a.b0.0e.a9.03.8d.00.08.e6.3d.a5.49.48.a9.5b.48 - .HS 60.85.40.85.48.a0.63.b1.48.99.94.09.c8.c0.eb.d0 - .HS f6.a2.06.bc.1d.09.bd.24.09.99.f2.09.bd.2b.09.9d - .HS 7f.0a.ca.10.ee.a9.09.85.49.a9.86.a0.00.c9.f9.b0 - .HS 2f.85.48.84.60.84.4a.84.4c.84.4e.84.47.c8.84.42 - .HS c8.84.46.a9.0c.85.61.85.4b.20.12.09.b0.68.e6.61 - .HS e6.61.e6.46.a5.46.c9.06.90.ef.ad.00.0c.0d.01.0c - .HS d0.6d.a9.04.d0.02.a5.4a.18.6d.23.0c.a8.90.0d.e6 - .HS 4b.a5.4b.4a.b0.06.c9.0a.f0.55.a0.04.84.4a.ad.02 - .HS 09.29.0f.a8.b1.4a.d9.02.09.d0.db.88.10.f6.29.f0 - .HS c9.20.d0.3b.a0.10.b1.4a.c9.ff.d0.33.c8.b1.4a.85 - .HS 46.c8.b1.4a.85.47.a9.00.85.4a.a0.1e.84.4b.84.61 - .HS c8.84.4d.20.12.09.b0.17.e6.61.e6.61.a4.4e.e6.4e - .HS b1.4a.85.46.b1.4c.85.47.11.4a.d0.e7.4c.00.20.4c - .HS 3f.09.26.50.52.4f.44.4f.53.20.20.20.20.20.20.20 - .HS 20.20.a5.60.85.44.a5.61.85.45.6c.48.00.08.1e.24 - .HS 3f.45.47.76.f4.d7.d1.b6.4b.b4.ac.a6.2b.18.60.4c - .HS bc.09.a9.9f.48.a9.ff.48.a9.01.a2.00.4c.79.f4.20 - .HS 58.fc.a0.1c.b9.50.09.99.ae.05.88.10.f7.4c.4d.09 - .HS aa.aa.aa.a0.d5.ce.c1.c2.cc.c5.a0.d4.cf.a0.cc.cf - .HS c1.c4.a0.d0.d2.cf.c4.cf.d3.a0.aa.aa.aa.a5.53.29 - .HS 03.2a.05.2b.aa.bd.80.c0.a9.2c.a2.11.ca.d0.fd.e9 - .HS 01.d0.f7.a6.2b.60.a5.46.29.07.c9.04.29.03.08.0a - .HS 28.2a.85.3d.a5.47.4a.a5.46.6a.4a.4a.85.41.0a.85 - .HS 51.a5.45.85.27.a6.2b.bd.89.c0.20.bc.09.e6.27.e6 - .HS 3d.e6.3d.b0.03.20.bc.09.bc.88.c0.60.a5.40.0a.85 - .HS 53.a9.00.85.54.a5.53.85.50.38.e5.51.f0.14.b0.04 - .HS e6.53.90.02.c6.53.38.20.6d.09.a5.50.18.20.6f.09 - .HS d0.e3.a0.7f.84.52.08.28.38.c6.52.f0.ce.18.08.88 - .HS f0.f5.bd.8c.c0.10.fb.00.00.00.00.00.00.00.00.00 -*-------------------------------------- -SOS.Boot .HS 4c.6e.a0.53.4f.53.20.42.4f.4f.54.20.20.31.2e.31 - .HS 20.0a.53.4f.53.2e.4b.45.52.4e.45.4c.20.20.20.20 - .HS 20.53.4f.53.20.4b.52.4e.4c.49.2f.4f.20.45.52.52 - .HS 4f.52.08.00.46.49.4c.45.20.27.53.4f.53.2e.4b.45 - .HS 52.4e.45.4c.27.20.4e.4f.54.20.46.4f.55.4e.44.25 - .HS 00.49.4e.56.41.4c.49.44.20.4b.45.52.4e.45.4c.20 - .HS 46.49.4c.45.3a.00.00.0c.00.1e.0e.1e.04.a4.78.d8 - .HS a9.77.8d.df.ff.a2.fb.9a.2c.10.c0.a9.40.8d.ca.ff - .HS a9.07.8d.ef.ff.a2.00.ce.ef.ff.8e.00.20.ad.00.20 - .HS d0.f5.a9.01.85.e0.a9.00.85.e1.a9.00.85.85.a9.a2 - .HS 85.86.20.be.a1.e6.e0.a9.00.85.e6.e6.86.e6.86.e6 - .HS e6.20.be.a1.a0.02.b1.85.85.e0.c8.b1.85.85.e1.d0 - .HS ea.a5.e0.d0.e6.ad.6c.a0.85.e2.ad.6d.a0.85.e3.18 - .HS a5.e3.69.02.85.e5.38.a5.e2.ed.23.a4.85.e4.a5.e5 - .HS e9.00.85.e5.a0.00.b1.e2.29.0f.cd.11.a0.d0.21.a8 - .HS b1.e2.d9.11.a0.d0.19.88.d0.f6.a0.00.b1.e2.29.f0 - .HS c9.20.f0.3e.c9.f0.f0.08.ae.64.a0.a0.13.4c.d4.a1 - .HS 18.a5.e2.6d.23.a4.85.e2.a5.e3.69.00.85.e3.a5.e4 - .HS c5.e2.a5.e5.e5.e3.b0.bc.18.a5.e4.6d.23.a4.85.e2 - .HS a5.e5.69.00.85.e3.c6.e6.d0.95.ae.4f.a0.a0.1b.4c - .HS d4.a1.a0.11.b1.e2.85.e0.c8.b1.e2.85.e1.ad.66.a0 - .HS 85.85.ad.67.a0.85.86.20.be.a1.ad.68.a0.85.85.ad - .HS 69.a0.85.86.ad.00.0c.85.e0.ad.00.0d.85.e1.20.be - .HS a1.a2.07.bd.00.1e.dd.21.a0.f0.08.ae.64.a0.a0.13 - .HS 4c.d4.a1.ca.10.ed.a9.00.85.e7.e6.e7.e6.86.e6.86 - .HS a6.e7.bd.00.0c.85.e0.bd.00.0d.85.e1.a5.e0.d0.04 - .HS a5.e1.f0.06.20.be.a1.4c.8a.a1.18.ad.6a.a0.6d.08 - .HS 1e.85.e8.ad.6b.a0.6d.09.1e.85.e9.6c.e8.00.a9.01 - .HS 85.87.a5.e0.a6.e1.20.79.f4.b0.01.60.ae.32.a0.a0 - .HS 09.4c.d4.a1.84.e7.38.a9.28.e5.e7.4a.18.65.e7.a8 - .HS bd.29.a0.99.a7.05.ca.88.c6.e7.d0.f4.ad.40.c0.4c - .HS ef.a1.00.00.00.00.00.00.00.00.00.00.00.00.00.00 -*-------------------------------------- -ProDOSFX.Boot .INB usr/src/lib/libblkdev.s.bb +X.BB.PRODOS .INB usr/src/shared/x.bb.prodos.s +X.BB.SOS .INB usr/src/shared/x.bb.sos.s +X.BB.FX2 .INB usr/src/shared/x.bb.fx2.s *-------------------------------------- * Block 2 : First DIR block *-------------------------------------- diff --git a/ProDOS.FX/ProDOS.S.ILDR.txt b/ProDOS.FX/ProDOS.S.ILDR.txt index 4f9836b9..4acecfdc 100644 --- a/ProDOS.FX/ProDOS.S.ILDR.txt +++ b/ProDOS.FX/ProDOS.S.ILDR.txt @@ -20,8 +20,10 @@ ILDR.START jsr MLI check for file 'atinit' .1 lda RROMBNK2 enable ROM jsr sysentry execute ATinit *-------------------------------------- - .DO READCAT=1 - +* BOOT block read 4 directory blocks at dbuf=$C00 -> $13FF +*-------------------------------------- +ILDR.ENUMPM .DO READCAT=1 + lda LDR.MLIOL.P+1 Boot unitnum sta ILDR.MLIRB.P+1 @@ -30,7 +32,7 @@ ILDR.START jsr MLI check for file 'atinit' ldy #$02 read directory into buffer ldx #0 -.2 sta dst+1 +.22 sta dst+1 sta ILDR.MLIRB.P+3 Data buf HI sty ILDR.MLIRB.P+4 Blk Num LO stx ILDR.MLIRB.P+5 Blk Num HI @@ -38,14 +40,14 @@ ILDR.START jsr MLI check for file 'atinit' jsr MLI .DA #MLIREADBLOCK .DA ILDR.MLIRB.P - bcs .9 + bcs .99 ldy #$03 get next block# from link lda (dst),y tax dey ora (dst),y 00 00 -> Last Block - beq .8 + beq .28 lda (dst),y tay @@ -53,13 +55,11 @@ ILDR.START jsr MLI check for file 'atinit' inc inc add $200 to buffer pointer cmp /dbuf+$800 until it points past end of buffer. - bcc .2 if ok, read next block. + bcc .22 if ok, read next block. -.8 .FIN +.28 .FIN *-------------------------------------- -* BOOT block read 4 directory blocks at dbuf=$C00 -> $13FF -*-------------------------------------- -ILDR.ENUMPM .DO PM + .DO PM jsr ILDR.EnumInit @@ -68,10 +68,10 @@ ILDR.ENUMPM .DO PM lda /ILDR.KMPFX clc prefix jsr ILDR.EnumNext - bcs .4 + bcs .8 jsr ILDR.LoadFilePBuf - bcs ILDR.MLIERR + bcs .99 ldx #3 @@ -95,10 +95,12 @@ ILDR.ENUMPM .DO PM >DEBUGOA bra .1 + +.99 jmp ILDR.MLIERR - .FIN +.8 .FIN *-------------------------------------- -.4 jsr ILDR.EnumInit + jsr ILDR.EnumInit ldx #S.FI.T.SYS ldy #ILDR.SYSTEMSFX diff --git a/ProDOS.FX/ProDOS.S.XRW.txt b/ProDOS.FX/ProDOS.S.XRW.txt index d74b0515..d525d210 100644 --- a/ProDOS.FX/ProDOS.S.XRW.txt +++ b/ProDOS.FX/ProDOS.S.XRW.txt @@ -691,28 +691,26 @@ XRW.TrackSelect lda #2 bcc .1 rts - +*-------------------------------------- .4 ldx XRW.UnitIndex - lda XRW.AddrField.V - cmp #194 - bcc .5 - - lda #0 - -.5 sta XRW.D2VolNum-1,x + lda XRW.AddrField.V + sta XRW.D2VolNum-1,x + + lda XRW.AddrField.T + sta XRW.D2Trk-1,x + eor XRW.ReqTrack + beq .8 + + lda XRW.AddrField.V asl - asl CS if 2 heads + bcc .5 single sided + + bmi .5 > 192 ???? lda XRW.ReqTrack - bcc .50 - - lsr Track 160 -> 80+Carry - pha - - lda #0 Carry = Head - - rol + and #1 + rol A = 0/2 ora A2L @@ -726,14 +724,12 @@ XRW.TrackSelect lda #2 lda IO.D2.Ph0Off,y lda IO.D2.Ph0Off+4,y - pla - -.50 sta XRW.ReqTrack2 - lda XRW.AddrField.T sta XRW.D2Trk-1,x + bra .1 - cmp XRW.ReqTrack2 +.5 lda XRW.AddrField.T + cmp XRW.ReqTrack beq .8 lda XRW.BadSeekCnt @@ -751,7 +747,7 @@ XRW.TrackSelect lda #2 sta XRW.D2SeekTime-1,x .7 ldy XRW.D2Trk-1,x From actual Pos... - lda XRW.ReqTrack2 ....to Req + lda XRW.ReqTrack ....to Req jsr XRW.SeekYA X = XRW.UnitIndex bra .3 @@ -850,33 +846,41 @@ XRW.SeekPhOnY and #6 lda IO.D2.Ph0On,y rts *-------------------------------------- -* A = 0 -> 159, X = XRW.UnitIndex +* In: +* A = Logical Track 0 -> 159, +* X = XRW.UnitIndex +* D2VolNum : d0000sss +* Out: +* A = *-------------------------------------- XRW.Trk2Qtrk sta pch - bit XRW.D2VolNum-1,x - bpl .1 < $80 : x4 - - bvs .2 + lda XRW.D2VolNum-1,x + bne .1 - asl $80 < v < $BF : x3 - adc pch - rts - -.1 asl +.10 lda pch standard SS 4 qtrack stepping + asl asl rts - -* 2 sides : - -.2 lda XRW.D2VolNum-1,x > $C0 : 2 heads - lsr CS : $C1 = 80, 2 heads - lda pch - and #$FE - bcs .8 x2 for 80trk (ELITE III) +.1 bpl .2 + cmp #$85 + bcs .10 > 192 ? must be a buggy 254 + + lsr pch 2 sides + +.2 phx + and #%00000111 stepping + tax - asl x4 for 40trk (ELITE II) + lda #0 + clc + +.3 adc pch + dex + bne .3 + + plx .8 rts *-------------------------------------- @@ -888,7 +892,7 @@ XRW.Trk2Qtrk sta pch * on entry: buf is 2-byte pointer to 256 bytes of user data. * * on exit: a,x,y undefined. write routine modified to do direct conversion -* of high 6 bits of user's buffer data. +* of high 6 bits of user's buffer data. *-------------------------------------- XRW.PreNibble lda buf self-modify the addresses because of ldy buf+1 the fast timing required. @@ -1069,7 +1073,7 @@ XRW.TargetQTrack .HS 00 .HS B0B4B8BCC0C4C8 * .HS FFFF XRW.RetryCnt .HS 00 -XRW.ReqTrack2 .HS 00 + .HS 00 .HS CCD0D4D8DCE0 XRW.bWrite .HS 00 .HS E4E8ECF0F4F8FC diff --git a/LIB/LIBBLKDEV.S.BB.txt b/SHARED/X.BB.FX.S.txt similarity index 88% rename from LIB/LIBBLKDEV.S.BB.txt rename to SHARED/X.BB.FX.S.txt index d2c1792c..792797e8 100644 --- a/LIB/LIBBLKDEV.S.BB.txt +++ b/SHARED/X.BB.FX.S.txt @@ -30,11 +30,13 @@ BB.HdrTrk .EQ $55 BB.HdrVol .EQ $56 BB.Hdr96 .EQ $57 +BB.tmpTrk .EQ $58 + nbuf1 .EQ $300 dnib .EQ $2d6 clrscrn .EQ $fc58 -scrn .EQ $5b6 + sosid .EQ $c00 entlen .EQ sosid+$23 kernel .EQ $2000 @@ -125,15 +127,13 @@ modboot ldy mods-1,x *-------------------------------------- ndsk2 sta dent save low adr of device call entry. - ldy #0 + stz iobuff + stz idxl + stz idxh + stz idxp + stz blok+1 - sty iobuff y=0 - sty idxl - sty idxh - sty idxp - sty blok+1 - - iny y=1 + ldy #1 sty dcmd set read command. iny y=2 @@ -146,8 +146,9 @@ ndsk2 sta dent save low adr of device call entry. rddir jsr goread call read block routine. bcs bterr2 give up on error. - inc iobuff+1 - inc iobuff+1 +* inc iobuff+1 +* inc iobuff+1 + inc blok lda blok have all directory blocks been read? cmp #6 @@ -177,7 +178,7 @@ nxdent2 sty idxl ldy #6 lookpro lda (idxl),y look for matching name. - cmp BB.ProDOS,y + cmp BB.FX.ProDOS,y bne nxdent branch if no match. dey @@ -197,8 +198,7 @@ lookpro lda (idxl),y look for matching name. lda (idxl),y sta blok+1 - lda #0 now set up to read kernel. - sta idxl + stz idxl ldy #$1e read index block at $1e00 and sty idxl+1 kernel at $2000 @@ -209,8 +209,8 @@ lookpro lda (idxl),y look for matching name. rdkernl jsr goread read index block. bterr2 bcs booterr - inc iobuff+1 - inc iobuff+1 +* inc iobuff+1 +* inc iobuff+1 ldy idxp get index pointer inc idxp bump for next time. @@ -227,16 +227,19 @@ booterr jsr clrscrn clear video ldy #BB.MSG.ERR.Len-1 .1 lda BB.MSG.ERR,y - sta scrn,y + sta $5b6,y dey bpl .1 jmp $ff69 *-------------------------------------- -goread lda iobuff - sta buff +goread +* lda iobuff + stz buff lda iobuff+1 sta buff+1 + inc iobuff+1 + inc iobuff+1 jmp (dent) *-------------------------------------- mods .DA #mod1,#mod2,#mod3,#mod4,#mod5,#mod6,#mod7,#mod8,#mod8+1,#mod9 @@ -247,11 +250,11 @@ endcode ldx BB.Slotn0 clc rts - jmp BB.Seek + jmp BB.FX.SeekRead *-------------------------------------- BB.MSG.ERR .AS -"BOOT ERROR" BB.MSG.ERR.Len .EQ *-BB.MSG.ERR -BB.ProDOS .DA #$26 $20 = storage type + 6 = "PRODOS" len +BB.FX.ProDOS .DA #$26 $20 = storage type + 6 = "PRODOS" len .AS "PRODOS" *-------------------------------------- BB.ReadBlock lda blok figure out track & sector. @@ -278,14 +281,14 @@ BB.ReadBlock lda blok figure out track & sector. ldx BB.Slotn0 lda IO.D2.DrvOn,x - jsr BB.Seek go read sector. + jsr BB.FX.SeekRead inc dbuf+1 bump address inc sector inc sector and sector # bcs .9 branch if error. - jsr BB.Seek + jsr BB.FX.Read .9 ldy IO.D2.DrvOff,x rts return error status in carry. @@ -304,30 +307,47 @@ BB.Wait100usecA phx (3) rts (6) *-------------------------------------- -BB.Trk2Qtrk asl x2 - sta .1+1 +BB.Trk2Qtrk ldy BB.HdrVol + beq .5 + + cpy #$85 + bcs .5 > 192 ? must be a buggy 254 - bit BB.HdrVol - bpl .1 x4 - bvs .1 > $C0 ? (VOL=254) + sta BB.tmpTrk - lsr x3 + tya + bpl .1 -.1 adc #$ff SELF MODIFIED + lsr BB.HdrVol 2 sides +.1 and #%00000111 stepping + + tay + + lda #0 + clc + +.2 adc BB.tmpTrk + dey + bne .2 + + rts + +.5 asl + asl + BB.Trk2Qtrk.RTS rts *-------------------------------------- -BB.Seek lda BB.HdrTrk get track we're on - jsr BB.Trk2Qtrk - sta BB.CurrentQTrack - - lda BB.TargetTrk +BB.FX.SeekRead lda BB.TargetTrk jsr BB.Trk2Qtrk sta BB.TargetQTrack - lda BB.CurrentQTrack + lda BB.HdrTrk get track we're on + jsr BB.Trk2Qtrk + sta BB.CurrentQTrack + cmp BB.TargetQTrack - beq BB.Read + beq BB.FX.Read bit #1 bne .1 @@ -399,7 +419,7 @@ BB.Seek lda BB.HdrTrk get track we're on lda IO.D2.Ph0Off,x .11 *-------------------------------------- -BB.Read ldx BB.Slotn0 +BB.FX.Read ldx BB.Slotn0 stz BB.RetryCnt php @@ -549,17 +569,14 @@ zzzend ldx BB.Slotn0 rts chg5 .EQ *-chg5a -goseek jmp BB.Seek +goseek jmp BB.FX.SeekRead .ED *-------------------------------------- .LIST ON -BB.End .EQ * BB.Free .EQ $a00-* .BS BB.Free .LIST OFF .EP *-------------------------------------- MAN -SAVE usr/src/lib/libblkdev.s.bb -LOAD usr/src/lib/libblkdev.s -ASM +SAVE usr/src/shared/x.bb.fx.s diff --git a/SHARED/X.BB.FX2.S.txt b/SHARED/X.BB.FX2.S.txt new file mode 100644 index 00000000..dc34b824 --- /dev/null +++ b/SHARED/X.BB.FX2.S.txt @@ -0,0 +1,571 @@ +NEW + AUTO 3,1 +*-------------------------------------- +* 0, 2, 4, 6, 8, 10, 12, 14, 1, 3, 5, 7, 9, 11, 13, 15 +* +* $0800 : Block 00 ProDOS (sect 0,2) +* $0A00 : Block 01 SOS (sect 4,6) +* $0C00 : Block 02 Cat (sect 8,10) +* $0E00 : Block 03 Cat (sect 12,14) +* $1000 : Block 04 Cat (sect 1,3) +* $1200 : Block 05 Cat (sect 5,7) +*-------------------------------------- +ROM.D2.DataBuf .EQ $26 +ROM.D2.Slotn0 .EQ $2b +ROM.D2.oddbits .EQ $3c +ROM.D2.ReqSect .EQ $3d + +BB.RetryCnt .EQ $40 +BB.TargetTrk .EQ $41 + +ZP.BLK.CMD .EQ $42 +ZP.BLK.UNIT .EQ $43 +ZP.BLK.BUFPTR .EQ $44 +ZP.BLK.BLKNUM .EQ $46 + +ZP.FX2.GoROM .EQ $48 device call entry address +ZP.FX2.iBLKLO .EQ $4a pointer to low page of index block +ZP.FX2.iBLKHI .EQ $4c pointer to high page of index block +ZP.FX2.iBLKPtr .EQ $4e index byte pointer + +BB.CurrentQTrack .EQ $50 +BB.TargetQTrack .EQ $51 +BB.tmpTrk .EQ $52 +BB.FX2.AddrField .EQ $53 +BB.FX2.AddrField.S .EQ $54 +BB.FX2.AddrField.T .EQ $55 +BB.FX2.AddrField.V .EQ $56 +*-------------------------------------- +iobuff .EQ $60 + +nbuf1 .EQ $300 +dnib .EQ $2d6 + +clrscrn .EQ $fc58 + +BB.FX2.CATBLK1 .EQ $c00 +*-------------------------------------- +* +* BLOCK 0 +* +*-------------------------------------- + .PH $800 +BB.FX2.Boot .DA #1 + sec Apple /// enters $800 'ora $38' + bcs BB.FX2.Apple2 branch if not apple iii native mode +*-------------------------------------- +BB.FX2.Apple3 lda #$9f make Apple /// boot using block 1 + pha the return address is $a000 + lda #$ff + pha + + inc + tax ldx #0 + + inc lda #1 (read block 1) + + jmp $f479 +*-------------------------------------- +BB.FX2.Apple2 stx ZP.BLK.UNIT save unit number + cmp #3 + php + + txa find out if disk ii + and #$70 strip drive # if any + lsr + lsr get slot address + lsr + lsr + ora #$c0 + sta ZP.FX2.GoROM+1 + ldy #0 + sty ZP.FX2.GoROM + + plp + + dey Y=#$ff + lda (ZP.FX2.GoROM),y get device entry addr + bne BB.FX2.BDEV branch if not disk ii (16 sector) + + bcs BB.FX2.BDEV 2 sectors read + + lda #3 make rom read only sector 2 + sta BB.FX2.Boot to complete block 0 + inc ROM.D2.ReqSect was = 1 + + lda ZP.FX2.GoROM+1 + pha + lda #$5b + pha + rts +*-------------------------------------- +BB.FX2.BDEV sta ZP.FX2.GoROM save low adr of device call entry. + + ldy #0 + + sty iobuff $0A00 + sty ZP.BLK.BLKNUM+1 $0001 + + sty BB.FX2.AddrField.V tell BB.FX2.SeekReadD2 vol 00 + sty BB.FX2.AddrField.T tell BB.FX2.SeekReadD2 we are on track 0 + + iny Y=1 + sty ZP.BLK.CMD set read command. + + sty ZP.BLK.BLKNUM to read SOS+directory blocks + + lda #$0A 1-5 at $A00 + sta iobuff+1 $0A00 + +.1 jsr BB.FX2.ReadBLK + bcs .9 give up on error. + + inc ZP.BLK.BLKNUM + lda ZP.BLK.BLKNUM have all directory blocks been read? + cmp #6 + bcc .1 loop if not. + + jmp BB.FX2.ScanCat + +.9 jmp BB.FX2.BootErr +*-------------------------------------- +BB.FX2.ReadBLK lda iobuff + sta ZP.BLK.BUFPTR + lda iobuff+1 + sta ZP.BLK.BUFPTR+1 + + inc iobuff+1 + inc iobuff+1 + + lda ZP.FX2.GoROM + beq BB.FX2.ReadD2 + + jmp (ZP.FX2.GoROM) +*-------------------------------------- +BB.FX2.ReadD2 lda ZP.BLK.BLKNUM figure out track & sector. + and #7 strip track for now. + cmp #4 + and #3 + php + asl + plp + rol now we have the first sector of block. + sta ROM.D2.ReqSect + + lda ZP.BLK.BLKNUM+1 get high block # + lsr shift hi addr to carry. + lda ZP.BLK.BLKNUM now figure track # + ror + lsr + lsr + sta BB.TargetTrk +*-------------------------------------- + lda ZP.BLK.BUFPTR+1 + sta ROM.D2.DataBuf+1 + + ldx ROM.D2.Slotn0 + lda IO.D2.DrvOn,x + + jsr BB.FX2.SeekReadD2 + + inc ROM.D2.DataBuf+1 bump address + inc ROM.D2.ReqSect + inc ROM.D2.ReqSect and sector # + bcs .9 branch if error. + + jsr BB.FX2.ReadSectD2 + +.9 ldx ROM.D2.Slotn0 + ldy IO.D2.DrvOff,x + rts return error status in carry. +*-------------------------------------- +BB.FX2.HeadSelect + lda BB.FX2.AddrField.V + beq .8 VOL = 00 + + asl + bcc .8 single sided + + bmi .8 > 192 + + lda BB.TargetTrk + and #1 + lsr + php + + rol + rol A = 0/2 + + ora ROM.D2.Slotn0 + tay y = n0/n2 + + lda IO.D2.Ph0On,y + lda IO.D2.Ph0On+4,y + + lda #1 + jsr BB.Wait100usecA + + lda IO.D2.Ph0Off,y + lda IO.D2.Ph0Off+4,y + + lsr BB.FX2.AddrField.T + plp + rol BB.FX2.AddrField.T + +.8 rts +*-------------------------------------- +BB.FX2.Trk2Qtrk + ldy BB.FX2.AddrField.V + beq .5 + + cpy #$85 + bcs .5 > 192 ? must be a buggy 254 + + sta BB.tmpTrk + + tya + and #%00000111 stepping + tay + + lda #0 + clc + +.2 adc BB.tmpTrk + dey + bne .2 + + rts + +.5 asl X4 standard stepping + asl + +BB.Trk2Qtrk.RTS rts +*-------------------------------------- +BB.FX2.SeekReadD2 + jsr BB.FX2.HeadSelect + + lda BB.TargetTrk + jsr BB.FX2.Trk2Qtrk + sta BB.TargetQTrack + + lda BB.FX2.AddrField.T + jsr BB.FX2.Trk2Qtrk + sta BB.CurrentQTrack + + cmp BB.TargetQTrack + beq BB.FX2.ReadSectD2 + + bit #1 + bne .1 + + jsr .20 we are on 0/4 or 2/4 track + + bra .10 no wait, next operation will be phy/plx/Ph0On,y + +.1 cmp BB.TargetQTrack we are on 1/4 or 3/4 + bcs .2 if CS, C > T, must move out + + inc CC: C < T, ON next PH + + .HS B0 BCS + +.2 dec CS: C > T, ON prev PH + + sta BB.CurrentQTrack + + bra .6 Ph ON to go to 0/4 or 2/4, then wait +*-------------------------------------- +.20 and #6 + ora ROM.D2.Slotn0 + tay + lda IO.D2.Ph0On,y + rts +*-------------------------------------- +.3 bcs .4 if CS, C > T, must move out + + inc CC: C < T, ON next PH + + .HS B0 BCS + +.4 dec CS: C > T, ON prev PH + + sta BB.CurrentQTrack + + bit #1 + bne .5 we must go to 1/4 or 3/4 + + lda IO.D2.Ph0Off,x we must go to 0/4 or 2/4 : Off Prev Ph + bra .8 go wait.... + +.5 phy we must go on 1/4 or 3/4 + plx Y already ON, -> X for Ph0Off,x + + bcs .6 if CS, C > T, must move out + + inc CC: C < T, ON next PH + +.6 jsr .20 now X and Y on + +.8 lda #IO.D2.SeekTimeB + +.9 jsr BB.Wait100usecA ...wait... + +.10 lda BB.CurrentQTrack + cmp BB.TargetQTrack + bne .3 + + lsr CS if X,Y on + + lda #0 + jsr BB.Wait100usecA + + lda IO.D2.Ph0Off,y + bcc .11 + + lda IO.D2.Ph0Off,x + +.11 +*-------------------------------------- +BB.FX2.ReadSectD2 + ldx ROM.D2.Slotn0 + + stz BB.RetryCnt + php + +tryread plp fix stack. + +rdhead sec anticipate error. + inc BB.RetryCnt if = 0 then give up! + beq BB.Trk2Qtrk.RTS branch if can't fine/read sector. + + clc indicate reading header. + + ldy #0 Retry cnt waiting D5 + +rddata php carry set if reading DATA. + +rd0 iny + beq tryread + +rd1 lda IO.D2.RData,x read a byte from the state machine. + bpl rd1 loop until ready. + +rd1a eor #$d5 mark 1? + bne rd0 branch if not. + +rd2 lda IO.D2.RData,x + bpl rd2 + + cmp #$aa mark 2? + bne rd1a + nop waste a little time. + +rd3 lda IO.D2.RData,x + bpl rd3 + + cmp #$96 header mark 3? + beq rdhd1 branch if it is. + + plp were we looking for data mark 3? + bcc rdhead branch if not. + + eor #$ad data mark 3? + beq rddt1 go read data field if true... + +rdhd0 bne rdhead otherwise, start over. + +rdhd1 ldy #3 read volume,trk,sect + +rdhd2 lda IO.D2.RData,x + bpl rdhd2 + + rol + sta ROM.D2.oddbits save odd bits (7,5,3,1) + +rdhd4 lda IO.D2.RData,x + bpl rdhd4 + + and ROM.D2.oddbits combine even and odd to form value. + sta BB.FX2.AddrField,y + dey + bne rdhd2 ignore Checksum, A=sector + + plp + cmp ROM.D2.ReqSect last byte formed is sector# + bne rdhead branch if target sector not found. + + lda BB.FX2.AddrField.T previous result is track # + cmp BB.TargetTrk is desired track found? + bne goseek re-seek if mismatch. + + bcs rddata branch if proper track always. +*-------------------------------------- +rddt1 ldy #$56 read 2 bit groupings first. +rddt1a sty ROM.D2.oddbits + +rddt2 ldy IO.D2.RData,x + bpl rddt2 + + eor dnib,y denibblize using table left from boot rom. + ldy ROM.D2.oddbits save in nbuf1 + dey + sta nbuf1,y + bne rddt1a loop until all 86 groups are read. + +rddt3 sty ROM.D2.oddbits now count up for 6-bit groups. + +rddt4 ldy IO.D2.RData,x + bpl rddt4 + + eor dnib,y + ldy ROM.D2.oddbits save result to specified buffer. + sta (ROM.D2.DataBuf),y + iny + bne rddt3 loop for 256 bytes. + +rdchk ldy IO.D2.RData,x now verify checksum... + bpl rdchk + + eor dnib,y must be equal... + bne rdhd0 branch if error. + + ldy #0 make y=0 + +nxttwo ldx #$56 now combine 2-bit group with 6 bit group + +twobit dex all done with this group? + bmi nxttwo branch if so. + + lda (ROM.D2.DataBuf),y + lsr nbuf1,x + rol + lsr nbuf1,x + rol + sta (ROM.D2.DataBuf),y + iny + bne twobit + + clc + rts +*-------------------------------------- +goseek jmp BB.FX2.SeekReadD2 +*-------------------------------------- +BB.Wait100usecA phx (3) + +.1 ldx #20 (2) + +.2 dex (2) + bne .2 (3) + + dec (2) + bne .1 (3) + + plx (4) + + rts (6) +*-------------------------------------- +BB.FX2.BootErr jsr clrscrn clear video + ldy #BB.MSG.ERR.Len-1 + +.1 lda BB.MSG.ERR,y + sta $5b6,y + dey + bpl .1 + + jmp $ff69 +*-------------------------------------- +BB.MSG.ERR .AS -"BOOT ERROR" +BB.MSG.ERR.Len .EQ *-BB.MSG.ERR +*-------------------------------------- +* +* BLOCK 1 +* +*-------------------------------------- +BB.FX2.ScanCat ldy #0 + sty ZP.FX2.iBLKLO + sty ZP.FX2.iBLKHI + sty ZP.FX2.iBLKPtr + + sta ZP.FX2.iBLKLO+1 + + lda #4 begin look-up with first entry past header. + .HS 2C BIT ABS +.1 lda ZP.FX2.iBLKLO + clc + adc BB.FX2.CATBLK1+$23 ENTRY_LEN : bump to next directory entry. + tay save in y for now. + bcc .2 branch if not a page cross. + + inc ZP.FX2.iBLKLO+1 + lda ZP.FX2.iBLKLO+1 check for new block. + lsr if even then new block. + bcs .2 + + cmp #$a have all file names been compared? + beq BB.FX2.BootErr branch if no pro.kernel. + + ldy #4 else, begin at block beginning. + +.2 sty ZP.FX2.iBLKLO + + ldy #6 + +.3 lda (ZP.FX2.iBLKLO),y look for matching name. + cmp BB.FX2.ProDOS,y + bne .1 branch if no match. + + dey + bpl .3 + +* ldy #$10 get file type & index block addr. +* lda (ZP.FX2.iBLKLO),y +* cmp #S.FI.T.SYS is it a system file? +* bne BB.FX2.BootErr +* iny + + ldy #$11 + + lda (ZP.FX2.iBLKLO),y + sta ZP.BLK.BLKNUM + iny + lda (ZP.FX2.iBLKLO),y + sta ZP.BLK.BLKNUM+1 + + stz ZP.FX2.iBLKLO + stz ZP.FX2.iBLKHI + + ldy #$1e read index block at $1e00 and + sty ZP.FX2.iBLKLO+1 kernel at $2000 + sty iobuff+1 + iny + sty ZP.FX2.iBLKHI+1 +*-------------------------------------- +BB.FX2.LOADSYS jsr BB.FX2.ReadBLK read index block. + bcs BB.FX2.BootErr + + ldy ZP.FX2.iBLKPtr get index pointer + inc ZP.FX2.iBLKPtr bump for next time. + + lda (ZP.FX2.iBLKLO),y + sta ZP.BLK.BLKNUM + lda (ZP.FX2.iBLKHI),y high disk addr. + sta ZP.BLK.BLKNUM+1 + + ora (ZP.FX2.iBLKLO),y if both=0 then done. + bne BB.FX2.LOADSYS branch if more to read. + + jmp $2000 go execute kernel code. +*-------------------------------------- +BB.FX2.ProDOS .DA #$26 $20 = storage type + 6 = "PRODOS" len + .AS "PRODOS" +*-------------------------------------- + .LIST ON +BB.FX2.Free .EQ $C00-* + .BS BB.FX2.Free + .LIST OFF + .EP +*-------------------------------------- +MAN +SAVE usr/src/shared/x.bb.fx2.s +LOAD usr/src/lib/libblkdev.s +ASM diff --git a/SHARED/X.BB.PRODOS.S.txt b/SHARED/X.BB.PRODOS.S.txt new file mode 100644 index 00000000..f0ad305e --- /dev/null +++ b/SHARED/X.BB.PRODOS.S.txt @@ -0,0 +1,38 @@ +NEW + AUTO 3,1 +*-------------------------------------- + .HS 01.38.b0.03.4c.32.a1.86.43.c9.03.08.8a.29.70.4a + .HS 4a.4a.4a.09.c0.85.49.a0.ff.84.48.28.c8.b1.48.d0 + .HS 3a.b0.0e.a9.03.8d.00.08.e6.3d.a5.49.48.a9.5b.48 + .HS 60.85.40.85.48.a0.63.b1.48.99.94.09.c8.c0.eb.d0 + .HS f6.a2.06.bc.1d.09.bd.24.09.99.f2.09.bd.2b.09.9d + .HS 7f.0a.ca.10.ee.a9.09.85.49.a9.86.a0.00.c9.f9.b0 + .HS 2f.85.48.84.60.84.4a.84.4c.84.4e.84.47.c8.84.42 + .HS c8.84.46.a9.0c.85.61.85.4b.20.12.09.b0.68.e6.61 + .HS e6.61.e6.46.a5.46.c9.06.90.ef.ad.00.0c.0d.01.0c + .HS d0.6d.a9.04.d0.02.a5.4a.18.6d.23.0c.a8.90.0d.e6 + .HS 4b.a5.4b.4a.b0.06.c9.0a.f0.55.a0.04.84.4a.ad.02 + .HS 09.29.0f.a8.b1.4a.d9.02.09.d0.db.88.10.f6.29.f0 + .HS c9.20.d0.3b.a0.10.b1.4a.c9.ff.d0.33.c8.b1.4a.85 + .HS 46.c8.b1.4a.85.47.a9.00.85.4a.a0.1e.84.4b.84.61 + .HS c8.84.4d.20.12.09.b0.17.e6.61.e6.61.a4.4e.e6.4e + .HS b1.4a.85.46.b1.4c.85.47.11.4a.d0.e7.4c.00.20.4c + .HS 3f.09.26.50.52.4f.44.4f.53.20.20.20.20.20.20.20 + .HS 20.20.a5.60.85.44.a5.61.85.45.6c.48.00.08.1e.24 + .HS 3f.45.47.76.f4.d7.d1.b6.4b.b4.ac.a6.2b.18.60.4c + .HS bc.09.a9.9f.48.a9.ff.48.a9.01.a2.00.4c.79.f4.20 + .HS 58.fc.a0.1c.b9.50.09.99.ae.05.88.10.f7.4c.4d.09 + .HS aa.aa.aa.a0.d5.ce.c1.c2.cc.c5.a0.d4.cf.a0.cc.cf + .HS c1.c4.a0.d0.d2.cf.c4.cf.d3.a0.aa.aa.aa.a5.53.29 + .HS 03.2a.05.2b.aa.bd.80.c0.a9.2c.a2.11.ca.d0.fd.e9 + .HS 01.d0.f7.a6.2b.60.a5.46.29.07.c9.04.29.03.08.0a + .HS 28.2a.85.3d.a5.47.4a.a5.46.6a.4a.4a.85.41.0a.85 + .HS 51.a5.45.85.27.a6.2b.bd.89.c0.20.bc.09.e6.27.e6 + .HS 3d.e6.3d.b0.03.20.bc.09.bc.88.c0.60.a5.40.0a.85 + .HS 53.a9.00.85.54.a5.53.85.50.38.e5.51.f0.14.b0.04 + .HS e6.53.90.02.c6.53.38.20.6d.09.a5.50.18.20.6f.09 + .HS d0.e3.a0.7f.84.52.08.28.38.c6.52.f0.ce.18.08.88 + .HS f0.f5.bd.8c.c0.10.fb.00.00.00.00.00.00.00.00.00 +*-------------------------------------- +MAN +SAVE usr/src/shared/x.bb.prodos.s diff --git a/SHARED/X.BB.SOS.S.txt b/SHARED/X.BB.SOS.S.txt new file mode 100644 index 00000000..4f4fb5c3 --- /dev/null +++ b/SHARED/X.BB.SOS.S.txt @@ -0,0 +1,38 @@ +NEW + AUTO 3,1 +*-------------------------------------- + .HS 4c.6e.a0.53.4f.53.20.42.4f.4f.54.20.20.31.2e.31 + .HS 20.0a.53.4f.53.2e.4b.45.52.4e.45.4c.20.20.20.20 + .HS 20.53.4f.53.20.4b.52.4e.4c.49.2f.4f.20.45.52.52 + .HS 4f.52.08.00.46.49.4c.45.20.27.53.4f.53.2e.4b.45 + .HS 52.4e.45.4c.27.20.4e.4f.54.20.46.4f.55.4e.44.25 + .HS 00.49.4e.56.41.4c.49.44.20.4b.45.52.4e.45.4c.20 + .HS 46.49.4c.45.3a.00.00.0c.00.1e.0e.1e.04.a4.78.d8 + .HS a9.77.8d.df.ff.a2.fb.9a.2c.10.c0.a9.40.8d.ca.ff + .HS a9.07.8d.ef.ff.a2.00.ce.ef.ff.8e.00.20.ad.00.20 + .HS d0.f5.a9.01.85.e0.a9.00.85.e1.a9.00.85.85.a9.a2 + .HS 85.86.20.be.a1.e6.e0.a9.00.85.e6.e6.86.e6.86.e6 + .HS e6.20.be.a1.a0.02.b1.85.85.e0.c8.b1.85.85.e1.d0 + .HS ea.a5.e0.d0.e6.ad.6c.a0.85.e2.ad.6d.a0.85.e3.18 + .HS a5.e3.69.02.85.e5.38.a5.e2.ed.23.a4.85.e4.a5.e5 + .HS e9.00.85.e5.a0.00.b1.e2.29.0f.cd.11.a0.d0.21.a8 + .HS b1.e2.d9.11.a0.d0.19.88.d0.f6.a0.00.b1.e2.29.f0 + .HS c9.20.f0.3e.c9.f0.f0.08.ae.64.a0.a0.13.4c.d4.a1 + .HS 18.a5.e2.6d.23.a4.85.e2.a5.e3.69.00.85.e3.a5.e4 + .HS c5.e2.a5.e5.e5.e3.b0.bc.18.a5.e4.6d.23.a4.85.e2 + .HS a5.e5.69.00.85.e3.c6.e6.d0.95.ae.4f.a0.a0.1b.4c + .HS d4.a1.a0.11.b1.e2.85.e0.c8.b1.e2.85.e1.ad.66.a0 + .HS 85.85.ad.67.a0.85.86.20.be.a1.ad.68.a0.85.85.ad + .HS 69.a0.85.86.ad.00.0c.85.e0.ad.00.0d.85.e1.20.be + .HS a1.a2.07.bd.00.1e.dd.21.a0.f0.08.ae.64.a0.a0.13 + .HS 4c.d4.a1.ca.10.ed.a9.00.85.e7.e6.e7.e6.86.e6.86 + .HS a6.e7.bd.00.0c.85.e0.bd.00.0d.85.e1.a5.e0.d0.04 + .HS a5.e1.f0.06.20.be.a1.4c.8a.a1.18.ad.6a.a0.6d.08 + .HS 1e.85.e8.ad.6b.a0.6d.09.1e.85.e9.6c.e8.00.a9.01 + .HS 85.87.a5.e0.a6.e1.20.79.f4.b0.01.60.ae.32.a0.a0 + .HS 09.4c.d4.a1.84.e7.38.a9.28.e5.e7.4a.18.65.e7.a8 + .HS bd.29.a0.99.a7.05.ca.88.c6.e7.d0.f4.ad.40.c0.4c + .HS ef.a1.00.00.00.00.00.00.00.00.00.00.00.00.00.00 +*-------------------------------------- +MAN +SAVE usr/src/shared/x.bb.sos.s diff --git a/SHARED/X.TRKFMT.S.txt b/SHARED/X.TRKFMT.S.txt new file mode 100644 index 00000000..d3742cdf --- /dev/null +++ b/SHARED/X.TRKFMT.S.txt @@ -0,0 +1,193 @@ +NEW + AUTO 3,1 +*-------------------------------------- +X.TRKFMT.VolNum .EQ X.TRKFMT.Z +X.TRKFMT.TrkNum .EQ X.TRKFMT.Z+1 +X.TRKFMT.SectNum .EQ X.TRKFMT.Z+2 +X.TRKFMT.CheckSum .EQ X.TRKFMT.Z+3 +*-------------------------------------- +X.TRKFMT lda #$ff + + sta IO.D2.WriteMode,x goto write mode + ora IO.D2.WShift,x (4) + + jsr X.TRKFMT.W14 (14) + + lda #0 (2) + sta X.TRKFMT.SectNum (3) + + ldy #0 (2) 256 SyncBytes + + jsr X.TRKFMT.SyncBytes (15..15) + + nop (2) + nop (2) + nop (2) + nop (2) + +.1 jsr X.TRKFMT.AddrField (17..15) + + ldy #6 (2) + + jsr X.TRKFMT.SyncBytes (15..15) + + jsr X.TRKFMT.W14 (14) + + ldy #2 (2) + +.2 lda X.TRKFMT.DATA,y (4) + sta IO.D2.WLoad,x (5) + ora IO.D2.WShift,x (4) + dey (2) + bmi .22 (3-) + + jsr X.TRKFMT.W12 (12) + bra .2 (3) + +.22 jsr X.TRKFMT.W14 (14) + + ldy #86 (2) 256+86... + lda #$96 (2) + + sta IO.D2.WLoad,x (5) ...+1 + ora IO.D2.WShift,x (4) + + nop (2) + bra .3 (3) + +.3 jsr X.TRKFMT.W14 (14) + + nop (2) + + lda #$96 (2) + sta IO.D2.WLoad,x (5) + ora IO.D2.WShift,x (4) + + dey (2) + bne .3 (3)- + + bra .5 (3) + +.4 nop (2) + +.5 jsr X.TRKFMT.W14 (14) + + lda #$96 (2) + sta IO.D2.WLoad,x (5) + ora IO.D2.WShift,x (4) + + dey (2) + bne .4 (3)- + + inc X.TRKFMT.SectNum (5) + + jsr X.TRKFMT.EndMark (19..15) + + ldy #16 (2) + + jsr X.TRKFMT.SyncBytes (15..15) + + lda X.TRKFMT.SectNum (3) + cmp #16 (2) + bne .1 (3-) + + lda IO.D2.ReadMode,x (4) out of write mode + lda IO.D2.WShift,x (4) to read mode. + + rts +*-------------------------------------- +X.TRKFMT.SyncBytes + nop (2) + + lda #$ff (2) + +.1 sta IO.D2.WLoad,x (5) + ora IO.D2.WShift,x (4) + dey (2) + beq .8 (3-) + + jsr X.TRKFMT.W12 (12) + jsr X.TRKFMT.W12 (12) + + bra .1 (3) + +.8 rts (6) +*-------------------------------------- +X.TRKFMT.AddrField + ldy #2 (2) + +.1 lda X.TRKFMT.ADDR,y (4) + sta IO.D2.WLoad,x (5) + ora IO.D2.WShift,x (4) + dey (2) + bmi .2 (3-) + + lda X.TRKFMT.VolNum (3) + eor X.TRKFMT.TrkNum (3) + eor X.TRKFMT.SectNum (3) + sta X.TRKFMT.Checksum (3) + bra .1 (3) + +.2 lda X.TRKFMT.VolNum (3) + lda X.TRKFMT.VolNum (3) + jsr X.TRKFMT.W4x4 (17..12) + + lda X.TRKFMT.TrkNum (3) + jsr X.TRKFMT.W4x4 (17..12) + + lda X.TRKFMT.SectNum (3) + jsr X.TRKFMT.W4x4 (17..12) + + lda X.TRKFMT.Checksum (3) + jsr X.TRKFMT.W4x4 (17..12) + + pha (3) + pla (4) +*-------------------------------------- +X.TRKFMT.EndMark + ldy #2 (2) + + nop (2) + +.1 lda X.TRKFMT.END,y (4) + sta IO.D2.WLoad,x (5) + ora IO.D2.WShift,x (4) + dey (2) + bmi .8 (3-) + + jsr X.TRKFMT.W12 (12) + bra .1 (3) + +.8 rts (6) +*-------------------------------------- +X.TRKFMT.W4x4 tay (2) + lsr (2) + ora #$AA (2) + sta IO.D2.WLoad,x (5) + ora IO.D2.WShift,x (4) + + jsr X.TRKFMT.W12 (12) + + pha (3) + pla (4) + + tya (2) + ora #$AA (2) + + sta IO.D2.WLoad,x (5) + ora IO.D2.WShift,x (4) + +X.TRKFMT.W14 nop (2) + +X.TRKFMT.W12 rts (6) +*-------------------------------------- + .LIST ON +X.TRKFMT.ADDR .HS 96AAD5 +X.TRKFMT.DATA .HS ADAAD5 +X.TRKFMT.END .HS EBAADE + .LIST OFF +*-------------------------------------- +MAN +SAVE usr/src/shared/x.trkfmt.s +LOAD usr/src/basic.fx/basic.s +ASM