TI-83+ z80 十六进制程序有问题
having trouble with TI-83+ z80 hex program
我制作了一个运行此十六进制代码的 AsmProgram:
9D95:00
9D96:00
9D97:00
9D98:00
9D99:0E
9D9A:09
9D9B:3E
9D9C:00
9D9D:EF
9D9E:5D
9D9F:49
9DA0:06
9DA1:80
9DA2:A8
9DA3:CB
9DA4:47
9DA5:CB
9DA6:0F
9DA7:CA
9DA8:95
9DA9:9D
9DAA:10
9DAB:F9
9DAC:C9
它应该等到按下 + 按钮然后结束,但它似乎不起作用。
据我所知,这是您的原始代码:
.org 9D95h
nop
nop
nop
nop
ld c, 09h ; ???
ld a, 0 ; ???
rst 28h ; \
.db 5Dh ; > DispTail, destroys AF, BC, DE, HL, aka
.db 49H ; / undefined behaviour in this case (we don't
; know what A contains)
ld b, 80h ; B <- 0x80
xor b ; A <- A XOR B
bit 0, a ; A[0] == 0, Z is set, if so
loop: rrc a ; rotate right A, C <- A[0]
jp z, 9D95h ; Jump to 9D95, if Z set
djnz loop ; Decrease B, jump if not zero to loop
ret ; After 128 jumps, returns
所以总而言之,他们的关键代码检查部分从一开始就不正确(调用错误的 ROM 调用并且过于复杂)。以下是似乎有效的方法:
.org 9D95h
rst 28h ; \
.db 72h ; > Call GetKey, A <- key code
.db 49h ; /
cp 80h ; Compare A with immediate value 0x80 (subtract),
; key code for [+] is 0x80
jp nz, 9D95h ; Jump if Z is not set (was not 0x80)
ret ; return
或十六进制:
EF 72 49 FE 80 C2 95 9D C9
你写的程序主要是针对TI-83+/84+/SE型号的计算器。您的预期目标是 TI-83。您需要更改三项主要内容:
- 在 .org 开始你的代码 $9327,而不是 $9D95
- 没有 bcall() 只是系统调用。而不是 bcall(_GetCSC) 你会调用 _GetCSC
- 您需要 ti83asm.inc 而不是 ti83plus.inc
综上所述,让我们制作一个示例程序:
.NOLIST
#define equ .equ
#define EQU .equ
#define end .end
#include "ti83asm.inc"
#include "tokens.inc"
.LIST
.org 9327h
start:
call _GetKey ;CDFE4C
cp 80h ;FE80
jr nz,start ;20F9
ret ;C9
我从来没有为 TI-83 编程过,所以我希望从我阅读的教程中拼凑出工作代码。
我制作了一个运行此十六进制代码的 AsmProgram:
9D95:00
9D96:00
9D97:00
9D98:00
9D99:0E
9D9A:09
9D9B:3E
9D9C:00
9D9D:EF
9D9E:5D
9D9F:49
9DA0:06
9DA1:80
9DA2:A8
9DA3:CB
9DA4:47
9DA5:CB
9DA6:0F
9DA7:CA
9DA8:95
9DA9:9D
9DAA:10
9DAB:F9
9DAC:C9
它应该等到按下 + 按钮然后结束,但它似乎不起作用。
据我所知,这是您的原始代码:
.org 9D95h
nop
nop
nop
nop
ld c, 09h ; ???
ld a, 0 ; ???
rst 28h ; \
.db 5Dh ; > DispTail, destroys AF, BC, DE, HL, aka
.db 49H ; / undefined behaviour in this case (we don't
; know what A contains)
ld b, 80h ; B <- 0x80
xor b ; A <- A XOR B
bit 0, a ; A[0] == 0, Z is set, if so
loop: rrc a ; rotate right A, C <- A[0]
jp z, 9D95h ; Jump to 9D95, if Z set
djnz loop ; Decrease B, jump if not zero to loop
ret ; After 128 jumps, returns
所以总而言之,他们的关键代码检查部分从一开始就不正确(调用错误的 ROM 调用并且过于复杂)。以下是似乎有效的方法:
.org 9D95h
rst 28h ; \
.db 72h ; > Call GetKey, A <- key code
.db 49h ; /
cp 80h ; Compare A with immediate value 0x80 (subtract),
; key code for [+] is 0x80
jp nz, 9D95h ; Jump if Z is not set (was not 0x80)
ret ; return
或十六进制:
EF 72 49 FE 80 C2 95 9D C9
你写的程序主要是针对TI-83+/84+/SE型号的计算器。您的预期目标是 TI-83。您需要更改三项主要内容:
- 在 .org 开始你的代码 $9327,而不是 $9D95
- 没有 bcall() 只是系统调用。而不是 bcall(_GetCSC) 你会调用 _GetCSC
- 您需要 ti83asm.inc 而不是 ti83plus.inc
综上所述,让我们制作一个示例程序:
.NOLIST
#define equ .equ
#define EQU .equ
#define end .end
#include "ti83asm.inc"
#include "tokens.inc"
.LIST
.org 9327h
start:
call _GetKey ;CDFE4C
cp 80h ;FE80
jr nz,start ;20F9
ret ;C9
我从来没有为 TI-83 编程过,所以我希望从我阅读的教程中拼凑出工作代码。