NEW AUTO 3,1 *-------------------------------------- BS.GetSysBuf lda #$04 BS.GetSysBufA sta XBBB5 jsr BS.KW.FRE bcs .99 lda AS.STRINGSTART+1 sbc AS.ARRAYEND+1 cmp XBBB5 lda #BS.E.NOBUFFER bcc .98 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 .98 sec .99 rts XBBB5 .BS 1 *-------------------------------------- BS.FreeSysBuf jsr BS.KW.FRE bcs .9 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 .8 pha ldx GP.OPENCNT beq .2 lda AS.HIMEM+1 .1 cmp BS.BUFPAGEs-1,x beq LA29E dex bne .1 .2 pla sec .9 rts .8 clc 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 *-------------------------------------- BS.GETBUFR jsr BS.GetSysBufA bcs LA2F6.9 pha sbc #$03 sta XBBB8 pla .1 sta GP.SBUFADR+1 ldx GP.OPENCNT beq .4 lda XBBB7 clc adc #$04 sta XBBB7 .2 cmp BS.BUFPAGEs-1,x bne .3 lda GP.SBUFADR+1 jsr LA356 jsr BS.SetFileBuf lda GP.SBUFADR+1 adc #$04 bcc .1 .3 dex bne .2 .4 lda GP.SBUFADR+1 bit GP.EXECACTV bpl LA2F6.8 *-------------------------------------- LA2F6 ldx #$08 jsr LA356 jsr BS.SetFileBuf lda GP.SBUFADR+1 adc #$04 LA2F6.8 clc LA2F6.9 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 .8 sta AS.HIMEM+1 bit GP.EXECACTV bpl .1 jsr LA2F6 bcc .3 .1 lda XBBB7 ldx GP.OPENCNT beq .5 .2 cmp BS.BUFPAGEs-1,x bne .4 lda AS.HIMEM+1 jsr LA356 jsr BS.SetFileBuf sec lda XBBB7 sbc #$04 sta XBBB7 .3 lda AS.HIMEM+1 sec sbc #$04 sta AS.HIMEM+1 bcs .1 .4 dex bne .2 .5 jsr BS.KW.FRE .8 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 .2 .1 clc lda ZP.A2L adc #$07 .2 sta ZP.A2L bcc .3 inc ZP.A2H .3 eor AS.ARRAYSTART bne .4 cpx ZP.A2H .4 clc beq .5 ldy #$00 lda (ZP.A2L),y iny eor (ZP.A2L),y bpl .1 lda (ZP.A2L),y bpl .1 iny jsr LA3FD bra .1 .5 lda ZP.A2L sta XBBDC .6 clc jsr LA160 bcs LA410 .7 ldy #$00 clc jsr LA3FD clc lda #$03 adc ZP.A2L sta ZP.A2L bcc .8 inc ZP.A2H .8 cmp XBBDC bne .7 cpx ZP.A2H bne .7 beq .6 *-------------------------------------- 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 BS.FRE0 bcs .9 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 .9 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 .8 sta XBBE2 jsr LA3A3 .8 clc rts *-------------------------------------- BS.LINEBUFCLR80 lda #$A0 ldx #$4F .1 sta IO.LINEBUF+1,x dex bpl .1 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 CMDBITS0.SLOT jsr BS.GetKWInCmdBuf php pha lda GP.AllowedBITS bpl LA6F8 CMDBITS0.PFIX 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 CMDBITS0.FN1 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 * >DEBUG 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 CMDBITS0.FN1 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 #CMDBITS0.CRFLG 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 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 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 pha ldx XBBEA dex stx AS.HIMEM+1 jsr BS.LoadBAS plx stx AS.HIMEM+1 bcs BS.LoadBAS0.RTS 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 BS.LoadBAS0 bcs BS.LoadBAS0.RTS jsr AS.CLEAR1 LABE6 sta AS.ERRFLG jsr BS.SetRunLineNum 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 BS.LoadBAS0 bcs BS.LoadBAS0.RTS BS.ENTRY jsr AS.CLEAR1 jsr BS.SetState0 stz ZP.CH jmp AS.RESTART1 *-------------------------------------- BS.LoadBAS0 jsr BS.CloseAll BS.LoadBAS0.RTS bcs BS.LoadBAS.RTS BS.LoadBAS lda #$01 ldx #$FC jsr BS.CheckFTypeXAccessA bcs BS.LoadBAS.RTS jsr BS.MLIGetEOF bcs BS.LoadBAS.RTS 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 .1 cmp AS.HIMEM+1 .1 lda #BS.E.TOOLARGE bcs BS.LoadBAS.RTS ldx GP.SBUFADR ldy GP.SBUFADR+1 jsr BS.ReadXYBytes bcs BS.LoadBAS.RTS jsr BS.MLIClose bcs BS.LoadBAS.RTS jsr LAC80 ldx GP.ParamA+1 ldy GP.ParamA stx AS.PGRMEND+1 sty AS.PGRMEND sty AS.ARRAYSTART sty AS.VARSTART sty AS.ARRAYEND stx AS.ARRAYSTART+1 stx AS.VARSTART+1 stx AS.ARRAYEND+1 BS.LoadBAS.RTS 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 BS.SetRunLineNum 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