Код:
virt_screen_high equ 160 ; старший байт смещения вирт.экрана
addr_virt_screen equ 57344 ; адрес вирт.экрана
col_window defb 0 ; столбец окна
row_window defb 0 ; строка окна
width_window defb 0 ; ширина окна
height_window defb 0 ; высота окна
; сохранение окна в памяти
; вход: нет
; выход: нет
getimage ld de,addr_virt_screen
ld hl,col_window
ldi
ldi
ldi
ldi
ld hl,(col_window) ; l=col_window, h=row_window
ld a,(height_window)
ld b,a
getimage_01 push bc
push hl
LD A,H ; расчет адреса первого байта знакоместа в HL
RRCA
RRCA
RRCA
AND A,224
ADD A,L
LD L,A
LD A,H
AND 24
OR 64
LD H,A
dup 8
push hl
ld bc,(width_window)
ld b,0
ldir
pop hl
inc h
edup
pop hl
inc h
pop bc
djnz getimage_01
; +++++ _flag_attr_window +++++
ld hl,(col_window) ; l=col_window, h=row_window
ld a,(height_window)
ld b,a
getimage_02 push bc
push hl
LD A,H ; расчет адреса атрибутов знакоместа в BC
RRCA
RRCA
RRCA
LD C,A
AND 31
OR 88
LD B,A
LD A,C
AND 252
OR L
LD C,A
ld h,b
ld l,c
ld bc,(width_window)
ld b,0
ldir
pop hl
inc h
pop bc
djnz getimage_02
; ----- _flag_attr_window -----
ret
; вывод окна из памяти
; вход: нет
; выход: нет
putimage ld hl,addr_virt_screen+2
ld de,col_window+2
ldi
ldi
ld de,(col_window) ; e=col_window, d=row_window
ld a,(height_window)
ld b,a
putimage_01 push bc
push de
LD A,D ; расчет адреса первого байта знакоместа в DE
RRCA
RRCA
RRCA
AND A,224
ADD A,E
LD E,A
LD A,D
AND 24
OR 64
LD D,A
dup 8
push de
ld bc,(width_window)
ld b,0
ldir
pop de
inc d
edup
pop de
inc d
pop bc
djnz putimage_01
; +++++ _flag_attr_window +++++
ld de,(col_window) ; e=col_window, d=row_window
ld a,(height_window)
ld b,a
putimage_02 push bc
push de
LD A,D ; расчет адреса атрибутов знакоместа в BC
RRCA
RRCA
RRCA
LD C,A
AND 31
OR 88
LD B,A
LD A,C
AND 252
OR E
LD C,A
ld d,b
ld e,c
ld bc,(width_window)
ld b,0
ldir
pop de
inc d
pop bc
djnz putimage_02
; ----- _flag_attr_window -----
ret