Subversion Repositories pentevo

Rev

Rev 736 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
548 savelij 1
 
2
; Пример чтения фонтрома в пентеве
3
;
4
; (c) lvd^nedopc 2012
5
;
6
; сорец для аласма
7
 
646 savelij 8
;ПЕРЕДЕЛКА ДЛЯ КОМПИЛЯЦИИ В СОСТАВЕ EVO RESET SERVICE 16.04.2012 savelij
548 savelij 9
 
831 savelij 10
;LAST UPDATE: 30.06.2019 savelij
11
 
548 savelij 12
;START   EQU     #6000
13
 ;       ORG     START
14
 
646 savelij 15
FREAD           EQU CPU1+OFFSET_SCRSAVE;OFFSET_FNTSAVE;-0X800
16
FONT            EQU CPU1+OFFSET_FNTSAVE;0XD800
548 savelij 17
;FLDIR          EQU 0XD800
18
 
19
SCAN_FONT
20
;        DI 
21
 
22
;        LD      A,1
23
;        OUT     (0XFE),A
24
 
549 savelij 25
;        XOR     A
26
;        OUT     (PEVO_CONF),A
548 savelij 27
 
549 savelij 28
;        LD      BC,0XEFF7
29
;        OUT     (C),A   ;ставим ефф7, который доступен только в нешедоу-режиме
548 savelij 30
 
549 savelij 31
;        INC     A
32
;        OUT     (PEVO_CONF),A
548 savelij 33
 
34
        LD      A,0XA7
35
        LD      BC,0XFF77
36
        OUT     (C),A     ;включаем новый пентевный текстмод - 1-страничный
37
                          ; заодно ефф7 и фф77 ставят нам 7 МГц частоту
736 savelij 38
                EVOPORT WIN_P1,RAM_SCR_FONT
548 savelij 39
        CALL    OUTPAGE   ;выводим все символы на экран
40
 
41
LOOP
42
        CALL    SYNCREAD   ;считываем фонтром методом чтения байтиков, которые на экране
43
        JP    DECODEFONT ; перекодируем в обычный формат фонтрома ИИНВЕРТИМ СЧИТАННЫЙ ФОНТ
44
;        CALL    INVERTFONT ; инвертируем все байты фонта
45
;        CALL    WRITEFONT  ; пишем взад
46
 
47
;        LD      A,0X7F
48
;        IN      A,(0XFE)
49
;        RRA 
50
;        JR      C,LOOP     ;итого всё мигает пока не нажмём any key
51
 
52
;        LD      A,0XFF
53
;        LD      BC,WIN_A3
54
;        OUT     (C),A
55
 
56
;        LD      A,0XA3
57
;        LD      BC,0XFF77
58
;        OUT     (C),A ; восстанавливаем 6912-режим
59
 
60
;        XOR     A
61
;        OUT     (PEVO_CONF),A ;закрываем шедоу
62
 
63
;        RET 
64
 
65
OUTPAGE
66
;        LD      A,0X7F-8    ;где находится 1страничный текстмод (см доку)
67
;        LD      BC,WIN_A3
68
;        OUT     (C),A
69
 
70
;        LD      HL,0XC000   ; ставим атрибуты. Не обязательно, чтоб символы были видимы,
71
;        LD      DE,0XC001   ; можно нафигачить нулей
72
;        LD      (HL),0X01;5
73
;        LD      BC,0X3FFF
74
;        LDIR 
75
 
573 savelij 76
                XOR A
77
                LD HL,CPU3+LATTR
831 savelij 78
                ROMCALL CLSTXTMD1,ROM_RST82
573 savelij 79
                XOR A
80
                LD HL,CPU3+RATTR
831 savelij 81
                ROMCALL CLSTXTMD1,ROM_RST82
548 savelij 82
 
83
        XOR     A         ; код печатаемого символа
573 savelij 84
        LD      HL,CPU3+LSYM    ;0XC1C0  ; откуда начинаем печатать
548 savelij 85
        LD      DE,64-40
86
        LD      C,25      ; сколько строк печатаем. Достаточно напечатать 16 строк сверху.
87
STRLOOP
88
        LD      B,80/5
89
SYMLOOP
90
        CALL    PRINC  ; повторяем каждый символ 5 раз
91
        CALL    PRINC
92
        CALL    PRINC
93
        CALL    PRINC
94
        CALL    PRINC
95
 
96
        INC     A
97
 
98
        DJNZ    SYMLOOP
99
 
100
        ADD     HL,DE ; смещение на следующую строку
101
 
102
        DEC     C
103
        JR      NZ,STRLOOP
104
 
105
        RET
106
 
107
PRINC   ; печатаем символ и апдейтим указатель в HL на следующий символ
108
        LD      (HL),A
109
        BIT     4,H
110
        SET     4,H
111
        RET     Z
112
        RES     4,H
113
        INC     HL
114
        RET
115
 
116
SYNCREAD
117
 
118
        ; эта процедура должна выполняться при частоте процессора 7 МГц!!!!!!!
119
 
120
        ; сначала включаем IM 2 и делаем таблички для него
121
        DI
122
;        IM      2   
123
 
124
        ; setup IM2 tables
125
 
126
;        LD      HL,INTTAB
127
;        LD      A,1
128
;        LD      I,A
129
;        INC     A
130
 
131
;        LD      (HL),A
132
;        INC     L
133
;        JR      NZ,$-2
134
 
135
;        INC     H
136
;        LD      (HL),A
137
 
138
;        LD      L,H
139
;        LD      (HL),0XC3 ; JP
140
;        INC     HL
141
;        LD      (HL)LOW (INTPROC)
142
;        INC     HL
143
;        LD      (HL),HIGH (INTPROC)
144
 
145
 
585 savelij 146
                LD HL,EI_RET
147
                LD (ADR_INT),HL
148
 
548 savelij 149
        LD      HL,FREAD ; заранее ставим куда будем читать фонт
150
 
151
        EI  
152
        HALT
153
        EI
154
        HALT ; делаем халт чтоб после инта и задержки попасть чтением спецпорта прямо
155
             ; в момент начала отображения символов. делаем халт 2 раза, чтоб убедиццо,
156
             ; что инт будет схвачен в своем начале, а не в середине.
157
             ; обработчик инта - сначала JP, потом RET.
158
 
159
 
160
 
161
 
162
        ; делаем задержку до момента отображения первого символа. Он повторяется 5 раз,
163
        ; а первая команда INI попадает циклом ввода примерно в середину этих
164
        ; 5 символов
623 savelij 165
        LD      BC,0            ;10
585 savelij 166
        DI                      ;4
167
        LD      B,2             ;7
623 savelij 168
        DJNZ    $               ;13*2+8
548 savelij 169
        LD      D,76
170
LINWAIT
171
        LD      BC,256*33
172
        DJNZ    $
173
        DEC     D
174
        JP      NZ,LINWAIT
175
        LD      BC,0X0EBE  ; заодно в процессе задержки грузим адрес порта
176
        LD      D,128     ; и счётчик для 128 строк
177
 
178
 
179
READLOOP
180
        ; читаем 16 байт. Как раз INI:INC B выполняется за 20 тактов, и 5 символов
181
        ; длятся тоже 20 тактов (@7MHz nowait)
182
       REPT     16
183
        INI
184
        INC     B
185
       ENDM
186
 
187
        LD      E,7    ; просираем оставшееся время строки
188
        DEC     E
189
        JR      NZ,$-1
190
 
191
        DEC     D
192
        JP      NZ,READLOOP ; итого весь этот луп занимает 448 тактов
193
 
194
 
195
        ; всё считали, идём на йух...
196
        DI
197
 ;       IM      1
198
        RET
199
 
585 savelij 200
;INTPROC ; обработчег инта :)
201
;        RET 
548 savelij 202
 
203
 
204
 
205
 
206
DECODEFONT
207
 
208
        ; перекодируем считанный фонт в обычный формат
209
 
210
        LD      HL,FREAD
211
        LD      DE,FONT
212
 
213
 
214
        LD      IXH,16
215
DF256L
216
        LD      IXL,16
217
DF16L
218
        LD      BC,16
219
       REPT     8
220
        LD      A,(HL)
221
        ADD     HL,BC
222
        LD      (DE),A
223
        INC     DE
224
       ENDM
225
 
226
        LD      BC,1-128
227
        ADD     HL,BC
228
 
229
        DEC     IXL
230
        JR      NZ,DF16L
231
 
232
        LD      BC,128-16
233
        ADD     HL,BC
234
 
235
        DEC     IXH
236
        JR      NZ,DF256L
237
 
238
        RET
239
 
240
 
241
 
242
;INVERTFONT
243
 
244
        ; инвертируем фонт
245
 
246
;        LD      HL,FONT
247
;        LD      BC,2048
248
;IFLOOP
249
;        LD      A,(HL)
250
;        CPL 
251
;        LD      (HL),A
252
;        CPI 
253
;        JP      PE,IFLOOP
254
 
255
;        RET 
256
 
257
 
258
 
259
;WRITEFONT
260
 
261
        ; пишем фонт обратно в фонтром
262
 
263
;        LD      A,0X05
264
;        OUT     (PEVO_CONF),A
265
 
266
;        LD      HL,FONT
267
;        LD      DE,FLDIR ; лдирим из озу в озу -- всё работает
268
;        LD      BC,2048
269
;        LDIR 
270
 
271
;        LD      A,1
272
;        OUT     (PEVO_CONF),A
273
;        RET 
274
 
275
 
276
 
277
;        ORG     ($+255)&0XFF00
278
;INTTAB
279
;        DS      512
280
 
281
 
282
;FREAD   DS      2048
283
;FONT    DS      2048
284
 
285
;FLDIR   EQU     FONT & 0XF800
286
 
287
;ENDD
288
;        ORG     START