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)); } }
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); }