;LAST UPDATE: 06.05.2011 savelij
TAPE_EMUL LD H,0XEF
CALL READCMOS
AND EMUL_TAPE
JR NZ,EMULOADTAP
LD A,(REG_A)
LD (REG_C),A
LD HL,REG_F
SET 6,(HL)
RES 0,(HL)
RET
EMULOADTAP LD A,(0X8002) ;НОМЕР СТРАНИЦЫ ГДЕ НАЧИНАЕТСЯ СЛЕДУЮЩИЙ БЛОК
LD IYL,A
ADD A,PAGE4TAP
LD BC,WIN_P1
OUT (C),A ;РЕАЛЬНАЯ СТРАНИЦА ОТКУДА БРАТЬ
LD HL,(0X8000) ;СМЕЩЕНИЕ В СТРАНИЦЕ
LD DE,(REG_IXL) ;АДРЕС КУДА ЛОЖИТЬ
LD A,D
EXX
LD BC,WIN_P2
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 ;ГРУЗИТЬ НА 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_P2)
OUT (C),A
EXX
LD D,0X80
ELT06 LD A,H
CP 0X80
JR C,ELT07
INC IYL
LD A,IYL
ADD A,PAGE4TAP
EXX
LD B,HIGH (WIN_P1)
OUT (C),A
EXX
LD H,0X40
JR ELT07
ELT05 RES 6,H
LD BC,WIN_P1
LD A,0XFA
OUT (C),A ;ВЕРНУЛИ СТРАНИЦУ В 1 ОКНЕ ПРОЕЦИРОВАНИЯ
LD B,HIGH (WIN_P2)
XOR A
OUT (C),A ;ВКЛЮЧИЛИ ПОСЛЕДНЮЮ СТРАНИЦУ
LD (0X8000),HL ;ВЕРНУЛИ СМЕЩЕНИЕ В СТРАНИЦЕ ДЛЯ ЗАГРУЗКИ
LD A,IYL
LD (0X8002),A ;ВЕРНУЛИ В ПЕРЕМЕННУЮ НОМЕР ТЕКУЩЕЙ СТРАНИЦЫ ЗАГРУЗКИ
LD HL,(REG_IXL)
LD DE,(REG_E)
ADD HL,DE
LD (REG_IXL),HL
LD HL,0
LD (REG_E),HL
LD HL,REG_F
RES 6,(HL)
SET 0,(HL)
RET
TAPE_INIT XOR A
LD HL,0X8000
LD (HL),A
INC L
LD (HL),A
INC L
LD (HL),A
RET