Ejemplo n.º 1
0
        private void init()
        {
            //initialise cpu-emulator
            lastLoaded = 128;
            CPU = new CPUem();

            removeExternalGUI();
            monitor = new Monitor(CPU.Memory, 63488, 65024, 63472, 42);
            keyb = new Keyboard();
            initExternalGUI();

            //connect keyboard to serial port
            connect(keyb, 1);

            running = false;
            //init default values in memory
            CPU.Memory[41] = 1024;//init vector precision
            CPU.Memory[43] = 16;//default speed precision
            int i = 65024;
            foreach (UInt32 font in monitor.getDefaultFont()) {
                CPU.Memory[i] = (Int32)font;
                ++i;
            }
            i = 63472;
            foreach (Int32 col in monitor.getDefaultColors()) {
                CPU.Memory[i] = col;
                ++i;
            }

            //initialise the assembler
            assembler = CPU.getCompatibleAssembler();
            assembler.bindGlobalCall("GLOBAL_MAINTHROTTLE", 0);//init all globaly shared memory positions
            assembler.bindGlobalCall("GLOBAL_YAW", 1);
            assembler.bindGlobalCall("GLOBAL_PITCH", 2);
            assembler.bindGlobalCall("GLOBAL_ROLL", 3);
            assembler.bindGlobalCall("GLOBAL_SURFACE_EAST", 4);
            assembler.bindGlobalCall("GLOBAL_SURFACE_UP", 7);
            assembler.bindGlobalCall("GLOBAL_SURFACE_NORTH", 10);
            assembler.bindGlobalCall("GLOBAL_VESSEL_X", 13);
            assembler.bindGlobalCall("GLOBAL_VESSEL_Y", 16);
            assembler.bindGlobalCall("GLOBAL_VESSEL_HEADING", 16);//ALTERNATE
            assembler.bindGlobalCall("GLOBAL_VESSEL_Z", 19);
            assembler.bindGlobalCall("GLOBAL_ORBITSPEED", 22);
            assembler.bindGlobalCall("GLOBAL_SURFACESPEED", 25);
            assembler.bindGlobalCall("GLOBAL_ANGULARVELOCITY", 28);
            assembler.bindGlobalCall("GLOBAL_ALTITUDE", 31);
            assembler.bindGlobalCall("GLOBAL_NUMPAD_OUT", 32);
            assembler.bindGlobalCall("GLOBAL_NUMPAD_MSG", 36);
            assembler.bindGlobalCall("GLOBAL_NUMPAD_IN", 37);
            assembler.bindGlobalCall("GLOBAL_NUMPAD_NEWIN", 38);
            assembler.bindGlobalCall("GLOBAL_NUMPAD_FORMAT", 39);
            assembler.bindGlobalCall("GLOBAL_TIMER", 40);
            assembler.bindGlobalCall("GLOBAL_VECTORACCURACY", 41);
            assembler.bindGlobalCall("GLOBAL_SCREEN_MODE", 42);
            assembler.bindGlobalCall("GLOBAL_SPEEDACCURACY", 43);
            assembler.bindGlobalCall("GLOBAL_IENABLE", 44);
            assembler.bindGlobalCall("GLOBAL_CLOCK", 45);
            assembler.bindGlobalCall("GLOBAL_IADRESS", 46);
            assembler.bindGlobalCall("GLOBAL_TIMER_MAX", 47);
            assembler.bindGlobalCall("GLOBAL_PILOT_THROTTLE", 48);
            assembler.bindGlobalCall("GLOBAL_PILOT_YAW", 49);
            assembler.bindGlobalCall("GLOBAL_PILOT_PITCH", 50);
            assembler.bindGlobalCall("GLOBAL_PILOT_ROLL", 51);
            assembler.bindGlobalCall("GLOBAL_PILOT_RCS_RIGHT", 52);
            assembler.bindGlobalCall("GLOBAL_PILOT_RCS_UP", 53);
            assembler.bindGlobalCall("GLOBAL_PILOT_RCS_FORWARD", 54);
            assembler.bindGlobalCall("GLOBAL_RCS_RIGHT", 52);
            assembler.bindGlobalCall("GLOBAL_RCS_UP", 53);
            assembler.bindGlobalCall("GLOBAL_RCS_FORWARD", 54);
            assembler.bindGlobalCall("GLOBAL_ACTIONGROUP", 55);

            //serial buses
            assembler.bindGlobalCall("GLOBAL_GSB0", 64);
            assembler.bindGlobalCall("GLOBAL_GSB1", 68);
            assembler.bindGlobalCall("GLOBAL_GSB2", 72);
            assembler.bindGlobalCall("GLOBAL_GSB3", 76);
            assembler.bindGlobalCall("GLOBAL_GSB4", 80);
            assembler.bindGlobalCall("GLOBAL_GSB5", 84);
            assembler.bindGlobalCall("GLOBAL_GSB6", 88);
            assembler.bindGlobalCall("GLOBAL_GSB7", 92);

            //monitor stuff
            assembler.bindGlobalCall("GLOBAL_SCREEN", 63488);
            assembler.bindGlobalCall("GLOBAL_SCREEN_COLOR", 63472);
            assembler.bindGlobalCall("GLOBAL_SCREEN_FONT", 65024);

            //other stuff
            assembler.bindGlobalCall("CPU_CLOCKRATE", CPU.ClockRate);
            assembler.bindGlobalCall("CPU_RAM", CPU.Memory.Length);
            assembler.bindGlobalCall("CPU_MAXADDRESS", CPU.Memory.Length-1);
        }