ZX-Ревю 1996 №7-8 1995 г.

Форум - редактор для GENS.


 (С) Бандура Сергей Иванович
                        г. Николаев

                           Редактор для GENS

   Не надо объяснять, что самым большим недостатком пакета GENS-MONS
является встроенный в GENS неудобный строчный редактор. Однако фирма Hisoft,
встраивающая этот редактор во все свои разработки, почему-то только для
Паскаля сделала исключение, разработав для него дополнительный
псевдоэкранный редактор, который в пакете для Паскаля HP4TM16 называется
AD64 и содержится в файле EDITOR. Можно предположить, что если и Ассемблер,
и Паскаль, разработанные одной фирмой, имеют одинаковые строчные редакторы,
то дополнительный редактор от Паскаля должен подойти и к Ассемблеру. К
сожалению это не так, потому, что:

 - в Паскале под номер строки отводится три байта, а в GENS - два;
 - при наборе программы в строчном редакторе Паскаля вместо операторов
подставляются токены, как в Бейсике, которые при запуске внешнего редактора
преобразуются в слова;
 - в GENS для экономии памяти лишние пробелы заменяются символом табуляции
(код 09);
 - GENS - перемещаемая программа, поэтому заранее неизвестно, где будут
храниться адреса начала и конца текста;
 - возможность редактирования строки длиной до 80 символов с отображением 64
символов в строке явно избыточна для Ассемблера.
    Поэтому, для того, чтобы использовать редактор AD64 совместно с GENS
(использовался gens4m версия 4.1, дисковая, 51 знак в строке), требуется
внести следующие изменения:

1. С адреса F0BEH занести:
21 30 75 C3 EE F3 ... 
или
LD  HL, 30000 ; стартовый адрес GENS
JP  #F3EE     ; настройка редактора

2. С адреса F36CH занести:
C5 0E 02 CD D3 F3 FE 0D 20 F9 C1 ...
или
    PUSH BC
    LD   C,02
L1  CALL #F3D3 ; подпрограмма удаления
    CP   #0D   ; лишних пробелов
    JR   NZ,L1
    POP  BC

3. Все с адреса F3A8H по адрес F4A3H заполнить кодом 00 и там разместить
новые подпрограммы:
          ORG  #F3A8
LF3A8     INC  HL         ; удаление номеров строк
          INC  HL
          PUSH BC
          LD   C,#07
LF3AE     LD   A,(HL)
          LD   (DE),A
          CP   #09
          CALL Z,LF3D2
          DEC  D
          INC  HL
          INC  DE
          CP   #0D
          JR   NZ,LF3AE
          POP  BC
          SBC  HL,BC
          ADD  HL,BC
          JR   NZ,LF3A8
          LD   (#F0C6),DE
          RET
LF3D2     PUSH HL         ; замена символов табуляции
          LD   A,#20
          DEC  DE
LF3D9     INC  DE
          LD   (DE),A
          DEC  C
          JR   NZ,LF3D9
          LD   C,#06
          POP  HL
          RET

          ORG  #F3D3
L0        LD   A,(HL)     ; проверка на лишние пробелы
          CP   #20
          CALL Z,PR
          LD   (DE),A
          INC  HL
          INC  DE
          RET
PR        LD   A,C
          OR   A
          JR   NZ,TAB
          LD   A,(HL)
          RET
TAB       INC  HL
          LD   A,(HL)     ; замена лишних пробелов
          CP   #20        ; на символ табуляции
          JR   Z,TAB
          DEC  C
          LD   A,#09
          DEC  HL
          RET

          ORG  #F3EE      ; настройка редактора
          PUSH HL
          LD   DE,#0036   ; для gens4m адрес конца текста
          ADD  HL,DE      ; хранится в ячейке, отстоящей на
          LD   (L2+1),HL  ; 54 байта от начала программы
          POP  HL
          LD   DE,#22E8   ; адрес начала текста хранится в
          ADD  HL,DE      ; ячейке, отстоящей от начала прог-
          LD   (L1+2),HL  ; раммы на 8936 байт
L1        LD   DE,(#0000)
L2        LD   HL,(#0000)
          LD   (#F0C6),HL
          LD   HL,(L2+1)
          LD   (#F59A),HL
          LD   (#F0C4),DE
          CALL #F39E
          CALL #F7DE
          LD   HL,#0000
          LD   (#F0CA),HL
          JP   #F4FB

     Редактор AD64 использует собственный буфер, адрес вершины которого
хранится в ячейке FC08H, туда нужно занести код B8H, дно ограничено адресом
конца текста.
   Поскольку строчный редактор GENS не отображает символов псевдографики,
возможность их ввода можно отключить:

                           POKE 62781,24: POKE 62782,5

   Готовую программу следует сохранить командой:

                           SAVE "gensedit" CODE 61630,3906

   Загрузчик для GENS и для редактора может быть таким же, как для Паскаля:

 1 RANDOMIZE USR 61630: RANDOMIZE USR a
10 CLEAR 29999: LET a=30000: REM стартовый адрес GENS
20 RANDOMIZE USR 15619: REM: LOAD "gens4" CODE a
30 RANDOMIZE USR 15619: REM: LOAD "gensedit" CODE
40 POKE 61632,INT (a/256): POKE 61631,(a-256*PEEK 61632)
50 RANDOMIZE USR a

   Его следует сохранить командой:

                           SAVE "gens4" LINE 10

   Запуск внешнего редактора производится после выхода из GENS в Бейсик
командой GO TO 1.
   При наборе текста в новом редакторе команды Ассемблера отличаются от
меток тем, что перед меткой не должно быть пробелов. Количество пробелов
перед командой не ограничено, поскольку после выхода из редактора все
заменяются одним символом табуляции.

   Перечень управляющих клавиш и команд редактора AD64 содержится в файле
HELP, входящем в пакет Паскаля HP4TM16, но на всякий случай привожу их еще
раз:
   Управляющие клавиши:

     CS+1 (EDIT)         - редактировать строку;
     CS+2 (Caps Lock)    - переключить регистр;
     CS+3 (True Video)   - на страницу вперед;
     CS+4 (Inv. Video)   - на страницу назад;
     CS+5 (Влево)        - курсор/строка влево;
     CS+6 (Вниз)         - экранный курсор вниз;
     CS+7 (Вверх)        - экранный курсор вверх;
     CS+8 (Вправо)       - курсор/строка вправо;
     CS+9 (GRAPHICS)     - вкл/выкл ввода псевдографики;
     CS+0 (DELETE)       - удалить символ;
     SS+Q (<=)           - экранный курсор в начало текста;
     SS+W (<>)           - экранный курсор в конец текста;
     SS+I                - режим вставки строк;
     SS+E                - режим редактирования;
     SS+A                - режим добавления строк;
     SS+D                - удалить строку;
     SS+S                - найти образец;
     SS+CS (EXTEND MODE) - ввод команды.

   Команды:

     4 (OPEN)            - пометить начало блока;
     5 (CLOSE)           - пометить конец блока;
     6 (MOVE)            - перенести блок;
     7 (ERASE)           - стереть блок;
     O (FORMAT)          - экран 32/64 символа в строке;
     Z (COPY)            - копировать блок;
     X (CLEAR)           - стереть текст;
     Y                   - выход из редактора;
     F                   - задать образец для поиска;
     R                   - задать строку для замены.

  Команды поиска:

     S                   - найти образец;
     R                   - заменить на заданную строку;
     G                   - заменить все образцы до конца текста.

                О дополнительных изменениях

   Выше было сказано, что режим 64 символа в строке избыточен для Ассемблера
- можно работать в режиме 32 символа в строке, а можно попробовать заменить
драйвер экрана. В AD64 он расположен с адреса FD3DH и на входе получает в
регистре А - код символа, в регистре HL - координату экрана в знакоместах
(0000 - верхний левый угол), при выходе должен быть установлен флаг Z, если
позиция печати находится в пределах экрана. Для примера в листинге 1
приведен драйвер печати на 42 символа в строке (переделан из драйвера на 51
символ в строке от GENS).
   При использовании этого драйвера следует переустановить ограничитель
курсора:
                      POKE 64501,40

и отключить переключатель 32/64 символа в строке:

                     POKE 62628,24: POKE 62629,5

   К сожалению, работает этот драйвер очень медленно, зато освобождается
область памяти с FEB8H по FFFFH, где можно разместить, например, процедуру
вывода на принтер, использовав для ее вызова освободившийся переключатель
32/64 символа в строке или клавишу GRAPHICS.

   Листинг 1. Драйвер экрана на 42 символа в строке

FD3D: E5 D5 C5 FE 00 20 02 3E : 17
FD45: 20 4F 7D FE 2A D2 DE FD : 03
FD4D: 7C E6 07 0F 0F 0F F5 45 : 1A
FD55: 2E 06 3E 00 85 10 FD 6F : C5
FD5D: E6 07 32 2C FE CB 3D CB : 76
FD65: 3D CB 3D F1 85 6F 7C E6 : EE
FD6D: F8 F6 40 67 E5 79 FE 20 : 7B
FD75: 30 05 11 BA FD 18 04 ED : 78
FD7D: 5B 36 5C 6F 26 00 E5 29 : 0A
FD85: 29 29 19 79 01 08 00 11 : 80
ED8D: 24 FE ED B0 FE 59 20 05 : C5
FD95: 21 27 FE 36 38 E1 11 12 : 4A
FD9D: FE 19 5E E1 3A 2C FE B7 : 0B
FDA5: 28 09 47 D5 11 00 01 CD : CE
FDAD: E2 FD D1 47 C6 06 F5 FE : 60
FDB5: 09 30 07 06 06 4B 16 08 : 67
FDBD: 18 0F D6 08 57 3E 08 90 : EC
FDC5: 47 4B CD F0 FD 2C 42 16 : 92
FDCD: 10 CD F0 FD 7A D1 92 28 : 99
FDD5: 08 47 11 00 01 CD E2 FD : DF
FDDD: BF C1 D1 E1 C9 C5 06 08 : A8
FDE5: E5 CB 06 19 10 FB E1 C1 : 5E
FDED: 10 F3 C9 D5 C5 11 24 FE : 83
FDF5: CB 79 F5 20 16 E5 06 08 : 54
FDFD: 1A CB 7F CB BE 28 02 CB : DC
FE05: FE 13 CB 06 24 10 F1 E1 : EB
FE0D: 11 24 FE CB 01 06 08 EB : 03
FE15: CB 06 23 10 FB EB F1 20 : 0E
FE1D: D4 D1 42 10 CF D1 C9 00 : 7B
FE25: 00 00 00 3E 00 00 00 02 : 63
FE2D: 18 24 18 28 28 03 81 88 : DB
FE35: 88 C0 42 81 81 C0 03 C0 : 42
FE3D: C0 81 82 81 81 84 C0 A0 : E4
FE45: A0 82 A0 A0 C0 A0 A0 03 : A8
FE4D: 03 C0 82 81 A0 A0 A0 A0 : 91
FE55: A0 A0 A0 A0 A0 A0 C0 A0 : 73
FE5D: A0 A0 90 A0 A0 A0 A0 A0 : 4B
FE65: A0 82 A0 90 90 90 28 C0 : BD
FE6D: C0 81 03 81 81 84 81 C0 : 76
FE75: C0 81 81 C0 81 81 81 81 : F9
FE7D: 81 C0 81 81 81 81 81 81 : C2
FE85: 81 81 81 81 81 81 81 81 : 8B
FE8D: C0 C0 81 81 0C 00 00 00 : 19
FE95: 00 00 00 81 FF 10 18 FC : 37
FE9D: FE FE FC 18 10 00 1F 3E : 18
FEA5: 7E FC 7E 3E 1F 82 EE FE : 66
FEAD: FE FE 7C 38 10 10 38 7C : 2F
FEB5: FE FE FE EE 82 00 00 00 : 1D



СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Проходилка - Ordinary story.
Юмор - новогодние анекдоты.
Предисловие - С днем рождения CYBORG.
Дискуссия - Товарищ Zonoff.
Реклама - Для приобретения новейшего SOFT'а со всего мира можно звонить в Харьков...

В этот день...   28 марта