Орион и MSX-DOS 1

Компьютер Орион-128 (1990) расширяемый до 256 КБ и его развитие

Moderator: Shaos

imsushka
Doomed
Posts: 416
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: Орион и MSX-DOS 1

Post by imsushka »

Alekcandr wrote: 10 Jul 2026 01:46 В процессе портирования MSX-DOS1 на ПК ОРИОН обнаружилась ошибка в функции 20.
Если указать для DMA адрес в диапазоне 4000H…7FFFH, то в ПЗУ DOS-а начнут записываться нули.
и какая же это ошибка ?
в мсх дос с 4000. всегда. а для програм озушка которая с 4000 включается куда угодно
Alekcandr
Devil
Posts: 766
Joined: 01 Oct 2007 10:30
Location: Ukraine

Re: Орион и MSX-DOS 1

Post by Alekcandr »

Ну по мне это достаточно странное поведение, когда ты читаешь файл с диска в ОЗУ (TPA) и результатом оказывается запись нулей в ПЗУ DOS-а.

Причем записываются не простые нули, а дополняющие нули до размера 128 байт.
В отличие от CP/M, возможны частично заполненные записи, поскольку размер файла не обязательно кратен 128 байтам. В этом случае частичная запись дополняется нулями при копировании по адресу DTA временной программы.
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
imsushka
Doomed
Posts: 416
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: Орион и MSX-DOS 1

Post by imsushka »

Alekcandr wrote: 11 Jul 2026 00:02 Ну по мне это достаточно странное поведение, когда ты читаешь файл с диска в ОЗУ (TPA) и результатом оказывается запись нулей в ПЗУ DOS-а.

Причем записываются не простые нули, а дополняющие нули до размера 128 байт.
В отличие от CP/M, возможны частично заполненные записи, поскольку размер файла не обязательно кратен 128 байтам. В этом случае частичная запись дополняется нулями при копировании по адресу DTA временной программы.
там вроде всегда читается начиная с 8000
Alekcandr
Devil
Posts: 766
Joined: 01 Oct 2007 10:30
Location: Ukraine

Re: Орион и MSX-DOS 1

Post by Alekcandr »

imsushka wrote: 11 Jul 2026 03:34 там вроде всегда читается начиная с 8000
это для дискового бейсика.

В MSX-DOS там расположена страница ОЗУ для TPA (Transient Program Area), а ПЗУ DOS включается по необходимости, инициатором выступает msxdos.sys.
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
imsushka
Doomed
Posts: 416
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: Орион и MSX-DOS 1

Post by imsushka »

Alekcandr wrote: 11 Jul 2026 03:47
imsushka wrote: 11 Jul 2026 03:34 там вроде всегда читается начиная с 8000
это для дискового бейсика.

Для MSX-DOS там расположена страница ОЗУ для TPA (Transient Program Area), а ПЗУ DOS включается по необходимости, инициатором выступает msxdos.sys.
нет, дос сидит с 4000
она подключаемая
там 3 или 4 страницы доса

и msxdos и переключает
Alekcandr
Devil
Posts: 766
Joined: 01 Oct 2007 10:30
Location: Ukraine

Re: Орион и MSX-DOS 1

Post by Alekcandr »

imsushka wrote: 11 Jul 2026 03:59 нет, дос сидит с 4000
она подключаемая
там 3 или 4 страницы доса

и msxdos и переключает
Я не пойму, как это противоречит тому, что я сказал выше?

И объясните мне, как вы собираетесь запускать и выполнять программы в среде MSX-DOS, если по вашему утверждению ОЗУ начинается с 8000h адреса.

И на всякий случай процитирую описание функции 20

Code: Select all

ПОСЛЕДОВАТЕЛЬНОЕ ЧТЕНИЕ [FCB] (14H)
     Параметры: C = 14H (_RDSEQ)
                   DE = Указатель на открытый FCB
     Результаты: L=A = 01H, если произошла ошибка (конец файла)
                      = 0, если чтение прошло успешно
Эта функция считывает следующую последовательную запись размером 128 байт из файла по текущему адресу
передачи данных на диск. Запись определяется текущим экстентом (старшим и младшим байтами) и номером текущей записи.
После успешного считывания записи эта функция увеличивает номер текущей записи, и если он достигает 080h,
устанавливает его обратно в ноль и увеличивает номер экстента. Поле счетчика записей также обновляется при необходимости.

В отличие от CP/M, возможны частично заполненные записи, поскольку размер файла не обязательно кратен 128 байтам.
В этом случае частичная запись дополняется нулями при копировании по адресу DTA временной программы.
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
imsushka
Doomed
Posts: 416
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: Орион и MSX-DOS 1

Post by imsushka »

Alekcandr wrote: 11 Jul 2026 04:14

И объясните мне, как вы собираетесь запускать и выполнять программы в среде MSX-DOS, если по вашему утверждению ОЗУ начинается с 8000h адреса.
дос всегда на 4000 - пзушка
мсхдос.сис гдето на верху Фхххх
говоришь прочитать что то в 4000 - мсхдос - включает на 4000х пзу. озу которое было на 4000 переключается на 8000, читается, переключается все в зад. адрес дма меняет сама дос

я на мсх уже 35 лет не програмировал, сильно не помню. но загрузчик для игр писал тогда. а игры, большинство, с 4000 сидят
Alekcandr
Devil
Posts: 766
Joined: 01 Oct 2007 10:30
Location: Ukraine

Re: Орион и MSX-DOS 1

Post by Alekcandr »

imsushka wrote: 11 Jul 2026 05:03 дос всегда на 4000 - пзушка
мсхдос.сис гдето на верху Фхххх
говоришь прочитать что то в 4000 - мсхдос - включает на 4000х пзу. озу которое было на 4000 переключается на 8000, читается, переключается все в зад. адрес дма меняет сама дос
Да все так. И это один из десятка способов как организовать обмен данным между теневыми страницами ОЗУ в MSX-DOS. Реализация теневого копирования возлагается на драйвер диска, разрабатываемого третьей стороной.

Только вот проблем с этим у функции 20 нет. Функция 20 прекрасно читает данные с диска и подкладывает их под ПЗУ DOS в ОЗУ.

Проблема у функции 20 начинается в тот момент, когда функция пытается добить запись до 128 байт, записывая нули прямо в ОЗУ там, где ОЗУ нет. Вот так.

P.S. И да MSX-DOS не использует эту функцию у себя, поэтому проблема чтения данных с диска не проявляется. И я далеко не сразу это обнаружил.
Проблема возникнет в старом CP/M софте при попытке прочитать что либо с диска, записанного ранее на PC-совместимом компьютере.
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
imsushka
Doomed
Posts: 416
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: Орион и MSX-DOS 1

Post by imsushka »

Alekcandr wrote: 11 Jul 2026 10:07
imsushka wrote: 11 Jul 2026 05:03 дос всегда на 4000 - пзушка
мсхдос.сис гдето на верху Фхххх
говоришь прочитать что то в 4000 - мсхдос - включает на 4000х пзу. озу которое было на 4000 переключается на 8000, читается, переключается все в зад. адрес дма меняет сама дос
Да все так. И это один из десятка способов как организовать обмен данным между теневыми страницами ОЗУ в MSX-DOS. Реализация теневого копирования возлагается на драйвер диска, разрабатываемого третьей стороной.

Только вот проблем с этим у функции 20 нет. Функция 20 прекрасно читает данные с диска и подкладывает их под ПЗУ DOS в ОЗУ.

Проблема у функции 20 начинается в тот момент, когда функция пытается добить запись до 128 байт, записывая нули прямо в ОЗУ там, где ОЗУ нет. Вот так.

P.S. И да MSX-DOS не использует эту функцию у себя, поэтому проблема чтения данных с диска не проявляется. И я далеко не сразу это обнаружил.
Проблема возникнет в старом CP/M софте при попытке прочитать что либо с диска, записанного ранее на PC-совместимом компьютере.
хз. я не помню уже как читал. но проблем не было. может уже 2,2 дос была. а может файлы были по 16/32 к ровно
Alekcandr
Devil
Posts: 766
Joined: 01 Oct 2007 10:30
Location: Ukraine

Re: Орион и MSX-DOS 1

Post by Alekcandr »

Вот вот, кратные 128 байтам.

Откровенно я в обще до конца не пойму зачем было сделано добивание нулями последней записи до 128 байт. Когда MSX-DOS1 оперирует записями по 128 байт, как и CP/M. Ну будет в конце файла мусор, а не красивые нули, и что? Кого это волновало в CP/M (MSX-DOS1)? Мусор эта плата за простоту, отгружай данные 128 байтными порциями и все. Заботиться точностью до байта внутри файла не надо, и функций таких нет у MSX-DOS1, где можно позиционировать маркер внутри файла с точностью до байта.
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
Alekcandr
Devil
Posts: 766
Joined: 01 Oct 2007 10:30
Location: Ukraine

Re: Орион и MSX-DOS 1

Post by Alekcandr »

Начал не спешно переносить себе FAT16 c Beer IDE.

И нашел не то, чтобы ошибку. Скорее не правильный алгоритм действий при использовании "не стандартного" образа FAT16.

Суть проблемы в том, что таблица FAT считывается до обновления фактическим DPB c диска. По умолчанию предполагается, что таблица FAT идет сразу за Boot сектором, а в реальности это может быть не так.

P.S. Стандартные образы мало применимы в 8-ми битных компьютерах из-за громадных таблиц в FAT16.
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru