Вариант с большими массивами, но с выбором управления. :)
Вид для печати
Вариант с большими массивами, но с выбором управления. :)
USR это функция, которую можно прикрутить к любому оператору использующему числовые операнды. Например можно легко сделать BORDER USR XXXXX, или DIM A(USR XXXXX). Единственное, почему для вызова процедур в кодах используется RANDOMIZE - отсутствие влияния на выполняемую программу в бейсике, в то время, как все остальные операторы будут принимать за значение содержимое пары BC по выходу из процедуры. Если же выход из кодов не планируется, то можно вовсе намудрить что то вроде LIST USR или #OPEN USR.
Черта лысого! Команда RANDOMIZE n задает начало последовательности для оператора RND. Что в некоторых случаях делает ее и без того "не совсем случайной".
Если на выходе из кодовой процедуры в ВС будет "лежать" значение, которое не переваривает оператор - получим остановку с выводом сообщения об ошибке.
Если уж, так хочется, можно для этих целей использовать локальную переменную, значение, которой не критично на данном участке программы (к примеру, переменную "отработавшего" цикла): LET z= USR n
---------- Post added at 19:07 ---------- Previous post was at 19:04 ----------
Пойду писать игру на бесике... ;)
Предлагаю опрос клавиш повесить на прерывания, и из массива брать переменные состояния нажатий клавиш. Иначе перекрёстное нажатие клавиш не получится красиво реализовать.
#00 - клавиша нажата
#FF - клавиша не нажата.
Вот, держите процедурку:
Код:ORG #8000
KEYS_ISR:
PUSH HL
PUSH DE
PUSH BC
PUSH AF
LD HL,KEY_MAP
LD DE,KEY_MAP+1
LD BC,40
LD (HL),L
LDIR
LD B,40
LD HL,KEY_MAP
LD DE,KEYTAB
SCANLP LD A,(DE)
IN A,(#FE)
INC DE
EX DE,HL
AND (HL)
EX DE,HL
INC DE
JR Z,$+4
LD (HL),#FF
INC HL
DJNZ SCANLP
POP AF
POP BC
POP DE
POP HL
EI
RET
KEYTAB DB #FD,1 ;#14
DB #7F,16 ;#23
DB #FE,8 ;#21
DB #FD,4 ;#16
DB #FB,4 ;#0C
DB #FD,8 ;#17
DB #FD,16 ;#18
DB #BF,16 ;#19
DB #DF,4 ;#11
DB #BF,8 ;#1A
DB #BF,4 ;#1B
DB #BF,2 ;#1C
DB #7F,4 ;#25
DB #7F,8 ;#24
DB #DF,2 ;#12
DB #DF,1 ;#13
DB #FB,1 ;#0A
DB #FB,8 ;#0D
DB #FD,2 ;#15
DB #FB,16 ;#0E
DB #DF,8 ;#10
DB #FE,16 ;#22
DB #FB,2 ;#0B
DB #FE,4 ;#20
DB #DF,16 ;#0F
DB #FE,2 ;#1F
DB #EF,1 ;#09
DB #F7,1 ;#00
DB #F7,2 ;#01
DB #F7,4 ;#02
DB #F7,8 ;#03
DB #F7,16 ;#04
DB #EF,16 ;#05
DB #EF,8 ;#06
DB #EF,4 ;#07
DB #EF,2 ;#08
DB #7F,1 ;#27
DB #BF,1 ;#1D
DB #FE,1 ;#1E
DB #7F,2 ;#26
ORG #8100
KEY_MAP:
DS 41,#00
KEY_A EQU KEY_MAP+#00
KEY_B EQU KEY_MAP+#01
KEY_C EQU KEY_MAP+#02
KEY_D EQU KEY_MAP+#03
KEY_E EQU KEY_MAP+#04
KEY_F EQU KEY_MAP+#05
KEY_G EQU KEY_MAP+#06
KEY_H EQU KEY_MAP+#07
KEY_I EQU KEY_MAP+#08
KEY_J EQU KEY_MAP+#09
KEY_K EQU KEY_MAP+#0A
KEY_L EQU KEY_MAP+#0B
KEY_M EQU KEY_MAP+#0C
KEY_N EQU KEY_MAP+#0D
KEY_O EQU KEY_MAP+#0E
KEY_P EQU KEY_MAP+#0F
KEY_Q EQU KEY_MAP+#10
KEY_R EQU KEY_MAP+#11
KEY_S EQU KEY_MAP+#12
KEY_T EQU KEY_MAP+#13
KEY_U EQU KEY_MAP+#14
KEY_V EQU KEY_MAP+#15
KEY_W EQU KEY_MAP+#16
KEY_X EQU KEY_MAP+#17
KEY_Y EQU KEY_MAP+#18
KEY_Z EQU KEY_MAP+#19
KEY_0 EQU KEY_MAP+#1A
KEY_1 EQU KEY_MAP+#1B
KEY_2 EQU KEY_MAP+#1C
KEY_3 EQU KEY_MAP+#1D
KEY_4 EQU KEY_MAP+#1E
KEY_5 EQU KEY_MAP+#1F
KEY_6 EQU KEY_MAP+#20
KEY_7 EQU KEY_MAP+#21
KEY_8 EQU KEY_MAP+#22
KEY_9 EQU KEY_MAP+#23
KEY_SPC EQU KEY_MAP+#24
KEY_ENT EQU KEY_MAP+#25
KEY_CS EQU KEY_MAP+#26
KEY_SS EQU KEY_MAP+#27