;:sys36864
	;.opt oo
; sys 49152,text$,farbe,modus,zeilenlaenge,speed
; modus funkt
;   1   mit verzoeg
;   2   wordwarp
;   4   blocksatz
;   8   mit sound
;  16   zentriert
; 32   rueckwaerts
; 64   return am ende
; sys 49155, ... (wie oben) puffer leeren
; falls farbe = 255, keine fa. aenderung
; falls speed = 0, keine verzoeg
	*= $c000
hunt	jmp textout
	jmp wartleer
	lda #0
	sta flag
	rts
getx	=$b7f1
print	=$ffd2
frmevl	=$ad9e
frestr	=$b6a3
stradr	=$22
komma	=$aefd
farb	=646
err	=$a445
sid	=$d400
tmp	=2
stop	=$a82c
latch	=$cf00
spalte	=211
setcr	=58732
axout	=$bdcd
latch2	=$ce00
return	=$aad7
buffer	=$cd00
bdata	=$a8f8
ptr	=122
mod	.byt 0
speed	.byt 0
reallg	.byt 0
lenght	.byt 0
temp	.byt 0
maxlen	.byt 0
mark	.byt 0
last	.byt 0
flag	.byt 0
merk1	.byt 0
merk2	.byt 0
errtab	.word e0,e1,e2,e3,e4
e0	.byte "colourcodE"
e1	.byte "modE"
e2	.byte "screenlenghT"
e3	.byte "center positioN"
e4	.byte "buffer overfloW"
pause	lda mod
	and #1
	beq nopaus
	ldx speed
	beq nopaus
	ldy #255
px	dey
	nop
	bne px
	dex
	bne px
nopaus	rts
setptr	lda stradr
	sta tmp
	lda stradr+1
	sta tmp+1
	rts
real	ldy #0
	sty reallg
l1	cpy lenght
	bcs nopaus
	lda (tmp),y
	cmp #32
	bcc nein
	cmp #128
	bcc ja
	cmp #149
	bcc nein
	cmp #156
	bcc ja
	cmp #160
	bcs ja
nein	cmp #157
	beq rueck
	cmp #20
	beq rueck
	iny
	bne l1
ja	inc reallg
	bne nein
rueck	dec reallg
	iny
	bne l1
sound	lda mod
	and #8
	beq nopaus
	jsr sidmake
	ldx #0
	ldy #10
waso	dex
	bne waso
	dey
	bne waso
	lda #0
	sta sid+24
	rts
sidmake	lda #0
	ldx #24
sim	sta sid,x
	dex
	bpl sim
	lda #200
	sta sid+1
	lda #9
	sta sid+5
	lda #240
	sta sid+6
	lda #6
	sta sid+3
	lda #65
	sta sid+4
	lda #30
	sta sid+24
	rts
errx	txa
	asl
	tax
	lda errtab,x
	sta stradr
	lda errtab+1,x
	jmp err
illfa	ldx #0
	beq errx
textout	jsr komma
	jsr frmevl
	jsr frestr
	sta lenght
	jsr setptr
	jsr nochwas
nodat	jsr real
	jsr getx
	inx
	beq nofb
	dex
	cpx #16
	bcs illfa
	stx farb
nofb	jsr getx
	cpx #128
	bcc modok
	ldx #1
	bne er
modok	stx mod
	jsr getx
	stx maxlen
	lda mod
	and #22
	beq nosp
	lda maxlen
	cmp #41
	bcc nosp
	ldx #2
er	jmp errx
nosp	jsr getx
	stx speed
	lda lenght
	beq fin
	jsr setlat
	jsr rueckvor
	ldy #0
out	sty temp
	lda (tmp),y
	jsr print
	jsr stop
	jsr sound
	jsr pause
	ldy temp
	iny
	cpy lenght
	bcc out
	lda mod
	and #64
	beq fin
	jsr return
fin	rts
setlat	lda mod
	and #22
	bne achtung
	rts
achtung	jsr tolatch
	lda mod
	and #16
	beq nocenter
ce	lda maxlen
	sec
	sbc reallg
	lsr
	clc
	adc spalte
	cmp #80
	bcs i
	sta spalte
	jmp setcr
i	ldx #3
	jmp errx
nocenter	lda mod
	and #2
	beq blocks
	ldy maxlen
	cpy lenght
	bcs blocks
suchspac	lda (tmp),y
	cmp #" "
	beq leerz
	cpy #0
	beq blocks
	dey
	jmp suchspac
leerz	tya
	pha
	ldx #0
	iny
tobuf	lda (tmp),y
	sta buffer,x
	inx
	beq buv
	iny
	cpy lenght
	bcc tobuf
	stx flag
	pla
	tay
	sty lenght
	jsr real
	jmp blocks
buv	ldx #4
	jmp errx
blocks	lda mod
	and #4
	beq noblock
	jsr kuerz
	lda lenght
	lsr
	sta last
blo	lda lenght
	cmp maxlen
	bcs noblock
	jsr suchleer
	bcc cen
	jsr insy
	jmp blo
cen	jmp ce
noblock	rts
rueckvor	lda mod
	and #32
	beq nospi
	lda lenght
	beq nospi
	jsr tolatch
	ldy #0
	ldx lenght
	dex
spi	lda (tmp),y
	sta latch2,x
	cpx #0
	beq spiend
	dex
	iny
	bne spi
spiend	ldy lenght
rue	dey
	lda latch2,y
	sta (tmp),y
	cpy #0
	bne rue
nospi	rts
tolatch	ldy #0
tl	lda (tmp),y
	sta latch,y
	dey
	bne tl
	lda #<latch
	ldy #>latch
	sta tmp
	sty tmp+1
	rts
insy	sty mark
	ldx #255
insert	lda latch-1,x
	sta latch,x
	dex
	cpx mark
	bne insert
	lda #" "
	sta latch,x
	inc lenght
	beq over
	inc reallg
	rts
over	jmp buv
kuerz	ldy lenght
krz	cpy #0
	beq kuend
	dey
	lda (tmp),y
	cmp #" "
	bne kuend
	dec lenght
	jmp krz
kuend	lda lenght
	cmp #0
	bne kok
	pla
	pla
	pla
	pla
	rts
kok	rts
suchleer	ldy last
sule	iny
	cpy lenght
	bcc nonu
	ldy #0
	inc last
nonu	cpy last
	bne nochok
	clc
	rts
nochok	lda (tmp),y
	cmp #" "
	bne sule
	iny
	sty last
	dey
	sec
rt	rts
nochwas	lda flag
	beq rt
	pha
	jsr tolatch
	pla
	clc
	adc #1
ph	pha
	ldy #0
	jsr insy
	pla
	sec
	sbc #1
	bne ph
en	ldy #0
bufto	lda buffer,y
	sta (tmp),y
	iny
	cpy flag
	bcc bufto
	ldy #0
	sty flag
	rts
wartleer	lda ptr
	sta merk1
	lda ptr+1
	sta merk2
leeren	lda flag
	beq leer
	lda merk1
	sta ptr
	lda merk2
	sta ptr+1
	jsr hunt
	jmp leeren
leer	jmp bdata
	.end
	end
