Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GameBoy 16-bit load into 8-bit memory

I have begun programming an emulator for the Gameboy classic, my next project after a successful Chip 8 Emulator.

As a reference I use the GameBoy CPU Manual.

Now on page 66 it says:

LD  A,(HL)  7E  8

Basically, load the value HL into register A.

However, as I understand this, this would load the 16-bit value HL into the 8-bit register A. Which of course doesnt fit.

Do you have any idea how this is meant? All other references are just simple tables without explaination, but say the same thing.

Thanks for your answers!

like image 539
Max Willich Avatar asked Jan 04 '16 13:01

Max Willich


2 Answers

With this instruction the value pointed to by (HL) is loaded into A not the value of HL itself. For example if HL has the value 0xABCD and the value of the memory at address 0xABCD is 0x50 then 0x50 is loaded into register A.

Pseudo implementation

register.A = memory.ReadByte(register.HL);
like image 197
theonly112 Avatar answered Oct 01 '22 19:10

theonly112


I think LD A,(HL) is a synonym for something more widely written as LD a,[hl] based on the documentation for a similar instruction on page 71.

  1. LDD A,(HL) Description: Put value at address HL into A. Decrement HL. Same as: LD A,(HL) - DEC HL

Therefore, LD A,(HL) means "Put value at address HL into A." HL is a 16 bit value, but the address it references is 8 bit, so it fits into A.

like image 44
user5743777 Avatar answered Oct 01 '22 18:10

user5743777