Код:
ORG 25000
LD DE,15315
LD IX,32768
LD A,255
SCF
; DI
;NXT LD B,0
; CALL LD_EDGE_1
; JR NXT
LD_BYTES INC D ;4 УСТАНОВИМ ФЛАГ Z В 0
EX AF,AF' ;4 И СОХРАНИМ В РЕЗЕРВЕ
DEC D ;4
DI ;4
LD A,#0F ;7 БЕЛЫЙ ЦВЕТ БОРДЮРА
OUT (#FE),A ;11
LD HL,#053F ;10
PUSH HL
;-------------------------------
IN A,(254) ;11 ЗАПОМИНАЕМ ПЕРВОЕ ЗНАЧЕНИЕ ПОРТА
RRA ;4 СМЕЩАЕМ С 6 НА 5 БИТ ВХОДА
AND 32 ;7 ВЫДЕЛЯЕМ ТОЛЬКО 5 БИТ
OR 2 ;7 ПРИБАВИМ КРАСНЫЙ ЦВЕТ
LD C,A ;4 ХРАНИТ ЗНАЧЕНИЕ ПОРТА И КРАСНОГО БОРДЮРА
CP A ;4 УСТАНОВИМ ФЛАГ Z В 1 ЧТОБ НЕ ВЫЙТИ НА СЛЕДУЮЩЕЙ СТРОКЕ
LD_BREAK RET NZ ;11,7
LD_START CALL LD_EDGE_1 ;17
JR NC,LD_BREAK ;12,7
;ПРОИЗОШЛО ИЗМЕНЕНИЕ БИТА - ПОШЁЛ СИГНАЛ
LD HL,#0415 ;10 / 2 698 195 ТАКТОВ
LD_WAIT DJNZ LD_WAIT ;10,6 |
DEC HL ;6 |
LD A,H ;4 |
OR L ;4 |
JR NZ,LD_WAIT ;12,7 \
CALL LD_EDGE_2 ;17
JR NC,LD_BREAK ;12,7
LD_LEADER LD B,#9C ;7
CALL LD_EDGE_2 ;17
JR NC,LD_BREAK ;12,7
LD A,#C2 ;7
CP B ;4 ПРОВЕРЯЕМ ВРЕМЯ
JR NC,LD_START ;12,7
INC H ;4 256 ПАР ИМПУЛЬСОВ
JR NZ,LD_LEADER ;12,7
LD_SYNC LD B,#C9 ;7
CALL LD_EDGE_1 ;17
JR NC,LD_BREAK ;12,7
LD A,B ;4
CP #D4 ;7
JR NC,LD_SYNC ;12,7
CALL LD_EDGE_1 ;17 ОЖИДАЕМ КОНЕЧНЫЙ ФРОНТ СИНХРОИМПУЛЬСА
RET NC ;11,5 НЕ ДОЖДАЛИСЬ
LD A,C ;4
XOR #03 ;7 МЕНЯЕМ ЦВЕТ БОРДЮРА НА СИНИЙ
LD C,A ;4
LD H,#00 ;7
LD B,#B0 ;7
JR LD_MARKER ;12
LD_LOOP
EX AF,AF' ;4
JR NZ,LD_FLAG ;12,7
JR NC,LD_VERIFY ;12,7
LD A,255
LD (65500),A
LD (IX+0),L ;19
JR LD_NEXT ;12
LD_FLAG
RL C ;4
XOR L ;4
RET NZ ;11,5
;CALL DEB
LD A,C ;4
RRA ;4
LD C,A ;4
INC DE ;4
JR LD_DEC ;12
LD_VERIFY LD A,(IX+0)
XOR L
RET NZ
LD_NEXT INC IX ;10
LD_DEC DEC DE ;6
EX AF,AF' ;4
LD B,#B1 ;7
LD_MARKER
LD L,01 ;7
LD_8_BITS CALL LD_EDGE_2 ;17
RET NC ;11,5
LD A,#C6;CB ;7
CP B ;4
RL L ;4
LD B,#B0 ;7
JP NC,LD_8_BITS ;10
LD A,H ;4
XOR L ;4
LD H,A ;4
LD A,D ;4
OR E ;4
JR NZ,LD_LOOP ;12,7
LD A,H ;4
CP #01 ;7
RET ;10
LD_EDGE_2 CALL LD_EDGE_1 ;17
RET NC ;11,5 ВЫХОД ПО BREAK
LD_EDGE_1
;-----------------------------------------------
LD A,22 ;7 /ЗАДЕРЖКА 358 ТАКТОВ
LD_DELAY DEC A ;4
JR NZ,LD_DELAY ;12,7
AND A ;4 \
;-----------------------------------------------
LD_SAMPLE INC B ;4 ПРОВЕРКА СЧЁТЧИКА ВРЕМЕНИ
RET Z ;11,7 Z-ЕСЛИ ВРЕМЯ ИСТЕКЛО
;-----------------------------------------------
LD A,#7F ;7 ПРОВЕРКА КЛАВИШИ BREAK
IN A,(254) ;11 И СЧИТЫВАНИЕ ЗНАЧЕНИЯ ВХОДА
RRA ;4
RET NC ;11,7
;-----------------------------------------------
XOR C ;4
AND 32 ;7
JR Z,LD_SAMPLE ;12,7 ЗНАЧЕНИЕ БИТА НЕ ИЗМЕНИЛОСЬ
LD A,C ;4 ИНВЕРТИРУЕМ БИТ И ЦВЕТ ФОНА
CPL ;4
LD C,A ;4 СОХРАНИМ ОБРАТНО В С
AND #07 ;7 ВЫДЕЛИМ ТОЛЬКО ЦВЕТ
OR #08 ;7 УСТАНОВИМ БИТ ДИНАМИКА
OUT (254),A ;11 ОТПРАВИМ В ПОРТ
SCF ;4
RET
;--------------------ПОКА НЕ ЗАДЕЙСТВОВАНО
COLOR ;364
LD HL,22893 ;10
LD C,(HL) ;7
LD B,7 ;7
C4 INC HL ;6 323
LD A,(HL) ;7
DEC HL ;6
LD (HL),A ;7
INC HL ;6
DJNZ C4 ;13,8
LD (HL),C ;7
RET ;10
;--------------------
DEB ;ОТЛАДОЧНАЯ-ИНДИКАЦИОННАЯ
PUSH HL
PUSH BC
DB0 LD HL,16384
LD B,8
DB1 LD A,255
XOR (HL)
LD (HL),A
INC H
DJNZ DB1
LD A,#7F ;7 ПРОВЕРКА КЛАВИШИ BREAK
IN A,(254) ;11 И СЧИТЫВАНИЕ ЗНАЧЕНИЯ ВХОДА
RRA ;4
JR C,DB0 ;11,7
POP BC
POP HL
RET