This page (revision-13) was last changed on 03-Feb-2023 15:21 by Gromit 

This page was created on 19-Dec-2010 21:01 by Carsten Strotmann

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
13 03-Feb-2023 15:21 14 KB Gromit to previous
12 28-Jan-2011 11:05 13 KB Gromit to previous | to last
11 28-Jan-2011 11:03 13 KB Gromit to previous | to last
10 26-Jan-2011 11:20 13 KB Gromit to previous | to last
9 25-Jan-2011 15:54 13 KB Gromit to previous | to last
8 21-Jan-2011 15:01 13 KB Gromit to previous | to last
7 21-Jan-2011 14:36 13 KB Gromit to previous | to last
6 21-Jan-2011 14:34 13 KB Gromit to previous | to last
5 21-Jan-2011 14:19 13 KB Gromit to previous | to last
4 21-Jan-2011 14:18 13 KB Gromit to previous | to last
3 21-Jan-2011 12:57 9 KB Gromit to previous | to last
2 19-Dec-2010 21:02 188 bytes Carsten Strotmann to previous | to last
1 19-Dec-2010 21:01 133 bytes Carsten Strotmann to last

Page References

Incoming links Outgoing links

Version management

Difference between version and

At line 52 added 6 lines
ANMERKUNG: Da der Scan relativ schlecht ist, können Fehler im Listing enthalten sein!!!
;************************************
; VEKTORSRAPHIK IN ACTION!
;
;P. FINZEL 1986
;************************************
At line 59 added 208 lines
DEFINE VRAM1 =“$8000“, ;Screen 1
VRAM2 =“$8800“, ;Screen 1
VRLen =“1920“, ;Laenge Screen
VMax =“40“, ;max. Vergroesserung
Mitte_X=”6”, ;Mitte des
Mitte_Y=”5”, ;Objektes
MODE =”$B$B$B$B$B”
;
;Zero-Page Variable
;
SET $E=$F0 SET $F=0
BYTE ARRAY row
BYTE row1=row, rowh=row+1
BYTE t,a,b,Xnow,Ynow
BYTE dx,dy,xf, yf
;
;Programm ab $7000 ablegen
;=========================
;
SET $E =$7000
SET $491=$7000
;
;
;Variablen und Daten
;===================
;
CARD dlist =560 ;Display-List Zeiger
BYTE color0=708 ;Schattenreg. Farbe 1
;
CARD Wrk =[ $8000 ] ;Zeiger auf bearbeiteten
BYTE Wrkh = Wrk+1 ;Screen (Hrkh int MSB)
BYTE scr =[0] ;momentaner Screen
;------------------------------------
; Die Display-List:
;------------------------------------
BYTE DLST0=[ $70 $70 $70 $4B ]
CARD LMS =[ $8000 ]
BYTE DLST1=[ MODE MODE MODE MODE
MODE MODE MODE MODE
MODE MODE MODE MODE
MODE MODE MODE MODE
MODE MODE MODE $41 ]
CARD DJMP =[ 0 ]
;------------------------------------
; Adresstabelle
;------------------------------------
BYTE ARRAY
adrl(96),adrh(96),
mask8(0)=[128 64 32 16 8 4 2 1]
;------------------------------------
;Objekt in 10x12 Raster:
;------------------------------------
BYTE ARRAY ATARI_L=[
0 3 0:1 4 0:1 4 5:1 1 10:1 0 10
1 3 5:1 3 0:0 5 0:1 7 0:1 7 10
1 5 10:1 5 0:0 8 0:1 9 0:1 9 5
1 12 10:1 11 10:1 8 5:1 8 0:$FF$0$0]
;
;------------------------------------
; Gaphikpunkt setzen
;------------------------------------
PROC Fast_Plot=*(BYTE x1,y1)
BYTE X=$A0, Y=5A1
BYTE xb=$A2, Xr=$A3
[ $85 $A0 $86 $A1 ]
IF Y<96 THEN
rowl=adrl(y) rouh=adrh(y)+wrkh
xb=x RSH 3:xr=x AND 7
row(xb)== % mask8(xr)
Fl
RETURN
;------------------------------------
;Graphik-Linie ziehen
;------------------------------------
PROC LineTo(BYTE x,y)
BYTE i
Fast_Plot(xnow,ynow)
IF x=xnow AND y=ynow THEN RETURN FI
IF x>xnow THEN
dx=x-xnow:xf=1
ELSE
dx=xnow-x:xf=$FF
FI
IF y>ynow THEN
dy=y-ynow:yf=1
ELSE
dy=ynow—y:yf=$FF
FI
x=xnow:y=ynow
IF dx>dy THEN
a=dy+dy:t=a-dx:b=t-dx
FOR i=1 TO dx
DO
x==+xf
IF t>127 THEN
t==+a
ELSE
t==+b:y==+yf
FI
Fast_Plot(x,y)
OD
ELSE
a=dx+dx:t=a-dy:b=t-dy
FOR i=1 TO dy
DO
y==+yf
IF t>127 THEN
t==+a
ELSE
t==+b:x==+xf
FI
Fast_Plot(x,y)
OD
FI
xnow=x:ynow=y
RETURN
;------------------------------------
;Page-Flipping: Screen wechseln
;------------------------------------
PROC Switch_Screen=*()
IF scr=0 THEN
Lms=Vram2
Wrk=Vram1
ELSE
Lms=Vraml
Wrk=Vram2
FI
scr==+1&1
Zero(Wrk,VRLen)
RETURN
;------------------------------------
;Display-List & Adresstabelle anlegen
;------------------------------------
PROC Graphic_Init()
BYTE i
row=0
FOR i=0 TO 95
DO
adrl(i)=rowl
adrh(i)=rowh
row==+20
OD
Zero(Vram1,Vrlen)
Zero(Vram2,Vrlen)
scr=0
Lms=Vram1
Hrk=Vram2
DJMP=@Dlst0
Dlist=@Dlst0
RETURN
;------------------------------------
;Graphik-Koerper zeichnen
;------------------------------------
PROC Draw(BYTE ARRAY Def,BYTE vergr,
INT xrel,yrel)
BYTE i
INT X,Y
IF Vergr=0 THEN RETURN FI
i=0
WHILE Def(i)<>$FF
DO
X=Def(i+1) X==+xrel-Mitte_X
Y=Def(i+2) Y==+yrel-Mitte_Y
X==*Vergr/10+79
Y==*Vergr/10+48
IF Def(i)=0 THEN
Xnow=X Ynow=Y
ELSE
LineTD(X,Y)
FI
i==+3
OD
RETURN
;------------------------------------
;Das Hauptprogramm
;------------------------------------
PROC Vektorgraphik()
BYTE i
Graphic_Init()
DO
FOR i=0 TO VMax STEP 3
DO
DRAW(ATARI_L,i,7,0)
DRAW(ATARI_L,Vmax-i,0-7,0)
Switch_Screen()
OD
FOR i=0 TO VMax STEP 3
DO
DRAW(ATARI_L,Vmax-i,7,0)
DRAW(ATARI_L,i,0-7,0)
Switch_Screen()
OD
OD
RETURN