z80 cpu 的 c 编译器

问题描述 投票:0回答:1

我是一名工程学院的学生,我在做项目时遇到了一个问题。在这个项目中,我正在设计一个微控制器。我选择使用 Z80 CPU 因为它简单且流行。然而,通过 RAM 地址控制引脚的概念出现了问题。虽然通过汇编代码控制 RAM 地址是可行的,但事实证明,过渡到使用 C 来管理微控制器的逻辑具有挑战性。

例如,在汇编代码中,我成功地将地址0x3FFF处的RAM值更改为0x02。


.org $0000      ; Set origin to 0000h

START:

    LD HL, 0X3FFF  ; Load HL with the address 0x3FFF
    LD A, 0X02 ; Load register A with the value 0x02
    LD (HL), A     ; Store the value in register A at the address pointed to by HL



我使用复古汇编器生成二进制文件,然后将其用于模拟程序 Proteus 8 中的虚拟 EEPROM 中。

由于我的设置运行正常,我选择尝试使用 C 代码而不是汇编。我在网上找到了一个合适的C编译器(z88dk)并继续利用以下代码来控制RAM地址

int main(){


     int *p = (int *)0x3FFF;
    *p |= 0x02;

    return 0;


}

我使用这个命令来生成bin文件

zcc +cpm -subtype=z80pack -compiler=sdcc mem.c -o mem.bin
zcc +cpm mem.c -create-app -subtype=z80pack -compiler=sdcc

我能够使用带有 eeprom 模拟的 bin 文件,但代码不起作用,我应该怎么做才能用 c 控制 ram 地址值? 我是否正确使用了它还是应该更改编译器?

c assembly low-level z80
1个回答
0
投票

试试这个:

int main(){
     unsigned char *p = (unsigned char *)0x3FFF;
    *p = 0x02;
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.