问题标签 [retro-computing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
basic - 即使使用“启用运行停止”戳也无法启用列表
好吧,我下载了一个旧的非英语文本冒险,当然,“为了专业性”已经禁用列表。即使在输入启用“运行停止/恢复”和启用“列表”的戳后,它也会不断地询问输入(在游戏中)。我什至尝试在开始屏幕上输入列表,但它认为模拟的“运行/停止-恢复”就像任何其他按钮一样。“按任意键”(仅用我们的语言......)。
与可下载的 .prg 链接:
http://retrospec.sgn.net/users/tomcat/yu/C64/MiscGames/Html/BezMilosti.php
PS:由于在 VICE 中拖动屏幕时会自动加载 .prg 格式,我什至制作了一个新的 .d64 磁盘,因此引发了臭名昭著的“正在加载。准备就绪”。状态。从那个地方我确实进入了戳。
PS 2:我已经在“lemon”的“场景”类别下发布了一个关于这个问题的主题和主题,这是专门针对 Commodore 的顶级网站:
*编辑(导入链接):
serial-port - C64 + DigiConnect SP 消息以 1 字符连接而不是使用 BASIC 的完整字符串发送
使用带有 GLINK LT RS-232 适配器的 Commodore 64,连接到配置为将 RAW TCP 发送到我家庭网络上的静态 IP/端口的 Digi-Connect SP。Destination 是一个 socat 进程,通过详细日志记录将流量传递到其他地方。
在 OS X 机器上测试从 bash shell 命中 socat,发出curl http://192.168.1.91:1234
I get a valid response 并且 socat 日志显示
但是当我在 C64 BASIC 代码片段上运行以下命令时:
socat 日志显示:
我不确定我是否在 C64 端做错了什么导致发送单个字符,或者它是否是不正确的 Digi-Connect 设置。
Digi 串行设置为:
- TCP 客户端设置:
- 自动建立 TCP 连接
- 始终连接并保持连接
- 建立与以下网络服务的连接:
- 服务器:192.168.1.91
- 服务:原始 TCP
- TCP 端口:1234
- 启用 TCP 保持活动:开
- 自动建立 TCP 连接
- 基本串行设置
- 波特:300
- 数据位:8
- 奇偶校验:无
- 停止位:0
- 流量控制:硬件
- 高级串行设置
- (这里没有配置)
emulation - 拥有多个调色板的 GameBoy 有什么意义?
每个像素由两位组成,最多允许 4 种灰度。从pandocs 的 LCD Monochrome Palettes 部分,我们可以开发获取颜色的算法(在我理解正确的情况下):
但是仅仅看函数签名我们就可以推断出相同的颜色数字可能会导致不同的颜色;这取决于我们使用的调色板。
我的问题是,当其中两个相同时,为什么我们需要多个调色板,而与第三个的唯一区别0
是透明而不是白色?为什么调色板定义会发生变化,而不是用于从调色板中获取颜色的颜色编号?
basic - 大多数 8 位 BASIC 实现是哪种类型的解释器?
我是 1980 年代早期/中期个人计算机的忠实粉丝,例如 Amstrad CPC、Commodore 64 和 Sinclair Spectrum。这些计算机都拥有的一件事是 BASIC 版本。
作为一名语言黑客,我很好奇:这些解释器是作为树行者解释器(简单地遍历解析树)还是字节码解释器实现的?我找不到很多关于它们是如何实施的信息。考虑到当时硬件的限制,它们是如何构建的,这让我很着迷。
c++ - 如何让 Duktape 在 Mac 68k 上运行(就像在 PPC 上一样?)
我正在编写一个在 MacOS 7.x - 9.x 上运行的小应用程序(使用 Macintosh Toolbox),我决定包含 Duktape。
我使用在 MacOS 9 上运行的 CodeWarrior 6.0。
我使用低内存配置,在此处找到。
当我为 PPC 编译时,它运行完美——但是当我为 68k 编译时,我得到了很多奇怪的行为和崩溃。
例如,如果我要调用duk_peval_string
以下内容:
var i = 3;
<- 没有错误
var i = 3; function a() { return 4; }
<- 没有错误
var i = 3; function a() { return 4; } i = a();
<-- "ReferenceError: -4e+0"
function a() { return 4; } i = a();
<-- 启动时崩溃
我已启用自测 ( DUK_USE_SELF_TESTS
) 以尝试找出可能发生的情况 - 在处理器设置下启用8-Byte Doubles
和更改Struct Alignment
to PowerPC
(而不是 68K 设置)会导致 Duktape 通过测试 - 但它仍然无法解决问题.
定义__m68k__
(或不定义)似乎不会影响任何事情。
我知道这是一个很长的机会,但是在花了大约 4 个小时更改了我在 IDE 和 duk_config 上可以找到的几乎所有设置之后,我没有想法 - 所以任何帮助将不胜感激。
assembly - “自修改链接”在 Pegasus 编程中是如何工作的?
我一直在研究 1950 年代“Pegasus”计算机的模拟,并遇到了“自我修改链接”一词。这是如何运作的?
assembly - 68000汇编语言怎么定义一个枚举?
我在 Commodore Amiga 500 上使用 Manx Aztec C 编译器(5.0 版)附带的汇编程序。
我想编写与以下 C 代码等效的代码:
我尝试了以下方法——这很有效——但它似乎有点做作:
我知道我可以这样做:
但我希望能够插入和重新排列值而无需手动重新编号。
我在想我也许可以用宏做一些事情,但我对它们没有太多经验。
solaris - 在 Solaris 5.8 上创建适合软盘的多部分存档
我正在尝试使用 tar 将单个文件拆分为足够小的部分,以适合 Solaris 5.8 上的 1.44MB 软盘。
根据下面的参考资料,我应该能够通过使用 k 选项来指定段的大小和 f 选项来指定输出文件来实现这一点。
我尝试了各种格式的命令:
充其量,这会生成一个具有选项之一名称的文件,其大小与原始文件相同。
提供的 tar 实用程序不同于大多数现代 Linux 系统上可用的 GNU tar 实用程序。gtar不可用。我无法在此系统上安装新软件包。
或者,您知道 Solaris 5.8 基本安装中存在的任何其他实用程序吗?
参考:
embedded - 很老的 CPU INTEL 8086 + 8087 嵌入式系统 Intel IC-86 编译器
这对我来说是个老挑战,但我已经成功地构建了基于 80188 INTEL(如 8086)的自己的嵌入式系统。我正在使用英特尔的编译器 C 4.5。由于我想更进一步,我想集成 8087 协处理器。这项技术已经有 40 年的历史了……
在花时间在板上连接 8087 之前,我尝试使用编译器提供的 8087 仿真器。来自 INTEL 的 IC-86 版本 4.5。
我找不到链接 E87.lib 并在我的项目中重新定位库的方法。有人可以分享在嵌入式系统上使用 8087 进行链接/重定位的示例吗?
听起来为 8087 提供的库不能重定位在 20 位地址中?
mips - 如果使用异步组件,是否可以使用“单周期 CPU”?
我听说过“单周期 CPU”这个词,并试图理解单周期 CPU 的实际含义。是否有明确一致的定义和共识,是什么意思?
我遇到的一些自制“单周期 CPU”似乎同时使用时钟的上升沿和下降沿来完成一条指令。通常,上升沿用作获取/解码,下降沿用作执行。
然而,在我的阅读中,我遇到了这里提出的合理观点......
https://zipcpu.com/blog/2017/08/21/rules-for-newbies.html
这对我来说很真实。
同时需要上升沿和下降沿(或高相位和低相位)实际上与需要以两倍速度运行的单个时钟的两个周期的上升沿相同;这将是一个“双周期”CPU,不是吗。
那么,当上升沿和下降沿都被主动用于状态更改时,可以诚实地说设计是“单周期 CPU”吗?
看起来真正的单周期 CPU 必须在单个时钟周期的单个时钟沿执行所有状态更改操作。
如果数据存储都是同步的,我可以想象这样的事情是可能的。如果我们有一个已经稳定的同步系统,那么在下一个时钟沿,我们可以将结果计时到同步数据存储中,同时将程序计数器计时到下一个地址。
但是,如果目标数据存储是例如异步 RAM,那么在存储数据时控制线肯定会发生变化,从而导致意外行为。
我错了吗,是否有任何包含异步存储的“单周期 CPU”示例?
在一个设计中使用异步 RAM 似乎意味着必须使用至少两个逻辑时钟周期来实现状态更改。
当然,如果更复杂一些,也许可以添加一个使用单个边缘的 CPU,其中指令仅使用同步输出组件,但在存储到异步数据时依赖于一个额外的周期;但是那仍然不是单周期cpu,而是主要是单周期cpu。
因此,任何写入异步 RAM(或其他异步组件)的 CPU 都不能真正被视为单周期 CPU,因为整个指令不能在单个时钟沿执行。RAM 写入需要两个边沿(即下降沿和上升沿),这打破了单时钟原则。
那么是否存在普遍接受的单周期 CPU,我们是否一致地应用该术语?
来龙去脉是什么?
(也发布在我的 hackaday 日志https://hackaday.io/project/166922-spam-1-8-bit-cpu/log/181036-single-cycle-cpu-confusion以及 hackaday 的私人群组中)
=====
更新:看看简单的 MIP,模型似乎使用同步内存,因此可能可以在单个边缘广告上运行,也许它确实如此 - 因此保证“单周期”类别。也许FPGA内存总是同步的——我不知道。
但是该术语在其他地方的使用不一致吗?即像大多数 Homebrew TTL 计算机一样?
还是我完全错了?
====
更新 :
有些人可能误解了我的观点。
许多自制的 TTL cpu 声称“单周期 CPU”状态(出于本次讨论的目的,对更复杂的流水线或其他方式的野兽不感兴趣)。
通过单周期这些 CPU,它们通常意味着它们执行一些操作,例如在时钟的一个边沿上推进 PC,然后使用时钟的相反边沿来更新触发器的结果。或者,他们将使用时钟的另一个阶段来更新锁存器和 sram 等异步组件。
但是,我提供的 ZipCPU 参考建议使用相反的时钟边沿类似于使用第二个时钟周期甚至第二个时钟。顺便说一句,Ben Eater 在他的视频中甚至将他用来更新 SRAM 的倒置时钟比作第二个时钟。
我反对将“单周期 CPU”与此类 CPU 一起使用(基本上我见过的大多数/所有家庭培育的 TTL CPU,因为它们都以这种方式工作)是我同意 ZipCPU 使用相反的边缘(或相位)提交的时钟实际上与使用第二个时钟相同,这对“单周期”声明是一种嘲弄。
如果使用反对边缘实际上与使用单个边缘但使用双时钟周期相同,那么我认为使用该术语是有问题的。因此,我将 ZipCPU 的观点牢记在心,并将该术语收紧为使用单个边缘。
另一方面,似乎完全有可能构建一个仅使用同步组件(即边沿触发触发器)并且仅使用单个边沿的 CPU,在每个边沿上,我们将总线上的任何内容计时到选择的任何设备中写入并同时推进 PC。在一个边缘和下一个相同方向的边缘之间,会发生沉降。
以这种方式,我们最终得到 CPI=1 并且仅使用单个边沿 - 这与使用时钟的两个边沿的常见 TTL CPU 模式截然不同。
顺便说一句,我对 FPGA 的印象(我在这里没有提到)是 FPGA 中的存储元件都是同步触发器。我不知道,但这就是我的阅读所暗示的。无论如何,如果这是真的,那么基于 FPGA 的普通 CPU 可能具有 CPI=1 并且仅使用 +ve 边缘,因此这些很可能符合我对“单周期 CPU”的狭义定义。此外,我的阅读表明,各种 MIP 的 impls(可能是教育努力)可能符合我的定义。