В заключение - еще пара про- цедур. Первая процедура предназначе- на для перевода числа в десятич- ный вид, пригодный для печати. На входе: в регистре 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. * * *