Надо воспользоваться опытом iBM PC: настройки в BIOS - 1-е загрузочное устройство, 2-е загрузочное устройство... :)Цитата:
Сообщение от LW
Вид для печати
Надо воспользоваться опытом iBM PC: настройки в BIOS - 1-е загрузочное устройство, 2-е загрузочное устройство... :)Цитата:
Сообщение от LW
А если настройки сохранять на текущий основной в данный момент винт, но с меткой времени, при загрузки грузить с обоих винтов настройки, которые свежее те и использовать.
Так себе идея, учитывая, что микросхема CMOS (DALLAS) для работы ProfROM + SMUC не является необходимым условием.
Сепециально вчера еще раз проверил работу функции 8 следующей подпрграммой на своих реальных Скорпионах.
RAMTOP=32767. Запускалось из BASIC128: print usr 32768.Код:ORG 32768
LD A,0
LD C,1
RST 8
DB #81
LD HL,BUF
LD C,9
RST 8
DB #81
LD C,8
RST 8
DB #81
RET
BUF DB 0
На фирменном компьютере с Монитором V2.95 подпрограмма обращается к дисководу и нормально завершает свою работу.
На Scorpion 1024 Turbo+ с Монитором V4.01 подпрограмма зависает на обращении к дисководу, на экране появляется артефакт в виде синего квадрата. Нажатие на сброс приводит к полной инициализации Теневого Монитора. Тоже самое было и на фирменном Скорпионе, когда в нем было установлено фирменное ПрофПЗУ V4.01.
Любопытно. На эмуле отрабатывает без проблем.
А с функцией 7 проблем не было? Попробуйте на реале вместо 8й вызвать 7ю.
А при каких условиях 8я функция зависает? Дисковод пустой нет? В нем реальная дискета или смонтированный образ?
В дисководе была реальная дискета, а все образы отмонтированы.
А с примонтированным образом есть зависание? Хочется понять где там сидит глюк, там процедура-то два с половиной байта...
Может функция 8 не работает из-за "соседней" функции? Например, функцию 9 MOA многократно пределывал: сначала она задавала буфер для FDD, потом выводила номер версии, а в конце еще стала задавать буфер для HDD.
да в 9й вообще полтора байта :)
9я функция
Код:x0922 ld (xFFE7),hl
ld (xFFF0),hl
ld de,#6161
ld bc,#0705
ret
[свернуть]
8я функция
Код:x08D4 call x084F ;R8DOS #07(7)
call x0344 ;hl адрес кода, определяющего тип дискеты в текущем дисководе
ld a,(hl)
and %01000011
dec a
ld a,#10
jp nz,x04D1 ;ошибка #10. дискета не соответствует формату tr-dos
ld de,#0008
ld b,#01
ld hl,(xFFE7) ;адрес рабочего буфера для функции
ld a,h
or l
ld a,#12
jp z,x04D1 ;ошибка #12. не открыт рабочий буфер
call x0553 ;R8DOS #05(5) чтение служебного сектора
ld ix,(xFFE7) ;адрес рабочего буфера для функции
ld de,#00E1
add ix,de ;начало служебной информации
ld a,#10
cp (ix+#06) ;идентификационный код TR-DOS (#10)
jp nz,x04D1 ;ошибка #10. дискета не соответствует формату tr-dos
call x0349 ;hl адрес кода, определяющего тип текущего дисковода
ld e,(hl)
call x0344 ;hl адрес кода, определяющего тип дискеты в текущем дисководе
inc a
res 7,(hl) ;односторонняя дискета
bit 2,(ix+#02) ;тип дискеты
jr z,x0918 ;односторонняя
set 7,(hl) ;двухсторонняя
x0918 res 5,(hl) ;40 дорожек на диске
bit 0,(ix+#02) ;кол-во дорожек
ret nz ;40 дорожек
set 5,(hl) ;80 дорожек
ret
[свернуть]
7я вы говорите работает без нареканий, проблем с 5й тоже нет.
А в 8й чему тут ломаться.
Но, главное, буфер-то она правильно задает? Или для FDD буфер не нужен? Тогда куда грузится девятый сектор дискеты по которому функция 8 пытается произвести настройку?
Я продолжил эксперименты с этой подпрограммой на Scorpion 1024 Turbo+ с ПрофПЗУ V4.01.
Если диска в дисководе (это был дисковод A:) нет, то нормальное завершение. Если к A: примонтирован образ, то тоже нормальное завершение. Таким образом, зависание происходит только в одном случае: если в дисководе есть дискета.
Теперь у меня подозрение на процедуры Монитора начинающие и завершающие работу функций.Цитата:
Сообщение от LW
Функции 5 и 6 я применял. Все работает как надо и с FDD, и с HDD.
Вот моя адаптация игры Krakout 3: там можно сохранять таблицу рекордов на любой диск. Если запущено на Скорпионе, то используются функции 5 и 6.
Grand, В общем разобрался в чём ошибка. Косвенно правы и вы и я. Ошибка таки сидит в функциях 5/6. В переменную, в которой сохраняется размер сектора в байтах, для дальнейшей переброски из буфера в память пользователя, во время позиционирования головки на заданную дорожку, читается 6 байт заголовка сектора диска, и вот как раз последние два байта заголовка попадают на эту переменную. В итоге там может оказаться любое значение вместо стандартной длины 256 байт, и как результат после чтения сектора, во время переброски из буфера, может скопироваться куда больший объем данных, и они затирают и 8ю страницу, и может попасть в том числе и на экран.
Пофиксим.
Попутно нашел в 8й функции еще одну ошибку: нельзя что бы буфер (вернее конец его начиная от +#E1) попадал на память выше #C000, фатального конечно ничего не случится, но диск будет определен неверно.
добавлена возможность монтировать .trd файлы с FAT32 разделов (работает чтение/запись)
Вложение 78171
В эмуле на примонтированный диск маленький бейсик файл записался. А снимок экрана из монитора не пишется. Или зависнет, или ошибка ATA cmd 62.
1. Получается, если бы сразу была сделана поддержка монтирования с ФАТ, не надо бы было придумывать наборы виртуальных дисков и систему MFS тоже?
2. Как прикрутить такой ROM теперь для GMX?
3. Заодно бы поправить глюк с мигающими экранами 5-7 при записи на виртуальную дискету. На реальной дискете не мигает. Вот здесь я записал начиная с 4-50 примерно.
https://youtu.be/Ki1a8TiT-6U
И корректное определение что включен расширенный экран GMX тоже бы надо.
Создал образ - 4Гб, половину разметил на FAT32, половина - не размечена.
записал несколько trd образов.
подключил к Unreal. при попытке смонтировать дискету через монитор, пишет - Invalid Partition.
разметил в мониторе оставшийся раздел (на самом деле 2 раздела - большой на 2 гб. и маленький на 3 мб).
после этого заработало монтирование с FA32.
еще момент - смонтировал образ, выхожу из монитора через 0: Continue program - Scropion сбрасывается в Basic 48 (ну или usr 0) происходит.
делаем сброс - все работает.
CHS0=2048/16/63
LBA0=2064384
Образ пустой.
https://i.ibb.co/1n02M2G/5.png
До появления надписи "hard disk r/w error 56215" висит примерно 40 секунд, ошибок в консоли нет.
мне нужно было старые ide винты, найденые у родителей на антресолях, проверить на предмет чо там на них. перепробовал несколько таких адаптеров - с отрицательным результатом.
пришлось pci express плату брать.
- - - Добавлено - - -
комментарий про танцы был скорее о том, что надо определенным образом создавать разделы - первым должен быть MFS, потом уже FAT32 и все-остальное.
но пока экспериментировал с новой версией ПЗУ оказалось, что пофиг в каком порядке разделы идут. видимо LW это поправил.
Вопрос: что будет, если примонтировать trd-файл с FAT32 на диск А, потом удалить файл и попробовать что-нибудь записать или считать с диска А?
После перезагрузки образ отмонтиротируется и всё.
До перезагрузки, могут случится непоправимые вещи вплоть до порчи FAT таблицы.
Поправим это.
нет я это не правил. так и было раньше.
- - - Добавлено - - -
Не могу повторить.
Можете скинуть эмуль с этим образом?
Возник вопрос связанный с ошибкой описанной в этом посте. В анриле 0.39 она есть в 0.38 нет. Хотелось бы понять какя версия неправильно эмулит работу с винтом.
Нужна помощь. У кого есть возможность, надо на реале со SMUC'ом и подключенным винчестером (только master, без slave) запустить программку. И потом написать какое число она выдает.
Вложение 78175
LW, на стандартном профроме или на модифицированном запускать?
marinovsoft, версия ПЗУ не имеет значения
Выдает 0
А вот интересно, разделы (или раздел) на "жёстких" (на "жёстком") в какой операционной системе создавали? DOS, MS-DOS или в Windows?
0
- - - Добавлено - - -
у меня тоже на реале временами моргает экран при записи на образ на HDD, выглядит так как будто во время работы с подпрограммами из проф пзу, переключается экран.
Наверно, но кто его знает!? Если, в свое время, Зонов делал поддержку "жёсткого" диска в теневом мониторе ZS-256, то по всей вероятности, он экспериментировал на уровне DOS и MS-DOS, и маловероятно, что на уровне Windows (тем более не XP, 7-ки и последующих версий). Возможно, это как-то и влияет на создание разделов. Собственно говоря, стоит проверить эту версию. Может быть стоит, даже, Зонова спросить или тех, кто ему помогал в создании ПЗУ для Scorpion-а.