-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbas11-02.txt
488 lines (452 loc) · 40.9 KB
/
bas11-02.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
XI.1.3. Т е к с т о в ы е р е ж и м ы
Они мастера накапливать факты, а вот
извлечь из них пользу им удается не
всегда.
Конан Дойль. Морской договор
Введем понятия о б щ е й ширины (высоты) экрана и д о с т у п н о й
ширины (высоты) экрана.
Д о с т у п н а я ширина экрана - это область экрана, "доступная" тек-
стовому курсору. Ее размер устанавливается оператором WIDTH.
О б щ а я ширина экрана однозначно определяется оператором SCREEN.
В режиме SCREEN 1 она равна 32 символам.
В режиме SCREEN 0 она устанавливается равной 40 символам, если аргу-
мент в операторе WIDTH ≤ 40 и равной 80 символам в противном случае.
Общая в ы с о т а экрана для текстовых режимов равна 24 символам, од-
нако для режимов SCREEN 0 (80 символов) и SCREEN 1 она может быть равной
26.5 символам.
┌──────────────────────────────────────────────────────┐
│ Для расположения символов в нужном Вам месте экрана │
│ используйте Таблицу имен образов (PNT)! │
└──────────────────────────────────────────────────────┘
На рисунках показана нумерация возможных позиций курсора на текстовых
экранах:
SCREEN 0(40 символов) SCREEN 0(80 символов) SCREEN 1
высота экрана - 24 симв. высота экрана - 24 симв.
┌───┬───┬─────┬───┬───┐┌────┬────┬─────┬────┬────┐┌───┬───┬─────┬───┬───┐
│ 0 │ 1 │ ··· │ 38│ 39││ 0 │ 1 │ ··· │ 78 │ 79 ││ 0 │ 1 │ ··· │ 30│ 31│
├───┴───┘ └───┴───┤├────┴────┘ └────┴────┤├───┴───┘ └───┴───┤
│ ··· ··· ··· ││ ··· ··· ··· ││ ··· ··· ··· │
├───┬───┐ ┌───┬───┤├────┬────┐ ┌────┬────┤├───┬───┐ ┌───┬───┤
│920│921│ ··· │958│959││1840│1841│ ··· │1918│1919││744│745│ ··· │766│767│
└───┴───┴─────┴───┴───┘└────┴────┴─────┴────┴────┘└───┴───┴─────┴───┴───┘
┌─────────────────────────────────────────────────────────────────────┐
│ Чтобы изобразить символ в нужном месте экрана,используйте оператор: │
│ VPOKE BASE(5*T)+W,K │
│ где: T - номер режима экрана (0 или 1); │
│ W - номер позиции символа на экране; │
│ K - код ASCII символа. │
└─────────────────────────────────────────────────────────────────────┘
П р и м е р 1. Вывести "A" (код ASCII 65) в 8-й строке и 10-м столб-
───────────── це экрана SCREEN 0:
10 SCREEN 0:WIDTH 40
20 VPOKE BASE(5*T)+40*8+10,65
▲ ▲
Номер строки экрана─┘ └─ Номер столбца экрана
Описанная возможность позволяет,например, выводить информацию в те мес-
та экрана, которые н е д о с т у п н ы для вывода оператором PRINT.
П р и м е р 2. Обратите внимание на то, что общая ширина экрана и до-
───────────── ступная ширина экрана - различны!
10 TIME=0:INTERVAL ON:ON INTERVAL=60 GOSUB 100
20 GOTO 20 'Место для основной программы.
100 WIDTH 28:T1=INT(TIME/3600):T2=T2+1:IF T2=60 THEN T2=0
110 FOR J=0 TO 1
120 VPOKE 40+J,ASC(MID$(RIGHT$("0"+MID$(STR$(T1),2),2),J+1)):VPOKE 42,
ASC(":")
130 VPOKE 43+J,ASC(MID$(RIGHT$("0"+MID$(STR$(T2),2),2),J+1)):NEXT:RETU
RN
Оказывается, можно одновременно "хранить" содержимое нескольких экран-
ных с т р а н и ц , причем в любой момент можно "открыть" любую страницу
и "прочесть" ее содержимое.
Вывод информации на нулевую страницу предполагает использование опера-
торов PRINT или VPOKE. Для остальных же страниц вывод информации операто-
ром PRINT невозможен, и поэтому приходится пользоваться оператором VPOKE.
┌─────────────────────────────────────────────────────────────┐
│ Вы всегда можете изобразить любой символ в нужном месте │
│ л ю б о й экранной страницы при помощи оператора: │
│ VPOKE 4096*T*(N+1)^2+W,K │
│ где: T - номер с т р а н и ц ы; │
│ N - режим экрана (0 или 1); │
│ W - номер позиции символа на экране; │
│ K - код ASCII символа. │
└─────────────────────────────────────────────────────────────┘
При этом Вы сможете увидеть содержимое только нулевой страницы.
Чтобы "просмотреть содержимое" других страниц, воспользуйтесь псевдо-
переменной BASE.
П р и м е р 3. "Полистаем" экранные страницы!
─────────────
NEW
Ok ┌─ Код символа "SPACE"("пробел")
10 FOR T=1 TO 3 ▼
20 FOR D=0 TO 959:VPOKE 4096*T+D,32:NEXT D 'Очистка T-ой страницы
30 PRINT "Введите"T"слово";:INPUT A$
40 PRINT "С какого места печатать?"
50 INPUT "X(от 0 до 39)";VX:INPUT "Y(от 0 до 23)";VY
60 FOR B=1 TO LEN(A$)
70 VPOKE 4096*T+40*VY+VX+B,ASC(MID$(A$,B,1))'Запись на T-ю страницу
80 NEXT B:NEXT T
90 FOR T=1 TO 3:Z$=INPUT$(1): BASE(0)=4096*T '4096=&H1000 ──▶ &H10 00
95 POKE &HF923, &H10*T: POKE &HF922, 0*T 'Чтение с экрана
──▲─── ───▲──
└ Адрес старшего байта└ Адрес младшего байта
97 NEXT T
100 A$=INPUT$(1):BASE(0)=0:POKE &HF923,0 'Вывод "содержимого" 0-й стра
ницы
В н и м а н и е! Страницы могут быть "засорены" посторонней информаци-
ей, оставшейся от прежнего обращения к ним. Ваши сообщения могут затерять-
ся среди этого "мусора". Поэтому рекомендуем своевременно заботиться о чи-
стоте страниц (посмотрите на строку 20 примера 3)!
Приведем структуру Taблицы имен образов (PNT) для 80-символьного режи-
ма SCREEN 0 в соответствии с расположением символов на экране дисплея:
┌─────────────┐
│ 0-й байт │ - код символа в 0-ой строке и 0-ом столбце экрана
├─────────────┤
│ 1-й байт │ - код символа в 0-ой строке и 1-ом столбце экрана
├─────────────┤
│ ··· │
├─────────────┤
│ 79-й байт │ - код символа в 0-ой строке и 79-ом столбце экрана
├─────────────┤
│ 80-й байт │ - код символа в 1-ой строке и 0-ом столбце экрана
├─────────────┤
│ ··· │
├─────────────┤
│ 1919-й байт │ - код символа в 23-ой строке и 79-ом столбце экрана
└─────────────┘
Приведем структуру Taблицы имен образов (PNT) для режима SCREEN 1 в со-
ответствии с расположением символов на экране дисплея:
┌─────────────┐
│ 0-й байт │ - код символа в 0-ой строке и 0-ом столбце экрана
├─────────────┤
│ 1-й байт │ - код символа в 0-ой строке и 1-ом столбце экрана
├─────────────┤
│ ··· │
├─────────────┤
│ 31-й байт │ - код символа в 0-ой строке и 31-ом столбце экрана
├─────────────┤
│ 32-й байт │ - код символа в 1-ой строке и 0-ом столбце экрана
├─────────────┤
│ ··· │
├─────────────┤
│ 767-й байт │ - код символа в 23-ой строке и 31-ом столбце экрана
└─────────────┘
Структуру Taблицы имен образов(PNT) для 40-символьного режима SCREEN 0
в соответствии с расположением символов на экране дисплея Вы теперь легко
изобразите самостоятельно!
Информация о символах, имеющихся на клавиатуре компьютера, находится в
ROM, начиная с адреса &H1BBF, и занимает 2 Кбайта памяти. При переходе в
режимы SCREEN 0 или SCREEN 1 эта информация автоматически копируется в ви-
деопамять, инициализируя тем самым Таблицу шаблонов образов (PGT).
Место в ROM и видеопамяти, предназначенное для записи о д н о г о сим-
вола, занимает в о с е м ь байтов.
┌──────────────────────────────────────────────────────────────┐
│ Адрес начала места, отведенного для символа в видеопамяти, │
│ можно определить обращением к функции BASE: │
│ BASE(5*N+2)+K*8 │
│ где: N - номер режима экрана (0 или 1); │
│ K - код ASCII символа. │
└──────────────────────────────────────────────────────────────┘
Приведем пример "хранения" информации о символе в ROM и VRAM (справа
для каждого байта выписан его шестнадцатеричный код, который и задает со-
держимое данного байта):
┌───┬───┬───┬───┬───┬───┬───┬───┐
0-й байт │ │ │ │ │ │ │ │ │ &H00
├───┼───┼───┼───┼───┼───┼───┼───┤
1-й байт │ │ │ │ │ │ │ │ │ &H00
├───┼───┼───┼───┼───┼───┼───┼───┤
2-й байт │ │ █ │ │ │ │ │ █ │ │ &H42
├───┼───┼───┼───┼───┼───┼───┼───┤
3-й байт │ █ │ │ │ │ │ │ │ █ │ &H81
├───┼───┼───┼───┼───┤───┼───┼───┤
4-й байт │ █ │ │ │ │ │ │ │ █ │ &H81
├───┼───┼───┼───┼───┼───┼───┼───┤
5-й байт │ █ │ │ │ │ │ │ │ █ │ &H81
├───┼───┼───┼───┼───┼───┼───┼───┤
6-й байт │ █ │ │ │ █ │ █ │ │ │ █ │ &H99
├───┼───┼───┼───┼───┼───┼───┼───┤
7-й байт │ │ █ │ █ │ │ │ █ │ █ │ │ &H66
└───┴───┴───┴───┴───┴───┴───┴───┘
8 4 2 1 8 4 2 1
Расскажем Вам о том, как можно получить "содержимое" конкретного байта
видеопамяти. Разобьем каждый байт на две половинки (два полубайта). Под
рисунком для каждого полубайта изображено по 4 числа (каждое из них назо-
вем "весом"). Код полубайта получим суммированием "весов" точек, содержа-
щихся в нем (напомним шестнадцатеричные цифры: 0,1,2,3,4,5,6,7,8,9,A,B,C,
D,E,F). Код байта получим, если справа от кода левого полубайта напишем
код правого полубайта, а слева - символ "&H".
В н и м а н и е! Только режим SCREEN 0, а в компьютере серии MSX-2 так-
же и режимы SCREEN 6 и SCREEN 7, поддерживают вывод символов размером 6╳8
точек; остальные режимы используют размер 8╳8. Приведем пример вывода од-
ного и того же символа в двух режимах:
SCREEN 0 SCREEN 1
┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┬───┬───┐
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ │ █ │ │ │ │ │ │ │ █ │ │ │ │ │ █ │ │
├───┼───┼───┼───┼───┼───┼ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ █ │ │ │ │ │ │ │ █ │ │ │ │ │ │ │ █ │
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ █ │ │ │ │ │ │ │ █ │ │ │ │ │ │ │ █ │
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ █ │ │ │ │ │ │ │ █ │ │ │ │ │ │ │ █ │
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ █ │ │ │ █ │ █ │ │ │ █ │ │ │ █ │ █ │ │ │ █ │
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ │ █ │ █ │ │ │ █ │ │ │ █ │ █ │ │ │ █ │ █ │ │
└───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┴───┘
Важно отметить, что в языке MSX-BASIC есть возможность программным пу-
тем создавать "собственные" символы (отличные от стандартных!). Взгляните
на приведенные ниже примеры. Код ASCII символа "у"┐
П р и м е р 4. 5 SCREEN 0:WIDTH 40 ▼
───────────── 10 FOR I=0 TO 7:READ M:VPOKE 2048+213*8+I,M:NEXT
20 DATA &H00,&H00,&H42,&H81,&H81,&H81,&H99,&H66
Данные в операторе DATA опеределяют шестнадцатеричные коды каждого бай-
та "нового" символа. Число 213 в операторе VPOKE означает, что "построен-
ному" нами символу присваивается код ASCII, равный 213. Если раньше коду
213 соответствовал символ "у", то теперь это место занял символ, который
мы "сконструировали". Поэтому в тех местах экрана дисплея, где встречался
символ "у", Вы увидете новый символ.
П р и м е р 5. 5 SCREEN 0:WIDTH 80
───────────── 10 FOR I=0 TO 7:READ M:VPOKE &h1000+213*8+I,M:NEXT
20 DATA &H00,&H00,&H42,&H81,&H81,&H81,&H99,&H66
П р и м е р 6. 5 PRINT"Вводите последовательно байты шаблона символа:"
───────────── 10 FOR I=0 TO 7:INPUT T(I):NEXT
20 INPUT"Введите код изменяемого символа";K%
30 FOR I=0 TO 7:VPOKE 2048+K%*8+I,T(I):NEXT
Отметим, что вместо переменной K% можно использовать любое арифметичес-
кое выражение, целая часть значения которого определяет код ASCII заменя-
емого символа. А теперь взгляните на следующую программу!
П р и м е р 7. Изображение "псевдослучайных" символов.
───────────── 10 P=RND(-TIME):FOR I=0 TO 7:T(I)=INT(255*RND(1)):NEXT
20 K=INT(223*RND(1)+31)
30 FOR I=0 TO 7:VPOKE 2048+K*8+I,T(I):NEXT:PRINT K,CHR$(K)
После выполнения этой программы нажмите на кнопку RESET.
┌───────────────────────────────────────────────────────────────────────┐
│ Отметим, что при выполнении оператора SCREEN 0 (или SCREEN 1) │
│ Таблица шаблонов образов (PGT) инициализируется вновь данными из ROM! │
└───────────────────────────────────────────────────────────────────────┘
Еще ряд примеров на изменение шаблонов символов:
П р и м е р 8 [76]. "Мелкие" и обычные буквы латинского алфавита.
──────────────────
40 SCREEN 0:KEY OFF
50 BASE(2)=2048
60 PRINT"Загрузка данных":PRINT
70 FOR I=4616 TO 4823
80 READ A$:VPOKE I,VAL("&h"+A$)
90 VPOKE I+256,VAL("&h"+A$)
100 NEXT
120 PRINT"Нажмите клавишу для изменения"
130 PRINT" набора символов"
140 A$=INPUT$(1)
160 BASE(2)=4096
180 ' Б у к в ы а л ф а в и т а
200 DATA 00,00,70,88,F8,88,88,00:'A
210 DATA 00,00,F0,48,70,48,F0,00:'B
220 DATA 00,00,78,80,80,80,78,00:'C
230 DATA 00,00,F0,88,88,88,F0,00:'D
240 DATA 00,00,F0,80,E0,80,F0,00:'E
250 DATA 00,00,F0,80,E0,80,80,00:'F
260 DATA 00,00,78,80,B8,88,70,00:'G
270 DATA 00,00,88,88,F8,88,88,00:'H
280 DATA 00,00,70,20,20,20,70,00:'I
290 DATA 00,00,70,20,20,A0,E0,00:'J
300 DATA 00,00,90,A0,C0,A0,90,00:'K
310 DATA 00,00,80,80,80,80,F8,00:'L
320 DATA 00,00,88,D8,A8,88,88,00:'M
330 DATA 00,00,88,C8,A8,98,88,00:'N
340 DATA 00,00,F8,88,88,88,F8,00:'O
350 DATA 00,00,F0,88,F0,80,80,00:'P
360 DATA 00,00,F8,88,A8,90,E8,00:'Q
370 DATA 00,00,F8,88,F8,A0,90,00:'R
380 DATA 00,00,78,80,70,08,F0,00:'S
390 DATA 00,00,F8,20,20,20,20,00:'T
400 DATA 00,00,88,88,88,88,70,00:'U
410 DATA 00,00,88,88,90,A0,40,00:'V
420 DATA 00,00,88,88,A8,D8,88,00:'W
430 DATA 00,00,88,50,20,50,88,00:'X
440 DATA 00,00,88,50,20,20,20,00:'Y
450 DATA 00,00,F8,10,20,40,F8,00:'Z
П р и м е р 9. Автограф программиста!
─────────────
10 COLOR15,1,1:SCREEN 1
20 J=33:KEYOFF
30 DATA 0000000000000003,00001E214346E098,0000000000000000,0001010101
097595,C850408000000000,0409090701010262,840404081C026291,02024444645
05162,89A1C10F32C20206,000000E010080810,938584C870000000,010284780000
0000,0202010000000000,0A33C20000000000,906000000
40 READ A$:FOR T=2 TO 16 STEP 2:VPOKE8*J+T/2-1,VAL("&h"+MID$(A$,T-1,
2)):NEXT
50 IF J<47 THEN J=J+1:GOTO 40
60 A$=CHR$(33)+CHR$(34)+CHR$(35)+CHR$(36)+CHR$(37)+CHR$(29)+CHR$(29)
+CHR$(29)+CHR$(29)+CHR$(29)+CHR$(31)+CHR$(38)+CHR$(39)+CHR$(40)+CHR$
(41)+CHR$(42)+CHR$(29)+CHR$(29)+CHR$(29)+CHR$(29)+CHR$(29)+CHR$(31)+
CHR$(43)+CHR$(44)+CHR$(45)+CHR$(46)+CHR$(47)
70 LOCATE 2,2:PRINTA$
80 GOTO 80
П р и м е р 10. "Изготовление" "т о л с т ы х" символов!
──────────────
5 SCREEN 1:A1=0:A2=255 ' Имеющийся шаблон символа сдвигается
10 FOR X=A1*8 TO A2*8+7 ' на один разряд и складывается со
20 D=VPEEK(X):VPOKE X,D OR D/2' "старым".
30 NEXT
Целью придумавших систему было, очевидно,
скрыть, что в этих значках содержится ка-
кой-то смысл.
Конан Дойль. Пляшущие человечки
П р и м е р 11. Б е г у щ и й человечек.
──────────────
5 COLOR 15,1,1:CLS:INPUT"Укажите желаемую скорость движения человечка
(чем больше число - тем меньше скорость)";C
10 CLS:SCREEN 1,2,90:DIM A$(50):J=100
30 DATA 0C0C7ADE38EC8406,03030E171607050A,0000010301000701
60 DATA C0C0808080C08080,0000000101000000,3030E078606050A0
90 READA$:FOR T=2 TO 16 STEP 2:VPOKE 8*J+T/2-1,VAL("&h"+MID$(A$,T-1,2
)):NEXT
100 IF J<105 THEN J=J+1:GOTO 90 '──▶
110 A$(0)=CHR$(100)+" ":A$(1)=CHR$(101)+" ":A$(2)=CHR$(102)+CHR$(103)
140 A$(3)=CHR$(104)+CHR$(105)
150 FOR I=0 TO 3:LOCATE Y,7:PRINT" ";A$(I)
165 FOR W=0 TO C:NEXT
166 IF Y=27 THEN Y=0
170 NEXT:Y=Y+1:A$=INKEY$:IF A$=" " THEN END
171 GOTO 150 '──▶
Приведем шаблоны четырех символов из шести,сформированных в данной про-
грамме:
┌───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┬───┬───┐
│ │ │ │ │ █ │ █ │ │ │0C 03│ │ │ │ │ │ │ █ │ █ │
├───┼───┼───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ │ │ │ │ █ │ █ │ │ │0C 03│ │ │ │ │ │ │ █ │ █ │
├───┼───┼───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ │ █ │ █ │ █ │ █ │ │ █ │ │7A 0E│ │ │ │ │ █ │ █ │ █ │ │
├───┼───┼───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ █ │ █ │ │ █ │ █ │ █ │ █ │ │DE 17│ │ │ │ █ │ │ █ │ █ │ █ │
├───┼───┼───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ │ │ █ │ █ │ █ │ │ │ │38 16│ │ │ │ █ │ │ █ │ █ │ │
├───┼───┼───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ █ │ █ │ █ │ │ █ │ █ │ │ │EC 07│ │ │ │ │ │ █ │ █ │ █ │
├───┼───┼───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ █ │ │ │ │ │ █ │ │ │84 05│ │ │ │ │ │ █ │ │ █ │
├───┼───┼───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ │ │ │ │ │ █ │ █ │ │06 0A│ │ │ │ │ █ │ │ █ │ │
└───┴───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┴───┘
┌───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┬───┬───┐
│ │ │ │ │ │ │ │ │00 C0│ █ │ █ │ │ │ │ │ │ │
├───┼───┼───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ │ │ │ │ │ │ │ │00 C0│ █ │ █ │ │ │ │ │ │ │
├───┼───┼───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ │ │ │ │ │ │ │ █ │01 80│ █ │ │ │ │ │ │ │ │
├───┼───┼───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ │ │ │ │ │ │ █ │ █ │03 80│ █ │ │ │ │ │ │ │ │
├───┼───┼───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ │ │ │ │ │ │ │ █ │01 80│ █ │ │ │ │ │ │ │ │
├───┼───┼───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ │ │ │ │ │ │ │ │00 C0│ █ │ █ │ │ │ │ │ │ │
├───┼───┼───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ │ │ │ │ │ █ │ █ │ █ │07 80│ █ │ │ │ │ │ │ │ │
├───┼───┼───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤
│ │ │ │ │ │ │ │ █ │01 80│ █ │ │ │ │ │ │ │ │
└───┴───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┴───┘
В режиме SCREEN 1 Таблица цветов (CT) позволяет, вообще говоря, выво-
дить текст, символы которого имеют разные цвета. Однако,учтите,что каждый
из 32 байтов Таблицы CT действует на группу из 8 символов, причем за цвет
и з о б р а ж е н и я данной группы "отвечает" старший полубайт, а млад-
ший полубайт "отвечает" за цвет ф о н а символов.
Б а й т Т а б л и ц ы CT
┌──────────────────────────────────┬───────────────────────────┐
│ Цвет изображения восьми символов │ Цвет фона восьми символов │
└──────────────────────────────────┴───────────────────────────┘
П р и м е р 12. Вывод семи первых прописных букв латинского алфавита
────────────── и символа "@" в "инвертированном" цвете:
10 SCREEN 1:COLOR 15,4,7
20 VPOKE &H2008,&H4F
Адрес Таблицы CT (&H2000+8) связан с символами, у которых коды ASCII
принадлежат отрезку [64,71] (символы @,A,B,C,D,E,F,G). Если Вы хотите на-
печатать в "инвертированном" цвете символ "H" (восьмую букву латинского
алфавита),то адрес &H2009 видеопамяти должен быть загружен значением &H4F.
Это приведет к выводу в "инвертированном" цвете восьми символов: H,I,J,K,
L,M,N,O.
П р и м е р 13. Изменение цвета символов (напомним,что начальный адрес
────────────── Таблицы цветов &H2000 = 8192).
40 SCREEN 1:COLOR 15,4,4
50 FOR I=0 TO 255:PRINT CHR$(I);:NEXT
60 FOR I=0 TO 255
70 FOR J=8192 TO 8223
80 VPOKE J,I
90 FOR K=1 TO 25:NEXT K
100 NEXT J
110 NEXT I
П р и м е р 14. Изменение цвета курсора (напомним Вам, что код ASCII
────────────── символа "█" равен 255).
SCREEN 1:VPOKE &H201F,&HFF
Далее, команда VPOKE BASE(1*5+1)+255\8,&H28 задает цвет курсора и цвет,
которым через курсор "просвечивается" тот символ, на который курсор "нало-
жен". Если оба этих цвета совпадают, то сам курсор и символ сливаются, со-
здавая иллюзию непрозрачности курсора.
┌───────────────────────────────────────────────────────────────────┐
│ Обратите внимание на тот факт, что Таблица CT в режиме SCREEN 1 │
│ инициализируется оператором COLOR . │
└───────────────────────────────────────────────────────────────────┘
П р и м е р 15. Не поленитесь, наберите приведенную ниже программу.
────────────── Затем включите принтер, вставьте лист бумаги и запус-
тите программу. Результаты ее работы пригодятся Вам в дальнейшем!
10 KEYOFF:CLS
120 LOCATE 0,12,0:PRINT CHR$(27);"MFirst page ";:MP=1:INPUT MP:IF MP<1
OR MP>6 GOTO 120
130 PRINT:PRINT:POKE &HF418,1:DEFUSR=&H156
140 LPRINT CHR$(27);"c1";CHR$(27);"p0";CHR$(27);"T15";CHR$(27);">";CHR
$(27);"Q";
150 IF MP=1 THEN I=0:LPRINT CHR$(27);"E (c) LHsoft ver.2":LPRINT C
HR$(27);"Q" ELSE I=43*MP-45
160 P=MP
170 GOSUB 460
180 IF P=1 THEN K=41 ELSE K=43
190 FOR N=1 TO K
200 GOSUB 260
210 I=I+1
220 NEXT N
230 LPRINT"└────┴─────┴────┴──────┴──────┴──────┴──────┴──────┴──────┴
─────────────────────────────────┴─────────────────────────┘
240 LPRINT CHR$(12);:IF P<6 THEN PRINT CHR$(27);"MPut in a new sheet "
;:QQ=USR(0):Q$=INPUT$(1):P=P+1:GOTO 170
250 CLS:KEYON:END
260 LPRINT"│ │ │ │ │ │ │ │ │ │
│ │
270 LPRINT"│ │ ";
280 LPRINTUSING("###");I;
290 A1=I*8:A0=A1+2048:LPRINT" │ ";RIGHT$("0"+HEX$(I),2);" │";A0;"│ 0";
HEX$(A0);" │ ";
300 LPRINTUSING("####");A1;
310 LPRINT" │ ";RIGHT$("000"+HEX$(A1),4);" │";
320 IF IMOD8=0 THEN LPRINT 8192+I/8;"│ ";HEX$(&H2000+I/8);" │";ELSE LP
RINT" │ │";
330 FOR T=0 TO 7:LPRINTUSING(" ###");PEEK(&H1BBF+I*8+T);:NEXT
340 LPRINT" │ ";
350 FOR T=0 TO 7:LPRINT RIGHT$("0"+HEX$(PEEK(&H1BBF+I*8+T)),2);" ";:NE
XT
360 LPRINT"│";CHR$(13);" ";CHR$(27);"N";CHR$(27);"S0008";
370 M=128
380 FOR K1=0 TO 7
390 D=0
400 FOR K2=7 TO 0 STEP-1
410 D=D*2
420 IF PEEK(&H1BBF+I*8+K2)ANDM THEN D=D+1
430 NEXT K2:LPRINT CHR$(D);:M=M/2:NEXT K1
440 LPRINT CHR$(27);"Q"
450 RETURN
460 PRINT CHR$(27);"MCurrent page is";P;
470 LPRINT"┌────┬──────────┬───────────────────────────┬─────────────┬
───────────────────────────────────────────────────────────┐
480 LPRINT"│ │ Код │ Адрес в PGT │ Адрес в CT │
│
490 LPRINT"│Сим-│ ├─────────────┬─────────────┼─────────────┤
Стандартное значение │
500 LPRINT"│вол │ ASCII │ SCREEN 0 │ SCREEN 1 │ SCREEN 1 │
│
510 LPRINT"│ ├─────┬────┼──────┬──────┼──────┬──────┼──────┬──────┼
─────────────────────────────────┬─────────────────────────┤
520 LPRINT"│ │ дес.│шест│ дес. │ шест.│ дес. │ шест.│ дес. │ шест.│
десятичное │ шестнадцатеричное │
530 LPRINT"├────┼─────┼────┼──────┼──────┼──────┼──────┼──────┼──────┼
─────────────────────────────────┼─────────────────────────┤
540 RETURN