BASIC:Use AUX Mem, CD ..

This commit is contained in:
burniouf 2022-03-27 14:59:32 +02:00
parent e5abc173c6
commit 60620b33f5
13 changed files with 488 additions and 313 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -443,8 +443,10 @@ L9CDF lda GP.CATFLAG
beq L9CD3 beq L9CD3
jsr BS.LINEBUFCLR80 jsr BS.LINEBUFCLR80
ldx #$10
jsr BS.PRINTERRMSGX ldy #$10
ldx #BSX.GetMSGY.X
jsr BS.ToAUX
L9CF5 ldx #$50 L9CF5 ldx #$50
bne L9CD3 bne L9CD3
@ -830,10 +832,11 @@ BS.SetState stx GP.STATE
rts rts
*-------------------------------------- *--------------------------------------
BS.PRINTERR tay BS.PRINTERR ldx #BSX.GetErrA.X
ldx BS.ERRCODES-2,y .HS 2C BIT ABS
BS.GetMsgY ldx #BSX.GetMsgY.X
jsr BS.ToAUX
BS.PRINTERRX jsr BS.PRINTERRMSGX
ldx GP.INPTR ldx GP.INPTR
stx BS.CATWIDTH stx BS.CATWIDTH
jsr MON.CROUT jsr MON.CROUT
@ -850,50 +853,6 @@ BS.LINEBUFOUT ldx #$00
jmp MON.CROUT jmp MON.CROUT
*-------------------------------------- *--------------------------------------
BS.PRINTERRMSGX ldy #$00
clc
sty GP.INPTR
L9FBA jsr L9FD6
bne L9FC4
jsr L9FD6
ora #$10
L9FC4 tay
lda BS.TBL6-1,y
beq L9FD5
ldy GP.INPTR
sta IO.LINEBUF+1,y
inc GP.INPTR
bne L9FBA
L9FD5 rts
*--------------------------------------
L9FD6 lda BS.TBL7,x
bcs L9FED
beq L9FE3
lsr
lsr
lsr
lsr
sec
rts
L9FE3 inx
lda BS.TBL7,x
sta GP.INPTR
inx
bne L9FD6
L9FED inx
and #$0F
clc
rts
*--------------------------------------
BS.WriteTBUF256 lda #$00 BS.WriteTBUF256 lda #$00
ldy #$01 ldy #$01
bne BS.WriteTBUFAY bne BS.WriteTBUFAY
@ -1252,7 +1211,7 @@ LA1FB sta XBBB5
LA24E sec LA24E sec
rts rts
*--------------------------------------
LA250 jsr BS.KW.FRE LA250 jsr BS.KW.FRE
bcs LA29D bcs LA29D

View File

@ -227,28 +227,36 @@ LA411 jsr LA021
sbc AS.VARSTART sbc AS.VARSTART
sta BS.BAS.HDR sta BS.BAS.HDR
sta XBBED sta XBBED
lda AS.ARRAYEND+1 lda AS.ARRAYEND+1
sbc AS.VARSTART+1 sbc AS.VARSTART+1
sta BS.BAS.HDR+1 sta BS.BAS.HDR+1
sta XBBEE sta XBBEE
lda AS.ARRAYSTART lda AS.ARRAYSTART
sbc AS.VARSTART sbc AS.VARSTART
sta BS.BAS.HDR+2 sta BS.BAS.HDR+2
lda AS.ARRAYSTART+1 lda AS.ARRAYSTART+1
sbc AS.VARSTART+1 sbc AS.VARSTART+1
sta BS.BAS.HDR+3 sta BS.BAS.HDR+3
lda AS.STRINGSTART lda AS.STRINGSTART
sbc XBBED sbc XBBED
sta ZP.A1L sta ZP.A1L
lda AS.STRINGSTART+1 lda AS.STRINGSTART+1
sbc #$00 sbc #$00
sta ZP.A1H sta ZP.A1H
lda AS.ARRAYEND lda AS.ARRAYEND
sbc XBBED sbc XBBED
sta ZP.PCL sta ZP.PCL
lda AS.ARRAYEND+1 lda AS.ARRAYEND+1
sbc #$00 sbc #$00
sta ZP.PCH sta ZP.PCH
lda #$03 lda #$03
sta XA386+1 sta XA386+1
jsr BS.MoveMemDown jsr BS.MoveMemDown
@ -260,14 +268,17 @@ LA411 jsr LA021
inc ZP.A1H inc ZP.A1H
lda ZP.A1H lda ZP.A1H
sta XBBEA sta XBBEA
lda AS.HIMEM lda AS.HIMEM
sec sec
sbc ZP.A1L sbc ZP.A1L
sta XBBEB sta XBBEB
lda AS.HIMEM+1 lda AS.HIMEM+1
sta BS.BAS.HDR+4 sta BS.BAS.HDR+4
sbc ZP.A1H sbc ZP.A1H
sta XBBEC sta XBBEC
clc clc
LA47F rts LA47F rts
@ -618,7 +629,7 @@ BS.DOSCMD lda #$FF
LA6A2 jmp BS.SYNERR LA6A2 jmp BS.SYNERR
LA6A5 jsr BS.IsIntCmdMTR LA6A5 jsr BS.IsIntCmd
bcs LA6A2 bcs LA6A2
lda GP.STATE lda GP.STATE
@ -835,25 +846,18 @@ LA806 jsr BS.GetVolAtSxDy
bcs LA849 bcs LA849
LA80B lda GP.XCNUM LA80B lda GP.XCNUM
asl beq .8
tax
lda BS.KW.JMP,x cmp #25 PREFIX
sta BS.KW.JMPADDR beq .8
lda BS.KW.JMP+1,x
sta BS.KW.JMPADDR+1
clc cmp #34 CD
txa beq .8
beq LA844
eor #$32
beq LA844
lda GP.AllowedBITS+1 lda GP.AllowedBITS+1
and #$04 and #$04
beq .8
beq LA844
lda GP.FoundBITS lda GP.FoundBITS
lsr lsr
bcc LA844 bcc LA844
@ -871,6 +875,7 @@ LA80B lda GP.XCNUM
lda #BS.E.PATHNFND6 lda #BS.E.PATHNFND6
rts rts
.8 clc
LA844 jmp (BS.KW.JMPADDR) LA844 jmp (BS.KW.JMPADDR)
BS.SYNERR lda #BS.E.SYNTAX BS.SYNERR lda #BS.E.SYNTAX
@ -1100,7 +1105,7 @@ LA9AF lda BS.TMPBUF4,x
rts rts
LA9C1 jmp LA76C LA9C1 jmp LA76C
*--------------------------------------
BS.GetFTypeASC ldy #$00 BS.GetFTypeASC ldy #$00
LA9C6 sta BS.TMPBUF4,y LA9C6 sta BS.TMPBUF4,y
@ -1317,56 +1322,16 @@ BS.TMPBUF3x2 asl BS.TMPBUF4
rol BS.TMPBUF4+2 rol BS.TMPBUF4+2
rts rts
*-------------------------------------- *--------------------------------------
BS.IsIntCmd ldx #$1F BS.IsIntCmd ldx #BSX.IsIntCmd.X
stx GP.XCNUM jsr BS.ToAUX
lda BS.CMDBUF
eor #'-'
bne LAB03
inc GP.XCNUM bcc .8
sta GP.XLEN
bne LAB20
LAB03 ldy #$08 dec GP.XCNUM $ff
sty GP.XLEN
LAB08 lda BS.KW.LEN-1,x
bpl LAB13
and #$7F
dey
dec GP.XLEN
LAB13 tax
LAB14 lda BS.CMDBUF,y
jsr BS.ToUpper
cmp BS.KW.TABLE,x
bne LAB33
dex
dey
bpl LAB14
LAB20 lda GP.XCNUM
asl
tax
lda BS.KW.PBITS-1,x
sta GP.AllowedBITS+1
lda BS.KW.PBITS-2,x
sta GP.AllowedBITS
clc
rts
LAB33 ldy GP.XLEN
dec GP.XCNUM
ldx GP.XCNUM
bne LAB08
dec GP.XCNUM
sec sec
jmp GP.EXTRNCMD jmp GP.EXTRNCMD
.8 rts
*-------------------------------------- *--------------------------------------
BS.TMPBUF3Reset stz BS.TMPBUF4 BS.TMPBUF3Reset stz BS.TMPBUF4
stz BS.TMPBUF4+1 stz BS.TMPBUF4+1

View File

@ -377,12 +377,14 @@ LB087 lda #BS.E.NODEV
*-------------------------------------- *--------------------------------------
BS.KW.BYE jsr LB562 BS.KW.BYE jsr LB562
jsr LB36B jsr LB36B
jsr BS.RAMReset
* lda #$65 * lda #$65
jsr MLI jsr MLI
.DA #MLI.C.QUIT .DA #MLI.C.QUIT
.DA GP.MLIRW .DA GP.MLIRW
*-------------------------------------- *--------------------------------------
BS.QUIT.IIgs jsr MLI BS.QUIT.IIgs jsr BS.RAMReset
jsr MLI
.DA #MLI.C.QUIT .DA #MLI.C.QUIT
.DA .1 .DA .1
@ -392,6 +394,25 @@ BS.QUIT.IIgs jsr MLI
.DA #0 .DA #0
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
BS.RAMReset bit GP.CISPARE1
bpl .8
php
sei
sta IO.SETWRITEAUX
lda #$FF
sta AUX.RAMSIG
dec
sta AUX.RAMSIG+1 Set $E000-$FEFF as BLOCK FREE
sta IO.CLRWRITEAUX
plp
.8 rts
*--------------------------------------
BS.KW.CAT lda #$27 BS.KW.CAT lda #$27
.HS 2C BIT ABS .HS 2C BIT ABS
BS.KW.CATALOG lda #$4F BS.KW.CATALOG lda #$4F
@ -417,8 +438,11 @@ LB0C1 jsr LB1BA
jsr BS.LINEBUFOUT jsr BS.LINEBUFOUT
jsr MON.CROUT jsr MON.CROUT
jsr BS.LINEBUFCLR80 jsr BS.LINEBUFCLR80
ldx #$10
jsr BS.PRINTERRMSGX ldy #$10
ldx #BSX.GetMSGY.X
jsr BS.ToAUX
jsr BS.LINEBUFOUT jsr BS.LINEBUFOUT
jsr MON.CROUT jsr MON.CROUT
lda XBC14 lda XBC14
@ -510,8 +534,11 @@ LB157 ldx #BS.CMDBUF
bcs LB127 bcs LB127
jsr BS.LINEBUFCLR80 jsr BS.LINEBUFCLR80
ldx #$36
jsr BS.PRINTERRMSGX ldy #$36
ldx #BSX.GetMSGY.X
jsr BS.ToAUX
jsr BS.TMPBUF3Reset jsr BS.TMPBUF3Reset
lda GP.FIAUXTYPE lda GP.FIAUXTYPE
ldx GP.FIAUXTYPE+1 ldx GP.FIAUXTYPE+1
@ -794,8 +821,8 @@ BS.KW.VERIFY bcs LB3B7
and #$01 and #$01
bne LB38D bne LB38D
ldx #$00 ldy #0
jsr BS.PRINTERRX jsr BS.GetMSGY
jsr MON.CROUT jsr MON.CROUT
LB38D clc LB38D clc
@ -944,7 +971,7 @@ LB481 inx
BS.KW.NOMON clc BS.KW.NOMON clc
rts rts
*--------------------------------------
BS.CheckFilename BS.CheckFilename
lda GP.FoundBITS lda GP.FoundBITS
and #$01 and #$01
@ -1067,7 +1094,7 @@ LB53F stz MLI.LEVEL
LB55E dec GP.OPENCNT LB55E dec GP.OPENCNT
rts rts
*--------------------------------------
LB562 ldx GP.OPENCNT LB562 ldx GP.OPENCNT
beq LB573 beq LB573
@ -1479,101 +1506,66 @@ LB858 stx GP.SSGINFO
BS.JMP.GP.VSYSO jmp (GP.VSYSO) BS.JMP.GP.VSYSO jmp (GP.VSYSO)
BS.JMP.GP.VSYSI jmp (GP.VSYSI) BS.JMP.GP.VSYSI jmp (GP.VSYSI)
*-------------------------------------- *--------------------------------------
BS.KW.MTR jsr BS.SetState0
jsr MON.CLREOL
jmp MON.ENTERMON
*--------------------------------------
BS.Expand2.P .DA #1
.DA MLI.PATHBUF
*--------------------------------------
BS.Expand2PATHBUF BS.Expand2PATHBUF
lda #1 stz MLI.PATHBUF reset target path
sta MLI.PATHBUF
lda #'/' set target path = 1/ lda BS.CMDBUF
sta MLI.PATHBUF+1 cmp #'/' new path is absolute ?
* >DEBUG
cmp BS.CMDBUF new path is absolute ?
beq .1 beq .1
jsr MLI no, get current path as a base jsr MLI no, get current path as a base
.DA #MLI.C.GETPREFIX .DA #MLI.C.GETPREFIX
.DA BS.Expand2.P .DA BS.Expand2.P
.1 stz BS.Expand.Ptr .1 ldx #BSX.Expand.X
*--------------------------------------
BS.ToAUX stx .1+1
.2 jsr BS.Expand.GetN sei
beq .8
tsx
sta IO.SETALTZP
stx $100
ldx $101
txs
cmp #'.' bit IO.RRAMWRAMBNK1
bne .6 bit IO.RRAMWRAMBNK1
jsr BS.Expand.GetN cli
beq .9
cmp #'/' /./ ???? discard .1 ldx #$FF SELF MODIFIED
beq .2 jsr BSX.JMPX
cmp #'.' /.DIR.... stx .3+1
bne .5 php
plx
jsr BS.Expand.GetN stx .2+1
beq .3 /..
sei
cmp #'/'
bne .9 tsx
stx $101
ldy MLI.PATHBUF remove /DIR/.. ldx $100
cpy #1 txs
beq .9 only / sta IO.CLRALTZP
.3 dey bit IO.RROMBNK1
lda MLI.PATHBUF,y
cmp #'/' cli
bne .3
.2 ldx #$FF SELF MODIFIED
sty MLI.PATHBUF phx
bra .2 .3 ldx #$FF SELF MODIFIED
plp
.5 pha
lda #'.'
jsr BS.Expand.PutN
pla
.6 jsr BS.Expand.PutN
.7 jsr BS.Expand.GetN
beq .8
jsr BS.Expand.PutN
cmp #'/'
bne .7
bra .2
.8 ldy MLI.PATHBUF
.80 lda MLI.PATHBUF,y
sta BS.CMDBUF.LEN,y
dey
bpl .80
clc
rts rts
.9 sec
rts
BS.Expand.GetN ldx BS.Expand.Ptr
cpx BS.CMDBUF.LEN
beq .8
inc BS.Expand.Ptr
lda BS.CMDBUF,x NZ
.8 rts
BS.Expand.PutN inc MLI.PATHBUF
ldy MLI.PATHBUF
sta MLI.PATHBUF,y
rts
BS.Expand.Ptr .BS 1
BS.Expand2.P .DA #1
.DA MLI.PATHBUF
*-------------------------------------- *--------------------------------------
BS.ToUpper cmp #'a' BS.ToUpper cmp #'a'
bcc .9 bcc .9

View File

@ -100,7 +100,7 @@ BS.AS.KW .DA #$80
.DA #$BE .DA #$BE
.DA #$BF .DA #$BF
*-------------------------------------- *--------------------------------------
BS.KW.LEN .DA #$47 BS.KW.LEN.OLD .DA #$47
.DA #$5F .DA #$5F
.DA #$18 .DA #$18
.DA #$30 .DA #$30
@ -132,9 +132,9 @@ BS.KW.LEN .DA #$47
.DA #$B5 .DA #$B5
.DA #$D8 .DA #$D8
*-------------------------------------- *--------------------------------------
BS.KW.TABLE .AS "BSAVERIFYBLOADELETEBYECATALOGOPENWRITEXECREATEFRESTORENAMEBRUNLOCKCHAIN#FLUSHREADPOSITIONOMONPR#PREFIXCLOSEAPPEND" BS.KW.TABLE.OLD .AS "BSAVERIFYBLOADELETEBYECATALOGOPENWRITEXECREATEFRESTORENAMEBRUNLOCKCHAIN#FLUSHREADPOSITIONOMONPR#PREFIXCLOSEAPPEND"
*-------------------------------------- *--------------------------------------
BS.KW.JMP .DA BS.JMP.XTRNADDR $00 BS.KW.JMP.OLD .DA BS.JMP.XTRNADDR $00
.DA BS.KW.IN .DA BS.KW.IN
.DA BS.KW.PR .DA BS.KW.PR
.DA BS.KW.CAT .DA BS.KW.CAT
@ -168,7 +168,7 @@ BS.KW.JMP .DA BS.JMP.XTRNADDR $00
.DA BS.KW.POSITION .DA BS.KW.POSITION
.DA BS.KW.DASH $40 .DA BS.KW.DASH $40
*-------------------------------------- *--------------------------------------
BS.KW.PBITS .DA $8040 IN BS.KW.PBITS.OLD .DA $8040 IN
.DA $8040 PR .DA $8040 PR
.DA $0495 CAT .DA $0495 CAT
.DA $0000 FRE .DA $0000 FRE
@ -200,6 +200,7 @@ BS.KW.PBITS .DA $8040 IN
.DA $0401 RESTORE .DA $0401 RESTORE
.DA $0321 POSITION .DA $0321 POSITION
.DA $0401 DASH .DA $0401 DASH
*--------------------------------------
BS.KW.OPT .AS "ABELS@FRVD" BS.KW.OPT .AS "ABELS@FRVD"
*-------------------------------------- *--------------------------------------
BS.WHICHBITS BS.WHICHBITS
@ -288,7 +289,11 @@ BS.BIERRTBL .DA #$03
.DA #$0C .DA #$0C
.DA #$08 .DA #$08
*-------------------------------------- *--------------------------------------
BS.ERRCODES .DA #$54 * .DA #$00 "Copyright..." (VERIFY with no arg)
* .DA #$10 CATALOG header
* .DA #$36 CATALOG footer
*--------------------------------------
BS.TBL7.IDX.OLD .DA #$54
.DA #$5B .DA #$5B
.DA #$66 .DA #$66
.DA #$6F .DA #$6F
@ -309,13 +314,13 @@ BS.ERRCODES .DA #$54
.DA #$EC .DA #$EC
.DA #$F3 .DA #$F3
*-------------------------------------- *--------------------------------------
BS.TBL6 .AS -"ACDEFILMNORTU " BS.TBL6.OLD .AS -"ACDEFILMNORTU "
.DA #$00 .DA #$00
*-------------------------------------- *--------------------------------------
.DA #$00 .DA #$00
.AS -"BGHKPSVWXY/().:" .AS -"BGHKPSVWXY/().:"
*-------------------------------------- *--------------------------------------
BS.TBL7 .DA #$2A BS.TBL7.OLD .DA #$2A
.DA #$05 .DA #$05
.DA #$0A .DA #$0A
.DA #$B6 .DA #$B6
@ -575,7 +580,7 @@ XBBB5 .BS 2
XBBB7 .BS 1 XBBB7 .BS 1
XBBB8 .BS 1 XBBB8 .BS 1
*-------------------------------------- *--------------------------------------
BS.IsIntCmdMTR ldy #$02 BS.IsIntCmdMTR.OLD ldy #$02
LBBBB lda BS.CMDBUF,y LBBBB lda BS.CMDBUF,y
cmp BS.MTR,y cmp BS.MTR,y
@ -591,6 +596,7 @@ LBBBB lda BS.CMDBUF,y
LBBCF jmp BS.IsIntCmd LBBCF jmp BS.IsIntCmd
BS.MTR .AS "MTR" BS.MTR .AS "MTR"
*--------------------------------------
BS.IVERSION .DA #5 BS.IVERSION .DA #5
BS.AS.HIMEMSave .BS 1 BS.AS.HIMEMSave .BS 1

View File

@ -7,25 +7,51 @@ LDR.SIG .DA $EEEE
LDR.STARTUP.LEN .DA #7 LDR.STARTUP.LEN .DA #7
LDR.STARTUP .AS "STARTUP" LDR.STARTUP .AS "STARTUP"
.BS MLI.MAXPATH-7 .BS MLI.MAXPATH-7
LDR.START1 lda #$9A *--------------------------------------
sta Ptr2+1 LDR.START1 ldx #$FF
lda #$24 txs
sta Ptr1+1 sta IO.SETALTZP
lda #$00
sta Ptr1 stx $100
sta Ptr2 stx $101
ldx #$23
tay sta IO.CLRALTZP
jsr LDR.MoveXpages
ldx #$01 sta IO.CLR80DISP
lda #$BE sta IO.CLR80STORE
sta Ptr2+1
jsr LDR.MoveXpages bit IO.RROMBNK1
lda #$15
jsr MON.COUT jsr MON.INIT
jsr MON.SETVID
jsr MON.SETKBD
jsr MON.SETNORM jsr MON.SETNORM
jsr MON.INIT jsr MON.HOME
jsr MON.MON
stz Ptr1
stz Ptr2
lda /LDR.MAIN.SRC
sta Ptr1+1
lda /LDR.MAIN.DST
sta Ptr2+1
ldx #$23
jsr LDR.MoveXpages
lda /LDR.GP.SRC
sta Ptr1+1
lda /LDR.GP.DST
sta Ptr2+1
ldx #$01
jsr LDR.MoveXpages
* lda #$15
* jsr MON.COUT
* jsr MON.SETNORM
* jsr MON.INIT
* jsr MON.HOME
ldx #$17 ldx #$17
@ -43,13 +69,36 @@ LDR.START1 lda #$9A
sta MLI.MEMTABL+22 sta MLI.MEMTABL+22
lda #$C3 lda #$C3
sta MLI.MEMTABL+23 sta MLI.MEMTABL+23
lda AS.COLDBOOT
cmp #$4C * lda AS.COLDBOOT
bne .3 * cmp #$4C
* bne .3
lda MLI.MACHID lda MLI.MACHID
and #$20 and #$30
beq .3 cmp #$30 128k Only
bne .3
jsr LDR.ShrinkRAM
bcs .3
bit IO.RRAMWRAMBNK2
bit IO.RRAMWRAMBNK2
sta IO.SETALTZP
stz Ptr1
stz Ptr2
lda /LDR.AUX.SRC
sta Ptr1+1
lda /LDR.AUX.DST
sta Ptr2+1
ldx #$10
jsr LDR.MoveXpages
sta IO.CLRALTZP
bit IO.RROMBNK2
ldx #$03 ldx #$03
@ -59,8 +108,8 @@ LDR.START1 lda #$9A
bpl .2 bpl .2
jmp AS.COLDBOOT jmp AS.COLDBOOT
*--------------------------------------
.3 ldx #$27 .3 ldx #LDR.UNABLE.L-1
.4 lda LDR.UNABLE,x .4 lda LDR.UNABLE,x
sta $628,x sta $628,x
@ -72,19 +121,20 @@ LDR.START1 lda #$9A
bmi * bmi *
*-------------------------------------- *--------------------------------------
LDR.MoveXpages dey LDR.MoveXpages ldy #0
lda (Ptr1),y
.1 lda (Ptr1),y
sta (Ptr2),y sta (Ptr2),y
tya iny
bne LDR.MoveXpages bne .1
inc Ptr1+1 inc Ptr1+1
inc Ptr2+1 inc Ptr2+1
dex dex
bne LDR.MoveXpages bne .1
L20D3 rts L20D3 rts
*--------------------------------------
LDR.CSW cmp #$DD LDR.CSW cmp #$DD
bne L20D3 bne L20D3
@ -133,6 +183,7 @@ L2115 iny
sta AS.HIMEM+1 sta AS.HIMEM+1
sta AS.STRINGSTART+1 sta AS.STRINGSTART+1
sta GP.RSHIMEM sta GP.RSHIMEM
lda MLI.PFIXPTR lda MLI.PFIXPTR
beq L214E beq L214E
@ -142,7 +193,7 @@ L2115 iny
bne L218B bne L218B
ldx MLI.PATHBUF ldx MLI.PATHBUF
lda #$2F lda #'/'
L2136 cmp MLI.PATHBUF,x L2136 cmp MLI.PATHBUF,x
bne L213E bne L213E
@ -164,7 +215,7 @@ L214E jsr MLI
.DA #MLI.C.ONLINE .DA #MLI.C.ONLINE
.DA LDR.ONLINE.P .DA LDR.ONLINE.P
bne L218B bne L218B
lda MLI.PATHBUF+1 lda MLI.PATHBUF+1
and #$0F and #$0F
beq L218B beq L218B
@ -207,17 +258,18 @@ L2198 lda LDR.STARTUP.LEN1
bne L21C1 bne L21C1
jsr LDR.KSW jsr LDR.KSW
ldx #$1C
ldx #LDR.PRODOSBASIC.L-1
L21A2 lda LDR.PRODOSBASIC,x L21A2 lda LDR.PRODOSBASIC,x
sta $400,x sta $400+12,x
dex dex
bpl L21A2 bpl L21A2
ldx #$1F ldx #LDR.COPYRIGHT.L-1
L21AD lda LDR.COPYRIGHT,x L21AD lda LDR.COPYRIGHT,x
sta $480,x sta $480+9,x
dex dex
bpl L21AD bpl L21AD
@ -227,6 +279,7 @@ L21AD lda LDR.COPYRIGHT,x
jsr MON.COUT1 jsr MON.COUT1
L21C1 ldx #$02 L21C1 ldx #$02
L21C3 lda LDR.JMP.GP.ENTRY,x L21C3 lda LDR.JMP.GP.ENTRY,x
sta DOS.WARMSTART,x sta DOS.WARMSTART,x
sta DOS.COLDSTART,x sta DOS.COLDSTART,x
@ -236,30 +289,28 @@ L21C3 lda LDR.JMP.GP.ENTRY,x
dex dex
bpl L21C3 bpl L21C3
lda LDR.BRKVECT lda #MON.BREAKV
sta MON.BRKVECT sta MON.BRKVECT
lda LDR.BRKVECT+1 lda /MON.BREAKV
sta MON.BRKVECT+1 sta MON.BRKVECT+1
lda LDR.POWERUP lda #GP.ENTRY
sta MON.POWERUP sta MON.POWERUP
lda LDR.POWERUP+1 lda /GP.ENTRY
sta MON.POWERUP+1 sta MON.POWERUP+1
eor #$A5 eor #$A5
sta MON.POWERUPBYTE sta MON.POWERUPBYTE
lda #$A5 lda #$A5
sta AS.TRCFLG sta AS.TRCFLG
lda BS.IVERSION lda BS.IVERSION
sta MLI.IVERSION sta MLI.IVERSION
LDR.JMP.GP.ENTRY LDR.JMP.GP.ENTRY
jmp GP.ENTRY jmp GP.ENTRY
LDR.BRKVECT .DA MON.BREAKV
LDR.POWERUP .DA GP.ENTRY
LDR.AMPERSANDJMP LDR.AMPERSANDJMP
jmp GP.DOSCMD jmp GP.DOSCMD
*--------------------------------------
LDR.KSW lda GP.INVECT0 LDR.KSW lda GP.INVECT0
sta ZP.KSW sta ZP.KSW
lda GP.INVECT0+1 lda GP.INVECT0+1
@ -268,14 +319,114 @@ LDR.KSW lda GP.INVECT0
inx inx
lda #$8D lda #$8D
rts rts
*--------------------------------------
LDR.ShrinkRAM lda MLI.DEVPTRS3D2
ldx MLI.DEVPTRS3D2+1
cmp MLI.DEVPTRS S0D1=NOVEV
bne .1
cpx MLI.DEVPTRS+1 S0D1=NODEV
beq .8 S3D2=NODEV, nothing to do
.1 cmp #$00 $FF00 = ProODS /RAM driver
bne .8
cpx #$FF
bne .8
ldx MLI.DEVCNT
.2 lda MLI.DEVLST,x LOOKING FOR $BF
cmp #$BF
beq .3
dex
bpl .2
.9 sec No $BF device found at S3D2
rts dont use LC !!!!
.8 clc
rts
.3 cpx MLI.DEVCNT
beq .5
.4 lda MLI.DEVLST+1,x
sta MLI.DEVLST,x
inx
cpx MLI.DEVCNT
bne .4
ldx MLI.DEVCNT
.5 stz MLI.DEVLST,x
dec MLI.DEVCNT
jsr LDR.ONLINE
ldx #LDR.ZPCODE.L-1
.6 lda LDR.ZPCODE,x
sta ZPCode,x
dex
bpl .6
ldx #LDR.RAMSIG.L-1
.7 jsr ZPCode
cmp LDR.RAMSIG,x
bne .9 Bad signature !!!!
dex
bpl .7
dec GP.CISPARE1 Tell BYE to reset that...
php
sei
sta IO.SETWRITEAUX
stz AUX.RAMSIG
stz AUX.RAMSIG+1 Set $E000-$FFFF as BLOCK USED
sta IO.CLRWRITEAUX
plp
ldx MLI.DEVCNT
lda #$BF
sta MLI.DEVLST,x
inc MLI.DEVCNT
*--------------------------------------
LDR.ONLINE jsr MLI
.DA #MLI.C.ONLINE
.DA .1
rts
.1 .DA #2
.DA #0
.DA $1F00
*--------------------------------------
LDR.ZPCODE sta IO.SETREADAUX
lda AUX.RAMSIG,x
sta IO.CLRREADAUX
rts
LDR.ZPCODE.L .EQ *-LDR.ZPCODE
*--------------------------------------
LDR.RAMSIG .HS FFFE BITMAP for Blocks $70-$7F (LC $D000-FFFF)
.HS F3 storage type = F, name length = 3
.AS "RAM"
LDR.RAMSIG.L .EQ *-LDR.RAMSIG
*--------------------------------------
LDR.CSWVECT .DA LDR.CSW LDR.CSWVECT .DA LDR.CSW
LDR.KSWVECT .DA LDR.KSW LDR.KSWVECT .DA LDR.KSW
LDR.GFINFO.P .DA #10 LDR.GFINFO.P .DA #10
.DA LDR.STARTUP.LEN .DA LDR.STARTUP.LEN
.BS 16 .BS 16
*--------------------------------------
LDR.GETSETPFX1.P LDR.GETSETPFX1.P
.DA #1 .DA #1
.DA LDR.GETSETPFX1.SLASH .DA LDR.GETSETPFX1.SLASH
@ -284,20 +435,27 @@ LDR.GETSETPFX1.SLASH
.AS "/" .AS "/"
LDR.STARTUP.LEN1 LDR.STARTUP.LEN1
.DA #0 .DA #0
LDR.ONLINE.P *--------------------------------------
.DA #2 LDR.ONLINE.P .DA #2
LDR.ONLINE.P.DEVNUM LDR.ONLINE.P.DEVNUM
.DA #$70 .DA #$70
LDR.ONLINE.P.BUF
.DA MLI.PATHBUF+1 .DA MLI.PATHBUF+1
*--------------------------------------
LDR.GETSETPFX2.P LDR.GETSETPFX2.P
.DA #1 .DA #1
.DA MLI.PATHBUF .DA MLI.PATHBUF
LDR.PFXLEN .DA #0 LDR.PFXLEN .DA #0
*--------------------------------------
LDR.UNABLE .AS -"*** UNABLE TO EXECUTE BASIC SYSTEM ***" LDR.UNABLE .AS -"*** UNABLE TO EXECUTE BASIC SYSTEM ***"
LDR.PRODOSBASIC .AS -" PRODOS BASIC FX" LDR.UNABLE.L .EQ *-LDR.UNABLE
LDR.COPYRIGHT .AS -" COPYRIGHT APPLE 1983-92" LDR.PRODOSBASIC .AS -"PRODOS BASIC FX"
LDR.PRODOSBASIC.L .EQ *-LDR.PRODOSBASIC
LDR.COPYRIGHT .AS -"COPYRIGHT APPLE 1983-92"
LDR.COPYRIGHT.L .EQ *-LDR.COPYRIGHT
.LIST ON
LDR.SIZE .EQ *-LDR.START
.LIST OFF
.BS $2400-* .BS $2400-*
*-------------------------------------- *--------------------------------------
MAN MAN

View File

@ -55,6 +55,7 @@ CMDBITS1.V .EQ $00 ;Volume number ignored
*-------------------------------------- *--------------------------------------
Ptr1 .EQ 0 Ptr1 .EQ 0
Ptr2 .EQ 2 Ptr2 .EQ 2
ZPCode .EQ 4
ZP.WNDLFT .EQ $20 ZP.WNDLFT .EQ $20
ZP.WNDWDT .EQ $21 ZP.WNDWDT .EQ $21
@ -108,6 +109,8 @@ DIRENTBUF.AUXT .EQ $278
MLI.PATHBUF .EQ $280 MLI.PATHBUF .EQ $280
*-------------------------------------- *--------------------------------------
AUX.RAMSIG .EQ $3D0 FFFEF3+"RAM"
*--------------------------------------
DOS.WARMSTART .EQ $03D0 DOS.WARMSTART .EQ $03D0
DOS.COLDSTART .EQ $03D3 DOS.COLDSTART .EQ $03D3
DOS.FILEMGR .EQ $03D6 DOS.FILEMGR .EQ $03D6
@ -155,6 +158,8 @@ MLI.C.SETBUF .EQ $D2
MLI.C.GETBUF .EQ $D3 MLI.C.GETBUF .EQ $D3
*-------------------------------------- *--------------------------------------
MLI .EQ $BF00 MLI .EQ $BF00
MLI.DEVPTRS .EQ $BF10
MLI.DEVPTRS3D2 .EQ $BF26
MLI.DEVNUM .EQ $BF30 MLI.DEVNUM .EQ $BF30
MLI.DEVCNT .EQ $BF31 MLI.DEVCNT .EQ $BF31
MLI.DEVLST .EQ $BF32 MLI.DEVLST .EQ $BF32
@ -166,8 +171,22 @@ MLI.PFIXPTR .EQ $BF9A
MLI.MLIACTV .EQ $BF9B MLI.MLIACTV .EQ $BF9B
MLI.IVERSION .EQ $BFFD MLI.IVERSION .EQ $BFFD
*-------------------------------------- *--------------------------------------
IO.KBD .EQ $C000 IO.KBD .EQ $C000 R
IO.KSTROBE .EQ $C010 IO.CLR80STORE .EQ $C000 W
IO.SET80STORE .EQ $C001 W
IO.CLRREADAUX .EQ $C002 W
IO.SETREADAUX .EQ $C003 W
IO.CLRWRITEAUX .EQ $C004 W
IO.SETWRITEAUX .EQ $C005 W
IO.CLRALTZP .EQ $C008 W
IO.SETALTZP .EQ $C009 W
IO.CLR80DISP .EQ $C00C W
IO.SET80DISP .EQ $C00D W
IO.KSTROBE .EQ $C010 W
IO.RROMBNK2 .EQ $C082 R
IO.RRAMWRAMBNK2 .EQ $C083 RR
IO.RROMBNK1 .EQ $C08A R
IO.RRAMWRAMBNK1 .EQ $C08B RR
*-------------------------------------- *--------------------------------------
AS.RESTART .EQ $D43C AS.RESTART .EQ $D43C
AS.RESTART1 .EQ $D43F AS.RESTART1 .EQ $D43F
@ -182,7 +201,7 @@ AS.INTPRINTAX .EQ $ED24
*-------------------------------------- *--------------------------------------
MON.BREAKV .EQ $FA59 MON.BREAKV .EQ $FA59
MON.INIT .EQ $FB2F MON.INIT .EQ $FB2F
MON.MON .EQ $FC58 MON.HOME .EQ $FC58
MON.CLREOL .EQ $FC9C MON.CLREOL .EQ $FC9C
MON.RDKEY .EQ $FD0C MON.RDKEY .EQ $FD0C
MON.KEYIN0 .EQ $FD10 MON.KEYIN0 .EQ $FD10
@ -194,18 +213,26 @@ MON.COUT1 .EQ $FDF0
MON.IIGSID .EQ $FE1F MON.IIGSID .EQ $FE1F
MON.SETINV .EQ $FE80 MON.SETINV .EQ $FE80
MON.SETNORM .EQ $FE84 MON.SETNORM .EQ $FE84
MON.SETKBD .EQ $FE89
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
LDR.9A00.CODE .PH $9A00 LDR.MAIN.SRC .PH $9A00
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 .EP
LDR.BE00.CODE .PH $BE00 LDR.GP.SRC .PH $BE00
LDR.GP.DST .EQ *
.INB usr/src/basic.fx/basic.s.gp .INB usr/src/basic.fx/basic.s.gp
.EP .EP
LDR.AUX.SRC .PH $E000
LDR.AUX.DST .EQ *
.INB usr/src/basic.fx/basic.s.x
.EP
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/basic.fx/basic.s SAVE usr/src/basic.fx/basic.s

View File

@ -299,7 +299,7 @@ OPEN.I jsr CLOSE
cpy #4 cpy #4
bne .2 bne .2
* >AR.SELECT SUBR Implicit, next to GAR >AR.SELECT SUBR Implicit, next to GAR
ldy #0 ldy #0
@ -340,12 +340,12 @@ OPEN.I jsr CLOSE
inc Sn.IO inc Sn.IO
ldy #S.IP.PROTOCOL.UDP ldy #S.IP.PROTOCOL.TCP
jsr OPEN.SnY jsr OPEN.SnY
inc Sn.IO inc Sn.IO
ldy #S.IP.PROTOCOL.TCP ldy #S.IP.PROTOCOL.UDP
jsr OPEN.SnY jsr OPEN.SnY
lda #S.DIB.S.OPENED lda #S.DIB.S.OPENED
@ -354,43 +354,53 @@ OPEN.I jsr CLOSE
clc clc
rts rts
*-------------------------------------- *--------------------------------------
OPEN.SnY >AR.Sn.SELECT S0.MR OPEN.SnY phy
>AR.Sn.SELECT S0.MR
lda #W5100.AR.Sn.MR.IPRAW lda #W5100.AR.Sn.MR.IPRAW
sta W5100.DR,x sta W5100.DR,x
>AR.Sn.SELECT S0.PORT
stz W5100.DR,x
stz W5100.DR,x
>AR.Sn.SELECT S0.DHAR
ldy #6 DHAR
lda #$EE
.1 sta W5100.DR,x
dey
bne .1
>AR.Sn.SELECT S0.DIPR
ldy #4 DIPR
lda #10
.2 sta W5100.DR,x
dey
bne .2
>AR.Sn.SELECT S0.DPORT
stz W5100.DR,x
stz W5100.DR,x
>AR.Sn.SELECT S0.MSSR >AR.Sn.SELECT S0.MSSR
lda /K.ETH.FRAME.LEN lda /K.ETH.FRAME.LEN
sta W5100.DR,x sta W5100.DR,x
lda #K.ETH.FRAME.LEN lda #K.ETH.FRAME.LEN
sta W5100.DR,x sta W5100.DR,x
* >AR.Sn.SELECT S0.PROTO >AR.Sn.SELECT S0.PROTO
tya pla
sta W5100.DR,x sta W5100.DR,x
* >AR.Sn.SELECT Sn.TOS >AR.Sn.SELECT S0.TOS
stz W5100.DR,x stz W5100.DR,x
* >AR.Sn.SELECT Sn.TTL >AR.Sn.SELECT S0.TTL
lda #K.IP.TTL lda #K.IP.TTL
sta W5100.DR,x sta W5100.DR,x
>AR.Sn.SELECT S0.PORT
stz W5100.DR,x
stz W5100.DR,x
* >AR.Sn.SELECT S0.DHAR
ldy #10 DHAR+DIPR
lda #$ff
.1 sta W5100.DR,x
dey
bpl .1
* >AR.Sn.SELECT S0.DPORT
stz W5100.DR,x
stz W5100.DR,x
>AR.Sn.SELECT S0.CR >AR.Sn.SELECT S0.CR
lda #W5100.AR.Sn.CR.OPEN lda #W5100.AR.Sn.CR.OPEN
@ -753,6 +763,17 @@ WRITE php
ldx DEVSLOTx0 ldx DEVSLOTx0
>AR.Sn.SELECT S0.DIPR
ldy #S.IP.DST
.1 lda (ZPBufPtr),y
lda #10
sta W5100.DR,x
iny
cpy #S.IP.DST+4
bne .1
>AR.Sn.SELECT S0.TX.FSR >AR.Sn.SELECT S0.TX.FSR
lda W5100.DR,x get send size HI lda W5100.DR,x get send size HI
ldy W5100.DR,x LO ldy W5100.DR,x LO
@ -760,16 +781,6 @@ WRITE php
sbc RXTX.Size+1 sbc RXTX.Size+1
bcc READWRITE.NODATA bcc READWRITE.NODATA
>AR.Sn.SELECT S0.DIPR
ldy #S.IP.DST
.1 lda (ZPBufPtr),y
sta W5100.DR,x
iny
cpy #S.IP.DST+4
bne .1
>AR.Sn.SELECT S0.TX.WR >AR.Sn.SELECT S0.TX.WR
lda W5100.DR,x Get HI lda W5100.DR,x Get HI
ldy W5100.DR,x Get LO ldy W5100.DR,x Get LO
@ -827,7 +838,7 @@ GET.IOCTLBUFPTR >STYA ZPIOCTL
*-------------------------------------- *--------------------------------------
DRV.CS.END DRV.CS.END
Sn.cnt .EQ 4 Sn.cnt .EQ 4
Sn.IP.PROTOCOL .DA #0,#S.IP.PROTOCOL.ICMP,#S.IP.PROTOCOL.UDP,#S.IP.PROTOCOL.TCP Sn.IP.PROTOCOL .DA #0,#S.IP.PROTOCOL.ICMP,#S.IP.PROTOCOL.TCP,#S.IP.PROTOCOL.UDP
Sn.IO.BASE .DA /W5100.AR.S0.MR,/W5100.AR.S1.MR,/W5100.AR.S2.MR,/W5100.AR.S3.MR Sn.IO.BASE .DA /W5100.AR.S0.MR,/W5100.AR.S1.MR,/W5100.AR.S2.MR,/W5100.AR.S3.MR
Sn.TX.BASE .DA /TX.BASE,/TX.BASE+$800,/TX.BASE+$1000,/TX.BASE+$1800 Sn.TX.BASE .DA /TX.BASE,/TX.BASE+$800,/TX.BASE+$1000,/TX.BASE+$1800
Sn.RX.BASE .DA /RX.BASE,/RX.BASE+$800,/RX.BASE+$1000,/RX.BASE+$1800 Sn.RX.BASE .DA /RX.BASE,/RX.BASE+$800,/RX.BASE+$1000,/RX.BASE+$1800

View File

@ -70,8 +70,8 @@ W5100.AR.S0.DIPR .EQ $040C
W5100.AR.S0.DPORT .EQ $0410 W5100.AR.S0.DPORT .EQ $0410
W5100.AR.S0.MSSR .EQ $0412 W5100.AR.S0.MSSR .EQ $0412
W5100.AR.S0.PROTO .EQ $0414 W5100.AR.S0.PROTO .EQ $0414
*W5100.AR.S0.TOS .EQ $0415 W5100.AR.S0.TOS .EQ $0415
*W5100.AR.S0.TTL .EQ $0416 W5100.AR.S0.TTL .EQ $0416
W5100.AR.S0.TX.FSR .EQ $0420 W5100.AR.S0.TX.FSR .EQ $0420
W5100.AR.S0.TX.RD .EQ $0422 W5100.AR.S0.TX.RD .EQ $0422
W5100.AR.S0.TX.WR .EQ $0424 W5100.AR.S0.TX.WR .EQ $0424

View File

@ -76,6 +76,6 @@ a1l1 .BS 13 13 bytes of storage
*-------------------------------------- *--------------------------------------
RAM.LEN .EQ *-RAM.START RAM.LEN .EQ *-RAM.START
MAN MAN
SAVE USR/SRC/PRODOS.FX/PRODOS.S.RAM SAVE usr/src/prodos.fx/prodos.s.ram
LOAD USR/SRC/PRODOS.FX/PRODOS.S LOAD usr/src/prodos.fx/prodos.s
ASM ASM

View File

@ -20,35 +20,45 @@ RAMX.START lda RD80STORE read 80 store
pha save for later pha save for later
sta CLR80STORE turn off 80 store sta CLR80STORE turn off 80 store
ldx #$04 move the parameters for use: ldx #$04 move the parameters for use:
L5109 lda A4L,x cmd, unit, bufptr and block (lo) L5109 lda A4L,x cmd, unit, bufptr and block (lo)
sta tcmd,x -> tcmd, tunit, R2L, R2H, R01 sta tcmd,x -> tcmd, tunit, R2L, R2H, R01
dex dex
bpl L5109 bpl L5109
and formatflg format the volume first time and formatflg format the volume first time
bne L514F thru, or when requested. bne L514F thru, or when requested.
ldx bloknml save R01 during format. ldx bloknml save R01 during format.
lda /vblock1 block to be cleared. lda /vblock1 block to be cleared.
jsr clrbuf1 clears all buffers. jsr clrbuf1 clears all buffers.
ldy #$03 format volume in 2 chunks. ldy #$03 format volume in 2 chunks.
L511F lda VDIR,y L511F lda VDIR,y
sta vblock1+4,y sta vblock1+4,y
dey dey
bpl L511F bpl L511F
lda #$FE set last block as unusable lda #$FE set last block as unusable
sta BITMAP+15 to protect vectors. sta BITMAP+15 to protect vectors.
tya set bitmap bits to $FF. tya set bitmap bits to $FF.
ldy #$0E 15 bytes to set ldy #$0E 15 bytes to set
L5130 sta BITMAP,y L5130 sta BITMAP,y
dey dey
bne L5130 bne L5130
sty BITMAP first byte = 0. sty BITMAP first byte = 0.
ldy #$07 do other chunk ldy #$07 do other chunk
L513B lda access,y L513B lda access,y
sta vblock1+34,y sta vblock1+34,y
dey dey
bpl L513B bpl L513B
lda formatflg if 0, set to $FF lda formatflg if 0, set to $FF
bne L51AA else exitcard. bne L51AA else exitcard.
sty formatflg y = $FF, won't format next time. sty formatflg y = $FF, won't format next time.
stx R01 restore R01 stx R01 restore R01
@ -59,9 +69,12 @@ L514F asl R01 block requested -> page requested.
lda R01 get page requested. lda R01 get page requested.
cmp #$BF in language card ? cmp #$BF in language card ?
bcs L5163 yes, do it. bcs L5163 yes, do it.
cmp #$06 bitmap ? cmp #$06 bitmap ?
bne L5160 bne L5160
jmp tbmap yes, transfer bitmap jmp tbmap yes, transfer bitmap
L5160 jmp treg else normal transfer. L5160 jmp treg else normal transfer.
* when a block between $60 and $7F is requested, it must be spirited into/from * when a block between $60 and $7F is requested, it must be spirited into/from
@ -72,13 +85,17 @@ L5163 tax save R1 for later.
jsr setptr get direction jsr setptr get direction
php and save it. php and save it.
bcs L51B8 if it's a write. bcs L51B8 if it's a write.
lcrd txa get R1 back lcrd txa get R1 back
cmp #$CF which bank is it in ? cmp #$CF which bank is it in ?
bcs L5173 in main bank. bcs L5173 in main bank.
ora #$10 in secondary bank. ora #$10 in secondary bank.
bne L5179 branch always. bne L5179 branch always.
L5173 sta RRAMWRAMBNK2 turn on main $D000 L5173 sta RRAMWRAMBNK2 turn on main $D000
sta RRAMWRAMBNK2 sta RRAMWRAMBNK2
L5179 sta R01 restore R1. L5179 sta R01 restore R1.
lda R2H save R2 for later lda R2H save R2 for later
pha pha
@ -90,22 +107,28 @@ L5179 sta R01 restore R1.
sta R2L sta R2L
jsr setptr set pointers jsr setptr set pointers
tay A > 0 from setptr tay A > 0 from setptr
L5194 lda (A1L),y move A1,A2 to A4,A3 L5194 lda (A1L),y move A1,A2 to A4,A3
sta (A4L),y sta (A4L),y
lda (A2L),y lda (A2L),y
sta (A3L),y sta (A3L),y
dey dey
bne L5194 bne L5194
sta CLRALTZP use main zero page/stack sta CLRALTZP use main zero page/stack
L51A2 stx R2L L51A2 stx R2L
pla restore R2 pla restore R2
sta R2H sta R2H
plp get direction. plp get direction.
L51AA bcs L51B5 write, done with move. L51AA bcs L51B5 write, done with move.
sta RRAMWRAMBNK1 switch in MLI part of LC sta RRAMWRAMBNK1 switch in MLI part of LC
sta RRAMWRAMBNK1 sta RRAMWRAMBNK1
jsr blockdo0 read, transfer dbuf to main jsr blockdo0 read, transfer dbuf to main
L51B5 jmp exitcard L51B5 jmp exitcard
L51B8 jsr blockdo0 transfer main to dbuf. L51B8 jsr blockdo0 transfer main to dbuf.
jmp lcrd transfer dbuf to language card jmp lcrd transfer dbuf to language card
@ -116,18 +139,24 @@ L51B8 jsr blockdo0 transfer main to dbuf.
* write is done (R2->R1); if cmd is 1, a read is done (R1->R2). * write is done (R2->R1); if cmd is 1, a read is done (R1->R2).
blockdo0 lda /dbuf set up R1 = dbuf blockdo0 lda /dbuf set up R1 = dbuf
blockdo1 sta R01 blockdo1 sta R01
blockdo jsr setptr set pointers. blockdo jsr setptr set pointers.
bcs L51DB it's a write. bcs L51DB it's a write.
sta CLRWRITEAUX transfer buffer directly to main. sta CLRWRITEAUX transfer buffer directly to main.
tay 0 left from setptr. tay 0 left from setptr.
L51CC lda (A1L),y transfer A1,A2 to A4,A3 L51CC lda (A1L),y transfer A1,A2 to A4,A3
sta (A4L),y sta (A4L),y
lda (A2L),y lda (A2L),y
sta (A3L),y sta (A3L),y
dey dey
bne L51CC bne L51CC
sta SETWRITEAUX back the way it was. sta SETWRITEAUX back the way it was.
donewrt rts mainwrt returns here donewrt rts mainwrt returns here
L51DB lda #mainwrt pointers set up, L51DB lda #mainwrt pointers set up,
@ -140,6 +169,7 @@ L51DB lda #mainwrt pointers set up,
setptr lda tcmd is it read or write ? setptr lda tcmd is it read or write ?
lsr lsr
bcs L5208 taken if write. bcs L5208 taken if write.
lda R2H destination page lda R2H destination page
sta A4L+1 sta A4L+1
sta A3L+1 sta A3L+1
@ -153,6 +183,7 @@ setptr lda tcmd is it read or write ?
sta A1L sta A1L
sta A2L sta A2L
beq L5223 beq L5223
L5208 lda R2H source page L5208 lda R2H source page
sta A1L+1 sta A1L+1
sta A2L+1 sta A2L+1
@ -165,6 +196,7 @@ L5208 lda R2H source page
lda #$00 destination page aligned lda #$00 destination page aligned
sta A4L sta A4L
sta A3L sta A3L
L5223 inc A2L+1 L5223 inc A2L+1
inc A3L+1 inc A3L+1
rts rts
@ -180,13 +212,17 @@ tzip jsr clrbuf0 fill dbuf with 0's
* should only be called on a read or format. * should only be called on a read or format.
clrbuf0 lda /dbuf dbuf is temp buffer. clrbuf0 lda /dbuf dbuf is temp buffer.
clrbuf1 sta R01 assign to block. clrbuf1 sta R01 assign to block.
clrbuf2 jsr setptr set pointers clrbuf2 jsr setptr set pointers
tay acc = 0 tay acc = 0
L523A sta (A1L),y L523A sta (A1L),y
sta (A2L),y sta (A2L),y
dey dey
bne L523A bne L523A
rts rts
* treg maps the requested block into the aux card * treg maps the requested block into the aux card
@ -195,14 +231,18 @@ L523A sta (A1L),y
treg cmp #$04 page 4 = vdir treg cmp #$04 page 4 = vdir
bne L524A not vdir, continue bne L524A not vdir, continue
lda #$07 else transfer block 7 lda #$07 else transfer block 7
bne L5258 bne L5258
L524A cmp #$0F if any page < $F (block 8) requested, L524A cmp #$0F if any page < $F (block 8) requested,
bcc tzip it is invalid. bcc tzip it is invalid.
ldx #$00 x = # of iterations. ldx #$00 x = # of iterations.
lda bloknml use true block #. lda bloknml use true block #.
cmp #$5D beyond 8k blocks ? cmp #$5D beyond 8k blocks ?
bcc L525B no, do normal bcc L525B no, do normal
sbc #$50 else subtract offset sbc #$50 else subtract offset
L5258 jmp times2 and multiply by 2 L5258 jmp times2 and multiply by 2
@ -211,12 +251,16 @@ L5258 jmp times2 and multiply by 2
L525B sec L525B sec
sbc #$08 block=block-6 sbc #$08 block=block-6
L525E cmp #$11 if <=17 then done L525E cmp #$11 if <=17 then done
bcc L5268 bcc L5268
sbc #$11 else block=block-17. sbc #$11 else block=block-17.
inx iteration count. inx iteration count.
bpl L525E should branch always bpl L525E should branch always
brk otherwise crash !!! brk otherwise crash !!!
L5268 tay remainder in y L5268 tay remainder in y
* if remainder is 1 then it's an index block: * if remainder is 1 then it's an index block:
@ -228,10 +272,12 @@ L5268 tay remainder in y
cpy #$01 is it index block ? cpy #$01 is it index block ?
bne L5273 no. bne L5273 no.
txa index = 2 * (8 + x) txa index = 2 * (8 + x)
clc clc
adc #$08 adc #$08
bne times2 multiply by 2. bne times2 multiply by 2.
L5273 inx iteration + 1. L5273 inx iteration + 1.
txa page = 2 * (16 + 8x) txa page = 2 * (16 + 8x)
asl asl
@ -241,10 +287,13 @@ L5273 inx iteration + 1.
sta R01 sta R01
tya get offset into 8k chunk tya get offset into 8k chunk
beq L5281 if 0, no offset beq L5281 if 0, no offset
dey else offset = 2 * y dey else offset = 2 * y
tya tya
L5281 clc L5281 clc
adc R01 adc R01
times2 asl acc = 2 * acc times2 asl acc = 2 * acc
jsr blockdo1 store in R01 and transfer jsr blockdo1 store in R01 and transfer
jmp exitcard and return jmp exitcard and return
@ -257,21 +306,27 @@ tbmap lda /dbuf use temp buffer as block
sta R01 sta R01
jsr setptr set pointers, test read/write. jsr setptr set pointers, test read/write.
bcs L52A9 branch if it's write. bcs L52A9 branch if it's write.
jsr clrbuf2 jsr clrbuf2
ldy #$0F put real bitmap there ldy #$0F put real bitmap there
L529B lda BITMAP,y L529B lda BITMAP,y
sta (A1L),y sta (A1L),y
dey dey
bpl L529B bpl L529B
jsr blockdo move temp buf to user buf jsr blockdo move temp buf to user buf
jmp exitcard jmp exitcard
L52A9 jsr blockdo move user buf to temp buf L52A9 jsr blockdo move user buf to temp buf
jsr setptr jsr setptr
ldy #$0F move temp buf to bitmap. ldy #$0F move temp buf to bitmap.
L52B1 lda (A4L),y (pointer set by setptr) L52B1 lda (A4L),y (pointer set by setptr)
sta BITMAP,y sta BITMAP,y
dey dey
bpl L52B1 bpl L52B1
jmp exitcard jmp exitcard
formatflg .HS 00 not formatted yet formatflg .HS 00 not formatted yet
@ -297,8 +352,10 @@ exitcard lda RRAMWRAMBNK1 restore language card
lda RRAMWRAMBNK1 lda RRAMWRAMBNK1
pla get 80store pla get 80store
bpl L52EA 80store wasn't on bpl L52EA 80store wasn't on
sta SET80STORE enable 80store sta SET80STORE enable 80store
L52EA jmp bypass jump around passit L52EA jmp bypass jump around passit
passit .HS 0000 passit .HS 0000
bypass lda #noerr set up return to noerr bypass lda #noerr set up return to noerr
sta passit sta passit
@ -310,6 +367,6 @@ ex1 sta passit+1 also used by blockwrite
*-------------------------------------- *--------------------------------------
RAMX.LEN .EQ *-RAMX.START RAMX.LEN .EQ *-RAMX.START
MAN MAN
SAVE USR/SRC/PRODOS.FX/PRODOS.S.RAMX SAVE usr/src/prodos.fx/prodos.s.ramx
LOAD USR/SRC/PRODOS.FX/PRODOS.S LOAD usr/src/prodos.fx/prodos.s
ASM ASM