fixed bug with comparing wrong viewport variables
[rocksndiamonds.git] / src / game_sp / ASM.c
index 6f0484ae766b062dc7ca09a6c25be4bb939a220e..ae2de3ee77544498b0d27e62d0c94a4cc50aaba7 100644 (file)
 
 #include "ASM.h"
 
-// static char *VB_Name = "modASM";
 
-// --- Option Explicit
-
-// PseudoRegisters:
-// Public ax%, bx%
-// --- const int ByteMask = 0xFF;
-int cmpFlag;
-
-void Neg(int *Val)
-{
-  *Val = -*Val;
-}
-
-void Mov(int *Var, int Val)
-{
-  *Var = Val;
-}
-
-void MovLowByte(int *Var, int Val)
-{
-  *Var = (*Var & 0xFF00) | (Val & 0xFF);
-}
-
-void MovHighByte(int *Var, int Val)
-{
-  int Tmp;
-
-  Tmp = Val & 0x7F;
-  Tmp = 0x100 * Tmp;
-  if ((Val & 0x80) != 0)
-    Tmp = Tmp | 0x8000;
-
-  *Var = (*Var & 0xFF) | Tmp;
-}
-
-int LowByte(int Var)
-{
-  int LowByte;
-
-  // Dim Tmp As Byte
-  LowByte = (Var & 0xFF);
-  // LowByte = ByteToInt(Tmp)
-
-  return LowByte;
-}
-
-int HighByte(int Var)
-{
-  int HighByte;
-
-  if (Var & 0x8000)
-  {
-    HighByte = ((Var & 0x7FFF) / 0x100) | 0x80;
-  }
-  else
-  {
-    HighByte = Var / 0x100;
-  }
-
-  return HighByte;
-}
-
-int SgnHighByte(int Var) // extends the signum to 16 bit
-{
-  int SgnHighByte;
-
-  if (Var & 0x8000)
-  {
-    SgnHighByte = ((Var & 0x7FFF) / 0x100) | 0xFF80;
-  }
-  else
-  {
-    SgnHighByte = Var / 0x100;
-  }
-
-  return SgnHighByte;
-}
-
-boolean Less()
-{
-  boolean Less;
-
-  Less = (cmpFlag < 0);
-
-  return Less;
-}
-
-boolean GreaterOrEqual()
-{
-  boolean GreaterOrEqual;
-
-  GreaterOrEqual = (0 <= cmpFlag);
-
-  return GreaterOrEqual;
-}
-
-boolean Equal()
-{
-  boolean Equal;
-
-  Equal = (0 == cmpFlag);
-
-  return Equal;
-}
-
-void CMP(int A, int B)
-{
-  cmpFlag = A - B;
-}
-
-void Add(int *A, int B)
-{
-  *A = *A + B;
-}
-
-void MySub(int *A, int B)
+void MovLowByte(int *p, int i)
 {
-  *A = *A - B;
+  *p = (*p & 0xff00) | (i & 0xff);
 }
 
-int SHR(int Var, int Count)
+void MovHighByte(int *p, int i)
 {
-  int SHR;
-
-  int i;
-
-  if (Var & 0x8000)
-  {
-    Var = ((Var & 0x7FFF) / 2) | 0x4000;
-  }
-  else
-  {
-    Var = Var / 2;
-  }
-
-  for (i = 2; i <= Count; i++)
-  {
-    Var = Var / 2;
-  }
-
-  return SHR;
+  *p = (*p & 0xff) | ((i << 8) & 0xff00);
 }
 
-int SHL(int Var, int Count)
+int LowByte(int i)
 {
-  int SHL;
-
-  int i;
-
-  for (i = 1; i <= Count; i++)
-  {
-    Var = Var & 0x7FFF;
-    if ((Var & 0x4000) != 0)
-    {
-      Var = (2 * (Var & 0x3FFF)) | 0x8000;
-    }
-    else
-    {
-      Var = 2 * Var;
-    }
-  }
-
-  return SHL;
+  return (i & 0xff);
 }
 
-int ByteToInt(byte B)
+int HighByte(int i)
 {
-  int ByteToInt;
-
-  if ((B & 0x80) == 0x80)
-  {
-    ByteToInt = -(0xFF - B + 1);
-  }
-  else
-  {
-    ByteToInt = B;
-  }
-
-  return ByteToInt;
+  return ((i >> 8) & 0xff);
 }
 
-byte IntToByte(int i)
+int SgnHighByte(int i)
 {
-  byte IntToByte;
-
-  // IntToByte = CByte(i & 0xFF);
-  IntToByte = (byte)(i & 0xFF);
-
-  return IntToByte;
+  return (signed char)HighByte(i);
 }
 
-void XCHG(int A, int B)
+int ByteToInt(byte b)
 {
-  int Tmp;
-
-  Tmp = B;
-  B = A;
-  A = Tmp;
+  return (signed char)b;
 }