; CALCXY.ASM: Berechnet Segment und Offset desBytes im Video-RAM, sowie ; die Bitmaske fr das passende Bit bei gegebener X- und ; Y-Koordinate ; ; Autor: Frank Riemenschneider ; ; Eingabe: AX = X-Koordinate (0-239) ; BX = Y-Koordinate (0-63) ; Ausgabe: ES = Segmentadresse des Bytes im Video-RAM ; DI = Offsetadresse des Bytes im Video-RAM ; DL = Bitmaske des Bytes im Video-RAM DATASEG extrn adrtab : DWORD CODESEG PROC CalcXY push cx push si mov cx, ax ; Koordinaten nochmal fr sp„tere ; Verwendung in der Berechnung retten mov dx, 0b000h ; Offset EGA-Karte laden lea si, adrtab ; Adresse der Zeilenanf„nge der EGA-Karte laden mov es, dx ; Segmentadresse laden ; Offsetadresse berechnen shl bx, 1 ; Tabelle enth„lt Wort-Werte, also ; Y-Koordinate verdoppeln mov dx, [si+bx] ; Adresse desZeilenanfanges laden shr ax, 1 shr ax, 1 shr ax, 1 ; x/8 add dx, ax ; Spaltenoffset addieren mov di, dx ; DI mit Offset laden ; Berechnung der Bitmaske and cl, 7 ; x MOD 8 mov dl, 80h ; Maske fr Bit 0 shr dl, cl ; Maske fr gewnschtes Bit durch Rotation ; der ursprnglichen Maske erzeugen pop si pop cx ret ; Back home ENDP CalcXY ; ASMTEST.ASM: Testet einen Punkt im Grafik-Bildschirm ; ; Autor: Frank Riemenschneider ; ; Eingabe: AX = X-Koordinate (0-239) ; BX = Y-Koordinate (0-63) ; Ausgabe: DX = Farbe des Punktes DATASEG extrn farbe : word CODESEG PROC AsmTest push cx ; Stack kommen push si push di mov dl, [BYTE farbe] ; Default : Punktgesetzt call CalcXY ; Offset- und Segmentadresse, sowie die ; Bitmaske aus den X- und Y-Koordinaten ; berechnen mov ch, [es:di] ; Byte aus dem Video-RAM lesen and dl, ch ; Bit testen jz TestExit1 ; Ergebnis 0 => schwarz mov dl, [BYTE farbe] ; Punkt ist weiá TestExit1: xor dh, dh ; Hi-Byte l”schen pop di ; Alle Register wieder von den B„umen, pop si ; „h, Stack herunterholen pop cx ret ; Back home ENDP ; TEST.ASM: Regelt die Parameterbernahme von Turbo Pascal aus fr ; die ASMTEST-Routine in Turbo Assembler ; ; Autor: Frank Riemenschneider ; ; Eingabe: Parameter der TESTPIXEL-Funktion auf dem Stack ; TestPixel( X, Y : WORD ); ; Ausgabe: Farbe des Punktes CODESEG PROC TestPixel FAR Xkoord:WORD, Ykoord:WORD PUBLIC TestPixel mov ax, [Xkoord] ; X- und Y-Koordinaten in die mov bx, [Ykoord] ; entsprechenden Register bringen cmp ax, 0 ; X-Koordinate < 0? jl TestExit ; Ja -> Rcksprung cmp ax, 239 ; X-Koordinate > 239? jg TestExit ; Ja -> Rcksprung cmp bx, 0 ; Y-Koordinate < 0? jl TestExit ; Ja -> Rcksprung cmp bx, 63 ; Y-Koordinate > 63? jg TestExit ; Ja -> Rcksprung call AsmTest ; Test-Routine aufrufen xor dh, dh mov ax, dx ; Farbe zurckgeben TestExit: ret ; Back home ENDP