Deja Vu
#0A
30 сентября 2000 |
|
Программирование - процедура определения наличия диска в дисководе.
__________________________________________ (C) SKL-KEEPER __________________________________________ Начиная с Jemmini commander'а (как же давно это было!), в очень многих boot'ах и коммандерах стала применяться процедура определения наличия диска в дисководе. Да ведь как удобно-то! В былые времена у ме- ня были случаи, когда по собст- венной невнимательности или за- парке гробил диски и программы, а все потому, что не удосужился при смене диска перечитать ката- лог:-( Помню, с каким восторгом воспринял я появление в своей коллекции Perfect Com- mander'а V.1.53 и какое удовольствие полу- чал от такой рутинной работы, как копиро- вание на одном дисководе: знай себе, меняй диски,программа сама за тебя все остальное сделает! Все было прекрасно, пока я не обзавелся "Scorpion'ом ZS-256 TURBO" с ПрофПЗУ и не поставил на него трехдюймовый дисковод, который, вскоре, стал для меня основным. Да оно и понятно: пятидюймовых дискет сей- час уже не сыщешь, жизнь заставила перехо- дить на "трехдюймовки". И вот тут начались неприятности. Оказы- вается, то,что прекрасно работает на флоп- поводе 5,25", плохо или совсем не работает на 3,5". Как известно, в Скорпионах с Проф ПЗУ при включении компьютера в сеть по умолчанию устанавливается режим turbo. А в этом режиме на трехдюймовых дисководах в подавляющем большинстве boot'ов и комман- деров наличие диска не определяется!!!:-( Тут есть еще один нюанс: защищен ли диск от записи. Если защищен, большинство программ или, вообще, не реагируют на сме- ну диска, или, что еще хуже, "дергают", т. е. на долю секунды появляется изображение заставки или панели, затем пропадает, дис- ковод опять читает, и все повторяется сно- ва. Обидно, что во многих замечательных bo- ot'ах и коммандерах процедура определения наличия диска в дисководе работает некор- ректно! Даже в моем любимом "командире" REAL COMMANDER v1.8, самом безглючном и удобном, на мой взгляд! Хотя я не совсем прав в данном случае: наличие диска в этой программе определяется, но со второго ра- за, т.е. вставил диск, вынул, опять вста- вил, тогда только срабатывает... Я занимался разработкой удобного сис- темного boot'а, и очень мне хотелось сде- лать в нем еще и автоопределение наличия диска. Т.к. я кодер пока начинающий,доста- точного опыта у меня нет, решил попытаться "вытащить" эту процедуру из какой-либо программы,где она хорошо работает. Идеаль- но, на мой взгляд, наличие диска определя- ется в Best Viewer'е И.Рощина. Несколько часов потратил на "копание" в программе, но так и не смог ее оттуда достать:-( Вни- мательно почитал статью И.Рощина в "ZX-Rе- вю" N:5-6 за 1997 год с названием "TR-DOS. Как не допустить ошибки", попробовал вос- пользоваться опубликованной там процедурой и опять "облом": на трехдюймовом дисководе в режиме turbo наличие диска не определя- ется. Но ведь в своем Best Viewer'е он применил ту же программу, во всяком слу- чае, куски ее я там находил, когда "пере- капывал" оригинал. Утаил что-то, что ли?:) И почтового адреса его нет, что б написать ему и посоветоваться... В общем, эту затею я отложил, а взялся за boot, разработанный RED LIMITED. И хотя он тоже не совсем корректно определял наличие диска в 3-дюймовом дисководе в режиме turbo,я его немного доработал, и он стал работать нормально. Спросите, как до- работал? А почитайте мою статью в DEJA VU #09 в разделе "кодинг". Принцип тот же. И что интересно, работает!.. Итак, я написал небольшую программу для демонстрации этой процедуры. При ее запус- ке она пишет "DISK PRESENT", стоит Вам вы- тащить диск из флопповода, он начинает вращаться, и появляется надпись "INSERT DISK FOR REREADING". Нажатие ENTER приве- дет к выходу из программы, поэтому можете запускать ее прямо из ассемблера. Но не- достаток у этой процедуры все же есть, а именно тот самый нюанс, о котором я напи- сал выше:-( Но, тем не менее, программа работоспособна, и я рискну предложить ее Вам для использования в своих boot'ах и commander'ах. Я думаю, если уж Вы делаете такие вещи, Вам не составит труда из пред- ложенной демонстрационной программы выта- щить то, что Вам нужно? Надеюсь, ребята из RED LIMITED не будут против того, что я решил предать огласке и всеобщему вниманию их процедуру... В любом случае, я буду рад письму от них, на кото- рое отвечу непременно. Мой адрес можно найти в разделе "Реклама" этого журнала. Комментарии в тексте программы мини- мальны, т.к. я не слишком хорошо в них ра- зобрался,что б комментировать, что для че- го... Итак: ;Процедура определения наличия диска ;в дисководе из boot'а RED LIMITED, ;вытащенная by SKL-KEEPER aka Колесников ;Сергей в декабре 1999 года. ORG 30000 LD HL,#4000 ;Очистка экрана LD DE,#4001 LD BC,#1800 LD (HL),L LDIR LD A,#05 ;BORDER 5 OUT (#FE),A LD (HL),#28 LD BC,#02FF LDIR LD A,2 CALL #1601 LD DE,TXT_1 ;Печать надписи LD BC,26 ;DISK PRESENT CALL #203C LD DE,#A500 LD HL,#4000 LD BC,#1B00 LDIR LAB_1 CALL LAB11 LAB_2 EI LAB_3 RES 5,(IY+#01) LAB_4 CALL LAB16 CP #00 JP NZ,LAB_1 LD A,(#C900) AND A JR Z,LAB_2 HALT BIT 5,(IY+#01) JR Z,LAB_4 LD A,(IY+#CE) CP #0D ;Это ENTER? RET Z ;если да,выход. JR LAB_3 LAB_5 LD DE,#1E75 LD A,#3F LD I,A IM 1 LAB_6 PUSH DE LAB_7 NOP NOP NOP JP #3D2F LAB_8 LD IX,#2FC1 LAB_9 PUSH IX JR LAB_7 LAB10 LD A,#08 LD C,#1F LD DE,#2A53 JR LAB_6 LAB11 LD HL,#0000 LD (#C900),HL LD (#C901),HL LD (#5CF4),HL LD HL,#C9F1 LD (#5CC2),HL CALL LAB15 LAB12 LD A,#00 AND A JR NZ,LAB13 LD A,2 CALL #1601 ;Печать надписи LD DE,TXT_2 ;INSERT DISK FOR LD BC,32 ;REREADING. CALL #203C LAB13 LD HL,#C000 LD B,#09 CALL LAB_5 CALL LAB15 CALL LAB16 LAB14 LD A,C LD (#C900),A RET LAB15 LD HL,#BFFF LD DE,#5AFF LD BC,#1B00 LDDR RET LAB16 LD A,#C3 LD (#5CC2),A LD HL,LAB17 LD (#5CC3),HL CALL LAB_8 CALL LAB10 LD (LAB17+1),SP LD DE,#0000 LD IX,#2740 CALL LAB_9 LAB17 LD SP,#0000 LD DE,#1FF3 CALL LAB_6 LD DE,#1FEB CALL LAB_6 CALL LAB_8 LD A,#C9 LD (#5CC2),A LD A,(#5CCD) AND #40 RET TXT_1 DEFB 16,0,17,5,22,0,4 DEFB " DISK PRESENT" TXT_2 DEFB 22,0,4,16,0,17,5 DEFB "INSERT DISK FOR" DEFB " REREADING" ------------------------------------------ И в заключении: --------------- Информация для тех, у кого есть принтер и кто пользуется IS-DOS'овским LOTUS'ом для печати текстов художественными шрифта- ми. Если Вас не устраивает начертание ка- ких-то отдельных букв шрифта,отгрузите его на TR-DOS'овский диск и, с помощью какого- -нибудь редактора спрайтов, исправьте нуж- ные Вам буквы. Исправленный фонт перепиши- те опять на IS-DOS'овский диск и печатайте на здоровье! Лично я пользуюсь FILES DUMP EDITOR V1.3,который когда-то распространял Инфорком. В принципе, никто не мешает Вам создавать и свои собственные шрифты. Поле для деятельности обширное! Попробуйте и не пожалеете! ------------------------------------------
Другие статьи номера:
Похожие статьи:
В этот день... 9 октября