;:poke56,32:clr
;:sys36864
	;.opt oo
	*= $c000
;
;hires-plot mit hidden-line
;nikolaus heusler, 6.9.90
;sys 49152      grafik an
;sys 49155      grafik aus
;sys 49158,x,y  punkt setzen
;
;variablen und konstanten
av	=2	;zwischenspeicher
komma	=$aefd	;komma nach sys holen
getkoord	=$b7eb	;x- und y-koordinaten holen
xcoord	=20	;x-koordinate low/high
cint	=65409	;vic initialisieren
mmtab	=$4000	;hidden-line tabelle (768 bytes)
flag	=4	;flag, ob punkt gezeichnet werden soll
;sprungtabelle
	jmp gron	;grafik loeschen und einschalten
	jmp cint	;grafik aus
	jmp set	;punkt mit hidden-line setzen
;mathematische daten
grbit	.byt $80,$40,$20,$10,8,4,2,1	;potenzen
mult	=*	;multiplikationstabelle
	.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
;grafik loeschen
gron	ldx #32
	stx av+1
	ldy #0
	sty av	;zeiger auf 8192, 32 pages
	tya	;loeschen
clr	sta (av),y
	iny
	bne clr
	inc av+1
	dex
	bne clr	;loesch-schleife
	ldx #4
	stx av+1
	ldy #0
	sty av
	lda #1	;grafik faerben
frb	sta (av),y
	iny
	bne frb
	inc av+1
	dex
	bne frb	;faerb-schleife
	lda #26
	sta 53272	;pointer auf grafik
	lda #59
	sta 53265	;grafik ein
;hidden-line-tabelle loeschen
	ldx #3	;3 pages = 768 bytes
	lda #<mmtab
	ldy #>mmtab
	sta av
	sty av+1	;zeiger auf tabelle
	ldy #0
clrhilo	lda #-1
	sta (av),y
	iny	;minimum setzen
	lda #0
	sta (av),y
	iny	;maximum setzen
	bne clrhilo
	inc av+1
	dex
	bne clrhilo	;schleife
	rts	;grafik 'steht' !
;turbo-hires-plot mit hidden-line
set	jsr komma
	jsr getkoord	;komma und parameter holen
	cpx #200
	bcc ok	;y-koordinate pruefen
wrong	rts	;falsche koordinaten, dann zurueck
ok	lda xcoord+1
	beq ok1
	cmp #>320
	bne wrong	;x-koordinate high pruefen
	lda xcoord
	cmp #<320
	bcs wrong	;und low pruefen
;koordinaten ok
;hidden-line-routine
ok1	lda xcoord
	sta av
	lda xcoord+1	;av = x-koordinate * 2 + mmtab
	asl av
	rol
	clc
	adc #>mmtab
	sta av+1
	ldy #0
	sty flag	;0 = punkt nicht zeichnen
;pruefe, ob neues minimum
	txa
	cmp (av),y
	bcs no1	;wenn y-wert > minimum
	sta (av),y	;y-wert = neues minimum
	inc flag	;punkt soll gezeichnet werden
;pruefe, ob neues maximum
no1	iny
	txa
	cmp (av),y
	bcc no2	;wenn y-wert < maximum
	sta (av),y	;y-wert = neues maximum
	inc flag	;punkt soll gezeichnet werden
no2	lda flag
	beq wrong	;null, dann punkt nicht zeichnen
;punkt darf gezeichnet werden
plot	txa
	lsr
	lsr
	lsr
	asl
	tay	;adresse zeilenafg. berechnen
	lda mult+1,y
	sta av+1
	txa
	and #7
	clc
	adc mult,y
	sta av	;av=320*zeile+8192
	lda xcoord
	and #$f8
	adc av
	sta av
	lda av+1
	adc xcoord+1
	sta av+1	;x-offset
	lda xcoord
	and #7
	tax
	lda grbit,x	;bitposition berechnen
	ldy #0
	ora (av),y
	sta (av),y	;punkt in grafik setzen
	rts	;fertig mit turbo-plot
