NEW AUTO 3,1 *-------------------------------------- BS.GetSysBuf lda #$04 LA1FB sta XBBB5 jsr BS.KW.FRE bcs LA24E lda AS.STRINGSTART+1 sbc AS.ARRAYEND+1 cmp XBBB5 lda #BS.E.NOBUFFER bcc LA24E lda AS.STRINGSTART+1 sta ZP.PCH sbc XBBB5 sta ZP.A1H sta AS.STRINGSTART+1 lda AS.STRINGSTART sta ZP.PCL sta ZP.A1L lda AS.HIMEM sbc ZP.PCL sta BS.ReqMem lda AS.HIMEM+1 sbc ZP.PCH sta BS.ReqMem+1 jsr BS.MoveMemDown lda #$00 sec sbc XBBB5 sta XBBE2 jsr LA3A3 lda AS.HIMEM+1 sta XBBB7 sec sbc XBBB5 sta AS.HIMEM+1 clc adc #$04 sta BS.BUFPAGE rts LA24E sec rts XBBB5 .BS 1 *-------------------------------------- BS.FreeSysBuf jsr BS.KW.FRE bcs LA29D lda AS.HIMEM+1 sbc #$00 sta ZP.PCH adc #$03 sta ZP.A1H lda AS.STRINGSTART sta ZP.PCL sta ZP.A1L lda AS.HIMEM sec sbc AS.STRINGSTART sta BS.ReqMem lda AS.HIMEM+1 sbc AS.STRINGSTART+1 sta BS.ReqMem+1 jsr BS.MoveMemUp lda #$04 sta XBBE2 clc adc AS.HIMEM+1 sta AS.HIMEM+1 jsr LA3A3 lda BS.BUFPAGE cmp AS.HIMEM+1 beq LA2B7 pha ldx GP.OPENCNT beq LA29B lda AS.HIMEM+1 LA293 cmp BS.BUFPAGEs-1,x beq LA29E dex bne LA293 LA29B pla sec LA29D rts LA29E pla *-------------------------------------- BS.SetFileBuf sta GP.SBUFADR+1 sta BS.BUFPAGEs-1,x stz GP.SBUFADR lda BS.REFNUMs,x sta GP.MLIMRKEOFBUF.REFNUM lda #MLI.C.SETBUF jmp GP.GOSYSTEM LA2B7 clc rts *-------------------------------------- BS.GETBUFR jsr LA1FB bcs LA304 pha sbc #$03 sta XBBB8 pla LA2C5 sta GP.SBUFADR+1 ldx GP.OPENCNT beq LA2EE lda XBBB7 clc adc #$04 sta XBBB7 LA2D6 cmp BS.BUFPAGEs-1,x bne LA2EB lda GP.SBUFADR+1 jsr LA356 jsr BS.SetFileBuf lda GP.SBUFADR+1 adc #$04 bcc LA2C5 LA2EB dex bne LA2D6 LA2EE lda GP.SBUFADR+1 bit GP.EXECACTV bpl LA303 LA2F6 ldx #$08 jsr LA356 jsr BS.SetFileBuf lda GP.SBUFADR+1 adc #$04 LA303 clc LA304 rts *-------------------------------------- BS.FREEBUFR lda GP.OPENCNT asl asl adc AS.HIMEM+1 sta XBBB7 lda AS.HIMEM+1 sta XBBB8 lda GP.RSHIMEM cmp AS.HIMEM+1 beq LA354 sta AS.HIMEM+1 bit GP.EXECACTV bpl LA327 jsr LA2F6 bcc LA345 LA327 lda XBBB7 ldx GP.OPENCNT beq LA351 LA32F cmp BS.BUFPAGEs-1,x bne LA34E lda AS.HIMEM+1 jsr LA356 jsr BS.SetFileBuf sec lda XBBB7 sbc #$04 sta XBBB7 LA345 lda AS.HIMEM+1 sec sbc #$04 sta AS.HIMEM+1 bcs LA327 LA34E dex bne LA32F LA351 jsr BS.KW.FRE LA354 clc rts LA356 pha lda XBBB8 jsr BS.SetFileBuf pla rts *-------------------------------------- BS.MoveMemDown ldy #$00 cpy BS.ReqMem+1 beq .2 .1 lda (ZP.PCL),y sta (ZP.A1L),y iny bne .1 inc ZP.PCH inc ZP.A1H dec BS.ReqMem+1 bne .1 .2 cpy BS.ReqMem beq .8 lda (ZP.PCL),y sta (ZP.A1L),y iny bne .2 .8 rts *-------------------------------------- BS.MoveMemUp ldy BS.ReqMem XA386 beq LA38F SELF MODIFIED LA388 jsr LA39A dec ZP.A1H dec ZP.PCH LA38F cpy BS.ReqMem+1 beq LA3A2 dec BS.ReqMem+1 bra LA388 *-------------------------------------- LA39A dey lda (ZP.PCL),y sta (ZP.A1L),y tya bne LA39A LA3A2 rts *-------------------------------------- LA3A3 lda AS.VARSTART+1 sta ZP.A2H lda AS.VARSTART ldx AS.ARRAYSTART+1 clc bcc LA3B3 LA3AE clc lda ZP.A2L adc #$07 LA3B3 sta ZP.A2L bcc LA3B9 inc ZP.A2H LA3B9 eor AS.ARRAYSTART bne LA3BF cpx ZP.A2H LA3BF clc beq LA3D6 ldy #$00 lda (ZP.A2L),y iny eor (ZP.A2L),y bpl LA3AE lda (ZP.A2L),y bpl LA3AE iny jsr LA3FD bra LA3AE LA3D6 lda ZP.A2L sta XBBDC LA3DB clc jsr LA160 bcs LA410 LA3E1 ldy #$00 clc jsr LA3FD clc lda #$03 adc ZP.A2L sta ZP.A2L bcc LA3F2 inc ZP.A2H LA3F2 cmp XBBDC bne LA3E1 cpx ZP.A2H bne LA3E1 beq LA3DB LA3FD lda (ZP.A2L),y beq LA410 iny iny lda AS.VARSTART+1 cmp (ZP.A2L),y bcs LA410 lda (ZP.A2L),y adc XBBE2 sta (ZP.A2L),y LA410 rts *-------------------------------------- LA411 jsr LA021 bcs LA47F lda AS.ARRAYEND sec sbc AS.VARSTART sta BS.BAS.HDR sta BS.ReqMem lda AS.ARRAYEND+1 sbc AS.VARSTART+1 sta BS.BAS.HDR+1 sta BS.ReqMem+1 lda AS.ARRAYSTART sbc AS.VARSTART sta BS.BAS.HDR+2 lda AS.ARRAYSTART+1 sbc AS.VARSTART+1 sta BS.BAS.HDR+3 lda AS.STRINGSTART sbc BS.ReqMem sta ZP.A1L lda AS.STRINGSTART+1 sbc #$00 sta ZP.A1H lda AS.ARRAYEND sbc BS.ReqMem sta ZP.PCL lda AS.ARRAYEND+1 sbc #$00 sta ZP.PCH lda #$03 sta XA386+1 jsr BS.MoveMemUp lda #$07 sta XA386+1 lda ZP.A1L sta XBBE9 inc ZP.A1H lda ZP.A1H sta XBBEA lda AS.HIMEM sec sbc ZP.A1L sta XBBEB lda AS.HIMEM+1 sta BS.BAS.HDR+4 sbc ZP.A1H sta XBBEC clc LA47F rts *-------------------------------------- LA480 lda BS.BAS.HDR sta BS.ReqMem clc adc AS.VARSTART sta AS.ARRAYEND lda BS.BAS.HDR+1 sta BS.ReqMem+1 adc AS.VARSTART+1 sta AS.ARRAYEND+1 lda AS.VARSTART sta ZP.A1L adc BS.BAS.HDR+2 sta AS.ARRAYSTART lda AS.VARSTART+1 sta ZP.A1H adc BS.BAS.HDR+3 sta AS.ARRAYSTART+1 lda XBBE9 sta ZP.PCL lda XBBEA sta ZP.PCH jsr BS.MoveMemDown lda BS.ReqMem clc adc ZP.PCL sta AS.STRINGSTART lda ZP.PCH adc #$00 sta AS.STRINGSTART+1 sec lda AS.HIMEM+1 sbc BS.BAS.HDR+4 beq LA4D0 sta XBBE2 jsr LA3A3 LA4D0 clc rts *-------------------------------------- BS.LINEBUFCLR80 lda #$A0 ldx #$4F LA67E sta IO.LINEBUF+1,x dex bpl LA67E rts *-------------------------------------- BS.DOSCMD lda #$FF sta GP.XCNUM lda #$20 sta BS.GetCharSep lda #$08 sta BS.GetCharMax jsr BS.GetKWInCmdBuf lda BS.CMDBUF cmp #'A' bcs LA6A5 eor #'-' beq LA6A5 LA6A2 jmp BS.SYNERR LA6A5 jsr BS.IsIntCmd bcs LA6A2 lda GP.STATE bne LA6BA lda GP.EXECACTV bne LA6BA jsr MON.CLREOL jsr MON.CROUT 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 ldx GP.XLEN inx inx stx BS.GetCharMax lda GP.AllowedBITS beq LA744 asl bmi LA747 jsr BS.GetKWInCmdBuf php pha lda GP.AllowedBITS bpl LA6F8 lda #MLI.C.GETPREFIX jsr GP.GOSYSTEM LA6F8 pla plp beq LA744 cmp #',' bne LA703 jmp LA795 LA703 cmp #'/' beq LA70B cmp #'.' .. or ../ beq LA70B cmp #'A' bcc LA73D LA70B dex lda #$82 sta BS.GetCharSep lsr sta BS.GetCharMax * ldy #$00 jsr BS.GetKWInCmdBufAtX dey sty BS.CMDBUF.LEN lda #CMDBITS0.FN1 sta GP.FoundBITS phx jsr BS.Expand2PATHBUF plx bcs LA73A dex jsr BS.GetCharSpaceSep bne LA73A bcc LA7A6 lda GP.AllowedBITS lsr bcs LA770 LA73A jmp BS.SYNERR LA73D lda GP.XCNUM cmp #$06 RUN ???? bne LA73A LA744 bra LA7A6 LA747 jsr BS.GetKWInCmdBuf beq LA73A cmp #$41 beq LA79A jsr BS.TMPBUF3Reset stz XBC08 ldy #$13 sty XBC09 ldy #CMDBITS0.SLOT sty GP.FoundBITS stx BS.ToAUXSaveX ldx #BSX.GetDecNum.X jsr BS.ToAUX bcs LA76F lda GP.ParamINPR cmp #$08 bcc LA79F LA76C lda #BS.E.RANGE sec LA76F rts LA770 lsr bcc LA795 jsr BS.GetCharSpaceSep beq LA73A dex lda #$82 sta BS.GetCharSep ldy #$01 jsr BS.GetPathInPathBuf dey dey sty MLI.PATHBUF lda #CMDBITS0.FN1+CMDBITS0.FN2 sta GP.FoundBITS dex jsr BS.GetCharSpaceSep bne LA73A bcc LA7A6 *-------------------------------------- LA795 jsr BS.GetCharSpaceSep beq LA73A LA79A stx BS.ToAUXSaveX ldx #BSX.CheckOpt.X jsr BS.ToAUX bcs LA76F LA79F jsr BS.GetCharSpaceSep bne LA73A bcs LA795 LA7A6 lda GP.ParamS beq LA76C cmp #$08 bcs LA76C lda GP.ParamD beq LA76C cmp #$03 bcs LA76C lda GP.AllowedBITS and #CMDBITS0.RRUN+CMDBITS0.FN1 lsr beq LA7C9 lda GP.STATE bne LA7C9 lda #BS.E.NODIRECT sec rts LA7C9 bcc LA80B lda GP.AllowedBITS+1 and #CMDBITS1.SD beq LA80B lda GP.FoundBITS lsr bcs LA7E1 lda GP.AllowedBITS and #CMDBITS0.PFIX+CMDBITS0.FNOPT beq BS.SYNERR bpl LA80B LA7E1 lda BS.CMDBUF eor #'/' beq LA7ED lda MLI.PFIXPTR beq LA806 LA7ED lda GP.FoundBITS+1 and #CMDBITS1.SD beq LA80B bcs LA806 stz BS.CMDBUF.LEN stz BS.CMDBUF lda #CMDBITS0.FN1 tsb GP.FoundBITS LA806 jsr BS.GetVolAtSxDy bcs LA849 LA80B lda GP.XCNUM beq .8 cmp #25 PREFIX beq .8 cmp #34 CD beq .8 lda GP.AllowedBITS+1 and #CMDBITS1.SD beq .8 lda GP.FoundBITS lsr bcc LA844 jsr BS.GetFileInfo bcc LA844 cmp #$07 bne LA849 lda GP.AllowedBITS and #$08 bne LA844 lda #BS.E.PATHNFND6 rts .8 clc LA844 jmp (BS.KW.JMPADDR) BS.SYNERR lda #BS.E.SYNTAX LA849 sec rts *-------------------------------------- BS.GetVolAtSxDy lda GP.ParamS asl asl asl asl asl pha lda GP.ParamD eor #$01 lsr pla ror sta GP.MLIMRKEOFBUF.REFNUM ldx #$01 ldy #$02 jsr BS.SetSBUFADRXY lda #MLI.C.ONLINE jsr GP.GOSYSTEM bcs LA849 lda GP.ParamD sta GP.VDEFDRV lda GP.ParamS sta GP.VDEFSLT lda BS.CMDBUF eor #'/' beq LA8F4 lda IO.LINEBUF+1 and #$0F adc #$02 sta IO.LINEBUF+1 adc BS.CMDBUF.LEN cmp #$40 tax lda #BS.E.SYNTAX bcs LA8F5 ldy BS.CMDBUF.LEN stx BS.CMDBUF.LEN LA89D dex dey bmi LA8AA lda BS.CMDBUF,y sta BS.CMDBUF,x bra LA89D LA8AA lda #'/' sta BS.CMDBUF LA8AF sta BS.CMDBUF,x lda IO.LINEBUF,x dex bne LA8AF lda GP.XCNUM cmp #$0B OPEN beq LA8F4 cmp #$16 DELETE beq LA8F4 cmp #$08 EXEC beq LA8F4 lda MLI.PATHBUF tay clc adc IO.LINEBUF+1 cmp #$40 tax lda #BS.E.SYNTAX bcs LA8F5 stx MLI.PATHBUF LA8D9 dex dey bmi LA8E6 lda MLI.PATHBUF+1,y sta MLI.PATHBUF+1,x bra LA8D9 LA8E6 lda #'/' sta MLI.PATHBUF+1 LA8EB sta MLI.PATHBUF+1,x lda IO.LINEBUF,x dex bne LA8EB LA8F4 clc LA8F5 rts *-------------------------------------- BS.GetPathInPathBuf jsr BS.GetChar UC sta MLI.PATHBUF,y iny cmp #',' beq LAA45 cmp #$20 beq LAA45 cmp #$0D beq LAA56 cpy BS.GetCharMax bcc BS.GetPathInPathBuf ora #$00 rts *-------------------------------------- BS.GetKWInCmdBuf ldx #$00 BS.GetKWInCmdBufAtX ldy #$00 LAA2D jsr BS.GetChar UC sta BS.CMDBUF,y iny cmp #',' beq LAA45 cmp #$20 beq LAA45 cmp #$0D beq LAA56 cpy BS.GetCharMax bcc LAA2D LAA45 ora #$00 rts *-------------------------------------- BS.GetCharSpaceSep lda #$20 sta BS.GetCharSep jsr BS.GetChar UC cmp #',' beq LAA57 cmp #$0D LAA56 clc LAA57 rts *-------------------------------------- BS.GetChar lda IO.LINEBUF,x and #$7F inx cmp BS.GetCharSep beq BS.GetChar rts *-------------------------------------- BS.TMPBUF3x2 asl BS.TMPBUF4 rol BS.TMPBUF4+1 rol BS.TMPBUF4+2 BS.TMPBUF3x2.RTS rts *-------------------------------------- BS.IsIntCmd ldx #BSX.IsIntCmd.X jsr BS.ToAUX bcc BS.TMPBUF3x2.RTS dec GP.XCNUM $ff sec jmp GP.EXTRNCMD *-------------------------------------- BS.TMPBUF3Reset stz BS.TMPBUF4 stz BS.TMPBUF4+1 stz BS.TMPBUF4+2 rts *-------------------------------------- BS.KW.DASH lda GP.FITYPE cmp #$FC beq BS.KW.RUN cmp #$06 beq LABA3 cmp #$04 bne LAB63 jmp BS.KW.EXEC LAB63 cmp #$FF beq LAB6F cmp #$B3 beq LAB6F lda #BS.E.MISMATCH sec rts LAB6F pha jsr LB562 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 sta GP.ParamA+1 pla cmp #$FF bne LABA6 sta GP.ParamT lda #CMDBITS1.A sta GP.FoundBITS+1 lda #CMDBITS0.T+CMDBITS0.FN1 sta GP.FoundBITS LABA3 jmp BS.KW.BRUN LABA6 sec jsr MON.IIGSID bcs LABA3 jmp BS.QUIT.IIgs *-------------------------------------- BS.KW.CHAIN jsr LA411 lda AS.HIMEM+1 sta BS.AS.HIMEMSave ldx XBBEA dex stx AS.HIMEM+1 jsr LAC22 ldx BS.AS.HIMEMSave stx AS.HIMEM+1 bcs LAC33 jsr AS.CLEAR1 jsr LA480 lda #$00 beq LABE6 *-------------------------------------- BS.KW.RUN stz GP.IFILACTV stz AS.ERRNUM lda GP.FoundBITS lsr bcc LABF4 jsr LAC1D bcs LAC33 jsr AS.CLEAR1 LABE6 sta AS.ERRFLG jsr LACB6 jsr BS.SaveCSWKSW jsr LABF4 jmp AS.NEXTSTMT LABF4 jsr AS.NORMAL lda #$A3 sta X9F65 lda #$FF sta GP.XCNUM sta ZP.PROMPT ldx #$04 jsr BS.SetState jmp BS.SYNERR *-------------------------------------- BS.KW.LOAD jsr LAC1D bcs LAC33 BS.ENTRY jsr AS.CLEAR1 jsr BS.SetState0 stz ZP.CH jmp AS.RESTART1 LAC1D jsr LB562 bcs LAC33 LAC22 jsr LAC34 bcs LAC33 sty AS.ARRAYSTART sty AS.VARSTART sty AS.ARRAYEND stx AS.ARRAYSTART+1 stx AS.VARSTART+1 stx AS.ARRAYEND+1 LAC33 rts LAC34 lda #$01 ldx #$FC jsr BS.CheckFTypeXAccessA bcs LAC33 jsr BS.MLIGetEOF bcs LAC33 lda AS.PGRMSTART sta GP.MLIRW.DATAPTR adc GP.SBUFADR sta GP.ParamA lda AS.PGRMSTART+1 sta GP.MLIRW.DATAPTR+1 adc GP.SBUFADR+1 sta GP.ParamA+1 bcs LAC5E cmp AS.HIMEM+1 LAC5E lda #BS.E.TOOLARGE bcs LAC33 ldx GP.SBUFADR ldy GP.SBUFADR+1 jsr BS.ReadXYBytes bcs LAC33 jsr BS.MLIClose bcs LAC33 jsr LAC80 ldx GP.ParamA+1 ldy GP.ParamA stx AS.PGRMEND+1 sty AS.PGRMEND rts LAC80 sec lda AS.PGRMSTART sbc GP.FIAUXTYPE sta ZP.A1L lda AS.PGRMSTART+1 sbc GP.FIAUXTYPE+1 sta ZP.A1H ora ZP.A1L clc beq LACD9 ldx AS.PGRMSTART lda AS.PGRMSTART+1 LAC98 stx ZP.PCL sta ZP.PCH ldy #$01 lda (ZP.PCL),y dey ora (ZP.PCL),y beq LACD9 lda (ZP.PCL),y adc ZP.A1L tax sta (ZP.PCL),y iny lda (ZP.PCL),y adc ZP.A1H sta (ZP.PCL),y clc bcc LAC98 LACB6 lda GP.FoundBITS+1 and #CMDBITS1.LINE clc beq LACD9 lda GP.ParamAT sta AS.LINNUM lda GP.ParamAT+1 sta AS.LINNUM+1 jsr AS.FINDLINE clc lda AS.LOWTR adc #$FF sta AS.TXTPTR lda AS.LOWTR+1 adc #$FF sta AS.TXTPTR+1 clc LACD9 rts *-------------------------------------- BS.KW.SAVE bcc LACFE lda #$FC sta GP.ParamT sta GP.FITYPE lda #$C3 sta GP.FIACCESS lda AS.PGRMSTART sta GP.CRAUXTYPE sta GP.FIAUXTYPE lda AS.PGRMSTART+1 sta GP.CRAUXTYPE+1 sta GP.FIAUXTYPE+1 jsr BS.CreateFileOrDir bcs LAD47 LACFE lda #$02 ldx #$FC jsr BS.CheckFTypeXAccessA bcs LAD47 lda AS.PGRMEND sec sbc AS.PGRMSTART tax lda AS.PGRMEND+1 sbc AS.PGRMSTART+1 tay jsr BS.SetSBUFADRXY0 lda AS.PGRMSTART sta GP.MLIRW.DATAPTR lda AS.PGRMSTART+1 sta GP.MLIRW.DATAPTR+1 jsr BS.WriteXYBytes bcs LAD47 jsr BS.MLISetEOF bcs LAD47 jsr BS.MLIClose bcs LAD47 lda AS.PGRMSTART+1 ldx AS.PGRMSTART cmp GP.FIAUXTYPE+1 bne LAD48 cpx GP.FIAUXTYPE clc bne LAD48 LAD47 rts LAD48 stx GP.FIAUXTYPE sta GP.FIAUXTYPE+1 jmp BS.SetFileInfoNoDate *-------------------------------------- BS.KW.CREATE stz GP.CRAUXTYPE stz GP.CRAUXTYPE+1 lda GP.FoundBITS and #CMDBITS0.T bne BS.CreateFileOrDir lda #$0F sta GP.ParamT BS.CreateFileOrDir lda GP.EXECACTV asl lda #$00 adc GP.OPENCNT cmp #$08 bcs LAD8D lda GP.ParamT sta GP.CRTYPE ldx #$C3 ldy #$01 cmp #$0F bne LAD82 ldy #$0D LAD82 stx GP.CRACCESS sty GP.CRSTTYPE lda #MLI.C.CREATE jmp GP.GOSYSTEM LAD8D lda #BS.E.NOBUFFER rts *-------------------------------------- BS.KW.RENAME lda GP.FoundBITS lsr lsr lda #MLI.C.RENAME bcs LAD9E jmp BS.SYNERR *-------------------------------------- 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 lda GP.FIACCESS and #$3C ora #$01 bra BS.KW.UNLOCK1 *-------------------------------------- BS.KW.UNLOCK jsr BS.GetFileInfo lda #$C3 ora GP.FIACCESS BS.KW.UNLOCK1 sta GP.FIACCESS jmp BS.SetFileInfo *-------------------------------------- BS.KW.PREFIX lda GP.FoundBITS+1 and #CMDBITS1.SD bne BS.SETPREFIX lda GP.FoundBITS lsr bcs BS.SETPREFIX BS.GETPREFIX lda ZP.PROMPT beq LADF0 jsr MON.CROUT ldx #$00 LADD8 cpx BS.CMDBUF.LEN beq LADE8 lda BS.CMDBUF,x ora #$80 jsr MON.COUT inx bne LADD8 LADE8 jsr MON.CROUT jsr MON.CROUT clc rts LADF0 sec ror GP.PFXACTV clc rts *-------------------------------------- MAN SAVE usr/src/basic.fx/basic.s.b LOAD usr/src/basic.fx/basic.s ASM