;LAST UPDATE: 31.07.2017 savelij
TAPE_EMUL LD H,CMOS_BYTE_00
CALL READCMOS
AND M_EMUL_TAPE
JR NZ,EMULOADTAP
LD A,(RREG_A)
LD (RREG_C),A
CP A
PUSH AF
POP HL
LD (RREG_F),HL
RET
EMULOADTAP LD A,(CPU6+2) ;НОМЕР СТРАНИЦЫ ГДЕ НАЧИНАЕТСЯ СЛЕДУЮЩИЙ БЛОК
LD IYL,A
ADD A,RAM_TAPE
LD BC,WIN_P5
OUT (C),A ;РЕАЛЬНАЯ СТРАНИЦА ОТКУДА БРАТЬ
LD HL,(CPU6) ;СМЕЩЕНИЕ В СТРАНИЦЕ
LD DE,(RREG_IXL) ;АДРЕС КУДА ЛОЖИТЬ
LD A,D
EXX
LD BC,WIN_P6
CP 0X80
LD A,0XFA ;ДЛЯ ДИАПАЗОНА АДРЕСОВ ЗАГРУЗКИ 4000-7FFF
JR C,ELT01
LD A,0XFD ;ДЛЯ ДИАПАЗОНА АДРЕСО ЗАГРУЗКИ 8000 И ВЫШЕ
ELT01 OUT (C),A
LD IYH,A ;НОМЕР СТРАНИЦЫ В КОТОРУЮ ПЕРЕНОСИМ
EXX
LD A,0X40 ;ДЛЯ ДИАПАЗОНА АДРЕСОВ 4000-7FFF ГРУЗИМ НА 4000 ВЫШЕ
JR C,ELT02
LD A,0 ;ДЛЯ ДИАПАЗОНА АДРЕСОВ 8000 И ВЫШЕ АДРЕС ЗАГРУЗКИ НЕ МЕНЯЕМ
ELT02 ADD A,D
LD D,A ;РЕАЛЬНЫЙ АДРЕС УКЛАДКИ
SET 6,H
LD C,(HL)
INC HL
LD B,(HL) ;ВЗЯЛИ РАЗМЕР БЛОКА ДЛЯ ЗАГРУЗКИ
INC HL
INC HL ;ПРОПУСКАЕМ ФЛАГОВЫЙ БАЙТ
DEC BC
DEC BC ;ГРУЗИТЬ НА 2 БАЙТА МЕНЬШЕ (МИНУС ФЛАГОВЫЙ БАЙТ И CRC)
ELT07 LDI
JP PO,ELT05
LD A,D
CP 0XC0
JR C,ELT06
LD A,IYH
CP 0XFA
JR NZ,ELT06
LD A,0XFD
LD IYH,A
EXX
LD B,HIGH (WIN_P6)
OUT (C),A
EXX
LD D,0X80
ELT06 LD A,H
CP 0X80
JR C,ELT07
INC IYL
LD A,IYL
ADD A,RAM_TAPE
EXX
LD B,HIGH (WIN_P5)
OUT (C),A
EXX
LD H,0X40
JR ELT07
ELT05 INC HL ;ПРОПУСК КОНТРОЛЬНОЙ СУММЫ БЛОКА
RES 6,H
EVOPORT WIN_P5,0XFA ;ВЕРНУЛИ СТРАНИЦУ В 1 ОКНЕ ПРОЕЦИРОВАНИЯ
LD B,HIGH (WIN_P6)
XOR A
OUT (C),A ;ВКЛЮЧИЛИ ПОСЛЕДНЮЮ СТРАНИЦУ
LD (CPU6),HL ;ВЕРНУЛИ СМЕЩЕНИЕ В СТРАНИЦЕ ДЛЯ ЗАГРУЗКИ
LD A,IYL
LD (CPU6+2),A ;ВЕРНУЛИ В ПЕРЕМЕННУЮ НОМЕР ТЕКУЩЕЙ СТРАНИЦЫ ЗАГРУЗКИ
LD HL,(RREG_IXL)
LD DE,(RREG_E)
ADD HL,DE
LD (RREG_IXL),HL
LD HL,0
LD (RREG_E),HL
LD HL,RREG_F
RES 6,(HL)
SET 0,(HL)
RET
TAPE_INIT XOR A
LD HL,CPU6
LD (HL),A
INC L
LD (HL),A
INC L
LD (HL),A
RET