;:poke56,62:clr
;:sys36864
	;.opt oo
	*= $c000
vic	=$d000
cint	=65409
strout	=$ab1e
ptr	=2040
tmp	=2
irqvec	=$314
timer	=$dc05
norm	=64
fast	=2
slow	=50
clrlin	=59903
flight	=155
get	=65508
irqfrq	=9
system	=7	; 64 / irqfrq
outirq	=$ea7e
colpos	=56263
joy	=56320
joyrep	=10
stacks1	=$ca00
stacks2	=$cb00
stacks3	=$cc00
stacki	=$cd00
key	=198
reset	=$fffc
axout	=$bdcd
zgp	=1201
scn	=181
	jmp start
grbit	.byt 1,2,4,8,$10,$20,$40,$80
grbit2	.byt 1,3,7,15,31,63,127,255
mask	.byt 13
	.byte "\x93\x1cO\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7\xb7P"
	.byt 13
	.byte "\xb4\x08\x9a die tuerme von hanoi - intel. v 1.2 \x1c\xaa"
	.byt 13
	.byte "L\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xba"
	brk
turm1	.byte "\x13\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x97        \x12 \x11\x9d \x11\x9d \x11\x9d \x11\x9d \x11\x9d"
	.byte " \x11\x9d \x11\x9d \x11\x9d \x11\x9d \x9d\x9d\x9d\x9d\x9d\x9d   \x91\x92\xa4\xa4\x1d\xa4\xa4\x9d\x9d\x9d\x9d\x9d\x12\x11  1       "
	.byte " \x91\x92\xa4\xa4\x1d\xa4\xa4\x9d\x9d\x9d\x9d\x9d\x12\x11  2        \x91\x92\xa4\xa4\x1d\xa4\xa4\x9d\x9d\x9d\x9d\x9d\x12\x11  3  "
	brk
turm2	.byte "      \x9d\x9d\x9d\x9d\x9d\x9d\x9d\x9d\x9d\x91 \x91\x9d \x91\x9d \x91\x9d \x91\x9d \x91\x9d \x91\x9d \x91\x9d \x91\x9d \x9d\x9d\x9d\x9d\x9d\x9d"
	.byte "\x9d\x9d\x9d\x9d\x9d\x9d \x11\x9d \x11\x9d \x11\x9d \x11\x9d \x11\x9d \x11\x9d \x11\x9d \x11\x9d "
	.byt 13
	.byte "\x12   \x9d\x9d\x91\x9d \x91\x9d \x91\x9d \x91\x9d \x91\x9d \x96\x92N\x12\x97\x9d\x91\x9d \x91\x9d \x91\x9d \x91\x9d \x91\x9d \x91"
	.byte "\x9d   \x92\xa9"
	brk
copr	.byte "\x13\x11\x11\x11\x11\x1e(c)opyright n. heusler,   nh-280388-arr"
	.byt 13
	.byte "ein\x81 nss\x1e programm    alle rechte vorbeh."
	.byt 13
	.byte "\x11\x9ewieviele etagen ? (\x051\x9e-\x058\x9e)"
	brk
balken	.byte "\x13\x11\x11\x11\x9a\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4"
	.byt 13
	.byte "\x12                            zug :      "
	.byt 13
	.byte "\x12(a) automatik                     nss88"
	brk
goto	.byte "\x13\x11\x11\x11\x11\x12\x9a"
	brk
texte	.byte "\x09\x08\x12 \x1a\x15\x07 ?"
	.byte "         "
	.byte "\x01\x15"
	.byt 20,15,13,1,20
	.byte "\x09\x0b"
	.byte "\x07\x05\x13\x03\x08\x01\x06\x06"
	.byt 20
vont	.byte "\x16\x0f\x0e\xa0"
nach	.byte "\x0e\x01\x03\x08"
zuop	.byt 13
	.byte "\x12zuege ueber optimum: "
	brk
autotxt	.byte "\x13\x11\x11\x11\x11\x12\x9a\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d   "
	.byt 13
	.byte "\x12rechenebene:    "
	brk
nomal	.byte "\x13\x11\x11\x11\x11\x12\x9a\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1dnochmal ?"
	brk
tu	.byt %00000000,%01111110,%00000000
	.byt %00000000,%11111111,%00000000
	.byt %00000001,%11111111,%10000000
	.byt %00000011,%11111111,%11000000
	.byt %00000111,%11111111,%11100000
	.byt %00001111,%11111111,%11110000
	.byt %00011111,%11111111,%11111000
	.byt %00111111,%11111111,%11111100
code	.byt 78,78,77
coltab	.byt 0,11,12,15,1,15,12,11
mul11	.byt 0,11,22
zehtab	.word 10000,1000,100,10,1
task	brk
c	brk
d	brk
merk	brk
job	brk
a	brk
b	brk
step	brk
anz1	brk
anz2	brk
anz3	brk
num	brk
tim	brk
colptr	brk
cnt1	brk
cnt2	brk
koord	brk
sel	brk
cnt3	brk
joyflg	brk
zugflg	brk
zug	.word 0
stackptr	brk
s1	brk
s2	brk
s3	brk
pos1	brk
i	brk
auto	brk
ebeflg	brk
yk	.byt 234,226,218,210,202,194,186,178
xk	.byt 68,156,244
newirq	jsr blink
	dec cnt1
	bne noc1
	lda tim
	sta cnt1
	jsr taskc
	jsr speed
	jsr deck
	jsr jobc
	jsr hebel
	jsr zugnr
	jsr ebene
noc1	dec cnt2
	bne offirq
	lda #system
	sta cnt2
	lda joyflg
	beq qoldirq
	jsr stick
	lda #12
	jsr set
oldirq	jmp 0
offirq	jmp outirq
qoldirq	lda #11
	ldx #39
qo	sta 56256,x
	dex
	bpl qo
	bmi oldirq
zugnr	lda zugflg
	beq nozug
	lda zug
	pha
	lda zug+1
	pha
	lda #<1218
	ldy #>1218
	sta scn
	sty scn+1
	ldx #0
com2	ldy #"0"+128
com1	lda zug+1
	cmp zehtab+1,x
	bcc com3
	beq com4
com5	lda zug
	sbc zehtab,x
	sta zug
	lda zug+1
	sbc zehtab+1,x
	sta zug+1
	iny
	bne com1
com4	lda zug
	cmp zehtab,x
	bcs com5
com3	pha
	tya
	ldy #0
	sta (scn),y
	inc scn
	pla
	inx
	inx
	cpx #10
	bcc com2
	pla
	sta zug+1
	pla
	sta zug
nozug	rts
ebene	lda ebeflg
	beq nozug
	lda stackptr
	clc
	adc #177
	sta 1237
	rts
taskc	lda task
	beq notask
	cmp #$80
	bne no80
	lda c
	asl
	tay
	lda d
	cmp vic+1,y
	bne nod
	lda #0
	sta task
	rts
nod	php
	lda vic+1,y
	adc #0
	plp
	sbc #0
	sta vic+1,y
notask	rts
no80	lda c
	asl
	tay
	lda d
	cmp vic,y
	bne nodd
	lda #0
	sta task
	rts
nodd	php
	lda vic,y
	adc #0
	plp
	sbc #0
	sta vic,y
	rts
speed	lda task
	beq okay
	lda #fast
	.byt $2c
okay	lda #slow
	sta tim
	rts
deck	ldy #7
	ldx #15
	lda #0
	sta merk
dk	lda vic,x
	cmp #flight
	bne no155
	lda merk
	ora grbit,y
	sta merk
no155	dex
	dex
	dey
	bpl dk
	lda merk
	sta vic+27
	rts
jobc	lda task
	bne notask
	lda job
	beq notask
	cmp #$80
	bne no128
	lda step
	cmp #2
	bcc step1
	inc anz1
joboff	lda #0
	sta step
	sta job
	rts
step1	inc step
	tax
	bne weiter
	lda xk
	sta d
	lda a
	tax
	sta c
	asl
	tay
	lda #0
	sta vic,y
	lda grbit,x
	sta vic+27
	lda #flight
	sta vic+1,y
	lda #$90
	sta task
	rts
weiter	ldx anz1
landing	lda yk,x
	sta d
	lda #$80
	sta task
	rts
no128	lda step
	bne active
	ldx a
	lda xk,x
	sta merk
	ldy #0
loop1	tya
	asl
	tax
	lda merk
	cmp vic,x
	beq fund
	iny
	cpy num
	bcc loop1
	bcs joboff
fund	inc step
	lda #flight
	sta d
	sty c
	ldx a
	dec anz1,x
	lda #128
settsk	sta task
	rts
active	inc step
	cmp #2
	bcs act2
	ldx b
	lda xk,x
	sta d
	lda #$90
	bne settsk
act2	beq act3
	ldx b
	inc anz1,x
	jmp joboff
act3	ldx b
	lda anz1,x
	tax
	bpl landing
hebel	lda job
	cmp #$80
	bne qnotask
	ldx step
	lda code,x
	sta 1785
	rts
qnotask	jmp notask
blink	ldx colptr
	dec colptr
	bpl oktab
	ldx #7
	stx colptr
oktab	lda coltab,x
	ldx num
bli	sta vic+39,x
	dex
	bpl bli
	rts
stickok	lda joy
	and #4
	bne no4
	lda sel
	beq no4
	lda #11
	jsr set
	dec sel
no4	lda joy
	and #8
	bne no8
	lda sel
	cmp #2
	bcs no8
	lda #11
	jsr set
	inc sel
no8	rts
set	ldx sel
	ldy mul11,x
	sta colpos,y
	sta colpos+1,y
	sta colpos+2,y
	rts
stick	lda joy
	and #12
	cmp #12
	beq nopress
	dec cnt3
	bne no8
	lda #joyrep
	sta cnt3
	bne stickok
nopress	lda #1
	sta cnt3
	rts
rollin	lda num
	sta a
rlin	dec a
	lda #128
	sta job
	jsr waitj
	lda a
	bne rlin
	rts
waitj	lda job
	bne waitj
	rts
woi	lda i
	asl
	tax
	lda vic,x
	ldx #2
woii	cmp xk,x
	beq alsoda
	dex
	bpl woii
alsoda	rts
weroben	lda xk,x
	sta koord
	ldy #0
loop1a	tya
	asl
	tax
	lda koord
	cmp vic,x
	beq fund1
	iny
	cpy num
	bcc loop1a
	ldy #-1
fund1	rts
makezug	inc zug
	bne nocy
	inc zug+1
nocy	lda s1
	sta a
	lda s3
	sta b
	lda #$90
	sta job
	jmp waitj
whichn3	lda num
	asl
	tax
	ldy num
	lda xk+2
wn3	dex
	dex
	dey
	cmp vic,x
	beq wn3
	lda vic,x
	cmp xk+1
	beq tu1
	lda #0
	.byt $2c
tu1	lda #1
	sta s1
	eor #1
	sta s2
	sty i
	lda #2
	sta s3
	rts
getturm	lda #1
	sta joyflg
waitfire	jsr get
	cmp #"a"
	beq autoon
	lda joy
	and #16
	bne waitfire
	lsr joyflg
	lda sel
	rts
autoon	inc auto
	lsr joyflg
	lda #-1
	rts
textout	sta add+1
	asl
	asl
	asl
add	adc #0
	pha
	lda #<goto
	ldy #>goto
	jsr strout
	pla
	tax
	ldy #0
puttxt	lda texte,x
	ora #128
	sta 1184,y
	inx
	iny
	cpy #9
	bcc puttxt
	rts
getpair	lda #0
	jsr textout
get2	lda #160
	sta zgp
	sta zgp+1
	sta zgp+2
	jsr waitll
	ldx #3
t1o	lda vont,x
	ora #128
	sta 1195,x
	dex
	bpl t1o
	jsr getturm
	bmi autoon2
	sta s1
	clc
	adc #177
	sta zgp
	lda #173
	sta zgp+1
	jsr waitll
	ldx #3
t2o	lda nach,x
	ora #128
	sta 1195,x
	dex
	bpl t2o
	jsr getturm
	bmi autoon2
	cmp s1
	beq get2
	sta s3
	clc
	adc #177
	sta zgp+2
	lda #160
	ldx #3
clrvn	sta 1195,x
	dex
	bpl clrvn
	lda #1
	jsr textout
	clc
	rts
autoon2	sec
	rts
waitll	jsr tti
	lda joy
	and #16
	beq waitll
tti	ldy #0
	ldx #40
time	dey
	bne time
	dex
	bne time
	rts
prueffert	ldx num
	dex
	ldy #0
	lda xk+2
pru	cmp vic,y
	bne fall
	iny
	iny
	dex
	bpl pru
	rts
fall	lda #0
	rts
start	jsr cint
	lda #0
	sta anz1
	sta anz2
	sta anz3
	sta step
	sta job
	sta task
	sta sel
	sta joyflg
	sta zugflg
	sta zug
	sta zug+1
	sta auto
	sta ebeflg
	sta colptr
	sta vic+32
	sta vic+33
	lda #<mask
	ldy #>mask
	jsr strout
	lda #<copr
	ldy #>copr
	jsr strout
	lda #<turm1
	ldy #>turm1
	jsr strout
	lda #<turm2
	ldy #>turm2
	jsr strout
	lda #0
	tay
clrspr	sta 15872,y
	sta 16128,y
	iny
	bne clrspr
	dey
	sty vic+29
	ldy #7
	ldx #255
	stx tmp
setspr	lda tmp
	sta ptr,y
	dec tmp
	dey
	bpl setspr
	lda #62
	sta tmp+1
	iny
	sty tmp
	ldy #0
	lda #7
	sta tmp+3
spr1	sty tmp+2
	tya
	asl
	adc tmp+2
	tax
	ldy #0
spr2	lda tu,x
	sta (tmp),y
	iny
	inx
	cpy #3
	bcc spr2
	lda tmp
	clc
	adc #3
	sta tmp
	bcc spr3
	inc tmp+1
spr3	ldy tmp+2
	dec tmp+3
	bne spr1
	lda #7
	sta tmp+3
	lda tmp
	adc #43
	sta tmp
	bcc spr4
	inc tmp+1
spr4	iny
	cpy #8
	bcc spr1
setirq	sei
	lda irqvec+1
	cmp #>newirq
	beq sat
	sta oldirq+2
	lda irqvec
	sta oldirq+1
	lda #<newirq
	sta irqvec
	lda #>newirq
	sta irqvec+1
sat	lda #1
	sta cnt1
	sta cnt2
	sta cnt3
	lda #irqfrq
	sta timer
	cli
getnum	jsr get
	cmp #"1"
	bcc getnum
	cmp #"9"
	bcs getnum
	sbc #"0"-1
	sta num
	ldx #7
	jsr clrlin
	ldx num
	lda grbit2-1,x
	sta vic+21
	jsr rollin
	ldx #5
	jsr clrlin
	lda #<balken
	ldy #>balken
	jsr strout
	inc zugflg
zuglp	jsr prueffert
	bmi knack
false	jsr getpair
	bcs automatik
	ldx s1
	jsr weroben
	sty pos1
	ldx s3
	jsr weroben
	cpy pos1
	bcc false
	beq false
	jsr makezug
	jmp zuglp
knack	lsr ebeflg
	lda #3
	jsr textout
	lda #<zuop
	ldy #>zuop
	jsr strout
	ldx num
	lda zug
	sec
	sbc grbit2-1,x
	tax
	lda zug+1
	sbc #0
	jsr axout
	lda #<nomal
	ldy #>nomal
	jsr strout
	lda #0
	sta key
getjn	jsr get
	cmp #"j"
	bne noja
	jmp start
noja	cmp #"n"
	bne getjn
	jmp (reset)
automatik	lda #2
	jsr textout
	inc ebeflg
	lda #<autotxt
	ldy #>autotxt
	jsr strout
	jsr whichn3
	lda #0
	sta stackptr
	jsr move
	jmp zuglp
move	lda i
	bne notone
	lda s1
	cmp s3
	bne anders
	rts
anders	jmp makezug
notone	lda s1
	cmp s3
	beq same
	ldx s3
	jsr weroben
	cpy i
	bcc error
	ldx s1
	jsr weroben
	cpy i
	bne error
right	jsr makezug
same	dec i
	jsr woi
	stx s1
	lda #3
	sec
	sbc s3
	sbc s1
	sta s2
	jmp move
error	inc stackptr
	ldx stackptr
	lda i
	sta stacki,x
	lda s1
	sta stacks1,x
	lda s2
	sta stacks2,x
	lda s3
	sta stacks3,x
	dec i
	lda s2
	sta s3
	jsr woi
	stx s1
	lda #3
	sec
	sbc s3
	sbc s1
	sta s2
	jsr move
	ldx stackptr
	dec stackptr
	lda stacki,x
	sta i
	lda stacks1,x
	sta s1
	lda stacks2,x
	sta s2
	lda stacks3,x
	sta s3
	jmp right
