§ Описание алгоритма
Это — далеко не самый оптимальный алгоритм, но с его помощью экран скроллится красиво. Вообще суть этого алгоритма в том, чтобы пройти слева направо, сверху вниз по всем знакоместам и поднять их наверх, то есть, как бы это было, если бы это был скроллер экрана, который реализован в текстовом режиме для 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
23 июл, 2021
© 2007-2023 Все кони недурственно переколочены