ZX Club #05
29 октября 1997

ZX-Поппури - Процедура "OPTION SELECTOR". О процедуре "Звезды", используемой в газете.

<b>ZX-Поппури</b> - Процедура
                СОДЕРЖАНИЕ

article                       counter down

Вступительное слово....................000
Option Selector........................053
Звезды-2...............................312


   Открывая раздел "ZX Попурри",  хотелось
бы напомнить читателям о  концепции  газе-
ты, само название  которой  выражает  идею
объединения.

   Если у Барнаульских любителей  Спектрум
нет Клуба, воплощенного в конкретное поме-
щение с почтовым  и  юридическим  адресом,
то это совсем не значит, что у них нет аб-
солютно никакой возможности общения. Поде-
литься со Всеми своими проблемами,  мысля-
ми, работами можно, например, через  элек-
тронную газету  "ZX-club"!  Опубликованный
материал, возможно,  породит  читательский
отклик; а это уже - мнение коллег,  обрат-
ная связь.  Кроме того: редакция газеты не
отказывается от публикации частных  объяв-
лений, подать которые  в электронном вари-
анте можно куда эффектнее, нежели в типог-
рафском исполнении (и причем - бесплатно).

   Поскольку определяющим замыслом являет-
ся Клубная Организация, было бы  нелогично
не искать возможности налаживания  контак-
тов вообще и с действующими  Клубами  -  в
частности.  Месяца два назад я  написал  в
г.Улан-Удэ Стасу Рубцову (95/2, с.5)  и  в
г.Ярославль Алексею  Кожевникову  (96/7-8,
с.64), но ответа до сих  пор  не  получил.
Правда, и газеты (в сегодняшнем  ее  виде)
в то время не было даже в замыслах, да и о
Клубе думалось весьма смутно.  В  середине
сентября было отправлено письмо в пос.Мур-
маши Мурманской обл.  (95/2,  с.20).  Если
придет ответ, - наше информационное прост-
ранство станет немного шире...

   И конечно же, "ZX Попурри", по  опреде-
лению, предполагает публикацию  материалов
"из разных опер", но - объединенных  лейт-
мотивом.


             OPTION SELECTOR

   Поводом к написанию данной статьи  пос-
лужил тот самый лейтмотив, развернутый  во
"Вступительном  слове".  Поскольку   автор
процедуры OS,  Антон  Сидоренко,  является
членом  Клуба,  в адрес  которого было от-
правлено письмо, то я  и  хотел  продемон-
стрировать работу  Выбора Опций  в  данном
разделе. Однако - не дали. В процессе фор-
мирования раздела постоянно что-то  отвер-
галось , предлагалось другое; а получилось
- третье. Обычное дело.

   И все же, проявив минимальную  добросо-
вестность, я просмотрел номера ZX-Ревю  за
'95 - '96 годы и обнаружил, что данной те-
ме - организация  меню - уделено  незаслу-
женно мало внимания.  Конечно, для опытных
кодеров организовать  простенькую  "менюш-
ку" не составляет особого труда.  Да опыт-
ные и  не  занимаются  такими  "мелочами";
pull-down, стрелки, мышки - совсем  другое
дело.  А куда  бедному  "чайнику"  деться?
Так и продолжать: Press <1>, <2>, <3>?..

   Итак, перечисляю:

1. OS  А. Сидоренко. - 95/2, с.16-19.

   Приведены ассемблерный текст,  шестнад-
цатеричный дамп блока  кодов  и  подробные
комментарии Инфорком.  Потратив  некоторые
усилия и  воспользовавшись  материалом  из
ZX FORUM  1+2,  с.115,  данной  процедурой
сможет воспользоваться  даже  самый  начи-
нающий пользователь,  осваивающий  Бейсик.
Причем, предолев все  возникающие по  ходу
работы  препятствия (а опубликованного ма-
териала для этого  достаточно),  "чайник",
сам того не заметив, превратится в юзера.

2. OS  А. Епончинцев. - 96/7-8, с.72-73.

   Чтобы воспользоваться этой  процедурой,
необходимо, для  начала,  научиться  рабо-
тать с каким-нибудь Ассемблером.

3. В. Савченко.   Многооконный  интерфейс.
   Процедура "Select". - 96/7-8, с.88-91.

   С помощью приведенных в  статье  проце-
дур можно из Бейсика  организовывать  мно-
гооконные меню.  Но для  этого  необходимо
иметь навыки осмысленной работы  с  ассем-
блерным текстом.

   В дополнение к статье В. Савченко начи-
нающим программистам  можно  рекомендоватъ
программу "Windows" (C) Углеков К.В. '92г.
   Программа  распространяется Инфорком на
системной дискете с шифром CD6.

   Каков же вывод? Если исключить процеду-
ру А. Сидоренко, вывод очевиден: осваивай-
те Ассемблер.  А мне,  например,  известны
искренние  приверженцы  Спектрум,  занима-
ющие  принципиальную позицию:  нецелесооб-
разно Любителю осваивать язык Профессиона-
лов.  Использовать готовые машинные коды в
Бейсик-программе - еще куда ни шло; но са-
мостоятельно  "путешествовать по процессо-
ру" - извините.

   Так вот, имея в виду "помочь любителям,
НЕ ЖЕЛАЮЩИМ преодолевать <барьер машинного
го кода>", мы и приводим  ниже   еще  одну
процедуру  организации  меню,  по  размеру
сравнимую с процедурой А.  Епончинцева.  В
остальном (обозначение параметров, методи-
ка использования и проч.)  мы  постарались
сохранить соответствие процедуре  А. Сидо-
ренко.


      Процедура, найденная в трамвае

Барнаул                       (C) mr.X '97

00010          ORG   40000
00020          ENT

00030          LD    A,(NUMB)
00040          LD    HL,(COOR)

00050          LD    A,H   ;процедура
00060          ADD   HL,HL ;расчета
00070          ADD   HL,HL ;адреса
00080          ADD   HL,HL ;в файле
00090          LD    H,22  ;атрибутов
00100          ADD   HL,HL ;из координат
00110          ADD   HL,HL ;(С) Д.Анисимов
00120          ADD   A,L   ;г. Киров  1996
00130          LD    L,A   ;ZX-Ревю 96/7-8

00140          LD    (ATTR),HL
00150 LAB1     LD    A,(MCLR)
00160          CALL  LAB7
00170 LAB2     EI
00180          RES   5,(IY+1)
00190 LAB3     BIT   5,(IY+1)
00200          JR    Z,LAB3
00210          LD    A,(23560)
00220          LD    HL,(ATTR)
00230          LD    DE,32
00240          LD    BC,NUMB
00250          CP    "9
00260          JR    Z,LAB6
00270          CP    "8
00280          JR    Z,LAB4
00290          CP    "0
00300          JR    Z,LAB9
00310          JR    LAB2
00320 LAB4     LD    A,(BC)
00330          PUSH  BC
00340          LD    C,A
00350          LD    A,(NLIN)
00360          CP    C
00370          LD    A,C
00380          POP   BC
00390          JR    Z,LAB2
00400          INC   A
00410          ADD   HL,DE
00420 LAB5     LD    (BC),A
00430          LD    A,(RCLR)
00440          CALL  LAB7
00450          LD    (ATTR),HL
00460          JR    LAB1
00470 LAB6     LD    A,(BC)
00480          CP    1
00490          JR    Z,LAB2
00500          DEC   A
00510          SBC   HL,DE
00520          JR    LAB5
00530 LAB7     PUSH  HL
00540          LD    HL,(ATTR)
00550          PUSH  AF
00560          LD    A,(WLIN)
00570          LD    B,A
00580          POP   AF
00590 LAB8     LD    (HL),A
00600          INC   HL
00610          DJNZ  LAB8
00620          POP   HL
00630          RET
00640 LAB9     LD    A,(BC)
00650          PUSH  AF
00660          LD    B,10
00670 LAB10    PUSH  BC
00680          LD    A,(RCLR)
00690          CALL  LAB7
00700          HALT
00710          LD    A,(MCLR)
00720          CALL  LAB7
00730          HALT
00740          POP   BC
00750          DJNZ  LAB10
00760          POP   AF
00770          LD    B,0
00780          LD    C,A
00790          RET

00800   NUMB   DB #01   ;номер опции
00810   ATTR   DW #0000 ;адрес в файле
                        ;атрибутов
00820   COOR   DW #0101 ;строка/столбец
00830   MCLR   DB 8*0+7 ;выделение опции
00840   RCLR   DB 8*7+0 ;8*PAPER + INK
00850   WLIN   DB 15    ;ширина курсора
00860   NLIN   DB 4     ;число опций

   Процедура  неперемещаемая,  но   особой
проблемы, на наш взгляд, это не  представ-
ляет.  С помощью директивы  ORG  исходного
текста программы можно задать любой  стар-
товый адрес (Start) объектного кода.

  Так как результат работы программы - по-
рядковый номер выделенной (выбранной)  оп-
ции - хранится в ячейке Start+141  (NUMB),
перед  повторным  запуском  программы,   в
этой ячейке  необходимо    восстанавливать
значение #01: POKE Start+141,1.


   Шестнадцатеричный дамп блока кодов:

   9C40: 3A CC 9C 2A CF 9C 7C 29: B8
   9C48: 29 29 26 16 29 29 85 6F: B8
   9C50: 22 CD 9C 3A D1 9C CD A1: 8C
   9C58: 9C FB FD CB 01 AE FD CB: CA
   9C60: 01 6E 28 FA 3A 08 5C 2A: 55
   9C68: CD 9C 11 20 00 01 CC 9C: 07
   9C70: FE 39 28 23 FE 38 28 06: F2
   9C78: FE 30 28 35 18 DB 0A C5: 61
   9C80: 4F 3A D4 9C B9 79 C1 28: 30
   9C88: D0 3C 19 02 3A D2 9C CD: C0
   9C90: A1 9C 22 CD 9C 18 BC 0A: D2
   9C98: FE 01 28 BD 3D ED 52 18: AC
   9CAO: EA E5 2A CD 9C F5 3A D3: A0
   9CA8: 9C 47 F1 77 23 10 FC E1: 9F
   9CB0: C9 0A F5 06 0A C5 3A D2: F5
   9CB8: 9C CD A1 9C 76 3A D1 9C: 17
   9CC0: CD A1 9C 76 C1 10 EE F1: 8C
   9CC8: 06 00 4F C9 01 00 00 01: 84
   9CD0: 01 07 38 0F 04 00 00 00: BF

   RANDOMIZE USR 15619: REM: SAVE
   "menu" CODE 40000,149

   Отметим также,  что  заменив  директивы
DEFB на директивы EQU, определяющие число-
вые значения меток-параметров, можно  сок-
ратить длину объектного кода байтов на 15.
При этом программу придется несколько  из-
менить.

.....
00022 MCLR     EQU   8*0+7  ;строки
00023 RCLR     EQU   8*7+0  ;с номерами
00024 WLIN     EQU   15     ;830-860
00025 NLIN     EQU   4      ;исключаем
.....
00325          CP    NLIN
;строки 330-380 исключаем
;в строках 150, 430, 560, 680, 710
;команду  LD  A,(метка)
;заменяем на команду  LD  A,метка

   Длина  кодового  блока измененной прог-
раммы составляет 134 байта.

   Информативную часть меню - название оп-
ций - можно нарисовать в каком-нибудь гра-
фическом редакторе.  Тогда для организации
меню, расположенного, например, в  верхнем
сегменте  экрана  (первые  восемь  строк),
достаточно набрать:

05 CLEAR Start-1
10 RANDOMIZE USR 15619: REM: LOAD
   "menu $" CODE 16384,2048
20 RANDOMIZE USR 15619: REM: LOAD
   "menu" CODE Start
30 POKE Start+141,1
40 LET menu = USR Start: REM menu = 1...24
50 IF menu = ... THEN ...


           Процедура "Звезды-2"

   Интересная вещь: большинство, с кем мне
доводилось заводить  речь  о  Барнаульских
кодерах, вспоминают, без  преувеличения  -
легендарного,  Гревцева Я.В.      (96/1-2,
с.85-90). Наверное, каждый местный синкле-
рист считает  своей  обязанностью  набрать
эту процедуру и полюбоваться на  великоле-
пие вспыхивающих звезд.  Так что, если  Вы
в течении минуты  (например,  заслушавшись
музыкой) не трогали ни одной  клавиши,  то
давно уже все поняли.  Именно так: "храни-
тель экрана", действующий  в  этом  номере
газеты, построен на основе "Звезд" Гревце-
ва.

   Возможно, на эту  тему  написаны  более
"умные" и короткие процедуры.  Я  подобным
исследованием не занимался и  не  в  курсе
последних событий. Мне понравился сам под-
ход автора к написанию процедуры:  "...все
подпрограммы, используемые  мною  ..,  уже
"засветились"   в    различных    изданиях
ИНФОРКОМА.  Смею надеяться, что именно это
поможет без  помех  разобраться  в  данной
процедуре даже  начинающим  программистам.
Все это является примером того, как  из  в
общем-то известных вещей  можно  составить
нечто новое."

   Лично мне такое  направление  авторской
мысли  импонирует.  Выражаю  надежду,  что
этот номер газеты дойдет каким-либо  обра-
зом до г-на Гревцева  и  послужит  поводом
для дальнейшего, уже не заочного,  знаком-
ства.

4 октября 1997                        SWdZ



Другие статьи номера:

От редакции - К процессу создания газеты подключилась группа Demention. Вопрос об электронном журнале на Алтае.

Soft group - Кое-что о подключении принтера. Порты устройств компьютера ZX-SPECTRUM.

Железо - О Covox'ах, General Sound'е и Sound Drive 2.

ZX-Поппури - Процедура "OPTION SELECTOR". О процедуре "Звезды", используемой в газете.

Club IM2 - Терминология и теоритические аспекты прерываний и многозадачности.

Club IM2 - Конкурс на лучший сценарий игры типа DIZZY.

Virus - О конкурсе по игре "Вирус 2".

Enjoy - Анекдоты...


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

Похожие статьи:
От авторов - Мы собираемся посвящать вас о событиях в Латвии, играх, программирование.
Новости - COPPER FEET (братья Mедноноговы и Co).
Описания игр - FIGHTER PILOT.
Интерфейс - Новости : KAV разрабатывает аркадную адвентюру "Ежики мутанты", Nicodim работает над игрой "Legend of Kyrandia", Microfucker. Горячая десятка игр и пятерка электронных журналов из города Ярославля.
Вставай, страна огромная! - Воззвание к патриотам России.

В этот день...   21 ноября