Лисья Нора

Оглавление


§ Описание алгоритма

Это – далеко не самый оптимальный алгоритм, но с его помощью экран скроллится красиво. Вообще суть этого алгоритма в том, чтобы пройти слева направо, сверху вниз по всем знакоместам и поднять их наверх, то есть, как бы это было, если бы это был скроллер экрана, который реализован в текстовом режиме для x86 процессоров, ну или VGA адаптеров, если так можно сказать.

§ Код скроллера

scroll: push hl
push de
push bc
push af
 
; Перемотка экрана наверх
ld hl, $4000
ld de, $4020
ld a, 3
ld c, 0
.n3: push af
.n2: ld b, 8
push de ; Сохранить DE/HL
push hl
.n1: ld a, (de) ; Скопировать букву
ld (hl), a
inc h
inc d
djnz .n1
pop hl ; Восстановить HL/DE
pop de
inc hl
inc de
ld a, e
and a
jr nz, .x1
ld a, d
add 7
ld d, a
.x1: dec c
jr nz, .n2
ld a, h
add 7
ld h, a
pop af
cp 2
jr nz, .x2
ld c, $e0
.x2: dec a
jr nz, .n3
 
; Очистка нижней строки
xor a
ld h, $50 ; Банк
ld c, $08 ; 8 строк
.m2: ld l, $e0 ; 7-я строка
ld b, $20 ; 32 символа
.m1: ld (hl), a ; Удалить область
inc hl
djnz .m1
dec c ; Здесь будет H++
jr nz, .m2
 
; Сдвиг атрибутов
ld bc, 768-32
ld e, $20
.m3: ex de, hl
ldir
ex de, hl
 
; Заполнить нижнюю строку атрибутов
ld b, $20
ld a, (PTR_COLOR_DEF)
.m4: ld (hl), a
inc hl
djnz .m4
 
pop af
pop bc
pop de
pop hl
ret