【发布时间】:2017-06-04 20:45:42
【问题描述】:
我正在用 C 语言为 Z80 开发一个程序,并使用 SDCC 进行编译。我不知道如何为从 0x0066 开始的 NMI 中断和从 0x0038 开始的 IM1 中断创建中断处理程序。我正在使用这些调用:
void IM1_InterruptHandler(void) __interrupt
和
void NMI_InterruptHandler (void) __critical __interrupt
生成的程序集看起来很正确,但它们没有位于正确的地址。我确实发现了这个帖子:
https://sourceforge.net/p/sdcc/feature-requests/519/
但不知道如何将上述示例 crt0.s 文件与 SDCC 一起用于 Z80 目标。 使用 --use-crt 开关似乎不起作用。
unknown compiler option '--use-crt=crt0.s' ignored
任何有使用 SDCC 开发 Z80 经验的人可以提供一些指导吗?
编辑: 仍然不完全在那里。我的 crt.s 文件如下所示:
.module crt0
.globl _main
.globl _IM1_InterruptHandler
.globl _NMI_InterruptHandler
.area _HEADER (ABS)
;; Reset vector
.org 0
jp init
.org 0x08
reti
.org 0x10
reti
.org 0x18
reti
.org 0x20
reti
.org 0x28
reti
.org 0x30
reti
.org 0x38
jp _IM1_InterruptHandler
.org 0x66
jp _NMI_InterruptHandler
.org 0x100
init:
;; Stack at the top of memory.
ld sp,#0x8300
call _main
;; Ordering of segments for the linker.
.area _HOME
.area _CODE
.area _DATA
.area _CODE
我正在做以下事情:
sdasz80 -l -o mycrt.rel crt0.s
sdcc -mz80 --no-std-crt0 --code-loc 0x0000 --data-loc 0x8000 mycrt.rel ppclone_menu.c
一切似乎都编译得很好,但是当我在反汇编程序中调出代码时,我没有看到任何 crt0 代码被插入到上面的位置 0x08 到 0x66。
【问题讨论】: