Subversion Repositories pentevo

Rev

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