; ASMPIESLICE.ASM: Zeichnet einen 2D-Kuchenstck, d.h. einen Ellipsenbogen und ; Linien vom Mittelpunkt zum Anfangs- und Endpunkt des Bogens ; ; Autor: Frank Riemenschneider ; ; Eingabe: AX = X-Koordinate Ellipsenmittelpunkt (0-239) ; BX = Y-Koordinate Ellipsenmittelpunkt (0-63) ; CX = Radius in X-Richtung (0-255) ; DX = Radius in Y-Richtung (0-255) ; ES = Anfangswinkel in Grad (0-359) ; SI = Endwinkel in Grad (0-360) ; Ausgabe: keine DATASEG ; Bentigte Variable extrn ArcStartX : DWORD extrn ArcStartY : DWORD extrn ArcEndX : DWORD extrn ArcEndY : DWORD CODESEG PROC AsmPieSlice ; Register retten push ax push bx push cx push dx push es push si push di call AsmCurve ; Ellipsenbogen zeichnen mov cx, [WORD ArcStartX] ; Koordinaten des Startpunktes des Bogens laden mov dx, [WORD ArcStartY] call AsmLine ; Linie vom Mittelpunkt dorthin ziehen mov cx, [WORD ArcEndX] ; Koordinaten des Endpunktes des Bogens laden mov dx, [WORD ArcEndY] call AsmLine ; Linie vom Mittelpunkt dorthin ziehen pop di ; Alle Registerinhalte wieder pop si ; laden pop es pop dx pop cx pop bx pop ax ret ; Back home ENDP ; SLICE.ASM: Regelt die Parameterbernahme von Turbo Pascal aus fr ; die ASMPIESLICE-Routine in Turbo Assembler ; ; Autor: Frank Riemenschneider ; ; Eingabe: Parameter der SLICE-Funktion auf dem Stack ; Slice( XM, YM, XR, YR, AnfWinkel, EndWinkel:WORD ); ; Ausgabe: keine CODESEG PROC Slice FAR XMP:WORD, YMP:WORD, XRA:WORD, YRA:WORD, AnfWinkel:WORD, EndWinkel:WORD PUBLIC Slice mov ax, [XMP] ; Mittelpunkt-Koordinaten mov bx, [YMP] mov cx, [XRA] ; Radius in X- und Y-Richtung mov dx, [YRA] mov es, [AnfWinkel] ; Anfangs- und Endwinkel mov si, [EndWinkel] ; Koordinaten prfen cmp ax, 0 ; X-Koordinate < 0? jl PieSliceExit cmp ax, 239 ; X-Koordinate > 239? jg PieSliceExit cmp bx, 0 ; Y-Koordinate < 0? jl PieSliceExit cmp bx, 63 ; Y-Koordinate > 63? jg PieSliceExit cmp cx, 0 ; X-Radius < 0? jl PieSliceExit cmp cx, 255 ; X-Radius > 255? jg PieSliceExit cmp dx, 0 ; Y-Radius < 0? jl PieSliceExit cmp dx, 255 ; Y-Radius > 255? jg PieSliceExit push ax mov ax, es cmp ax, 0 ; Anfangswinkel < 0? jl PieSliceExit cmp ax, 359 ; Anfangswinkel > 359? jg PieSliceExit pop ax cmp si, 0 ; Endwinkel < 0? jl PieSliceExit cmp si, 360 ; Endwinkel > 360? jg PieSliceExit call AsmPieSlice ; PieSlice-Routine aufrufen PieSliceExit: ret ; Back home ENDP