This routine will blank a portion of the screen from character square X, Y of Width and Height defined.
Good for clearing out the portion of the screen you need cleared - e.g. just the game window.
SUB clearBox(x as uByte, y as uByte, width as uByte, height as uByte) ' This subroutine will blank the pixels for a box, measured in Character Squares ' from print positions X,Y to X + Width, Y + height. ' ' Expected to be useful for clearing a window of space - perhaps in a game. ' because of this THE ERROR CHECKING IS NONEXISTENT. ' Please make sure you send sensible data - ' 0 < x < 32, 0 < y < 23, x + width < 32 and y + height < 23 ' Britlion 2012. ASM ld b,(IX+5) ;' get x value ld c,(IX+7) ;' get y value ld a, c ;' Set HL to screen byte for this character. and 24 or 64 ld h, a ld a, c and 7 rra rra rra rra add a, b ld l, a ld b, (IX+11) ;' get height ld c,(IX+9) ;' get width clearbox_outer_loop: xor a push bc ;' save height. push hl ;' save screen address. ld d, 8 ;' 8 rows to a character. clearbox_mid_loop: ld e,l ;' save screen byte lower half. ld b,c ;' get width. clearbox_inner_loop: ld (hl), a ;' write out a zero to the screen. inc l ;' go right. djnz clearbox_inner_loop ;' repeat. ld l,e ;' recover screen byte inc h ;' down a row dec d jp nz, clearbox_mid_loop ;' repeat for this row. pop hl ;' get back address at start of line pop bc ;' get back char count. ld a, 32 ;' Go down to next character row. add a, l ld l, a jp nc, clearbox_row_skip ld a, 8 add a, h ld h, a clearbox_row_skip: djnz clearbox_outer_loop END ASM END SUB
cls for n=1 to 300 print n; next n clearBox(2,3,18,11)