Из журнала 'Чёрная Ворона 7' Украина, г.Дмитров/Харьков, 01.09.2001 Индикация работы с диском (C)Pantera _________________________________________ Опять я решил показать народу мои очередные фантазии, на тему кодинга. Вот как-то раз, причем не один, я увидел, что некоторые умники в своих творениях используют так называемые индикаторы ра- боты с диском. Вы скажите это очень эф- фектно.Только представте,вы в своей новой ресторилке дисков, с доселе никому не из- вестным алгоритмом, используете индика- цию работы диска. Что размечтались ??? Ха-ха,то то же. Вы наверное сейчас прыга- ете и судорожно верищите: где ее взять, где ее взять ???. Ну что же, я помогу вам с этим... Далее идет алгоритм индикации работы с диском. Конечно это просто пример,но если у вас есть желание, то его не трудно бу- дет переделать под любую программу.Для любителей халявы, сразу хочу отметить: эта программа индицирует в окне,только загрузку 30 секторов, т.к. только при таком количестве вы увидите движение шка- лы. Если количество секторов превысит это значение, то шкала дойдет до конца окна и остановится, а флоповод будет грузить остаток секторов.Кто умный,тот додумается как сделать полную индикацию. ТЕПЕРЬ ГЛАВНЫЙ МОМЕНТ !!! Эта процедура написана под оболочку кото- рую Max поместил в приложение второго но- мера Черной Вороны. Если у вас его нет,то можете скачать второй номер с zx.da.ru. Теперь второй момент,но не главный: Работа с диском идет на прямую с ВГ93. Если сделать работу через CALL 15635,то операции могут сильно затормозится,учтите это при написании своих программ. НУ А ТЕПЕРЬ КОНКУРС !!! Тем читателям которые пришлют свой вари- ант индикации работы с диском, первыми получат следующий номер Черной Вороны. Но есть условия: 1.Процедура должна быть подвязана с обо- лочкой из второго номера журнала. 2.Конечно такое нельзя контролировать,но все таки не присылайте крэки из других программ. Единственное, что не запрещается, так это брать за основу мой пример. Просто его настолько легко переделать для индикации всего диска, что аж руки сами тянутся к клаве, по крайней мере я так думаю :-). Ну, надеюсь народные таланты завалят меня своими кодами :-). Листинг программы: ;------ Пример окна --------------------- R_DEMO DEFB 3,8,25,4,114,1,0,0,0,#90 DEFW R_DEMO,S_UPR,J_UPR DEFB #1B,"Процесс работы",0 T_DEMO DEFB 13,0 T_DEMO1 DEFB "?",0 ;Любой символ S_UPR DEFB 3,8,1,1, #FF J_UPR DEFW PRN ;-------ПЕЧАТЬ--------------------------- PRN LD HL,T_DEMO ;Берем код #0D CALL OS ;для первода DEFB _PRI_C ;строки,шкала JR M1 ;в середине ;-------ТЕЛО ПРОЦЕДУРЫ------------------- R_SECT DEFB 30 ;Истинное зна- ;чение кол-ва ;загружаемых ;секторов ADRES DEFW #C000 ;Адрес загрузки M1 LD HL,(ADRES) PUSH HL ;Адрес загрузки TRACK LD D,2 ;Трэк SECT LD E,#0F ;Сектор S_SCT LD B,1 ;Кол. секторов CALL OS ;должно быть 1 DEFB _LOADER JR NZ,_ERROR CALL COUNT ;На счетчик POP HL ;Адрес загрузки LD (ADRES),HL;Ложим назад EI RET ;-------ОПЕРАЦИИ РАСЧЕТА----------------- COUNT LD A,(R_SECT) ;Сколько раз PUSH AF ;считать CALL SECTOR1 CALL PRINTD CALL ADR_COR POP AF DEC A LD (R_SECT),A ;Остаток JR NZ,M1 ;Догружаем RET ;Операция О.К. ;-------РАСЧЕТ СЕКТОРОВ------------------ SECTOR1 LD A,(SECT+1) ;Какой сектор CP #0F ;15-й?,тогда JR Z,TRACK1 ;новый трэк INC A ;если нет,то LD (SECT+1),A ;новый сектор RET ;-------РАСЧЕТ ТРЭКА--------------------- TRACK1 LD A,(TRACK+1);Номер трэка INC A ;на 1 больше LD (TRACK+1),A XOR A ;Опять нулевой LD (SECT+1),A ;сектор RET ;-------ПОДПРОГРАММА ПЕЧАТИ-------------- PRINTD LD HL,T_DEMO1 ;Печатаем про- CALL OS ;цесс работы, DEFB _PRI_C ;в виде шкалы RET ;-------КОРРЕКТИРОВКА АДРЕСА------------ ADR_COR LD HL,(ADRES) ;Куда грузить LD DE,#0100 ;Размер сект. ADD HL,DE ;Адрес+сектор LD (ADRES),HL ;Новый адрес RET ;загрузки ;-------ВЫХОД ПО ОШИБКЕ------------------ _ERROR POP HL ;Здесь адрес EI ;где останов RET