【发布时间】:2019-12-20 08:24:33
【问题描述】:
我正在尝试将两个字节(颜色值)写入我的 TI-84 Plus CE-T 计算器的 VRAM,该计算器使用 Zilog eZ80 CPU。 VRAM 从 0xD40000 开始,长度为 0x25800 字节。计算器有一个名为MemSet 的内置系统调用,它用一个字节填充一块内存,但我希望它在两个不同的值之间交替并将它们存储在内存中。我尝试使用以下代码:
#include "includes\ti84pce.inc"
.assume ADL=1
.org userMem-2
.db tExtTok,tAsm84CeCmp
call _homeup
call _ClrScrnFull
ld hl,13893632 ; = D40000, vram start
ld bc,153600 ; = 025800, count/vram length
j1:
ld (hl),31 ; set first byte
inc hl
dec bc
jr z,j2 ; jump to end if count==0
ld (hl),0 ; set second byte
inc hl
dec bc
jr z,j2 ; jump to end if count==0
jp j1 ; loop
j2:
call _GetKey
call _ClrScrnFull
ret
我希望它从 0xD40000 开始将 31 00 31 00 31 00... 输出到内存中,但它似乎只更改了第一个字节并在这样做之后跳转到末尾。有关如何解决此问题的任何想法?
【问题讨论】:
-
宽于 1 字节的模式的等效 C 函数是“wmemset”,它采用
wchar(宽字符)参数。不过,如果您的计算器缺少该功能,我不会感到惊讶。不过,其他平台也有;例如glibc 有一个针对各种目标的 asm 优化 wmemset。 -
您真的应该考虑使用
fasmg进行汇编编程。它要优越得多,并且实际上得到了支持。这里有更多信息:github.com/CE-Programming/documentation
标签: assembly texas-instruments z80