Следующая подпрограмма, кото- рую я рассмотрю в этой статье- это корректная обработка диско- вых ошибок. Данная процедура довольно проста и особых комментариев не требует. Обращаться к ней нужно также, как и к #3D13, единствен- ное, что тут нужно сказать - это то, что она изменяет значения системных переменных #5C3D/#5C3E (23613/23614), 23746(#5CC2), ве- ктор прерываний I, регистр IY, и устанавливает режим прерываний IM 1, так что при необходимости Вы можете перед вызовом проце- дуры эти значения запоминать и восстанавливать их на выходе. Отличие данной процедуры от #3D13 заключается в том, что на выходе из нее при возникновении ошибки в аккамулятор будет запи- сана единица (как правило, для чтения это ошибка DISK ERROR, а для записи READ ONLY), если же обращение к диску прошло успеш- но, в аккамуляторе будет 0. Если в дисковод не будет вставлена дискета, то никакого выхода из процедуры не произой- дет, пока дисковод не дождется хотя бы какого-нибудь диска. А теперь можете ознакомиться с описанной выше процедурой: DISK DI LD (RHL+1),HL LD (RDE+1),DE LD (RBC+1),BC LD (RGA+1),A IM 1 LD A,#3F LD I,A LD (ZABA+1),SP MOLOKO LD HL,ZABA PUSH HL LD (23613),SP LD A,195 LD HL,REAL_SF LD (23746),A LD (23747),HL LD HL,0 LD (23823),HL LD IY,23610 LD (IY+0),255 RHL LD HL,0 RDE LD DE,0 RBC LD BC,0 RGA LD A,0 CALL #3D13 XOR A LER2 DI LD SP,(ZABA+1) RET ZABA LD SP,0 JR MOLOKO REAL_SF EX (SP),HL PUSH HL PUSH DE PUSH AF EX DE,HL OR A LD HL,3435 SBC HL,DE JR Z,E1 OR A LD HL,8020 SBC HL,DE JR Z,E2 POP AF POP DE POP HL EX (SP),HL RET E1 LD A,1 JR LER2 E2 POP AF POP DE POP HL EX (SP),HL INC SP INC SP SCF RET * * * P.S. Вот, такие вот, дела.