(C) REAL SOFTWARE/NHG'1997,г.Брест
(C) Музыка: Andrew Fer/PhF
Обработка дисковых ошибок TR-DOS
Если в вашей программе не требуется
делать подробную обработку ошибок с выва-
ливающемся меню с выбором RIA , но вы хо-
тите избежать очистки экрана и появления
подлой надписи TR-DOS "disk error", то в
этом вам поможет разработанная мною ко-
роткая процедурка, которая блокирует все
попытки TR-DOS напечатать сообщение об
ошибке, она, в этом случае, без всяких
последствий вернет управление программе с
кодом ошибки в регистре A (копия систем-
ной переменной #5D0F(23823)). Если же вам
нужно обрабатывать RIA ,то на данную про-
цедурку без особых проблем вы можете на-
весить драйвер обработки ошибок,например,
такой , как опубликован в газете ECHO 3
(автор VfNG ). На случай, если у вас не
найдется этой газетки, я привожу этот
драйвер, сразу подключенный к моей прог-
раммке, мной в него было внесено только
определение типа ошибки DISK ERROR или
READ ONLY .
Вместо #3D13 вызываете TR-DOS oбра-
ботка ошибок без меню RIA :
TRDOS PUSH HL
LD HL,(23613) ; Сохр. ERR_SP
LD (ERR+1),HL
LD HL,ERR
EX (SP),HL
LD (23613),SP
EX AF,AF'
XOR A
LD (23823),A
LD (23824),A
LD (23570),A
EX AF,AF'
JP 15635
ERR LD HL,0
LD (23613),HL ; восст. ERR_SP
LD A,6
LD (23570),A
LD A,(23823)
AND A
TRD1 RET Z
PUSH AF
LD IX,W1 ; окно ERROR !
CALL OPWIN ; открыть окно
POP AF
RET
Примечание: если вы используете бей-
сиковские каналы для печати символов или
для каких либо других целей, то вставьте
в процедуру обработки ошибок перед откры-
тием окна с сообщением об ошибке инициа-
лизацию нужного канала. Например: LD A,2:
CALL 5633 .
Кстати , один из способов быстрого
взлома программ, это открывание защелки
дисковода во время загрузки, и сохранение
по MAGIC 'у или вход в монитор, а дальше
просто нужно найти LOADER .Так что, если
вы хотите нормально защитить программу,
то подвешивайте ту или иную процедуру об-
работки ошибок.
С обработкой RIA:
TRDOS PUSH HL
LD HL,(23613) ; Сохр. ERR_SP
LD (ERR+1),HL
LD HL,DDRIV ; Уст. драйв.
LD (#5CC3),HL
LD HL,ERR
EX (SP),HL
LD (23613),SP
EX AF,AF'
LD A,#C3
LD (#5CC2),A
XOR A
LD (23823),A
LD (23824),A
EX AF,AF'
JP 15635
ERR LD HL,0
LD (23613),HL ; восст. ERR_SP
LD A,#C9 ; восст. RET
LD (#5CC2),A
LD A,(23823)
AND A
TRD1 RET Z
CP 6
PUSH AF
LD IX,W1 ; окно NO DISK
JR Z,NODISK
LD IX,W2 ;окно BREAK
NODISK CALL OPWIN ; открыть окно
POP AF
RET
Обработка RIA
DDRIV EX (SP),HL
PUSH AF
LD A,H
CP 13
JR Z,ERROR
POP AF
EX (SP),HL
RET
ERROR ; В системной переменной
; #5CF4 (23796) текущие дор/сект
LD IX,W3 ; таблица окна
CALL OPWIN ; открыть окно
............ ; напечатать
............ ; текущую дор/сект
POP HL
POP HL
LD A,L
POP HL
POP HL
POP HL
CP #D8
LD HL,TX23 ; DISK ERROR
JR NZ,ERROR0
LD HL,TX24 ; READ ONLY
ERROR0 CALL WRITE ; Печать
XOR A
LD (23560),A
LD IX,GORM2 ; таблица меню
CALL GRMNU ; выбор пункта
LD A,(IX+2) ; номер пункта
DEC A
LD C,"R"
JR Z,ERROR1
DEC A
LD C,"A"
JR Z,ERROR1
LD C,"I"
ERROR1 LD A,C
LD HL,#3F7E
EX (SP),HL
JP #3D2F