X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_sp%2FASM.c;h=ae2de3ee77544498b0d27e62d0c94a4cc50aaba7;hb=98ae5fc5e9274fea99a2ed8873b78fc2110ce3ce;hp=6ef27ee39c169502a235c98a8769365588e2feea;hpb=5ba7f2d9a3f07f342afdf215a3307d5487cb6d43;p=rocksndiamonds.git diff --git a/src/game_sp/ASM.c b/src/game_sp/ASM.c index 6ef27ee3..ae2de3ee 100644 --- a/src/game_sp/ASM.c +++ b/src/game_sp/ASM.c @@ -4,202 +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) +void MovLowByte(int *p, int i) { - int HighByte; - - if (Var & 0x8000) - { - HighByte = ((Var & 0x7FFF) / 0x100) | 0x80; - } - else - { - HighByte = Var / 0x100; - } - - return HighByte; + *p = (*p & 0xff00) | (i & 0xff); } -int SgnHighByte(int Var) // extends the signum to 16 bit +void MovHighByte(int *p, int i) { - int SgnHighByte; - - if (Var & 0x8000) - { - SgnHighByte = ((Var & 0x7FFF) / 0x100) | 0xFF80; - } - else - { - SgnHighByte = Var / 0x100; - } - - return SgnHighByte; + *p = (*p & 0xff) | ((i << 8) & 0xff00); } -boolean Less() +int LowByte(int i) { - boolean Less; - - Less = (cmpFlag < 0); - - return Less; + return (i & 0xff); } -boolean GreaterOrEqual() +int HighByte(int i) { - boolean GreaterOrEqual; - - GreaterOrEqual = (0 <= cmpFlag); - - return GreaterOrEqual; + return ((i >> 8) & 0xff); } -boolean Equal() +int SgnHighByte(int i) { - boolean Equal; - - Equal = (0 == cmpFlag); - - return Equal; + return (signed char)HighByte(i); } -void CMP(int A, int B) +int ByteToInt(byte b) { - cmpFlag = A - B; -} - -void Add(int *A, int B) -{ - *A = *A + B; -} - -void MySub(int *A, int B) -{ - *A = *A - B; -} - -int SHR(int Var, int Count) -{ - 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; -} - -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; -} - -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; + return (signed char)b; }