home *** CD-ROM | disk | FTP | other *** search
-
- Cornelis van der Laan
-
-
- - ASMGRAPH.DEF Definitionsmodul zu ASMGRAPH.ASM
- - ASMGRAPH.ASM Assemblermodul für Topspeed Modula-2
- Bietet 16 Farben auf dem Schneider PC und
- einen Line-Algorithmus, der auch von anderen
- Graphikkarten benutzt werden kann.
-
-
- Da bei Topspeed Modula-2 der Modul GRAPH die Graphikmöglichkeiten
- des Schneider PC 1512 nicht unterstützt, ja sogar nicht einmal den
- 640 x 200 Hires-Mode der CGA-Karte, habe ich kurzerhand ein
- entsprechendes Modul in Assembler kodiert, das die entsprechenden
- Prozeduren zur Verfügung stellt.
-
- Da Modula-2 durch die Modularisierung hervorragend geeignet ist,
- auch Module von anderen Sprachen zu benutzen (sofern sie sich an
- die Aufrufkonventionen halten), bereitete die Einbindung des
- Assemblermoduls keine größeren Schwierigkeiten.
-
- Ein Codesegment bekommt in Topspeed den Namen 'C_Modulname', wird
- in die Gruppe 'G_Modulname' gesteckt, und exportiert die Prozeduren
- als 'Modulname$Prozedurname'. Das Datensegment heißt 'D_Modulname',
- liegt in der Gruppe 'MDATA' und die Variablen heißen
- 'Modulname@Variablenname'. Die gleiche Konvention gilt, wenn externe
- Variablen aus anderen Modulen importiert werden sollen.
- Eventueller Initialisierungscode steht in der speziellen Gruppe 'G_CODE'
- und das Segment dazu heißt schlicht 'INITCODE'. Dieses Segment muß den
- Code über das öffentliche Label 'Modulname@' zur Verfügung stellen (nicht
- als Prozedur).
-
- Die Einbindung eines fremden Moduls erfolgt über ein entsprechendes
- Definitionsmodul, das die im Modul exportierten Prozeduren und
- Variablen deklariert.
-
- Nachdem das Assemblermodul also mit
-
- MASM ASMGRAPH /ml;
-
- assembliert wurde, können die Prozeduren wie gewohnt importiert werden.
- (Die Option ist dabei wichtig, da sonst alle Symbole ohne Rücksicht auf
- Wünsche des Programmierers in Großbuchstaben umgewandelt werden !)
- Der Linker besorgt dann den Rest.
-
- Der Einbau der Erweiterungen geht wie
- folgt:
- In das Definitionsmodel von GRAPH wird
- hinter
- PROCEDURE InitATT;
- die neue Initialisierungsroutine
- eingatragen:
- PROCEDURE Init1512;
- Hinter HLine : HLineProc ;
- wird die neue Prozedur Clear
- geschrieben: Clear : PROC ;
-
- zwei Prozedurköpfe werden hinter der
- PROCEDURE ATTHLine angefügt:
-
- PROCEDURE MyHLine(x, y, x2 :
- CARDINAL; color : CARDINAL);
-
- PROCEDURE Line1512(x1,y1,x2,y2,color :
- CARDINAL);
-
- Im Implementationsteil müssen die
- Assemblerroutinen importiert werden:
-
- FROM ASMGraph IMPORT ASMHiRes,
- ASMText, ASMPlot, ASMPoint,
- ASMLine;
-
- Zum Schluß müssen Sie noch den
- Amstrad-spezifischen Kram aus Listing
- 2 hinter den
- ATT-Routinen und vor dem
- Geräteunabhängigen Teil einfügen und
- im Initialisierungsteil des
- Grafikmoduls Init1512 aufrufen
- (standardmäßig ist ja CGA
- eingestellt).
-
- Als kleines Demo bietet sich das Programm 'Pulsierende Kristalle' von
- Matthias Uphoff aus der TOOLBOX 9'89 S. 40 oder das Beispielprogamm Nr. 6,
- das zum Topspeed Compiler mitgeliefert wird, an.