;:poke56,30000/256:clr
;:sys36864
	*= 30000
	;.opt oo
vic	=53248
spr	=704
cint	=65409
bsout	=$ffd2
sptr	=2040
tmp	=247
cia	=$dd00
oldirq	=$ea31
irqvec	=788
input	=56333
timer	=cia+4
float	=$bc4f
fac	=$62
grbit	=$cff0
key	=198
getkey	=65508
guggi	=1984
gugcol	=guggi+54272
gug	=249
contirq	=$ea81
zeile1	=241
zeile2	=zeile1+10
irqflg	=$dc0d
reset	=64738
setcr	=58732
zeile	=214
spalte	=211
axout	=$bdcd
rvs	=199
space	=$ab3f
joyst	=56320
sid	=54272
fb	=646
clrscr	=$e544
return	=$aad7
cass	=832
autopuf	=50000
	lda #<text-1
	ldy #>text-1
	sta gug
	sty gug+1
	jmp begin
mask1	.byte "\x1a\x90\x13 \x19\x07\x11\x12\xb0\x19\x15\xc0\xae\x1a \x12\xad\x19\x15\xc0\xbd\x03"
anl1	.byte "\x93\x9e\x19\x0a\x11 \x12stop\x92 = menue\x1a \x12p\x92 = punkt/band\x1a"
	.byte "\x11 \x12achtung\x92 dieser programmteil kann nicht"
	.byte "\x1a verlassen werden,  solange kein musik-"
	.byte "\x1a signal kommt ! (nur durch \x12reset\x92)\x03"
anl3	.byte "\x11\x11\x05 --> sind sie sicher ? [j/n]\x1a\x03"
anl2	.byte "\x93\x9a\x11\x11\x11\x11\x11\x11\x11 hauptmen\x08ue:\x1a \xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7"
	.byte "\x11\x11\x1a  \x12o\x92 = lichtorgel"
	.byte "\x11\x1a  \x12l\x92 = lauflicht"
	.byte "\x11\x1a  \x12d\x92 = dimmer"
	.byte "\x11\x1a  \x12stop\x92 = ende\x1a\x03"
anl4	.byte "\x93\x9e\x19\x0a\x11 \x12stop\x92 = menue, \x12p\x92 = programmieren\x1a"
	.byte " \x12joystick port 2\x92: \x05  NM\x11\x9d\x9d\xa7\xa5\x11\x9d\x9d\x9d\x9dN\xaf\x12\xa9\xdf\x92\xafM"
	.byte "\x11\x9d\x9d\x9d\x9d\x9d\x9dM\xb7\xdf\xa9\xb7N\x11\x9d\x9d\x9d\x9d\xa7\xa5\x11\x9d\x9dMN\x1a"
	.byte "\x9e\x11  \x12hoch\x92,\x12runter\x92 = programm-nr.\x1a"
	.byte "  \x12links\x92,\x12rechts\x92 = geschwindigkeit\x1a"
	.byte "  \x12feuer\x92 = \x90start\x9e\x1a"
	.byte "\x11 \x121\x92 - \x128\x92 = programmierung\x03\x1a"
anl5	.byte "\x93\x19\x0a\x11\x9e \x12stop\x92 = menue\x03"
anl6a	.byte "\x90op \x03"
anl6b	.byte "\x90art\x03"
title	.byte "\x1a\x13\x90\x19(\xa4\x12 lichtorgel/lauflicht v1.1  smv pullach"
	.byte "  von nikolaus heusler [c] nss 1987 arr.\x1a\x13\x03"
anl7	.byte "\x93\x11\x11\x11\x11 programmierung des lauflichts"
anl8	.byte "\x1a\x19\x06 \x12\x03"
anl9	.byte "\x13\x9a\x11\x11\x11\x11\x11\x11\x17\x12stop\x92 = ende\x1a"
	.byte "\x17\x12clr\x92 = loeschen\x1a"
	.byte "\x17\x12joystick port 2:\x1a"
	.byte "\x17 \x12feuer\x92 = flip\x1a"
	.byte "\x17 \x12richtung\x92 = bewegen\x1a"
	.byte "\x17\x12+\x92/\x12-\x92 = ende-zeiger\x03"
markt	.byte "\x1a  \x05\xb7\xb7\xb7\x9d\x9d\x9d\x91\xb4\x9d\x91\x9dNM\x03"
grbit1	.byt 1,2,4,8,$10,$20,$40,$80
grbit2a	brk
grbit2	.byt 1,3,7,15,31,63,127,255
grbit3	.byt 0,$18,$3c,$7e,$ff
grbit4	.byt 0,$80,$40,$20,$10,8,4,2,1,$81,$41
	.byt $21,$11,9,5,3,$83,$43,$23,$13,$b,7,$87,$47,$27,$17
	.byt $f,$8f,$4f,$2f,$1f,$9f,$5f,$3f,$bf,$7f,$ff
grbit5	.byt 0,$81,$42,$24,$18,$24,$42,$81
prganz	=20
prgtab	.word prg1,prg2,prg3,prg4,prg5,prg6,prg7,prg8
	.word prg9,prga,prgb,prgc,prgd,prge,prgf,prgg,prgh
	.word prgi,prgj,prgk,prgl
text	.byte "lichtorgel - lauflicht -"
	.byte " kombination der smv des gymnasiums"
	.byte " pullach   -   programmiert von n"
	.byte "ikolaus heusler, 1/1987, tel. 089/792940"
	.byte "   (c) nig software service n.s.s. 1987"
	.byte "         ich wuensche ein schoenes faschings"
	.byte "fest, und dass nichts am c 64, der dieses"
	.byte " programm ausfuehrt, kaputtgeht.     - die"
	.byte " lampen werden ueber ein geeignetes interface"
	.byte " an port b der"
	.byte " cia 2 angeschlossen. das musiksignal kommt"
	.byte " ueber die read"
	.byte "-leitung des cassettenports (pin 4)."
	.byte "   -   wer interesse an d"
	.byte "iesem programm hat, kann es"
	.byte " sehr gerne bekommen. wer es schon"
	.byte " hat, darf es mit gutem gewissen an seine"
	.byte " freunde weiterkopieren, je mehr leute"
	.byte " es haben, desto besser.     na, wie ge"
	.byte "faellt dir dieses lichtband ? ich habe"
	.byte " mir extra die muehe gemacht und einen"
	.byte " rasterirq programmiert, damit die schrift"
	.byte " schoen weich rollt.         auf eine ton"
	.byte "ausgabe (musik) habe ich verzichtet, musik"
	.byte " gibt es hier glaube ich genug..."
	.byte "            ** heee ! hoeren sie ueberhaupt"
	.byte " noch zu ???? **        und nun noch die"
	.byte " gruesse: ich gruesse michael (von ihm"
	.byte " stammt die hardware), andy lietz (mein"
	.byte " ls-disk lieferant), dieter, dominik,"
	.byte " harald speyer, herrn maurer, und alle,"
	.byte " die wo von meinem programm profitieren"
	.byte " (gut tanz !!)  - und alle, die ich ver"
	.byte "gessen habe (auch natuerlich den netten"
	.byte " diskjockey, der dieses programm be"
	.byte "dient...)       heeee, ihr da, in der ecke"
	.byte " ! was macht -ihr- denn ? hier wird"
	.byte " getanzt, ihr flaschen !!!!         ich"
	.byte " danke, dass es ueberhaupt jemanden gibt,"
	.byte " der diese botschaft gelesen hat. jetzt"
	.byte " reichts aber... keep on hackin' for"
	.byte " peace !             >=- * -=<        \x03"
typ	brk
run	brk
nr	brk
rst	.byt 193
speed	.byt 6
spd	.byt 1
stick	brk
pgfl1	brk
pgfl2	brk
dimmsp	brk
dir	brk
pgfl3	brk
kx	brk
ky	brk
pjob	brk
gkx	brk
gky	brk
comp	brk
mark	.byt 17
setspr	lda #0
	ldx #63
clrspr	sta spr,x
	dex
	bpl clrspr
	stx spr
	stx spr+3
	stx spr+6
	stx vic+23
	stx vic+29
	ldx #7
	ldy #0
	lda #39
setcor	sta vic,y
	pha
	iny
	lda #111
	sta vic,y
	iny
	lda #1
	sta vic+39,x
	lda #11
	sta sptr,x
	pla
	clc
	adc #22
	dex
	bpl setcor
	lda #<mask1
	ldy #>mask1
	jmp strout
setvic	jsr cint
	lda #6
	sta vic+32
	sta vic+33
	rts
setcia	lda #-1
	sta cia+3
	sei
	jsr setraster
	lda #<newirq
	ldy #>newirq
setirq	sta irqvec
	sty irqvec+1
	cli
	rts
setold	sei
	jsr rastoff
	lda #<oldirq
	ldy #>oldirq
	bne setirq
ciairq	lda irqflg
	cli
	jsr runn
	jsr soft
	lda vic+21
	sta cia+1
	jmp pirq
newirq	lda vic+$19
	sta vic+$19
	and #1
	beq ciairq
	lda vic+$12
	cmp #zeile2
	bcs second
	ldy #zeile2
	lda rst
setpar	sta vic+22
	sty vic+$12
	jmp contirq
second	ldy #zeile1
	lda #192
	bne setpar
setsid	ldx #24
	lda #0
clrsid	sta sid,x
	dex
	bpl clrsid
	lda #100
	sta sid+15
	lda #129
	sta sid+18
	rts
strout	tax
	lda tmp
	pha
	lda tmp+1
	pha
	stx tmp
	sty tmp+1
str	ldy #0
	lda (tmp),y
	beq fin
	cmp #"\x03"
	beq fin
	cmp #"\x1a"
	bne nocr
	lda #13
nocr	cmp #"\x19"
	beq rept
	cmp #"\x93"
	beq head
	cmp #"\x17"
	bne also
	lda #20
	sta spalte
	jsr setcr
	jmp cont
also	jsr bsout
cont	inc tmp
	bne str
	inc tmp+1
	bne str
rept	iny
	lda (tmp),y
	tax
	iny
	lda (tmp),y
rep	jsr bsout
	dex
	bne rep
	lda tmp
	clc
	adc #3
	sta tmp
	lda tmp+1
	adc #0
	sta tmp+1
	bne str
fin	pla
	sta tmp+1
	pla
	sta tmp
	rts
head	jsr clrscr
	lda #<title
	ldy #>title
	jsr strout
	jmp cont
testfreq	jsr pause
	lda #0
	sta vic+21
	ldx #3
	lda #-1
settimer	sta timer,x
	dex
	bpl settimer
	ldx #$51
	ldy #$11
wait1	lda input
	and #16
	bne wait1
	stx cia+15
	sty cia+14
wait2	lda input
	and #16
	beq wait2
wait3	lda input
	and #16
	bne wait3
	ldy #0
	sty cia+14
	sty cia+15
	sec
	lda timer
	eor #-1
	sbc #11
	sta tmp
	lda timer+1
	eor #-1
	sbc #0
	sta tmp+1
	ldx #9
durch32	lsr tmp+1
	ror tmp
	dex
	bne durch32
	ldx tmp
	cpx #8
	bcc kl8
	ldx #7
kl8	lda grbit,x
	sta vic+21
	jmp wertaus
pause	ldx #-1
pse	dex
	bne pse
	rts
wertaus	lda key
	beq testfreq
	jsr getkey
	cmp #"\x03"
	bne noc
	rts
noc	cmp #"p"
	bne nopp
	lda typ
	eor #-1
	sta typ
	jsr settyp
	jmp testfreq
settyp	lda typ
	beq e0
	lda #<grbit1
	ldy #>grbit1
	bne e1
e0	lda #<grbit2
	ldy #>grbit2
e1	sta tmp
	sty tmp+1
	ldy #7
e2	lda (tmp),y
	sta grbit,y
	dey
	bpl e2
	rts
nopp	jmp testfreq
makeguggi	ldx #1
shift	lda guggi,x
	sta guggi-1,x
	inx
	cpx #40
	bcc shift
	inc gug
	bne dada
	inc gug+1
dada	ldy #0
	lda (gug),y
	cmp #"\x03"
	bne goon
	lda #<text
	ldy #>text
	sta gug
	sty gug+1
	lda text
goon	and #$3f
	sta guggi+39
	lda #15
	ldx #39
sugcol	eor #3
	sta gugcol,x
	dex
	bpl sugcol
	rts
setraster	lda #zeile1
	sta vic+$12
	lda vic+$11
	and #$7f
	sta vic+$11
	lda #$81
	sta $1a+vic
	rts
rastoff	lda #0
	sta vic+$1a
	rts
soft	lda rst
	sec
	sbc #193
	bpl kll8
	lda #199
	sta rst
	bne makeguggi
kll8	clc
	adc #192
	sta rst
	rts
parout	lda #0
	sta rvs
	sta fb
	lda #18
	sta zeile
	lda #29
	sta spalte
	jsr setcr
	ldx nr
	inx
	lda #0
	jsr axout
	jsr space
	inc zeile
	lda #33
	sta spalte
	jsr setcr
	ldx speed
	lda #0
	jsr axout
	jmp space
clr	lda #0
	sta run
	rts
begin	jsr setsid
	jsr clr
	jsr setvic
	jsr setcia
	lda #0
	sta typ
	jsr settyp
	lda #<anl2
	ldy #>anl2
	jsr strout
men	jsr getkey
	cmp #"o"
	beq orgel
	cmp #"d"
	beq dimm
	cmp #"l"
	beq lauf
	cmp #"\x03"
	bne men
	lda #<anl3
	ldy #>anl3
	jsr strout
getjn	jsr getkey
	cmp #"n"
	beq begin
	cmp #"j"
	bne getjn
	jmp reset
dimm2	lda #<anl5
	ldy #>anl5
	jsr strout
	jsr setspr
	ldx #-2
dim1	jsr dimend
	jsr dimpau
	dex
	cpx #1
	bne dim1
dim2	jsr dimend
	jsr dimpau
	inx
	cpx #-1
	bne dim2
	beq dim1
dimpau	txa
	pha
	eor #-1
	tay
dim3	lda #-1
	sta vic+21
	sta cia+1
	dex
	bne dim3
dim4	lda #0
	sta vic+21
	sta cia+1
	dey
	bne dim4
	pla
	tax
	rts
dimend	lda key
	beq rt
radio	jsr getkey
	cmp #"\x03"
	bne rt
	pla
	pla
rt	rts
dimm	jsr dimm2
	jmp begin
orgel	lda #<anl1
	ldy #>anl1
	jsr strout
	jsr setspr
	jsr testfreq
	jmp begin
lauf	jsr lali
	jmp begin
prg1	lda vic+21
	asl
	adc #0
	jmp put
prg2	lda vic+21
	lsr
	php
	lda vic+21
	plp
	ror
	jmp put
prg3	lda vic+21
	eor #-1
	jmp put
prg4	ldx pgfl1
	inx
	cpx #16
	bcc l41
	ldx #0
l41	stx pgfl1
	cpx #9
	bcs l42
	lda grbit2a,x
	jmp put
l42	txa
	sec
	sbc #17
	eor #-1
	tax
	lda grbit2a,x
	jmp put
prg5	ldx pgfl1
	inx
	cpx #16
	bcc l51
	ldx #0
l51	stx pgfl1
	cpx #9
	bcs l52
	lda grbit2a,x
	jsr dreh
	jmp put
l52	txa
	sec
	sbc #17
	eor #-1
	tax
	lda grbit2a,x
	jsr dreh
	jmp put
prg6	ldx pgfl1
	inx
	cpx #8
	bcc l61
	ldx #0
l61	stx pgfl1
	cpx #5
	bcc l62
	txa
	sec
	sbc #9
	eor #-1
	tax
l62	lda grbit3,x
put	sta vic+21
	rts
prg7	ldx pgfl1
	inx
	cpx #14
	bcc l71
	ldx #0
l71	stx pgfl1
	cpx #7
	bcc l72
l73	jmp prg1
l72	jmp prg2
prg8	ldx pgfl1
	inx
	cpx #37
	bcc l81
	ldx #0
l81	stx pgfl1
	lda grbit4,x
	jmp put
prg9	lda sid+27
	bmi l73
	bpl l72
prga	lda sid+27
	eor vic+21
	jmp put
prgb	lda sid+27
	and #1
	lsr
	rol vic+21
	rts
prgc	lda sid+27
	and #1
	lsr
	ror vic+21
	rts
prgd	lda vic+21
	and #15
	asl
	tax
	and #16
	beq ld1
	txa
	eor #17
	tax
ld1	stx pgfl1
	lda vic+21
	and #240
	lsr
	tax
	and #8
	beq ld2
	txa
	eor #136
	tax
ld2	txa
	ora pgfl1
	jmp put
prge	lda vic+21
	and #15
	lsr
	bcc le1
	ora #8
le1	sta pgfl1
	lda vic+21
	and #240
	asl
	bcc le2
	ora #16
le2	ora pgfl1
	jmp put
prgf	lda vic+21
	jsr dreh
	jmp put
prgg	lda vic+21
	and #129
	cmp #129
	beq lg4
	lda vic+21
	ldx pgfl3
	beq lg1
	lsr
	bcc lg3
lg2	txa
	eor #-1
	sta pgfl3
	jmp prgg
lg3	jmp put
lg1	asl
	bcc lg3
	bcs lg2
lg4	rts
prgh	inc vic+21
	rts
prgi	dec vic+21
	rts
prgj	ldx pgfl1
	inx
	cpx #8
	bcc lj1
	ldx #0
lj1	stx pgfl1
	lda grbit5,x
	jmp put
prgk	ldx pgfl1
	inx
	cpx #8
	bcc lk1
	ldx #0
lk1	stx pgfl1
	lda grbit5,x
	eor #-1
	jmp put
prgl	ldx pgfl1
	inx
	cpx mark
	bcc ll1
	ldx #0
ll1	stx pgfl1
	lda autopuf,x
	jmp put
runn	lda run
	bne ann
	rts
an	lda nr
	asl
	tax
	lda prgtab,x
	sta jump+1
	lda prgtab+1,x
	sta jump+2
jump	jmp 0
ann	dec spd
	beq annn
	rts
annn	lda speed
	sta spd
	bne an
dreh	sta pgfl2
	ldx #8
drh	lsr pgfl2
	rol
	dex
	bne drh
	rts
lali	lda #0
	sta pjob
	lda #<anl4
	ldy #>anl4
	jsr strout
	jsr setspr
	lda #1
	sta vic+21
	jsr parout
wk	jsr getkey
	beq joy
	cmp #"\x03"
	bne nost
	lda #0
	sta run
	rts
nost	cmp #"p"
	bne noup
	jmp program
noup	cmp #"1"
	bcc wk
	cmp #"9"
	bcs wk
	sec
	sbc #"1"
	pha
	lda #0
	sta run
	jsr setrun
	pla
	tax
	lda vic+21
	eor grbit1,x
	sta vic+21
	jmp wk
setrun	beq on
	lda #<anl6a
	ldy #>anl6a
	bne setrun2
on	lda #<anl6b
	ldy #>anl6b
setrun2	pha
	tya
	pha
	lda #20
	sta zeile
	lda #12
	sta spalte
	jsr setcr
	pla
	tay
	pla
	jmp strout
joy	lda joyst
	sta stick
	and #1
	bne no1
	ldx nr
	beq no1
	dec nr
no1	lda stick
	and #2
	bne no2
	ldx nr
	cpx #prganz
	bcs no2
	inc nr
no2	lda stick
	and #4
	bne no4
	ldx speed
	cpx #1
	beq no4
	dec speed
no4	lda stick
	and #8
	bne no8
	ldx speed
	cpx #-1
	beq no8
	inc speed
no8	lda stick
	and #15
	cmp #15
	beq qwk
	jsr parout
	lda joyst
	and #15
	cmp #15
	beq qwk
	ldy #80
quael	jsr pause
	dey
	bne quael
qwk	lda joyst
	and #16
	bne qqwk
	lda run
	eor #1
	sta run
	jsr setrun
	ldy #0
dy	jsr pause
	dey
	bne dy
qqwk	jmp wk
program	lda #<anl7
	ldy #>anl7
	jsr strout
	ldy #0
	sty run
	lda #1
	sta vic+21
	sta pjob
	jsr makepspr
plp0	ldy #0
plp1	tya
	pha
	lda #<anl8
	ldy #>anl8
	jsr strout
	ldx #0
	pla
	tay
plp2	lda autopuf,y
	and grbit1,x
	beq aus
	lda #7
aus	sta fb
	lda #"O"
	jsr bsout
	inx
	cpx #8
	bcc plp2
	iny
	cpy #17
	bcc plp1
	lda #<anl9
	ldy #>anl9
	jsr strout
	jsr markout
ploop	jsr getkey
	cmp #"\x03"
	bne nostp
	jmp lali
nostp	cmp #"\x93"
	bne noclar
	jsr clar
	jmp nene
noclar	jmp testplmi
noclar2	lda joyst
	and #1
	bne noj1
	lda ky
	beq noj1
	dec ky
noj1	lda joyst
	and #2
	bne noj2
	lda ky
	cmp #16
	bcs noj2
	inc ky
noj2	lda joyst
	and #4
	bne noj4
	lda kx
	beq noj4
	dec kx
noj4	lda joyst
	and #8
	bne noj8
	lda kx
	cmp #7
	bcs noj8
	inc kx
noj8	lda comp
	cmp comp
	beq noj8
noj8a	lda gkx
	cmp vic
	bne noj8a
	lda gky
	cmp vic+1
	bne noj8a
	lda joyst
	and #16
	bne ploop
	ldy ky
	lda autopuf,y
	ldx kx
	eor grbit1,x
	sta autopuf,y
	ldy #100
psse	jsr pause
	dey
	bne psse
	jmp nene
clar	ldy #16
	lda #0
clalp	sta autopuf,y
	dey
	bpl clalp
	rts
markout	lda #32
	sta 1225
	sta 1226
	sta 1946
	sta 1947
	sta 1948
	lda mark
	clc
	adc #5
	sta zeile
	jsr setcr
	lda #<markt
	ldy #>markt
	jmp strout
testplmi	cmp #"-"
	bne nomi
	lda mark
	cmp #2
	bcc nene
	dec mark
nene	lda #5
	sta zeile
	jsr setcr
	jmp plp0
nomi	cmp #"+"
	bne nopl
	lda mark
	cmp #17
	bcs nene
	inc mark
	bne nene
nopl	jmp noclar2
pirq	lda pjob
	bne jaa
qold	jmp oldirq
jaa	lda kx
	asl
	asl
	asl
	clc
	adc #66
	sta gkx
	lda ky
	asl
	asl
	asl
	clc
	adc #98
	sta gky
	inc comp
	lda gkx
	cmp vic
	beq samex
	bcc mustdec
	inc vic
	bne samex
mustdec	dec vic
samex	lda gky
	cmp vic+1
	beq qold
	bcs mustinc
	dec vic+1
	bne qold
mustinc	inc vic+1
	bne qold
makepspr	ldx #31
	stx cass
	stx vic+23
	stx vic+29
	lda #13
	sta sptr
	lda #17
	sta cass+3
	sta cass+6
	sta cass+9
	stx cass+12
	rts
