// IN: (OFFSET_Y, OFFSET_X)
// OUT: HL=VRAM_NAME ADDRESS, A=PATTERN
LD A,(OFFSET_Y)
AND #F8 // V7 V6 V5 V4 V3 0 0 0
LD H,0
LD L,A
ADD HL,HL // 0 0 0 0 0 0 0 V7 | V6 V5 V4 V3 0 0 0 0
ADD HL,HL // 0 0 0 0 0 0 V7 V6 | V5 V4 V3 0 0 0 0 0
LD DE,VRAM_NAME
ADD HL,DE // HL=VRAM_NAME+(Y*32)
LD A,(OFFSET_X) // X7 X6 X5 X4 X3 X2 X1 X0
SRL A
SRL A
SRL A // 0 0 0 X7 X6 X5 X4 X3
OR L
LD L,A // V5 V4 V3 X7 X6 X5 X4 X3
// READ VRAM
// THIS IS OK ON EMULATORS, BUT MOST CERTAINLY WON'T WORK ON THE REAL HARDWARE DUE TO TIMING CONSTRAINTS
DI
LD A,L
OUT (#BF),A
LD A,H
AND #3F
OUT (#BF),A
IN A,(#BE)
EI
RET