-// --- 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)