;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