В заключение - еще пара про-
цедур.
Первая процедура предназначе-
на для перевода числа в десятич-
ный вид, пригодный для печати.
На входе: в регистре HL - исход-
ное число. На выходе: с метки
TABLE в памяти располагаются 5
байт - десятки тысяч, тысячи,
сотни, десятки и единицы.
Для печати эти ячейки необхо-
димо увеличить на 48. Это можно
поручить процедуре, убрав знаки
";".
140.
ORG 40000
;Written by Max from 'Cyberax Software'.
DECIMAL LD BC,TABLE
LD DE,10000
CALL COUNT
LD DE,1000
CALL COUNT
LD DE,100
CALL COUNT
LD DE,10
CALL COUNT
LD A,L
; ADD A,48
LD (BC),A
RET
COUNT XOR A
LP PUSH HL
SBC HL,DE
JR C,ENDC
INC A
INC SP
INC SP
JP LP
ENDC POP HL
; ADD A,48
LD (BC),A
INC BC
RET
TABLE DEFS 5
2
Вторая процедура - сканер па-
роля. Ее можно вызывать 50 раз в
секунду, например по IM 2. На
выходе, если пароль набран, ус-
тановлен флаг "C".
Пароль задан с метки PASS и
имеет следующий формат: старший
байт порта, затем маска, соот-
ветствующая нажатой клавише. Ес-
ли в байте маски установлен
старший бит, то это означает ко-
нец пароля. В приведенном при-
мере паролем является строка
"ABC".
140.
ORG 40000
;Written by Max from 'CYBERAX SOFTWARE'.
PSW LD A,0
LD E,31
AND A
JR NZ,KBSC
CALL KBSC
RET Z
PSWADR LD HL,PASS
LD B,(HL)
INC HL
LD D,(HL)
INC HL
LD (PSWADR+1),HL
LD C,254
IN A,(C)
AND D
AND E
JR NZ,PSW_INI
IN A,(C)
OR D
CPL
AND E
JR NZ,PSW_INI
BIT 7,D
RET Z
CALL PSW_INI
SCF
RET
KBSC XOR A
IN A,(254)
CPL
AND E
LD (PSW+1),A
RET
PSW_INI LD HL,PASS
LD (PSWADR+1),HL
XOR A
LD (PSW+1),A
RET
PASS DEFB #FD,1,#7F,16,#FE,8+128
2
Такую программу можно внед-
рить, скажем, в код игры и ис-
пользовать факт набора пароля
для установки/снятия бессмертия
в любой момент игры.
Подходящим местом для внедре-
ния является процедура опроса
клавиш в игре, либо подпрограм-
ма обслуживания IM 2.
* * *