Сообщение от
Trol73
Запись в RKR пока не сделал, т.к. не смог пока понять, как распознавать сигнал, выдаваемый 86РК.
Вот как это делает ЮТ-88, у них с РК одинаковый формат, только период у РК 0,9мс, а у ЮТ - 0,666мс
Код:
TYPE_READ_ADDR1:
push b
push d
push h
push psw
rst 6 ;ввод смещения в DE (адрес сохранения программы = ADDR+DE)
mvi a,0FFH
call TYPE_RD_BIT ;читаем синхро и старший байт адреса загрузки ADDR
mov h,a
call TYPE_RD_BYTE ;читаем младший байт адреса загрузки ADDR
mov l,a
dad d ;адрес сохранения программы = ADDR+DE
mov b,h
mov c,l
push b
call TYPE_RD_BYTE ;старший байт адреса конца программы
mov h,a
call TYPE_RD_BYTE ;младший байт адреса конца программы
mov l,a
dad d
xchg
L01DF:
call TYPE_RD_BYTE
stax b
call CMP_BC_DE ;сравниваем текущий адрес с рассчитанным адресом конца программы
inx b
jnz L01DF
pop b
jmp CRC_BC_DE
;
TYPE_RD_BYTE:
mvi a,008H
call TYPE_RD_BIT
ret
;Чтение битовой последовательности в А с магнитофона
;вх. А=0xFF - поиск байта синхронизации и
;чтение старшего байта адреса загрузки, А=0x08 - чтение байта
TYPE_RD_BIT:
push b
push d
mvi c,000H
mov d,a
in 0A1H
mov e,a
L0130:
mov a,c
ani 07FH
rlc
mov c,a
L0135:
in 0A1H
cmp e
jz L0135
ani 001H
ora c
mov c,a
call WAIT_TYPE_RD_BIT
in 0A1H
mov e,a
mov a,d
ora a
jp L0163
mov a,c
cpi 0E6H ;ловим синхробайт 0xE6
jnz L0157
xra a
sta RAM_0xC3FC
jmp L0161
;
L0157:
cpi 019H
jnz L0130
mvi a,0FFH
sta RAM_0xC3FC
L0161:
mvi d,009H
L0163:
dcr d
jnz L0130
lda RAM_0xC3FC
xra c
pop d
pop b
ret
WAIT_TYPE_RD_BIT:
mvi b,02DH ;константа, зависит от скорости процессора
L0170:
dcr b
jnz L0170
ret