По городу автора. Vinxru или Alemorf или Алексей Морозов тоже из Питера. Так что вы оба - земляки.
По городу автора. Vinxru или Alemorf или Алексей Морозов тоже из Питера. Так что вы оба - земляки.
Размер сектора на SD -- 512 байт. Это кластеры в файловой системе могут быть большими.
Разбивка диска стандартная: 162 дорожки с двух сторон, 5 секторов, по 1024 байта каждый.
Опознать диск можно по стрингу "Dos_MX V3.6", который находится по смещению 5, в нулевом секторе нулевой дорожки.
Файловая структура дисков весьма необычная: файл позиционируются с точностью до байта. Дело в том,что файловая система основывается на структуре ROMDISK'а для этого компьютера.
Формат дескриптора файла в каталоге:
3 байта - признак заголовка (#d3 #d3 #d3)
8 байт - имя файла
1 байт - пробел (#20)
3 байта - раcширение файла
1 байт - признак сохранённости/несохранённости файла (#8c/#8b)
3 байта - дата создания файла
1 байт - номер 1-го сектора дорожки (#00...#0a)
1 байт - номер 1-й дорожки (#00...#4f)
2 байта - количество секторов (объём файла в кБайтах)
1 байт - признак файла/каталога (#00/#ff)
2 байта - начальный адрес
2 байта - конечный адрес
2 байта - контрольная сумма
2 байта - назначение не ясно
Назначение остальных байтов неизвестно, требуется дополнительная информация.
Не могу найти документы о структуре FAT. Хотя когда-то написал программу для просмотре занятости секторов на дискете. Вот исходник и запускаемый файл.
Последний раз редактировалось fifan; 09.02.2022 в 17:01.
Понятно. Такие дискеты нет смысла поддерживать в рамках MXOS2 (или как её назвать?) Раз в ней будут FAT из коробки, значит и дискеты и SD карты должны быть в FAT (которая стандартная, Microsoft). Старые образы дискет можно распаковать и пересохранить в fat.
Значит мне надо сделать поддержку секторов любого размера (сейчас 256 байт) и кластеров. Потом - перейти на полноценную структуру FAT, с загрузочным сектором и общепринятыми кодами пустой записи каталога и т.п. Накопителей у меня пока два виде - рам диск и флеш диск. Драйверы дисковода и SD карты еще предстоит написать.
Пресобрал редактор E.COM для работы на другом адресе. Не так просто это оказалось, самомодификация кода и таблица с кодами клавиш и адресами п/п и обработки - такое дизассемблер сам не отлавливает.
В процессе стало ясно назначение клавиш. Получилась инструкция.
Инструкция к редактору E.COM
F1 - переключение режима Insert/Overwrite
F2 - курсор на страницу вверх (PageUp)
F3 - курсор на страницу вниз (PageDn)
F4 - открыть файл
F5 - сохранить файл
F6 - открыть файл и вставить его в конец документа
F7 - поиск текста в строке курсора и ниже (перематывает документ на строку с текстом)
F8 - отмена изменений в строке
Стрелки - управление курсором. Можно его разместить где угодно, в т.ч. за концом строки и за концом документа.
Del - удалить символ, на котором курсор
Enter - вставить строку ниже курсора (не разбивает текущую строку)
Tab - курсор вправо на следующий ближайший столбец шириной 4 (8) знакомест (не совсем понятно, шаг постоянно меняется, может баг?), не вставляет символ tab, а просто передвигает курсор
Home - курсор в начало строки
End (ПС) - курсор в конец строки
СТР - выход (без сохранения!)
Esc-Home - курсор в начало первой страницы
Esc-End - курсор в начало последней страницы
Esc-S - разбить строку в положении курсора на две
Esc-J - объединить текущую строку (на которой курсор) и следующую
Esc-L - выделить текущую строку; потом можно переместить курсор на другую строку и снова Esc-L - выделить все строки от первой выделенной до текущей
Esc-U - снять выделение строк
Esc-C - вставить выделенные строки в строку ниже текущей
Esc-M - переместить выделенные строки в строку ниже текущей
Esc-D - удалить выделенные строки
Esc-N - новый файл (очистить буфер), выводится запрос для подтверждения
Esc-O - сохранить файл на магнитофон
Esc-I - загрузить файл с магнитофона
Esc-V - загрузить файл с магнитофона (в другом формате?)
Esc-G - загрузить файл с магнитофона и вставить в конец документа
Редактор поддерживает запуск из командной строки с передачей имени открываемого файла в виде аргумента. Это используется в Коммандере - редактор назначен на клавишу F4. Также можно ассоциировать с ним любые типы файлов, например TXT, прописав их в NC.EXT.
Редактор хранит переменные в области памяти под экраном, ниже переменных BIOS. Это позволяет ему помнить некоторые настройки между сессиями, даже загруженный/введенный ранее текст, если ничто не попортило буфер в памяти.
У кнопки F3 есть второй обработчик, но до него управление никогда не доходит. Поменял их местами ради интереса - просто нажатие F3 выбрасывает из редактора. Если перед этим загрузить файл по F4, то стирается экран, вместе со строкой состояния.
Команды F4-F6 - работа с файлами на дисках Коммандера. В строке состояния выводится запрос имени файла. Если не вводить букву диска, имеется в виду текущий диск. При этом буфер для ввода имени файла - всего 9 символов, т.е. хватает только на имя, точку и расширение (6.3), а на букву и двоеточие уже не хватит, если имя длинное.
Кнопка СТР злая, выход из редактора сразу без сохранения и каких-либо запросов. Получается, нет простого способа просто взять и сохранить изменения: надо нажать F5, вспомнить имя редактируемого файла, сохранить. Это если редактор запускается с передачей файла через командную строку. Если запускать его отдельно и открывать файл через F4, то он запомнит имя файла и будет сразу его показывать в строке ввода команд F4-F6. Может быть, это просто недоработка.
Кнопка Tab не вставляет символ tab, а просто передвигает курсор. Вроде бы должна двигать на ближайший столбец шириной 4 (8) знакомест, но шаг постоянно меняется. Может, это баг, а может как-то хитро заточено под форматирование кода на ассемблере.
Не понятно, как переключиться на ввод русского текста (ps: понял как, HP+Рус переключает язык. В режиме КОИ-8 Рус работает как Caps Lock. А в режиме КОИ-7 Рус переключает язык. Это общий принцип в этой ОС). Редактор нормально отображает файлы в кодировке КОИ-8, но как печатать? Кстати, код символа Ъ = 0FFh используется как признак конца файла, так что нельзя, чтобы он был в тексте.
Кто в курсе, является ли этот редактор адаптацией какого-то известного? Есть ли более продвинутые редакторы, приближенные к современным по принципу работы с текстом? Или всё же стоит его доработать? Из доработок, кроме перехода на формат файла FAT (увеличить буфер имени и т.п.), хочу вывести подсказку по клавишам F1-F8 в строку состояния, и раскрасить его, для придания внешнего вида "родного" для Коммандера плагина. По Esc-последовательностям можно сделать экран хелпа, и повесить его на F1 (а Ins перевесить куда-то еще). А по F4 - запуск хекс редактора, как было в Волков Коммандере
Последний раз редактировалось SpaceEngineer; 29.04.2023 в 15:39.
Тест странно работает. Объем рам-диска из одной линейки РУ5 определил как 320 кб, а из одной линейки РУ7 - как 512 кб. Проверил "3 линейки" и завис. В эмуляторе же все четко, только некоторые линейки микросхем не закрашиваются (напр. когда 256 кб). Другие тесты правильно работают, и п/п определения объема доп. ОЗУ из рамфоса vinxru тоже.
Экранная область ОЗУ в твоем тесте не тестируется. Она просто заливается по очереди разными цветами, а тестировать байты и биты кто будет? Вообще, при битой памяти тест не будет работать даже из пзу, т.к. используется стек.
Тест-MX сделан по-другому. Первая половина теста работает только из ПЗУ по адресу 0000h, без стека и call, поэтому все подпрограммы заинлайнены, даже бип динамиком. Он сначала тестирует верхнюю половину памяти 8000h-FFDFh. Поэтому в Специалисте-МХ с более чем 32 кб ПЗУ надо ставить перемычку, которая отключает верхнюю часть ПЗУ и открывает ОЗУ выше 8000h. Вначале тест заполняет экранную память (8000h-BFFFh) паттерном 33 33 CC CC, потом 55 AA 55 AA, и читает его обратно. При этом в регистр цвета выставляется цвет символов = цвет фона, поэтому это выглядит как просто заливка экрана сплошным цветом. Потом так же тестируется память C000h-FFDFh. Если тест верхней половины ОЗУ прошел успешно, программа рисует интерфейс, копирует вторую свою половину в верхнее ОЗУ, так, чтобы задеть область непереключаемого ОЗУ, где сидит драйвер рам-диска, и прыгает на нее. Там она отключает ПЗУ и тестирует нижнюю половину ОЗУ 0000h-7FFFh, а потом и рам-диски.
Вот тут я дизассемблировал его и начал комментировать, но бросил, когда дошел до драйвера рам-диска. Оказалось, что это старая версия теста, не поддерживающая множественные страницы доп. ОЗУ.
test_mx.zip
Последний раз редактировалось SpaceEngineer; 15.02.2022 в 15:07.
Выкатил апдейт. Хорошая промежуточная точка, после которой мне придется взять перерыв.
https://github.com/UnivEngineer/Specialist-OS
Что сделано:
- FAT16 почти стандартный, имена файлов 8.3, загрузочный сектор, одна таблица FAT и корневой каталог (до 256 файлов). Папки пока ещё не поддерживаются. Отличия от стандарта - сектор = кластер = 256 байт, и по мелочам (пустая запись в каталоге обозначается FFh, а не E5h, присутствует адрес загрузки файла, и т.д.)
- Дисковый буфер в памяти превратился в кэш, сохранив первоначальный размер (1 кб). Если раньше fat и каталог грузились с накопителя целиком, то теперь в кэш грузятся произвольные секторы по мере надобности, затирая наиболее давно использовавшиеся (LRU кэш). Это позволило работать с огромными по размеру fat и каталогом (на 2 Мб флеш-диске они занимают 16 + 8 кб), сохранив приличную производительность, и не расходуя память.
- Рам-диск и флеш-диск теперь сплошные, до 256 файлов и до 16 Мб размером.
- Добавлен драйвер стандартного 64 кб ROM-диска, подключаемого через ВВ55, работает в эмуляторе emu. Эмулятор не поддерживает 2 Мб флеш-диск HardwareMan'а, но с этим драйвером можно поиграться с "виртуальным" большим ром-диском (если передать ему файл с первыми 64 кб образа ром-диска, где находятся fat и каталог, то можно в нортоне погулять по нему. Файлы загружать, естественно, не получится, ну кроме тех, что целиком поместились в эти 64 кб).
- В нортоне реализован скроллинг, чтобы можно было добраться до любого файла. Если каталог большой (на флеш-диске у меня 133 файла), скролинг подтормаживает, потому что каталог каждый раз целиком читается с накопителя. Буфер со списком файлов, отображаемых на панели (36 шт), и так килобайт занимает, тут особо не разгуляешься. Эта проблема решится с реализацией поддержки папок - не будет в одном каталоге такой огромной россыпи файлов.
- На инфопанели выводится информация об объеме памяти и диска, свободном месте на нём, количестве файлов, и метка тома - всё, как в "настоящем" Нортон коммандере.
- В системе включен шрифт КОИ-8 по умолчанию. Имена файлов можно писать в любом регистре (по-русски тоже - но я не проверял). Сами файловые операции к регистру нечувствительны.
- Поменялось распределение памяти. Стандартные программы (нортон, редактор и др.) переехали на E800h, что, кстати, совместимо с Ramfos. Редактор E.COM адаптирован и слегка раскрашен. Для драйверов осталось 2-2.5 кб памяти. Кто бы написал драйвер дисковода и SD карты? Нужны, как и раньше, только три функции - запись сектора, чтение сектора, получение размера.
- - - Updated - - -
https://disk.yandex.ru/i/rnapNP6z21CtCw
https://disk.yandex.ru/i/OcPtdCbA8UNNow
https://disk.yandex.ru/i/HDox5vRNRQpR4Q
Кстати, надписи КАПСОМ смотрелись как-то аккуратнее. Разрешение шрифта маловато что ли для строчных букв?
Последний раз редактировалось SpaceEngineer; 16.02.2022 в 20:29.
Строка помощи почему-то с нестандартной раскраской. Вызывает диссонанс.
Последний раз редактировалось CityAceE; 16.02.2022 в 18:27.
С уважением, Станислав.
В палитре Специалиста нет такого болотного зеленого цвета. Можете сами поэкспериментировать с цветами, они прописаны в начале файла NC/NC.asm.
Кстати, что лучше писать в строке объема диска - физический или доступный? Загрузочный сектор, fat и каталог занимают место, поэтому про пустой рам диск система пишет "512 kb total, 503 kb free, 0 files use 9 kb".
Последний раз редактировалось SpaceEngineer; 16.02.2022 в 20:29.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)