Floppy format stuff

This commit is contained in:
burniouf 2022-05-25 20:46:02 +02:00
parent e8ba243ccb
commit 019d1e3c0e
27 changed files with 2597 additions and 692 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -882,196 +882,37 @@ BS.WriteTBUFAY sta GP.MLIRW.COUNT
LA020 rts LA020 rts
*-------------------------------------- *--------------------------------------
LA021 jsr BS.KW.FRE BS.FRE0 ldx #BSX.Fre0.X
bcs LA020 .HS 2C BIT ABS
BS.KW.FRE
BS.FRE1 ldx #BSX.Fre0.X
lda AS.PGRMSTART+1 ldy #13
sta BS.TXTTAB+1
lda AS.PGRMSTART
sta BS.TXTTAB
lda AS.HIMEM+1 .1 lda AS.PGRMSTART,y
sta XBBD8 sta ASX.PGRMSTART,y
lda #$03 dey
sta XBBD9 bpl .1
lda AS.STRINGSTART+1 jsr BS.ToAUX
sta BS.MEMSIZE+1 bcs .9
lda #$00 pha
sta BS.MEMSIZE phy
bra LA089 Z ldy #13
.2 lda ASX.PGRMSTART,y
sta AS.PGRMSTART,y
dey
bpl .2
ply
pla
.9 rts
*-------------------------------------- *--------------------------------------
BS.KW.FRE stz BS.TXTTAB * DUPLICATE CODE in BASIC.S.XM.txt
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
*-------------------------------------- *--------------------------------------
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 LA160 clc
lda XBBDC lda XBBDC
sta ZP.A2L sta ZP.A2L
@ -1109,69 +950,6 @@ LA170 ldy #$02
clc clc
LA198 rts 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 MAN
SAVE usr/src/basic.fx/basic.s.a SAVE usr/src/basic.fx/basic.s.a
LOAD usr/src/basic.fx/basic.s LOAD usr/src/basic.fx/basic.s

View File

@ -3,7 +3,7 @@ NEW
*-------------------------------------- *--------------------------------------
BS.GetSysBuf lda #$04 BS.GetSysBuf lda #$04
LA1FB sta XBBB5 BS.GetSysBufA sta XBBB5
jsr BS.KW.FRE jsr BS.KW.FRE
bcs .99 bcs .99
@ -54,7 +54,7 @@ LA1FB sta XBBB5
XBBB5 .BS 1 XBBB5 .BS 1
*-------------------------------------- *--------------------------------------
BS.FreeSysBuf jsr BS.KW.FRE BS.FreeSysBuf jsr BS.KW.FRE
bcs LA29D bcs .9
lda AS.HIMEM+1 lda AS.HIMEM+1
sbc #$00 sbc #$00
@ -86,24 +86,27 @@ BS.FreeSysBuf jsr BS.KW.FRE
lda BS.BUFPAGE lda BS.BUFPAGE
cmp AS.HIMEM+1 cmp AS.HIMEM+1
beq LA2B7 beq .8
pha pha
ldx GP.OPENCNT ldx GP.OPENCNT
beq LA29B beq .2
lda AS.HIMEM+1 lda AS.HIMEM+1
LA293 cmp BS.BUFPAGEs-1,x .1 cmp BS.BUFPAGEs-1,x
beq LA29E beq LA29E
dex dex
bne LA293 bne .1
LA29B pla .2 pla
sec sec
LA29D rts .9 rts
.8 clc
rts
*--------------------------------------
LA29E pla LA29E pla
*-------------------------------------- *--------------------------------------
BS.SetFileBuf sta GP.SBUFADR+1 BS.SetFileBuf sta GP.SBUFADR+1
@ -114,52 +117,49 @@ BS.SetFileBuf sta GP.SBUFADR+1
sta GP.MLIMRKEOFBUF.REFNUM sta GP.MLIMRKEOFBUF.REFNUM
lda #MLI.C.SETBUF lda #MLI.C.SETBUF
jmp GP.GOSYSTEM jmp GP.GOSYSTEM
LA2B7 clc
rts
*-------------------------------------- *--------------------------------------
BS.GETBUFR jsr LA1FB BS.GETBUFR jsr BS.GetSysBufA
bcs LA304 bcs LA2F6.9
pha pha
sbc #$03 sbc #$03
sta XBBB8 sta XBBB8
pla pla
LA2C5 sta GP.SBUFADR+1 .1 sta GP.SBUFADR+1
ldx GP.OPENCNT ldx GP.OPENCNT
beq LA2EE beq .4
lda XBBB7 lda XBBB7
clc clc
adc #$04 adc #$04
sta XBBB7 sta XBBB7
LA2D6 cmp BS.BUFPAGEs-1,x .2 cmp BS.BUFPAGEs-1,x
bne LA2EB bne .3
lda GP.SBUFADR+1 lda GP.SBUFADR+1
jsr LA356 jsr LA356
jsr BS.SetFileBuf jsr BS.SetFileBuf
lda GP.SBUFADR+1 lda GP.SBUFADR+1
adc #$04 adc #$04
bcc LA2C5 bcc .1
LA2EB dex .3 dex
bne LA2D6 bne .2
LA2EE lda GP.SBUFADR+1 .4 lda GP.SBUFADR+1
bit GP.EXECACTV bit GP.EXECACTV
bpl LA303 bpl LA2F6.8
*--------------------------------------
LA2F6 ldx #$08 LA2F6 ldx #$08
jsr LA356 jsr LA356
jsr BS.SetFileBuf jsr BS.SetFileBuf
lda GP.SBUFADR+1 lda GP.SBUFADR+1
adc #$04 adc #$04
LA303 clc LA2F6.8 clc
LA304 rts LA2F6.9 rts
*-------------------------------------- *--------------------------------------
BS.FREEBUFR lda GP.OPENCNT BS.FREEBUFR lda GP.OPENCNT
asl asl
@ -171,21 +171,21 @@ BS.FREEBUFR lda GP.OPENCNT
sta XBBB8 sta XBBB8
lda GP.RSHIMEM lda GP.RSHIMEM
cmp AS.HIMEM+1 cmp AS.HIMEM+1
beq LA354 beq .8
sta AS.HIMEM+1 sta AS.HIMEM+1
bit GP.EXECACTV bit GP.EXECACTV
bpl LA327 bpl .1
jsr LA2F6 jsr LA2F6
bcc LA345 bcc .3
LA327 lda XBBB7 .1 lda XBBB7
ldx GP.OPENCNT ldx GP.OPENCNT
beq LA351 beq .5
LA32F cmp BS.BUFPAGEs-1,x .2 cmp BS.BUFPAGEs-1,x
bne LA34E bne .4
lda AS.HIMEM+1 lda AS.HIMEM+1
jsr LA356 jsr LA356
@ -195,19 +195,20 @@ LA32F cmp BS.BUFPAGEs-1,x
sbc #$04 sbc #$04
sta XBBB7 sta XBBB7
LA345 lda AS.HIMEM+1 .3 lda AS.HIMEM+1
sec sec
sbc #$04 sbc #$04
sta AS.HIMEM+1 sta AS.HIMEM+1
bcs LA327 bcs .1
LA34E dex .4 dex
bne LA32F bne .2
LA351 jsr BS.KW.FRE .5 jsr BS.KW.FRE
LA354 clc
.8 clc
rts rts
*--------------------------------------
LA356 pha LA356 pha
lda XBBB8 lda XBBB8
jsr BS.SetFileBuf jsr BS.SetFileBuf
@ -242,6 +243,7 @@ BS.MoveMemUp ldy BS.ReqMem
XA386 beq LA38F SELF MODIFIED XA386 beq LA38F SELF MODIFIED
LA388 jsr LA39A LA388 jsr LA39A
dec ZP.A1H dec ZP.A1H
dec ZP.PCH dec ZP.PCH
@ -264,63 +266,63 @@ LA3A3 lda AS.VARSTART+1
lda AS.VARSTART lda AS.VARSTART
ldx AS.ARRAYSTART+1 ldx AS.ARRAYSTART+1
clc clc
bcc LA3B3 bcc .2
LA3AE clc .1 clc
lda ZP.A2L lda ZP.A2L
adc #$07 adc #$07
LA3B3 sta ZP.A2L .2 sta ZP.A2L
bcc LA3B9 bcc .3
inc ZP.A2H inc ZP.A2H
LA3B9 eor AS.ARRAYSTART .3 eor AS.ARRAYSTART
bne LA3BF bne .4
cpx ZP.A2H cpx ZP.A2H
LA3BF clc .4 clc
beq LA3D6 beq .5
ldy #$00 ldy #$00
lda (ZP.A2L),y lda (ZP.A2L),y
iny iny
eor (ZP.A2L),y eor (ZP.A2L),y
bpl LA3AE bpl .1
lda (ZP.A2L),y lda (ZP.A2L),y
bpl LA3AE bpl .1
iny iny
jsr LA3FD jsr LA3FD
bra LA3AE bra .1
LA3D6 lda ZP.A2L .5 lda ZP.A2L
sta XBBDC sta XBBDC
LA3DB clc .6 clc
jsr LA160 jsr LA160
bcs LA410 bcs LA410
LA3E1 ldy #$00 .7 ldy #$00
clc clc
jsr LA3FD jsr LA3FD
clc clc
lda #$03 lda #$03
adc ZP.A2L adc ZP.A2L
sta ZP.A2L sta ZP.A2L
bcc LA3F2 bcc .8
inc ZP.A2H inc ZP.A2H
LA3F2 cmp XBBDC .8 cmp XBBDC
bne LA3E1 bne .7
cpx ZP.A2H cpx ZP.A2H
bne LA3E1 bne .7
beq LA3DB beq .6
*-------------------------------------- *--------------------------------------
LA3FD lda (ZP.A2L),y LA3FD lda (ZP.A2L),y
beq LA410 beq LA410
@ -337,8 +339,8 @@ LA3FD lda (ZP.A2L),y
LA410 rts LA410 rts
*-------------------------------------- *--------------------------------------
LA411 jsr LA021 LA411 jsr BS.FRE0
bcs LA47F bcs .9
lda AS.ARRAYEND lda AS.ARRAYEND
sec sec
@ -401,7 +403,7 @@ LA411 jsr LA021
sta XBBEC sta XBBEC
clc clc
LA47F rts .9 rts
*-------------------------------------- *--------------------------------------
LA480 lda BS.BAS.HDR LA480 lda BS.BAS.HDR
sta BS.ReqMem sta BS.ReqMem
@ -442,20 +444,26 @@ LA480 lda BS.BAS.HDR
sec sec
lda AS.HIMEM+1 lda AS.HIMEM+1
sbc BS.BAS.HDR+4 sbc BS.BAS.HDR+4
beq LA4D0 beq .8
sta XBBE2 sta XBBE2
jsr LA3A3 jsr LA3A3
LA4D0 clc .8 clc
rts rts
*-------------------------------------- *--------------------------------------
BS.LINEBUFCLR80 lda #$A0 BS.LINEBUFCLR80 lda #$A0
ldx #$4F ldx #$4F
LA67E sta IO.LINEBUF+1,x .1 sta IO.LINEBUF+1,x
dex dex
bpl LA67E bpl .1
rts rts
*-------------------------------------- *--------------------------------------
@ -491,11 +499,12 @@ LA6BA stz GP.FoundBITS
stz GP.FoundBITS+1 stz GP.FoundBITS+1
stz BS.CMDBUF stz BS.CMDBUF
stz MLI.PATHBUF stz MLI.PATHBUF
lda GP.VDEFSLT lda GP.VDEFSLT
sta GP.ParamS sta GP.ParamS
lda GP.VDEFDRV lda GP.VDEFDRV
sta GP.ParamD sta GP.ParamD
lda AS.HIMEM+1 lda AS.HIMEM+1
sta BS.BUFPAGE sta BS.BUFPAGE
@ -508,13 +517,13 @@ LA6BA stz GP.FoundBITS
beq LA744 beq LA744
asl asl
bmi LA747 bmi LA747 CMDBITS0.SLOT
jsr BS.GetKWInCmdBuf jsr BS.GetKWInCmdBuf
php php
pha pha
lda GP.AllowedBITS lda GP.AllowedBITS
bpl LA6F8 bpl LA6F8 CMDBITS0.PFIX
lda #MLI.C.GETPREFIX lda #MLI.C.GETPREFIX
jsr GP.GOSYSTEM jsr GP.GOSYSTEM
@ -529,10 +538,10 @@ LA6F8 pla
LA703 cmp #'/' LA703 cmp #'/'
beq LA70B beq LA70B
cmp #'.' .. or ../ cmp #'.' .. or ../
beq LA70B beq LA70B
cmp #'A' cmp #'A'
bcc LA73D bcc LA73D
@ -564,7 +573,7 @@ LA70B dex
lda GP.AllowedBITS lda GP.AllowedBITS
lsr lsr
bcs LA770 bcs LA770 CMDBITS0.FN1
LA73A jmp BS.SYNERR LA73A jmp BS.SYNERR
@ -648,7 +657,7 @@ LA7A6 lda GP.ParamS
cmp #$03 cmp #$03
bcs LA76C bcs LA76C
* >DEBUG
lda GP.AllowedBITS lda GP.AllowedBITS
and #CMDBITS0.RRUN+CMDBITS0.FN1 and #CMDBITS0.RRUN+CMDBITS0.FN1
lsr lsr
@ -669,7 +678,7 @@ LA7C9 bcc LA80B
lda GP.FoundBITS lda GP.FoundBITS
lsr lsr
bcs LA7E1 bcs LA7E1 CMDBITS0.FN1
lda GP.AllowedBITS lda GP.AllowedBITS
and #CMDBITS0.PFIX+CMDBITS0.FNOPT and #CMDBITS0.PFIX+CMDBITS0.FNOPT
@ -692,7 +701,7 @@ LA7ED lda GP.FoundBITS+1
stz BS.CMDBUF.LEN stz BS.CMDBUF.LEN
stz BS.CMDBUF stz BS.CMDBUF
lda #CMDBITS0.FN1 lda #CMDBITS0.FN1
tsb GP.FoundBITS tsb GP.FoundBITS
@ -711,7 +720,7 @@ LA80B lda GP.XCNUM
lda GP.AllowedBITS+1 lda GP.AllowedBITS+1
and #CMDBITS1.SD and #CMDBITS1.SD
beq .8 beq .8
lda GP.FoundBITS lda GP.FoundBITS
lsr lsr
bcc LA844 bcc LA844
@ -723,7 +732,7 @@ LA80B lda GP.XCNUM
bne LA849 bne LA849
lda GP.AllowedBITS lda GP.AllowedBITS
and #$08 and #CMDBITS0.CRFLG
bne LA844 bne LA844
lda #BS.E.PATHNFND6 lda #BS.E.PATHNFND6
@ -945,13 +954,13 @@ LAB63 cmp #$FF
LAB6F pha LAB6F pha
jsr BS.CloseAll jsr BS.CloseAll
jsr LB36B jsr LB36B
stz GP.ParamA stz GP.ParamA
stz MLI.MEMTABL+20 stz MLI.MEMTABL+20
stz MLI.MEMTABL+21 stz MLI.MEMTABL+21
stz MLI.MEMTABL+22 stz MLI.MEMTABL+22
lda #$01 lda #$01
sta MLI.MEMTABL+23 sta MLI.MEMTABL+23
lda #$20 lda #$20
@ -976,12 +985,12 @@ LABA6 sec
*-------------------------------------- *--------------------------------------
BS.KW.CHAIN jsr LA411 BS.KW.CHAIN jsr LA411
lda AS.HIMEM+1 lda AS.HIMEM+1
sta BS.AS.HIMEMSave pha
ldx XBBEA ldx XBBEA
dex dex
stx AS.HIMEM+1 stx AS.HIMEM+1
jsr BS.LoadBAS jsr BS.LoadBAS
ldx BS.AS.HIMEMSave plx
stx AS.HIMEM+1 stx AS.HIMEM+1
bcs BS.LoadBAS0.RTS bcs BS.LoadBAS0.RTS
@ -1023,7 +1032,7 @@ BS.KW.LOAD jsr BS.LoadBAS0
BS.ENTRY jsr AS.CLEAR1 BS.ENTRY jsr AS.CLEAR1
jsr BS.SetState0 jsr BS.SetState0
stz ZP.CH stz ZP.CH
jmp AS.RESTART1 jmp AS.RESTART1
*-------------------------------------- *--------------------------------------
@ -1238,7 +1247,7 @@ BS.KW.RENAME lda GP.FoundBITS
BS.KW.DELETE lda #MLI.C.DESTROY BS.KW.DELETE lda #MLI.C.DESTROY
.HS 2C BIT ABS .HS 2C BIT ABS
BS.SETPREFIX lda #MLI.C.SETPREFIX BS.SETPREFIX lda #MLI.C.SETPREFIX
LAD9E jmp GP.GOSYSTEM LAD9E jmp GP.GOSYSTEM
*-------------------------------------- *--------------------------------------
BS.KW.LOCK jsr BS.GetFileInfo BS.KW.LOCK jsr BS.GetFileInfo

View File

@ -409,7 +409,7 @@ BS.RAMReset bit GP.CISPARE1
lda #$FF lda #$FF
sta AUX.RAMSIG sta AUX.RAMSIG
dec dec $FE
sta AUX.RAMSIG+1 Set $E000-$FEFF as BLOCK FREE sta AUX.RAMSIG+1 Set $E000-$FEFF as BLOCK FREE
sta IO.CLRWRITEAUX sta IO.CLRWRITEAUX
@ -576,7 +576,7 @@ BS.ReadDirEnt lda #$59
lda $27D lda $27D
sta BS.CAT.EPB sta BS.CAT.EPB
lda $27C lda $27C
sta BS.CAT.EL sta BS.CAT.EL
sta GP.MLIRW.COUNT sta GP.MLIRW.COUNT
@ -799,43 +799,44 @@ LB364 lda #$FF
rts rts
*-------------------------------------- *--------------------------------------
LB36B lda GP.EXECACTV LB36B lda GP.EXECACTV
bpl LB37B bpl .8
sta GP.EXECFILE sta GP.EXECFILE
ldx #$08 ldx #$08
lda BS.REFNUMs,x lda BS.REFNUMs,x
jsr BS.CloseA jsr BS.CloseA
LB37B rts .8 rts
*-------------------------------------- *--------------------------------------
BS.KW.VERIFY bcs LB3B7 BS.KW.VERIFY bcs LB3B7
lda GP.FoundBITS lda GP.FoundBITS
and #CMDBITS1.R and #CMDBITS1.R
bne LB38D bne .8
ldy #0 ldy #0
jsr BS.GetMSGY jsr BS.GetMSGY
jsr MON.CROUT jsr MON.CROUT
LB38D clc .8 clc
rts rts
* lda #$00 * lda #$00
* beq LB39F * beq LB39F BS.KW.FLUSH.1
*--------------------------------------
BS.KW.FLUSH lda GP.FoundBITS BS.KW.FLUSH lda GP.FoundBITS
and #CMDBITS1.R and #CMDBITS1.R
beq LB39F beq .1
jsr BS.CheckFilename jsr BS.CheckFilename
bcs LB3A7 bcs .9
LB39F sta GP.MLICF.REFNUM .1 sta GP.MLICF.REFNUM
lda #MLI.C.FLUSH lda #MLI.C.FLUSH
jsr GP.GOSYSTEM jsr GP.GOSYSTEM
LB3A7 rts .9 rts
*-------------------------------------- *--------------------------------------
BS.KW.OPEN php BS.KW.OPEN php
jsr BS.CheckFilename jsr BS.CheckFilename
@ -1584,6 +1585,182 @@ BS.KW.ONLINE jsr MON.CROUT
BS.KW.NOMON clc BS.KW.NOMON clc
rts rts
*-------------------------------------- *--------------------------------------
* FORMAT VOLNAME,Sx,Dy
* ,A<HEADCOUNT>,E<TRACKCOUNT>,F<STEPPING>
* ,L<CATBLOCK>,B<BLOCK>
*
* 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 BS.Expand2.P .DA #1
.DA MLI.PATHBUF .DA MLI.PATHBUF
*-------------------------------------- *--------------------------------------

View File

@ -141,16 +141,13 @@ XBBB8 .BS 1
*-------------------------------------- *--------------------------------------
*BS.IVERSION .DA #5 *BS.IVERSION .DA #5
*-------------------------------------- *--------------------------------------
BS.AS.HIMEMSave .BS 1 * XBBD6 .BS 1
XBBD7 .BS 1
XBBD8 .BS 1
XBBD9 .DA #4
XBBDA .BS 1
XBBDB .BS 1
XBBDC .BS 1 XBBDC .BS 1
XBBDD .BS 1
*--------------------------------------
BS.TXTTAB .DA $0800 BS.TXTTAB .DA $0800
BS.MEMSIZE .DA HIMEM-$400 BS.MEMSIZE .DA HIMEM-$400
@ -191,6 +188,15 @@ BS.CAT.EL .BS 1
BS.CAT.EPB .BS 1 BS.CAT.EPB .BS 1
*BS.CAT.FileCnt .BS 2 *BS.CAT.FileCnt .BS 2
BS.CAT.EICB .BS 1 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 .LIST ON
BS.FREESPACE .EQ $BC17-* BS.FREESPACE .EQ $BC17-*

View File

@ -37,26 +37,6 @@ LDR.START1 ldx #$FF
jsr LDR.ShrinkRAM jsr LDR.ShrinkRAM
bcs .3 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 lda bRAMFlag
sta GP.CISPARE1 sta GP.CISPARE1
@ -77,20 +57,25 @@ LDR.START1 ldx #$FF
lda #%11000011 pages $B8,$B9,...,$BE,$BF protected lda #%11000011 pages $B8,$B9,...,$BE,$BF protected
sta MLI.MEMTABL+23 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
bit IO.RRAMWRAMBNK2 bit IO.RRAMWRAMBNK2
sta IO.SETALTZP sta IO.SETALTZP
stz Ptr1 ldx #PAKME.AUX-PAKME.Table
stz Ptr2 ldy #LDR.AUX.DST
lda /LDR.AUX.SRC
sta Ptr1+1
lda /LDR.AUX.DST lda /LDR.AUX.DST
sta Ptr2+1 jsr X.Unpak.XatYA
ldx #$10
jsr LDR.MoveXpages
sta IO.CLRALTZP sta IO.CLRALTZP
bit IO.RROMBNK2 bit IO.RROMBNK2
@ -114,20 +99,8 @@ LDR.START1 ldx #$FF
sta MON.POWERUPBYTE sta MON.POWERUPBYTE
sta MON.POWERUP+1 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 L20D3 rts
*-------------------------------------- *--------------------------------------
LDR.CSW cmp #$DD LDR.CSW cmp #$DD
@ -368,8 +341,6 @@ LDR.ShrinkRAM stz bRAMFlag
dex dex
bpl .7 bpl .7
dec bRAMFlag Tell BYE to reset that...
php php
sei sei
@ -381,6 +352,8 @@ LDR.ShrinkRAM stz bRAMFlag
sta IO.CLRWRITEAUX sta IO.CLRWRITEAUX
plp plp
dec bRAMFlag Tell BYE to reset that...
LDR.GFInfoRAM ldy #LDR.RAM LDR.GFInfoRAM ldy #LDR.RAM
lda /LDR.RAM lda /LDR.RAM
@ -448,7 +421,6 @@ LDR.COPYRIGHT.L .EQ *-LDR.COPYRIGHT
.LIST ON .LIST ON
LDR.SIZE .EQ *-LDR.START LDR.SIZE .EQ *-LDR.START
.LIST OFF .LIST OFF
.BS $2400-*
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/basic.fx/basic.s.ldr SAVE usr/src/basic.fx/basic.s.ldr

View File

@ -1,9 +1,6 @@
NEW NEW
AUTO 3,1 AUTO 3,1
*-------------------------------------- *--------------------------------------
ZPXPtr1 .EQ 0
ZPXPtr2 .EQ 2
*--------------------------------------
BSX.JMPX jmp (BSX.JMP,x) BSX.JMPX jmp (BSX.JMP,x)
BSX.JMP BSX.JMP
@ -25,8 +22,20 @@ BSX.MkCatLineF.X .EQ *-BSX.JMP
.DA BSX.MkCatLineF .DA BSX.MkCatLineF
BSX.Online.X .EQ *-BSX.JMP BSX.Online.X .EQ *-BSX.JMP
.DA BSX.Online .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 BSX.Mem.X .EQ *-BSX.JMP
.DA BSX.Mem .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 BSX.CheckOpt jsr BS.TMPBUF3Reset
@ -418,7 +427,7 @@ BSX.IsIntCmd lda #BSX.IntCmds
lda /BSX.IntCmds lda /BSX.IntCmds
sta ZPXPtr1+1 sta ZPXPtr1+1
ldx #36 ldx #37
stx GP.XCNUM stx GP.XCNUM
.1 ldy #$ff .1 ldy #$ff
@ -472,7 +481,8 @@ BSX.IsIntCmd lda #BSX.IntCmds
sec sec
rts rts
*-------------------------------------- *--------------------------------------
BSX.IntCmds .AT "CD" BSX.IntCmds .AT "FORMAT"
.AT "CD"
.AT "ONLINE" .AT "ONLINE"
.AT "MEM" .AT "MEM"
.AT "MTR" .AT "MTR"
@ -545,6 +555,9 @@ BSX.KW.PBITS .DA $8040 IN
.DA $0000 MEM .DA $0000 MEM
.DA $0000 ONLINE .DA $0000 ONLINE
.DA $0491 CD .DA $0491 CD
.DA #$18 FORMAT
.DA #$F6
*-------------------------------------- *--------------------------------------
BSX.KW.JMP .DA BS.KW.EXTERNAL 0 BSX.KW.JMP .DA BS.KW.EXTERNAL 0
.DA BS.KW.IN 1 .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.MEM 34
.DA BS.KW.ONLINE 35 .DA BS.KW.ONLINE 35
.DA BS.KW.PREFIX 36 (CD) .DA BS.KW.PREFIX 36 (CD)
.DA BS.KW.FORMAT 37
*-------------------------------------- *--------------------------------------
BSX.GetErrA tax BSX.GetErrA tax
ldy BSX.MSG.IDX-2,x ldy BSX.MSG.IDX-2,x

677
BASIC.FX/BASIC.S.XF.txt Normal file
View File

@ -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

313
BASIC.FX/BASIC.S.XM.txt Normal file
View File

@ -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

View File

@ -10,6 +10,8 @@ NEW
bpl :1 bpl :1
sta $C010 sta $C010
.EM .EM
*--------------------------------------
.INB inc/io.d2.i
*-------------------------------------- *--------------------------------------
HIMEM .EQ $A000 HIMEM .EQ $A000
LOWERCASE .EQ 1 LOWERCASE .EQ 1
@ -35,29 +37,40 @@ BS.E.DUPFILE .EQ $13
BS.E.FBUSTY .EQ $14 BS.E.FBUSTY .EQ $14
BS.E.FSTILLOPEN .EQ $15 BS.E.FSTILLOPEN .EQ $15
*-------------------------------------- *--------------------------------------
CMDBITS0.PFIX .EQ $80 ;Prefix needs fetching, pathname optional CMDBITS0.PFIX .EQ $80 Prefix needs fetching, pathname optional
CMDBITS0.SLOT .EQ $40 ;No parameters to be processed CMDBITS0.SLOT .EQ $40 No parameters to be processed
CMDBITS0.RRUN .EQ $20 ;Command only valid during program CMDBITS0.RRUN .EQ $20 Command only valid during program
CMDBITS0.FNOPT .EQ $10 ;Filename is optional CMDBITS0.FNOPT .EQ $10 Filename is optional
CMDBITS0.CRFLG .EQ $08 ;CREATE allowed CMDBITS0.CRFLG .EQ $08 CREATE allowed
CMDBITS0.T .EQ $04 ;File type CMDBITS0.T .EQ $04 File type
CMDBITS0.FN2 .EQ $02 ;Filename '2' for RENAME CMDBITS0.FN2 .EQ $02 Filename '2' for RENAME
CMDBITS0.FN1 .EQ $01 ;Filename expected CMDBITS0.FN1 .EQ $01 Filename expected
CMDBITS1.A .EQ $80 ;Address CMDBITS1.A .EQ $80 Address
CMDBITS1.B .EQ $40 ;Byte CMDBITS1.B .EQ $40 Byte
CMDBITS1.E .EQ $20 ;End address CMDBITS1.E .EQ $20 End address
CMDBITS1.L .EQ $10 ;Length CMDBITS1.L .EQ $10 Length
CMDBITS1.LINE .EQ $08 ;'@' line number CMDBITS1.LINE .EQ $08 '@' line number
CMDBITS1.SD .EQ $04 ;Slot and drive numbers CMDBITS1.SD .EQ $04 Slot and drive numbers
CMDBITS1.F .EQ $02 ;Field CMDBITS1.F .EQ $02 Field
CMDBITS1.R .EQ $01 ;Record CMDBITS1.R .EQ $01 Record
CMDBITS1.V .EQ $00 ;Volume number ignored
CMDBITS1.V .EQ $00 Volume number ignored
*-------------------------------------- *--------------------------------------
Ptr1 .EQ 0 ZPPtr1 .EQ 0
Ptr2 .EQ 2 ZPPtr2 .EQ 2
ZPCode .EQ 4 ZPInBufPtr .EQ 4
bRAMFlag .EQ 6 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.WNDLFT .EQ $20
ZP.WNDWDT .EQ $21 ZP.WNDWDT .EQ $21
@ -79,6 +92,13 @@ ZP.A1L .EQ $3C
ZP.A1H .EQ $3D ZP.A1H .EQ $3D
ZP.A2L .EQ $3E ZP.A2L .EQ $3E
ZP.A2H .EQ $3F 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 AS.LINNUM .EQ $50
@ -99,6 +119,9 @@ AS.ERRNUM .EQ $DE
AS.TRCFLG .EQ $F2 AS.TRCFLG .EQ $F2
AS.REMSTK .EQ $F8 AS.REMSTK .EQ $F8
*-------------------------------------- *--------------------------------------
ZPXPtr1 .EQ 0
ZPXPtr2 .EQ 2
*--------------------------------------
IO.LINEBUF .EQ $200 IO.LINEBUF .EQ $200
*-------------------------------------- *--------------------------------------
DIRENTBUF .EQ $259 DIRENTBUF .EQ $259
@ -168,6 +191,7 @@ MLI.DEVNUM .EQ $BF30
MLI.DEVCNT .EQ $BF31 MLI.DEVCNT .EQ $BF31
MLI.DEVLST .EQ $BF32 MLI.DEVLST .EQ $BF32
MLI.MEMTABL .EQ $BF58 MLI.MEMTABL .EQ $BF58
MLI.DATETIME .EQ $BF90
MLI.LEVEL .EQ $BF94 MLI.LEVEL .EQ $BF94
MLI.MACHID .EQ $BF98 MLI.MACHID .EQ $BF98
MLI.SLTBYT .EQ $BF99 MLI.SLTBYT .EQ $BF99
@ -222,22 +246,67 @@ MON.SETVID .EQ $FE93
MON.ENTERMON .EQ $FF69 MON.ENTERMON .EQ $FF69
*-------------------------------------- *--------------------------------------
.INB usr/src/basic.fx/basic.s.ldr .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.SRC .PH HIMEM
LDR.MAIN.DST .EQ * LDR.MAIN.DST .EQ *
.INB usr/src/basic.fx/basic.s.a .INB usr/src/basic.fx/basic.s.a
.INB usr/src/basic.fx/basic.s.b .INB usr/src/basic.fx/basic.s.b
.INB usr/src/basic.fx/basic.s.c .INB usr/src/basic.fx/basic.s.c
.INB usr/src/basic.fx/basic.s.d .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.SRC .PH $BE00
LDR.GP.DST .EQ * LDR.GP.DST .EQ *
.INB usr/src/basic.fx/basic.s.gp .INB usr/src/basic.fx/basic.s.gp
.EP GP.LEN .EQ *-LDR.GP.DST
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
.EP .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 MAN
SAVE usr/src/basic.fx/basic.s SAVE usr/src/basic.fx/basic.s

View File

@ -357,33 +357,36 @@ CS.RUN.LL.DISKII
.2 jsr CS.RUN.CheckCtrlC .2 jsr CS.RUN.CheckCtrlC
bcs .9 bcs .9
>PUSHW L.MSG.LLDISK2 jsr CS.RUN.LL.DISKII.P
>PUSHB CurHead
>PUSHB CurTrack
inc
>PUSHA
>PUSHB TrkCnt
>PUSHBI 4
>SYSCALL PrintF
bcs .9 bcs .9
>PUSHB DSSS0000 jsr CS.RUN.LL.DISKII.FT
>PUSHB VolNum
>PUSHB CurHead
>PUSHB CurTrack
>PUSHWZ Empty track
>LIBCALL hLIBBLKDEV,LIBBLKDEV.D2TrkWrite16s
bcs .9 bcs .9
inc CurTrack
inc CurHead inc CurHead
dec HCounter dec HCounter
bne .2 beq .3
dec TCounter >PUSHB DSSS0000
beq .8 >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 inc CurTrack
.3 dec TCounter
beq .8
lda CurQTrack lda CurQTrack
* clc * clc
adc Stepping adc Stepping
@ -414,20 +417,25 @@ CS.RUN.LL.DISKII
jsr CS.RUN.LL.DISKII.V jsr CS.RUN.LL.DISKII.V
bcs .99 bcs .99
* jsr CS.RUN.MotorOn
* lda #20 .80 rts
* jsr CS.RUN.Wait *--------------------------------------
CS.RUN.LL.DISKII.P
.80 >PUSHW L.MSG.LLDISK2
* >PUSHB DSSS0000 >PUSHB CurHead
* >LIBCALL hLIBBLKDEV,LIBBLKDEV.D2Recalibrate >PUSHB CurTrack
inc
* lda #20 >PUSHA
* jsr CS.RUN.Wait >PUSHB TrkCnt
>PUSHBI 4
clc >SYSCALL PrintF
rts
*--------------------------------------
CS.RUN.LL.DISKII.FT
>PUSHB DSSS0000
>PUSHB VolNum
>PUSHB CurTrack
>LIBCALL hLIBBLKDEV,LIBBLKDEV.D2TrkFmt16s
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.LL.DISKII.V CS.RUN.LL.DISKII.V
@ -795,7 +803,7 @@ OptionVars .DA #bLL,#bLL,#bCustomBlkSize,#bCustomBlkSize
Disk2.Default .DA 280 BlkCnt Disk2.Default .DA 280 BlkCnt
.DA #35 TrkCnt .DA #35 TrkCnt
.DA #4 Stepping .DA #4 Stepping
.DA #1 VolNum .DA #$00 VolNum
.DA #0 AltBB .DA #0 AltBB
.DA #1 HeadCnt .DA #1 HeadCnt
.BS 1 .BS 1
@ -803,7 +811,7 @@ Disk2.Default .DA 280 BlkCnt
Disk2.X .DA 320 BlkCnt Disk2.X .DA 320 BlkCnt
.DA #40 TrkCnt .DA #40 TrkCnt
.DA #4 Stepping .DA #4 Stepping
.DA #2 VolNum .DA #$00 VolNum
.DA #0 AltBB .DA #0 AltBB
.DA #1 HeadCnt .DA #1 HeadCnt
.BS 1 .BS 1
@ -811,7 +819,7 @@ Disk2.X .DA 320 BlkCnt
Disk2.H .DA 384 BlkCnt Disk2.H .DA 384 BlkCnt
.DA #48 TrkCnt .DA #48 TrkCnt
.DA #3 Stepping .DA #3 Stepping
.DA #129 VolNum .DA #$03 VolNum
.DA #$80 AltBB .DA #$80 AltBB
.DA #1 HeadCnt .DA #1 HeadCnt
.BS 1 .BS 1
@ -819,7 +827,7 @@ Disk2.H .DA 384 BlkCnt
Disk2.HX .DA 432 BlkCnt Disk2.HX .DA 432 BlkCnt
.DA #54 TrkCnt .DA #54 TrkCnt
.DA #3 Stepping .DA #3 Stepping
.DA #130 VolNum .DA #$03 VolNum
.DA #$80 AltBB .DA #$80 AltBB
.DA #1 HeadCnt .DA #1 HeadCnt
.BS 1 .BS 1
@ -827,7 +835,7 @@ Disk2.HX .DA 432 BlkCnt
Disk2.DefaultD .DA 640 BlkCnt Disk2.DefaultD .DA 640 BlkCnt
.DA #40 TrkCnt .DA #40 TrkCnt
.DA #4 Stepping .DA #4 Stepping
.DA #192 VolNum .DA #$84 VolNum
.DA #$80 AltBB .DA #$80 AltBB
.DA #2 HeadCnt .DA #2 HeadCnt
.BS 1 .BS 1
@ -835,7 +843,7 @@ Disk2.DefaultD .DA 640 BlkCnt
Disk2.XD .DA 640 BlkCnt Disk2.XD .DA 640 BlkCnt
.DA #40 TrkCnt .DA #40 TrkCnt
.DA #4 Stepping .DA #4 Stepping
.DA #192 VolNum .DA #84 VolNum
.DA #$80 AltBB .DA #$80 AltBB
.DA #2 HeadCnt .DA #2 HeadCnt
.BS 1 .BS 1
@ -843,7 +851,7 @@ Disk2.XD .DA 640 BlkCnt
Disk2.HD .DA 1280 BlkCnt Disk2.HD .DA 1280 BlkCnt
.DA #80 TrkCnt .DA #80 TrkCnt
.DA #2 Stepping .DA #2 Stepping
.DA #193 VolNum .DA #$82 VolNum
.DA #$80 AltBB .DA #$80 AltBB
.DA #2 HeadCnt .DA #2 HeadCnt
.BS 1 .BS 1
@ -851,7 +859,7 @@ Disk2.HD .DA 1280 BlkCnt
Disk2.HXD .DA 1280 BlkCnt Disk2.HXD .DA 1280 BlkCnt
.DA #80 TrkCnt .DA #80 TrkCnt
.DA #2 Stepping .DA #2 Stepping
.DA #193 VolNum .DA #$82 VolNum
.DA #$80 AltBB .DA #$80 AltBB
.DA #2 HeadCnt .DA #2 HeadCnt
.BS 1 .BS 1

View File

@ -31,5 +31,7 @@ IO.D2.WLoad .EQ $C08D W
IO.D2.ReadMode .EQ $C08E R IO.D2.ReadMode .EQ $C08E R
IO.D2.WriteMode .EQ $C08F W IO.D2.WriteMode .EQ $C08F W
*-------------------------------------- *--------------------------------------
*IO.D2.ReadSect .EQ $Cn5C
*--------------------------------------
MAN MAN
SAVE inc/io.d2.i SAVE inc/io.d2.i

View File

@ -6,8 +6,10 @@ LIBBLKDEV.BuildProDOSCat .EQ 6
LIBBLKDEV.D2MotorControl .EQ 8 LIBBLKDEV.D2MotorControl .EQ 8
LIBBLKDEV.D2Recalibrate .EQ 10 LIBBLKDEV.D2Recalibrate .EQ 10
LIBBLKDEV.D2MoveHead .EQ 12 LIBBLKDEV.D2MoveHead .EQ 12
LIBBLKDEV.D2TrkRead16s .EQ 14 LIBBLKDEV.D2HeadSelect .EQ 14
LIBBLKDEV.D2TrkWrite16s .EQ 16 LIBBLKDEV.D2TrkFmt16s .EQ 16
LIBBLKDEV.D2TrkRead16s .EQ 18
LIBBLKDEV.D2TrkWrite16s .EQ 20
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE inc/libblkdev.i SAVE inc/libblkdev.i

View File

@ -65,6 +65,31 @@ D2.Recalibrate >PULLB D2.DrvSlt
.9 rts .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 D2.MoveHead >PULLB D2.TargetQTrack
>PULLB D2.CurrentQTrack >PULLB D2.CurrentQTrack
>PULLB D2.DrvSlt >PULLB D2.DrvSlt
@ -136,7 +161,7 @@ D2.MoveHead.SEI lda D2.CurrentQTrack
jsr D2.Wait25600usec jsr D2.Wait25600usec
lda IO.D2.Ph0Off,y lda IO.D2.Ph0Off,y
bcc .90 bcc .90
lda IO.D2.Ph0Off,x lda IO.D2.Ph0Off,x
@ -149,11 +174,61 @@ D2.SeekPhOnY and #6
lda IO.D2.Ph0On,y lda IO.D2.Ph0On,y
rts 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 * # D2TrkRead16s
* Write a track (16 sectors) * Write a track (16 sectors)
* PUSHB = DSSS0000 * PUSHB DSSS0000
* PUSHB = TrackNum * 4 : 0->136+ * PUSHB TrackNum
* PUSHW = Ptr to 16*256 buffer * PUSHW Ptr to 16*256 buffer
* ## RETURN VALUE * ## RETURN VALUE
* CC : success, A = VolNum * CC : success, A = VolNum
* CS : A = Error * CS : A = Error
@ -173,10 +248,9 @@ D2.TrkRead16s.RTS
*/-------------------------------------- */--------------------------------------
* # D2TrkWrite16s * # D2TrkWrite16s
* Write a track (16 sectors) * Write a track (16 sectors)
* PUSHB = DSSS0000 * PUSHB DSSS0000
* PUSHB = VolNum * PUSHB VolNum
* PUSHB = HeadNum (0,1) * PUSHB TrackNum
* PUSHB = TrackNum * 4 : 0->136+
* PUSHW = Ptr to 16*256 buffer * PUSHW = Ptr to 16*256 buffer
* ## RETURN VALUE * ## RETURN VALUE
* CC : success * CC : success
@ -184,7 +258,6 @@ D2.TrkRead16s.RTS
*\-------------------------------------- *\--------------------------------------
D2.TrkWrite16s >PULLW ZPPtr1 D2.TrkWrite16s >PULLW ZPPtr1
>PULLB D2.TrkNum >PULLB D2.TrkNum
>PULLB D2.HeadNum
>PULLB D2.VolNum >PULLB D2.VolNum
>PULLB D2.DrvSlt >PULLB D2.DrvSlt
@ -258,12 +331,9 @@ D2.TrkWrite16s >PULLW ZPPtr1
lda #0 lda #0
sta (ZPPtr2) sta (ZPPtr2)
bit D2.VolNum
bvc .80
jsr D2.HeadSelect jsr D2.HeadSelect
.80 jsr D2.WriteTrackPtr2 jsr D2.WriteTrackPtr2
php php
pha pha
@ -291,9 +361,9 @@ D2.TrkWriteNIB >PULLW ZPPtr1
>PULLB D2.DrvSlt >PULLB D2.DrvSlt
jsr D2.CheckDiskII was it a DISK II ? jsr D2.CheckDiskII was it a DISK II ?
bcs .9 bcs .99
.9 rts .99 rts
*-------------------------------------- *--------------------------------------
* A=DSSS0000 * A=DSSS0000
*-------------------------------------- *--------------------------------------
@ -361,23 +431,6 @@ D2.DrvSpinCheck ldy #0
.8 sec .8 sec
rts 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 D2.Wait25600usec
lda #0 lda #0

View File

@ -40,6 +40,7 @@ ZPPtr1 .EQ ZPLIB
ZPPtr2 .EQ ZPLIB+2 ZPPtr2 .EQ ZPLIB+2
ZPPtr3 .EQ ZPLIB+4 ZPPtr3 .EQ ZPLIB+4
ZPPtr4 .EQ ZPLIB+6 ZPPtr4 .EQ ZPLIB+6
X.TRkFMT.Z .EQ ZPLIB+8
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------
@ -62,13 +63,16 @@ CS.START cld
.DA D2.MotorControl .DA D2.MotorControl
.DA D2.Recalibrate .DA D2.Recalibrate
.DA D2.MoveHead .DA D2.MoveHead
.DA D2.HeadSelect
.DA D2.TrkFmt16s
.DA D2.TrkRead16s .DA D2.TrkRead16s
.DA D2.TrkWrite16s .DA D2.TrkWrite16s
.DA D2.TrkReadNIB .DA D2.TrkReadNIB
.DA D2.TrkWriteNIB .DA D2.TrkWriteNIB
L.D2.TrkWriter .DA D2.TrkWriter L.X.BB.PRODOS .DA X.BB.PRODOS
L.ProDOS.Boot .DA ProDOS.Boot L.X.BB.SOS .DA X.BB.SOS
L.ProDOSFX.Boot .DA ProDOSFX.Boot L.X.BB.FXpart1 .DA X.BB.FX2
L.X.BB.FXpart2 .DA X.BB.FX2+512
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
LIB.LOAD LIB.LOAD
@ -97,11 +101,15 @@ GetProDOSCatSize.I
clc for now, no partial bitmap blk to add clc for now, no partial bitmap blk to add
tay DevSize is xxxxxxxx00000000 ? tay DevSize is xxxxxxxx00000000 ?
beq .1 beq .1
sec sec
.1 lda VolDirHdr.TB+1 Get DevSizeHI .1 lda VolDirHdr.TB+1 Get DevSizeHI
bit #$0f DevSize is xxxx000000000000 ? bit #$0f DevSize is xxxx000000000000 ?
beq .2 beq .2
sec sec
.2 php .2 php
lsr lsr
lsr lsr
@ -142,41 +150,33 @@ BuildProDOSCat >PULLW ZPPtr1 DstBuf
ldx #3 ldx #3
.1 lda DATELO,x .10 lda DATELO,x
sta VolDirHdr.CT,x sta VolDirHdr.CT,x
dex dex
bpl .1 bpl .10
bit VolDirHdr.Options
bmi .11
* Blk 0 : ProDOS Boot Code * Blk 0 : ProDOS Boot Code
>LDYA L.ProDOS.Boot >LDYA L.X.BB.PRODOS
bit VolDirHdr.Options jsr Add2Pages
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
* Blk 1 : (SOS boot code) * Blk 1 : (SOS boot code)
inc ZPPtr1+1 >LDYA L.X.BB.SOS
inc ZPPtr1+1 jsr Add2Pages
bra .20
.11 >LDYA L.X.BB.FXpart1
jsr Add2Pages
>LDYA L.X.BB.FXpart2
jsr Add2Pages
* Blk 2 : First Directory Block * Blk 2 : First Directory Block
jsr ZeroPtr1 .20 jsr ZeroPtr1
* ldy #0 * ldy #0
@ -333,10 +333,36 @@ ZeroPtr1 phy
ply ply
rts 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 .INB usr/src/lib/libblkdev.s.d2
*-------------------------------------- *--------------------------------------
CS.END 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 * TrkWriter
* X = Slot Cn * X = Slot Cn
* ZPPtr1 = Ptr To NibbleBuf * ZPPtr1 = Ptr To NibbleBuf
@ -529,73 +555,9 @@ FC2Nib .HS 96
*-------------------------------------- *--------------------------------------
LC.BitMap .HS 8040201008040201 LC.BitMap .HS 8040201008040201
*-------------------------------------- *--------------------------------------
ProDOS.Boot .HS 01.38.b0.03.4c.32.a1.86.43.c9.03.08.8a.29.70.4a X.BB.PRODOS .INB usr/src/shared/x.bb.prodos.s
.HS 4a.4a.4a.09.c0.85.49.a0.ff.84.48.28.c8.b1.48.d0 X.BB.SOS .INB usr/src/shared/x.bb.sos.s
.HS 3a.b0.0e.a9.03.8d.00.08.e6.3d.a5.49.48.a9.5b.48 X.BB.FX2 .INB usr/src/shared/x.bb.fx2.s
.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
*-------------------------------------- *--------------------------------------
* Block 2 : First DIR block * Block 2 : First DIR block
*-------------------------------------- *--------------------------------------

View File

@ -20,8 +20,10 @@ ILDR.START jsr MLI check for file 'atinit'
.1 lda RROMBNK2 enable ROM .1 lda RROMBNK2 enable ROM
jsr sysentry execute ATinit 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 lda LDR.MLIOL.P+1 Boot unitnum
sta ILDR.MLIRB.P+1 sta ILDR.MLIRB.P+1
@ -30,7 +32,7 @@ ILDR.START jsr MLI check for file 'atinit'
ldy #$02 read directory into buffer ldy #$02 read directory into buffer
ldx #0 ldx #0
.2 sta dst+1 .22 sta dst+1
sta ILDR.MLIRB.P+3 Data buf HI sta ILDR.MLIRB.P+3 Data buf HI
sty ILDR.MLIRB.P+4 Blk Num LO sty ILDR.MLIRB.P+4 Blk Num LO
stx ILDR.MLIRB.P+5 Blk Num HI stx ILDR.MLIRB.P+5 Blk Num HI
@ -38,14 +40,14 @@ ILDR.START jsr MLI check for file 'atinit'
jsr MLI jsr MLI
.DA #MLIREADBLOCK .DA #MLIREADBLOCK
.DA ILDR.MLIRB.P .DA ILDR.MLIRB.P
bcs .9 bcs .99
ldy #$03 get next block# from link ldy #$03 get next block# from link
lda (dst),y lda (dst),y
tax tax
dey dey
ora (dst),y 00 00 -> Last Block ora (dst),y 00 00 -> Last Block
beq .8 beq .28
lda (dst),y lda (dst),y
tay tay
@ -53,13 +55,11 @@ ILDR.START jsr MLI check for file 'atinit'
inc inc
inc add $200 to buffer pointer inc add $200 to buffer pointer
cmp /dbuf+$800 until it points past end of buffer. 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 .DO PM
*--------------------------------------
ILDR.ENUMPM .DO PM
jsr ILDR.EnumInit jsr ILDR.EnumInit
@ -68,10 +68,10 @@ ILDR.ENUMPM .DO PM
lda /ILDR.KMPFX lda /ILDR.KMPFX
clc prefix clc prefix
jsr ILDR.EnumNext jsr ILDR.EnumNext
bcs .4 bcs .8
jsr ILDR.LoadFilePBuf jsr ILDR.LoadFilePBuf
bcs ILDR.MLIERR bcs .99
ldx #3 ldx #3
@ -95,10 +95,12 @@ ILDR.ENUMPM .DO PM
>DEBUGOA >DEBUGOA
bra .1 bra .1
.99 jmp ILDR.MLIERR
.FIN .8 .FIN
*-------------------------------------- *--------------------------------------
.4 jsr ILDR.EnumInit jsr ILDR.EnumInit
ldx #S.FI.T.SYS ldx #S.FI.T.SYS
ldy #ILDR.SYSTEMSFX ldy #ILDR.SYSTEMSFX

View File

@ -691,28 +691,26 @@ XRW.TrackSelect lda #2
bcc .1 bcc .1
rts rts
*--------------------------------------
.4 ldx XRW.UnitIndex .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
asl CS if 2 heads bcc .5 single sided
bmi .5 > 192 ????
lda XRW.ReqTrack lda XRW.ReqTrack
bcc .50 and #1
lsr Track 160 -> 80+Carry
pha
lda #0 Carry = Head
rol
rol A = 0/2 rol A = 0/2
ora A2L ora A2L
@ -726,14 +724,12 @@ XRW.TrackSelect lda #2
lda IO.D2.Ph0Off,y lda IO.D2.Ph0Off,y
lda IO.D2.Ph0Off+4,y lda IO.D2.Ph0Off+4,y
pla
.50 sta XRW.ReqTrack2
lda XRW.AddrField.T lda XRW.AddrField.T
sta XRW.D2Trk-1,x sta XRW.D2Trk-1,x
bra .1
cmp XRW.ReqTrack2 .5 lda XRW.AddrField.T
cmp XRW.ReqTrack
beq .8 beq .8
lda XRW.BadSeekCnt lda XRW.BadSeekCnt
@ -751,7 +747,7 @@ XRW.TrackSelect lda #2
sta XRW.D2SeekTime-1,x sta XRW.D2SeekTime-1,x
.7 ldy XRW.D2Trk-1,x From actual Pos... .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 jsr XRW.SeekYA X = XRW.UnitIndex
bra .3 bra .3
@ -850,33 +846,41 @@ XRW.SeekPhOnY and #6
lda IO.D2.Ph0On,y lda IO.D2.Ph0On,y
rts rts
*-------------------------------------- *--------------------------------------
* A = 0 -> 159, X = XRW.UnitIndex * In:
* A = Logical Track 0 -> 159,
* X = XRW.UnitIndex
* D2VolNum : d0000sss
* Out:
* A =
*-------------------------------------- *--------------------------------------
XRW.Trk2Qtrk sta pch XRW.Trk2Qtrk sta pch
bit XRW.D2VolNum-1,x lda XRW.D2VolNum-1,x
bpl .1 < $80 : x4 bne .1
bvs .2
asl $80 < v < $BF : x3 .10 lda pch standard SS 4 qtrack stepping
adc pch asl
rts
.1 asl
asl asl
rts rts
* 2 sides :
.2 lda XRW.D2VolNum-1,x > $C0 : 2 heads
lsr CS : $C1 = 80, 2 heads
lda pch .1 bpl .2
and #$FE cmp #$85
bcs .8 x2 for 80trk (ELITE III) 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 .8 rts
*-------------------------------------- *--------------------------------------
@ -888,7 +892,7 @@ XRW.Trk2Qtrk sta pch
* on entry: buf is 2-byte pointer to 256 bytes of user data. * 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 * 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 XRW.PreNibble lda buf self-modify the addresses because of
ldy buf+1 the fast timing required. ldy buf+1 the fast timing required.
@ -1069,7 +1073,7 @@ XRW.TargetQTrack .HS 00
.HS B0B4B8BCC0C4C8 .HS B0B4B8BCC0C4C8
* .HS FFFF * .HS FFFF
XRW.RetryCnt .HS 00 XRW.RetryCnt .HS 00
XRW.ReqTrack2 .HS 00 .HS 00
.HS CCD0D4D8DCE0 .HS CCD0D4D8DCE0
XRW.bWrite .HS 00 XRW.bWrite .HS 00
.HS E4E8ECF0F4F8FC .HS E4E8ECF0F4F8FC

View File

@ -30,11 +30,13 @@ BB.HdrTrk .EQ $55
BB.HdrVol .EQ $56 BB.HdrVol .EQ $56
BB.Hdr96 .EQ $57 BB.Hdr96 .EQ $57
BB.tmpTrk .EQ $58
nbuf1 .EQ $300 nbuf1 .EQ $300
dnib .EQ $2d6 dnib .EQ $2d6
clrscrn .EQ $fc58 clrscrn .EQ $fc58
scrn .EQ $5b6
sosid .EQ $c00 sosid .EQ $c00
entlen .EQ sosid+$23 entlen .EQ sosid+$23
kernel .EQ $2000 kernel .EQ $2000
@ -125,15 +127,13 @@ modboot ldy mods-1,x
*-------------------------------------- *--------------------------------------
ndsk2 sta dent save low adr of device call entry. 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 ldy #1
sty idxl
sty idxh
sty idxp
sty blok+1
iny y=1
sty dcmd set read command. sty dcmd set read command.
iny y=2 iny y=2
@ -146,8 +146,9 @@ ndsk2 sta dent save low adr of device call entry.
rddir jsr goread call read block routine. rddir jsr goread call read block routine.
bcs bterr2 give up on error. bcs bterr2 give up on error.
inc iobuff+1 * inc iobuff+1
inc iobuff+1 * inc iobuff+1
inc blok inc blok
lda blok have all directory blocks been read? lda blok have all directory blocks been read?
cmp #6 cmp #6
@ -177,7 +178,7 @@ nxdent2 sty idxl
ldy #6 ldy #6
lookpro lda (idxl),y look for matching name. lookpro lda (idxl),y look for matching name.
cmp BB.ProDOS,y cmp BB.FX.ProDOS,y
bne nxdent branch if no match. bne nxdent branch if no match.
dey dey
@ -197,8 +198,7 @@ lookpro lda (idxl),y look for matching name.
lda (idxl),y lda (idxl),y
sta blok+1 sta blok+1
lda #0 now set up to read kernel. stz idxl
sta idxl
ldy #$1e read index block at $1e00 and ldy #$1e read index block at $1e00 and
sty idxl+1 kernel at $2000 sty idxl+1 kernel at $2000
@ -209,8 +209,8 @@ lookpro lda (idxl),y look for matching name.
rdkernl jsr goread read index block. rdkernl jsr goread read index block.
bterr2 bcs booterr bterr2 bcs booterr
inc iobuff+1 * inc iobuff+1
inc iobuff+1 * inc iobuff+1
ldy idxp get index pointer ldy idxp get index pointer
inc idxp bump for next time. inc idxp bump for next time.
@ -227,16 +227,19 @@ booterr jsr clrscrn clear video
ldy #BB.MSG.ERR.Len-1 ldy #BB.MSG.ERR.Len-1
.1 lda BB.MSG.ERR,y .1 lda BB.MSG.ERR,y
sta scrn,y sta $5b6,y
dey dey
bpl .1 bpl .1
jmp $ff69 jmp $ff69
*-------------------------------------- *--------------------------------------
goread lda iobuff goread
sta buff * lda iobuff
stz buff
lda iobuff+1 lda iobuff+1
sta buff+1 sta buff+1
inc iobuff+1
inc iobuff+1
jmp (dent) jmp (dent)
*-------------------------------------- *--------------------------------------
mods .DA #mod1,#mod2,#mod3,#mod4,#mod5,#mod6,#mod7,#mod8,#mod8+1,#mod9 mods .DA #mod1,#mod2,#mod3,#mod4,#mod5,#mod6,#mod7,#mod8,#mod8+1,#mod9
@ -247,11 +250,11 @@ endcode ldx BB.Slotn0
clc clc
rts rts
jmp BB.Seek jmp BB.FX.SeekRead
*-------------------------------------- *--------------------------------------
BB.MSG.ERR .AS -"BOOT ERROR" BB.MSG.ERR .AS -"BOOT ERROR"
BB.MSG.ERR.Len .EQ *-BB.MSG.ERR 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" .AS "PRODOS"
*-------------------------------------- *--------------------------------------
BB.ReadBlock lda blok figure out track & sector. BB.ReadBlock lda blok figure out track & sector.
@ -278,14 +281,14 @@ BB.ReadBlock lda blok figure out track & sector.
ldx BB.Slotn0 ldx BB.Slotn0
lda IO.D2.DrvOn,x lda IO.D2.DrvOn,x
jsr BB.Seek go read sector. jsr BB.FX.SeekRead
inc dbuf+1 bump address inc dbuf+1 bump address
inc sector inc sector
inc sector and sector # inc sector and sector #
bcs .9 branch if error. bcs .9 branch if error.
jsr BB.Seek jsr BB.FX.Read
.9 ldy IO.D2.DrvOff,x .9 ldy IO.D2.DrvOff,x
rts return error status in carry. rts return error status in carry.
@ -304,30 +307,47 @@ BB.Wait100usecA phx (3)
rts (6) rts (6)
*-------------------------------------- *--------------------------------------
BB.Trk2Qtrk asl x2 BB.Trk2Qtrk ldy BB.HdrVol
sta .1+1 beq .5
cpy #$85
bcs .5 > 192 ? must be a buggy 254
bit BB.HdrVol sta BB.tmpTrk
bpl .1 x4
bvs .1 > $C0 ? (VOL=254)
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.Trk2Qtrk.RTS rts
*-------------------------------------- *--------------------------------------
BB.Seek lda BB.HdrTrk get track we're on BB.FX.SeekRead lda BB.TargetTrk
jsr BB.Trk2Qtrk
sta BB.CurrentQTrack
lda BB.TargetTrk
jsr BB.Trk2Qtrk jsr BB.Trk2Qtrk
sta BB.TargetQTrack sta BB.TargetQTrack
lda BB.CurrentQTrack lda BB.HdrTrk get track we're on
jsr BB.Trk2Qtrk
sta BB.CurrentQTrack
cmp BB.TargetQTrack cmp BB.TargetQTrack
beq BB.Read beq BB.FX.Read
bit #1 bit #1
bne .1 bne .1
@ -399,7 +419,7 @@ BB.Seek lda BB.HdrTrk get track we're on
lda IO.D2.Ph0Off,x lda IO.D2.Ph0Off,x
.11 .11
*-------------------------------------- *--------------------------------------
BB.Read ldx BB.Slotn0 BB.FX.Read ldx BB.Slotn0
stz BB.RetryCnt stz BB.RetryCnt
php php
@ -549,17 +569,14 @@ zzzend ldx BB.Slotn0
rts rts
chg5 .EQ *-chg5a chg5 .EQ *-chg5a
goseek jmp BB.Seek goseek jmp BB.FX.SeekRead
.ED .ED
*-------------------------------------- *--------------------------------------
.LIST ON .LIST ON
BB.End .EQ *
BB.Free .EQ $a00-* BB.Free .EQ $a00-*
.BS BB.Free .BS BB.Free
.LIST OFF .LIST OFF
.EP .EP
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/lib/libblkdev.s.bb SAVE usr/src/shared/x.bb.fx.s
LOAD usr/src/lib/libblkdev.s
ASM

571
SHARED/X.BB.FX2.S.txt Normal file
View File

@ -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

38
SHARED/X.BB.PRODOS.S.txt Normal file
View File

@ -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

38
SHARED/X.BB.SOS.S.txt Normal file
View File

@ -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

193
SHARED/X.TRKFMT.S.txt Normal file
View File

@ -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