tick() public method

public tick ( ) : int
return int
Ejemplo n.º 1
0
        /*
         *  mem[4] = (Int32)(eastUnit.x * accuracy);
         *  mem[5] = (Int32)(eastUnit.y * accuracy);
         *  mem[6] = (Int32)(eastUnit.z * accuracy);
         *  mem[7] = (Int32)(upUnit.x * accuracy);
         *  mem[8] = (Int32)(upUnit.y * accuracy);
         *  mem[9] = (Int32)(upUnit.z * accuracy);
         *  mem[10] = (Int32)(northUnit.x * accuracy);
         *  mem[11] = (Int32)(northUnit.y * accuracy);
         *  mem[12] = (Int32)(northUnit.z * accuracy);
         *  mem[13] = (Int32)(shipEastVector.x * accuracy);
         *  mem[14] = (Int32)(shipEastVector.y * accuracy);
         *  mem[15] = (Int32)(shipEastVector.z * accuracy);
         *  mem[16] = (Int32)(shipUpVector.x * accuracy);
         *  mem[17] = (Int32)(shipUpVector.y * accuracy);
         *  mem[18] = (Int32)(shipUpVector.z * accuracy);
         *  mem[19] = (Int32)(shipNorthVector.x * accuracy);
         *  mem[20] = (Int32)(shipNorthVector.y * accuracy);
         *  mem[21] = (Int32)(shipNorthVector.z * accuracy);
         *  mem[22] = (Int32)(orbitalSpeed.x * speedAccuracy);
         *  mem[23] = (Int32)(orbitalSpeed.y * speedAccuracy);
         *  mem[24] = (Int32)(orbitalSpeed.z * speedAccuracy);
         *  mem[25] = (Int32)(groundSpeed.x * speedAccuracy);
         *  mem[26] = (Int32)(groundSpeed.y * speedAccuracy);
         *  mem[27] = (Int32)(groundSpeed.z * speedAccuracy);
         *  mem[28] = (Int32)(angularVelocity.x * speedAccuracy);
         *  mem[29] = (Int32)(angularVelocity.y * speedAccuracy);
         *  mem[30] = (Int32)(angularVelocity.z * speedAccuracy);
         *  mem[31] = (Int32)(UInt32)(altitude);
         *  //mem[32] = output 1
         *  //mem[33] = output 2
         *  //mem[34] = output 3
         *  //mem[35] = output 4
         *  //mem[36] = output msg
         *  //mem[37] = numpad input
         *  //mem[38] = boolean used to see if the input has changed
         *  //mem[39] = output formatting switch
         *  //mem[40] = timer
         *  //mem[41] = vectorAccuracy
         *  //mem[42] = screen mode
         *  //mem[43] = speed accuracy
         *  //mem[44] = interrupt enable
         *  //mem[45] = clock
         *  //mem[46] = interrupt handler adress (64 default)
         *  //mem[47] = timer interrupt frequency
         *  //mem[48] = player throttle
         *  //mem[49] = player yaw
         *  //mem[50] = player pitch
         *  //mem[51] = player roll
         *  //mem[52] = player trn up
         *  //mem[53] = player trn east
         *  //mem[54] = player trn forward
         *  //mem[55] = toggle Actiongroups
         */
        //runs through the instructions untill the necessary ammount of ticks has passed, or all programs have completed operation
        //returns the excess ticks
        private int cycle(int cycles)
        {
            int ticksElapsed = 0;

            while (ticksElapsed < cycles)
            {
                //debugging tools
                if (debug)
                {
                    int opcode = (CPU.getMem(CPU.PC) >> 26) & 0x3f;//decompile instruction
                    int rA     = (CPU.getMem(CPU.PC) >> 21) & 0x1f;
                    int rB     = (CPU.getMem(CPU.PC) >> 16) & 0x1f;
                    int im     = CPU.getMem(CPU.PC) & 0xffff;

                    print("PC: " + CPU.PC + " opcode: " + opcode.ToString("X2") + " r" + rA + ": " + CPU.Registers[rA] + " r" + rB + ": " + CPU.Registers[rB] + " im: " + im + " rC: " + CPU.Registers[im & 0x1f] + " ra: " + CPU.Registers[15] + " sp: " + CPU.Registers[14] + ", " + CPU.getMem((UInt16)(CPU.Registers[14] - 1)));
                }

                int cyclesElapsed = CPU.tick();
                ticksElapsed += cyclesElapsed;
            }
            return(ticksElapsed);
        }