;************************************** ;* Grundlegende Grafik Prozeduren * ;* * ;* 2010 H.V.Viehof * ;* Ver. 1.0001 * ;************************************** ;---------------------------------------------------------- ; SetGraph Macro - Graphikmodus setzen ;---------------------------------------------------------- SetGraph MACRO ; al = Modus mov ah, 0 ; die Funktion 0 des Videointerupts int 010h #EM ;---------------------------------------------------------- ; DrawPixel Macro - einzelnen Punkt zeichnen ;---------------------------------------------------------- DrawPixel MACRO ; einzelne Punkte setzen mov ah, 0Ch ; al = Farbe int 010h ; cx = x pos und dx = y pos #EM ;---------------------------------------------------------- ; DrawLine Macro - horizontale Linie ; dx = position y / hoehe ; al = farbe ;---------------------------------------------------------- DrawLine MACRO mov cx, 0 L99: DrawPixel ; Grafikinterrupt inc cx ; cx hochzaehlen fuer naechsten Punkt cmp cx, 027fh ; zeichne eine Linie, die 0x280 Spalten lang ist jl L99 ; den naechsten Punkt zeichnen #EM ;---------------------------------------------------------- ; DrawVLine Macro - zeichnet vertikale Linie ; cx = position x ; al = farbe ;---------------------------------------------------------- DrawVLine MACRO ; fast das selbe Macro fuer die vertikalen Linien mov dx, 0 L98: DrawPixel inc dx cmp dx, 01e0h ; zeichne eine vertikale Linie jl L98 #EM ;---------------------------------------------------------- ; Grid Prozedur - zeichnet ein Raster ; bx = Rasterabstand ; al = Farbe ;---------------------------------------------------------- Grid PROC FAR mov dx, 0 ; Startwert fuer die erste hor. Linie X1: DrawLine ; Das Macro oben add dx, bx ; plus 20 = Position der naechsten Linie cmp dx, 01e0h ; unten angekommen? jle X1 ; noch nicht? dann: weitere Linie mov cx, 0 ; Startwert fuer die erste ver. Linie X2: DrawVLine ; im Prinzip dasselbe wie fuer die horz. Linien... add cx, bx cmp cx, 0280h jle X2 ret Grid ENDP ;---------------------------------------------------------- ; TextA Prozedur - Erzeugt ein Textfenster ; dh = oberer Rand ; di = linker Rand ; si = offset von Text im Speicher ; bl = farbe ; Zeilenende = 0a, Textende = 0 ;---------------------------------------------------------- TextA PROC FAR mov cx, 1 and di, 0ffh L5: xor dl, dl or dx, di L3: ds:lodsb ; zeichen holen cmp al, 0 ; 0 beendet die Textausgabe jz >E1 ; Ende Textdarstellung cmp al, 0a ; oa ist Ende der dargestellten Zeile jnz L1 inc dh jmp L5 L1: push dx xor bh, bh mov ah, 2 ; cursor setzen int 010h mov ah, 9 int 010h pop dx inc dl jmp L3 E1: ret TextA ENDP ;______________________________________ ; ;datensegment I: ;______________________________________ color segment public word 'daten' table label far db 0f ; hellweiss db 0e ; hellgelb db 0b ; hellcyan db 0a ; hellgruen db 0d ; magenta db 0c ; hellrot db 9 ; hellblau db 0 ; schwarz (db 8 = grau) db 7 ; weiss db 6 ; gelb db 3 ; cyan db 2 ; gruen db 5 ; purpur db 4 ; rot db 1 ; blau db 0 ; schwarz color ends