NEW
  AUTO 3,1
*--------------------------------------
BS.ResetCSWKSW	pha
				phx

				ldx #3

.1				lda GP.VECTOUT,x
				sta	ZP.CSW,x
				dex
				bpl .1

				plx
				pla
				rts
*--------------------------------------
BS.SetState0	ldx	#$00
				jsr	BS.SetState

				lda ZP.KSW+1
				cmp	GP.VDOSI+1
				beq	BS.SetCSWKSW2VDOS

				lda ZP.CSW+1
				cmp	GP.VDOSO+1
				beq	BS.SetCSWKSW2VDOS

				bne	BS.SaveCSWKSW
*--------------------------------------
BS.IO.OUT		cmp	X9F65
				bne	L9A54

				stx	GP.PREGX
				tsx
				lda $103,x
				cmp	#$12				From AS rom: TRACE
				bne	L9A6E

				lda $104,x
				cmp	#$D8				jsr from $D810, then JSR MON.COUT
				bne	L9A6E

				ldx	#$04
				jsr	BS.SetState
				lda X9F65
				ldx	GP.PREGX
				jmp	BS.JMP.GP.VSYSO

L9A54			cmp	GP.CHRLAST
				sta	GP.CHRLAST
				bne	L9A74

				cmp	#$8D
				bne	L9A74

				lda ZP.CH
				bne	L9A69

				lda BS.CMDBUF
				cmp	#$3F

L9A69			lda #$8D
				bcs	L9A74

				rts

L9A6E			ldx	GP.PREGX
				lda X9F65

L9A74			jsr	BS.ResetCSWKSW
				jsr	MON.COUT
				cmp	#$8D
				bne	BS.SaveCSWKSW

				lda AS.TRCFLG
				cmp	#$A5
				beq	L9A8B

				sta	GP.DTRACE
				lda #$A5
				sta	AS.TRCFLG

L9A8B			lda #$8D

BS.SaveCSWKSW	pha
				phx

				ldx #3

.1				lda ZP.CSW,x
				sta	GP.VECTOUT,x
				dex
				bpl .1

				plx
				pla

BS.SetCSWKSW2VDOS
				pha
				phx

				ldx #3

.1				lda GP.VDOSO,x
				sta	ZP.CSW,x
				dex
				bpl .1

				plx
				pla
				rts
*--------------------------------------
BS.IO.IN		bit	GP.EXECACTV
				bpl	.1

				jsr	BS.SaveAXY
				jmp	BS.IO.IN.EXEC

.1				jsr	BS.ResetCSWKSW

				jsr	MON.KEYIN0
				cmp	#$8D
				beq .5

				cmp #$88
				beq .2

				cmp #$FF
				bne BS.SaveCSWKSW

.2			txa
			beq BS.IO.IN.BS

.3			lda #$88
			jsr MON.COUT

			lda #$A0
			jsr MON.COUT

			bra	BS.IO.IN.BS

.5				jsr	BS.SaveAXY
				sta	IO.LINEBUF,x

BS.CheckDOSCMD	jsr	BS.DOSCMD
				bit	GP.XCNUM
				bmi	L9AE8

				bcs	BS.ERROUT

				ldy	GP.PREGY
				ldx	#$00

BS.IO.IN.BS		lda #$88
				bra	BS.SaveCSWKSW

L9AE8			jsr	BS.RestoreAXY
				jmp	BS.SaveCSWKSW
*--------------------------------------
BS.NODEVERR		lda #$03

BS.ERROUT		sta	GP.ERRCODE
				sta	AS.ERRNUM
				lda GP.STATE
				cmp	#$01
				php
				lda #$0F
				sta	MLI.LEVEL

				stz	GP.IFILACTV
				stz	GP.OFILACTV
				stz	GP.PFXACTV
				stz	GP.MLICF.REFNUM		Close All

				jsr BS.MLIClose
				bcs	L9B27

				jsr	LA004
				bcs	L9B27

				stz	MLI.LEVEL
				stz	GP.MLICF.REFNUM
				lda #MLI.C.FLUSH
				jsr GP.GOSYSTEM

L9B27			plp
				ldx	#$04
				bit	AS.ERRFLG
				bcs	L9B30

				ldx	#$00

L9B30			php
				jsr	BS.SetState
				jsr	BS.SetCSWKSW2VDOS
				lda GP.ERRCODE
				plp
				bmi	L9B4D

				php
				jsr	GP.PRINTERR
				jsr	LB36B
				plp
				bcs	L9B53

				jsr	MON.CROUT
				jmp	AS.RESTART1

L9B4D			ldx	AS.REMSTK
				dex
				dex
				txs
				tax

L9B53			lda #$03
				jmp	AS.BITERRFLG
*--------------------------------------
L9B58			stz	AS.ERRNUM
				lda #$A3
				sta	X9F65
				jsr	AS.NORMAL
				jsr	BS.ResetCSWKSW
				jsr	BS.WriteTBUF
				jsr	BS.SetState0
				jsr	BS.RestoreAXY
				jmp	BS.IO.IN
*--------------------------------------
BS.IO.IN0		jsr	BS.SaveAXY
				bit	GP.PFXACTV
				bpl	L9B7E

				jmp	BS.IO.IN.CAT

L9B7E			bit	GP.IFILACTV
				bpl	L9B86
				jmp	BS.IO.IN.FILE

L9B86			bit	GP.EXECACTV
				bmi	BS.IO.IN.EXEC

				lda ZP.PROMPT
				cmp	#"]"
				beq	L9B58

				jsr	BS.ResetCSWKSW

L9B94			lda GP.PREGA
				ldy	GP.PREGY
				jsr	MON.KEYIN0
				cmp	#$88
				bne	L9BAC

				lda ZP.PROMPT
				cmp	#">"
				beq	L9BAA

				txa
				beq	L9B94

L9BAA			lda #$88
L9BAC			jmp	BS.SaveCSWKSW
*--------------------------------------
BS.IO.IN.EXEC	sta	(ZP.BASL),y
				lda ZP.PROMPT
				cmp	#">"
				beq	L9BF2

				lda IO.KBD
				bpl	L9BCD

				cmp	#$83
				bne	L9BCD

				jsr	LB36B
				lda GP.STATE
				bne	L9C01

				sta	IO.KSTROBE
				beq	L9C01

L9BCD			jsr	BS.Setup4readEFBytesAt200
				jsr	L9C6C
				bcs	L9BFA

				jsr	BS.SaveAXY
				bcc	L9BDE

L9BDA			dex
				lda IO.LINEBUF,x

L9BDE			ora	#$80
				sta	IO.LINEBUF,x
				txa
				bne	L9BDA

				jsr	BS.ResetCSWKSW
				jsr	BS.CheckDOSCMD
				bit	GP.XCNUM
				bpl	L9BCD

L9BF1			rts

L9BF2			jsr	BS.Setup4readEFBytesAt200
				jsr	BS.ReadOneByte
				bcc	L9BF1

L9BFA			jsr	LB2B5
				cmp	#$05
				bne	L9C13

L9C01			ldx	#$00
				ldy	ZP.CH
				bne	L9C0E

				lda #"]"
				sta	ZP.PROMPT
				lda #$88
				rts

L9C0E			lda (ZP.BASL),y
				jmp	(ZP.KSW)

L9C13			jmp	BS.ERROUT
*--------------------------------------
BS.IO.IN.FILE	lda ZP.PROMPT
				cmp	#"]"
				bne	L9C1F
				jmp	L9B58

L9C1F			lda GP.PREGA
				sta	(ZP.BASL),y
				lda IO.KBD
				bpl	L9C31

				cmp	#$83
				bne	L9C31

				bit	IO.KSTROBE
				rts

L9C31			lda ZP.PROMPT
				bit	GP.DIRFLG
				bmi	L9C95

				cmp	#">"
				beq	L9C42

				jsr	L9C67
				bcs	L9C13

				rts

L9C42			jsr	BS.ReadOneByte
				bcs	L9C13

				rts
*--------------------------------------
BS.ReadOneByte	lda GP.MLIRW.COUNT
				sta	GP.ParamL
				lda #$01
				sta	GP.MLIRW.COUNT

				jsr BS.MLIRead
				bcs	L9C66

				lda GP.ParamL
				sta	GP.MLIRW.COUNT
				ldx	GP.MLIRW.DATAPTR
				lda IO.LINEBUF,x

L9C66			rts
*--------------------------------------
L9C67			lda GP.PREGA
				sta	(ZP.BASL),y

L9C6C			jsr BS.MLIRead
				bcs	L9C66

				lda GP.MLIRW.TRANS
				beq	L9C8E

				clc
				adc	GP.MLIRW.DATAPTR
				tax
				lda IO.LINEBUF-1,x
				and	#$7F
				cmp	#$0D
				bne	L9C8E

				lda GP.FoundBITS+1
				and	#CMDBITS1.L
				bne	L9C8E

				dex

L9C8E			lda #$8D
				ldy	GP.PREGY
				clc
				rts
*--------------------------------------
L9C95			cmp	#$BE
				beq	L9C8E

				lda GP.PREGA
				sta	(ZP.BASL),y
				lda #$4F
				sta	BS.CATWIDTH
				jsr BS.MLIGetMark
				bcs	L9D1F

				lda GP.SBUFADR
				ora	GP.SBUFADR+1
				bne	L9CDF

				lda #$02
				sta	GP.CATFLAG
				jsr	BS.ReadDirEnt
				bcs	L9D1F

				jsr BS.GetFTableIdx

				lda BS.CAT.EL
				sta	BS.OpenFiles+1,x
				lda BS.CAT.EPB
				sta	BS.OpenFiles+2,x
				jsr	BS.Filename2LineBuf

L9CD3			lda #$A2
				sta	IO.LINEBUF
				lda #$8D
				sta	IO.LINEBUF,x
				clc
				rts

L9CDF			lda GP.CATFLAG
				beq	L9D22

				bmi	L9CF9

				ldx	#$00
				dec	GP.CATFLAG
				beq	L9CD3

				jsr	BS.LINEBUFCLR80

				ldy	#$10
				ldx #BSX.GetMSGY.X
				jsr	BS.ToAUX

L9CF5			ldx	#$50
				bne	L9CD3

L9CF9			cmp	#$FF
				bne	L9D1C

				dec	GP.CATFLAG

				stz	GP.MLIRW.COUNT
				stz	GP.MLIRW.COUNT+1

				jsr BS.MLIRead
				jsr	BS.MkCatLineF
				pha
				lda GP.MLIRW.REFNUM
				sta	GP.MLIMRKEOFBUF.REFNUM
				pla
				bcc	L9CF5

				bcs	L9D1F

L9D1C			lda #$05
				sec

L9D1F			jmp	BS.ERROUT

L9D22			lda #$FF
				sta	BS.CAT.EICB

				jsr BS.GetFTableIdx

				lda BS.OpenFiles+1,x
				sta	BS.CAT.EL
				lda BS.OpenFiles+2,x
				sta	BS.CAT.EPB
				lda GP.SBUFADR+1
				and	#$01
				tax
				lda GP.SBUFADR
				sec

L9D45			inc BS.CAT.EICB
				sbc	BS.CAT.EL
				bcs	L9D45

				dex
				beq	L9D45

				jsr	LB241
				bcc	L9D65

				cmp	#$02
				beq	L9D5D

				cmp	#$05
				bne	L9D1F

L9D5D			dec GP.CATFLAG
				ldx	#$00
				jmp	L9CD3

L9D65			ldx #BSX.MkCatLine
				jsr BS.ToAUX

				jmp	L9CF5
*--------------------------------------
BS.IO.IN.CAT	cmp	#$DD
				bne	L9D72

				jmp	L9B58

L9D72			lda GP.PREGA
				sta	(ZP.BASL),y

				stz	GP.PFXACTV
				ldx	BS.CMDBUF.LEN

L9D7F			lda BS.CMDBUF.LEN,x
				sta	IO.LINEBUF-1,x
				dex
				bne	L9D7F

				ldx	BS.CMDBUF.LEN
				lda #$8D
				rts
*--------------------------------------
BS.Setup4readEFBytesAt200
				lda BS.REFNUM
				sta	GP.MLIRW.REFNUM
				lda #$02
				sta	GP.MLIRW.DATAPTR+1
				lda #$EF
				sta	GP.MLIRW.COUNT

				stz	GP.MLIRW.COUNT+1
				stz	GP.MLIRW.DATAPTR
				rts
*--------------------------------------
BS.VSYSO		jsr	BS.SaveAXY
				cmp	#$84
				bne	.1

				jsr	BS.WriteTBUF
			stz	GP.INPTR
			stz	GP.IFILACTV
			stz	GP.OFILACTV
			stz	GP.PFXACTV
				jmp BS.SetState8RestAXY

.1				jsr BS.SetState4RestAXY

				jmp	BS.JMP.GP.VSYSO
*--------------------------------------
BS.IO.OUT.CAT	jsr	BS.SaveAXY
				ldx	GP.INPTR
				sta	IO.LINEBUF,x
				cmp	#$8D
				beq	L9DEB

				inc	GP.INPTR
				bne	L9DE7

				lda #$10

L9DE4			jmp	BS.ERROUT

L9DE7			ldx	GP.PREGX
				rts

L9DEB			inx
				dex
				beq	BS.SetState4RestAXY

				jsr	BS.ResetCSWKSW
				jsr	BS.DOSCMD
				bcs	L9DE4

				jsr	BS.SaveCSWKSW

BS.SetState4RestAXY
				ldx	#$04
				.HS 2C					BIT ABS
BS.SetState8RestAXY
				ldx	#$08
				jsr BS.SetState
				jmp	BS.RestoreAXY

L9E02			sty	GP.PREGY
				ldy	ZP.PROMPT
				beq	L9E15

				dey
				beq	L9E15

				dey
				beq	L9E15

				ldy	GP.PREGY
				jmp	L9A74

L9E15			ldy	GP.TBUFPTR
				and	#$7F
				sta	(AS.HIMEM),y
				ldy	GP.PREGY
				inc	GP.TBUFPTR
				bne	L9E2F

				jsr	BS.SaveAXY
				jsr	BS.WriteTBUF256
				bcs	L9DE4

				jsr	BS.RestoreAXY

L9E2F			rts
*--------------------------------------
BS.IO.OUT.TRACE	pha
				stx	GP.PREGX
				tsx
				lda $104,x
				cmp	#$12
				bne	L9E46

				lda $105,x
				cmp	#$D8
				bne	L9E46

				pla
				bcs	L9EBA

L9E46			pla
				ldx	GP.PREGX
				bit	GP.OFILACTV
				bpl	L9E70

				cmp	#$DD
				bne	L9E5A

				cmp	ZP.PROMPT
				beq	L9E8A

L9E5A			cmp	#$8D
				bne	L9E02

				lda ZP.PROMPT
				cmp	#$FF
				lda #$8D
				bcc	L9E02

				jsr	BS.WriteTBUF
				sta	GP.OFILACTV
				lda #$8D
				bne	L9EA3

L9E70			pha
				lda GP.IFILACTV
				ora	GP.PFXACTV
				bpl	L9E81

				lda ZP.PROMPT
				ora	#$04
				cmp	#$84
				beq	L9EA6

L9E81			pla
				cmp	#$DD
				bne	L9EA3

				cmp	ZP.PROMPT
				bne	L9EA3

L9E8A			jsr	BS.SaveAXY
				lda GP.OPENCNT
				beq	L9EA0

				jsr	BS.WriteTBUF
				sta	GP.OFILACTV
				jsr	BS.ResetCSWKSW
				lda #BS.E.FSTILLOPEN
				jsr	GP.PRINTERR

L9EA0			jsr	BS.RestoreAXY
L9EA3			jmp	L9A74

L9EA6			pla
				cmp	#$8D
				bne	L9EAE

				cmp	GP.CHRLAST

L9EAE			sta	GP.CHRLAST
				bne	L9EB5

				sta	ZP.PROMPT

L9EB5			rts

L9EB6			inc AS.TXTPTR+1
				bne	L9EBE

L9EBA			inc AS.TXTPTR
				beq	L9EB6

L9EBE			ldx	#$FF
				stx	ZP.PROMPT
				ldx	AS.REMSTK
				txs
				bit	GP.DTRACE
				bmi	L9F3D

L9ECA			ldy	#$00
				lda (AS.TXTPTR),y
				bmi	L9EF5

				beq	L9EF2

L9ED2			dec GP.STRINGS
				bne	L9EF0

				lda AS.STRINGSTART+1
				sbc	AS.ARRAYEND+1
				cmp	#$03
				bcs	L9EE9

				jsr	BS.WriteTBUF
				jsr	BS.KW.FRE
				lda AS.STRINGSTART+1
				sbc	AS.ARRAYEND+1

L9EE9			sta	GP.STRINGS
				ldy	#$00
				lda (AS.TXTPTR),y

L9EF0			cmp	#$3A
L9EF2			jmp	AS.EXECSTMT

L9EF5			sta	ZP.PROMPT
				tay
				lda BS.AS.KW-$80,y
				bmi	L9EF2

				sta	X9F00+1

X9F00			bne	BS.AS.KW0			SELF MODIFIED
BS.AS.KW0
BS.AS.KW.IF
BS.AS.KW.PRINT
				stz	ZP.PROMPT
				stz	GP.CHRLAST
				lda #BS.VSYSO
				sta	GP.VSYSO
				lda /BS.VSYSO
				sta	GP.VSYSO+1
				bne	L9F32

BS.AS.KW.LIST	lda #$01
				.HS 2C					BIT ABS
BS.AS.KW.CALL	lda #$02
				sta	ZP.PROMPT
				bne	L9F32

BS.AS.KW.LET	tya
				bra	L9ED2

BS.AS.KW.TRACE	sty	GP.DTRACE
				bne	L9F2E

BS.AS.KW.NOTRACE
				sta	GP.DTRACE
				dey

L9F2E			lda #$4A
				sta	AS.TRCFLG

L9F32			tya
				jmp	AS.EXECSTMT
*--------------------------------------
BS.AS.KW.RESUME	stz	AS.ERRNUM
				tya
				bne	L9EF0

L9F3D			jsr	BS.ResetCSWKSW
				lda #$A3
				jsr	MON.COUT
				ldx	AS.CURLINE
				lda AS.CURLINE+1
				jsr	AS.INTPRINTAX
				lda #$A0
				jsr	MON.COUT
				jsr	BS.SaveCSWKSW
				sec
				jmp	L9ECA
BS.AS.KW.FLASH
				lda #$E3
				.HS 2C					BIT ABS
BS.AS.KW.NORMAL
BS.AS.KW.INVERSE
				lda #$A3

L9F5E			sta	X9F65
				tya
				bne	L9EF0

X9F65			.DA #$A3
*--------------------------------------
BS.SaveAXY		sta	GP.PREGA
				stx	GP.PREGX
				sty	GP.PREGY
				rts
*--------------------------------------
BS.RestoreAXY	lda GP.PREGA
				ldx	GP.PREGX
				ldy	GP.PREGY
				rts
*--------------------------------------
BS.SetState		stx	GP.STATE
				ldy	#$00

.1				lda BS.SYSIOVECTS,x
				sta	GP.VSYSO,y
				inx
				iny
				cpy	#$04
				bne	.1

				rts
*--------------------------------------
BS.PRINTERR		ldx #BSX.GetErrA.X
				.HS 2C					BIT ABS
BS.GetMsgY		ldx #BSX.GetMsgY.X
				jsr	BS.ToAUX

				ldx	GP.INPTR
				stx	BS.CATWIDTH
				jsr	MON.CROUT
				lda #$87
				jsr	MON.COUT

BS.LINEBUFOUT	ldx	#$00

.1				lda IO.LINEBUF+1,x
				jsr	MON.COUT
				inx
				cpx	BS.CATWIDTH
				bcc	.1

				jmp	MON.CROUT
*--------------------------------------
BS.WriteTBUF256	lda #$00
				ldy	#$01
				bne	BS.WriteTBUFAY

BS.WriteTBUF	jsr	LA004
				bcc	LA020

				tay
				pla
				pla
				tya
				jmp	BS.ERROUT
*--------------------------------------
LA004			ldy	#$00
				lda GP.TBUFPTR
				clc
				beq	LA020

BS.WriteTBUFAY	sta GP.MLIRW.COUNT
				sty	GP.MLIRW.COUNT+1

				jsr BS.MLIWrite

				stz	GP.TBUFPTR

LA020			rts
*--------------------------------------
BS.FRE0			ldx #BSX.Fre0.X
				.HS 2C					BIT ABS
BS.KW.FRE
BS.FRE1			ldx #BSX.Fre0.X

				ldy #13

.1				lda AS.PGRMSTART,y
				sta ASX.PGRMSTART,y
				dey
				bpl .1

				jsr BS.ToAUX
				bcs .9

				pha
				phy
				ldy #13

.2				lda ASX.PGRMSTART,y
				sta AS.PGRMSTART,y
				dey
				bpl .2

				ply
				pla

.9				rts
*--------------------------------------
* DUPLICATE CODE in BASIC.S.XM.txt
*--------------------------------------
LA160			clc
				lda XBBDC
				sta	ZP.A2L
				stx	ZP.A2H
				eor	AS.ARRAYEND
				bne	LA170

				cpx	AS.ARRAYEND+1
				beq	LA198

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

				ldy	#$04
				lda (ZP.A2L),y
				asl
				adc	#$05
				adc	ZP.A2L
				sta	ZP.A2L
				bcc	LA198

				inc	ZP.A2H

				clc
LA198			rts
*--------------------------------------
MAN
SAVE usr/src/basic.fx/basic.s.a
LOAD usr/src/basic.fx/basic.s
ASM
