From a55555aecc7e4a4733b6ec429c599b39420e0c83 Mon Sep 17 00:00:00 2001 From: Tomas Hajny Date: Sat, 6 Mar 2004 23:18:02 +0000 Subject: [PATCH] * proper regcall fixes --- rtl/go32v2/graph.pp | 103 ++++++++++++++++++++++++++++++-------------- 1 file changed, 70 insertions(+), 33 deletions(-) diff --git a/rtl/go32v2/graph.pp b/rtl/go32v2/graph.pp index a6a30c1731..10ad594f2d 100644 --- a/rtl/go32v2/graph.pp +++ b/rtl/go32v2/graph.pp @@ -1100,35 +1100,43 @@ End; mov es:[di], al end; {$else fpc} - assembler;stdcall; + assembler; asm push edi push ebx - movsx edi, x - movsx ebx, y - cmp clippixels, 0 - je @putpix320noclip - test edi, edi - jl @putpix320done - test ebx, ebx - jl @putpix320done - cmp di, ViewWidth - jg @putpix320done - cmp bx, ViewHeight - jg @putpix320done - @putpix320noclip: - movsx ecx, StartYViewPort - movsx edx, StartXViewPort - add ebx, ecx - add edi, edx +{$IFDEF REGCALL} + movsx edi, ax + movsx ebx, dx + mov al, cl +{$ELSE REGCALL} + movsx edi, x + movsx ebx, y +{$ENDIF REGCALL} + cmp clippixels, 0 + je @putpix320noclip + test edi, edi + jl @putpix320done + test ebx, ebx + jl @putpix320done + cmp di, ViewWidth + jg @putpix320done + cmp bx, ViewHeight + jg @putpix320done +@putpix320noclip: + movsx ecx, StartYViewPort + movsx edx, StartXViewPort + add ebx, ecx + add edi, edx { add edi, [VideoOfs] no multiple pages in 320*200*256 } - mov ax, [pixel] - shl ebx, 6 - add edi, ebx - mov fs:[edi+ebx*4+$a0000], al - @putpix320done: - pop ebx - pop edi +{$IFNDEF REGCALL} + mov ax, [pixel] +{$ENDIF REGCALL} + shl ebx, 6 + add edi, ebx + mov fs:[edi+ebx*4+$a0000], al +@putpix320done: + pop ebx + pop edi {$endif fpc} end; @@ -1152,12 +1160,17 @@ End; mov @Result,ax end; {$else fpc} - assembler;stdcall; + assembler; asm push edi push ebx +{$IFDEF REGCALL} + movsx edi, ax + movsx ebx, dx +{$ELSE REGCALL} movsx edi, x movsx ebx, y +{$ENDIF REGCALL} movsx ecx, StartYViewPort movsx edx, StartXViewPort add ebx, ecx @@ -1190,7 +1203,7 @@ End; end; {$else asmgraph} { note: still needs or/and/notput support !!!!! (JM) } - assembler;stdcall; + assembler; asm {$ifndef fpc} mov es, [SegA000] @@ -1211,8 +1224,13 @@ End; {$else fpc} push edi push ebx +{$IFDEF REGCALL} + movzx edi, ax + movzx ebx, dx +{$ELSE REGCALL} movzx edi, x movzx ebx, y +{$ENDIF REGCALL} { add edi, [VideoOfs] no multiple pages in 320*200*256 } shl ebx, 6 add edi, ebx @@ -1394,10 +1412,13 @@ const CrtAddress: word = 0; procedure SetVisualX(page: word); {$ifndef fpc}far;{$endif fpc} { 4 page supPort... } - Procedure SetVisibleStart(AOffset: word); Assembler;stdcall; + Procedure SetVisibleStart(AOffset: word); Assembler; (* Select where the left corner of the screen will be *) { By Matt Pritchard } asm +{$IFDEF REGCALL} + mov cx, ax +{$ENDIF REGCALL} { Wait if we are currently in a Vertical Retrace } MOV DX, INPUT_1 { Input Status #1 Register } @DP_WAIT0: @@ -1415,10 +1436,18 @@ const CrtAddress: word = 0; MOV AL, START_DISP_HI { Display Start High Register } MOV AH, BYTE PTR [AOffset+1] { High 8 Bits of Start Addr } {$else fpc} +{$IFDEF REGCALL} + mov ah, cl +{$ELSE REGCALL} mov ah, byte [AOffset] +{$ENDIF REGCALL} out dx, ax mov AL, START_DISP_HI +{$IFDEF REGCALL} + mov ah, ch +{$ELSE REGCALL} mov ah, byte [AOffset+1] +{$ENDIF REGCALL} {$endif fpc} OUT DX, AX { Set Display Addr High } { Wait for a Vertical Retrace to smooth out things } @@ -1545,17 +1574,22 @@ const CrtAddress: word = 0; end; {$else asmgraph} { note: still needs or/and/notput support !!!!! (JM) } - Assembler;stdcall; + Assembler; asm - mov di,[Y] ; (* DI = Y coordinate *) +{$IFDEF REGCALL} + mov cl, al + mov di, dx +{$ELSE REGCALL} + mov cx, [X] + mov ax, cx + mov di, [Y] ; (* DI = Y coordinate *) +{$ENDIF REGCALL} (* Multiply by 80 start *) mov bx, di shl di, 6 ; (* Faster on 286/386/486 machines *) shl bx, 4 add di, bx ; (* Multiply Value by 80 *) (* End multiply by 80 *) - mov cx, [X] - mov ax, cx {DI = Y * LINESIZE, BX = X, coordinates admissible} shr ax, 2 add di, ax ; {DI = Y * LINESIZE + (X SHR 2) } @@ -2746,7 +2780,10 @@ begin end. { $Log$ - Revision 1.11 2003-12-04 21:42:07 peter + Revision 1.12 2004-03-06 23:18:02 hajny + * proper regcall fixes + + Revision 1.11 2003/12/04 21:42:07 peter * register calling updates Revision 1.10 2003/10/03 21:46:25 peter