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 |