В архиве находится весь проэкт+ прога котору использую для подключения к COM порту. Управление(команды передаются в ASCII кодировке): 0 - установить размер сектора; 0- 8 байт 1- 16 байт 2- 32 байт Пример: 00 - размер сектора 8 байт. 1 - Форматирование диска. Пашет корректно только в Протеусе(( 2 - Установить головку в заданный сектор. CHS адресация: 0..3 - номер головки 0..3 - номер цилиндра 0..(63|32|16) -сектор. Нулевой использовать нельзя Пример: 20312 - 0я головка,3й цилиндр,12й сектор. LBA адресация: 0000 - номер сектора Пример: 0100 - установить голку на 100й сектор 3 - запись Пример: 3qwertyui 4 - чтение i - Информация о диске I - Информация о диске, сокращенная с - смена типа адресации. 0 - CHS 1 - LBA Пример: с1 - тип адресации LBA d - отладочная функция. Выводит заданное число секторов. 0000 - номер сектора 0000 - количество секторов для вывода Пример: d09990010 - Вывести 10ть секторов начиная с 999-го. Пашет не корректно. a - отладочная функция. Выводит текущее смещение на сектор. h - справка
Старайся применять макросы. С ними чуть-чуть легче код писать, да и разобраться в проге становится легче. Втот пример. Гораздо компактней исходник выглядит. Код (Text): ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< mSwich MACRO Key, Addr cjne a,#Key,$+9 lcall Addr ljmp EndSwich ENDM ; ------------------------------------------------------------------------- mEndSwich MACRO EndSwich equ $ ENDM ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MainLoop: JNB RI, $ ;Подождать окончания приёма байта по последовательному порту MOV A, SBUF ;и скопировать его в аккумулятор clr RI mSwich '0',CreateDisk ;Изменение диска mSwich '1',FormatDisk ;Форматирование диска mSwich '2',SetSector ;установка головки mSwich '3',WriteSector ;запись mSwich '4',ReadSector ;чтение mSwich 'i',DiskInfo ;Информация о диске (человек) mSwich 'I',DiskInfoComp ;Информация о диске (компьютер) mSwich 'h',HDisk ;Справка mSwich 'c',AddressingTheDisc ;Тип адресации mSwich 'd',Debug ;отладка mSwich 'a',DebugInfo ;вывести смещение mEndSwich ; A0: ; CJNE A, #30h,A1 ;0 размер сектора ; jmp CDisk Совет: Когда вылаживаешь проект, для уменьшения объема, можно смело очистить паку ВАК(храниться откат для каждого файла).
Спасибо. Это мой первый проэкт с mcs51. Восновном до этого работал с AVR. Поэтому со всеми тонкостями и макросами не знаком. Сделал как мог. ЗЫ: комманда d00001007 не выводит все сектора, так как не учитывает нулевые секторы. Реальное количество секторов на диске, при размере сектора в 8-м байт, это 4*4*64=1024.