; это в программе обработки прерываний
;=================== ширма вверху
call shirm0 ; стираем ширму
lhld ashirm
lda scroll
adi 1
mov l,a
shld ashirm
call shirm1 ; рисуем ширму
call shirmbon ; дополнительно ещё раз рисуем первые семь столбиков чтобы убрать глюки слева вверху
;======================================= ширма снизу
call shirm0wwt ; стираем ширму
lhld ashirm2 ;
lda scroll
adi 9
mov l,a
shld ashirm2 ;
call shirm1wwt ; рисуем ширму
;=======================================
;================ Это подпрограммы
; стираем ширму
shirm0: lxi h,0
shld shirmx+1
jmp shirm
;
shirm1: lxi h,0FFFFh
shld shirmx+1
; jmp shirm
;
shirm: lxi h,0
dad sp ; HL=HL+SP
shld s_sp ; сохраняем значение стека
;
lhld ashirm ; в HL помещаем адрес куда выводить на экран
lxi d,0100h ; 256
shirmx: lxi b,0
mvi a,31
;
shirmc: sphl ; перенос из HL в SP 8
push b ; запись в экран 16
push b
push b
push b
dad d ; HL=HL+DE(256) переход на следующий столбик 12
dcr a ; 8
jnz shirmc ; 12
lhld s_sp ; возвращаем значение стека
sphl
ret
;===================================
shirm0wwt: lxi h,0
shld shirmxwwt+1
jmp shirmwwt
;
shirm1wwt: lxi h,0FFFFh
shld shirmxwwt+1
;jmp shirmwwt
;
shirmwwt: lxi h,0
dad sp
shld s_sp
;
lhld ashirm2
lxi d,0100h
shirmxwwt: lxi b,0
mvi a,31 ;32
;
shirmcwwt: sphl
push b
push b
push b
push b
dad d
dcr a
jnz shirmcwwt
;
lhld s_sp
sphl
;
ret
;======================================================
shirmbon:
lxi h,0
dad sp ; HL=HL+SP
shld s_sp ; сохраняем значение стека
;
lhld ashirm ; в HL помещаем адрес куда выводить на экран
lxi d,0100h ; 256
shirmxbon: lxi b,0ffffh
mvi a,7
;
shirmcbon: sphl ; перенос из HL в SP
push b ; запись в экран
push b
push b
push b
dad d ; HL=HL+DE(256) переход на следующий столбик
dcr a
jnz shirmcbon
lhld s_sp ; возвращаем значение стека
sphl
ret
[свернуть]