Browse Source

* split GetPixelX into strictly pascal and strictly asm version

git-svn-id: trunk@41015 -
nickysn 6 years ago
parent
commit
44a193a027
1 changed files with 39 additions and 71 deletions
  1. 39 71
      packages/graph/src/msdos/graph.pp

+ 39 - 71
packages/graph/src/msdos/graph.pp

@@ -2476,82 +2476,50 @@ const CrtAddress: word = 0;
 
 
 
 
 {$undef asmgraph}
 {$undef asmgraph}
- Function GetPixelX(X,Y: smallint): ColorType;
 {$ifndef asmgraph}
 {$ifndef asmgraph}
- var offset: word;
-{$endif asmgraph}
+ function GetPixelX(X,Y: smallint): ColorType;
+  var offset: word;
   begin
   begin
-     X:= X + StartXViewPort;
-     Y:= Y + StartYViewPort;
-{$ifndef asmgraph}
-     offset := y * 80 + x shr 2 + VideoOfs;
-     PortW[$3ce] := ((x and 3) shl 8) + 4;
-     GetPixelX := Mem[SegA000:offset];
+    X := X + StartXViewPort;
+    Y := Y + StartYViewPort;
+    offset := y * 80 + x shr 2 + VideoOfs;
+    PortW[$3ce] := ((x and 3) shl 8) + 4;
+    GetPixelX := Mem[SegA000:offset];
+  end;
 {$else asmgraph}
 {$else asmgraph}
+ function GetPixelX(X,Y: smallint): ColorType;
+  begin
+    X := X + StartXViewPort;
+    Y := Y + StartYViewPort;
     asm
     asm
-  {$ifndef fpc}
-     mov di,[Y]                   ; (* DI = Y coordinate                 *)
-     (* 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, 1                    ; (* Faster on 286/86 machines         *)
-     shr ax, 1
-     add di, ax                ; {DI = Y * LINESIZE + (X SHR 2) }
-     add di, [VideoOfs]  ; (* Pointing at start of Active page *)
-    (* Select plane to use *)
-    mov dx, 03c4h
-    mov ax, FirstPlane        ; (* Map Mask & Plane Select Register *)
-    and cl, 03h               ; (* Get Plane Bits                   *)
-    shl ah, cl                ; (* Get Plane Select Value           *)
-    out dx, ax
-   (* End selection of plane *)
-    mov es,[SegA000]
-    mov al, ES:[DI]
-    xor ah, ah
-    mov @Result, ax
-  {$else fpc}
-     push eax
-     push ebx
-     push ecx
-     push edx
-     push edi
-     movzx edi,[Y]                   ; (* DI = Y coordinate                 *)
-     (* Multiply by 80 start *)
-     mov ebx, edi
-     shl edi, 6                    ; (* Faster on 286/386/486 machines    *)
-     shl ebx, 4
-     add edi, ebx                   ;  (* Multiply Value by 80             *)
-     (* End multiply by 80  *)
-     movzx ecx, [X]
-     movzx eax, [Y]
-    {DI = Y * LINESIZE, BX = X, coordinates admissible}
-     shr eax, 2
-     add edi, eax                ; {DI = Y * LINESIZE + (X SHR 2) }
-     add edi, [VideoOfs]  ; (* Pointing at start of Active page *)
-    (* Select plane to use *)
-    mov dx, 03c4h
-    mov ax, FirstPlane        ; (* Map Mask & Plane Select Register *)
-    and cl, 03h               ; (* Get Plane Bits                   *)
-    shl ah, cl                ; (* Get Plane Select Value           *)
-    out dx, ax
-   (* End selection of plane *)
-    mov ax, fs:[edi+$a0000]
-    mov @Result, ax
-    pop edi
-    pop edx
-    pop ecx
-    pop ebx
-    pop eax
-  {$endif fpc}
-   end;
+      mov di,[Y]                   ; (* DI = Y coordinate                 *)
+      (* 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, 1                    ; (* Faster on 286/86 machines         *)
+      shr ax, 1
+      add di, ax                ; {DI = Y * LINESIZE + (X SHR 2) }
+      add di, [VideoOfs]  ; (* Pointing at start of Active page *)
+      (* Select plane to use *)
+      mov dx, 03c4h
+      mov ax, FirstPlane        ; (* Map Mask & Plane Select Register *)
+      and cl, 03h               ; (* Get Plane Bits                   *)
+      shl ah, cl                ; (* Get Plane Select Value           *)
+      out dx, ax
+      (* End selection of plane *)
+      mov es,[SegA000]
+      mov al, ES:[DI]
+      xor ah, ah
+      mov @Result, ax
+    end;
+  end;
 {$endif asmgraph}
 {$endif asmgraph}
- end;
 
 
  procedure SetVisualX(page: word);
  procedure SetVisualX(page: word);
   { 4 page supPort... }
   { 4 page supPort... }