SECTION "Utilities", ROM0 ; Busy-wait until vertical blank occurs wait_for_vblank:: ld a, [$ff41] and 3 cp 1 jr nz, wait_for_vblank ret ; Copy data between two regions (takes 40*N+12 cycles) ; @param bc Pointer to the destination region ; @param hl Pointer to the source region ; @param d Size (in bytes) to copy. Must be >0 ; @destroy a, b, c, d, h, l memcpy:: ld a, [hli] ; 8 ld [bc], a ; 8 inc bc ; 8 dec d ; 4 jr nz, memcpy ; 12/8 ret ; 16 ; Fill a memory region with a value ; @param hl Pointer to the destination region ; @param a Byte to fill with ; @param c Number of bytes to fill. Must be >0 ; @destroy a, c, hl memset:: ld [hli], a dec c jr nz, memset ret ; Divide a value by 10 (http://homepage.divms.uiowa.edu/~jones/bcd/decimal.html#division) ; @param b Dividend ; @return a Quotient ; @destroy b div10:: ld a, b srl a srl a add b srl a add b srl a srl a srl a add b srl a add b srl a srl a srl a srl a ret