ZX Club
#05
29 октября 1997 |
|
ZX-Поппури - Процедура "OPTION SELECTOR". О процедуре "Звезды", используемой в газете.
СОДЕРЖАНИЕ 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
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября