- @text[0][i] = ' '
- @attributes[0][i] = 0x07
- # move (newly cleared) top line to the bottom
- tmp = @text.shift()
- @text.push(tmp)
- tmp = @attributes.shift()
- @attributes.push(tmp)
+ @text[@scroll_top][i] = ' '
+ @attributes[@scroll_top][i] = 0x07
+
+ # move (newly cleared) top line to the bottom of the scrolling region
+ @text = [
+ @text[0...@scroll_top]..., # up to but not including scroll top
+ @text[@scroll_top + 1 .. @scroll_bottom]..., # scroll region except top line of it
+ @text[@scroll_top], # top line of scroll region (already cleared)
+ @text[@scroll_bottom + 1 ... @height]... # rest of screen
+ ]
+ @attributes = [
+ @attributes[0...@scroll_top]..., # up to but not including scroll top
+ @attributes[@scroll_top + 1 .. @scroll_bottom]..., # scroll region except top line of it
+ @attributes[@scroll_top], # top line of scroll region (already cleared)
+ @attributes[@scroll_bottom + 1 ... @height]... # rest of screen
+ ]
+