Код:
org 0CB20h
MLT_Viewer_Init:
di
ld hl,0FE00h
ld de,0FE01h
ld bc,100h
ld (hl),0CBh ; '╦'
ldir
ld a,0FEh ; '■'
ld i,a
im 2
ld de,4000h
ld hl,0CE00h
ld bc,1800h
ldir
ei
MLT_Viewer_Loop:
halt
xor a
in a,(0FEh)
cpl
and 1Fh
jr z,MLT_Viewer_Loop
ld a,3Fh
ld i,a
im 1
ret
org 0CBCBh
MLT_Viewer_Interrupt:
push af
push bc
push de
push hl
push ix
ld d,1Dh
ld e,0E6h
push de
ld hl,5800h
push hl
ld hl,MLT_Viewer_Data_0
ld b,14h
ld c,6Bh
otir
ld hl,5820h
ld de,0E700h
ld b,17h
loc_0_CBEB:
push bc
ld (MLT_Viewer_Addr_Src),de
ld (MLT_Viewer_Addr_Dest),hl
push hl
ld hl,MLT_Viewer_Data_1
ld b,9
otir
pop hl
inc d
push de
ld de,20h ; ' '
add hl,de
pop de
pop bc
djnz loc_0_CBEB
ld hl,MLT_Viewer_Data_2
ld b,6
otir
ld b,0C6h ; '╞'
MLT_Viewer_Delay:
djnz MLT_Viewer_Delay
ld bc,206Bh
ld hl,87B3h ;команды Enable DMA + Force Ready
ld de,0CF0Dh ;команда Load
ld a,b
ld xl,18h
out (c),e
out (6Bh),a
MLT_Viewer_Loop_Line:
out (c),d
out (c),l
out (c),h
add a,b
out (c),e
out (6Bh),a
out (c),d
out (c),l
out (c),h
add a,b
out (c),e
out (6Bh),a
out (c),d
out (c),l
out (c),h
add a,b
out (c),e
out (6Bh),a
out (c),d
out (c),l
out (c),h
add a,b
out (c),e
out (6Bh),a
out (c),d
out (c),l
out (c),h
add a,b
out (c),e
out (6Bh),a
out (c),d
out (c),l
out (c),h
add a,b
out (c),e
out (6Bh),a
out (c),d
out (c),l
out (c),h
xor a
ld e,b
ld d,a
pop hl
add hl,de
pop de
inc e
push de
push hl
ld a,0ADh ; 'н'
out (6Bh),a
out (c),l
out (c),h
ld a,20h ; ' '
out (c),d
out (6Bh),a
out (c),e
ld hl,87B3h ;команды Enable DMA + Force Ready
ld de,0CF0Dh ;команда Load
dec xl
jr nz,MLT_Viewer_Loop_Line
pop hl
pop de
pop ix
pop hl
pop de
pop bc
pop af
ei
ret
MLT_Viewer_Data_0:
db 0C3h ;команда RESET DMA
db 0C7h ;команда Reset Port A Timing
db 0CBh ;команда Reset Port B Timing
;--- WR0 Control Bytes -----
db 7Dh ;настраиваем командный регистр (трансфер A->B)
db 0 ;адрес памяти младший байт
db 0E6h ;адрес памяти старший байт
db 1Fh ;число байт для пересылки младший байт
db 0 ;число байт для пересылки старший байт
;--- WR1 Control Bytes -----
db 54h ;настраиваем командный регистр (трансфер A <- память)
db 2 ;количество циклов на передачу
;--- WR2 Control Bytes -----
db 50h ;настраиваем командный регистр (трансфер B -> память)
db 2 ;количество циклов на передачу
;--- WR3 Control Bytes -----
db 0C0h ;настраиваем командный регистр (Enable DMA)
;--- WR4 Control Bytes -----
db 0ADh ;настраиваем командный регистр (адрес куда будет трансфер)
db 0 ;адрес памяти младший байт
db 58h ;адрес памяти старший байт
;--- WR5 Control Bytes -----
db 82h ;настраиваем командный регистр (без WAIT)
db 0CFh ;команда Load
db 0B3h ;команда Force Ready
db 87h ;команда Enable DMA
MLT_Viewer_Data_1:
;--- WR0 Control Bytes -----
db 1Dh ;настраиваем командный регистр (трансфер A->B)
MLT_Viewer_Addr_Src:
dw 0
;--- WR4 Control Bytes -----
db 0ADh ;настраиваем командный регистр (адрес куда будет трансфер)
MLT_Viewer_Addr_Dest:
dw 0 ;адрес памяти
db 0CFh ;команда Load
db 0B3h ;команда Force Ready
db 87h ;команда Enable DMA
MLT_Viewer_Data_2:
;--- WR0 Control Bytes -----
db 1Dh ;настраиваем командный регистр (трансфер A->B)
dw 0E600h ;адрес памяти
;--- WR4 Control Bytes -----
db 0ADh ;настраиваем командный регистр (адрес куда будет трансфер)
dw 5800h
.end