问题标签 [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.

0 投票
3 回答
1626 浏览

assembly - 单通道 z80 汇编器(源代码或可在 Windows 上使用)

我最近接触了 Z80 系统,并且一直在为调试器编写反汇编程序(推入从 Z80y 内存中提取的指令)。我可以得到指令,但是在组装 ASM 时会出现问题,我发现大多数汇编程序要么不能正确理解整套指令,要么会混淆某些指令,这意味着无法正确转换回 ASM。我今天问你们的是,如果你们有一个真正有效的(来源会更好)。我还希望它有一个单通道选项,因为否则它不可能(几乎)。

最后一件事是要知道是否有人有完整的测试指令集,因为目前我只有一个 8080 列表,这意味着我无法测试扩展指令。

非常感谢任何链接/文件,Andy A

0 投票
3 回答
953 浏览

c - sdcc 不接受代码

我对 SDCC 有疑问。我的代码(我试图从另一个编译器移植)使用具有灵活数组成员的结构。但是,当我尝试编译以下代码时:

SDCC 给出以下错误:

是什么赋予了?这段代码在 gcc 中编译得很好,更不用说我正在使用的其他 z80 编译器了。

编辑:我发现这个 SDCC 错误似乎是相关的。有人可以解释它是否以及如何?

0 投票
1 回答
382 浏览

c - TI-84:使用 z88dk 从目录中调用函数

我正在使用 z88dk 用 C 语言对我的 TI-84 进行编程。我需要调用 normalcdf 和 Ztest 之类的东西。我知道可以从 ti-BASIC 调用它们,但是如何从 C 或内联汇编调用它们?

0 投票
2 回答
732 浏览

vb.net - 如何在 VB.NET 中将十六进制偏移量转换为两字节指针?

我正在开发一个包含 Z80 两字节指针转换器的专业十六进制编辑器。

转换背后的数学是这样的:

  1. 获取您希望指向的偏移量。
  2. 取偏移量的最后四位数字,并切断其余数字。
  3. 如果偏移量超出范围&H4000- &H7FFF,则必须像这样转换:(offset % &H4000) + &H4000. 换句话说:
    • 如果偏移量是从&H0000&H3FFF,则添加&H4000到偏移量。
    • 如果偏移量是 from&H4000&H7FFF,不要对偏移量做任何事情。
    • 如果偏移量是从&H8000&HBFFF,则从偏移量中减去&H4000
    • 如果偏移量是从&HC000&HFFFF,则从偏移量中减去&H8000

我的问题是我不知道如何将 5 或 6 位十六进制偏移量转换为两位数偏移量。我将如何在开始时剃掉多余的字节(第二步)?

0 投票
1 回答
185 浏览

vb.net - 指针转换器返回不正确的值

我正在尝试创建一个 Z80 偏移指针转换器,但是当我编译程序并对其进行测试时,输出变量为零。

它背后的数学是这样的:

  1. 获取您希望指向的偏移量。
  2. 取偏移量的最后四位数字,并切断其余数字。
  3. 如果偏移量超出 &H4000 - &H7FFF 范围,则必须按如下方式转换:(offset % &H4000) + &H4000。换句话说:
    • 如果偏移量是从 &H0000 到 &H3FFF,则将 &H4000 添加到偏移量。
    • 如果偏移量是从 &H4000 到 &H7FFF,不要对偏移量做任何事情。
    • 如果偏移量是从 &H8000 到 &HBFFF,则从偏移量中减去 &H4000。
    • 如果偏移量是从 &HC000 到 &HFFFF,则从偏移量中减去 &H8000。

单击转换按钮时调用的事件代码如下:

此外,这是转换背后的代码,在 CoreActions 模块中

输出结果一无所有的地方到底出了什么问题?我在运行时没有收到任何异常或警告...

0 投票
2 回答
533 浏览

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 中做到这一点?我知道这可能是一个非常简单的答案,但我看到很多不同的选项可以将它写入文件——有些工作,但大多数不适合我。你能给我一些示例代码来说明我将如何做到这一点吗?

0 投票
3 回答
477 浏览

c - 取消引用 C 与汇编程序

学习指点:C 中的星号运算符 * 可以说类似于 Z80 汇编器中的括号吗?

换句话说,这两个句子是否具有相似的含义:

0 投票
1 回答
454 浏览

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以外的页面如何指定地址?

0 投票
2 回答
583 浏览

assembly - Z80 使用 DAA 溢出

我正在编写一个 Z80 仿真器,并且一直试图理解十进制调整指令对某些操作数的作用。这些操作码在真正的 Z80 上的结果(在寄存器 A 和 F 中)是什么?

我的代码目前在 A 寄存器中以 0xA0 完成,并且设置了半进位和溢出位。但它应该返回 0 吗?

0 投票
3 回答
1056 浏览

assembly - Z80 指令寄存器大小

我正在编写一个 Z80 仿真器,我对指令寄存器的大小感到困惑。

在 Z80 手册中说指令长度为 1 到 4 个字节,我是否假设 Z80 具有 32 位指令寄存器?如果不是,那么它如何执行这样的指令?

在此处输入图像描述