Rev 761 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 761 | Rev 1186 | ||
|---|---|---|---|
| Line 1... | Line 1... | ||
| 1 | 1 | ||
| 2 | ;LAST UPDATE: 31.07.2017 savelij |
2 | ; LAST UPDATE: 16.02.2025 savelij |
| 3 | 3 | ||
| 4 | TAPE_EMUL LD H,CMOS_BYTE_00 |
4 | TAPE_EMUL LD H,CMOS.BYTE_00 |
| 5 | CALL READCMOS |
5 | CALL READCMOS |
| 6 | AND M_EMUL_TAPE |
6 | AND CMOS_ED.M_EMUL_TAPE |
| 7 | JR NZ,EMULOADTAP |
7 | JR NZ,EMULOADTAP |
| 8 | LD A,(RREG_A) |
8 | LD A,(RREG_A) |
| 9 | LD (RREG_C),A |
9 | LD (RREG_C),A |
| 10 | CP A |
10 | CP A |
| 11 | PUSH AF |
11 | PUSH AF |
| 12 | POP HL |
12 | POP HL |
| 13 | LD (RREG_F),HL |
13 | LD (RREG_F),HL |
| 14 | RET |
14 | RET |
| 15 | 15 | ||
| 16 | EMULOADTAP LD A,(CPU6+2) ;НОМЕР СТРАНИЦЫ ГДЕ НАЧИНАЕТСЯ СЛЕДУЮЩИЙ БЛОК |
16 | EMULOADTAP LD A,(CPU2+2) ; номер страницы где начинается следующий блок |
| 17 | LD IYL,A |
17 | LD IYL,A |
| 18 | ADD A,RAM_TAPE |
18 | ADD A,RAM_TAPE |
| 19 | LD BC,WIN_P5 |
19 | LD BC,WIN_P1 |
| 20 | OUT (C),A ;РЕАЛЬНАЯ СТРАНИЦА ОТКУДА БРАТЬ |
20 | OUT (C),A ; реальная страница откуда брать |
| 21 | LD HL,(CPU6) ;СМЕЩЕНИЕ В СТРАНИЦЕ |
21 | LD HL,(CPU2) ; смещение в странице |
| 22 | LD DE,(RREG_IXL) ;АДРЕС КУДА ЛОЖИТЬ |
22 | LD DE,(RREG_IXL) ; адрес куда ложить |
| 23 | LD A,D |
23 | LD A,D |
| 24 | EXX |
24 | EXX |
| 25 | LD BC,WIN_P6 |
25 | LD BC,WIN_P2 |
| 26 | CP 0X80 |
26 | CP 0x80 |
| 27 | LD A,0XFA ;ДЛЯ ДИАПАЗОНА АДРЕСОВ ЗАГРУЗКИ 4000-7FFF |
27 | LD A,0xFA ; для диапазона адресов загрузки 4000-7FFF |
| 28 | JR C,ELT01 |
28 | JR C,ELT01 |
| 29 | LD A,0XFD ;ДЛЯ ДИАПАЗОНА АДРЕСО ЗАГРУЗКИ 8000 И ВЫШЕ |
29 | LD A,0xFD ; для диапазона адресов загрузки 8000 и выше |
| 30 | ELT01 OUT (C),A |
30 | ELT01 OUT (C),A |
| 31 | LD IYH,A ;НОМЕР СТРАНИЦЫ В КОТОРУЮ ПЕРЕНОСИМ |
31 | LD IYH,A ; номер страницы в которую переносим |
| 32 | EXX |
32 | EXX |
| 33 | LD A,0X40 ;ДЛЯ ДИАПАЗОНА АДРЕСОВ 4000-7FFF ГРУЗИМ НА 4000 ВЫШЕ |
33 | LD A,0x40 ; для диапазона адресов 4000-7FFF грузим на 4000 выше |
| 34 | JR C,ELT02 |
34 | JR C,ELT02 |
| 35 | LD A,0 ;ДЛЯ ДИАПАЗОНА АДРЕСОВ 8000 И ВЫШЕ АДРЕС ЗАГРУЗКИ НЕ МЕНЯЕМ |
35 | LD A,0 ; для диапазона адресов 8000 и выше адрес загрузки не меняем |
| 36 | ELT02 ADD A,D |
36 | ELT02 ADD A,D |
| 37 | LD D,A ;РЕАЛЬНЫЙ АДРЕС УКЛАДКИ |
37 | LD D,A ; реальный адрес укладки |
| 38 | SET 6,H |
38 | SET 6,H |
| 39 | LD C,(HL) |
39 | LD C,(HL) |
| 40 | INC HL |
40 | INC HL |
| 41 | LD B,(HL) ;ВЗЯЛИ РАЗМЕР БЛОКА ДЛЯ ЗАГРУЗКИ |
41 | LD B,(HL) ; взяли размер блока для загрузки |
| 42 | INC HL |
42 | INC HL |
| 43 | INC HL ;ПРОПУСКАЕМ ФЛАГОВЫЙ БАЙТ |
43 | INC HL ; пропускаем флаговый байт |
| 44 | DEC BC |
44 | DEC BC |
| 45 | DEC BC ;ГРУЗИТЬ НА 2 БАЙТА МЕНЬШЕ (МИНУС ФЛАГОВЫЙ БАЙТ И CRC) |
45 | DEC BC ; грузить на 2 байта меньше (минус флаговый байт и CRC) |
| 46 | ELT07 LDI |
46 | ELT07 LDI |
| 47 | JP PO,ELT05 |
47 | JP PO,ELT05 |
| 48 | LD A,D |
48 | LD A,D |
| 49 | CP 0XC0 |
49 | CP 0xC0 |
| 50 | JR C,ELT06 |
50 | JR C,ELT06 |
| 51 | LD A,IYH |
51 | LD A,IYH |
| 52 | CP 0XFA |
52 | CP 0xFA |
| 53 | JR NZ,ELT06 |
53 | JR NZ,ELT06 |
| 54 | LD A,0XFD |
54 | LD A,0xFD |
| 55 | LD IYH,A |
55 | LD IYH,A |
| 56 | EXX |
56 | EXX |
| 57 | LD B,HIGH (WIN_P6) |
57 | LD B,HIGH (WIN_P2) |
| 58 | OUT (C),A |
58 | OUT (C),A |
| 59 | EXX |
59 | EXX |
| 60 | LD D,0X80 |
60 | LD D,0x80 |
| 61 | ELT06 LD A,H |
61 | ELT06 LD A,H |
| 62 | CP 0X80 |
62 | CP 0x80 |
| 63 | JR C,ELT07 |
63 | JR C,ELT07 |
| 64 | INC IYL |
64 | INC IYL |
| 65 | LD A,IYL |
65 | LD A,IYL |
| 66 | ADD A,RAM_TAPE |
66 | ADD A,RAM_TAPE |
| 67 | EXX |
67 | EXX |
| 68 | LD B,HIGH (WIN_P5) |
68 | LD B,HIGH (WIN_P1) |
| 69 | OUT (C),A |
69 | OUT (C),A |
| 70 | EXX |
70 | EXX |
| 71 | LD H,0X40 |
71 | LD H,0x40 |
| 72 | JR ELT07 |
72 | JR ELT07 |
| 73 | 73 | ||
| 74 | ELT05 INC HL ;ПРОПУСК КОНТРОЛЬНОЙ СУММЫ БЛОКА |
74 | ELT05 INC HL ; пропуск контрольной суммы блока |
| 75 | RES 6,H |
75 | RES 6,H |
| 76 | EVOPORT WIN_P5,0XFA ;ВЕРНУЛИ СТРАНИЦУ В 1 ОКНЕ ПРОЕЦИРОВАНИЯ |
76 | EVOPORT WIN_P1,0xFA ; вернули страницу в 1 окне проецирования |
| 77 | LD B,HIGH (WIN_P6) |
77 | LD B,HIGH (WIN_P2) |
| 78 | XOR A |
78 | XOR A |
| 79 | OUT (C),A ;ВКЛЮЧИЛИ ПОСЛЕДНЮЮ СТРАНИЦУ |
79 | OUT (C),A ; включили последнюю страницу |
| 80 | LD (CPU6),HL ;ВЕРНУЛИ СМЕЩЕНИЕ В СТРАНИЦЕ ДЛЯ ЗАГРУЗКИ |
80 | LD (CPU2),HL ; вернули смещение в странице для загрузки |
| 81 | LD A,IYL |
81 | LD A,IYL |
| 82 | LD (CPU6+2),A ;ВЕРНУЛИ В ПЕРЕМЕННУЮ НОМЕР ТЕКУЩЕЙ СТРАНИЦЫ ЗАГРУЗКИ |
82 | LD (CPU2+2),A ; вернули в переменную номер текущей страницы загрузки |
| 83 | LD HL,(RREG_IXL) |
83 | LD HL,(RREG_IXL) |
| 84 | LD DE,(RREG_E) |
84 | LD DE,(RREG_E) |
| 85 | ADD HL,DE |
85 | ADD HL,DE |
| 86 | LD (RREG_IXL),HL |
86 | LD (RREG_IXL),HL |
| 87 | LD HL,0 |
87 | LD HL,0 |
| Line 90... | Line 90... | ||
| 90 | RES 6,(HL) |
90 | RES 6,(HL) |
| 91 | SET 0,(HL) |
91 | SET 0,(HL) |
| 92 | RET |
92 | RET |
| 93 | 93 | ||
| 94 | TAPE_INIT XOR A |
94 | TAPE_INIT XOR A |
| 95 | LD HL,CPU6 |
95 | LD HL,CPU2 |
| 96 | LD (HL),A |
96 | LD (HL),A |
| 97 | INC L |
97 | INC L |
| 98 | LD (HL),A |
98 | LD (HL),A |
| 99 | INC L |
99 | INC L |
| 100 | LD (HL),A |
100 | LD (HL),A |