我正在開發一個用於Z80的C程序並使用SDCC進行編譯。我無法弄清楚如何爲從0x0066開始的NMI中斷和從0x0038開始的IM1中斷創建中斷處理程序。我使用這些調用:無法弄清楚如何使用SDCC爲Z80編寫中斷處理程序
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
任何經驗豐富的Z80開發與SDCC,可以提供一些指導?
編輯: 還不完全。我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之上。
非常感謝!我會給它一個鏡頭並回報。 – ajcrm125
由於堆棧溢出而導致上述更新問題的註釋限制:( – ajcrm125
註釋不適用於發佈長代碼示例。提供更多信息的正確方法的確是爲了擴展問題。 – Konamiman