ITPub博客

首页 > 数据库 > SQL on Hadoop > 在树莓派上模拟 Apple II - 树莓派

在树莓派上模拟 Apple II - 树莓派

SQL on Hadoop 作者:ITPUB社群 时间:1970-01-01 08:33:46 0 删除 编辑

这是万圣节前的最后一个 Maker Monday,我们还没准备好服装,所以这次我们打算跟随 The Raspberry Pi Guide to Retro Gaming 的这篇教程,把我们的树莓派伪装成经典的 8 位 Apple II 电脑。

Apple II 不是第一台个人电脑或家用电脑,但它是 1977 年问世的标志性“三巨头”电脑之一:Apple II、Commodore PET 和 TRS-80。Apple II 的游戏性能不如当时其他一些 8 位系统,但它在设计时就考虑到了游戏。在设计 Apple II 时,Steve Wozniak 从他在 Atari 工作期间参与 Breakout 街机游戏的工作中获得了灵感。这就是为什么 Apple II 有彩色图形、支持 paddle 控制器,甚至还有音频。

Apple II 的音频相当有限:任何比蜂鸣声更复杂的声音都相当消耗 CPU。附加音频板(如 Mockingboard)变得流行,并得到了许多游戏开发者的支持。

Apple II 包含一个仅支持整数数值数据类型的 BASIC 语言版本:通过避开浮点数,Wozniak 的 Integer BASIC(顾名思义)处理数字的速度极快。这使得它不太适合某些编程任务,但对视频游戏来说非常棒。Integer BASIC 被提供在 Apple II 的系统 ROM 镜像中,而功能更完整的 BASIC——Applesoft BASIC——最初以盒式磁带形式提供(不过从 Apple II Plus 开始,它会被固化到系统 ROM 中)。

安装 Apple II 模拟器

要在树莓派上模拟 Apple II,我们使用 LinApple 模拟器。它是 AppleWin 模拟器的一个分支,后者最初由 Mike O’Brien 创建。David Baucum(maxolasersquad)和其他几位贡献者让它能在 Linux 上运行。你可能还想看看 audetto 的 AppleWin 模拟器分支。因为 audetto 的分支会定期与原始 AppleWin GitHub 仓库同步,所以它能更紧密地跟踪 AppleWin 的功能。

LinApple 可以模拟 Apple II 声卡,例如 Mockingboard(在配置文件中默认启用)。LinApple 无法通过 Raspberry Pi OS 的 apt 仓库获取,所以你需要自己编译它。幸运的是,这很容易做到。首先,打开一个终端窗口。你将在这里安装依赖项、下载源代码、编译并安装它。

在终端窗口中,运行以下命令来更新操作系统软件包,并安装编译 LinApple 所需的依赖项。运行使用 sudo 的命令时,系统可能会提示你输入密码。

$ sudo apt update

$ sudo apt -y full-upgrade

$ sudo apt -y install git g++ cmake
libzip-dev libsdl3-dev libsdl3-image-dev libcurl4-openssl-dev zlib1g-dev imagemagick

现在你可以克隆模拟器仓库了。如果你不想把源代码检出到主目录的根目录下,可以在克隆之前创建一个目录并进入该目录。例如,mkdir ~/src 会在你的主目录下创建一个 src 目录,cd ~/src 会进入该目录。你可以使用以下命令克隆仓库:

$ git clone
https://github.com/linappleii/linapple.git

克隆完成后,cd 进入 linapple 文件夹并构建项目:

$ cd linapple

$ cmake -B build -DBUILD_TESTING=OFF

$ cmake --build build -j4

第一个 cmake 命令准备源代码,第二个命令编译它。-j4 参数告诉 cmake 使用最多四个 CPU 核心。成功编译后,使用以下命令将其安装到 /usr/local 文件夹下:

$ sudo cmake --install build

现在你可以在任何终端窗口中使用命令 linapple 运行模拟器。但在那之前,让我们自定义一些选项。首先,将默认配置文件和示例磁盘映像复制到你的主目录。在将文件复制到其中之前,你需要创建几个目录:

$ mkdir -p ~/.config/linapple/

$ cp /usr/local/etc/linapple/linapple.conf ~/.config/linapple/

$ mkdir -p ~/.linapple/disks/

$ cp /usr/local/share/linapple/Master.dsk ~/.linapple/disks/

接下来,使用你喜欢的编辑器编辑配置文件,例如使用 nano ~/.config/linapple/linapple.conf,并进行以下更改:

  • 找到内容为 Joystick 0 = 2 的条目,将 2 改为 4。这让你可以使用鼠标作为摇杆,你可能会喜欢或讨厌它(在文章后面的 Brickout 中试一试!)。配置文件描述了你可以选择的其他选项。

  • 找到 Screen factor = 1.0 条目,将 1.0 改为 2.5。这会使模拟器窗口稍微大一些。

保存配置文件并退出编辑器。如果你使用的是 nano 编辑器,按 CTRL+X,回答 Y 表示是,然后按 ENTER 确认文件名。让我们测试 LinApple 并确保一切正常。在终端窗口中,运行以下命令:

$ linapple --autoboot --d1
~/.linapple/disks/Master.dsk

LinApple 应该会打开并显示如图 1 所示的屏幕。如果你发现模拟器接管了鼠标控制,按 F1 释放它(这会显示帮助屏幕,但你可以再次按 F1 将其关闭)。你可以使用 F6 键切换全屏模式。

这里有一个你可以尝试运行的小型 BASIC 程序。你可以将其输入模拟器,也可以在 GitHub 仓库的 ch03/AppleIIBasicPrograms.dsk 文件中找到该程序。要使用磁盘映像,请使用 linapple --autoboot --d1 AppleIIBasicPrograms.dsk 启动模拟器,在 ] 提示符下输入 LOAD BLOCKMOVE 并按 ENTER,然后输入 RUN(并按 ENTER)。

10 HGR

20 X = 140: Y = 80: D = 3: REM INITIALISE

30 HCOLOR = 3: GOSUB 1000: REM DRAW CUBE

40 REM WAIT FOR AND READ KEYPRESS

50 K = PEEK (- 16384): IF K < 128 THEN 40

60 REM CLEAR STROBE

70 POKE - 16368, 0: K$ = CHR$ (K - 128)

80 HCOLOR = 0: GOSUB 1000: REM ERASE CUBE

90 IF K$ = "W" THEN Y = Y - D

100 IF K$ = "S" THEN Y = Y + D

110 IF K$ = "A" THEN X = X - D

120 IF K$ = "D" THEN X = X + D

130 IF X < 0 THEN X = 0

140 IF X > 272 THEN X = 272

150 IF Y < 0 THEN Y = 0

160 IF Y > 184 THEN Y = 184

170 GOTO 30 : REM BACK TO TOP OF LOOP

1000 REM DRAW CUBE IN CURRENT HCOLOR

1010 HPLOT X, Y TO X + 8, Y TO X + 8, Y + 8 TO X, Y + 8 TO X, Y

1020 RETURN

这将在屏幕上绘制一个小方块。使用 W、A、S 和 D 键在屏幕上移动它。该程序相当简单。它首先定义起始 X 和 Y 位置,以及方块每次应移动的像素数(变量 D)。之后,它将绘制颜色设置为 3,并调用子程序绘制方块。然后程序等待按键,当有按键时,它清除键盘选通信号,这是一个指示何时读取了按键的硬件。

之后,程序将整数按键值(K)转换为包含所输入字符的字符串(K$)。然后,它更新 X 和 Y 位置,确保方块没有跑出屏幕,并返回到循环顶部(第 30 行)。

输入程序后,输入 RUN 并按 ENTER。尝试使用 WASD 键移动方块,完成后按 CTRL+C 退出程序。图 2 显示了程序运行情况。注意垂直线和水平线颜色不同,并且垂直线在移动时会改变颜色。这是由于 Apple II 图形的工作方式:Apple II 只生成单色显示信号,但它使用一些信号技巧来生成颜色伪影。游戏程序员可以操纵这些伪影来创建他们想要的颜色组合。

运行图形程序后,模拟器屏幕的图形模式部分下方只有一个小文本区域。你可以输入 TEXT 命令并按 ENTER 返回纯文本模式。你还会发现这些命令很有帮助:

  • LIST — 列出当前 BASIC 程序的所有行。

  • RUN — 运行当前程序。

  • NEW — 清除当前程序并让你重新开始。

  • CATALOG — 列出磁盘映像上的所有文件。

  • SAVE NAME — 将当前 BASIC 程序保存为你指定的文件名。

  • LOAD NAME — 加载指定文件名的程序。

  • CTRL+C — 使用此组合键停止正在运行的 BASIC 程序。

除 CATALOG 外,这些命令仅适用于 BASIC 程序。许多游戏是二进制可执行文件,不包含 BASIC 源代码。

你可以在 Lee Fastenau 的短程序集中找到一些有趣的键入式程序。Lee 的程序刻意写得紧凑,因为大多数设计为在一两行代码内输入。所以,请慢慢输入!


转载声明:本文为转载整理,原文版权归原作者及原站点所有。

原文来源:Raspberry Pi Blog

原创地址:https://www.raspberrypi.com/news/emulate-apple-ii-on-raspberry-pi/

原文作者:Brian Jepson;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-11-21

  • 博文量
    1255
  • 访问量
    561266