Recentemente comecei a aprender como posso criar jogos para gameboy no z80 asm, sei que existe um registro na memória ($ff44) o registro LY, tentei ler esse registro usando a instrução "ld a, ($ff44) "em hexadecimal "3a 44 ff" mas quando executo o jogo no emulador de gameboy ele fecha o jogo.
Se eu usar as instruções: "ld hl, $ff44 ld a, (hl)", acho que funciona, mas por que não funciona quando uso a outra instrução?
(Desculpe, eu não falo inglês, então este texto pode estar mal escrito.)
Os processadores GameBoy não são z80. Também não é um Intel 8080. Tem fortes semelhanças com ambos, é claro.
O opcode 3A não significa
ld a, (nn)
no processador tipo GameBoy z80, significald a, (hl-)
também denotadoldd a, (hl)
, porém você escreve é uma instrução que usa o endereço dehl
e depois decrementahl
, não leva dois bytes de código extras como endereço. O 44 e o FF seriam vistos como instruções extras, com o significado de FFrst 7
.ld a, (nn)
pode ser codificado diretamente, mas com um código de operação diferente, ou seja, FA.O processador GameBoy tem outra coisa (que o z80 não tem) que você pode usar:
ld a, (0xFF00 + n)
codificado comoF0 n
. Economizaria espaço e tempo em comparação com a planícield a, (nn)
.Fontes: