;:sys36864
	*= $c000
	;.opt oo
vic	=$d000
tmp	=166
anfang	=168
text	=$4000
setnam	=65469
setpar	=65466
load	=65493
shift	=657
look	=2092
bsout	=65490
clrscr	=$e544
basic	=157
font	=14336
key	=198
tend	=text+11800
crscol	=646
quote	=212
get	=65508
crs1	=204
crs2	=205
crs3	=207
insert	=216
reset	=64738
sid	=54272
keybuf	=631
return	=$aad7
cint	=65409
sprite	=704
sprptr	=2040
oldirq	=$ea31
irqvec	=788
konf	=1
chars	=53632
numspr	=sprite+24
keyrep	=650
input	=$ffcf
name	=820
iecin	=$ffa5
sa	=$b9
talk	=$ffb4
sectalk	=$ff96
untalk	=$ffab
open	=$ffc0
close	=$ffc3
clrchn	=$ffcc
chkout	=$ffc9
test1	=2049
test2	=2051
test3	=2057
test4	=2076
zeile	=214
spalte	=211
tmp2	=247
fac	=$62
intflt	=$bc49
space	=$ab3f
facarg	=$bc0c
div	=$bb12
facout	=$bdd7
fac10	=$bae2
	jmp begin
title	.byte "\x93\x08\x9aN\x19&\xb7M\xb4\x19\x08 \x9ethe message-maker v1.0\x19\x08 \x9a\xaa"
	.byte "\xb4\x19\x03 \x9ewritten by nicki heusler  240987\x19\x03 \x9a\xaa"
	.byte "\xb4\x19\x05 \x9ea nss programm - [c] nss '87\x19\x05 \x9a\xaaM\x19&\xafN\x11\x03"
disk	.byte "\x18N\x19&\xb7M\xb4\x19\x09 \x9einsert  systemdisk !\x19\x09 \x9a\xaa"
	.byte "M\x19&\xafN\x03"
men	.byte "\x18N\x19&\xb7M\xb4\x19\x0e \x9emain-menu:\x19\x0e \x9a\xaa"
	.byte "\xb4  \x9e (f1) write message\x19\x11 \x9a\xaa"
	.byte "\xb4  \x9e (f3) quit\x19\x1a \x9a\xaa"
	.byte "\xb4  \x9e (f5) help\x19\x1a \x9a\xaa"
	.byte "M\x19&\xafN\x03"
help	.byte "\x93N\x19&\xb7M\xb4\x9e editorfunctions:\x19\x15 \x9a\xaa"
	.byte "\xb4\x19& \xaa\xb4 \x9epress (f1), then press:\x19\x0e \x9a\xaa\xb4\x19& \xaa"
	.byte "\xb4\x9e\x19\x04 s: show message\x19\x13 \x9a\xaa"
	.byte "\xb4\x9e\x19\x04 a: abort\x19\x1a \x9a\xaa"
	.byte "\xb4\x9e\x19\x04 stop: return\x19\x16 \x9a\xaa"
	.byte "\xb4\x9e\x19\x04 1: change frame\x19\x13 \x9a\xaa"
	.byte "\xb4\x9e\x19\x04 2: change background\x19\x0e \x9a\xaa"
	.byte "\xb4\x9e\x19\x04 _: save message\x19\x13 \x9a\xaa"
	.byte "\xb4\x9e\x19\x04 v: set new speed\x19\x12 \x9a\xaa"
	.byte "\xb4\x9e\x19\x04 p: pause\x19\x1a \x9a\xaa"
	.byte "\xb4\x9e\x19\x04 k: wait for a key\x19\x11 \x9a\xaa"
	.byte "\xb4\x9e\x19\x04 d: delete last 10 chars\x19\x0b \x9a\xaa"
	.byte "\xb4\x9e\x19\x04 *: set start/end for repeat\x19\x07 \x9a\xaa"
	.byte "\xb4\x9e\x19\x04 =: store/recall cursor-position\x19\x03 \x9a\xaa"
	.byte "M\x19&\xafN\x03"
endtxt	.byte "\x18N\x19&\xb7M\xb4\x9ewhat now ?\x19\x1c \x9a\xaa"
	.byte "\xb4  \x9e (f1) save message to disk\x19\x0a \x9a\xaa"
	.byte "\xb4  \x9e (f3) show message, then continue\x19\x03 \x9a\xaa"
	.byte "\xb4\x19\x08 \x9eediting\x19\x17 \x9a\xaa"
	.byte "M\x19&\xafN\x03"
endtxt2	.byte "\x19\x05\x91\x19\x06\x1d\x9ethen ?\x1a"
	.byte "\x19\x09\x1dreset\x19\x0f \x1a"
	.byte "\x91\x19\x09\x1drestart message\x19\x0c \x1a"
	.byte "\x19\x04\x1d(f5) 'ready.'\x03"
namtxt	.byte "\x1a\x1efilename ? \x03"
diskerr	.byte "\x11\x1a\x96\x12error\x92: \x03"
paktxt	.byte "\x18N\x19&\xb7M\xb4\x9epackage...\x19\x1c \x9a\xaaM\x19&\xafN\x91\x19\x1c\x9d\x05\x03"
file1	.byte "mess.kopf"
file2	.byte "mess.font"
menchr	.byte "\x03s12kd_vap*="
menadr	.word back,show,frame,hign,press,del10,saveit
	.word veloc,abort,pause,point,cursor
zsin	brk
speed	brk
spd	brk
stelle	brk
zif	brk
acht	brk
raru	.byt 1
delay	.byt 1
old	brk
ende	.word 0
kopfend	.word 0
ldflag	brk
startend	brk
times	brk
merkzeil	brk
merkspal	brk
oldlen	brk
endneu	.word 0
sprtab	.byt %00010011,%00111011,%10110000
	.byt %00101010,%10100010,%00101000
	.byt %00100010,%10100010,%00101000
	.byt %00010011,%00110011,%10101000
	.byt %00001010,%00100010,%00101000
	.byt %00101010,%00100010,%00101000
	.byt %00010010,%00111011,%10110000
zeher	.byt 100,10,1
raufru	.byt 12,15,1,15,12,11
sures	.byt %00010010,%10110011,%10110000
	.byt %00101010,%10101010,%00001000
	.byt %00100010,%10101010,%00001000
	.byt %00010010,%10110011,%00010000
	.byt %00001010,%10110010,%00010000
	.byt %00101010,%10101010,%00000000
	.byt %00010001,%00101011,%10010000
erga	.byte "w,p,"
sers	.byt %01001110,%11001110,%11100100
	.byt %10101000,%10100100,%10001010
	.byt %10001000,%10100100,%10001000
	.byt %01001100,%11000100,%11000100
	.byt %00101000,%11000100,%10000010
	.byt %10101000,%10100100,%10001010
	.byt %01001110,%10101110,%11100100
lentab	.byt 0,0,1,1,1,2,0,1,0,0,0
begin	jsr cint
	jsr setmob
	lda #0
	sta vic+32
	sta vic+33
	sta basic
	sta ldflag
	ldx #24
clrsid	sta sid,x
	dex
	bpl clrsid
	lda zsin
	bne drin
	inc zsin
	lda #<disk
	ldy #>disk
	jsr strout
	jsr waitkey
	ldx #8
	ldy #0
	jsr setpar
	lda #9
	ldx #<file2
	ldy #>file2
	jsr setnam
	lda #0
	tax
	ldy #>font
	jsr load
	inc ldflag
drin	clc
	lda test1
	adc test2
	adc test3
	adc test4
	cmp #54
	beq meme
	lda ldflag
	bne dirload
	lda #<disk
	ldy #>disk
	jsr strout
	jsr waitkey
dirload	ldx #8
	ldy #1
	jsr setpar
	lda #9
	ldx #<file1
	ldy #>file1
	jsr setnam
	lda #0
	sta ldflag
	jsr load
	stx kopfend
	sty kopfend+1
	jmp drin
meme	lda #<men
	ldy #>men
	jsr strout
getmen	jsr get
	beq getmen
	cmp #"\x85"
	beq start
	cmp #"\x86"
	bne weiter
	jmp reset
weiter	cmp #"\x87"
	bne getmen
	lda #<help
	ldy #>help
	jsr strout
	jsr waitkey
	jmp meme
start	lda #<text
	ldy #>text
	sta tmp
	sty tmp+1
	lda #31
	sta vic+24
	lda #11
	sta vic+32
	sta vic+33
	pha
	pha
	jsr nullput
	lda #3
	jsr put
	pla
	jsr put
	jsr nullput
	lda #4
	jsr put
	pla
	jsr put
	lda #"\x9e"
	jsr bsout
	jsr put
	jsr return
	jsr clrscr
	lda #50
	sta speed
	ldx #0
	stx startend
	dex
	stx merkzeil
main	jsr crsan
wak	jsr get
	beq wak
	jsr crsof
	cmp #"\x85"
	beq menue
	cmp #5
	beq ok
	cmp #13
	beq ok
	cmp #17
	bcc main
	cmp #21
	bcc ok
	cmp #28
	bcc main
	cmp #128
	bcc ok
	cmp #141
	beq ok
	cmp #129
	beq ok
	cmp #144
	bcc main
ok	pha
	jsr put
	pla
	jsr bsout
	lda #0
	sta quote
	sta insert
	beq main
menue	jsr tonan
getm	jsr get
	beq getm
	ldx #menadr-menchr-1
suchm	cmp menchr,x
	beq found
	dex
	bpl suchm
	bmi getm
found	txa
	asl
	tax
	lda menadr,x
	sta goto+1
	lda menadr+1,x
	sta goto+2
	jsr tonaus
goto	jsr 0
	jmp main
press	jsr nullput
	lda #10
	bne qput
show	lda #<text
	ldy #>text
	sta anfang
	sty anfang+1
	lda tmp
	pha
	lda tmp+1
	pha
	jsr nullput
	lda #9
	jsr put
	lda #31
	sta vic+24
	jsr look
	pla
	sta tmp+1
	pla
	sta tmp
back	rts
frame	inc vic+32
	jsr nullput
	lda #3
	jsr put
	lda vic+32
	bne qput
hign	inc vic+33
	jsr nullput
	lda #4
	jsr put
	lda vic+33
qput	jmp put
del10	ldx #10
	stx key
	lda #20
dl10	sta keybuf-1,x
	dex
	bpl dl10
	rts
saveit	lda #21
	sta vic+24
	lda #<endtxt
	ldy #>endtxt
	jsr strout
	lda #0
	sta vic+32
	sta vic+33
emen	jsr get
	cmp #"\x86"
	beq show
	cmp #"\x85"
	bne emen
	jmp savecont
veloc	jsr clrspr
setspr	lda sprtab,x
	sta sprite,x
	dex
	bpl setspr
	lda speed
	sta old
spdlop	lda #0
	sec
	sbc speed
	jsr numout
spdkay	jsr get
	cmp #13
	bne nocer
	dec vic+21
	lda speed
	cmp old
	bne neu
	rts
neu	jsr nullput
	lda #2
	jsr put
	lda speed
	jmp put
nocer	cmp #"\x9d"
	beq up
	cmp #"\x11"
	beq up
	cmp #"\x1d"
	bne spdkay
	lda speed
	cmp #2
	bcc gross
	dec speed
	bne spdlop
gross	lda #-1
	sta speed
	bne spdlop
up	inc speed
	bne spdlop
	beq up
abort	jsr clrspr
setspr2	lda sures,x
	sta sprite,x
	dex
	bpl setspr2
	jsr getjn
	php
	dec vic+21
	plp
	bcs jaa
	rts
jaa	pla
	pla
	jmp begin
pause	jsr nullput
	lda #8
	jmp put
point	lda startend
	bne zwei
	inc startend
	jsr nullput
	lda #6
	jmp put
zwei	dec startend
	jsr clrspr
setspr3	lda sers,x
	sta sprite,x
	dex
	bpl setspr3
	lda #2
	sta times
replop	lda times
	jsr numout
repkay	jsr get
	cmp #13
	beq cer
	cmp #"\x1d"
	beq plus
	cmp #"\x9d"
	beq minus
	cmp #"\x91"
	bne repkay
minus	ldx times
	cpx #3
	bcs min2
	ldx #0
min2	dex
	stx times
	jmp replop
plus	inc times
	bne replop
	inc times
	bne plus
cer	dec vic+21
	jsr nullput
	lda #7
	jsr put
	lda times
	jmp put
cursor	lda merkzeil
	bpl satschon
	lda zeile
	sta merkzeil
	lda spalte
	sta merkspal
	rts
satschon	lda #"\x13"
	jsr putout
lo1	lda spalte
	cmp merkspal
	beq lo2
	lda #"\x1d"
	jsr putout
	jmp lo1
lo2	lda zeile
	cmp merkzeil
	beq lo3
	lda #"\x11"
	jsr putout
	jmp lo2
lo3	lda #-1
	sta merkzeil
	rts
strout	tax
	lda tmp
	pha
	lda tmp+1
	pha
	stx tmp
	sty tmp+1
so	ldy #0
	lda (tmp),y
	cmp #"\x03"
	bne nostop
	pla
	sta tmp+1
	pla
	sta tmp
	rts
nostop	cmp #"\x1a"
	bne nocr
	lda #13
nocr	cmp #"\x19"
	beq repeat
	cmp #"\x18"
	beq tit
	jsr bsout
cont	inc tmp
	bne so
carry	inc tmp+1
	bne so
repeat	iny
	lda (tmp),y
	tax
	iny
	lda (tmp),y
rep	jsr bsout
	dex
	bne rep
	lda tmp
	clc
	adc #3
	sta tmp
	bcc so
	bcs carry
tit	jsr clrscr
	lda #<title
	ldy #>title
	jsr strout
	jmp cont
waitkey	lda #0
	sta key
wk	cmp key
	beq wk
	sta key
	rts
getc	ldy #0
	lda (tmp),y
	.byt $2c
nullput	lda #0
put	ldy #0
	sta (tmp),y
incr	inc tmp
	bne ru
	inc tmp+1
ru	rts
putout	jsr bsout
	bcc put
get2	ldy #0
	lda (tmp2),y
	inc tmp2
	bne ru
	inc tmp2+1
	rts
clrspr	ldx #63
	lda #1
	sta vic+21
	lda #0
clrsp	sta sprite,x
	dex
	bne clrsp
	ldx #20
	rts
crsan	ldx #0
	stx crs1
	rts
crsof	ldx #2
	stx crs2
wc	ldx crs3
	bne wc
	inc crs1
	rts
tonan	lda #15
	sta sid+24
	lda #200
	sta sid+1
	lda #9
	sta sid+5
	lda #240
	sta sid+6
	lda #17
	sta sid+4
	rts
tonaus	lda #0
	sta sid+4
	rts
numout	ldx #0
	sta spd
	lda #51
	sei
	sta konf
lop10	lda #0
	sta zif
	lda spd
lop11	cmp zeher,x
	bcc lop12
	sbc zeher,x
	inc zif
	bne lop11
lop12	sta spd
	stx stelle
	lda zif
	asl
	asl
	asl
	tay
	lda #8
	sta acht
lop13	lda chars,y
	sta numspr,x
	inx
	inx
	inx
	iny
	dec acht
	bne lop13
	ldx stelle
	inx
	cpx #3
	bcc lop10
	lda #55
	sta konf
	cli
	rts
setmob	sei
	lda #<mobirq
	ldy #>mobirq
	sta irqvec
	sty irqvec+1
	cli
	lda #1
	sta vic+16
	sta vic+29
	lda #36
	sta vic
	lda #55
	sta vic+1
	lda #11
	sta sprptr
	lda #128
	sta keyrep
	rts
mobirq	dec delay
	bne goon
	lda #4
	sta delay
	ldx raru
	dex
	bpl legal
	ldx #5
legal	stx raru
	lda raufru,x
	sta vic+39
goon	jmp oldirq
getjn	jsr get
	cmp #"j"
	beq ja
	cmp #"y"
	beq ja
	cmp #"n"
	bne getjn
	clc
ja	rts
savecont	lda #<endtxt2
	ldy #>endtxt2
	jsr strout
	pla
	pla
	jsr nullput
gett	jsr get
	cmp #"\x85"
	beq f1
	cmp #"\x86"
	beq f3
	cmp #"\x87"
	bne gett
	lda #9
	.byt $2c
f1	lda #0
	.byt $2c
f3	lda #1
	jsr put
	jsr packer
	lda tmp
	ldy tmp+1
	sta ende
	sty ende+1
namein	lda #<namtxt
	ldy #>namtxt
	jsr strout
	lda #2
	jsr close
	ldx #0
getname	jsr input
	cmp #13
	beq finnam
	sta name,x
	inx
	cpx #16
	bcc getname
finnam	ldy #3
ergnam	lda erga,y
	sta name,x
	inx
	dey
	bpl ergnam
	txa
	ldx #<name
	ldy #>name
	jsr setnam
	lda #2
	tay
	ldx #8
	jsr setpar
	jsr open
	lda #8
	jsr talk
	lda #$6f
	sta sa
	jsr sectalk
	jsr iecin
	cmp #"0"
	bne fehler
rest	jsr iecin
	cmp #13
	bne rest
	jsr untalk
	jmp speichern
fehler	pha
	lda #<diskerr
	ldy #>diskerr
	jsr strout
	pla
diskin	jsr bsout
	jsr iecin
	cmp #13
	bne diskin
	jsr untalk
	jsr return
	jmp namein
speichern	ldx #2
	jsr chkout
	lda #1
	sta tmp
	jsr bsout
	lda #8
	sta tmp+1
	jsr bsout
outl1	lda tmp
	cmp kopfend
	bne weiter1
	lda tmp+1
	cmp kopfend+1
	bne weiter1
	jmp teil2
weiter1	jsr getc
	jsr bsout
	bcc outl1
teil2	lda #<text
	ldy #>text
	sta tmp
	sty tmp+1
outl2	lda tmp
	cmp ende
	bne weiter2
	lda tmp+1
	cmp ende+1
	bne weiter2
	jmp teil3
weiter2	jsr getc
	jsr bsout
	bcc outl2
teil3	jsr clrchn
	lda #2
	jsr close
	jmp begin
packer	lda #<paktxt
	ldy #>paktxt
	jsr strout
	lda tmp
	ldy tmp+1
	sta ende
	sty ende+1
	lda #<text
	ldy #>text
	sta tmp
	sty tmp+1
	sta tmp2
	sty tmp2+1
	lda #"\x85"
	sta old
	lda #0
	sta oldlen
pr1	jsr get2
	tay
	bne warwas
	jsr leeren
	jsr nullput
	jsr get2
	tax
	jsr put
	lda lentab,x
	beq nocast
	tax
pr2	jsr get2
	jsr put
	dex
	bne pr2
nocast	lda tmp2+1
	cmp ende+1
	bcc pr1
	bne prx
	lda tmp2
	cmp ende
	bcc pr1
prx	jmp eval
warwas	cmp old
	bne neus
	inc oldlen
	bne pr1
	dec oldlen
neus	pha
	jsr leeren
	pla
	sta old
	inc oldlen
	bne pr1
leeren	ldx oldlen
	bne aha
	rts
aha	cpx #5
	bcs lohnt
	lda old
pry	jsr put
	dex
	bne pry
prr	lda #0
	sta oldlen
	rts
lohnt	jsr nullput
	lda #5
	jsr put
	lda oldlen
	jsr put
	lda old
	jsr put
	jmp prr
eval	lda ende
	sec
	sbc #<text
	pha
	lda ende+1
	sbc #>text
	pha
	lda tmp
	sec
	sbc #<text
	sta fac+1
	lda tmp+1
	sbc #>text
	sta fac
	ldx #$90
	sec
	jsr intflt
	jsr facarg
	pla
	sta fac
	pla
	sta fac+1
	ldx #$90
	sec
	jsr intflt
	lda fac-1
	jsr div
	jsr fac10
	jsr fac10
	jsr facout
	jsr space
	lda #"%"
	jsr bsout
	jmp return
