예제 #1
0
        public override void Execute(ushort aRange, ushort aArg1, ushort aArg2, ushort aArg3, ushort aArg4, ushort aArg5, ushort aArg6, ushort aArg7, ushort aArgCount)
        {
            if ((short)aRange <= 0)
            {
                ZRandom.Seed(-(short)aRange);
                Store(0);
            }
            else
            {
                ushort result;

                if (ZRandom.interval != 0)
                {
                    result = (ushort)ZRandom.counter++;
                    if (ZRandom.counter == ZRandom.interval)
                    {
                        ZRandom.counter = 0;
                    }
                }
                else
                {
                    ZRandom.a = 0x015a4e35 * ZRandom.a + 1;
                    result    = (ushort)((ZRandom.a >> 16) & 0x7fff);
                }

                Store((ushort)(result % aRange + 1));
            }
        }
예제 #2
0
        public void Initialize(ushort aStartPC)
        {
            ZRandom.Seed(0);
            Stack = new ZStack(this);

            StartPC = aStartPC;
            PC      = StartPC;

            //SetByte(HeaderOffset.CONFIG, ZMachine.Story.Header.config);
            //SetWord(HeaderOffset.FLAGS, ZMachine.Story.Header.flags);

            //if (ZMachine.Story.Header.Version >= FileVersion.V4)
            //{
            //    SetByte(HeaderOffset.INTERPRETER_NUMBER, ZMachine.Story.Header.interpreter_number);
            //    SetByte(HeaderOffset.INTERPRETER_VERSION, ZMachine.Story.Header.interpreter_version);
            //    SetByte(HeaderOffset.SCREEN_ROWS, ZMachine.Story.Header.screen_rows);
            //    SetByte(HeaderOffset.SCREEN_COLS, ZMachine.Story.Header.screen_cols);
            //}

            //ushort screenCols = ZMachine.Story.Header.screen_cols;
            //ushort screenRows = ZMachine.Story.Header.screen_rows;

            //if (ZMachine.Story.Header.Version >= FileVersion.V5)
            //{
            //    SetWord(HeaderOffset.SCREEN_WIDTH, screenCols);
            //    SetWord(HeaderOffset.SCREEN_HEIGHT, screenRows);
            //    SetByte(HeaderOffset.FONT_HEIGHT, 1);
            //    SetByte(HeaderOffset.FONT_WIDTH, 1);
            //    SetByte(HeaderOffset.DEFAULT_BACKGROUND, ZMachine.Story.Header.default_background);
            //    SetByte(HeaderOffset.DEFAULT_FOREGROUND, ZMachine.Story.Header.default_foreground);
            //}

            //if ((ZMachine.Story.Header.Version >= FileVersion.V3) && (ZMachine.Story.Header.user_name[0] != 0))
            //{
            //    for (int i = 0; i < 8; i++)
            //    {
            //        SetByte((HeaderOffset.USER_NAME + i), ZMachine.Story.Header.user_name[i]);
            //    }
            //}
            //SetByte(HeaderOffset.STANDARD_HIGH, ZMachine.Story.Header.standard_high);
            //SetByte(HeaderOffset.STANDARD_LOW, ZMachine.Story.Header.standard_low);
        }