;: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 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