.module Scroll ;------------------------------------------------------------------------------- ;@doc:routine ; ; === Scroll.Up === ; ; Scrolls the text viewport up one line. ; ;@doc:end ;------------------------------------------------------------------------------- Up.Routine push hl push de push bc push af call Viewport.TextIsFullScreen jp z,Scroll.Up.FullScreen call Viewport.TextIsFullWidth jp z,Scroll.Up.FullWidth Scroll.Up.Subregion ld a,(Bounds.MinX) ld c,a ld a,(Bounds.MaxX) sub c inc a ld b,a - push bc call Scroll.Up.Column pop bc inc c djnz - jp Scroll.Up.Exit Scroll.Up.Column ; In: C = column to clear. ; Scroll column on video buffer. ld a,(Bounds.MinY) ld e,a ld a,(Bounds.MaxY) sub e jr z,+ push ix add a,a add a,a add a,a ld b,a push bc ld a,(Bounds.MinY) call ATimes96 ld de,(Lcd.Buffer) add hl,de ld b,0 add hl,bc push hl pop ix pop bc ld de,12 - ld a,(ix+12*8) ld (ix+0),a add ix,de djnz - pop ix + ; Clear bottom cell. ld a,(Bounds.MaxY) call ATimes96 ld de,(Lcd.Buffer) add hl,de ld b,0 add hl,bc ld a,(Vdu.Text.BackgroundColour) add a,a add a,a sbc a,a ld de,12 ld b,8 - ld (hl),a add hl,de djnz - ; Scroll column on text buffer. ld a,(Bounds.MinY) ld e,a ld a,(Bounds.MaxY) sub e jr z,+ push ix ld b,a push bc ld a,(Bounds.MinY) call ATimes12 ld de,Text.Buffer add hl,de ld b,0 add hl,bc push hl pop ix pop bc ld de,12 - ld a,(ix+12) ld (ix+0),a add ix,de djnz - pop ix + ; Clear bottom cell. ld a,(Bounds.MaxY) call ATimes12 ld de,Text.Buffer add hl,de ld b,0 add hl,bc ld (hl),' ' ret Scroll.Up.FullWidth ; Scroll video buffer. ld a,(Bounds.MinY) ld b,a ld a,(Bounds.MaxY) sub b jr z,+ call ATimes96 push hl ld a,(Bounds.MinY) call ATimes96 ld de,(Lcd.Buffer) add hl,de push hl ld de,12*8 add hl,de pop de pop bc ldir + ; Clear bottom row. ld a,(Bounds.MaxY) call ATimes96 ld de,(Lcd.Buffer) add hl,de ld d,h ld e,l inc de ld bc,12*8-1 ld a,(Vdu.Text.BackgroundColour) add a,a add a,a sbc a,a ld (hl),a ldir ; Scroll text buffer. ld a,(Bounds.MinY) ld b,a ld a,(Bounds.MaxY) sub b jr z,+ call ATimes12 push hl ld a,(Bounds.MinY) call ATimes12 ld de,Text.Buffer add hl,de push hl ld de,12 add hl,de pop de pop bc ldir + ; Clear bottom row. ld a,(Bounds.MaxY) call ATimes12 ld de,Text.Buffer add hl,de ld d,h ld e,l inc de ld bc,12-1 ld (hl),' ' ldir jr Scroll.Up.Exit Scroll.Up.FullScreen ; Scroll graphics buffer up. ld hl,(Lcd.Buffer) ld de,12*8 add hl,de ld de,(Lcd.Buffer) ld bc,768-12*8 ldir ; Clear bottom row. ld hl,(Lcd.Buffer) ld de,768-12*8 add hl,de ld d,h \ ld e,l inc de ld bc,12*8-1 ld a,(Vdu.Text.BackgroundColour) add a,a add a,a sbc a,a ld (hl),a ldir ; Scroll text buffer up. ld hl,Text.Buffer+12 ld de,Text.Buffer ld bc,12*8-12 ldir ; Clear bottom row. ld hl,Text.Buffer+12*7 ld de,Text.Buffer+12*7+1 ld bc,11 ld (hl),' ' ldir Scroll.Up.Exit pop af pop bc pop de pop hl jp Modes.Scroll.Up.Exit ;------------------------------------------------------------------------------- ;@doc:routine ; ; === Vdu.Text.Scroll.Down === ; ; Scrolls the text viewport down one line. ; ;@doc:end ;------------------------------------------------------------------------------- Down.Routine ret .endmodule