;:poke56,96:poke52,96:clr
;:sys36864
	;.opt oo
	*= $6000	; sys 24576
	jmp anfang
tsys	=$9e
tclr	=$9c
trun	=$8a
tprint	=$99
strout	=$ab1e
tlet	=$88
frmnum	=$ad8a
komma	=$aefd
integer	=$b7f7
byte	=$14
mem1	=251
mem2	=252
mem3	=253
mem4	=254
mem5	=255
tend	=$80
prg	=43
axout	=$bdcd
nr	=2
return	=$aad7
out	=$ffd2
warm	=$e385
break	=$a82f
tstop	=$90
chrgot	=121
ascflt	=$bcf3
round	=$bc1b
txtptr	=$7a
facout	=$bdd7
fehler	=$a445
stradr	=$22
trem	=$8f
tgl	=$b2
tpoke	=$97
tgoto	=$89
konf	=1
ptr1	=4
ptr2	=181
ptr3	=139
ptr4	=141
tgosub	=$8d
tif	=$8b
tthen	=$a7
treturn	=$8e
interr	=$a437
tpl	=$aa
tmi	=$ab
tma	=$ac
tdu	=$ad
testop	=$a82c
brkflg	=6
getkey	=65508
tgro	=$b1
tkle	=$b3
sys	=$e130
tpeek	=$c2
head	=168
mem3h	=167
pro	=166
uhr	=161
mul	ldx mem3
	ldy mem3h
	lda #0
	sta mem4
	sta mem5
z602	cpx #0
	bne z605
	cpy #0
	beq z609
z605	lda mem4
	clc
	adc mem1
	sta mem4
	lda mem5
	adc mem2
	sta mem5
z608	dex
	cpx #255
	bne z602
	dey
	clc
	bcc z602
z609	rts
tei	ldx #255
	stx mem5
	stx mem4
z614	inc mem4
	bne z616
	inc mem5
z616	lda mem1
	sec
	sbc mem3
	sta mem1
	lda mem2
	sbc mem3h
	sta mem2
	bcs z614
	rts
div	lda mem3
	bne tei
	lda mem3h
	bne tei
	lda #255
	sta mem4
	sta mem5
	rts
clr	lda #0
	ldx #52
z632	sta $ffff,x
	dex
	bne z632
	rts
plu	lda mem1
	clc
	adc mem3
	sta mem4
	lda mem2
	adc mem3h
	sta mem5
	rts
min	lda mem1
	sec
	sbc mem3
	sta mem4
	lda mem2
	sbc mem3h
	sta mem5
	rts
qflg	.byt 0
ra	.word 0 	;relat. adr. add
rs	.word 0 	;relat. adr. sub
rm	.word 0 	;relat. adr. mult
rd	.word 0 	;relat. adr. div
rc	.word 0 	;relat. adr. clr
rv	.word 0 	;relat. adr. var
ru	.word 0 	;relat. adr. prg
t1	.byte "    zeile "
	.byt 0
t6	.byte "ende. letztes byte bei "
	.byt 0
t7	.byte "found illegal byte "
	.byt 0
t8	.byte "protokollieren ? [j/n]"
	.byt 13,0
t2	.byte "- pass 2"
	.byt 13,0
t3	.byte "    suche zeile "
	.byt 0
t4	.byte "\x11\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\x12\x11\x9d\x9d\x9d\x9d\x9d\x9d\x9d\x9d\x9dcompiling"
	.byt 13
	.byte "- pass 1"
	.byt 13,0
t5	.byte "\x11\x12run stop\x92 erlauben ? [j/n]"
	.byt 13,0
e1	.byte "missing leT"
e2	.byte "invalid statemenT"
e3	.byte "illegal parameteR"
e4	.byte "wrong chaR"
e5	.byte "leT"
e6	.byte "missing chaR"
e7	.byte "line not founD"
e8	.byte "prograM"
e9	.byte "illegal pseudO"
ez	.word e1,e2,e3,e4,e5,e6,e7,e8,e9
errx	dex
	txa
	asl
	tax
	lda ez,x
	sta stradr
	lda ez+1,x
	jmp fehler
put	.byt $8d
adr	.word 0
	inc adr
	bne nocy
	inc adr+1
nocy	rts
getbase	jsr komma
	jsr frmnum
	jsr integer
	lda byte
	ldy byte+1
	sta adr
	sty adr+1
	rts
copy	ldx #0
l1	lda mul,x
	jsr put
	inx
	cpx #qflg-mul
	bne l1
	rts
calc	lda byte+1
	sta ra+1
	sta rs+1
	sta rm+1
	sta rd+1
	sta rc+1
	lda byte
	clc
	adc #3
	sta rm
	clc
	adc #69
	sta rd
	clc
	adc #15
	sta rc
	clc
	adc #11
	sta ra
	clc
	adc #14
	sta rs
	rts
fillvar	ldx #52
	lda #0
l2	jsr put
	dex
	bne l2
	rts
get	.byt $ad
in	.word 0
	inc in
	bne z1065
	inc in+1
z1065	bit head
	bpl z1066
	jmp rt
z1066	cmp #34
	bne z1070
	lda qflg
	eor #255
	sta qflg
	lda #34
z1070	bit qflg
	bmi rt
	cmp #32
	beq get
rt	cmp #0
	rts
gette	cmp #"0"
	bcs ner3
er3	ldx #3
	jmp errx
ner3	cmp #"9"+1
	bcc zahl
	cmp #"a"
	bcc er3
	cmp #"z"+1
	bcs er3
	sec
	sbc #"a"
	asl
	clc
	adc rv
	tax
	lda #0
	adc rv+1
	tay
	clc
	rts
zahl	lda byte
	pha
	lda byte+1
	pha
	lda txtptr
	pha
	lda txtptr+1
	pha
	lda in
	sec
	sbc #1
	sta txtptr
	lda in+1
	sbc #0
	sta txtptr+1
	jsr chrgot
	jsr ascflt
	jsr round
	jsr integer
	lda txtptr+1
	sta in+1
	lda txtptr
	sta in
	pla
	sta txtptr+1
	pla
	sta txtptr
	ldx byte
	ldy byte+1
	pla
	sta byte+1
	pla
	sta byte
	sec
	rts
initptr	lda #0
	sta ptr1
	sta ptr2
	sta ptr3
	sta ptr4
	lda #$e0
	sta ptr1+1
	lda #$f0
	sta ptr2+1
	lda #$a0
	sta ptr3+1
	lda #$b0
	sta ptr4+1
	rts
gru1	lda ptr1
	clc
	adc #2
	sta ptr1
	lda ptr1+1
	adc #0
	sta ptr1+1
	lda ptr2
	clc
	adc #2
	sta ptr2
	lda ptr2+1
	adc #0
	sta ptr2+1
	rts
gru2	lda ptr3
	clc
	adc #2
	sta ptr3
	lda ptr3+1
	adc #0
	sta ptr3+1
	lda ptr4
	clc
	adc #2
	sta ptr4
	lda ptr4+1
	adc #0
	sta ptr4+1
	rts
down	lda in
	sec
	sbc #1
	sta in
	lda in+1
	sbc #0
	sta in+1
	rts
runst	lda #<t5
	ldy #>t5
	jsr strout
wait	jsr getkey
	cmp #"n"
	beq nein
	cmp #"j"
	bne wait
	lda #1
	sta brkflg
	rts
nein	lda #0
	sta brkflg
	rts
prolog	pha
	lda #<t7
	ldy #>t7
	jsr strout
	pla
	tax
	lda #0
	jsr axout
	jsr return
	ldx #8
	jmp errx
prot	lda #<t8
	ldy #>t8
	jsr strout
wiat	jsr getkey
	cmp #"n"
	beq na
	cmp #"j"
	bne wiat
	lda #1
	sta pro
	rts
na	lda #0
	sta pro
	rts
getterm	jsr get
	cmp #"#"
	beq base
	cmp #"&"
	beq random
	jmp gette
base	ldx byte
	ldy byte+1
	sec
	rts
random	ldx #<uhr
	ldy #>uhr
	clc
	rts
pseudo	jsr get
	cmp #"e"
	bne nxe
	jmp go2
nxe	cmp #"c"
	bne nxc
	lda #32
	jsr put
	lda #<return
	jsr put
	lda #>return
	jsr put
	jmp sea
nxc	cmp #"r"
	bne nxr
	lda #104
	jsr put
	jsr put
	jmp sea
nxr	ldx #9
	jmp errx
anfang	jsr getbase
	jsr initptr
	jsr runst
	jsr prot
	lda #<t4
	ldy #>t4
	jsr strout
	lda #76
	jsr put
	jsr put
	jsr put
	jsr copy
	jsr calc
	lda rc
	sta mem1
	lda rc+1
	sta mem1+1
	lda adr
	ldy adr+1
	sta rv
	sty rv+1
	ldy #5
	lda rv
	sec
	sbc #1
	sta (mem1),y
	iny
	lda rv+1
	sbc #0
	sta (mem1),y
	jsr fillvar
	ldy #1
	lda adr
	sta (byte),y
	sta ru
	iny
	lda adr+1
	sta (byte),y
	sta ru+1
	lda #32
	jsr put
	lda rc
	jsr put
	lda rc+1
	jsr put
	lda prg
	ldy prg+1
	sta in
	sty in+1
line	jsr down
	lda #255
	sta head
	jsr get
	beq prgok
	jmp prolog
prgok	jsr get
	sta nr
	jsr get
	bne l3
	lda nr
	bne l3
go2	lda #96
	jsr put
	jmp pass2
l3	jsr get
	sta nr
	jsr get
	sta nr+1
	lda pro
	beq spar
	lda #<t1
	ldy #>t1
	jsr strout
	ldx nr
	lda nr+1
	jsr axout
	jsr return
spar	ldy #0
	sty qflg
	sty head
	lda nr
	sta (ptr3),y
	iny
	lda nr+1
	sta (ptr3),y
	dey
	lda adr
	sta (ptr4),y
	iny
	lda adr+1
	sta (ptr4),y
	jsr gru2
	lda brkflg
	beq noo
	lda #32
	jsr put
	lda #<testop
	jsr put
	lda #>testop
	jsr put
noo	jsr get
	beq line
	cmp #";"
	bne q0
	jmp sea
q0	cmp #tsys
	bne qq1
	jsr getterm
	bcs zff
	lda #173
	jsr put
	txa
	jsr put
	tya
	jsr put
	inx
	bne z2224
	iny
z2224	lda #172
	jsr put
	txa
	jsr put
	tya
	jsr put
susi	jsr store
	lda #32
	jsr put
	lda #<sys
	jsr put
	lda #>sys
	jsr put
sea	jsr get
	bne sea
	jmp line
zff	lda #169
	jsr put
	txa
	jsr put
	lda #160
	jsr put
	tya
	jsr put
	jmp susi
store	lda #133
	jsr put
	lda #byte
	jsr put
	lda #132
	jsr put
	lda #byte+1
	jsr put
	rts
qq1	cmp #tend
	bne q2
	lda #76
	jsr put
	lda #<warm
	jsr put
	lda #>warm
	jsr put
	jmp sea
q2	cmp #tstop
	bne q3
	lda #56
	jsr put
	lda #76
	jsr put
	lda #<break
	jsr put
	lda #>break
	jsr put
	jmp sea
q3	cmp #tclr
	bne q4
	lda #32
	jsr put
	lda rc
	jsr put
	lda rc+1
	jsr put
	jmp sea
q4	cmp #trun
	bne q5
	lda #76
	jsr put
	lda ru
	jsr put
	lda ru+1
	jsr put
	jmp sea
q5	cmp #trem
	bne q6
	jmp sea
q6	cmp #tprint
	bne q7
	jsr get
	cmp #34
	beq qu
	jmp numerisch
q7	jmp qq7
qu	lda adr
	clc
	adc #10
	sta mem1
	lda adr+1
	adc #0
	sta mem2
	lda #169
	jsr put
	lda mem1
	jsr put
	lda #160
	jsr put
	lda mem2
	jsr put
	lda #32
	jsr put
	lda #<strout
	jsr put
	lda #>strout
	jsr put
	lda #76
	jsr put
	lda adr
	sta mem1
	lda adr+1
	sta mem2
	jsr put
	jsr put
holtxt	jsr get
	beq fin3
	cmp #34
	beq fin2
	jsr put
	jmp holtxt
fin	lda #0
	tay
	jsr put
	lda adr
	sta (mem1),y
	lda adr+1
	iny
	sta (mem1),y
	jmp line
fin2	jsr get
	beq fin3
	cmp #";"
	beq fin4
er4	ldx #4
	jmp errx
fin3	lda #13
	jsr put
	jmp fin
fin4	jsr get
	beq fin
	jmp er4
numerisch	jsr down
	jsr getterm
	bcc varia
	lda #162
	jsr put
	txa
	jsr put
	lda #169
	jsr put
	tya
	jsr put
l4	lda #32
	jsr put
	lda #<axout
	jsr put
	lda #>axout
	jsr put
	jmp testse
varia	lda #174
	jsr put
	txa
	jsr put
	tya
	jsr put
	inx
	bne z2435
	iny
z2435	lda #173
	jsr put
	txa
	jsr put
	tya
	jsr put
	jmp l4
testse	jsr get
	beq nosem
	cmp #";"
	bne eer4
	jsr get
	jmp line
nosem	lda #32
	jsr put
	lda #<return
	jsr put
	lda #>return
	jsr put
	jmp line
eer4	ldx #4
	jmp errx
qq7	cmp #tlet
	bne qq8
	jsr getterm
	bcc nolog
	ldx #5
	jmp errx
qq8	jmp q8
nolog	stx mem4
	sty mem5
	jsr get
	cmp #tgl
	beq z2511
	ldx #6
	jmp errx
z2511	jsr get
	cmp #tpeek
	bne z2512
	jmp lpeek
z2512	jsr down
	jsr getterm
	bcc vaiva
	lda #169
	jsr put
	txa
	jsr put
	lda #160
	jsr put
	tya
	jsr put
	jmp set2
setok	lda #141
	jsr put
	lda mem4
	jsr put
	lda mem5
	jsr put
	lda #140
	jsr put
	inc mem4
	bne l5
	inc mem5
l5	lda mem4
	jsr put
	lda mem5
	jsr put
	jmp sea
vaiva	lda #173
	jsr put
	txa
	jsr put
	tya
	jsr put
	lda #172
	jsr put
	inx
	bne l6
	iny
l6	txa
	jsr put
	tya
	jsr put
set2	jsr get
	cmp #tpl
	beq wei
	cmp #tmi
	beq wei
	cmp #tma
	beq wei
	cmp #tdu
	beq wei
	jsr down
	jmp setok
wei	sta mem3
	lda #133
	jsr put
	lda #mem1
	jsr put
	lda #132
	jsr put
	lda #mem2
	jsr put
	jsr getterm
	bcc para2v
	lda #169
	jsr put
	txa
	jsr put
	lda #160
	jsr put
	tya
	jsr put
	jmp weitso
para2v	lda #173
	jsr put
	txa
	jsr put
	tya
	jsr put
	inx
	bne po
	iny
po	lda #172
	jsr put
	txa
	jsr put
	tya
	jsr put
weitso	lda #133
	jsr put
	lda #mem3
	jsr put
	lda #132
	jsr put
	lda #mem3h
	jsr put
	lda mem3
	cmp #tpl
	bne mit
	lda ra
	ldy ra+1
	jmp se1
mit	cmp #tmi
	bne mat
	lda rs
	ldy rs+1
	jmp se1
mat	cmp #tma
	bne dut
	lda rm
	ldy rm+1
	jmp se1
dut	lda rd
	ldy rd+1
se1	pha
	lda #32
	jsr put
	pla
	jsr put
	tya
	jsr put
	lda #165
	jsr put
	lda #mem4
	jsr put
	lda #164
	jsr put
	lda #mem5
	jsr put
	jmp setok
q8	cmp #tpoke
	bne q9
	jsr getterm
	php
	stx mem4
	sty mem5
	jsr get
	cmp #","
	beq z2620
	ldx #6
	jmp errx
z2620	jsr getterm
	bcc pokvar
	cpy #0
	beq y0
	ldx #14
	jmp interr
y0	lda #169
	jsr put
	txa
	jsr put
	jmp l7
q9	jmp qq9
pokvar	lda #173
	jsr put
	txa
	jsr put
	tya
	jsr put
l7	plp
	bcc nachvar
	lda #141
	jsr put
	lda mem4
	jsr put
	lda mem5
	jsr put
	jmp sea
nachvar	lda #72
	jsr put
	lda #173
	jsr put
	lda mem4
	jsr put
	lda mem5
	jsr put
	inc mem4
	bne l8
	inc mem5
l8	lda #172
	jsr put
	lda mem4
	jsr put
	lda mem5
	jsr put
	lda #133
	jsr put
	lda #mem1
	jsr put
	lda #132
	jsr put
	lda #mem2
	jsr put
	lda #160
	jsr put
	lda #0
	jsr put
	lda #104
	jsr put
	lda #145
	jsr put
	lda #mem1
	jsr put
	jmp sea
qq9	cmp #tgoto
	bne qqa
	lda #76
	sta z2706+1
go	jsr getterm
	bcs z2706
	ldx #3
	jmp errx
qqa	jmp qa
z2706	lda #76
	jsr put
then	sty mem1
	ldy #0
	txa
	sta (ptr1),y
	lda mem1
	iny
	sta (ptr1),y
	dey
	lda adr
	sta (ptr2),y
	iny
	lda adr+1
	sta (ptr2),y
	jsr gru1
	jsr put
	jsr put
	jmp sea
lpeek	jsr get
	cmp #"("
	beq z2752
	ldx #6
	jmp errx
z2752	jsr getterm
	bcc peekv
	lda #160
	jsr put
	lda #0
	jsr put
	lda #173
	jsr put
	txa
	jsr put
	tya
	jsr put
	jmp setok
peekv	lda #173
	jsr put
	txa
	jsr put
	tya
	jsr put
	inx
	bne z2764
	iny
z2764	lda #172
	jsr put
	txa
	jsr put
	tya
	jsr put
	lda #133
	jsr put
	lda #mem1
	jsr put
	lda #132
	jsr put
	lda #mem2
	jsr put
	lda #160
	jsr put
	lda #0
	jsr put
	lda #177
	jsr put
	lda #mem1
	jsr put
	jmp setok
qa	cmp #"."
	bne qb
	jmp pseudo
qb	cmp #tgosub
	bne qc
	lda #32
	sta z2706+1
	jmp go
qc	jmp qqc
klei	lda #173
	jsr put
	lda mem1
	jsr put
	lda mem2
	jsr put
	inc mem1
	bne z2824
	inc mem2
z2824	lda #172
	jsr put
	lda mem1
	jsr put
	lda mem2
	jsr put
	jsr getterm
	php
	pla
	and #1
	sta mem3
	beq z2829
	lda #192
	jsr put
	tya
	jsr put
	jmp z2832
z2829	stx mem1
	sty mem2
	inx
	bne z2830
	iny
z2830	lda #204
	jsr put
	txa
	jsr put
	tya
	jsr put
z2832	lda #144
	jsr put
	lda #1
	sec
	sbc mem3
	clc
	adc #6
	jsr put
	lda #208
	jsr put
	lda #1
	sec
	sbc mem3
	clc
	adc #7
	jsr put
	lda mem3
	beq z2840
	lda #201
	jsr put
	txa
	jsr put
	jmp z2842
z2840	lda #205
	jsr put
	lda mem1
	jsr put
	lda mem2
	jsr put
z2842	lda #176
	jsr put
	lda #3
	jsr put
	jmp tete
gros	lda #173
	jsr put
	lda mem1
	jsr put
	lda mem2
	jsr put
	inc mem1
	bne z2854
	inc mem2
z2854	lda #172
	jsr put
	lda mem1
	jsr put
	lda mem2
	jsr put
	jsr getterm
	php
	pla
	and #1
	sta mem3
	beq z2859
	lda #192
	jsr put
	tya
	jsr put
	jmp z2862
z2859	stx mem1
	sty mem2
	inx
	bne z2860
	iny
z2860	lda #204
	jsr put
	txa
	jsr put
	tya
	jsr put
z2862	lda #144
	jsr put
	lda #1
	sec
	sbc mem3
	clc
	adc #11
	jsr put
	lda #208
	jsr put
	lda #1
	sec
	sbc mem3
	clc
	adc #6
	jsr put
	lda mem3
	beq z2870
	lda #201
	jsr put
	txa
	jsr put
	jmp z2872
z2870	lda #205
	jsr put
	lda mem1
	jsr put
	lda mem2
	jsr put
z2872	lda #144
	jsr put
	lda #5
	jsr put
	lda #240
	jsr put
	lda #3
	jsr put
	jmp tete
qqc	cmp #tif
	bne qd
	jsr getterm
	bcc ifok
	ldx #3
	jmp errx
qd	jmp qqd
ifok	stx mem1
	sty mem2
	jsr get
	cmp #tgl
	beq z2930
	cmp #tkle
	beq klein
	cmp #tgro
	beq gross
	ldx #6
	jmp errx
klein	jmp klei
gross	jmp gros
z2930	lda #173
	jsr put
	lda mem1
	jsr put
	lda mem2
	jsr put
	lda #172
	jsr put
	inc mem1
	bne z2942
	inc mem2
z2942	lda mem1
	jsr put
	lda mem2
	jsr put
	jsr getterm
	php
	pla
	and #1
	sta mem3
	beq z2950
	lda #201
	jsr put
	txa
	jsr put
	jmp z2955
z2950	lda #205
	jsr put
	txa
	jsr put
	tya
	jsr put
z2955	lda #208
	jsr put
	lda #1
	sec
	sbc mem3
	clc
	adc #7
	jsr put
	lda mem3
	beq z2962
	lda #192
	jsr put
	tya
	jsr put
	jmp z2965
z2962	lda #204
	jsr put
	inx
	bne z2964
	iny
z2964	txa
	jsr put
	tya
	jsr put
z2965	lda #208
	jsr put
	lda #3
	jsr put
tete	lda #76
	jsr put
	jsr get
	cmp #tthen
	beq z2972
	ldx #6
	jmp errx
z2972	jsr getterm
	bcs z2974
	ldx #3
	jmp errx
z2974	jmp then
qqd	cmp #treturn
	bne qe
	lda #96
	jsr put
	jmp sea
qe	nop
	cmp #128
	bcc igv
	cmp #$cc
	bcs igv
	ldx #2
	jmp errx
igv	ldx #1
	jmp errx
pass2	lda #<t2
	ldy #>t2
	jsr strout
	lda #53
	sei
	sta konf
	lda ptr1
	sta mem1
	lda ptr1+1
	sta mem2
	lda ptr3
	sta mem3
	lda ptr3+1
	sta mem4
	jsr initptr
online	lda ptr1
	cmp mem1
	bcc z10050
	lda ptr1+1
	cmp mem2
	bcc z10050
	lda #55
	sta konf
	cli
	jmp last
z10050	ldy #0
	lda (ptr1),y
	sta nr
	iny
	lda (ptr1),y
	sta nr+1
	lda pro
	beq suchz
	lda #55
	sta konf
	cli
	lda #<t3
	ldy #>t3
	jsr strout
	ldx nr
	lda nr+1
	jsr axout
	jsr return
	lda #53
	sei
	sta konf
suchz	lda ptr3
	cmp mem3
	bcc z10065
	lda ptr3+1
	cmp mem4
	bcc z10065
	lda #55
	sta konf
	cli
	ldx #7
	jmp errx
z10065	ldy #0
	lda (ptr3),y
	cmp nr
	beq wtr
z10070	jsr gru2
	jmp suchz
wtr	iny
	lda (ptr3),y
	cmp nr+1
	bne z10070
	ldy #0
	lda (ptr2),y
	sta nr
	iny
	lda (ptr2),y
	sta nr+1
	ldy #0
	lda (ptr4),y
	sta (nr),y
	sta 6
	iny
	lda (ptr4),y
	sta (nr),y
	sta 143
	jsr gru1
	lda #0
	sta ptr3
	sta ptr4
	lda #$a0
	sta ptr3+1
	lda #$b0
	sta ptr4+1
	jmp online
last	lda #<t6
	ldy #>t6
	jsr strout
	lda adr
	sec
	sbc #1
	tax
	lda adr+1
	sbc #0
	jsr axout
	jmp return
