问题标签 [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.
retro-computing - MPW 工具的主要符号的结构是什么?
这个问题是关于 Mac OS Classic的,它已经过时了好几年了。我希望有人仍然对此有所了解!
在过去的几周里,我一直在构建一个PEF 可执行解析器,并且我已经插入了一个 PowerPC 解释器。借助大量的魔法,我希望能够(在某种程度上)在 Mac OS X 下运行一些 Mac OS 9 程序。事实上,我现在已经准备好开始使用小型应用程序进行测试了。
为了帮助我解决这个问题,我在 SheepShaver 中安装了旧版本的 Mac OS 并下载了(现在免费的) MPW Tools 1,我构建了一个“hello world” MPW 工具(只是你的经典puts("Hello World!")
C 程序,除了为 Mac OS 编译9)。
构建后,它会生成一个带有代码段和数据段的程序。我希望我能够直接跳转到可执行文件的主符号(在加载程序部分的标题中指定),但我大吃一惊:编译器将主符号放在数据部分中。
显然,数据部分中没有可执行代码。
回到Mac OS Runtime Architectures文档(1997 年发布,令人惊讶的是仍然在 Apple 的网站上),我发现这是完全合法的:
使用主符号作为数据结构
如前所述,主符号不必指向例程,而是可以指向数据块。您可以将此事实用于插件,其中主要符号引用的数据块可以包含有关插件的基本信息。以这种方式使用主符号有几个优点:
- 当您以编程方式准备片段时,代码片段管理器会返回主符号的地址,因此您无需调用 FindSymbol。
- 您不必为插件保留和记录导出的特定名称。
但是,没有特定的符号名称意味着插件的用途并不那么明显。插件可以将其名称、图标或有关其符号的信息存储在主符号数据结构中。以这种方式存储符号信息消除了对多个 FindSymbol 调用的需要。
因此,我的结论是 MPW 工具在 MPW shell 内作为插件运行,并且可执行文件的主要符号指向一些应该告诉它如何启动的数据结构。
但这仍然不能帮助我弄清楚该数据结构中的内容,并且仅查看其十六进制转储并不是很有启发性(我知道编译器将这个特定程序__start
的地址放在哪里,但这绝对不足以做一个通用的 MPW 外壳“替换”)。显然,关于这个主题的最有价值的信息来源似乎在 2004 年随着 Mac OS 9 消失了。
那么,一个 MPW 工具的主符号所指向的数据结构的格式是什么?
1. 显然,Apple 最近取消了我从中获取 MPW 工具的 FTP 服务器的插件,因此它可能不再可用;虽然谷歌搜索“MPW_GM.img.bin”确实找到了一些替代品)。
retro-computing - Mac OS Classic 运行时是否有一些参考资料?
我正在研究 Mac OS Classic 运行时的实现,以便再次在 OS X 上运行 Classic 程序。该项目包括一个 PowerPC 仿真器、一个 PEF 可执行链接器以及调用本机 (x86) 代码的可能性。
模拟器和链接器似乎运行良好,所以我将注意力转移到(重新)实现 Mac OS Classic 库上。我目前正在尝试用我的“模拟器”运行 MPW 工具;在 Apple 从其服务器中提取 MPW Shell 并在 SheepShaver 中运行它之前的几个小时,我获取了一份 MPW Shell 的副本,我编译了您的通用“Hello World!”。程序,我能够成功运行它。
但是,就兼容性而言,这差不多。当我尝试运行 Unmangle 程序时,我发现它正在尝试访问_IntEnv
和__NubAt3
,两个 StdCLib 导出的全局变量,显然没有文档。(谷歌仍然有一些苹果邮件列表结果,用于 Mac OS X 早期的链接问题;必应和雅虎都没有结果。)
我发现缺乏文档特别令人不安。我有时可以通过 Classic 头文件猜测全局变量的布局,甚至可以猜测它们在反汇编程序中的使用方式,但这并不是很有效,没有什么可以告诉我我做对了。
即使我得到了大部分 StdCLib 的正确性,在某些时候我仍然需要有关其他库的文档。
在哪里可以找到有关 Mac OS Classic 运行时的文档?
assembly - 6502中有哪些使用控制流的方法?
我正在尝试了解 6502 程序集中的控制流程。
假设我有以下代码:
就个人而言,我喜欢 switch 语句或其他一些控制流结构。上面的 JMP 也与我有关。似乎有一种更好的方法可以在没有这种意大利面条代码的情况下处理多种情况。
javascript - 让这个逆向计算的扫描线摇滚。在 div 中扫描多行很难
工作小提琴在这里:http: //jsfiddle.net/WyXLB/1/
当一个 HTML 元素包含多行文本时,我想扫描每一行。目前,我只是扫描整个元素的边界矩形。
一些代码是:
我怎样才能打破整个边界矩形的动画,扫描每一行。我尝试在上述函数中放置一个动画->回调递归,每次调用将掩码降低一个 real_height,但出现不可预测/混乱的行为。
ascii - 从 hexdump 中去除高位 - 将高 ascii 转换为低
我正在使用 Apple II 磁盘映像,试图通过 hexdump 检查其内容。
文件中编码了各种内容的字符串,例如玩家的姓名。在 hexdump 中,它们以“高”或“扩展”ASCII 形式出现。
这个字符串:
读作“ÒÉÁÎ ÔÈÅ ÆÉÓÔ”,但去掉高位后,上面的字符串将是
会读到“BRIAN THE FIST”
我正在寻找一种方法(脚本或其他方式)将 hexdump 的“高”ASCII 字节剥离为“低”字节,或者寻找一种可以将高字符解释并显示为低等值的应用程序。
c - SDCC 和 malloc() - 分配的内存比可用内存少得多
当我使用 SDCC 3.1.0 编译此代码并在 Amstrad CPC 464 上运行它时(在仿真下,WinCPC 0.9.26 在 Wine 上运行):
...它始终在 92 malloc()s 处敲击。我做了 460 个字节,这导致我提出几个问题:
malloc() 在这个系统上做什么?即使在 64kB 的系统上,我也有点希望存储量增加一个数量级
行为在 64kB 系统和 128kB 系统上是一致的;我是否必须执行某种魔术才能访问额外的内存,例如手动银行切换?
ms-access - MS Access DOS 主题?
我刚刚将旧的 MS-DOS Paradox 数据库转换为 MS Access 2013。最终用户不喜欢新的 Access 外观,所以我的老板要求我尽可能让它看起来像旧的 DOS 应用程序。
有什么办法可以做到这一点...旧字体配色方案等?
c - 我正在用 C 语言编写游戏。控制台与否?
我正在使用 Game Maker 制作一些游戏,但我想使用 C 制作简单的游戏。我是一个新手 C 程序员。当我编码时,输出总是在 CMD Windows 控制台中。我可以制作一些简单的游戏,但总是在控制台中,这不是很灵活(没有滚动就无法制作动画)。当您运行更复杂的游戏时,会创建一个完整的新屏幕,而我实际上会与该屏幕进行交互。
所以我在使用 C 语言时遇到的问题是:这个新屏幕是如何加载的?我认为有一些 Windows API 可以创建新屏幕或其他东西。顺便说一句,在过去,我指的是 DOS 时代,你只是使用控制台,但你可以加载一个新的游戏画面。你怎么能做到这一点?
我想要一些研究根源的指南。我只是不想调用库 X 或使用 SDL。
谢谢你的帮助。
serial-port - 基于 Java 的 8 位计算机仿真器的 VT100 终端仿真
我成功地使用 GNU Screen 作为串行终端,使用串行线路与我的 Altair 8800 克隆( http://altairclone.com/ )“对话”。我使用的命令是'screen -itrip /dev/ttyUSB0'。Screen 进行 VT100 仿真,从输出中去除 MSB 等 - 完美运行。
现在,我也在用 Java 开发 Altair 8800 的模拟器,并想使用一些终端模拟器来连接它并与之交谈,就像它是串行设备后面的真机一样。在 Linux 世界中解决问题的最佳方法是什么?有没有办法为此使用屏幕?有些东西告诉我解决方案是微不足道的,但我还不知道;)感谢您的任何建议。
x86 - 80386/80287 组合在 32 位模式下的表现如何?
我对旧计算机的逆向计算和仿真感兴趣,并且对 80287 有疑问:
使用现代 FPU,FNSAVE 指令在 CPU 执行 16 位代码时写入 94 字节数据,在 CPU 执行 32 位代码时写入 108 字节数据。FSTENV 指令的行为类似(14 或 28 字节,具体取决于代码类型)。
然而,为 16 位 80286 CPU 设计的 80287 FPU 也可以与 32 位 80386 CPU 一起使用。
从 32 位代码调用 FNSAVE 和 FSTENV 并启用 386/287 组合的分页时,FNSAVE 和 FSTENV 的行为如何?
80287 手册明确提到了 80386,但它只描述了 94 字节的数据格式。然而另一本手册指出,负责保存 108 字节而不是 94 字节的是 80386 而不是 80387。
据称Linux在使用80287时崩溃的原因是什么?
94字节格式与Linux问题有关吗?
谢谢