X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_sp%2FASM.c;h=ae2de3ee77544498b0d27e62d0c94a4cc50aaba7;hb=98d421667c21a07ab69dd881f1435c2f595ddd4c;hp=6f0484ae766b062dc7ca09a6c25be4bb939a220e;hpb=8d3d7d213a9691455a49544624bf380e85f43461;p=rocksndiamonds.git diff --git a/src/game_sp/ASM.c b/src/game_sp/ASM.c index 6f0484ae..ae2de3ee 100644 --- a/src/game_sp/ASM.c +++ b/src/game_sp/ASM.c @@ -4,203 +4,33 @@ #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; }