|
Читатель-читателю - Полезные советы.
|
49876 DD Е5 PUSH IX
49878 СЗ 2F 3D JP 15663
то есть в этом месте все сделано корректно. Другой фрагмент программы выглядит так:
60595 21 30 3D LD HL,15664
60598 ЕЗ EX (SP),HL
60599 СЗ DF ЕЕ JP 61151
Найдите с помощью программ MONS4 иди DISK-DOCTOR данный стринг, и замените в нем #30 на #2F. Теперь программа будет работать на любом компьютере.
Так же выглядит аналогичный фрагмент и в других версиях. В DCU 2.21:
60849 21 30 3D LD HL,15664
60852 ЕЗ EX (SP),HL
60853 СЗ DD EF JP 61405
В DCU 2.12:
61311 21 30 3D LD HL,15664
61314 ЕЗ EX (SP),HL
61315 СЗ А7 F1 ЭР 61863
Кстати, если выбросить из программы все лишнее, а затем сжать ее каким-нибудь компрессором (рекомендую "RAM-PACKER" Д.Степаненко, текст которого опубликован в журнале "ZX+еще" N1), то программа на диске может стать несколько короче. "Лишним", например, являются упражнения г.Родионова в употреблении крепких английских выражений, что, по-моему, не делает ему чести при всем моем к нему уважении, как к программисту. После проведения данных операций разиер DCU 2.21 сократился у меня с 61 до 54, а DCU 2.31 с 59 до 47 секторов.
Хочу также поделиться некоторым опытом по вопросу, рассмотренному в статье Д.Пьянкова и С.Машарина "Опыт русификации программ" в ZX-FORUM на стр.123.
Я делаю это несколько иначе. Для поиска символьного набора и элементов графики я использую следующую программу:
30 INPUT "address: ";adr 40 LET x=adr 50 FOR a*16384 TO 16415 60 FOR fr=a TO a+224 STEP 32 70 FOR C=b TO b+1792 STEP 256 80 POKE C,PEEK X 90 LET X»X+1: NEXT С 100 NEXT b 110 NEXT a 120 PRINT #0;x;" "; 130 PAUSE 0 140 GO TO 50
Эта программа выводит содержимое памяти с заданного адреса на экран в его верхнюю треть вертикальными колонками, то есть длина блока, который можно видеть одновременно, составляет 2К. В нижней части экрана выводится адрес начала следующего блока, который будет выведен на экран при нажатии любой клавиши. Когда найдете то, что Вам требуется, нажмите BREAK. Затем содержимое экрана можно записать на диск, отредактировать в ARTSTUDIO и поместить на прежнее место при помощи этой же программы, поменяв предварительно местами переменные в строке 80.
Использование полноэкранного редактора, по-моему, удобнее и нагляднее, чем редактора фонтов. Для большего удобства хорошо включить шахматное поле и зафиксировать его, установив в меню атрибутов опцию Bright-Transparent . Тогда удобнее ориентироваться в группах по 8 байтов. Если в этот блок попадет кроме графики и еще что-то - ничего страшного. Просто не трогайте при редактировании ничего лишнего.
Конечно, работает программа медленно и уровень предоставляемых ей пользователю удобств близок к нулевому, но зато в Вашем распоряжении остается максимум памяти.
В некоторых случаях может оказаться удобнее просматривать файл блоками длиной по 4К. Для этого нужно изменить в программе одну строку и добавить две новые:
55 FOR ns0 ТО 2048 STEP 2048 60 FOR b*a+n TO a+n+224 STEP 32 105 NEXT n
Таким способом я русифицировал "геркулес". Рисовать символы, имея на экране весь символьный набор одновременно, оказалось очень удобно. Точно таким же образом я редактировал символьный набор принтера "IВМ-PROPRINTER II". Только символы на экране при этом оказались расположенными горизонтально, да еще и задом-напе-ред. Для того, чтобы они приняли более удобное положение, пришлось изменить несколько строк:
55 FOR П-2048 ТО 0 STEP -2048
60 FOR b»a+n+224 ТО a+n STEP
-32
70 FOR c=b+1792 TO b STEP -256
В таком виде программа начинает рисовать колонки снизу вверх.
Ну и, уж если речь зашла о принтерах, то хочу предложить еще одну программу, написанную моим сыном Андреем, которому тогда было 15 лет. Она предназначена для тех, кто пользуется редактором TLW2.
Этот редактор предназначен для работы с принтером, имеющим кодировку КОИ-7. Но очень многие принтеры ее не имеют. Предлагаемая программа перекодирует посылаемые на принтер коды из кодировки КОИ-7 в альтернативную. Ее можно разместить в любом свободном месте памяти и вызвать как подпрограмму из драйвера принтера непосредственно перед обращением к порту. Код печатаемого символа при этом находится в регистре А.
Для работы с этой программой нужно поместить в таблице УКП коды: рус. - 253, лат. - 254. Они служат для включения и выключения
ЧИТАТЕЛЬ-ЧИТАТЕЛЮ
00010 |
|
PUSH |
AF |
Сохранение регистра А на стеке. |
00020 |
|
LD |
A,(UK) |
Проверка состояния флага UK |
00030 |
|
CP |
0 |
(управляющий код - символ). |
00040 |
|
JR |
Z,X2 |
Переход на Х2, если он сброшен. |
00050 |
|
XOR |
A |
Сброс флага, если он установлен |
00060 |
XI |
PD |
(UK),A |
и выход с восстановлением А. |
00070 |
|
JR |
X6 |
|
00080 |
Х2 |
POP |
AF |
Восстановление А |
00090 |
|
PUSH |
AF |
с сохранением его на стеке. |
00100 |
|
CP |
27 |
Установка флага UK |
00110 |
|
JR |
NZ,X3 |
если в А код 27. |
00120 |
|
LD |
A,1 |
|
00130 |
|
JR |
XI |
|
00140 |
ХЗ |
CP |
253 |
Установка или сброс флага RUS |
00150 |
|
JR |
NZ ,X4 |
(руссхий - латинский) |
00160 |
|
LD |
A, 1 |
если в А 253 или 254. |
00170 |
|
JR |
X5 |
|
00180 |
Х4 |
CP |
254 |
|
00190 |
|
JR |
NZ,X7 |
|
00200 |
|
XOR |
A |
|
00210 |
Х5 |
LD |
(RUS),A |
|
00220 |
|
POP |
AF |
Уменьшение SP для того, чтобы произошел возврат не в драйвер принтера, а сразу в редактор без печати кодов 253 и 254. |
00230 |
Хб |
POP |
AF |
Выход с восстановлением А. |
00240 |
|
RET |
|
|
00250 |
Х7 |
LD |
A,(RUS) |
Проверка флага RUS и переход к программе |
00260 |
|
CP |
1 |
перекодирования, если он равен 1, |
00270 |
|
JR |
Z,X8 |
в противном случае - выход |
00280 |
|
JR |
X6 |
с восстановлением А. |
00290 |
Х8 |
POP |
AF |
|
00300 |
|
PUSH |
ВС |
Сохранение регистров на стеке. |
00310 |
|
PUSH |
DE |
|
00320 |
|
PUSH |
HL |
|
00330 |
|
PUSH |
AF |
|
00340 |
|
LD |
HL,KOI7 |
Загрузка в регистры |
00350 |
|
LD |
DE,ALT |
адресов |
00360 |
|
LD |
B,63 |
и длины таблиц. |
00370 |
Х9 |
LD |
A,(HL) |
Сравнение числа в А с числом |
00380 |
|
LD |
С ,A |
в таблице KOI-7. |
00390 |
|
POP |
AF |
|
00400 |
|
PUSH |
AF |
|
00410 |
|
CP |
С |
|
00420 |
|
JR |
NZ,X10 |
Загрузка соответствующего числа |
00430 |
|
POP |
AF |
из таблицы ALT при равенстве |
00440 |
|
LD |
A,(DE) |
или переход к следующему числу. |
00450 |
|
JR |
Xil |
|
00460 |
Х10 |
INC |
HL |
|
00470 |
|
INC |
DE |
|
00480 |
|
DJNZ |
X9 |
|
00490 |
|
POP |
AF |
|
00500 |
XII |
POP |
HL |
Выход с восстановлением регистров. |
00510 |
|
POP |
DE |
|
00520 |
|
POP |
ВС |
|
00530 |
|
RET |
|
1 |
ЧИТАТЕЛЬ-ЧИТАТЕЛЮ
00540 |
RUS |
DEFB |
00550 |
UK |
DEFB |
00560 |
KOI7 |
DEFB |
00570 |
|
DEFB |
00580 |
|
DEFB |
00590 |
|
DEFB |
00600 |
|
DEFB |
00610 |
|
DEFB |
00620 |
|
DEFB |
00630 |
ALT |
DEFB |
00640 |
|
DEFB |
00650 |
|
DEFB |
00660 |
|
DEFB |
00670 |
|
DEFB |
00680 |
|
DEFB |
00690 |
|
DEFB |
О ;Флаг "РУССКИЙ - ЛАТИНСКИЙ".
О ;Флаг "УПРАВЛЯЮЩИЙ КОД - СИМВОЛ".
97,98,119,103,100,101,118,122,105,106
107,108,109,110,111,112,114,115,116,117
102,104,99,126,123,125,121,120,124,96
113,65,66,87,71,68,69,86,90,73
74,75,76,77,78,79,80,82,83,84
85,70,72,67,94,91,93,95,89,88
92,64,81
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,155,156,157,158 159,160,161,162,163,164,165,166,167,168 169,170,171,172,173,174,175,224,225,226 227,228,229,230,231,232,233,234,235,236 237,238,239
режима перекодировки. Для правильного использования команд управления принтером в любом режиме не перекодируется один байт после кода 27. Если требуется включить в текст команду принтера у которой третий байт больше 64, нужно заранее перейти в латинский алфавит.
При необходимости работать с "основной", "болгарской" кодировкой или КОИ-8, достаточно заменить вторую таблицу.
|