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

View File

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

View File

@ -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<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
.DA MLI.PATHBUF
*--------------------------------------

View File

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

View File

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

View File

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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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