;:sys9*4096
	;.opt p,oo
;
;
; super bildschirmeditor
;
;
irqvek	= $314
sflag	= $28d
strout	= $ab1e
scrup	= $e8ea
bshift	= $a3bf
clrline	= 59903
key	= $c5
vic	= 53248
vicctrl	= vic + 17
farb	= 646
farb1	= vic+32
farb2	= farb1+1
shift	= %1
cbm	= %10
ctrl	= %100
f1	= 4
f3	= 5
f5	= 6
f7	= 3
temp	= 2
zeile	= 214
spalte	= 211
setcr	= 58732
linlatch	= 828
temp2	= 4
prgstrt	= $2b
prgend	= $2d
clr	= $e544
axout2	= $bdcd
return	= $aad7
datlin	= $3f
stolin	= $3b
prglin	= $39
garbcol	= $b526
straf	= $33
varen	= $31
o	= 38
d	= 18
i	= 33
;
	*= $c000
;
;
jumpin	lda irqvek+1
	cmp #> newirq
	beq ready
	sta oldir+2
	lda irqvek
	sta oldir+1
	lda #< newirq
	ldy #> newirq
	sei
	sta irqvek
	sty irqvek+1
	cli
	lda #< msg
	ldy #> msg
	jsr strout
	lda #0
	sta farb1
	sta farb2
	lda #13
	sta farb
ready	rts
keytmp	.byt 0
flagtmp	.byt 0
msg	.byte "editor on"
	.byt 0
newirq	jsr irq
oldir	jmp $0000
blank	lda vicctrl
	eor #16
	sta vicctrl
	rts
leave	lda oldir+1
	ldy oldir+2
	sei
	sta irqvek
	sty irqvek+1
	cli
	rts
irq	lda key
	cmp keytmp
	bne new
	rts
new	sta keytmp
	lda sflag
	sta flagtmp
	lda key
	cmp #f1
	bne g1
	lda flagtmp
	bne g12
	jmp scrup
g12	and #shift
	bne scrdwn
g13	lda flagtmp
	and #cbm
	bne fill
g14	lda flagtmp
	and #ctrl
	beq wrongf1
	jmp blank
wrongf1	rts
scrdwn	lda #< 1024
	ldy #> 1024
	sta 95
	sty 96
	lda #< 2023
	ldy #> 2023
	sta 88
	sty 89
	lda #< 1983
	ldy #> 1983
	sta 90
	sty 91
	jsr bshift
	jsr fill
	ldx #0
	jmp clrline
fill	lda #< 55296
	ldy #> 55296
	sta temp
	sty temp+1
	ldx #4
	lda farb
	ldy #0
filllp	sta (temp),y
	dey
	bne filllp
	inc temp+1
	dex
	bne filllp
	rts
g1	jmp g1s
table	.word 1024
	.word 1064
	.word 1104
	.word 1144
	.word 1184
	.word 1224
	.byt $f0, $04
	.word 1304
	.word 1344
	.word 1384
	.word 1424
	.word 1464
	.word 1504
	.word 1544
	.word 1584
	.word 1624
	.word 1664
	.word 1704
	.word 1744
	.word 1784
	.word 1824
	.word 1864
	.word 1904
	.word 1944
	.word 1984
zeilx	txa
	asl
	tay
	lda table,y
	sta temp
	iny
	lda table,y
	sta temp+1
	rts
calclin	ldx zeile
	jmp zeilx
dellin	ldx zeile
	jmp clrline
g1s	cmp #f3
	bne g2
	lda flagtmp
	bne g21
	jmp dellin
g21	and #shift
	bne savlin
	lda flagtmp
	and #cbm
	bne getlin
	lda flagtmp
	and #ctrl
	beq wro
	jmp leave
wro	rts
savlin	jsr calclin
	ldy #39
savelp	lda (temp),y
	sta linlatch,y
	dey
	bpl savelp
	rts
getlin	jsr calclin
	ldy #39
getlp	lda linlatch,y
	sta (temp),y
	dey
	bpl getlp
	jmp fill
gtop	lda #0
	sta zeile
	sta spalte
	jmp setcr
gbot	lda #0
	sta spalte
	lda #24
	sta zeile
	jmp setcr
golef	lda #0
workgo	sta spalte
	jmp setcr
gorig	lda #39
	jmp workgo
g2	cmp #f7
	bne g3
	lda flagtmp
	beq gtop
	and #shift
	bne gbot
	lda flagtmp
	and #cbm
	bne golef
	lda flagtmp
	and #ctrl
	bne gorig
	rts
g3	cmp #f5
	bne other
	lda flagtmp
	beq begin
	and #shift
	bne ende
	lda flagtmp
	and #cbm
	bne copy
	lda flagtmp
	and #ctrl
	bne del
none	rts
other	jmp other2
line1	.byt 0
line2	.byt 0
sort	lda line2
	cmp line1
	bcs none
	ldx line1
	sta line1
	stx line2
	rts
begin	lda zeile
	sta line1
	jmp sort
ende	lda zeile
	sta line2
	jmp sort
del	ldx line1
dlop	cpx line2
	beq weiter
	bcc weiter
	rts
weiter	jsr clrline
	inx
	jmp dlop
ctemp1	.byt 0
ctemp2	.byt 0
copy	lda zeile
	sta ctemp1
	lda line1
	sta ctemp2
coplop	lda ctemp1
	cmp #25
	bcc l9
	jmp fill
l9	ldx ctemp2
	jsr zeilx
	lda temp
	sta temp2
	lda temp+1
	sta temp2+1
	ldx ctemp1
	jsr zeilx
	ldy #39
l8	lda (temp2),y
	sta (temp),y
	dey
	bpl l8
	inc ctemp1
	inc ctemp2
	lda ctemp2
	cmp line2
	bcc coplop
	beq coplop
	jmp fill
renew	lda prgstrt
	ldy prgstrt+1
	sta temp
	sty temp+1
	ldy #3
null	iny
	lda (temp),y
	bne null
	iny
	tya
	tya
	clc
	adc temp
	ldy #0
	sta (prgstrt),y
	lda temp+1
	adc #0
	iny
	sta (prgstrt),y
	dey
t0	ldx #3
tdrei0	inc temp
	bne low
	inc temp +1
low	lda (temp),y
	bne t0
	dex
	bne tdrei0
	lda temp
	clc
	adc #2
	sta prgend
	lda temp+1
	adc #0
	sta prgend+1
	lda #< rok
	ldy #> rok
	jmp strout
rok	.byte "renew ok"
	.byt 13, 0
data	jsr clr
	lda #< t1
	ldy #> t1
	jsr strout
	lda #< t2
	ldy #> t2
	jsr strout
	ldx prglin
	lda prglin+1
	jsr axout
	lda #< t3
	ldy #> t3
	jsr strout
	ldx stolin
	lda stolin+1
	jsr axout
	lda #< t4
	ldy #> t4
	jsr strout
	ldx datlin
	lda datlin+1
	jsr axout
	lda #< t5
	ldy #> t5
	jsr strout
	sec
	lda straf
	sbc varen
	tax
	lda straf+1
	sbc varen+1
axout	jsr axout2
	jmp return
t1	.byte "current basic datas:"
	.byt 13, 0
t2	.byt 13
	.byte "program line: "
	.byt 0
t3	.byt 1
	.byte "break line:   "
	.byt 0
t4	.byt 1
	.byte "data line:    "
	.byt 0
t5	.byt 1
	.byte "free memory:  "
	.byt 0
intmp	.byt 0
insline	lda #24
	sta intmp
ins	ldx intmp
	cpx zeile
	beq n1
	bcs n2
n1	jsr clrline
	jmp fill
n2	jsr zeilx
	lda temp
	sec
	sbc #40
	sta temp2
	lda temp+1
	sbc #0
	sta temp2+1
	ldy #39
mm	lda (temp2),y
	sta (temp),y
	dey
	bpl mm
	dec intmp
	jmp ins
other2	lda flagtmp
	and #ctrl
	bne mmm
	rts
mmm	lda key
	cmp #o
	beq renew2
	cmp #d
	beq data2
	cmp #i
	beq insline
	rts
renew2	jmp renew
data2	jmp data
	.end
