;:sys36864
	;.opt oo
	*= $c000
xcoord	=$14
illquan	=$b248
av	=251
status	=2
gralo2	=$e000
flag	=$97
konf	=1
tmp2	=253
clrscr	=$e544
sprite	=704
tmp	=av
sprptr	=2040
irqalt	=$ea31
irqvec	=$314
key	=203
collo	=$400
tab	=$eb81
shtab	=$ebc2
shft	=$28d
nmkey	=198
vic	=$d000
gralo	=$2000
getx	=$b7f1
chkcom	=$aefd
getpar	=$b7eb
	jmp init	;  sys 49152
	jmp clear	; sys 49155
	jmp color	; sys 49158,co
	jmp revers	;sys 49161
	jmp set	;   sys 49164,x,y
	jmp reset	; sys 49167,x,y
	jmp test	;  sys 49170,x,y -> peek(2)
	jmp verkl	; sys 49173,x,y
	jmp tr12	;  sys 49176
	jmp tr21	;  sys 49179
	jmp test2	; sys 49182,x,y -> (2)
	jmp vergr	; sys 49185,x1,y1,x2,y2
	jmp groff	; sys 49188
	jmp setm	;  sys 49191 -> 828-830
	jmp setm2	; sys 49194 -> 828-830
grbit	.byt 1,2,4,8,$10,$20,$40,$80
mult	.word $2000,$2140,$2280,$23c0
	.word $2500,$2640,$2780,$28c0
	.word $2a00,$2b40,$2c80,$2dc0
	.word $2f00,$3040,$3180,$32c0
	.word $3400,$3540,$3680,$37c0
	.word $3900,$3a40,$3b80,$3cc0
	.word $3e00
offy	.word 0
offx	brk
erg	.word 0
nenner	.word 0
zaehler	.word 0
xx	=828
yy	=830
px	.word 0
py	.word 0
hx	.word 0
hy	.word 0
x1	.word 0
y1	brk
x2	.word 0
y2	brk
mx	.word 0
my	brk
lx	.word 0
ly	.word 0
nx	.word 0
ny	.word 0
sx	.word 0
sy	.word 0
cntdwn	brk
currcol	brk
init	lda #59
	sta vic+17
	lda #29
	sta vic+24
	ldx #$10
	bne col
color	jsr getx
col	ldy #0
	lda #>collo
	sty tmp
	sta tmp+1
	txa
	ldx #4
coll	sta (tmp),y
	iny
	bne coll
	inc tmp+1
	dex
	bne coll
	rts
clear	ldy #0
	ldx #>gralo
	sty tmp
	stx tmp+1
	tya
clr	sta (tmp),y
	iny
	bne clr
	inc tmp+1
	dex
	bne clr
	rts
revers	ldy #0
	ldx #>gralo
	sty tmp
	stx tmp+1
rvs	lda (tmp),y
	eor #-1
	sta (tmp),y
	iny
	bne rvs
	inc tmp+1
	dex
	bne rvs
	rts
getkoor	jsr chkcom
	jmp getpar
punkt	jsr safety
	txa
	lsr
	lsr
	lsr
	asl
	tay
	lda mult,y
	sta offy
	lda mult+1,y
	sta offy+1
	txa
	and #7
	clc
	adc offy
	sta offy
	lda xcoord
	and #$f8
	sta offx
	clc
	lda offx
	adc offy
	sta av
	lda offy+1
	adc xcoord+1
	sta 1+av
	lda xcoord
	and #7
	eor #7
	tax
	lda grbit,x
	ldy #0
	rts
reset	lda #$80
	.byt $2c
set	lda #0
	sta flag
	jsr getkoor
plot	jsr punkt
	bit flag
	bpl setl
	eor #-1
	and (av),y
	.byt $2c
setl	ora (av),y
	sta (av),y
	rts
test	jsr getkoor
check	jsr punkt
	and (av),y
	sta status
	rts
teile	lda #0
	sta erg
	sta erg+1
	jsr testnenn
comp	lda zaehler+1
	cmp nenner+1
	bcc fertig
	bne weiter
	lda zaehler
	cmp nenner
	bcc fertig
weiter	inc erg
	bne wei2
	inc erg+1
wei2	lda zaehler
	sec
	sbc nenner
	sta zaehler
	lda zaehler+1
	sbc nenner+1
	sta zaehler+1
	jmp comp
fertig	rts
testnenn	lda nenner
	bne nennok
	lda nenner+1
	bne nennok
	jmp ill
nennok	rts
safety	cpx #200
	bcs ill
	lda xcoord+1
	cmp #>320
	bcc ok
	bne ill
	lda xcoord
	cmp #<320
	bcs ill
ok	rts
ill	jmp illquan
clrvar	lda #0
	sta px
	sta px+1
	sta py
	sta hx
	sta hx+1
	sta hy
	sta hy+1
	rts
setcheck	ldx #3
	lda hx
	sta xcoord
	lda hx+1
	sta xcoord+1
du8	lsr xcoord+1
	ror xcoord
	dex
	bne du8
	ldx #3
	lda hy
	sta tmp
	lda hy+1
	sta tmp+1
dr8	lsr tmp+1
	ror tmp
	dex
	bne dr8
	ldx tmp
	rts
groff	lda #27
	sta vic+17
	lda #21
	sta vic+24
	jmp clrscr
verkl	jsr getkoor
	jsr safety
	lda xcoord
	sta nenner
	lda xcoord+1
	sta nenner+1
	lda #<2560
	sta zaehler
	lda #>2560
	sta zaehler+1
	jsr teile
	lda erg
	sta xx
	lda erg+1
	sta xx+1
	stx nenner
	lda #0
	sta nenner+1
	lda #<1600
	sta zaehler
	lda #>1600
	sta zaehler+1
	jsr teile
	lda erg
	sta yy
	lda erg+1
	sta yy+1
	jsr init
	jsr clrvar
loop	jsr setcheck
	jsr check
	bne aus
	lda #128
	.byt $2c
aus	lda #0
	sta flag
	lda px+1
	sta xcoord+1
	lda px
	sta xcoord
	ldx py
	jsr plot
	lda hx
	clc
	adc xx
	sta hx
	lda hx+1
	adc xx+1
	sta hx+1
	inc px
	bne nocy
	inc px+1
nocy	lda hx+1
	cmp #>2560
	bcc cont
	bne endx
	lda hx
	cmp #<2560
	bcs endx
cont	jmp loop
endx	lda #0
	sta hx
	sta hx+1
	sta px
	sta px+1
	inc py
	lda hy
	clc
	adc yy
	sta hy
	lda hy+1
	adc yy+1
	sta hy+1
	lda hy+1
	cmp #>1600
	bcc cont
	bne stop
	lda hy
	cmp #<1600
	bcc cont
stop	rts
tr12	lda #>gralo
	ldx #>gralo2
	bne trans
tr21	lda #53
	sei
	sta konf
	ldx #>gralo
	lda #>gralo2
trans	sta tmp+1
	stx tmp2+1
	ldy #0
	sty tmp
	sty tmp2
	ldx #32
trlp	lda (tmp),y
	sta (tmp2),y
	iny
	bne trlp
	inc tmp+1
	inc tmp2+1
	dex
	bne trlp
	lda #55
	sta konf
	cli
	rts
add2	lda av+1
	clc
	adc  #$e0-$20
	sta av+1
	rts
test2	jsr getkoor
check2	jsr punkt
	pha
	lda #53
	sei
	sta konf
	jsr add2
	pla
	and (av),y
	sta status
	pha
	lda #55
	sta konf
	cli
	pla
	rts
tausch	lda y1
	cmp y2
	bcc tst2
	pha
	lda y2
	sta y1
	pla
	sta y2
tst2	lda x1+1
	cmp x2+1
	bcc tst3
	bne tst4
	lda x1
	cmp x2
	bcc tst3
tst4	lda x1
	pha
	lda x1+1
	pha
	lda x2
	sta x1
	lda x2+1
	sta x1+1
	pla
	sta x2+1
	pla
	sta x2
tst3	rts
sethx	lda x1
	sta hx
	lda x1+1
	sta hx+1
	rts
testpy	lda py+1
	cmp #>3200
	bcc goon
	bne goon
	lda py
	cmp #<3200
goon	rts
testpx	lda px+1
	cmp #>20480
	bcc goon
	bne goon
	lda px
	cmp #<20480
	rts
vergr	jsr getkoor
	jsr safety
	lda xcoord
	sta x1
	lda xcoord+1
	sta x1+1
	stx y1
	jsr getkoor
	jsr safety
	lda xcoord
	sta x2
	lda xcoord+1
	sta x2+1
	stx y2
	jsr tausch
	lda x2
	sec
	sbc x1
	sta mx
	lda x2+1
	sbc x1+1
	sta mx+1
	lda y2
	sec
	sbc y1
	sta my
	lda #0
	sta py
	sta py+1
	jsr tr12
	jsr sethx
	lda y1
	sta hy
	lda #<20480
	sta zaehler
	lda #>20480
	sta zaehler+1
	lda mx
	sta nenner
	lda mx+1
	sta nenner+1
	jsr teile
	lda erg
	sta sx
	lda erg+1
	sta sx+1
	lda #<3200
	sta zaehler
	lda #>3200
	sta zaehler+1
	lda my
	sta nenner
	lda #0
	sta nenner+1
	jsr teile
	lda erg
	sta sy
	lda erg+1
	sta sy+1
	jsr init
yloop	lda py
	sta ly
	clc
	adc sy
	sta ny
	lda py+1
	sta ly+1
	adc sy+1
	sta ny+1
	lda #0
	sta px
	sta px+1
xloop	lda px
	sta lx
	clc
	adc sx
	sta nx
	lda px+1
	sta lx+1
	adc sx+1
	sta nx+1
	ldx hy
	lda hx
	sta xcoord
	lda hx+1
	sta xcoord+1
	jsr check2
	jmp tloop
qnp	jmp np
tloop	jsr testpx
	bcs qnp
	lda px
	sta xcoord
	lda px+1
	sta xcoord+1
	jsr testpy
	bcs qnp
	lda py
	sta yy
	lda py+1
	sta yy+1
	ldx #4
drc16	lsr xcoord+1
	ror xcoord
	lsr yy+1
	ror yy
	dex
	bne drc16
	lsr xcoord+1
	ror xcoord
	lsr xcoord+1
	ror xcoord
	lda status
	bne an
	lda #128
	.byt $2c
an	lda #0
	sta flag
	ldx yy
	jsr plot
	lda px
	clc
	adc #8
	sta px
	lda px+1
	adc #0
	sta px+1
	cmp nx+1
	bcc tloop
	bne cloop
	lda px
	cmp nx
	bcc tloop
cloop	lda lx
	sta px
	lda lx+1
	sta px+1
	lda py
	clc
	adc #8
	sta py
	lda py+1
	adc #0
	sta py+1
	cmp ny+1
	bcc qtloop
	bne ccloop
	lda py
	cmp ny
	bcs ccloop
qtloop	jmp tloop
ccloop	lda nx
	sta px
	lda nx+1
	sta px+1
	lda ly
	sta py
	lda ly+1
	sta py+1
	inc hx
	bne nono
	inc hx+1
nono	jsr testpx
	bcs np
	jmp xloop
np	jsr sethx
	lda ny
	sta py
	lda ny+1
	sta py+1
	inc hy
	bne no2
	inc hy+1
no2	jsr testpy
	bcs aaus
	jmp yloop
aaus	rts
setm	jsr irqinit
	jsr clrspr
	sta xx
	sta xx+1
	sta yy
	lda #1
	sta sprite+21
wl	lda key
	cmp #64
	bne wl
	lda #254
	sta sprite+22
	lda #1
	ldx #24
	ldy #7
ccps	sta sprite,x
	inx
	inx
	inx
	dey
	bne ccps
keyloop	jsr get
	beq keyloop
	jsr pause
	cmp #13
	bne nocr
	jsr irqoff
	lda #0
	sta vic+21
	sta nmkey
	rts
nocr	cmp #"\x91"
	bne noup
	lda yy
	beq keyloop
	dec yy
	jmp keyloop
noup	cmp #"\x11"
	bne nodwn
	lda yy
	cmp #199
	bcs keyloop
	inc yy
	bne keyloop
nodwn	cmp #"\x1d"
	bne norig
	lda xx+1
	cmp #>319
	bcc gorig
	bne keyloop
	lda xx
	cmp #<319
	bcs keyloop
gorig	inc xx
	bne keyloop
	inc xx+1
	bne keyloop
norig	cmp #"\x9d"
	bne keyloop
	lda xx+1
	bne golft
	lda xx
	beq keyloop
golft	lda xx
	sec
	sbc #1
	sta xx
	lda xx+1
	sbc #0
	sta xx+1
	jmp keyloop
setm2	jsr irqinit
	jsr clrspr
	lda #199
	sta yy
	lda #-1
	sta sprite+21
wl2	lda key
	cmp #64
	bne wl2
	lda #1
	ldx #0
	ldy #7
ccpss	sta sprite,x
	inx
	inx
	inx
	dey
	bne ccpss
	lda #1
	sta xx+1
	lda #<319
	sta xx
	jmp keyloop
irqinit	lda #<irqneu
	ldy #>irqneu
setirq	sei
	sta irqvec
	sty irqvec+1
	lda #1
	sta currcol
	sta cntdwn
	cli
	rts
irqoff	lda #<irqalt
	ldy #>irqalt
	bne setirq
irqneu	dec cntdwn
	bne quitirq
	lda #20
	sta cntdwn
	lda currcol
	eor #1
	sta vic+39
	sta currcol
quitirq	lda xx
	clc
	adc #17
	sta vic
	lda xx+1
	adc #0
	sta vic+16
	lda yy
	clc
	adc #43
	sta 1+vic
	jmp irqalt
clrspr	lda #1
	sta vic+21
	lda #11
	sta sprptr
	ldx #63
	lda #0
cps	sta sprite,x
	dex
	bpl cps
	rts
get	ldx key
	cpx #64
	bne nonull
	lda #0
	rts
nonull	ldy shft
	bne stab
	lda tab,x
	rts
stab	lda shtab,x
	rts
pause	ldx #255
	ldy #10
ps	dex
	bne ps
	dey
	bne ps
	rts
