问题标签 [z80]
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.
assembly - 单通道 z80 汇编器(源代码或可在 Windows 上使用)
我最近接触了 Z80 系统,并且一直在为调试器编写反汇编程序(推入从 Z80y 内存中提取的指令)。我可以得到指令,但是在组装 ASM 时会出现问题,我发现大多数汇编程序要么不能正确理解整套指令,要么会混淆某些指令,这意味着无法正确转换回 ASM。我今天问你们的是,如果你们有一个真正有效的(来源会更好)。我还希望它有一个单通道选项,因为否则它不可能(几乎)。
最后一件事是要知道是否有人有完整的测试指令集,因为目前我只有一个 8080 列表,这意味着我无法测试扩展指令。
非常感谢任何链接/文件,Andy A
c - sdcc 不接受代码
我对 SDCC 有疑问。我的代码(我试图从另一个编译器移植)使用具有灵活数组成员的结构。但是,当我尝试编译以下代码时:
SDCC 给出以下错误:
是什么赋予了?这段代码在 gcc 中编译得很好,更不用说我正在使用的其他 z80 编译器了。
编辑:我发现这个 SDCC 错误似乎是相关的。有人可以解释它是否以及如何?
c - TI-84:使用 z88dk 从目录中调用函数
我正在使用 z88dk 用 C 语言对我的 TI-84 进行编程。我需要调用 normalcdf 和 Ztest 之类的东西。我知道可以从 ti-BASIC 调用它们,但是如何从 C 或内联汇编调用它们?
vb.net - 如何在 VB.NET 中将十六进制偏移量转换为两字节指针?
我正在开发一个包含 Z80 两字节指针转换器的专业十六进制编辑器。
转换背后的数学是这样的:
- 获取您希望指向的偏移量。
- 取偏移量的最后四位数字,并切断其余数字。
- 如果偏移量超出范围
&H4000
-&H7FFF
,则必须像这样转换:(offset % &H4000) + &H4000
. 换句话说:- 如果偏移量是从
&H0000
到&H3FFF
,则添加&H4000
到偏移量。 - 如果偏移量是 from
&H4000
到&H7FFF
,不要对偏移量做任何事情。 - 如果偏移量是从
&H8000
到&HBFFF
,则从偏移量中减去&H4000
。 - 如果偏移量是从
&HC000
到&HFFFF
,则从偏移量中减去&H8000
。
- 如果偏移量是从
我的问题是我不知道如何将 5 或 6 位十六进制偏移量转换为两位数偏移量。我将如何在开始时剃掉多余的字节(第二步)?
vb.net - 指针转换器返回不正确的值
我正在尝试创建一个 Z80 偏移指针转换器,但是当我编译程序并对其进行测试时,输出变量为零。
它背后的数学是这样的:
- 获取您希望指向的偏移量。
- 取偏移量的最后四位数字,并切断其余数字。
- 如果偏移量超出 &H4000 - &H7FFF 范围,则必须按如下方式转换:(offset % &H4000) + &H4000。换句话说:
- 如果偏移量是从 &H0000 到 &H3FFF,则将 &H4000 添加到偏移量。
- 如果偏移量是从 &H4000 到 &H7FFF,不要对偏移量做任何事情。
- 如果偏移量是从 &H8000 到 &HBFFF,则从偏移量中减去 &H4000。
- 如果偏移量是从 &HC000 到 &HFFFF,则从偏移量中减去 &H8000。
单击转换按钮时调用的事件代码如下:
此外,这是转换背后的代码,在 CoreActions 模块中
输出结果一无所有的地方到底出了什么问题?我在运行时没有收到任何异常或警告...
vb.net - 如何在 VB.NET 中编写自定义程序集编译器(某种)
我一直在尝试为 Game Boy Advance 的 Z80 处理器使用的自定义语言编写一个简单的脚本编译器。
我想要它做的就是查看一个人类可读的命令,获取它及其参数并将其转换为十六进制值到 ROM 文件中。而已。每个命令都是一个字节,每个命令都可以采用不同数量的参数 - 参数可以是 8、16 或 32 位,每个命令都有特定数量的参数。
所有这类代码都由游戏处理并在游戏内存中转换为可用的机器代码,所以如果你愿意的话,我不会编写一个完整的汇编编译器。游戏会自动知道一个命令有多少个 args,每个命令做什么,确切地如何执行它等等。
例如,您有命令 0x4E,它接受一个 8 位参数和另一个 32 位参数。在十六进制中,这显然是4E XX YY YY YY YY
. 我希望我的编译器从文本中读取它foo 0xXX 0xYYYYYYYY
并直接将其写入文件作为前者。
我的问题是,我将如何在 VB.NET 中做到这一点?我知道这可能是一个非常简单的答案,但我看到很多不同的选项可以将它写入文件——有些工作,但大多数不适合我。你能给我一些示例代码来说明我将如何做到这一点吗?
c - 取消引用 C 与汇编程序
学习指点:C 中的星号运算符 * 可以说类似于 Z80 汇编器中的括号吗?
换句话说,这两个句子是否具有相似的含义:
c - 如何为 ATMEL 闪存芯片 AT45DB081D 执行连续阵列读取
我正在尝试使用以下代码通过 SPI 谈论 AT45DB081D 芯片:
我还有其他几个命令可以工作,包括:
- 缓冲区 1/2 读取
- 缓冲区 1/2 写入有/无页擦除
- 主内存到缓冲区 1/2
鉴于这些其他命令有效,我有理由相信 FLASH_SEL_ON、SPIShift 等按预期工作。
请注意,我可以从第 0 页读取任何偏移量。但是,我无法从 0 以外的任何页面读取。这使我相信问题围绕着我指定页面的数学存在缺陷。
在调试中,我发现对于第 1 页,偏移量 0,24 位地址计算为:
根据地址格式的数据表规范,这看起来是正确的:
在哪里:
- x 未使用
- P 页码
- B 偏移
当我指定 pageNumber = 0 时,我得到了放在那里的正确值。但是,当我指定 pageNumber = 1 时,我得到所有 255 个值,而不是我之前放置在那里的值。
0以外的页面如何指定地址?
assembly - Z80 使用 DAA 溢出
我正在编写一个 Z80 仿真器,并且一直试图理解十进制调整指令对某些操作数的作用。这些操作码在真正的 Z80 上的结果(在寄存器 A 和 F 中)是什么?
我的代码目前在 A 寄存器中以 0xA0 完成,并且设置了半进位和溢出位。但它应该返回 0 吗?
assembly - Z80 指令寄存器大小
我正在编写一个 Z80 仿真器,我对指令寄存器的大小感到困惑。
在 Z80 手册中说指令长度为 1 到 4 个字节,我是否假设 Z80 具有 32 位指令寄存器?如果不是,那么它如何执行这样的指令?