z80 を使用して ZX Spectrum 用のゲームを書いていますが、少し問題があります。「a」レジスタに保持されている数値を「de」に保持されている 16 進数値に変換するルーチンを操作しました。他の方法で変換する方法がわかりません。EG は de で 16 進数値を渡し、これを "a" で保持される 10 進数に変換します。
注意: 次のルーチンは、入力を 0 から F までの値を表す ASCII 値に変換します。例えば、a = 255 の場合、d = 70 および e = 70 の場合、「F」は ASCII 値 70 です。
NumToHex ld c, a ; a = number to convert
call Num1
ld d, a
ld a, c
call Num2
ld e, a
ret ; return with hex number in de
Num1 rra
rra
rra
rra
Num2 or $F0
daa
add a, $A0
adc a, $40 ; Ascii hex at this point (0 to F)
ret
これを逆に実行するための解決策についてアドバイスしたり、より良い解決策を提供したりできますか?