X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_sp%2FASM.c;h=d31edfaed7f626ce516986d9f13a500b38b1fbc0;hb=9401cea7061b513534a3244edd8944e852a28c7b;hp=6f0484ae766b062dc7ca09a6c25be4bb939a220e;hpb=8d3d7d213a9691455a49544624bf380e85f43461;p=rocksndiamonds.git diff --git a/src/game_sp/ASM.c b/src/game_sp/ASM.c index 6f0484ae..d31edfae 100644 --- a/src/game_sp/ASM.c +++ b/src/game_sp/ASM.c @@ -4,19 +4,6 @@ #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) { @@ -34,6 +21,7 @@ void MovHighByte(int *Var, int Val) Tmp = Val & 0x7F; Tmp = 0x100 * Tmp; + if ((Val & 0x80) != 0) Tmp = Tmp | 0x8000; @@ -44,9 +32,7 @@ int LowByte(int Var) { int LowByte; - // Dim Tmp As Byte LowByte = (Var & 0xFF); - // LowByte = ByteToInt(Tmp) return LowByte; } @@ -56,132 +42,73 @@ 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 { +#if 1 + short SgnHighByte; +#else int SgnHighByte; +#endif 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() +int SHL(int *Var, int Count) { - boolean GreaterOrEqual; - - GreaterOrEqual = (0 <= cmpFlag); - - return GreaterOrEqual; -} - -boolean Equal() -{ - boolean Equal; - - Equal = (0 == cmpFlag); + int SHL; - return Equal; -} + int i; -void CMP(int A, int B) -{ - cmpFlag = A - B; -} + for (i = 1; i <= Count; i++) + { + *Var = *Var & 0x7FFF; -void Add(int *A, int B) -{ - *A = *A + B; -} + if ((*Var & 0x4000) != 0) + *Var = (2 * (*Var & 0x3FFF)) | 0x8000; + else + *Var = 2 * *Var; + } -void MySub(int *A, int B) -{ - *A = *A - B; + return SHL; } -int SHR(int Var, int Count) +int SHR(int *Var, int Count) { int SHR; int i; - if (Var & 0x8000) - { - Var = ((Var & 0x7FFF) / 2) | 0x4000; - } + if (*Var & 0x8000) + *Var = ((*Var & 0x7FFF) / 2) | 0x4000; else - { - Var = Var / 2; - } + *Var = *Var / 2; for (i = 2; i <= Count; i++) - { - Var = Var / 2; - } + *Var = *Var / 2; return SHR; } -int SHL(int Var, int Count) -{ - 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; -} - int ByteToInt(byte B) { int ByteToInt; if ((B & 0x80) == 0x80) - { ByteToInt = -(0xFF - B + 1); - } else - { ByteToInt = B; - } return ByteToInt; } @@ -190,17 +117,7 @@ byte IntToByte(int i) { byte IntToByte; - // IntToByte = CByte(i & 0xFF); IntToByte = (byte)(i & 0xFF); return IntToByte; } - -void XCHG(int A, int B) -{ - int Tmp; - - Tmp = B; - B = A; - A = Tmp; -}