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

Этюды - процедура "Select".


    Вторая  процедура - упрощенный релоцируемый вариант, опубликованной ранее 
в ZX РЕВЮ процедуры Select. В ней использован тот же прием, что и в только что 
расмотренной мною, т.е.

Def Fn S(X,Y,Len,N,Col)=USR add

Len - длина полоски;
N - количество выбираемых пунктов;
Col - цветовой атрибут полоски.

В  регистре C процедура возвращает номер выбранного пункта. Узнать его можно и 
из Бейсика, как это предложено в оригинале:

Np = RANDOMIZE Fn S(X,Y,Len,N,Col)

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

; (C) Savchenko Vladislav, 1996
10         ENT   $
20         LD    IX,(23563)
30         LD    D,(IX+4)
40         LD    E,(IX+12)
50         LD    A,E
60         AND   #18
70         RRCA
80         RRCA
90         RRCA
100        OR    #58
110        LD    H,A
120        LD    A,E
130        AND   #07
140        RRCA
150        RRCA
160        RRCA
170        ADD   A,D
180        LD    L,A
190        LD    DE,#0020
200        LD    B,(IX+28)
210        LD    C,D
220        DEC   B
230 LEN    PUSH  BC
240        LD    B,(IX+20)
250        LD    C,(HL)
260        PUSH  BC
270        LD    A,(IX+36)
280        PUSH  HL
290 LOOP1  LD    (HL),A
300        INC   HL
310        DJNZ  LOOP1
320        POP   HL
330        RES   5,(IY+1)
340 KEY    BIT   5,(IY+1)
350        JR    Z,KEY
360        LD    A,(IY-50)
370        CP    14
380        JR    NC,KEY
390        CP    10
400        JR    C,KEY
410        POP   BC
420        PUSH  HL
430 LOOP2  LD    (HL),C
440        INC   HL
450        DJNZ  LOOP2
460        POP   HL
470        POP   BC
480        CP    13
490        JR    C,NEXTA
500        LD    B,0
510        INC   C
520        RET
530 NEXTA  CP    11
540        JR    C,NEXTB
550        LD    A,C
560        OR    A
570        JR    Z,LEN
580        SBC   HL,DE
590        DEC   C
600        JR    LEN
610 NEXTB  LD    A,C
620        CP    B
630        JR    NC,LEN
640        ADC   HL,DE
650        DEC   HL
660        INC   C
670        JR    LEN

                 Длина 110 байт.

     ИФК.:  Неприятной  особенностью этой процедуры, является то, что она 
работает только при разрешенных прерываниях IM1. А это плохо. Если Вы работаете 
со вторыми прерываниями, то можно посоветовать в конце обработки прерываний 
подать команду CALL #66. Если Вы не желаете использовать прерывания вообще, что  
предпочтительней, то вставте эту команду между строками 330 и 340, а также 
перенесите на эту команду метку KEY. Если и это Вас не устроит, то читайте 
порты сами.



СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Железо - К вопросу о дисководах и multiloader'ах.... "Как ни крути... три дисковода не добавят тебе мастерства!"
Мыльница - errata: Работа над ошибками.
АПЛ КУРСК - Сегодня 23 августа 2000 г. 11 день, с момента затопления подводной лодки К-144 "КУРСК".
Intro - Contents.
Мысли - Стихи: Оптимизм, 9-й месяц.

В этот день...   20 апреля