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 1 changed 7 lines
!!! Schnelle Vektoren in ACTION!
General Information
Author: Peter Finzel
Language: ACTION!
Compiler/Interpreter: ACTION!
Published: ATARI Magazin, ACTION! Center 1
[{Image src='vektoreninaction.gif'}]
General Information \\
Author: Peter Finzel \\
Language: ACTION!\\
Compiler/Interpreter: ACTION!\\
Published: ATARI Magazin #1 (01/02-87), ACTION! Center 1\\
At line 7 added 2 lines
!!! Blitzschnelle Vektoren
!!Dieses erste Action!-Center befasst sich mit Grafikanimation auf den 8-Bit-Ataris.
At line 13 changed one line
Wo soviel Licht ist, dar natürlich ein wenig Schatten auch nicht fehlen. Sicherlich der negativste Aspekt an Action! ist der hohe Anschaffungspreis, der immerhin in der Größenordung eines neuen 800XL liegt. Die Programme sollen nur mit eingestecktem Action!-Modul laufen, doch glücklicherweise haben Handbücher nicht immer recht, und es gibt eine Anzahl von Tricks, mit denen man Action!-Programme vom Modul unabhängig macht. Wer meine Assemblerecke in der Zeitschrift CK-Computer Kontakt (6-7/86) verfolgt hat, weiß bereits Bescheid.
Wo soviel Licht ist, dar natürlich ein wenig Schatten auch nicht fehlen. Sicherlich der negativste Aspekt an Action! ist der hohe Anschaffungspreis, der immerhin in der Größenordung eines neuen 800XL liegt. Die Programme sollen nur mit eingestecktem Action!-Modul laufen, doch glücklicherweise haben Handbücher nicht immer recht, und es gibt eine Anzahl von Tricks, mit denen man Action!-Programme vom Modul unabhängig macht. Wer meine [Assemblerecke in der Zeitschrift CK-Computer Kontakt (6-7/86)|ACTION noch schneller] verfolgt hat, weiß bereits Bescheid.
At line 48 changed one line
Die LineTo()-Routine stammt aus dem Programm "View 3D" von Paul Chabot (Antic 6/85). Sie ist sehr schnell, da nur Additionen und Subtraktionen und die Fast_Plot()-Routine benutzt werden. die Prozedur Graphic_Init() aktiviert die Display-List und bereitet Adresstabelle und das Video-RAM vor, während Screen_Switch() zwischen den beiden Bildschirmen (die übrigens bei Adresse $8000 bzw. $8800 beginnen) hin- und herschalten kann.
Die LineTo()-Routine stammt aus dem Programm "[View 3D]" von Paul Chabot (Antic 6/85). Sie ist sehr schnell, da nur Additionen und Subtraktionen und die Fast_Plot()-Routine benutzt werden. die Prozedur Graphic_Init() aktiviert die Display-List und bereitet Adresstabelle und das Video-RAM vor, während Screen_Switch() zwischen den beiden Bildschirmen (die übrigens bei Adresse $8000 bzw. $8800 beginnen) hin- und herschalten kann.
At line 52 added 5 lines
;************************************
; VEKTORGRAPHIK IN ACTION!
;
;P. FINZEL 1986
;************************************
At line 58 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 rowl=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 (Wrkh 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=$A1
BYTE xb=$A2, Xr=$A3
[ $85 $A0 $86 $A1 ]
IF Y<96 THEN
rowl=adrl(y)
rowh=adrh(y)+wrkh
xb=x RSH 3:xr=x AND 7
row(xb)== % mask8(xr)
FI
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=Vram1
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
Wrk=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
LineTo(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