{ $Id$ This file is part of the Free Pascal run time library. Copyright (c) 1993,97 by the Free Pascal development team. See the file COPYING.FPC, included in this distribution, for details about the copyright. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. **********************************************************************} procedure putpixel(x,y:integer;colour:longint); var viewport:viewporttype; begin if aktviewport.clip then viewport:=aktviewport else viewport:=aktscreen; asm xorl %eax,%eax movl %eax,%ebx movw x,%bx movw y,%ax addw _AKTVIEWPORT,%bx addw _AKTVIEWPORT+2,%ax (* cmpw viewport,%bx jl p_exit // wenn x < x1 Ende cmpw -8(%ebp),%bx jg p_exit // wenn x > x2 Ende cmpw -10(%ebp),%ax jl p_exit // wenn y < y1 Ende cmpw -6(%ebp),%ax jg p_exit // wenn y > y2 Ende assumes wrong placement of viewport !!! PM *) lea viewport,%edx cmpw (%edx),%bx jl p_exit // wenn x < x1 Ende cmpw 4(%edx),%bx jg p_exit // wenn x > x2 Ende cmpw 2(%edx),%ax jl p_exit // wenn y < y1 Ende cmpw 6(%edx),%ax jg p_exit // wenn y > y2 Ende movl _Y_ARRAY(,%eax,4),%eax addl _X_ARRAY(,%ebx,4),%eax movl %eax,%esi movl _WINSHIFT,%ecx // { offset / winsize } shrl %cl,%eax // cmpl _AW_BANK,%eax // { same bank ? } je p_dont_switch // { yep } movl %eax,_AW_BANK // { newbank } pushl %eax // movl _BANKSWITCHPTR,%eax // { switchbank } call %eax // p_dont_switch: andl _WINLOMASK,%esi movl colour,%eax addl _WBUFFER,%esi movw _SEG_WRITE,%bx movw _BYTESPERPIXEL,%cx movw %ds,%dx movw %bx,%ds testl $1,%ecx jz pp_2BPP movb %al,(%esi) jnz pp_exit pp_2BPP: movw %ax,(%esi) pp_exit: movw %dx,%ds p_exit: end; end; { proc } procedure pixel(offset:longint); { wird nur intern aufgerufen, umrechnung auf Viewport und Range- } { checking muessen von aufrufender Routine bereits erledigt sein } { Bankswitching wird durchgefuehrt } begin asm movl offset,%eax movl %eax,%esi movl _WINSHIFT,%ecx // { offset / winsize } shrl %cl,%eax // cmpl _AW_BANK,%eax // { same bank ? } je dont_switch // { yep } movl %eax,_AW_BANK // { newbank } pushl %eax // movl _BANKSWITCHPTR,%eax // { switchbank } call %eax // dont_switch: movl _WINLOMASK,%eax andl %eax,%esi movl _AKTCOLOR,%eax movzwl _AKTWRITEMODE,%ecx movw _BYTESPERPIXEL,%bx addl _WBUFFER,%esi movw _SEG_WRITE,%dx movw %ds,%di movw %dx,%ds testl %ecx,%ecx jz dmove shrl %ebx jnc dxor2BPP xorb %al,(%esi) jnc pd_exit dxor2BPP: xorw %ax,(%esi) jnc pd_exit dmove: shrl %ebx jnc dmove2BPP movb %al,(%esi) jc pd_exit dmove2BPP: movw %ax,(%esi) pd_exit: movw %di,%ds end; end; { proc } function getpixel(x,y:integer):longint; var viewport:viewporttype; begin if aktviewport.clip then viewport:=aktviewport else viewport:=aktscreen; asm movswl x,%ebx movswl y,%eax addw _AKTVIEWPORT,%bx addw _AKTVIEWPORT+2,%ax (* cmpw viewport,%bx jl gp_exit // wenn x < x1 Ende cmpw -8(%ebp),%bx jg gp_exit // wenn x > x2 Ende cmpw -10(%ebp),%ax jl gp_exit // wenn y < y1 Ende cmpw -6(%ebp),%ax jg gp_exit // wenn y > y2 Ende same error : viewport is assumed to be at -12 that depends on alignment settings !! PM *) lea viewport,%edx cmpw (%edx),%bx jl gp_exit // wenn x < x1 Ende cmpw 4(%edx),%bx jg gp_exit // wenn x > x2 Ende cmpw 2(%edx),%ax jl gp_exit // wenn y < y1 Ende cmpw 6(%edx),%ax jg gp_exit // wenn y > y2 Ende movl _Y_ARRAY(,%eax,4),%eax addl _X_ARRAY(,%ebx,4),%eax movl %eax,%esi movl _WINSHIFT,%ecx // { offset / winsize } shrl %cl,%eax // cmpl _AW_BANK,%eax // { same bank ? } je g_dont_switch // { yep } pushl %esi // { save Offset } movl %eax,_AW_BANK // { newbank } pushl %eax // movl _BANKSWITCHPTR,%eax // { switchbank } call %eax // popl %esi // { restore Offset } g_dont_switch: movl _WINLOMASK,%eax andl %eax,%esi xorl %eax,%eax movl _BYTESPERPIXEL,%edx addl _WBUFFER,%esi movw _SEG_WRITE,%bx movw %ds,%cx movw %bx,%ds testl $1,%edx // { 1 or 2 BytesPerPixel ? } jnz g_8BPP movw %ds:(%esi),%ax jnz g_Result g_8BPP: movb %ds:(%esi),%al g_Result: movw %cx,%ds movl %eax,__RESULT gp_exit: end; end; { proc } { $Log$ Revision 1.2 1998-10-22 08:22:06 pierre * mandel problem fixed !! Revision 1.1.1.1 1998/03/25 11:18:42 root * Restored version Revision 1.3 1998/01/26 11:58:33 michael + Added log at the end Working file: rtl/dos/ppi/pixel.ppi description: ---------------------------- revision 1.2 date: 1997/12/01 12:21:32; author: michael; state: Exp; lines: +13 -1 + added copyright reference in header. ---------------------------- revision 1.1 date: 1997/11/27 08:33:51; author: michael; state: Exp; Initial revision ---------------------------- revision 1.1.1.1 date: 1997/11/27 08:33:51; author: michael; state: Exp; lines: +0 -0 FPC RTL CVS start ============================================================================= }