在ZX Spectrum中查看

sim*_*ons 8 zxspectrum

我正在使用旧的ZX Spectrum 48k,我想知道如何输入POKE代码.

你用磁带加载游戏 - 然后以某种方式突破POKE语句中的程序类型并再次开始运行程序?

我已经对此进行了大量的搜索,但未能确切地知道这是如何完成的,所以任何关于此的线索都将非常感激.

Bal*_*arq 5

首先,PEEK和POKE的含义:

10 let x = PEEK 40000: REM returns (reads) the value (0-255) in position 40000
20 POKE 40000, 201: REM writes the 201 value in position 40000
Run Code Online (Sandbox Code Playgroud)

大多数程序会加载一个称为加载程序的小型BASIC程序。就像这样:

10 cls
20 print "Loading AWESOME GAME!!!"
20 load "" screen$
30 load "" code 40000
40 randomize usr 40000
Run Code Online (Sandbox Code Playgroud)

含义应该很简单:加载屏幕演示文稿(第20行)以在组装程序(游戏本身)加载(第30行)时保持用户的娱乐感,最后启动游戏(第40行)。

关于第40行,usr 40000是完成此操作的表达式,在40000位置调用汇编。该指令Randomize只是初始化了所使用的随机种子rnd,认为它实际上永远不会返回。

因此,首先尝试是:

  1. 按下“ break”(或多或少相当于Ctrl + C),输入list,然后将行置于第35行,即,一旦程序已加载但尚未执行。

  2. 键入load ""(而不是为了启动游戏而键入)merge ""(键入该命令是将内存中的基本程序与磁带中的基本程序结合在一起)。该过程将在执行加载程序之前停止。当加载程序包含poke禁用BREAK 的指令时,此功能很有用。

这些方法的问题是,起初隐藏加载程序内部的尝试是幼稚的(例如,在第10行中包含PAPER 0:INK 0指令或类似内容,使所有内容暂时不可见),但是很快他们就会得到更复杂的是,实际上是要成为REM说明中包含的汇编程序。

下一步是分析在基本加载程序之后加载的汇编代码的标题,总结转储地址和代码长度,并创建自己的加载程序,其中可以包含所需的poke指令。许多杂志都发行了这种装载机,这些装载机打算在原始装载机之前装载(装载机寻找特定的块,绕过了原始的基本装载机)。

因此,开发人员决定将组装块包括在没有标题的磁带中,并保护装入器。或者包含一个加载程序,该加载程序仅使用不同的速度加载一个替换ROM中的加载程序的汇编程序,而没有标题信息等。

然后出现了诸如Multiface-1之类的特殊硬件。阅读Multiface-1手册,您可以看到如何通过按红色按钮(引起NMI(非屏蔽中断))来调用Multiface的软件(包含在外围硬件的ROM中),显示了一个菜单,您可以在该位置保存内存(并且保存的代码将不受任何保护,因此可以通过戳戳打开创建自己的加载程序的路径),甚至可以检查(PEEK)内存中特定地址的当前值,然后POKE直接输入的,以找到开始例如,其中一些例程会减少您的生活)。

POKE的说明通常为此类说明(这是一种简化):POKE addr, 0POKE addr, 201。数字地址是一个例行减少的生活可用数量,或检测与敌人交锋的开始。

代码0是汇编NOP(无操作)指令。在NOP期间,CPU不执行任何操作。

代码201或C9是汇编RET(返回)指令,表示返回子程序。在BASIC中,您将使用调用子例程,GOSUB并使用结束从子例程返回RETURN。在组装中,同一对是CALL / RET。

如果您有201,则实际上意味着一个子程序(例如,将您的生活减去1),例如:

9950 let lives = lives - 1
9960 return
Run Code Online (Sandbox Code Playgroud)

转换为:

9950 return
9960 return
Run Code Online (Sandbox Code Playgroud)

如果值为0,则将相同的例程转换为:

9950
9960 return
Run Code Online (Sandbox Code Playgroud)


Dav*_*y C 1

我记得很久以前......当 Spectrum 游戏加载时,它最初加载到一个小的加载程序中,然后运行该程序,磁带继续并加载大部分程序。加载程序中的最后一个命令然后程序发出一个 poke 命令,调用所有加载的内容并开始游戏。因此,据我记得,加载程序加载后,您必须暂停磁带,并停止代码行自动发出最终的戳,然后继续。然后,一旦批量加载完成,您就可以从命令行发出 Poke,然后再发出原始 Poke 来开始游戏。加载程序将在第一组红色和蓝色线之后加载,然后是屏幕上非常短的黄色和蓝色线(我记得它打印了此时找到的程序的名称)。停止磁带,按“Break”,然后按“List”查看代码。祝你好运,问题问得好!