memcpy: ; src = DE, dest = HL, n = BC memcpy.loop: LD A, (DE) LD (HL+), A INC DE DEC BC XOR A CP B JR NZ =memcpy.loop CP C JR NZ =memcpy.loop RET bzero: ; dest = HL, n = BC LD A, $00 bzero.loop: LD (HL+), A INC DE DEC BC CP B JR NZ =bzero.loop CP C JR NZ =bzero.loop RET .MACRODEF ABS BIT 7, A JR Z, =$end XOR $ff INC A $end: .END Print_8bit: ; Number in A, Memory Tilemap position in HL PUSH AF PUSH BC LD C, A SWAP A ; We start by the highest nibble AND $0f OR $10 LD (HL+), A LD A, C AND $0f ; Then the lowest OR $10 LD (HL+), A POP BC POP AF RET MUL: ; B x C => EA XOR A LD E, $00 BIT 7, B JR Z, =MUL.bit7 ADD C MUL.bit7: SLA A RL E BIT 6, B JR Z, =MUL.bit6 ADD C MUL.bit6: SLA A RL E BIT 5, B JR Z, =MUL.bit5 ADD C MUL.bit5: SLA A RL E BIT 4, B JR Z, =MUL.bit4 ADD C MUL.bit4: SLA A RL E BIT 3, B JR Z, =MUL.bit3 ADD C MUL.bit3: SLA A RL E BIT 2, B JR Z, =MUL.bit2 ADD C MUL.bit2: SLA A RL E BIT 1, B JR Z, =MUL.bit1 ADD C MUL.bit1: SLA A RL E BIT 0, B JR Z, =MUL.bit0 ADD C MUL.bit0: RET VBlank_Wait: PUSH AF LD A, $reg_lcd_controller BIT 7, A JR Z, =VBlank_Wait.End VBlank_Wait.loop: LD A, $reg_lcd_status AND $03 CP $01 JR NZ, =VBlank_Wait.loop VBlank_Wait.End: POP AF RET