(c) А.Епончинцев, Кемеровская обл.
Я прочитал в ZX РЕВЮ 95/2 программу Антона Сидоренко " OPTION SELECTOR".
Теперь я предлагаю читателям свою версию "OPTION SELECTOR'а". Она занимает 150
байт.
Антон для выделения опции использует атрибут, я же использую процедуру
печати символа, накладывая его на изображение по "OVER". У Антона в метку
"OPTN" загружается номер выбранного пункта, а у меня программа делает переход
на нужный адрес. Впрочем, если это не нужно, Вы можете узнать номер выбранного
пункта в метке "NUM".
ORG 40000
OPR CALL PRINT
CALL PAUSE
OPR1 LD A,#FD
IN A,(#FE)
BIT 0,A
JR Z,DOWN
LD A,#FB
IN A,(#FE)
BIT 0,A
JR Z,UP
LD A,#7F
IN A,(#FE)
BIT 0,A
JR Z,FIRE
JR OPR1
PAUSE LD B,5
MM HALT
DJNZ MM
RET
DOWN CALL PRINT
LD A,(YC)
; 1->
CP 5
JR Z,OPR
INC A
LD (YC),A
LD A,(NUM)
INC A
LD (NUM),A
CALL PAUSE
JR OPR
UP CALL PRINT
LD A,(YC)
; 2->
CP 0
JR Z,OPR
DEC A
LD (YC),A
LD A,(NUM)
DEC A
LD (NUM),A
CALL PAUSE
JR OPR
FIRE LD A,(NUM)
LD DE,VETKA
LD L,A
LD H,0
ADD HL,HL
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
EX DE,HL
JP (HL)
PRINT LD (IY+87),3
LD HL,CUP
LD A,(SH)
LD B,A
L1 LD A,22
RST 16
LD A,(YC)
RST 16
LD A,(XC)
RST 16
INC A
LD (XC),A
LD A,(HL)
RST 16
DJNZ L1
LD A,(XPC)
LD (XC),A
LD (IY+87),0
RET
YC DEFB 0
XC DEFB 0
XPC DEFB 0
NUM DEFB 0
CUP DEFB 143
SH DEFB 10
DEFW; ПЕРЕХОД НА АДРЕС ADR1
DEFW; ADR2
DEFW; и т.д
DEFW;
.
.
.
В данной программе:
Метка YC - печать опции;
XC - печать по X;
XPC- должна равняться первому вводу метки XC, чтобы курсор не
прыгал по экрану;
NUM- номер опции;
CUP- код символа;
SH - ширина опции;
VETKA - адрес перехода.
Изменив значения "CP" ( 1->, 2->), Вы можете увеличить или уменьшить
количество выбераемых пунктов.
Клавиши управления у этой программы: Q, A, SP.