Вход

Просмотр полной версии : RK-КНГМД для "Специалиста"



zx_
28.11.2017, 13:13
что пишут об этом авторы РК ДОС

«Операционная система РК-ДОС может работать на ЭВМ "МИКРОША", "Радио-86РК, осна-
щенных ОЗУ обьемом в 32К, а также на ЭВМ "СПЕЦИАЛИСТ-48К" (ленинградский мони-
тор, имеющий вызовы F800) совместно с КНГМД по схеме из журнала РАДИО N1-2 1993
года. Для использования РК-ДОС на ПРК ОРИОН-128 необходима модернизация РК-ДОС,
т.к по адресу F000 в ОРИОНЕ-128 не "включить" порт 580ВВ55 (хотя отсутствие ПЗУ
в области E000-EFFF не вредит, т.к ДОС можно загрузить и в ОЗУ E000-EFFF ОРИО-
НА-128). При использовании РК-ДОС на "СПЕЦИАЛИСТЕ" можно устанавливать ПЗУ с
ДОС как вместо ПЗУ пользователя на основной плате, так и в панельку на плате
KНГМД»

http://sensi.org/~tnt23/rk86/index.html


и еще пишут. о селекторах
«Если Вы получили данное описание для самостоятельной настройки КНГМД, то ис-
используйте тест и рекомендации по настройке КНГМД из ж.РАДИО N2 1993 года,
также при установке RK-DOS на "Радио-86РК" воспользуйтесь схемами и дампом те-
ста из данной статьи. ЭВМ "СПЕЦИАЛИСТ" уже имеет "чип-селекты" E000,E800 и F000
и поэтому установка дешифратора не требуется. При подключении второго НГМД не-
обходимо вытащить из дисковода A: резистивную матрицу (для привязки сигналов).
Распайку системного разьема (стандарт "МИКРОШИ") можно взять из ж.РАДИО N2,1993
»


к fifan просьба нарисовать схему подключения этого КНМГД к Специалист Экспресс восточный, с учетом
чип селект Е000 Е800 F000

Схемку ну хотябы описательную но к конкретному железу -)

PVV
28.11.2017, 13:23
Интересует именно использование дисковода, или возможность загружать ПО в Специалист? SD карта не устроит? Для Специалиста есть два варианта SD интерфейсов.

zx_
28.11.2017, 13:50
нет нет, именно РК ДОС интересен.

fifan
28.11.2017, 14:19
Я не понял физическое воплощение РК ДОС - ПЗУ или НГМД?
Если НГМД - не надо! В каком веке мы живём? Дискеты? На хрен они сдались. Только SD контроллер! Я записал на SD карту пол гигабайта игрушек и вполне доволен.
Если ПЗУ - зачем? Даже HardWareMan на Специалисте МХ2 сократил ROM-диск. Потому что всё можно загрузить с SD карты.

zx_
28.11.2017, 16:17
меня в схеме Экспресса интересует конкретика , вот это —- селект Е000 Е800 F000

я так понимаю, это мс D36 ,выходы по вашей схеме Экспресса

fifan
28.11.2017, 16:49
КНМГД - это что это за игра букв?
Я не художник куски схем рисовать. Кстати схема не моя, я не знаю автора Экспресса.
ИД4 управляет адресами C000h...FFFFh. Выходов 8 - делим всё пространство на 8.
Значит так: C000h...C7FFh, C8000h...CFFFh, и так далее. Одна выборка по 2 кБайта. Выводы ИД4 соответственно: 7, 6, 5, 4, 9, 10, 11, 12.

barsik
28.11.2017, 17:46
Вот без этого узла совместимости оригинал RK-DOS работать не будет, т.к там все вызовы идут на адреса ПЗУ F800, а не C800. Лучше поставить 2 диода, чем перетранслировать на адреса C800, т.к перетранслировать придётся не только саму RK-DOS, но и SYS-файлы и редакторы и ассемблеры и бейсики и т.п.

zx_
29.11.2017, 12:42
немного информации сюда в ветку о КНМГД из журнала Радио

"makbar, в подписи замечательные слова увидел - КНГМД для Специалиста.

Не могли бы поподробнее о этом , лучше со схемами и программами -)

Или хотя бы словами поведать о КНГМД для Специалиста
Я вас умоляю, прошло почти 30 лет. ПО естественно не сохранилось)) Тем более, что правильную ОС я начал писать, уже переехав на орион.
Схема ровно такая как для ориона, которую я опубликовал в 12/1992 радио. Именно поэтому там и есть "регистр запросов", в которые заведены сигналы с ВГ93, ибо схема разрабатывалась изначально на Специалисте. "

http://zx-pk.ru/threads/6066-orion-128-raznoe.html?p=938823&viewfull=1#post938823

Как видим, только схема и есть, ничего более.

barsik
29.11.2017, 17:47
По просьбам трудящихся (в ЛС) даю подробный ответ.

РК-КНГМД с RK-DOS без проблем ставится в СПЕЦИАЛИСТ, а также и в любой другой компьютер с КР580 без СК, где можно получить три чип-селекта E000,E800 и F000 без конфликта с ОЗУ (или же ОЗУ в области E000...EFFF и порт F000 адресуемый участком не менее 400H байт).

Уточнение, что именно с КР580, сделано потому, что:

- во-первых, RK-DOS Е.Седова в оригинале нагло работает с областью памяти командами OUT, отчего, если в системе стоит КР580 с системным контроллером ВК28 (ради команд IN/OUT), то попадания в ППА КНГМД командами IN и OUT уже не будет

- во-вторых, из-за вышеприведённой причины с процессором Z80 также работать не будет, т.к при Z80 команды OUT почему-то перестают работать

- в-третьих, из-за скорости. КР580 обычно имеет эффективный такт не выше 2.5 МГЦ, а RK-DOS, где всё основано на программных задержках, константы установлены так, что при такте 2.5 МГЦ ещё работает, а вот для такта выше, константы надо менять. Так, что, если у Вас в СПЕЦИАЛИСТЕ КР580 по схеме прогрессивного ТУРБО (где ОЗУ на 2 МГЦ, КР580 на 3 МГЦ), то оригинал уже использовать нельзя.

Хотя переделка RK-DOS с вызовов F803,F806,F809... на вызовы C803,C806,С809... что сдуру организовал в СПЕЦИАЛИСТЕ Орлов, совсем не проблема (работа на 15 секунд, т.к полноценный исходник есть), но можно, чтобы не перешивать ПЗУ RK-DOS, поставить 2 диода и резистор (дешифратор ИД7 для доп.В/У и-так у всех должен уже стоять). Поэтому в тексте и указано, что нужен ленинградский монитор, т.к там применена разумная схема совмещения входов C800 с входами F800 (от КООП SP580), что позволяет без переделок использовать системное ПО РК86 в СПЕЦИАЛИСТЕ.

Если бы Орлов не поспешил со своей идеей установки входо-совместимого монитора на C800 для облегчения адаптации программ от РК, а подождал бы всего пару месяцев до выхода рекламы КООП SP580, которые совместимость получили аппаратно, причём простейшим способом, то СПЕЦИАЛИСТ изначально имел бы совместимость и переделывать РК-программы не пришлось бы.

Ставить ЛИ1 излишне, достаточно 2 диода и резистор. При применении RK-DOS на СПЕЦИАЛИСТЕ (также как и при её применении на ОРИОНЕ) возникает проблема с наглыми RK-DOS программами, которые хотя и системные, но нагло лезут прямо в экран РК86 (хотя это никак не обусловлено нехваткой скорости CPU).

Из-за этого, в частности, не работают: убогий нортон SE.COM, диск-доктор и посекторный редактор TS-EDIT. С остальными системными программами проблем нет, в т.числе и с SYS-файлами, кроме тех, что работают с МГ (из-за того, что Орлов в своём мониторе перепутал регистры C и A в МГ-подпрограммах).

При желании можно перетранслировать и RK-DOS и SYS-файлы на 4 кб выше, получив на 4 кб больший TPA. Но это не имеет особого смысла, т.к игр для СПЕЦИАЛИСТА с размером более 7200 очень мало. Это было бы разумно, только если кто-нибудь пишет программы на СПЕЦИАЛИСТЕ, тогда увеличение TPA позволяет загрузить бОльший исходный текст и транслировать уже не 2 кб объектных кодов, а 3 кб. Другой причиной не делать этого является желание избежать переделки дискового ПО RK-DOS, хотя реальный интерес представляют только дисковый бейсик и дисковый ассемблер. Который позволяет писать программы большого размера (правда возникает трудность создать исходный текст большого размера, т.к редактор от РК86 для СПЕЦИАЛИСТА не годится).

Но сейчас удобнее писать программы на IBM PC, к тому же используя нормальный макро ассемблер Microsoft M80, а не примитивный МИКРОН. Оставшийся выше управляющих ячеек RK-DOS (на 75xx) и ячеек ROM-BIOS РК86 (на 76xx) кусок памяти в 76D0...8F60 можно использовать для загрузки Нортона или отладчика для отладки дисководных программ. Однако приличный Нортон для графической машины имеет размер в 12 кб и туда не влезет. А переделывать SE.COM не имеет смысла, не только в силу убогости его интерфейса, но и потому, что это выйдет себе дороже, т.к переделывать придётся алгоритм. Проще и быстрее написать свой аналогичный Нортон. Однако СПЕЦИАЛИСТ имеет графику и поэтому для него разумно иметь нормальный Нортон с окнами.

Однако для получения RK-DOS совершенно необязательно иметь РК-КНГМД. Если имеете более 48К ОЗУ в СПЕЦИАЛИСТЕ, внешний эл.диск на РУ7 или современной статике, да и даже вообще любой тип внешнего носителя, то чтобы получить RK-DOS для него достаточно заменить в исходнике RK-DOS только две подпрограммы - чтения и записи сектора.

Например, если Вы имеете подпрограммы чтения и записи блока 512 байт на 'microSD', то можете странслировать версию RK-DOS для флэш-носителя. Это м.быть как всего 2 подпрограммы обмена в SPI-интерфейсе (это когда 'microSD' подключается напрямую без микроконтроллера на Atmega, а формат 'microSD' свой) или же набор п/п-мм для микроконтроллера (тогда формат 'microSD' остаётся FAT32, а сектора РК-диска читаются/пишутся из файла в 400 кб).

Для дисковода в оригинале RK-DOS нельзя иметь диски размером более 640 кб. Поясняю почему это так. Вся концепция ДОС (и даже низкоуровневый формат) заимствована от Apple-DOS (возможно от ДОС Агата). Но для сокращения объёма кода введены изменения, а именно формат VTOC упрощен. Для описания занятости одного трека отводится лишь 1 байт. Из-за этого максимальное число секторов в треке не может превышать 8 (в Apple-DOS - 32). Размер сектора изменить нельзя, поэтому на дисководе и получается максимальный размер диска при 8 секторах по 512 байт на трек, - 640 кб.

Для больших носителей, в частности, для электронного носителя можно размер диска немного увеличить, подняв число треков до 255. Тогда максимальная емкость диска будет 255 * 8 * 0.5 = 1020 кб. Для такого размера RAM-диска выгоднее всего сделать расширение ОЗУ СПЕЦИАЛИСТА на SIMM в 1 мб. Можно также сделать внешний эл.диск используя SIMM 1 мб.

Адресация РК-КНГМД неудачна для СПЕЦИАЛИСТА и изменить это нельзя не потеряв совместимости с программами (т.к RK-DOS управляется не функциями как все ДОС в мире, а напрямую жёстко фиксированными ячейками в ОЗУ и если передвинуть эти ячейки, то все программы RK-DOS перестанут работать). Кстати, ещё одним фатальным недостатком RK-DOS является один жёстко фиксированный формат диска и жестко фиксированный адрес входа в BDOS, что делает RK-DOS непереносимой и немодифицируемой (поэтому было проще написать свой вариант Apple-DOS, чем пытаться улучшить изначально неудачную концепцию).

Однако на СПЕЦИАЛИСТЕ неудачная архитектура позволяет RK-DOS работать из ОЗУ и с пользой использовать ОЗУ выше рабочих ячеек DOS и РК86, а в ПЗУ потратить всего 4 байта. Т.к программы RK-DOS не лезут нагло внутрь кода RK-DOS, а весь программный интерфейс делается с помощью вызовов BDOS по CALL E001. Тогда прошив в ПЗУ на адрес E001 команду JMP 7800 мы сможем грузить RK-DOS в ОЗУ. Это хорошо не только тем, что не тратится впустую ОЗУ и не расходуется ПЗУ, а как раз тем, что имея ДОС в ОЗУ мы можем эту ДОС дорабатывать и расширять. В частности, избавиться наконец от неудобных SYS-файлов с командами DOS, перенеся, по крайней мере, самые ходовые команды ERASE, RENAME и COPY в код самой DOS, как это во всех DOS в мире.

При установке RK-DOS с РК-КНГМД в СПЕЦИАЛИСТ проще всего применить тупой лобовой вариант, когда RK-DOS прошивается в две ПЗУ и стоИт в родных адресах E000...EFFF. Однако это невыгодно. По следующей причине.

Имея в системе РК-КНГМД, вы можете использовать не только RK-DOS, но и другие DOS, например CP/M, Hameleon-DOS или более совершенную версию Apple-DOS. Если же в ПЗУ E000...EFFF стоит RK-DOS, то эту область уже нельзя использовать как ОЗУ и значит в неё нельзя загрузить другую DOS. А эта область "верхнего ОЗУ" D000...F7FF идеально подходит для размешения здесь DOS для ОЗУ. Т.к если нормальную DOS, имеющую обычно размер ~10 кб загрузить в основное ОЗУ СПЕЦИАЛИСТА в 36 кб, то что остаётся для программ и на кой хрен нужна DOS, которой не запустить программу размером более 25 кб, а такие программы у СПЕЦИАЛИСТА есть.

Одно время (в 1994) я использовал RK-DOS на СПЕЦИАЛИСТЕ. В тупом лобовом варианте, т.е с прошивкой в ПЗУ и как раз оригинала, т.к тогда ещё не было других ДОС для РК-КНГМД. Однако сейчас RK-DOS разумнее использовать не в ПЗУ, а в ОЗУ.

В 1989 я имел не одну плату СПЕЦИАЛИСТ ЭКСПРЕСС, а около десятка, а также две линёвских платы (так уж сложилось). На этих платах я производил макетирование. В частности, отмакетировал цвет (16 цветов) и турбирование КР580 до 3.5 МГЦ при экране 640*256 (в цвете 320*256). На одной плате стоял Z80 с реальным тактом в 3.55 МГЦ и КНГМД на базе ВГ93 и использовалась ОС CP/M.

Т.к CP/M довольно большая и, как выше указано, её бессмысленно использовать в основном ОЗУ СПЕЦИАЛИСТА, то для CP/M пришлось "открыть ОЗУ" выше D000. В эти 10 кб загружается BDOS и BIOS CP/M, а CCP загружается в основное ОЗУ ниже экрана (т.к это неважно, CCP не сокращает TPA). Но чтобы программы CP/M считали, что TPA 36 кб, то на адрес 8F06 ставится "обманный" JMP на D000, где собственно и размещается BDOS. Это возможно потому что CP/M программы определяют размер TPA по JMP-у на BDOS по адресу 5, где стоит JMP 8F06, отчего программы CP/M не лезут выше этого адреса и не затирают служ.ячейки ROM-BIOS и экран, хотя обычно CP/M затирает всё до уровня BDOS, который здесь стоит на D000. В общем-то даже 36 кб TPA мало для компиляторов ЯВУ и фирменных пакетов (отчего в 1990 и пришлось перейти на ОРИОН, где ОЗУ - как грязи), хотя проблему приличного ассемблера это решило, т.к Microsoft M80 работает и с маленьким TPA.

"Открытие ОЗУ" в области D000...F7FF не проблемно делается на плате СПЕЦИАЛИСТ "ЭКСПРЕСС", т.к там стоят не РУ3, а РУ5. Поэтому если и при установке РК-КНГМД открыть это ОЗУ, то можно иметь CP/M и на базе РК-КНГМД, что даже лучше, чем с КНГМД на базе ВГ93, т.к РК-КНГМД намного менее критичен к качеству дискет. А даже дорогие дискеты по прошествии 25 лет становятся полудохлыми (кстати как ни странно самые дорогие с пожизненной гарантией дохнут в первую очередь, а беспородные тайваньские служат вдвое дольше). Но стоит признать, что с РК-КНГМД CP/M работает тормознее, чем с ВГ93, даже если использовать формат 880 кб на диск (DD 3.5"). У CP/M нет ограничения на размер диска, поэтому "открыв ОЗУ" D000 можно иметь в CP/M СПЕЦИАЛИСТА винчестер (что кстати, намного проще).

Разумно дискеты 5.25"-DD использовать в формате 560 кб (7 секторов), а дискеты 3.25"-HD/DD в формате 880 кб (11 секторов). Гораздо надёжнее и долговечнее дискеты DD (в том числе 3.5"-DD). Например у меня из 150 дисков 3.5"-HD выжило едва 20, в то время как из 10 дисков 3.5"-DD выжили почти все. 60 дисков 5.25"-HD сдохли все, в то время как из 30 дисков 5.25"-DD выжила половина. Если дисковод хороший типа EPSON SMD-300 (позволяющий менять подмагничивание), то диски HD-3.5" прекрасно работают как DD. На более современных дисководах нет перемычек и формат DD можно поставить только заклеив дырку. Но не на всех дисководах это помогает использовать диски HD, как DD.

Пока диск работает как HD, я использовал его в формате 1200...1600 кб (диск 5.25"-HD на 960 кб, т.к тут колесо разогнано), а когда пошла дохлота, - то в формате 560 кб как DD. HD-5.25" как DD не работают, а вот 3.5"-HD могут (хотя и не на всех НГМД с одинаковым качеством). Т.к все мои диски были куплены в самом начале 90-тых, а дохнуть они стали в 2000, то срок службы дискет я оцениваю всего в 7-10 лет. После чего их качество быстро портится. И вот как раз РК-КНГМД позволяет, правильно подбирая формат (частоту кварца в КНГМД), существенно продлить срок их службы. А наиболее долговечными из всех дискет являются 5.25"-DD и 3.5"-DD.

Какие-то иллюстрации (https://yadi.sk/d/nqZxggmF3QATQF) и вот какой может быть интерфейс нортона СПЕЦИАЛИСТА (https://yadi.sk/d/Kq8bLeGJ3QAYez)

fifan
29.11.2017, 21:05
Может всё таки кто-нибудь даст расшифровку аббревиатуры КНМГД? Опять пришёл barsik написал километровый текст, из которого ничего не понятно. Можно поставить на Специалист и прекрасно пойдёт. Что поставить? Ткните наконец мне на схему.

TomaTLAB
29.11.2017, 21:52
fifan, издеваетесь? Контроллер Накопителя на Гибких Магнитных Дисках. Или магнитных гибких... не суть.
У меня другая аббревиатура лыбу вызывает - НЖМД - накопитель на жидких магнитных дисках :)

zx_
29.11.2017, 22:14
fifan, мапперы ставьте, они со схемами

makbar
29.11.2017, 23:33
Как видим, только схема и есть, ничего более.
Точнее сказать, осталась только схема.
Камрад Денн из орионовской ветки разобрал по косточкам мою SPDOS и сделал более продвинутую систему. Никто не может вам запретить сделать тоже самое для Специалиста.
Еще раз повторюсь и тут: Этот контроллер я изначально сделал для этого ПК, и уже потом его перенес без изменений на орион.
Единственным важным отличием было добавление 1 такта wait в орионе, для правильной работы ВГ93. В Специалисте сигнал чтения >400нс и там такой проблемы не было.

- - - Добавлено - - -

Простите мою неосведомленность, я так понял, что для Специалиста обсуждается контроллер не на стандартной ВГ93?!!!
Это что за ужас такой. Western Digital спациально для вас спроектировала чип, а вы извращаетесь?

fifan
30.11.2017, 05:35
Я уже писал, что дисководы себя изжили, ориентируйтесь на SD карты.

barsik
30.11.2017, 06:54
Опять пришёл barsik написал километровый текст, из которого ничего не понятно. Интересно читать форум, где есть информация, и неинтересно читать форум где пользователи обмениваются одними междометиями, что можно думать, что основной информацией они обмениваются в личке.

Зачем Вы троллите? Всё что я написал понятно и ребёнку. Вы не сможете привести ни одного предложения которое бы Вы не поняли.


ничего не понятно. Можно поставить на Специалист и прекрасно пойдёт. Что поставить? Ткните наконец мне на схему
Снова издеваетесь? Невозможно не понять о чём речь. Это ясно из названия темы и контекста. И есть ссылка в первом посту.


Я уже писал, что дисководы себя изжили, ориентируйтесь на SD карты Так люди потому этим и занимаются. А про что на этом сайте нельзя сказать так же?

Понятно, что проще повторить конструкцию с микроконтроллером Atmega и 'microSD' в качестве носителя. А мне как раз именно это кажется неламповым. Если уж всё заменять суррогатами, тогда проще не тратить силы, а сразу перейти на эмулятор.

Но у меня плохое отношение к этому по другой причине. А потому, что в такой конструкции нет DOS, причём общей DOS для всей платформы. Я не могу не имея ДОС написать текстовый редактор, Нортон, ассемблер или ещё что-то дисковое потому что DOS нет, и соответственно, нет функций DOS. А когда есть DOS, то тип носителя вообще без разницы..

Для этого надо было не повторять западные кострукции на Atmega, а встроить 'microSD' в DOS, например в CP/M, а для машин с маленьким ОЗУ - в RK-DOS. А с Вашими вариантами устройств на 'microSD' от vinxru консервируется МГ-вариант рэтро компьютера, что неинтересно.


Denn разобрал по косточкам мою SPDOS и сделал более продвинутую систему. Никто не может вам запретить сделать тоже самое для Специалиста.А как он может это сделать, если SPDOS для СПЕЦИАЛИСТА не сохранился? Я бы тоже с интересом дизассемблировал бы и посмотрел. Мне непонятно, что это может быть, т.к в СПЕЦИАЛИСТЕ нет ORDOS.

И расскажите пожалуйста какими хитростями Вы поставили КНГМД на базе ВГ93 в СПЕЦИАЛИСТ. Для этого другие люди использовали два хитроумных трюка (в двух независимых реализациях) и есть мой лобовой дубовый способ (поднятие такта до 2.5 МГЦ за счёт 155ТМ2). Какой способ использовали Вы ?


Это что за ужас такой? Western Digital специально для вас спроектировала чип, а вы извращаетесь?

Нехорошо написали. Не вижу ужаса. Это рэтро хобби, здесь чем древнее, тем почётнее. А извращаться приходится владельцам КНГМД на базе ВГ93, когда они пытаются использовать старые осыпавшиеся диски (а других сейчас и не бывает).

Ну хорошо, допустим есть ВГ93. И что из того? Где взять готовую систему с печатными платами и программами? CP/M объёмом 10 кб для машин с маленьким ОЗУ не подходит, да и даже это сначала надо сделать.

Вы сначала сделайте для РК86 любую DOS на базе ВГ93. А это не так просто для машины, где ПДП рвёт прогон программы каждые 8 МКСЕК. А RK-DOS давно сделана, проверена на тысяче машин и печатные платы сейчас доступны. Тут даже нет альтернативы.

Расскажу о РК-КНГМД в очередной раз

Применение РК-КНГМД, оправдано не только потому что он намного интереснее, даёт больше возможностей и гораздо надёжнее. Но и потому, что сейчас, когда уже нет новых дискет, РК-КНГМД позволяет использовать такие дискеты, которые дают сплошные BAD-секторы на контроллерах с БИС. Так с РК-КНГМД работают даже дискеты ИЗОТ 1985 года выпуска.

А несмотря на тысячи транзисторов внутри БИС возможности примитивного РК- КНГМД даже в формате FM оказались выше, чем у контроллера на ВГ93. Который пригоден только для нескольких стандартных форматов. В РК-КНГМД можно менять всё что угодно, начиная от такта импульсов и низкоуровневого формата до числа секторов в треке. Тем самым можно подобрать параметры оптимально соответствующие качеству имеющихся дискет. Причём, т.к формат изначально несовместим ни с одним стандартом в мире (в IBM PC дискеты не считать), то и заботиться о совместимости не требуется.

Возможности ВГ93 в этом плане ограничены - если дискета даёт много дохлых CP/M-блоков в формате DD (MFM), то можно попробовать формат SD (FM) и больше ничего изменить нельзя. А как показала практика, если с ВГ93 дискета дохлая как DD, то и формат SD ничего не улучшает, только форматная ёмкость становится вдвое меньше (400К). А вот если эту же дохлую DD-дискету поставить в РК-КНГМД, то она отформатируется без дохлоты и даст даже не 400К, а 880К.

Если с КНГМД на базе ВГ93 возможны всего два формата, то с РК-КНГМД я испытал до сотни разных форматов, с разной частотой импульсов, разным числом секторов и разным размером секторов. ВГ93 никогда не позволит отформатировать диск в формате один сектор на трек (с кратностью до байта), что даёт максимальное использование диска, т.к выпадают межсекторные гапы и служебная информация, что увеличивает полезную ёмкость на 20-25% (хотя и неприятно тем, что снижается TPA, т.к дисковый буфер определяется размером сектора).

Когда в 1994 я поимел дискеты RK-DOS (схема была известна на год ранее), я уже 5 лет пользовался CP/M с КНГМД на базе ВГ93. РК-КНГМД оказалась единственной возможностью получить дисковод в РК86 и нетурбированном СПЕЦИАЛИСТЕ. Но главное, это давало шанс применить это и в ИРИШЕ. Поэтому я и занялся РК-КНГМД и ставил его во все свои рэтро-ЭВМ. Точнее на все платы ставил эпловский слот на 50 контактов и мог перетыкать РК-КНГМД из одной машины в другую. И только на ОРИОНЕ у меня одновременно стояло 2 КНГМД - на ВГ93 и РК-КНГМД, что и позволяло обмен файлами. Чтобы "поднять" программы РК86 и СПЕЦИАЛИСТА на винчестер IBM PC, мне приходилось считать файлы в ОЗУ с диска в формате RK-DOS, записывать их как файлы ORDOS. Затем запускать MS-COMAN$ С.Коровкина, который позволял скопировать ORDOS-файл на диск в формате MSDOS 720К, а затем перставив диск на IBM PC, перенести файлы на винчестер. Если бы использовал для переноса магнитофон, то это заняло бы не один день.

А когда в начале 21 века дискеты массово начали "дохнуть как мухи", я вспомнил о том, что РК-КНГМД менее требователен к качеству дискет. Поэтому я просто перетранслировал все ДОС ОРИОНА под РК-КНГМД, что позволило мне пользоваться этими дохлыми дисками ещё 15 лет. А КНГМД на базе ВГ93 я не использую уже лет 10 и даже вообще больше не имею такого КНГМД.

Так что Е.Седов, разработавший РК-КНГМД и RK-DOS сделал лишь немного худшую работу, чем Стив Возняк в 1978, который разработал тоже программный КНГМД, но ему потребовалось всего 6 TTL-микросхем.

Кстати ещё задолго до РК-КНГМД для РК86 существовал другой РК-КНГМД, в 1.5 раза более простой. Возможно для истории нарисую его схему в файл. На схеме написано "Контроллер дисковода. Автор Анатолий Мельников". Летом 1989 ко мне попала эта схема и МГ-кассета, на которой в формате РК86 была записана CP/M РК86 и основные CP/M утилиты FORMAT, PIP, ASM, LOAD и DDT. Тогда я уже имел б/у дисковод 5088 с резиновыми пассиками (купленный для TR-DOS ZX-Spectrum за 150 руб.).

Опробовать получилось. Но то ли из-за несовершенства КНГМД, то ли из-за изношенного дисковода, то ли из-за дискет ИЗОТ, надежность оказалась очень низкой. И только когда осенью 1989 я купил КОРВЕТ с НГМД МС5305, оказалось возможным скопировать его контроллер и CP/M. Подозреваю, что это одна из ранних схем от ДВК или Электроники-60. Схема промышленная по ГОСТ-у. Есть надпись "Контроллер дисковода", а далее зачернено и ниже подписано вручную "для РК86". Все инвентарные номера в спецификации тоже зачернены. Принцип работы этого контроллера иной. И менее совершенный сепаратор данных. Обмен тоже через ВВ55, но тут она работает в другом режиме (режим параллельного интерфейса). Осталась только схема, кассета с такой CP/M утрачена. Давно хочу спаять этот КНГМД и попробовать в работе.

Что касается контроллера на ВГ93 для РК86, то такой тоже существовал и задолго до РК-КНГМД. Я имел в 1989 документацию (плата 140*140, 16 TTL- корпусов и ВГ93). Но не было главного - системной дискеты. Контроллер на ВГ93 требует более сложной программы, т.к использует ПДП. Не знаю, этот ли КНГМД использовали позднее для ПАРТНЁРА, но похоже, что массовый выпуск его КНГМД так и не успели начать до полного краха экономики. Сейчас документация на КНГМД для ПАРТНЁРА доступна, но никто не спешит применять его для РК86, т.к всем хватает и РК-КНГМД.

zx_
30.11.2017, 07:36
короткая цитата от barsik,

«Если с КНГМД на базе ВГ93 возможны всего два формата, то с РК-КНГМД я испытал до сотни разных форматов, с разной частотой импульсов, разным числом секторов и разным размером секторов. ВГ93 никогда не позволит отформатировать диск в формате один сектор на трек (с кратностью до байта), что даёт максимальное использование диска , так как выпадают межсекторные гапы и служебная информация, что увеличивает полезную ёмкость на 20-25% (хотя и неприятно тем, что снижается TPA, т.к дисковый буфер определяется размером сектора).»

HardWareMan
30.11.2017, 08:28
Интересно читать форум, где есть информация, и неинтересно читать форум где пользователи обмениваются одними междометиями, что можно думать, что основной информацией они обмениваются в личке.
На форумах действует внегласное правило: Краткость - сестра таланта. О каких междометиях речь? Людей действительно утомляет читать большие простыни или проматывать их вверх. Если я хочу развернутой информации я спрашиваю ISBN (или хотя-бы точное название и автора) книги или брошюры и иду ее читать за пределами форума. Так же, чтобы выразить уважение к собеседникам вы можете использовать тэг SPOILER.

PS На ЯПе вчера была тема: Задал вопрос - получи ответ. На другой вопрос (http://www.yaplakal.com/forum7/topic1699803.html). Я думал, к чему бы это? Оказывается опять Барсик.
PPS На многих форумах считается мовитоном давать ссылки на закрытые соцсети и/или другие форумы. На некоторых из них это запрещено законодательно и карается карточкой. Предлагаю ввести такое же правило и здесь: мало ли чего там понапишут а ссылка то на то непотребство здесь.

PVV
30.11.2017, 09:27
Понятно, что проще повторить конструкцию с микроконтроллером Atmega и 'microSD' в качестве носителя. А мне как раз именно это кажется неламповым. Если уж всё заменять суррогатами, тогда проще не тратить силы, а сразу перейти на эмулятор.

Но у меня плохое отношение к этому по другой причине. А потому, что в такой конструкции нет DOS, причём общей DOS для всей платформы. Я не могу не имея ДОС написать текстовый редактор, Нортон, ассемблер или ещё что-то дисковое потому что DOS нет, и соответственно, нет функций DOS. А когда есть DOS, то тип носителя вообще без разницы..

Я сам за ламповость, но найти дискеты сейчас уже Большая проблема, а лет через 5-10 их вообще не будет, только в музеях...
Повторюсь, для Специалиста существует две реализации SD интерфейса, одна на Atmega, а вторая почти такая же как и РК-КНГМД, на дискретных элементах собрана схема для работы с SD ( ее HardWareMan делал для СпециалистаМХ2, а я реализовал ее на свой лад), написан элементарный DOS(sd_dos), который имеет усеченные команды для работы как на чтение, так и на запись. Этого достаточно для реализации всех остальных операций 'большой' DOS в виде внешних, запускаемых с той же SD карты файлов.

Вот возможности этой элементарной DOS:
- CD ИМЯкаталога - перейти в каталог с указанным именем;
- DIR - вывести список файлов и каталогов;
- ИМЯфайла.RKX(RKS для Специалиста std, RKX для СпециалистаМХ, RKR для RK-86 и GTP для Галаксии) - запустить файл, при этом расширение можно не набирать, будет произведена автоподстановка;
- R ИМЯфайла.РАСШИРЕНИЕфайла,А ДРЕСкуда,СКОЛЬКОбайт - прочитать не запуская данные файла, начиная с указанного адреса в памяти и сколько байт (пример: R TEST.BIN,0ACD,5FE0 - читает файл TEST.BIN в память начиная с адреса 0х0ACD и до адреса 0х0ACD+0х5FE0=0х6AAD). Ограничение - нет проверки на фактическую длину файла и запрошенную на чтение, те можно запросить прочитать больше чем размер файла, поведение не определено;
- W ИМЯфайла.РАСШИРЕНИЕфайла,А ДРЕСоткуда,СКОЛЬКОбайт - записать в файл данные из памяти, начиная с указанного адреса в памяти и сколько байт
(пример: W TEST.BIN,0ACD,5FE0 - пишет в файл TEST.BIN из памяти начиная с адреса 0х0ACD и до адреса 0х0ACD+0х5FE0=0х6AAD). Ограничение - нет
проверки на фактическую длину файла и запрошенную на запись, те можно запросить записать больше чем размер файла, поведение не определено.
Записать больше чем существующий размер файла нельзя, если записать данных меньше чем размер файла, то размер файла не меняется и остается
прежний;
- X - перейти в монитор, из которого был запущен sddos.
При выводе каталога по DIR печатается имя, расширение файла и его размер(что бы можно было использовать директивы R и W), а на директории
пишется DIR в поле размера файла. При запуске файла пишется стартовый и конечный адреса куда будет считан файл с карты.

Этот sd_dos был проверен мною на трех разных платформах на реалах, (Специалист/СпециалистМХ2, РК-86 и Галаксия).
offtop: Для РК-86 я вообще сделал версию, которая работает через дополнительную ВВ55 ROMдиска, те не требует ни одного изменения в самом РК ( http://www.nedopc.org/forum/viewtopic.php?f=93&t=16296#p132373 ).

fifan
30.11.2017, 09:27
Два способа подключить контроллер дисковода к Специалисту:
1. В "Линёвском" варианте использовали такой (http://www.spetsialist-mx.ru/index14.html).
2. В Специалисте МХ использовался свой (http://www.spetsialist-mx.ru/index22.html).

Зачем вообще что-то новое изобретать или тянуть с РК-86 с его ПО на псевдографике?

HardWareMan
30.11.2017, 10:59
fifan, а как работала Линёвская известно? Просто там нет торможения, как у МХовой, а тактовая все же одинаковая, а на программный поллинг 2,5МГц хватает еле-еле, я знаю о чем говорю так как игрался на Орионе и МХе.

Ewgeny7
30.11.2017, 11:12
barsik, не стОит приводить ссылки на форум провокатора. Он в любой момент может изменить содержимое постов по ссылке на что угодно, доверие к нему закончилось.
Если есть желание опубликовать свои посты - пиши прямо здесь, без ссылок.

b2m
30.11.2017, 11:21
Для РК-86 я вообще сделал версию, которая работает через дополнительную ВВ55 ROMдиска
Пожелание небольшое (как автора первой версии): раз уж тип компьютера выбирается через define, то адрес начала и конца запускаемого файла нужно использовать с тем порядком байт, который используется в оригинальном файле, т.е. для РК-86 старший первый, а для Специалиста наоборот. Не надо, чтобы пользователи РК-86 мучались с изменением порядка байт в исходном .rkr файле.

barsik
30.11.2017, 11:38
найти дискеты уже сейчас большая проблема, а лет через 5-10 их вообще будет не достать, только в музеях...
Оставшихся дискет лет на 5 ещё хватит, а там "или ишак сдохнет или эмир".

Потому-то я ориентируюсь на IDE-винчестер. Доп.железо для него на порядок проще, подпрограммы чтения/записи сектора короче, а скорость обмена выше (т.к без опроса готовности). Винчестеров на наш век хватит, а "богатенькие Буратины" могут позволить себе иметь твёрдотельный винчестер SSHD.

Нет смысла расхолаживать и пугать топик стартера отсутствием дискет. Это его личные проблемы, где он будет их брать и надолго ли их ему хватит. Да и отговаривать его от дисковода в пользу флэш-носителя незачем. Он хочет писать программы для RK-DOS, а не только тупо запускать игрушки.


существует две реализации SD интерфейса
А где для них готовые подпрограммы чтения и записи блока в 512 байт? Уже год у всех пытаюсь выклянчить это. А самому - ума или энтузиазма не хватает, чтобы разобраться в SPI.

А грамотно было бы стандартизовать в ROM-BIOS две входные точки - чтение и запись сектора, как было сделано в М4 для ОРИОНА (2000). Именно так делают в ROM-BIOS промышленных ЭВМ, в т.числе и 8-ми разрядок. Тогда бы никто бы не был в обиде, не было бы проблем совместимости из-за железа. Каждый мог бы иметь DOS какую хочется, причём она работала бы у всех. Т.е на любом типе носителя.

Это упрёк в сторону главного по СПЕЦИАЛИСТУ - fifanа.

Давайте обсудим, как это сделать. Я бы предложил эти точки ввести в ROM-BIOS, а не в монитор C800. В ROM-BIOS не проблема освободить 50-100 ячеек (за счёт более грамотного программирования), хотя достаточно всего 6 байтов для 2-х команд JMP (в адресах C4FA/C4FD). В качестве ячеек номера трека (до 65535) разумны ячейки CLD,CSV, а под ячейку N сектора (0...255) - ячейку INVMG (флаг инверсии сигнала с МГ).

Тогда пользователь может прошить исполнительную часть подпрограмм в ПЗУ или грузить в ОЗУ. А лучше и то и то, введя вектор в области служебных ячеек. Тогда по сбросу работают резидентные подпрограммы, но их можно и заменить подгрузив драйвер в ОЗУ.


Вот возможности этой элементарной DOS
Это описание пользовательского интерфейса (т.е CCP в терминах ОС), а нужно описание программного интерфейса, т.е руководство пользователя по функциям DOS. И всегда желательно, чтобы эти функции были по возможности близкими к CP/M, что облегчает конверсию программ. Я, делая свои DOS, всегда, где возможно, сохранял номера функций, поэтому переделка, например Нортона, от одной DOS к другой занимает всего несколько часов.


существует реализация SD интерфейса, почти такая же как и РК-КНГМД, на дискретных элементах собрана схема для работы с SD (её HardWareMan сделал для Специалиста-МХ2)
Где схема и подпрограммы чтения/записи сектора (и желательно и формат трека) ?

PVV
30.11.2017, 12:20
Пожелание небольшое (как автора первой версии): раз уж тип компьютера выбирается через define, то адрес начала и конца запускаемого файла нужно использовать с тем порядком байт, который используется в оригинальном файле, т.е. для РК-86 старший первый, а для Специалиста наоборот. Не надо, чтобы пользователи РК-86 мучались с изменением порядка байт в исходном .rkr файле.
Согласен, просто на тот момент когда это писалось я не знал что в Специалисте и РК-86 этот порядок различается, думал что это какая то ошибка :) ... нужно сделать вставку выбор тем же define RK86 или остальные пк.


Оставшихся дискет лет на 5 ещё хватит, а там "или ишак сдохнет или эмир".

У меня осталась Одна! дискета :( .


нужно описание программного интерфейса, т.е руководство пользователя по функциям DOS. И всегда желательно, чтобы эти функции были по возможности близкими к CP/M, что облегчает конверсию программ.

описание программного интерфейса - краткие комментарии в исходнике, большего нет. О CP/M не знаю ничего, кроме, что была такая ОС.


Где схема и подпрограммы чтения/записи сектора (и желательно и формат трека) ?
исходник - http://zx-pk.ru/threads/19554-galaksiya-%28plyus%29-tekhnicheskij-razdel/page8.html
схема - http://www.nedopc.org/forum/viewtopic.php?f=90&t=11446&start=75#p134316
на SD карте стандартная FAT16.

zx_
30.11.2017, 13:00
Парни, у меня просьба тему SD картами не укрывать -)


fifan, линевский и любой другой контроллер дисковода софтом не поддержаны, МХ это отдельная история

b2m, к вам вопрос просьба -а както на вашем волшебном эмуляторе смоделировать подключение РК КНГМД к Специалисту возможно? Для выяснения подводных камней и возможной схемотехники.

- - - Добавлено - - -

PVV, дискет не поверите -много
http://zx-pk.com/forum/viewforum.php?f=26

b2m
30.11.2017, 13:32
b2m, к вам вопрос просьба -а както на вашем волшебном эмуляторе смоделировать подключение РК КНГМД к Специалисту возможно?
Нет пока, нужно дописывать эмуль, чтобы он поддерживал нестандартное устройство, т.е. не основанное на ВГ93 (как это сделано сейчас для Агата и БК-0010/11). Образы дисков появились сравнительно недавно.

makbar
30.11.2017, 14:33
И расскажите пожалуйста какими хитростями Вы поставили КНГМД на базе ВГ93 в СПЕЦИАЛИСТ. Для этого другие люди использовали два хитроумных трюка (в двух независимых реализациях) и есть мой лобовой дубовый способ (поднятие такта до 2.5 МГЦ за счёт 155ТМ2). Какой способ использовали Вы ?

Трюк этот, с использованием дополнительного регистра, на который заведены сигналы DRQ и INTRQ. Мне так удобнее и быстрее было опрашивать ВГ93 на Специалисте. Вот и весь трюк.
(см мою схему 1992/12 радио).

А еще, при разработке контроллера я руководствовался фирменной документацией, а не колхозом у "конкурентов". Тем более что конкурентов у меня и не было, я делал контроллер под себя. А на "рынок" и в "журнал" меня уже потом вывели люди, которым понравилась моя разработка.

- - - Добавлено - - -


короткая цитата от barsik,

«Если с КНГМД на базе ВГ93 возможны всего два формата, то с РК-КНГМД я испытал до сотни разных форматов, с разной частотой импульсов, разным числом секторов и разным размером секторов. ВГ93 никогда не позволит отформатировать диск в формате один сектор на трек (с кратностью до байта), что даёт максимальное использование диска , так как выпадают межсекторные гапы и служебная информация, что увеличивает полезную ёмкость на 20-25% (хотя и неприятно тем, что снижается TPA, т.к дисковый буфер определяется размером сектора).»

не понятно правда зачем это нужно)) это первое.

А второе (тут мне надо перечитать доку на ВГшку) я помню... она форматирует трек за раз и прочитать может трек за раз, читай сделать сектор размером в дорожку. Только нафиг, если есть стандарты.

- - - Добавлено - - -

И еще.... взять ПЗУ с досом в 4 раза больше размером нужной и завести DRQ и INTRQ на старшие разряды адреса этой ПЗУ))
и соответствующим образом расклонировать программу на 4 части, обеспечивая ветвление, не тратя время на команду условного перехода. Араведерче.

fifan
30.11.2017, 15:10
Кому-то нравится дискеты, кому SD карты. Две разные точки зрения. Мы друг друга не поймём.
barsik, я не создатель мониторов на Специалист и зачем я буду стандартизировать какие-то точки входа в подпрограммы. Мне это не нужно.

makbar
30.11.2017, 16:13
Два способа подключить контроллер дисковода к Специалисту:
1. В "Линёвском" варианте использовали такой (http://www.spetsialist-mx.ru/index14.html).
2. В Специалисте МХ использовался свой (http://www.spetsialist-mx.ru/index22.html).


Глянул мельком одну из схем. Где пулапчик на 10кОм на сигнале? Кругом колхоз, а потом удивляемся что работает через раз или глючит.
Ведь по русски же написано:
http://maksoft.myjino.ru/pict/or_wd1793_drq_pullup.jpg

fifan
30.11.2017, 17:42
fifan, а как работала Линёвская известно?
Не вникал. Можно почитать здесь (http://www.asvcorp.ru/darch/hardware/specialist/speciallist-fdc/) и здесь (http://www.asvcorp.ru/darch/asv/rd-dos/index.html), были какие-то заморочки при работе.

makbar
30.11.2017, 21:18
Не вникал. Можно почитать здесь (http://www.asvcorp.ru/darch/hardware/specialist/speciallist-fdc/) и здесь (http://www.asvcorp.ru/darch/asv/rd-dos/index.html), были какие-то заморочки при работе.


То есть между обнаружением сигнала DRQ и записью в контроллер очередного байта нет обращения к буферу данных.

Эта идея так и не была реализована "в железе".

мда))

barsik
01.12.2017, 01:22
короткая цитата от barsik,
«Если с КНГМД на базе ВГ93 возможны всего два формата...
не понятно, правда, зачем это нужно

Зря zx_ сделал эту вырезку. Она бесполезна и непонятна без остального текста, что читался по ссылке. Если бы Вы читали форум до 11 часов MSK, то застали бы ещё ссылку на сайт из "черного списка".

Но теперь мне пришлось вставить в посты с ссылками большие тексты из запрещённого сайта. Так что почитайте и будет, надеюсь, понятнее.


Трюк этот, с использованием дополнительного регистра, на который заведены сигналы DRQ и INTRQ. Мне так удобнее и быстрее было опрашивать ВГ93 на Специалисте

Видимо имеется ввиду буфер, через которые CPU может читать 38-ю и 39-ю ноги ВГ93. Это немного экономит, я это знаю. ACP/M-1.58-HD (1993) это использует и именно поэтому в моём HD-КНГМД в отличие от всех других КНГМД ОРИОНА через ЛП11 читаются ноги 38 и 39. Это надо, чтобы на ОРИОНЕ с реал-тактом всего в 3.55 МГЦ иметь HD-формат. Но это дает небольшой выигрыш по сравненеию с чтением статуса программно, и вряд-ли компенсирует разницу тактов 2 и 2.5 МГЦ. Надо взглянуть и сравнить п/п-мму контроля готовности. Эти сигналы лучше читать по битам D0 и D7, или объединив эти сигналы читать по биту D7, чтобы одним сдвигом получать флаг готовности в CY. И Z80, благодаря JR, даёт некоторый выигрыш при программном контроле готовности.


взять ПЗУ с DOS размером в 4 раза больше нужной и завести DRQ и INTRQ на старшие разряды адреса этой ПЗУ что обеспечит аппаратное ветвление по приходу готовности
Это гораздо более эффективная идея, хотя и не новая. Так сделано в одном компьютере, не помню, где об этом читал. Только там эти сигналы переключают не старшие адреса, т.к даже смена адреса A7 сделает переход на 256 адресов. Только не понял, это идея была Вами в своё время реализована или пришла в голову в намного более позднее время.

А мне больше нравится идея с ожиданием готовности по WAIT или HOLD. Как-то проще, т.к предыдущая идея требует усилий, чтобы когда CPU в одних адресах скачок по готовности был, а в остальных - не был. И к тому же надо стробировать сигнал из ВГ93 с клоком CPU. По железу это намного больше, хотя и выигрыш по скорости намного больше.

Но я бы не стал трахаться с подобными решениями. Ну не хватает скорости CPU - есть 2 выхода. Поднять такт CPU (что я и сделал) или понизить частоту кварца в КНГМД. Если понизить кварц КНГМД, ну будет немного меньше ёмкость диска, ну нельзя будет считать диск в IBM PC. Ну и что? Кого это волнует? Зато никаких извратов. А если уж обидно терять ёмкость диска, так легко уменьшить скорость шпинделя и, соответственно кварца, и потерь ёмкости не будет.


ВГ93 форматирует трек за раз и прочитать может трек за раз, т.е сделать сектор размером в дорожкуНе получится, при формате нельзя будет записать произвольный блок данных. Сектора заполняются кодом E5, а другие байты являются служебными. А РК-КНГМД позволяет постепенно увеличивая размер сектора (пока конец сектора не наедет на начало) определить максимально физически возможный формат, это может быть, например, 6937 байтов. И на несколько процентов уменьшим на случай колебаний скорости колеса.


Кому-то нравятся дискеты, кому-то SD карты. Две разные точки зренияНа самом деле Вы не за SD карту, а за магнитофонные программы.

При чём здесь тип носителя? Дело в DOS, точнее в ёё отсутствии и присутствии. Я за то, чтобы у ЭВМ была DOS, чтобы можно было делать программы для этой DOS. А по Вашей концепции программы можно делать только для МГ-варианта компьютера, а это значит, максимальный размер программы 35.5 кб. Подгрузить оверлей с дискеты нельзя. Запустить компилятор ЯВУ нельзя. Запустить текстовый редактор и тот нельзя и т.д.


Мы друг друга не поймёмЭто и не надо. Я всего лишь изложил для топик стартера варианты, как ему лучше использовать РК-КНГМД. Где тут проблемы?

В 1.5 Гб игрушек не верю, т.к все программы СПЕЦИАЛИСТА в 1990 поместились у меня на две дискеты по 800К. Столько игрушек в 1990 не было ни у одного компьютера в мире, а из-за появления ОРИОНА в 1990 популярность СПЕЦИАЛИСТА фатально упала и новые игры появляться перестали.


зачем я буду стандартизировать какие-то точки входа в подпрограммы. Мне это не нужноВижу, что Ваш ранг изменился на "пользователь".

С ПЗУ я погорячился, не оценил ситуацию. Это был один из вариантов. Речь шла о том, чтобы была совместимость. Чтобы на Вашей microSD работала RK-DOS или любая другая DOS, нужна программа, которая интерфейсом имела бы две п/п-ммы и ячейки N трека и N сектора. И возможно, эмулировала бы дискету в большом файле FAT32. Тогда у Вас и топик стартера (если он сделает СПЕЦИАЛИСТ с РК-КНГМД) были бы общие программы. И каждый, со своим другим устройством имея такой же интерфейс, сразу получил бы несколько DOS, в т.числе и CP/M с кучей программ.

Невыгодно, когда каждый сделал себе своё железо, но не может использовать с ним чужие программы. И для этого ничего заоблачного не надо. Достаточно для всех устройств, что имеют хождение, опубликовать их подпрограммы низкого уровня.

И ещё мне обидно, что для обычного СПЕЦИАЛИСТА никто так и не удосужился сделать DOS. Хотя бы CP/M. Тем более, когда к нему годится даже оригинал RK-DOS. То что это не сделали, чётко означает, что в 1994 СПЕЦИАЛИСТ окончательно умер, так и не дождавшись RK-DOS. Вот почему справедливо будет это исправить.

Не люблю обещать (это меня напрягает), но постараюсь сделаю для СПЕЦИАЛИСТА некоторые программы, в частности, НОРТОН и хотя бы тестов редактор.


я не создатель мониторов на Специалист
Мониторы ковырять и оптимизировать интересно и к тому же, при наличии IDA, - просто.

makbar
01.12.2017, 09:48
Видимо имеется ввиду буфер, через которые CPU может читать 38-ю и 39-ю ноги ВГ93. Это немного экономит, я это знаю.
мне этого было достаточно чтобы написать устойчивый код на стандартном Специалисте.




Не получится, при формате нельзя будет записать произвольный блок данных. Сектора заполняются кодом E5, а другие байты являются служебными.
деталей не помню, почитайте доку на wd1793:

http://maksoft.myjino.ru/pict/or_wd1793_rwtrack.jpg

dk_spb
01.12.2017, 10:39
деталей не помню, почитайте доку на wd1793:
Напомню. У wd1793 есть четыре варианта размера сектора: 128,256,512,1024. Другие размеры DATA FIELD не поддерживаются. И это аппаратное ограничение.

makbar
01.12.2017, 11:24
Это гораздо более эффективная идея, хотя и не новая. Так сделано в одном компьютере, не помню, где об этом читал. Только там эти сигналы переключают не старшие адреса, т.к даже смена адреса A7 сделает переход на 256 адресов. Только не понял, это идея была Вами в своё время реализована или пришла в голову в намного более позднее время.
Эта идея пришла мне в голову когда меня попросили "хакнуть" "защищенную" EPROM от АОНа, году так в 91-92м. Там умники записывали небольшой участок ПЗУ, не соблюдая режимы, и инфо в этом участке плавала. Код проверял нестабильность участка и если он таков -исправно работал,а если он стабилен (как у любой копии) то посылал подальше. Я решил, что просто возьму в 2раза больший чип ПЗУ и буду случайным образом коммутировать старший разряд адреса))) например от тактового генератора через TM2. Тогда же похожее решение организовал для ФАПЧ КНГМД, и если бы не решил вопрос скорости опроса ВГ93, то и применил бы для кода BIOS. Но обошлось.

- - - Добавлено - - -


Напомню. У wd1793 есть четыре варианта размера сектора: 128,256,512,1024. Другие размеры DATA FIELD не поддерживаются. И это аппаратное ограничение.
Да, действительно, ну и славно, вполне достаточно. А главное - стандартно!

CodeMaster
01.12.2017, 11:25
не понятно правда зачем это нужно)) это первое.

Сейчас есно незачем, а тогда это был вариант обойтись без дефицитной ВГ93. Вариант с увеличением объёма дискеты думатцо серьёзно рассматривать не стОит, т.к. не думаю, что было так много софта, чтобы испытывать сильный дискомфорт, плюс работа с дискетой нагружает проц. Просто это упомянули как следствие используемой схемы, он ИМХО это не было целью.

Denn
01.12.2017, 11:32
Надо взглянуть и сравнить п/п-мму контроля готовности. Эти сигналы лучше читать по битам D0 и D7...

Красота неописуемая, кстати:



XRA A
LXI H,<тот самый регистр DRQ и INTRQ>

LOOP:
XRA M
JP LOOP
...


Короче не придумать!

makbar
01.12.2017, 11:43
а тогда это был вариант обойтись без дефицитной ВГ93.
дефицит был условный, ибо контроллер требовался всем! и спектрумам и орионам и даже специалистам.
(Правда сужу по Москве тех лет)

И думаю, что это (флопик) был единственный приличный кроссплатформенный способ обмена информации того времени. По крайней мере у меня был доступ еще к укнц и IBM286...

- - - Добавлено - - -


Короче не придумать!
это откуда? ;)

LeoN65816
01.12.2017, 11:51
И еще.... взять ПЗУ с досом в 4 раза больше размером нужной и завести DRQ и INTRQ на старшие разряды адреса этой ПЗУ))
и соответствующим образом расклонировать программу на 4 части, обеспечивая ветвление, не тратя время на команду условного перехода. Араведерче.
Абсолютно нежизнеспособная идея...
Вот представьте: выполняется код в какой-то (одной из четырех) странице ПЗУ, в какой-то момент времени прочитался опкод операции загрузки какого-то регистра из памяти (1), следующими двумя машинными циклами должны прочитаться два операнда, являющиеся адресом ячейки памяти, из которой далее этот регистр должен загрузиться, однако в (1) произошло переключение страницы ПЗУ (из-за изменения DRQ/INTRQ) и вместо правильных операндов читается что-то другое из другой страницы... Не?... :confused:

makbar
01.12.2017, 11:56
Абсолютно нежизнеспособная идея...
Вот представьте: выполняется код в какой-то (одной из четырех) странице ПЗУ, в какой-то момент времени прочитался опкод операции загрузки какого-то регистра из памяти (1), следующими двумя машинными циклами должны прочитаться два операнда, являющиеся адресом ячейки памяти, из которой далее этот регистр должен загрузиться, однако в (1) произошло переключение страницы ПЗУ (из-за изменения DRQ/INTRQ) и вместо правильных операндов читается что-то другое из другой страницы... Не?... :confused:

коды во всех 4-х страницах одинаковы за исключением пары-тройки байт в командах JMP.

Denn
01.12.2017, 12:22
это откуда? ;)

Да вот, расковырял у кое-кого в SPDOS... ;)

- - - Добавлено - - -

LeoN65816, изменения DRQ/INTRQ просто так внезапно не случаются, они являются следствием команд от ПО. Так что этот процесс вполне можно контролировать.

makbar
01.12.2017, 12:26
LeoN65816, изменения DRQ/INTRQ просто так внезапно не случаются, они являются следствием команд от ПО. Так что этот процесс вполне можно контролировать.
они конечно случаются внезапно, но мы будем к этому готовы. Естественно, на старшие разряды адреса ПЗУ эти сигналы пускать через защелку. Ну и код по страницам отличается только в JMP.

Denn
01.12.2017, 12:39
они конечно случаются внезапно, но мы будем к этому готовы. Естественно, на старшие разряды адреса ПЗУ эти сигналы пускать через защелку. Ну и код по страницам отличается только в JMP.

Имеется в виду следующее. Дали команду и ушли на цикл ожидания. Флопик схавал команду не моментально, а значит по коду мы гарантированно успеем уйти на причинный цикл ожидания. Дальше действительно изменения прилетят "внезапно" по меркам ПО (но мы к этому готовы - причинный цикл ожидания), и после этого события никаких самопроизвольных изменений не будет, стало быть у кода будет возможность полностью отработать без "прерываний посреди дороги".

makbar
01.12.2017, 13:03
Denn, я тебя понял. согласен.

barsik
01.12.2017, 13:18
Абсолютно нежизнеспособная идея...
Ставим КП11 на переключение одного из адресов ПЗУ, допустим A4. КП11 переключает на вход ПЗУ то A4 от КР580, то бит готовности из ВГ93.

Ставим схему совпадений на область, например FFF0...FFFF, и когда процессор читает из этой области, то формируется сигнал на входе SELECT КП11, что приводит к тому, что на A4 ПЗУ поступает сигнал прямо, с обьединённых диодами 38-мой и 39-той ноги ВГ93.

В ПЗУ по адресу FFF0 стоит команда JMP FFF0, т.е процессор зациклен в бесконечной петле. Процессор выдаёт команду в ВГ93 на чтение сектора и затем делает JMP на FFF0, где и зависает в бесконечной петле. При этом на адрес A4 ПЗУ скоммутирован бит готовности с выхода ВГ93. ВГ93 считав байт с дискеты, выставляет готовность (на ногах 38 или 39), отчего на адресе A4 изменяется сигнал. И процессор читая из адресов FFF0...FFFF реально читает содержимое ПЗУ по адресу FFE0, где стоит процедура чтения очередного байта из ВГ93, засылка его по (HL), увеличение HL и снова JMP на FFF0.

Тут есть нюансы с синхронизацией, уровнями и т.п. но основная концепция такая. Я привёл вариант с ПЗУ, т.к именно коммутация ПЗУ обсуждалась, но эта же идея работает если коммутировать не адреса ПЗУ, а всего один бит читаемый из ПЗУ (как младший адрес).

Но все подобные химические варианты громоздки. Достаточно вторым этажом поставить 1 триггер 155 ТМ2, кинуть пару проводков и заменить кварц 8 МГЦ на 9 МГЦ. Одним выстрелом куча зайцев - и CPU скворчит быстрее, и экран целиком влезает в телевизор и НГМД нормально пишет, причем с более простым типовым контроллером от "Корвета", без доп.микросхем для 38-й ноги.


дефицит ВГ93 был условный
Во-первых, про доступность ВГ93.

В крупных городах были нелегальные радиорынки, где ВГ93 были доступны еще в 1988, когда начали ставить TR-DOS в ZX-Spectrum. Я без всяких проблем купил ВГ93 в 1989. Но для предприятия выпускающего МИКРОШУ получить поставку ВГ93 возможно было проблемой, т.к продукция МЭП распределялась министерствам и заводам поштучно.

Но дело вовсе не в дефицитности или доступности, а в том, что простым способом, т.е заимствуя программу и контроллер от "Корвета" в РК86 дисковод не поставить, т.к в ней стоит идиотский ПДП, который каждые 8 МКСЕК рвёт прогон программы.

Можно конечно отключать ПДП, гасить экран (как при вводе с МГ) и читать из ВГ93, попутно делая каждые 20 команд POP, чтобы ОЗУ регенерировалось. Но сидеть с погашенным экраном по пол-минуты неприятно. Кроме того на DD скоростей РК86 всё-равно не хватало. А те же 400 кб даёт и РК-КНГМД, причём с большей надёжностью.

Поэтому остаётся только вариант с ПДП, и как я ранее указывал, такой вариант работал на РК86 уже в 1989 (один КООП продавал это, но спроса не имел, т.к дисководы ещё стоили очень дорого, более 500 рублей). В общем, проблема была в том, что для РК не нашлось грамотного программиста и аппаратчика, кто бы смог разработать свой вариант с использованием второго канала ПДП. Это смогли сделать (или где-то достали ИНФО) только инженеры завода, где выпускались ПАРТНЁРЫ. Но и там массового выпуска КНГМД не было.

Поэтому фанаты РК86 до 01.1993 сидели без дисковода. Затем появился Е.Седов и решил разом проблемы дисковода и для РК86 и для СПЕЦИАЛИСТА. Хотя СПЕЦИАЛИСТ к тому времени частично "умер", частично был конвертирован в MX, где дисковод уже был по варианту Л.Афанасьева из Барнаула.

- - - Добавлено - - -

Есть ещё один вариант решения скоростной проблемы СПЕЦИАЛИСТА при работе с дисководом.

Это если кому-то обязательно надо сохранить такт CPU ровно в 2 МГЦ. Тогда кроме выше-упомянутых "химических" способов, остаётся только замена КР580 на 1821ВМ85 (8085). В котором есть однобитовый вход, позволяющий быстрее проверять аппаратный флаг готовности ВГ93.

LeoN65816
01.12.2017, 13:27
Неужели 64 такта (MFM 250Кбит/с, тактовая 2МГц) или 80 тактов (тактовая 2.5МГц) не хватает на чтение/запись байта и поллинг запроса данных? В АГАТе 32-х тактов свободно хватает.

Denn
01.12.2017, 13:43
На Орионе с тактом 2,5 МГц мне удалось "обмануть физику" так:



; PЕГИСТРЫ УПРАВЛЕНИЯ КОНТРОЛЛЕРОМ:

;RG_CMD:EQU 0F700H; Р-Р КОМАНД/СОСТОЯНИЯ
;RG_TRK:EQU 0F701H; Р-Р ДОРОЖКИ
;RG_SEC:EQU 0F702H; Р-Р СЕКТОРА
;RG_DAT:EQU 0F703H; Р-Р ДАННЫХ

LD_SECT:
; I: [BC] - RG_DAT
; [DE] - RG_CMD
; [HL] - АДР.НАЧ. target
JMP LDCIKL

LDCIK0:
MOV M,A
INX H

LDCIKL:
; ЦИКЛ ЧТЕНИЯ СЕКТОРА
LDAX D ; = IN RG_CMD
ANA C ; = ANI 03H
JPO LDCIKL
LDAX B ; = IN RG_DAT
JNZ LDCIK0
...


Причём счёт буквально на единицы тактов МП! Если вместо "ANA C" ставим "ANI 03H", то не успеваем.
Везение тут получилось очень удачное, младшая часть адреса регистра данных как раз содержит значение маски нужных битов 03h, в итоге "долгую" команду "ANI 03H" (7 тактов) удалось заменить на равнозначную "быструю" "ANA C" (4 такта), и "пазл сложился".
Ну и игра с флагом чётности тоже очень в кассу.
Если бы не эти два обстоятельства, то иначе не получилось бы разрулить без аппаратного регистра DRQ/INTRQ.

makbar
01.12.2017, 14:14
Поэтому фанаты РК86 до 01.1993 сидели без дисковода.
А почему бы тогда не сколхозить было бы отдельную минисвязку вм80-вг93, которая бы добывала данные с диска для основной платы РК?


Во-первых про доступность ВГ93.
Я проехал мимо РК помнится, только потому что достать вг75 было вообще невозможно.

Denn
01.12.2017, 14:21
А почему бы тогда не сколхозить было бы отдельную минисвязку вм80-вг93, которая бы добывала данные с диска для основной платы РК?

СОЗУ на 1 кб (макс. сектор) + обвязка ВГ логикой на чтение/запись сектора, РК общается с СОЗУ через порт. По идее должно получиться менее масштабно, чем со вторым ВМ80...

Хотя ещё же форматирование ((

Denn
01.12.2017, 15:04
Имхо, регистр на DRQ/INTRQ проще, чем замена проца.

HardWareMan
01.12.2017, 15:49
Denn, я на штатном Орионе успевал чуть-чуть более топорно:

;Управление Регистром
CTR:LDA 0F700H
ANI 01H
JNZ CTR
MOV A,C
STA 0F700H
RET
;Запись данных с синхронизацией
DAT:LDA 0F700H
ANI 01H
JNZ DAT
MOV A,C
STA 0F703H
RET
;Чтение сектора SEC-СЕКТОР, TRK-ДОРОЖКА
;Длинной в 512B
INS:PUSH H
PUSH D
PUSH B
LDA TRK
ANI 1H
ORI 0EH
STA 0F602H
LDA TRK
ANI 7EH
RRC
MOV C,A
CALL DAT
MVI C,18H
CALL CTR
LDA SEC
INR A
STA 0F702H
CALL RED
MVI C,80H
CALL CTR
LXI H,BUF
LXI D,0F703H
MVI C,82H
IN0:LDA 0F700H
ANA C
JZ IN0
LDAX D
MOV M,A
INR L
JNZ IN0
INR H
IN1:LDA 0F700H
ANA C
JZ IN1
LDAX D
MOV M,A
INR L
JNZ IN1
LDA 0F700H
POP B
POP D
POP H
RET

Цикл пришлось разбивать из-за того, что обработку двух байт размера уже не успевал (+2 команды). А вот если бы штурманул был плотнее - сделал бы как у тебя. MS-DOS дискеты с FAT12 работали на ура. И да, он не зависла, если RDY снимался - просто забивал буфер последним статусом, который и возвращался для обработки ошибок. ;)

Denn
01.12.2017, 16:35
HardWareMan, к своему варианту я пришёл перепробовав многое. У меня, к сож, только так работает стабильно.
LDA 0F700H (13 тактов) вместо LDAX D (7 тактов) уже не прокатывает.
Плюс у меня ещё стояла задача не читать лишнего (последний байт за пределами сектора), собственно из-за этого пришлось городить огород с заходом в середину цикла.

П.С. У тебя получается тоже через ANA C, но маска почему-то 82H... имхо, контроль неготовности в цикле чтения не нужен, т.к. таковая по-любому проверяется на предыдущих этапах (позиционирование головок). А вот младший бит чекать надо, емнип он отвечает за окончание процесса (в т.ч. преждевременное, по ошибке).

HardWareMan
01.12.2017, 22:33
П.С. У тебя получается тоже через ANA C, но маска почему-то 82H... имхо, контроль неготовности в цикле чтения не нужен, т.к. таковая по-любому проверяется на предыдущих этапах (позиционирование головок). А вот младший бит чекать надо, емнип он отвечает за окончание процесса (в т.ч. преждевременное, по ошибке).
Ты не поверишь, но у меня зависал если была ошибка "Адресная метка не найдена". А анализ готовность срывал цикл в быстрый прогон как только мотор остановлен контроллером. Я уже писал об этом.

Pyk
03.12.2017, 18:14
Если у кого-то есть желание поэкспериментировать в эмуляторе с РК КНГМД на Специалисте, я могу попробовать сделать соответствующий конфиг для Emu80. На первый взгляд это даже не потребует доработки самого эмулятора.

zx_
03.12.2017, 19:42
Pyk, желание есть, спасибо большое -)

Pyk
03.12.2017, 22:28
zx_, ок, тогда нужны конкретные предложения - по каким адресам разместить контроллер и саму РК ДОС, в какой версии Специалиста (наверное обычный, не MX)? Также кому-то нужно будет в перспективе адаптировать РК ДОС или хотя бы для начала написать тесты для проверки работоспособности...

barsik
04.12.2017, 05:02
Так в этом-то и прелесть, - ничего менять не надо. Ни адреса RK-DOS, ни сам код RK-DOS. И, естественно, тогда и адрес РК-КНГМД тот же - F000. Это самый тупой лобовой вариант.

Спойлер

Как недостаток при этом приходится вводить перемычку-конфигуратор переключающую чип-селект ПЗУ F000...F7FF и выборку РК-КНГМД. Можно обойтись и без перемычки, извлекая ПЗУ F000 при вставке в слот РК-КНГМД, и наоборот, вытаскивая из слота плату РК-КНГМД, когда требуется ставить 7-мое ПЗУ. Но обычно шесть ПЗУ хватает.

При необходимости, т.к к адресам РК-КНГМД обращается только DOS и форматёр, то перетранслировав их, легко изменить адрес РК-КНГМД с F000 на FC00 (это типичный адрес КНГМД на СПЕЦИАЛИСТЕ). При этом 7-мое ПЗУ или ОЗУ в адресах F000...F7FF можно будет сохранить.

Другой недостаток в том, что основное ОЗУ используется не по максимуму, а т.к управляющие ячейки DOS на 7500, то даже не считая раб ячейки ПЗУ РК86 (7600...76D0) в СПЕЦИАЛИСТЕ впустую пропадает ОЗУ от 76D0 до RAMTOP СПЕЦИАЛИСТА, т.е 76D0...8F60. Понятно, что труд на 8 секунд перетранслировать на 4 кб выше, получив тем самым, на 4 кб большее TPA.

К сожалению, RK-DOS написана с полным игнорированием мирового опыта по написанию DOS (зато компактная). А именно, она управляется не функциями, как все другие DOS, а ячейками, адреса которых жёстко фиксированы. И все прикладные программы управляют DOS ячейками в области 7500. Если же адреса этих ячеек перенести под RAMTOP, то перестанут работать не только все дисковые программы от РК86, но и командные SYS-файлы.

Учитывая, что для СПЕЦИАЛИСТА программ длиннее 7000 очень мало, то такой лобовой вариант выглядит предпочтительнее, чем DOS с высоким TPA. Точнее разумно иметь две версии RK-DOS. Одну базовую 100% совместимую, а вторую с высоким TPA. А лучше, - эту совместимую RK-DOS, позволяющую грузить программы размером до 28 кб и CP/M, которой можно грузить программы размером до 35.5 кб.

Как плюс такой вариант даёт отстутствие лишнего труда на перетрансляцию для других адресов. В общем-то, базовую RK-DOS в ПЗУ E000...EFFF следует рассматривать лишь как средство отладки системы и средство получить доступ к программам от РК86.

Несколько слов о ПЗУ. Учитывая, что топик стартер будет использовать РК-КНГМД на плате ЭКСПРЕСС, возможны варианты.

Самый простой вариант, когда на плату ставятся 3 ПЗУ РФ2, а в области D800...F7FF не стоит ничего. Тогда RK-DOS можно ставить на плате РК-КНГМД или на плате ЭКСПРЕСС. В обоих этих случаях две РФ2 напаиваются в 2 этажа. На плате ЭКСПРЕСС этот бутерброд ставится в 28-ми ногую панельку (позаботившись, чтобы на 24 и 21 ноге было +5 В).

В области E000...EFFF может стоять ОЗУ, ПЗУ или ничего. Чтобы не возникло конфликта по шине, при установке РК-КНГМД, требуется снимать с основной платы ПЗУ E000 и E800.

Если же используется огромное ПЗУ 27128 установленное в окне 14 кб, то, во-первых, надо обеспечить, чтобы по адресу F000 этого ПЗУ не стояло (на плате "Восточный Экспресс" вероятно для этого достаточно перекусить один диод), потому что чип-селект /F000 подаётся на РК-КНГМД.

Как выше указано, не представляет проблемы перенести адрес КНГМД на FC00 (и я даже могу сделать форматёр автоматически настраивающийся на адрес РК-КНГМД). Также можно сделать и RK-DOS с автонастройкой на адрес РК-КНГМД, но такая версия должна работать в ОЗУ 7800 (грузиться из ПЗУ). Перенос адреса РК-КНГМД на FC00, позволит использовать ПЗУ в полном окне 14 кб, что в случае двух страниц из 27256 даст 28 кб ПЗУ.

makbar
04.12.2017, 18:20
Имхо, регистр на DRQ/INTRQ проще, чем замена проца.
вот именно. что-то подсказывает, что был бы у меня РК а не Специалист тогда... я бы все равно смог прикрутить ВГ93. Мне деваться было некуда, мне надо было хранить образы ПЗУшек.
С другой стороны, я рад , что собрал именно Специалист (а потом прикупил готовую плату Ориона). Потому что для целей программатора их архитектура подходила идеально, включая битовое отображение памяти на экран. Мой софт программатора использовал это, визуально отображая зашиваемую область, так сказать, в процессе)

zx_
04.12.2017, 18:46
Pyk, ориентироваться можно на исторические ориентиры -)

«а также на ЭВМ "СПЕЦИАЛИСТ-48К" (ленинградский мони-
тор, имеющий вызовы F800) совместно с КНГМД по схеме из журнала РАДИО N1-2 1993»
«ЭВМ "СПЕЦИАЛИСТ" уже имеет "чип-селекты" E000,E800 и F000
и поэтому установка дешифратора не требуется. »
http://sensi.org/~tnt23/rk86/index.html

и еще , физически это попытка к Специалист Экспресс подключить РК КНГМД, тоесть увидеть возможные неудачи при создании эму былобы супер
рекомендации по подключению , так сказать

fifan
04.12.2017, 21:11
физически это попытка к Специалист Экспресс подключить РК КНГМД, тоесть увидеть возможные неудачи
Этого я тоже боюсь.

Pyk
04.12.2017, 22:54
Понял, попробую набросать конфиг - посмотрим, что из этого получится...

- - - Добавлено - - -

Вот, сделал конфиг и отдельную сборку с его автозапуском:
http://emu80.org/temp/Emu80_sprkfdc.zip

В РК-ДОС изменил адреса вызовов F803, F809, F812 и F818 на C8xx.
Похоже, что С812 в Специалисте работает немного не так, как F812 на РК - приходится постоянно нажимать Enter, чтобы что-то изменилось на экране.

В общем, в основном работает, но требует дальнейшей доводки:

http://emu80.org/temp/sprkfdc.png

- - - Добавлено - - -

P.S. Exe без изменений, новый только конфиг.

barsik
06.12.2017, 14:24
В РК-ДОС изменил адреса вызовов F803, F809, F812 и F818 на C8xx
Не понял, зачем переделывать RK-DOS с целью поменять адреса в самой RK-DOS.

Так конечно будет работать и без узла совместимости с ОРИОНОМ и РК86 (что переадресует адреса F800...F8FF на C800). Но зачем менять программы, их же много, если 2 диода снимают проблему. ИД7 на область F800...FFFF всё-равно ставить, если пользователь хочет иметь В/У. Когда есть совместимость по вызовам F800, то системные программы для RK-DOS для всех 3-х типов компьютеров с ней (РК, ОРИОН, СП-Т) могут использовать одни и те же программы.

В общем, не понял есть ли в эмуляторе уже узел совместимости или нет. Т.е что будет если сделать CALL F803 - завис или ввод с клавиатуры ?


Похоже, что С812 в Специалисте работает немного не так, как F812 на РК - приходится постоянно нажимать Enter, чтобы что-то изменилось на экране
Не помню такого. Т.е не помню, что бы мне пришлось переделывать ROM-BIOS. Правда я использовал другой ROM-BIOS. А вообще орловский монитор левый, у него есть и другие несовместимости.

F812 на РК если есть нажатие, считывает символ и кладёт его в однобайтовый буфер. Так, якобы, имитируется аппаратная клавиатура. А авторы ПЗУ ОРИОНА и Орлов этого не знали и не имплементировали. Поэтому, когда скорость CPU мала по F812 возвращается флаг о наличии символа в буфере. Получив флаг готовности CPU лезет в F803, чтобы этот символ забрать, но клавиатуру уже отпустили и он подвесает в F803 до следующего нажатия. Это та же самая проблема, что возникает при попытке использовать игры от РК на ОРИОНЕ.

Позднее, возможно попробую написать монитор C800 более совместимый с РК86, а возможно даже встрою туда эмулятор РК86. Я уже делал так на ОРИОНЕ. Для получения совместимости надо "писать в" и реально использовать все раб.ячейки ПЗУ РК86, а Орлов сделал просто халяву, переадресовал на похожие п/п-ммы загрузчика, хотя принципы совершенно разные.

А экранный эмулятор делается так. Любая из следующих п/п-мм ПЗУ F803, F809, F812, F815, F818, F82D проверяет простейший аппаратный таймер, благодаря чему "узнает", что прошло более 0.4-0.8 секунды. И тогда копирует экран РК86 в экран ОРИОНА. Т.е экран ОРИОНА всегда повторяет экран РК86, даже если туда символы попали прямой наглой записью прямо в экранное ОЗУ. Т.о если и ROM-BIOS работает правильно, то получается 100% совместимость с РК86 (за исключением программ идиотов, которые лезут прямо внутрь ПЗУ F800, к сожалению таких придурков довольно много).

Правда, если на ОРИОНЕ, такой эмулятор даёт полную совместимость не только с программами не лезущими в матрицу через ППА, но и при при крошечной переделке (смене адреса порта клав-ры с 8000 на F400) позволяет использовать даже игры лезущие напрямую к матрице клавишш (т.к клавиатуры одинаковые), то на СПЕЦИАЛИСТЕ простейшая замена адреса порта в этом не поможет (надо менять весь алгоритм сканирования РК-матрицы). Но таких игр не так уж много.

Но в общем-то, спасибо. Хотя это ещё не совсем то (по адресации), но уже по крайней мере хоть что-то можно проверять. Т.е делать все системные вызовы на C803,C806,C809... а на адреса F800 перетранслировать уже при трансляции для реала. Это не проблема, если в ассемблере есть условная трансляция.

Pyk
06.12.2017, 21:39
http://emu80.org/temp/Emu80_sprkfdc_2.zip

Добавил "узел совместимости". Сейчас ППА доступен по адресам FF00-FFFF, а на F800-F8FF дублируется ПЗУ из области C800-C8FF (если я правильно понял суть работы этого модуля).
Соответственно, РК ДОС заменил оригинальной версией.

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

Проблема с клавиатурой осталась. Подозреваю, в дело в вызове F812 - вроде бы была в нем какая-то несовместимость между РК и Специалистом (хотя могу и ошибаться).

zx_
07.12.2017, 21:30
Pyk, еще лениградский монитор вроде нужен, а у вас монитор 2 в эму
лениградский здесь
http://zx-pk.ru/threads/27540-leningradskij-monitor-i-drugie-programmy-dlya-spetsialista.html?p=906478&viewfull=1#post906478

подменял в конфиге сам , чот не вышло , ругается на переменную ром 2 и падает -)

barsik
07.12.2017, 22:26
лениградский монитор вроде нужен
Для RK-DOS годится любой монитор. Имеющий входы F803, F809, F812 и F82D.

Ленинградский монитор удобен и полезен именно для МГ-варианта компьютера, т.к он имеет автонастройку на скорость записи и удобный бегущий счетчик в правом верхнем углу, показывающий при вводе, куда грузится очередной байт. Так что сразу видно, что не произошёл улёт, что синхробайт схватился и ввод идёт.

Чтобы было всеядно к ПЗУ и не надо было ставить ИД7 и 2 диода, лучше всего в коде RK-DOS заменить п/п-мму ввода с клавиатуры, она там всего одна. Так, как у меня сделано в версии RK-DOS для ОРИОНА. Также для экономии места там разумно убрать инициализацию ВГ75. Завтра займусь этим и сделаю RK-DOS в нужном виде, причём, чтобы были только только вызовы ROM-BIOS.

Что хорошо тем, что в таком варианте не нужно иметь ПЗУ C800 с монитором, отчего в ПЗУ останется больше свободного места, что можно открыть ОЗУ C800...F7FF размером в 12 кб, доведя полезный объём ОЗУ до 60 кб.

Можно получить без-магнитофонный вариант загрузчика. Для чего достаточно выкинуть из ПЗУ все магнитофонные подпрограммы, а в освободившееся место встроить что-то иное.

Кстати при установке ВИ53 требуется слегка изменять ПЗУ загрузчика C000, т.к из-за того, что в ВИ53 нет входа RESET, он при включении питания верещит, как недорезанный. Чтобы он заткнулся, надо его программно инициализировать.

Адресация В/У СПЕЦИАЛИСТА следующая (все адреса не от балды, а исторические, т.е кто-то когда-то их ввёл и реально поддержал).

FF00 - ППА клавиатуры
FE00 - доп.ППА для УФ-прошивателя, принтера и SD-карты
FD00 - гуделка 580 ВИ53

Эти адреса ввёл и поддерживал SP580. Позднее были добавлены следующие адреса:

FC00 - контроллер НГМД на базе ВГ93 по схеме Корвета

Теперь разумно добавить

FB00 - РК-КНГМД (чтобы как в РК не тратить 2 кб F000...F7FF на его чип-селект)
FA00 - управление режимом экрана (mode 0/mode 1/mode 2)
F900 - D0...D6 переключение банок по 48/60 кб, FULL RAM битом D7 (факультатив)
F800 - в плате с большим ПЗУ переключение 8-ми страниц 27512 в окне C000...DFFF

Адреса для винчестера и AY-8912 уже не осталось. Но т.к типов КНГМД двое, то незадействованный чип-селект и пойдёт на винчестер. А AY-8912 не нужен одновременно с ВИ53, т.е или ВИ53 или AY-8912.

Pyk
07.12.2017, 23:01
Боюсь, что с ленинградским монитором могут быть проблемы при чтении файлов rks из-за процедуры автонастройки скорости.
Будет время - поэкспериментирую с ним...

barsik
07.12.2017, 23:52
могут быть проблемы при чтении файлов rks из-за процедуры автонастройки скорости

Это не проблема, т.к настройка на скорость - это подпрограмма CALL CNST. Достаточно этот CALL забить, например код CALL, т.е байт CDH перепрошить в байт 21H (или все 3 байта заменить на нули), тогда при вводе с МГ ячейка CLD останется той, что инициализируется по сбросу (3CH для 2 МГЦ, 4CH для 2.5 МГЦ). Удаление процедуры автонастройки освободит в ПЗУ загрузчика 89 байтов для других нужд.

Кстати, в эмуляторе B2M с этим проблем не было, работало оригинальное ПЗУ. Вот процедура определения константы чтения по пилотону.



; ОПРЕДЕЛЕНИЕ КОНСТ.ЧТЕНИЯ
; (C) В.ИВИНСКИХ
; ЛЕНИНГРАД - 1988

.8080
cseg

PORTB EQU 0FF01H
CLD EQU 08FFFH

CNST: MVI D,150 ; КРИТЕРИЙ ЗАХВАТА - 150
CNS2: MOV B,C ; ОТМЕТОК ПОДРЯД
CALL CNS10
JZ CNST
MOV A,C
SUB B
JNC CNS3
CMA
INR A
CNS3: CPI 8 ; КРИТЕРИЙ ПРОПУСКА ОТМЕТКИ
JNC CNST
DCR D
JNZ CNS2
CNS4: LXI H,0 ; ПОЙМАЛИ ПИЛОТОН
MOV B,L
MVI D,178 ; ДЛИНА УЧАСТКА ПОДСЧЕТА
CNS5: CALL CNS10
JZ CNS4
DAD B
DCR D
JNZ CNS5

;* РАСЧЕТ КОНСТАНТЫ ЧТЕНИЯ

DAD H
MOV A,H
SUI 3
MOV L,A
ORA A
RAR
ADD L
STA CLD ; КОНСТАНТА ЧТЕНИЯ
RET

CNS10: LDA PORTB ; ПОИСК 0 И 2-Х ПЕРЕПАДОВ
CPI 80H
JC 0C800H
RRC
JC CNS10

MVI E,0
MVI C,0
CALL CNS11
CNS11: INR C
RZ
LDA PORTB
RRC
XRA E
JP CNS11
MOV A,E
CMA
MOV E,A
RET

END

zx_
08.12.2017, 12:01
Добавил "узел совместимости". Сейчас ППА доступен по адресам FF00-FFFF, а на F800-F8FF дублируется ПЗУ из области C800-C8FF (если я правильно понял суть работы этого модуля).

думаю это не правильно, в оригинале написано про доп дешифратор на F800
как в SP580
вот , нашел конфигурацию ему для SP580
http://zx-pk.ru/threads/15172-spetsialist-proshivki-pzu.html?p=581476&viewfull=1#post581476

мож к нему попробовать подключить, без узла совместимости
с монитором SP580

Pyk
08.12.2017, 21:59
zx_, ну вот, я этот дешифратор и реализовал. После этого

ППА доступен по адресам FF00-FFFF, а на F800-F8FF дублируется ПЗУ из области C800-C8FF
А на SP580 не только без модуля подключить не получится, но даже и с этим модулем - распределение адресов портов другое, как я вижу, проще сделать на оригинальном Специалисте. Адреса ППА, обслуживающего клавиатуру и магнитофон, пересекаются с адресами контроллера РК НГМД.

zx_
09.12.2017, 06:33
и как это сделать? только саму ДОС пересобирать под другие адреса?
или аппаратно както можно
Pyk,

barsik
09.12.2017, 10:49
Как это сделать? Только саму ДОС пересобирать под другие адреса?
Или аппаратно как-то можно?
Если я правильно понял в своём предыдущем посте Pyk говорил о варианте SP580, где другая адресация В/У, чем в классическом СПЕЦИАЛИСТЕ. И что адрес порта РК-КНГМД для оригинала RK-DOS равный F000 с чем-то там совпадает.

А у классического СПЕЦИАЛИСТА, по крайней мере в самом базовом виде, т.е без доп.ППА на адресе F000 ничего не должно стоять. Иногда на F000 ставят 7-мое ПЗУ РФ2 (но это бывает редко, т.к нечего прошивать), а иногда когда из внешних устройств лишь два ППА, то из экономии дешифратор на область F800...FFFF не ставят, а чип-селект F000 используют для подключения доп.ППА (предназначенного для принтера, УФ-прошивателя и ROM-диска).

Таким образом имеют хождение два адреса для подключения доп.ППА - это FE00 и F000. Именно потому во всех грамотных программах обслуживания УФ-прошивателя адрес доп.ППА запрашивается.


Проблема с клавиатурой осталась. Подозреваю, в дело в вызове F812
Да, Вы совершенно правы. Это типичная проблема, что всегда возникает при конверсии РК-игрушек на ОРИОН.

RK-DOS после вывода очередного сивола на CONOUT таким типовым для РК (но не для ОРИОНА) образом проверяет не нажал ли пользователь ^C (или F4). Если нажато ^C то делается переход на адрес из ячейки BREAK. Для исправления достаточно сразу после CALL COUT (т.е F809) поставить RET. Ну а чтобы всё-же осталась реакция на ^C надо сделать вот такую коррекцию. В комменте оставлен оригинальный вариант п/п-ммы.



.
OUTCON: CALL COUT ; здесь для ОРИОНА д.быть переделка
LD A, C
CP 13
RET NZ
LD C, 10
CALL COUT
CALL XF81B
CP 3
RET NZ
JP AE5BE

.comment \ это исходный вариант подпрограммы

OUTCON: CALL COUT ; здесь для ОРИОНА д.быть переделка
LD A, C
CP 13
RET NZ
LD C, 10
CALL COUT
CALL STAT
OR A
RET Z
AECEB: CALL CONIN
CP 20H
JP Z, AECEB
CP 3
RET NZ
JP AE5BE
\



Боюсь, что с ленинградским монитором могут быть проблемы при чтении файлов
Проблемы есть. Уже хотя бы с цветом. Этот монитор использует свободные биты ППА не для цвета, а для других целей. Поэтому в мониторе цвет оказывается синим. А в орловском мониторе цвет нормальный, белый. Есть и другие проблемы. Не работает чтение с магнитофона.

barsik
09.12.2017, 15:44
Вот RK-DOS

Это файл RK-DOS для "Специалиста" (с простейшей доработкой, о которой писал выше.). Прошивается в ПЗУ E000...EFFF. Адрес РК-КНГМД F000...F3FF (не меньше). По коду это практически оригинал, хотя адреса меток сдвинуты. Т.е не будет работать на Z80 и не будет работать в системе, где КР580 с ВК28.

Так как вывод в одну колонку по DIR это полный хоккеизм, то здесь вывод по DIR изменён, чтобы выводилось в три колонки.

Будет работать и на РК86. Проверено только в эмуляторе В.Пыхонина, в реале не проверялось.

Скопируйте эти файлы в каталог test_sprkfdc в версии EMU80 с поддержкой РК-КНГМД (http://emu80.org/temp/Emu80_sprkfdc_2.zip) для адреса F000 (что в посте #63) и запускайте EMU80.EXE. После выхода в монитор вводите GE000<ВК>.

Теперь кто-нибудь может заняться формирование (виртуальных) дисков с играми СПЕЦИАЛИСТА. Это можно делать вручную считывая с МГ-ленты и делая SAVE на диск или воспользоваться программой Е.Седова для считывания с ленты на диск.

Попозже, переделаю эту же версию для СПЕЦИАЛИСТА на Z80 (что получается заменой команд OUT на команды LD). А также форматёр и ту же RK-DOS, но для адреса порта FB00.


Т.к сверху объём кода RK-DOS ограничивает адрес РК-КНГМД, то больше в таком объёме кода в 4 кб ничего улучшить нельзя. Чтобы получить больший объём пространства, можно или раздвинуть код вниз, т.е занять адреса D800...DFFF, или же вверх, заняв адреса F000...F7FF. В последнем случае адрес РК-КНГМД надо перенести в другое место. Это не особо вредно, т.к напрямую в порт РК-КНГМД лезет только DOS, форматёр дискет и программа контроля скорости колеса, так что перетранслировать их на другой адрес это дело одной минуты.

У меня нет РК-КНГМД, поэтому проверять я могу только в эмуляторе. Если уважаемый Pyk перенесёт адрес РК-КНГМД в область портов СПЕЦИАЛИСТА, а также расширит ПЗУ для DOS до 8 кб на область D800...F7FF, то я сделаю более качественную версию RK-DOS. Которая будет отличаться тем, что для неё будут годиться дисководы без READY и наиболее часто используемые команды DOS, оформленные сейчас в виде SYS-файлов, будут встроены в код DOS, что избавит от излишних хлопот.

Однако лучше, в связи с применением большого ПЗУ 27512 на платах ЭКСПРЕСС, ввести страничное ПЗУ в области C000...EFFF, коммутируемое портом F800. И "открыть ОЗУ" в области E000...F7FF. Тогда DOS может работать в верхнем ОЗУ, загружаясь туда из одной из 8-ми страниц ПЗУ.

Если же ПЗУ на 4-х РФ2 и никаких страниц, то тоже можно уместить RK-DOS размером до 5 кб в ПЗУ C000...EFFF, если выкинуть из ROM-BIOS ненужные вещи, сократив объём с 4 кб до 3 кб. Тогда в оставшиеся 5 кб, можно уместить RK-DOS.

Ещё хотелось бы в эмулятор хотя бы одну баночку ОЗУ, коммутируемую также как в ОРИОНЕ портом F900 (или по OUT F9). Это позволило бы иметь RAM-диск в RK-DOS. RAM-диск в 160 кб встроен во все версии RK-DOS для ОРИОНА и на реале это существенно облегчает копирование на одном НГМД. Но главное, тогда у меня на реале и в эмуляторе была бы одинаковая система.

Если Вы введёте прерывания или тик 5 ГЦ на МГ-входе, то в ROM-BIOS можно включить программно-аппаратные часы, время будет отображаться в правом верхнем углу. В моих всех драйверах ОРИОНА это есть и работает и без тика, но тогда погрешность хода велика.

zx_
09.12.2017, 17:22
barsik, заказал плату РК КНГМД у tnt23, надо думать как сформировать реальную дискету
только посредством магнитофона это возможно?

попробовать только завтра смогу , руки чешутся ) спасибо большое

barsik
09.12.2017, 17:40
barsik сформировать реальную дискету только посредством магнитофона возможно?
В принципе, да, только с магнитофона. Если не считать ещё приём файлов из проводной линии или набор их дампов с клавиатуры, что совсем не смешно. Там были программы, кажется, TAPE.SYS или TAPE2.SYS - они читают файлы с МГ и записывают на дискету. Можете потренироваться в создании дисков с файлами в этом в эмуляторе.

Форматёр я пока в эмуляторе не проверял. Даже если он в эмуляторе не работает, то он не особо и нужен. Можно скопировать имеющуюся виртуальную дискету (назвав файл другим именем), а затем в эмуляторе поудалять все файлы. А после сделать с файла этой дискеты нужное число копий, получив большое количество чистых форматированных дискет. Я так делал в эмуляторе B2M для КНГМД на базе ВГ93, т.к в том эмуляторе форматёр не работает.

В ближайшее время странслирую CHKDSK для RK-DOS, а затем CP/M с очень низким TPA, не для использования, а просто для знакомства. TPA будет всего 24...28 кб (в зависимости от того какой драйвер применю). А когда будет эмулятор с "открытым верхним ОЗУ", то можно сделать CP/M с бОльшим TPA до 35 кб.

А затем займусь Нортоном для РК-ДОС. Раз уж цвет есть в эмуляторе, то, естественно, буду делать сразу в цвете. Жалко только, что цвет убогий, без раскраски PAPER. Окна с таким цветом получатся плохо.

Pyk
10.12.2017, 01:14
barsik, спасибо, полезная вещь получилась, еще бы в железе это попробовать (тем более, что доработки для подключения дисковода требуются на первый взгляд минимальные).
Можно действительно сформировать образы дискет с программами для использования в эмуляторе, но немного смущает одна вещь: в программах могут встречаться обращения к портам клавиатуры не по адресам FFxx, а, например, F8xx. Тогда эти программы придется слегка адаптировать (в основном, наверное, игры).
Форматёр по идее должен бы работать, но я это не проверял. (Для форматирования нужно подсунуть эмулятору пустой файл размером 500000 байт.)

Что же касается доработок - в эмуляторе можно много что сделать, а вот нужно ли? В уже реализованной минимальной конфигурации я вижу практическую пользу - можно подключить дисковод к Специалисту и загружать оттуда файлы, даже в эмуляторе это не помешает. А вот насчет дальнейших доработок... Я могу в конфиге перенести адреса контроллера и расширить ПЗУ, добавить 16-цветный режим из MX, а, доработав эмулятор, также сделать страничное ПЗУ и верхнее ОЗУ с банками, вопрос только - что с этой никогда не существовавшей в реале конфигурацией планируется делать? Будет ли это реализовано потом в реале? Что будем делать потом с той же перенесенной на Специалист CP/M? Или это просто ради искусства - попробовать запустить CP/M на этом компьютере? В любом случае я готов попробовать сделать конфигурацию, нужно только точно определиться, по каким адресам что размещать...

zx_
10.12.2017, 12:14
в программах могут встречаться обращения к портам клавиатуры не по адресам FFxx, а, например, F8xx. Тогда эти программы придется слегка адаптировать (в основном, наверное, игры).
«»

а есть ли способ разделить дешифрацию РК ДоС и ППА клавиатуры Специалиста с « помощью двух диодов «. (С). ?

чтобы не модифицировать ДОС

barsik
10.12.2017, 12:32
спасибо, полезная вещь получилась
Спасибо не мне, а Е.Седову, - я лишь три байта изменил.


Не напрягайтесь, а сделайте лишь то, что можно сделать быстро, просто дописав конфиг за 10 минут. Я не знаю, что конфиг может, а что нет. Потому напишу всё, что желательно.

1. Верхнее ОЗУ. D000...F7FF или в случае если есть страничное ПЗУ, то E000...F7FF. Этот кусок всегда ОЗУ

2. Страничное ПЗУ в окне C000...DFFF. В этом окне в 8 кб читается тот 8-ми килобайтовый кусок ПЗУ 27512, чей номер записан по адресу F800 (кроме бита D7).

3. Если страничное ПЗУ невозможно, то - лишь базовое ПЗУ C000...CFFF, а D000...F7FF всегда открытое ОЗУ. Но в этом случае становится очень желательным ROM-диск. Точто такой же как в ОРИОНЕ, читаемый через доп.ППА. Адрес доп.ППА в СПЕЦИАЛИСТЕ FE00. Назначение портов - то же, через PA читаем, а в PB,PC записываем адрес командой LD (port_B),HL.

4. Адрес РК-КНГМД также надо перенести на FB00, чтобы освободить F000. На F000 никто не лезет. Т.к в варианте без дешифратора на область В/У здесь ставят доп.ППА для УФ-прошивателя.

Это минимум, что позволяет что-то уже делать. Причём это реал, - именно то что будет у всех на платах ЭКСПРЕСС. Т.е большое страничное ПЗУ и верхнее ОЗУ.

Но ещё лучше дать мне хоть одну дополнительную банку, а лучше 8 или даже 16 банок. Коммутация банок идентична ОРИОНУ - портом F900 (или по OUT F9). Отличие в том, что в ОРИОНЕ банка 60 кб, здесь 48 кб (это без верхнего ОЗУ, но его можно не коммутировать).

Если не вводить режим FULL RAM, то каждая банка это 48 кб сплошного ОЗУ. В реале, если открыто верхнее ОЗУ E000...F7FF, то оно тоже в каждой банке своё. Т.е переключается как окно 0...BFFF, так и участок верхнего ОЗУ E000...F7FF. Так это в реале.

Но это не обязательно. Если сделаете, то смогу это использовать, - VDISK будет бОльшего размера, - в каждой банке будет не 48 кб, а 54 кб.

Адреса портов я уже приводил в посте #65. Адресация В/У СПЕЦИАЛИСТА следующая (все адреса не от балды, а исторические, т.е кто-то когда-то их ввёл и реально поддержал).

FF00 - ППА клавиатуры
FE00 - доп.ППА для УФ-прошивателя, принтера, SD-карты и ROM-диска
FD00 - таймер 580 ВИ53 (второй DB53 может быть на FD80)

Эти адреса ввёл и поддерживал SP580. Позднее были добавлены следующие адреса:

FC00 - контроллер НГМД на базе ВГ93 по схеме Корвета

Теперь разумно добавить

FB00 - РК-КНГМД (чтобы как в РК не тратить 2 кб F000...F7FF на его чип-селект)
FA00 - управление режимом цвета (журнальный/расширенный)
F900 - D0...D6 переключение банок по 48/62 кб,
..........FULL RAM битом D7 (факультатив).
F800 - переключение 8-ми страниц ПЗУ 27512 в окне C000...DFFF. Бит D7 отключает ПЗУ совсем

В порту F900 бит D7 пусть включает прерывания 50 Гц, вызывая исполнение RST 38. FULL RAM (т.е отключение блока ПЗУ C000...DFFF битом F800/D7) пока "не горит", но пусть позже было бы неплохо это иметь.

Адреса для винчестера и AY-8912 уже не осталось. Но т.к типов КНГМД двое, то незадействованный чип-селект и пойдёт на винчестер. А AY-8912 не нужен одновременно с ВИ53, т.е или ВИ53 или AY-8912.

Тест для отладки как эмулятора, так и проверки железа в реале написать не проблема. Сделаю это в ближайшие дни.


в программах могут встречаться обращения к портам клавиатуры не по адресам FFxx, а, например, F8xx
Возможно могут быть такие программы. Это тех авторов, кто не дизассемблировал ROM-BIOS и не видел адресации, а ориентировался по принципиальной схеме.

Исправить несложно. Такие игры несложно найти. Запускайте их в этой последней версии эмулятора. И те игры, что не реагируют на клавиши, а в старой версии реагируют присылайте мне.


а есть ли способ разделить дешифрацию РК ДОС и ППА клавиатуры Специалиста с помощью двух диодов? Чтобы не модифицировать ДОС Вопрос не понял.

М.быть Вы имеете ввиду, разделить чтение ПЗУ C800 в области F800...F8FF от адресации ППА на F800. Т.е вопрос в том, что есть ли способы использовать вышеупомянутые игры с адресацией на F800, если такие найдутся, в СПЕЦИАЛИСТЕ с дешифратором В/У на область F800.

Это можно, то тогда утратится совместимость с ОРИОНОМ и РК86 по вызовам F803, F806, F809... А это гораздо важнее, чем несколько игр, исправить которые не проблема. Чтобы игра адресующая ППА клавиатуры как F800 работала в машине с дешифратором ИД7, достаточно убрать диоды (или ЛИ1) дающие совместимость с РК и поставить два диода объединив чип-селект F800...F8FF (7 нога ИД7) и чип-селект FF00...FFFF. Тогда ППА будет адресоваться в обоих областях, что используются программами. Хотя мне кажется, что программ для ППА F800 мало.

zx_
10.12.2017, 15:32
создал пустой файл fsutil file createnew c:\500.rkdisk
создался , подключил в эмуляторе alt b
FORMAT B:

бла бла , потом
FORMATING DISK ...
I/O ERROR

не форматирует почемуто

бейсик плюс работает

судя по конфиг файлу ЕМU в Специалисте вообще никаких изменений для работы с РК ДОС 2.9/S. от barsik,

SE не работает

OrionExt
10.12.2017, 16:24
Я проехал мимо РК помнится, только потому что достать вг75 было вообще невозможно.
Даже во времена начала бума ZX ВГ75 стоила на рынке 25р., в тоже время комплект ПЗУ на ZX стоял 75р. В общем можно было смело вкладываться тогда в ZX. Поправка - если память меня не подводит.

- - - Добавлено - - -

И видимо я стал счастливым обладателем RK, только благодаря купленному конструктору КР-02 (чуть ранее на год, два).

makbar
10.12.2017, 18:33
Даже во времена начала бума ZX ВГ75 стоила на рынке 25р., в тоже время комплект ПЗУ на ZX стоял 75р. В общем можно было смело вкладываться тогда в ZX. Поправка - если память меня не подводит.

Думаю, что не сильно подводит.
(А вообще жалею, что не записывал свои мысли и события тех бурных лет, ибо сейчас и не вспомнить и много вранья про то время, как минимум про причинно следственность событий)
Я же школьником выписывал МК, еще и поэтому нацелился тогда на Специалист. Спектрумов сильно не касался, мне не игровая нужна была консоль, а что-то родное. Только иногда помогал приятелям отладить, да и зашил наверно несколько тысяч EPROM для них ))

barsik
10.12.2017, 19:03
судя по конфиг файлу ЕМU80 - вообще никаких изменений для работы с РК ДОС 2.9/S. от barsik
Конечно в конфиг файл для СПЕЦИАЛИСТА с дисководом я никаких изменений не вносил. Да и не мог, откуда мне знать как его менять? Чтобы получить другую архитектуру.

Всё, что я сделал, - это изменил в 3-й строке имя файла с кодом DOS, что эмулятор грузит на E000 в ПЗУ E000...EFFF, с DOS29.BIN на RKDOS.DAT.

Можно поступить наоборот, ничего не менять в конфиге, а просто удалить файл DOS29.BIN, а файл RKDOS.DAT переименовать в DOS29.BIN. Результать будет тот же, - эти коды будут читаться в адресах E000...EFFF. Эмулятор тем и приятен, что не надо трахаться с УФ-очисткой и прошивкой ПЗУ на УФ-прошивателе, - изменил несколько букв и буквально за пол секкунды получаешь тот же результат.


SE не работает
Естественно. Но на самом деле SE.COM работает, просто на экране Вы ничего не видите.

Я же уже неоднократно писал об этом. На ОРИОНЕ и на других ЭВМ, в которых нет экранного ОЗУ как в РК86 в области 76D0...7FFF, не будут работать наглые программы с прямой записью в экранное ОЗУ. Это ведь то же самое, как в случае наглых игр от РК86, которые совместимы по клавиатуре (т.к читают её стандартно, по F81B или F803), но с экраном работают нагло напрямую записывая байты в экранное ОЗУ. Такие игры можно адаптировать только полностью поменяв алгоритм.

В случае RK-DOS, где Е.Седов активно увлекался наглотой, из важных программ не могут работать нортон SE.COM, диск-доктор DOCTOR.COM и посекторный редактор TS-EDIT.COM

Когда я стал пользоваться RK-DOS меня тоже это безобразие возмутило, и чтобы что-то увидеть на экране, я поначалу загружал драйвер визуализации, который работал так.

На ОРИОНЕ ROM-BIOS по идеологии грамотный, в частности, имеет вектора для основных стандартных подпрограмм. Потому там можно на вектора ПЗУ загрузить, например, свой драйвер клавиатуры или дополнить имеющийся иными функциями. Что я и делал.


Простейший драйвер, основанный на возможностях монитора-3, отлавливает нажатие УС+СС+V и по такому нажатию запускает процедуру визуализации, просто сливая экран РК86 в экран ОРИОНА, отчего на экране возникает картинка из экрана РК86.

Понятно, что визуализировать вручную мне скоро надоело, поэтому используя, опять-таки свойство М3, в котором, в отличие от М2, векторизована и подпрограмма F81B, я сделал полноценный драйвер визуализации, основанный на следующей идее.

Т.к все программы всех ЭВМ, где клавиатура не на прерываниях, беспрерывно опрашивают клавиатуру (иначе нажатия бы пропали), то вызов п/п-мм клавиатуры происходит тысячи раз в секунду. И соответственно, все программы РК86 тысячи раз в секунду вызывают всего две п/п-ммы F812 и F81B или просто висят в подпрограмме F803. За секунду происходит в зависимости от скорости ЭВМ до 5000 вызовов F81B.

А в ПЗУ ОРИОНА ф-я STATUS не выкидывает 0 в порт A, читая по B (чтобы проконтроллировать одним считыванием все линии сканирования), а вместо этого вызывает F81B, т.к 3 байта короче, чем 30 байтов. Потому, если в исполнительную часть п/п-ммы F81B добавить счётчик вызовов и по каждому, например, 300-тому вызову F81B вызывать процедуру визуализации (и перед F803), то это будет работать точно также, как визуализация на прерываниях.

Вот так устроен полноценный программный эмулятор РК86, а не та туфта, что была опубликована в ж.РАДИО в 1991 под именем эмулятор РК86.

Кстати на этом же принципе основаны программые часы в моих драйверах, пока программа читает клавиатуру, программные часы идут (хотя если нет опоры на апп.таймер, то часы идут неточно).

Короче, благодаря таким свойствам М3, простейшим способом получается визуализация наглых программ РК86. К сожалению, не всех.

Потому что извращенцы идут дальше, они не только нагло лезут в экран, но еще и используют служебные ячейки ПЗУ наоборот. Например, чтобы изменить позицию в экране куда по F809 будет выкинут очередной символ (вместо того, чтобы использовать код ESC,Y), они нагло меняют ячейки 7600/7601, где ПЗУ хранит экранный адрес для очередного вывода на экран. Оттого вывод получается куда они хотят, и даже вне основной экранной матрицы, что позволяет выводить выше экрана 64*25, ниже его, правее и левее. Но на ОРИОНЕ ячейка 7600 ни на что не влияет и вывод по F809 происходит по текущим координатам из ячеек POSX, POSY (F3D6/F3D7).

Чтобы даже такая сверхнаглота визуализировалась, надо переписать ROM-BIOS ОРИОНА так, чтобы служебные ячейки ПЗУ РК86 полностью обслуживались и точно также как в РК86 влияли на работу. По сути именно это должны были сделать разработчики ОРИОНА, раз уж взялись за задачу совместимости с РК86.

zx_
10.12.2017, 19:57
barsik, вот. такую штуку сделать можете?
http://zx-pk.ru/threads/11319-radio-86rk-podklyuchenie-diskovoda.html?p=607765&viewfull=1#post607765

fifan
10.12.2017, 20:39
Я так таким образом задействовал три директивы в Специалисте МХ2.

Pyk
11.12.2017, 00:14
Форматирование в эмуляторе посмотрю.
Кстати, кто помнит, для чего изначально в Мониторе РК предназначалась директива U, передающая управление по адресу F000?

barsik
11.12.2017, 00:23
barsik, вот. такую штуку сделать можете?
http://zx-pk.ru/threads/11319-radio-86rk-podklyuchenie-diskovoda.html?p=607765&viewfull=1#post607765

Если правильно понял, речь о том, чтобы укоротить команду старта DOS до двух нажатий.

Нет проблем, дело пары минут. У меня так и было на РК86, чтобы грузить CP/M, директива была 'B'. Но, т.к раздражает всякий раз набирать даже букву, я хотел сделать так, чтобы кроме старта по букве, по сбросу сразу делался JMP E000, если пользователь при сбросе держит клавишу <НР>. В ближайшие дни сделаю соответствующий вариант ПЗУ для СПЕЦИАЛИСТА.


ПЗУ СПЕЦИАЛИСТА лучше не тратить на прошивку базовой РК-совместимой RK-DOS, т.к версий RK-DOS может быть (и будет) как грязи и иметь столько версий в ПЗУ немыслимо (у меня для каждой DOS, что я использовал, десятки версий, а для CP/M-совместимых - сотни).

Вот вход в BDOS RK-DOS ради совместимости разумно сохранить на E001. А сам исполнительный код может располагаться где угодно, и в частности в ОЗУ. Программы совершенно не волнует, в каком месте памяти хранится исполнительный код функций DOS, т.к программы знают только один вход E001.

Чтобы код можно было перемещать достаточно разместить в ПЗУ четыре байта с адреса E000, так что на адресе E001 будет стоять команда JMP на адрес в ОЗУ, например на 8FC0. Где тоже промежуточный JMP, уже на сам код BDOS. Второй JMP нужен потому что первый - в ПЗУ и менять адрес перехода в нём мы не можем.

Но второй JMP уже в ОЗУ и потому изменив в нём адрес, мы можем иметь BDOS в любом месте (и даже в соседней банке). Т.о мы сможем загружать любую версию RK-DOS, причем в любое место и иметь RK-DOS любого размера, не ограничиваясь в жалкие 4 кб и совершенно не затрачивая ПЗУ (расход 4 байта не в счёт).

В ближайшие дни странслирую вариант RK-DOS не требующий в НГМД сигнала READY. Увы, для владельцев РК86 это возможно только если в нём расширить ПЗУ для хранения RK-DOS (например добавить ПЗУ РФ2 по адресу D800...DFFF) или перейти на Z80 (тогда уплющивание кода за счёт JR команд позволит уместить нужные доработки кода в 4 кб ПЗУ).

Такая версия имеет объём уже более 4-х кб и её уже не уместить в те жалкие 4 кб ПЗУ, что нам в своём эмуляторе выделил Pyk. А вот 4 байта почти не занимают места в 4-х килобайтном ПЗУ. А разместить код RK-DOS в совместимом варианте удобно выше служебных ячеек РК86, т.е в адресах 76D0...8F5F. Это более 6 кб, чего достаточно для RK-DOS.

High TPA версии RK-DOS могут загружаться только в верхнее ОЗУ E000...F7FF или в ПЗУ. Такая версия более разумна для СПЕЦИАЛИСТА, чем совместимая с РК86 версия, т.к позволяет запустить программу не только размером до 28 кб, но и размером до 35.85 кб. И именно такая версия должна стать основной.

Кроме того, если Pyk сумеет изменить входной такт в эмулируемом РК-КНГМД, то формат диска будет 560 кб (для DD) и 640 кб (для HD). А если ему удастся встроить в эмулятор контроллер IDE-винчестера, то будет и версия RK-DOS и других DOS для винчестера (это легко потому, что все подпрограммы уже есть).


Кто помнит, для чего изначально в Мониторе РК предназначалась директива U, передающая управление по адресу F000?
По логике, раз для входа на F000 есть команда, то в ПЗУ F000 должна была быть какая-то резидентная программа. Но сдуру, явно по ошибке, в журнальном ПЗУ также на F000 делается переход, если введена буква которой нет в списке директив.

В обычном РК, где нет ПЗУ F000, происходит улёт, хотя в некоторых образцах в ходе улёта происходит переход на F800, так что кажется что всё нормально, что так было и задумано. Но это ошибка. А в последующей публикации, если МНИП, ввели DIR_U для чтения ROM-диска.


Ниже исходник ПЗУ для РК86. Рекомендую всем владельцам РК. В нём курсор большой, что гораздо приятнее, чем мизерная чёрточка.


; БАЗОВЫЙ МОНИТОР РК86 (РАДИО 8.86)
; =================================

; Modify: для использования LA0,LA1 (полный оригинал при ORIG=1)
; Также исправлена ошибка ухода на XT_ROM.
; В строке T_REGS '-' заменены на '='.

.Z80
aseg
ORG 100H

ORIG EQU 0 ; если не 0, то оригинальный курсор
BASE EQU 7600H ; ниже D0H байтов - служебные ячейки

EK_ADR EQU BASE ; текущий адрес на экране
POSX EQU BASE+02H
POSY EQU BASE+03H
ESC_F EQU BASE+04H
KBDFLG EQU BASE+05H ; если =0, то есть символ в SYMBUF
RUSLAT EQU BASE+06H
LAST_K EQU BASE+09H ; эти 2 байта должны следовать подряд
COUNT EQU BASE+0AH ; счётчик опросов (вначале 15)
APVFLG EQU BASE+0BH
FRELOC EQU BASE+0CH ; эта ячейка не используется

TMPSTK EQU BASE+0DH ; временно храним стек при МГ п/п-ммах
POINT EQU BASE+14H ; адрес откуда произошёл RST_30H
R_HL EQU BASE+16H
R_SP EQU BASE+1CH
R_AF EQU BASE+1EH ; НИЖЕ ОТКЛАДЫВАЮТСЯ AF,HL,DE,BC
STOP_A EQU BASE+23H
TMP_COD EQU BASE+25H
GOTO_HL EQU BASE+26H ; ДЛЯ БАЙТА C3H (JMP)
PAR_HL EQU BASE+27H
PAR_DE EQU BASE+29H
PAR_BC EQU BASE+2BH
FLG_P2 EQU BASE+2DH ; флаг, что есть параметры 2 или 2,3
INV_MG EQU BASE+2EH
KNS_RD EQU BASE+2FH
KNS_WR EQU BASE+30H
EK_ADR EQU BASE+31H
COMBUF EQU BASE+33H ; буфер ввода директивы
STACK EQU BASE+0CFH ; стек монитора

SA EQU 076D0H ; 76D0 начало экранной области
SCBASE EQU 077C2H ; 77C2 ЛЕВ.ВЕРХН.УГОЛ ЭКР.

VG_75 EQU 0C000H
VT_57 EQU 0E000H

PA EQU 8000H
PB EQU PA+1
PC EQU PA+2
PU EQU PA+3

PDA EQU 0A000H
PDB EQU PDA+1
PDU EQU PDA+3

XT_ROM EQU 0F000H ; второе ПЗУ РК-86

.comment \ ; Внутренние нестандартные точки ПЗУ РК
GETLIN EQU 0F8EEH
YF81B EQU 0FEEAH
YCMPDH EQU 0F990H
ADR_BL EQU 0FB78H ; Выводит ВК, вправо на 4 позиции и ADR_BL
RIGHT4 EQU 0F9B0H ; Выводит ВК и вправо на 4 позиции
GETPRM EQU 0F92CH
VIDEO EQU 0FACEH
MIKROSH EQU 0F89DH ; старт "МИКРОШИ"
\
; ----------------------------------------------

.msg MACRO ADDR
LD HL,ADDR
CALL MSSG
ENDM

; ----------------------------------------------

defb 'MON_RK86'
DW 800H,800H,000,000

.phase 0F800H

JP VHOD_0 ; +0
JP CONIN ; +3
JP LDBYTE ; +6
JP COUT_C ; +9
JP WRBYTE ; +C
JP COUT_C ; +F это д.быть PRINT
JP STATUS ; +12
JP HEX_A ; +15
JP MSSG ; +18
JP XF81B ; +1B
JP ASKCUR ; +1E
JP RD_SCR ; +21
JP RD_BLK ; +24
JP WR_BLK ; +27
JP CHSUMM ; +2A
JP PUSK_VG ; +2D
JP ASKTOP ; +30
JP SETTOP ; +33

; ----------------------------------------------

VHOD_0: LD A,8AH
LD (PU),A

LD SP,STACK

CALL PUSK_VG

LD HL,BASE
LD DE,COMBUF+2CH
LD C,0
CALL DIR_F

LD HL,STACK
LD (R_SP),HL

LD HL,TITR
CALL MSSG

CALL PUSK_VG ; это лишнее

LD HL,BASE-1
LD (EK_ADR),HL

LD HL,1D2AH
LD (KNS_RD),HL

LD A,0C3H
LD (GOTO_HL),A

if $ ne RABADR + 06CH
if1
.printx * Standard subroutine WBOOT shifted ! *
endif
endif

WBOOT: ; Warm_BOOT
LD SP,STACK

LD HL,PROMPT
CALL MSSG
; следующие 3 команды лишние
LD (PC),A
DEC A
LD (PDA+2),A

CALL GETLIN
LD HL,WBOOT
PUSH HL
LD HL,COMBUF
LD A,(HL)
CP 'X'
JP Z,DIR_X
CP 'U'
JP Z,XT_ROM
PUSH AF
CALL GETPRM
LD HL,(PAR_BC)
LD C,L
LD B,H
LD HL,(PAR_DE)
EX DE,HL
LD HL,(PAR_HL)
POP AF
CP 'D'
JP Z,DIR_D
CP 'C'
JP Z,DIR_C
CP 'F'
JP Z,DIR_F
CP 'S'
JP Z,DIR_S
CP 'T'
JP Z,DIR_T
CP 'M'
JP Z,DIR_M
CP 'G'
JP Z,DIR_G
CP 'I'
JP Z,DIR_I
CP 'O'
JP Z,DIR_O
CP 'L'
JP Z,DIR_L
CP 'R'
JP Z,DIR_R
if ORIG
JP XT_ROM ; без доп.ИД7 и ПЗУ на F000 это д.быть JMP ERROR
else
JP ERROR
endif

; ----------------------------------------------

BAKSTP: LD A,low COMBUF ; 33H
CP L ; достигнут конец буфера ввода ?
JP Z,AF8F1
PUSH HL
LD HL,TZABOJ
CALL MSSG
POP HL
DEC HL
JP AF8F3

; ----------------------------------------------

if $ ne RABADR + 0EEH ;F8EC
if1
.printx * Internal subroutine GETLIN shifted ! *
endif
endif

GETLIN: LD HL,COMBUF
AF8F1: LD B,0
AF8F3: CALL CONIN
CP 8
JP Z,BAKSTP
CP 7FH
JP Z,BAKSTP
if ORIG
CALL NZ,COUT_A ; NZ ???
else
CALL COUT_A
endif
LD (HL),A
CP 13
JP Z,AF91A
CP '.'
JP Z,WBOOT
LD B,0FFH
LD A,low COMBUF+1FH
CP L
JP Z,ERROR
INC HL
JP AF8F3

; ----------------------------------------------

AF91A: LD A,B
RLA
LD DE,COMBUF
LD B,0
RET

; ----------------------------------------------

MSSG: LD A,(HL) ; F922
AND A
RET Z
CALL COUT_A
INC HL
JP MSSG

; ----------------------------------------------

if $ ne RABADR + 012CH
if1
.printx * Internal subroutine GETPRM shifted ! *
endif
endif

GETPRM: LD HL,BASE+27H ; 7627H
LD DE,BASE+2DH ; 762DH
LD C,0
CALL DIR_F
LD DE,BASE+34H ; 7634H
CALL GET_HL
LD (PAR_HL),HL
LD (PAR_DE),HL
RET C
LD A,0FFH
LD (FLG_P2),A
CALL GET_HL
LD (PAR_DE),HL
RET C
CALL GET_HL
LD (PAR_BC),HL
RET C
JP ERROR

; ----------------------------------------------

GET_HL: LD HL,0
AF95D: LD A,(DE)
INC DE
CP 13
JP Z,RETCY1
CP ','
RET Z
CP 20H
JP Z,AF95D
SUB 30H
JP M,ERROR
CP 10
JP M,AF982
CP 011H ; 17
JP M,ERROR
CP 17H
JP P,ERROR
SUB 7
AF982: LD C,A
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
JP C,ERROR
ADD HL,BC
JP AF95D

; ----------------------------------------------

RETCY1: SCF
RET

; ----------------------------------------------

if $ ne RABADR + 0190H
if1
.printx * Internal subroutine CMPDH shifted ! *
endif
endif

CMPDH: LD A,H
CP D
RET NZ
LD A,L
CP E
RET

if CMPDH ne 0F990H
if1
.printx * Internal subroutine F990 (CMPDH) shifted ! *
endif
endif

; ----------------------------------------------

AF996: CALL CHK_F4
AF999: CALL CMPDH
JP NZ,AF9A2
AF99F: INC SP
INC SP
RET

; ----------------------------------------------

AF9A2: INC HL
RET

; ----------------------------------------------

CHK_F4: CALL XF81B
CP 3
RET NZ
CALL PUSK_VG
JP ERROR

; ----------------------------------------------

if $ ne RABADR + 01B0H
if1
.printx * Internal subroutine RIGHT4 shifted ! *
endif
endif

RIGHT4: PUSH HL ; Выводит ВК и вправо на 4 позиции
LD HL,TRIGH4
CALL MSSG
POP HL
RET

; ----------------------------------------------

AF9B9: LD A,(HL)
HXA_BL: PUSH BC ; F9BA
CALL HEX_A
LD A,20H
CALL COUT_A
POP BC
RET

; ----------------------------------------------

DIR_D: CALL ADR_BL
AF9C8: CALL AF9B9
CALL AF996
LD A,L
AND 0FH
JP Z,DIR_D
JP AF9C8

; ----------------------------------------------

DIR_C: LD A,(BC)
CP (HL)
JP Z,AF9E6
CALL ADR_BL
CALL AF9B9
LD A,(BC)
CALL HXA_BL
AF9E6: INC BC
CALL AF996
JP DIR_C

; ----------------------------------------------

DIR_F: LD (HL),C
CALL AF999
JP DIR_F

; ----------------------------------------------

DIR_S: LD A,C
CP (HL)
CALL Z,ADR_BL
CALL AF996
JP DIR_S

; ----------------------------------------------

DIR_T: LD A,(HL)
LD (BC),A
INC BC
CALL AF999
JP DIR_T

; ----------------------------------------------

DIR_L: CALL ADR_BL
AFA0B: LD A,(HL)
OR A
JP M,AFA15
CP 20H
JP NC,AFA17
AFA15: LD A,02EH
AFA17: CALL COUT_A
CALL AF996
LD A,L
AND 0FH
JP Z,DIR_L
JP AFA0B

; ----------------------------------------------

DIR_M: CALL ADR_BL
CALL AF9B9
PUSH HL
CALL GETLIN
POP HL
JP NC,AFA3B
PUSH HL
CALL GET_HL
LD A,L
POP HL
LD (HL),A
AFA3B: INC HL
JP DIR_M

; ----------------------------------------------

DIR_G: CALL CMPDH
JP Z,AFA5A
EX DE,HL
LD (STOP_A),HL
LD A,(HL)
LD (TMP_COD),A ; храним байт точки останова
LD (HL),0F7H ; код команды RST_30H
LD A,0C3H
LD (030H),A ; ПОДГОТОВКА RST_30H
LD HL,BREAK
LD (031H),HL
AFA5A: LD SP,BASE+18H
POP BC
POP DE
POP HL
POP AF
LD SP,HL
LD HL,(R_HL)
JP GOTO_HL

; ----------------------------------------------

DIR_R: LD A,090H
LD (PDU),A
AFA6D: LD (PDB),HL
LD A,(PDA)
LD (BC),A
INC BC
CALL AF999
JP AFA6D

; ----------------------------------------------

ASKCUR: LD HL,(POSX)
RET

; ----------------------------------------------

RD_SCR: PUSH HL
LD HL,(EK_ADR)
LD A,(HL)
POP HL
RET

; ----------------------------------------------

DIR_I: LD A,(FLG_P2)
OR A
JP Z,AFA91
LD A,E
LD (KNS_RD),A
AFA91: CALL RD_BLK
CALL ADR_BL
EX DE,HL
CALL ADR_BL
EX DE,HL
PUSH BC
CALL CHSUMM
LD H,B
LD L,C
CALL ADR_BL
POP DE
CALL CMPDH
RET Z
EX DE,HL
CALL ADR_BL
ERROR: LD A,'?'
CALL COUT_A
JP WBOOT

; ----------------------------------------------

RD_BLK: LD A,0FFH
CALL LD_BC
PUSH HL
ADD HL,BC
EX DE,HL
CALL LDBCBS
POP HL
ADD HL,BC
EX DE,HL
PUSH HL
CALL AFB0A
LD A,0FFH
CALL LD_BC
POP HL ; БЫСТРЕЕ DB 06 -> LD B,NN

if $ ne RABADR + 02CEH
if1
.printx * Internal subroutine PUSK_VG shifted ! *
endif
endif

PUSK_VG:
PUSH HL
LD HL,VG_75+1
LD (HL),0 ; reset commando
DEC HL ; адрес VG_75
LD (HL),04DH ; 0.1001101 77+1 знакомест
LD (HL),01DH ; 00.011101 29+1 строк

if ORIG
LD (HL),99H ; 1001.1001 9 +1 линия подчерк.
; 9+1 линий в знакоместе
LD (HL),93H ; 1.0.01.0011 без смещ.
; курсор - мигающая линия подчеркивания
; атрибуты отображать пробелом
; 3 такта сдвига - длина обр хода стр.р.
else
LD (HL),59H ; **** лучше 58H: линия подч-я - выше
LD (HL),0C3H ; 1.1.00.0011 - ЭТО МОЕ ИЗМЕНЕНИЕ
; курсор - мигающее знакоместо
; атрибуты не отображать
endif ; ТЕПЕРЬ БОЛЬШОЙ КУРСОР

INC HL ; адрес VG_75+1
LD (HL),27H ; start display commando
LD A,(HL) ; read status
AFAE1: LD A,(HL) ; read status
AND 20H ; mask 'Interrupt request flag'
JP Z,AFAE1 ; ждем конца строки
LD HL,VT_57+8
LD (HL),80H
LD L,4 ; VT_57+04 !! НЕ_КОРРЕКТНО
LD (HL),low SA ; 0D0H
LD (HL),high SA ; 076H
INC L ; адрес VT_57+5
LD (HL),23H
LD (HL),49H
LD L,8 ; VT_57+8 !! НЕ_КОРРЕКТНО
LD (HL),0A4H
POP HL
RET

; ----------------------------------------------

LDBCBS: LD A,8
LD_BC: CALL LDBYTE
LD B,A
LD A,8
CALL LDBYTE
LD C,A
RET

; ----------------------------------------------

AFB0A: LD A,8
CALL LDBYTE
LD (HL),A
CALL AF999
JP AFB0A

; ----------------------------------------------

CHSUMM: LD BC,0
AFB19: LD A,(HL)
ADD A,C
LD C,A
PUSH AF
CALL CMPDH
JP Z,AF99F
POP AF
LD A,B
ADC A,(HL)
LD B,A
CALL AF999
JP AFB19

; ----------------------------------------------

DIR_O: LD A,C
OR A
JP Z,AFB35
LD (KNS_WR),A
AFB35: PUSH HL
CALL CHSUMM
POP HL
CALL ADR_BL
EX DE,HL
CALL ADR_BL
EX DE,HL
PUSH HL
LD H,B
LD L,C
CALL ADR_BL ; КС
POP HL
WR_BLK:
PUSH BC ; КС

LD BC,0 ; выводим 256 байтов 00 (пилотон)
AFB4D: CALL WRBYTE
DEC B
EX (SP),HL ; это задержка 38 тактов
EX (SP),HL
JP NZ,AFB4D

LD C,0E6H ; выводим синхробайт E6
CALL WRBYTE

CALL WR_HL ; выводим НА
EX DE,HL
CALL WR_HL ; выводим КА

EX DE,HL
CALL AFB86 ; выводим блок

LD HL,0
CALL WR_HL ; выводим 2 байта 00

LD C,0E6H ; снова выводим с/байт E6
CALL WRBYTE

POP HL
CALL WR_HL ; выводим КС

JP PUSK_VG

; ----------------------------------------------

if $ ne RABADR + 0378H
if1
.printx * Internal subroutine ADR_BL shifted ! *
endif
endif

ADR_BL: PUSH BC ; Выводит ВК, вправо на 4 позиции и ADR_BL
CALL RIGHT4
LD A,H
CALL HEX_A
LD A,L
CALL HXA_BL
POP BC
RET

; ----------------------------------------------

AFB86: LD C,(HL)
CALL WRBYTE
CALL AF999
JP AFB86

; ----------------------------------------------

WR_HL: LD C,H
CALL WRBYTE
LD C,L
JP WRBYTE

; ----------------------------------------------

LDBYTE EQU LDBYTE

if $ ne RABADR + 0398H
if1
.printx * LDBYTE for emulator B2M need be at FB98 ! *
endif
endif

LDBYTE: PUSH HL
PUSH BC
PUSH DE
LD D,A
AFB9C: LD A,80H
LD (VT_57+8),A
LD HL,0
ADD HL,SP
LD SP,0
LD (TMPSTK),HL
LD C,0
LD A,(PC)
RRCA
RRCA
RRCA
RRCA
AND 1
LD E,A
AFBB7: POP AF
LD A,C
AND 07FH
RLCA
LD C,A
LD H,0
AFBBF: DEC H
JP Z,AFC34
POP AF ; РЕГЕНЕРАЦИЯ ОЗУ
LD A,(PC)
RRCA
RRCA
RRCA
RRCA
AND 1
CP E
JP Z,AFBBF
OR C
LD C,A
DEC D
LD A,(KNS_RD)
JP NZ,AFBDC
SUB 012H
AFBDC: LD B,A
AFBDD: POP AF ; РЕГЕНЕРАЦИЯ ОЗУ
DEC B
JP NZ,AFBDD
INC D
LD A,(PC)
RRCA
RRCA
RRCA
RRCA
AND 001H
LD E,A
LD A,D
OR A
JP P,AFC0B
LD A,C
CP 0E6H ; ПРЯМОЙ СИНХРО-БАЙТ ?
JP NZ,AFBFF
XOR A
LD (INV_MG),A ; ПРИЗНАК ИНВЕРСИИ МАГНИТОФОНА
JP AFC09

; ----------------------------------------------

AFBFF: CP 19H ; ОБРАТНЫЙ С/БАЙТ
JP NZ,AFBB7
LD A,0FFH
LD (INV_MG),A ; Tape inverse flag
AFC09: LD D,9
AFC0B: DEC D
JP NZ,0FBB7H
LD HL,VT_57+4
LD (HL),low SA ; 0D0H
LD (HL),high SA ; 076H
INC HL
LD (HL),023H
LD (HL),049H
LD A,27H ; start display commando
LD (VG_75+1),A
LD A,0E0H ; reset count
LD (VG_75+1),A
LD L,8
LD (HL),0A4H
LD HL,(TMPSTK)
LD SP,HL
LD A,(INV_MG)
XOR C ; with Tape Inverse flag
JP POPREG

AFC34: LD HL,(TMPSTK)
LD SP,HL
CALL PUSK_VG
LD A,D
OR A
JP P,ERROR
CALL CHK_F4
JP AFB9C

; ----------------------------------------------

if $ ne RABADR + 0446H
if1
.printx * WRBYTE for emulator B2M need be at FC46 ! *
endif
endif

@WRBYTE:
WRBYTE: PUSH HL
PUSH BC
PUSH DE
PUSH AF
LD A,80H
LD (VT_57+8),A
LD HL,0
ADD HL,SP
LD SP,0
LD D,8
AFC58: POP AF
LD A,C
RLCA
LD C,A
LD A,1
XOR C
LD (PC),A
LD A,(KNS_WR)
LD B,A
AFC66: POP AF
DEC B
JP NZ,AFC66
LD A,0 ; хо-хо
XOR C
LD (PC),A
DEC D
LD A,(KNS_WR)
JP NZ,AFC7A
SUB 0EH
AFC7A: LD B,A

AFC7B: POP AF ; подъем стека на [рег.B] ячеек
DEC B
JP NZ,AFC7B
INC D
DEC D
JP NZ,AFC58
LD SP,HL
LD HL,VT_57+4
LD (HL),low SA ; 0D0H
LD (HL),high SA ; 076H
INC HL ; VT_57+5
LD (HL),23H
LD (HL),49H
LD A,27H ; start display commando
LD (VG_75+1),A ; 001.sss.bb 001.001.11
LD A,0E0H ; сброс счетчиков строк и знакомест ???
LD (VG_75+1),A
LD L,8
LD (HL),0A4H ; VT_57+8
POP AF
POPREG: POP DE
POP BC
POP HL
@BAK EQU $
RET

if @BAK ne 0FCA4H
if1
.printx * Internal point 0FCA4H (need for emulator B2M) shifted ! *
endif
endif

; ----------------------------------------------

HEX_A: PUSH AF
RRCA
RRCA
RRCA
RRCA
CALL AFCAE
POP AF
AFCAE: AND 00FH
CP 00AH
JP M,AFCB7
ADD A,7
AFCB7: ADD A,30H

COUT_A: LD C,A
COUT_C: PUSH AF
PUSH BC
PUSH DE
PUSH HL
CALL STATUS
LD HL,TOBACK
PUSH HL
LD HL,(POSX)
EX DE,HL
LD HL,(EK_ADR)
LD A,(ESC_F)
DEC A
JP M,NO_ESC ; если ещё не в ESC-последовательности
JP Z,AFD65 ; если второй байт ('Y')
JP PO,AFD73 ; если третий байт
LD A,C ; четвёртый байт
SUB 20H
LD C,A
AFCDD: DEC C
JP M,ESCRES ; СБРОС ESC_F И ВЫХОД
PUSH BC
CALL COD_18 ; ВПРАВО
POP BC
JP AFCDD

ESCRES: XOR A
SETESC: LD (ESC_F),A
RET

NO_ESC: LD A,C
if ORIG
AND 07FH
else
AND 0FFH
endif
LD C,A
CP 1FH
JP Z,CLS
CP 0CH
JP Z,HOME
CP 13
JP Z,COD_0D
CP 10
JP Z,COD0A
CP 8
JP Z,COD_08
CP 18H
JP Z,COD_18
CP 19H
JP Z,COD19
CP 1AH
JP Z,COD1A
CP 27
JP Z,COD1B
CP 7
JP NZ,PR_SYM
BEEP:
LD BC,05F0H
BP1: LD A,B
BP2: EI
DEC A
JP NZ,BP2
LD A,B
BP3: DI
DEC A
JP NZ,BP3
DEC C
JP NZ,BP1
RET

; ----------------------------------------------

PR_SYM: LD (HL),C ; Видимый на экране символ
CALL COD_18 ; сместить на следующее знакоместо
LD A,D
CP 3 ; мы на первой строке ?
RET NZ ; если не на первой строке
LD A,E
CP 8 ; мы в первой колонке ?
RET NZ ; если не на первой колонке
CALL COD19
COD0A: LD A,D
CP 3+24 ; мы на последней строке ?
JP NZ,COD1A ; если не на последней строке

; ДАЛЕЕ РОЛИК ЭКРАНА

PUSH HL
PUSH DE
LD HL,SCBASE ; 077C2H
LD DE,SCBASE+78 ; 07810H
LD BC,25*78 ; 79EH
AFD58:
LD A,(DE) ; ПЕРЕСЫЛКА БЛОКА РАЗМЕРОМ [BC]
LD (HL),A ; (DE) --> (HL)
INC HL
INC DE
DEC BC
LD A,C
OR B
JP NZ,AFD58
POP DE
POP HL
RET

; ----------------------------------------------

AFD65: LD A,C
CP 'Y'
JP NZ,ESCRES
CALL HOME
LD A,2 ; ПРИНЯТО 2 БАЙТА ESC,'Y'
JP SETESC

; ----------------------------------------------

AFD73: LD A,C
SUB 20H
LD C,A
AFD77: DEC C
LD A,4
JP M,SETESC
PUSH BC
CALL COD1A
POP BC
JP AFD77

; ----------------------------------------------

; >> NO EXECUTION PATH TO HERE <<

TOBACK: LD (EK_ADR),HL ; FD85
EX DE,HL
LD (POSX),HL
LD A,80H
LD (VG_75+1),A
LD A,L
LD (VG_75),A
LD A,H
LD (VG_75),A
POP HL
POP DE
POP BC
POP AF
RET

; ----------------------------------------------

COD1B: LD A,1 ; НАЧАЛАСЬ ESC-ПОСЛЕД-СТЬ
JP SETESC

; ----------------------------------------------

CLS: LD HL,SCBASE+832H ; 07FF4H
LD DE,30*78 +1 ; 925H
CLSLOO: XOR A
LD (HL),A
DEC HL
DEC DE
LD A,E
OR D
JP NZ,CLSLOO
HOME: LD DE,308H
LD HL,SCBASE ; 077C2H
RET

; ----------------------------------------------

COD_18: LD A,E ; ВЫЧИСЛИТЬ КООРД.НА ЭКР.
INC HL
INC E
CP 047H ; 71 ?
RET NZ
LD E,8
LD BC,0-40H ; FFC0
ADD HL,BC ; ВЫЧЕСТЬ 64
COD1A: LD A,D
CP 27 ; СТРОКА ?
LD BC,0004EH ; 78
JP NZ,AFDD3
LD D,2
LD BC,0F8B0H ; ?
AFDD3: INC D
ADD HL,BC ; ВЫЧЕСТЬ 750H
RET

; ----------------------------------------------

COD_08: ; ВХОД: E=POSX, D=POSY
; HL= экранный адрес
LD A,E
DEC HL
DEC E
CP 8 ; были в первой колонке ?
RET NZ ; если были не в первой колонке
LD E,7+64 ; это последняя колонка ?
LD BC,64
ADD HL,BC ; экр.адрес в последнюю колонку
COD19: LD A,D
CP 3 ; это первая строка ?
LD BC,0-78
JP NZ,AFDF0
LD D,3+25
LD BC,24*78 ; 750H
AFDF0: DEC D
ADD HL,BC ; Вычесть 78 или прибавить 24*28
RET

; ----------------------------------------------

COD_0D: LD A,L
SUB E
JP NC,AFDF9
DEC H
AFDF9: LD L,A
LD E,8 ;хо-хо
LD BC,8
ADD HL,BC
RET

; ----------------------------------------------

; После 15 вызовов STATUS при нажатой клавише выставляется флаг KBDFLG

STATUS: LD A,(PC)
AND 80H ; RUS/LAT нажат ?
JP Z,AFE0E
LD A,(KBDFLG)
OR A
RET NZ ; если в SYMBUF уже есть символ
AFE0E: PUSH HL
LD HL,(LAST_K)
CALL XF81B
CP L
LD L,A
JP Z,AFE2A
AFE1A: LD A,1
LD (APVFLG),A
LD H,15H ; число опросов, чтобы зафиксировать код
AFE21: XOR A
AFE22: LD (LAST_K),HL
POP HL
LD (KBDFLG),A
RET

; ----------------------------------------------

AFE2A: DEC H ; в рег.A=код клав, в рег.H- COUNT
JP NZ,AFE21
INC A
JP Z,AFE22 ; если код FF, то сброс флагов
INC A
JP Z,KEY_FE ; если код FE (RUSLAT)

PUSH BC ; КЛИК
LD BC,5003H
CALL BP1
POP BC

LD A,(APVFLG)
LD H,0E0H
DEC A
LD (APVFLG),A
JP Z,AFE4C
LD H,40H
AFE4C: LD A,0FFH
JP AFE22

; ----------------------------------------------

KEY_FE: LD A,(PC)
AND 80H
JP Z,KEY_FE ; ждём отпускания РУС/ЛАТ
LD A,(RUSLAT)
CPL
LD (RUSLAT),A
JP AFE1A

; ----------------------------------------------

CONIN: CALL STATUS
OR A
JP Z,CONIN
XOR A
LD (KBDFLG),A
LD A,(LAST_K)
RET

; ----------------------------------------------

XF81B: LD A,(PC)
AND 80H ; RUS/LAT нажат ?
JP NZ,AFE7D
LD A,0FEH
RET

; ----------------------------------------------

AFE7D: XOR A
LD (PA),A
LD (PC),A
LD A,(RUSLAT)
AND 1
OR 6
LD (PU),A
LD A,(PA+1)
INC A
JP NZ,AFE97
DEC A
RET

; ----------------------------------------------

AFE97: PUSH HL
LD L,1 ; хо-хо
LD H,7
AFE9C: LD A,L
RRCA
LD L,A
CPL
LD (PA),A
LD A,(PA+1)
CPL
OR A
JP NZ,AFEB3
DEC H
JP P,AFE9C
AFEAF: LD A,0FFH
POP HL
RET

; ----------------------------------------------

AFEB3: LD L,20H
AFEB5: LD A,(PA+1)
CPL
OR A
JP Z,AFEAF
DEC L
JP NZ,AFEB5
LD L,8
AFEC3: DEC L
RLCA
JP NC,AFEC3
LD A,H
LD H,L
LD L,A
CP 1
JP Z,AFEFA
JP C,AFEF3
RLCA
RLCA
RLCA
ADD A,20H
OR H
CP 5FH ; '_'
JP NZ,AFF06
LD A,20H
POP HL
RET

; ----------------------------------------------

TABK2: defb 09,0AH,0DH,7FH,08H,19H,18H,1AH
TABK1: defb 0CH,1FH,1BH,00H,01H,02H,03H,04H,05H

; ----------------------------------------------

AFEF3: LD A,H
LD HL,TABK1
JP AFEFE

; ----------------------------------------------

AFEFA: LD A,H
LD HL,TABK2
AFEFE: ADD A,L
LD L,A
LD A,(HL)
CP 40H
POP HL
AFF04: RET C ; НЕ ДВИГАТЬ FF04 (СМ.ВЫШЕ)
PUSH HL
AFF06: LD L,A
LD A,(PC)
LD H,A
AND 40H
JP NZ,AFF1A
LD A,L
CP 40H
JP M,AFF3F
AND 1FH
POP HL
RET

; ----------------------------------------------

AFF1A: LD A,(RUSLAT)
OR A
JP Z,AFF2A
LD A,L
CP 40H
JP M,AFF2A
OR 20H
LD L,A
AFF2A: LD A,H
AND 20H
JP NZ,AFF3F
LD A,L
CP 40H
JP M,AFF3B
LD A,L
XOR 20H
POP HL
RET

; ----------------------------------------------

AFF3B: LD A,L
AND 2FH
LD L,A
AFF3F: LD A,L
CP 40H
POP HL
RET P
PUSH HL
LD L,A
AND 00FH
CP 00CH
LD A,L
JP M,AFF50
XOR 010H
AFF50: POP HL
RET

; ----------------------------------------------

ASKTOP: LD HL,(EK_ADR)
RET

; ----------------------------------------------

SETTOP: LD (EK_ADR),HL
RET

; ----------------------------------------------

TITR: defb 1FH,'radio-86rk',0
PROMPT: defb 13,10,'-->',0
TRIGH4: defb 13,10,18H,18H,18H,18H,0

; ----------------------------------------------

if ORIG
T_REGS: defb 13,10
defb ' PC-',13,10
defb ' HL-',13,10
defb ' BC-',13,10
defb ' DE-',13,10
defb ' SP-',13,10
defb ' AF-'
defb 19H,19H,19H,19H,19H,19H,0 ; вверх на 6 строк
else
T_REGS: defb 13,10,' PC='
defb 13,10,' HL='
defb 13,10,' BC='
defb 13,10,' DE='
defb 13,10,' SP='
defb 13,10,' AF='
defb 19H,19H,19H,19H,19H,19H,0 ; вверх на 6 строк
endif

; ----------------------------------------------

TZABOJ: defb 8,32,8,0

; ----------------------------------------------

BREAK: LD (R_HL),HL
PUSH AF
POP HL
LD (R_AF),HL ; REG_AF
POP HL
DEC HL
LD (POINT),HL ; адрес останова RST_30H
LD HL,0
ADD HL,SP
LD SP,R_AF
PUSH HL ; REG_SP
PUSH DE ; REG_DE
PUSH BC ; REG_BC
LD HL,(POINT)
LD SP,STACK
CALL ADR_BL ; ВЫВОД ТОЧКИ С RST_30H
EX DE,HL
LD HL,(STOP_A)
CALL CMPDH ; СЛУЧАЙНЫЙ ИЛИ СТОП ЮЗЕРА ?
JP NZ,WBOOT ; ЕСЛИ ЭТО USER_BREAK, ТО
LD A,(TMP_COD) ; ВОССТАНАВЛИВАЕМ СТОП-ТОЧКУ
LD (HL),A
JP WBOOT

; ----------------------------------------------

DIR_X: LD HL,T_REGS
CALL MSSG
LD HL,POINT
LD B,6
AFFDE: LD E,(HL)
INC HL
LD D,(HL)
PUSH BC
PUSH HL
EX DE,HL
CALL ADR_BL
CALL GETLIN
JP NC,AFFF6
CALL GET_HL
POP DE
PUSH DE
EX DE,HL
LD (HL),D
DEC HL
LD (HL),E
AFFF6: POP HL
POP BC
DEC B
INC HL
JP NZ,AFFDE
RET

; defb 255,255

if $ ne 0
if high $ gt 0F8H

rept 256
if $ ne 0
defb 255
endif
ENDM
endif
else
if1
.printx * Code length over 2048 bytes ! *
endif
endif
.dephase

END

zx_
11.12.2017, 12:54
DOCTOR.COM и посекторный редактор TS-EDIT.COM а пересобрать эти утилиты для Специалиста можете?

а нортон от barsik тоже хотелось бы, мааааленький ! вместо SE
или SE пересобрать для спеца

причем нортон не просто панели , а с полезными утилитами встроенными , ну к примеру загрузка с магнитофона на диск , редактор можно внешний, вьювер всяких текстов и картинок

MacBuster
11.12.2017, 12:55
Может всё таки кто-нибудь даст расшифровку аббревиатуры КНМГД?
Встречал два варианта - старый и ОЧЕНЬ старый:

1) Контроллер накопителя на магнитных гибких дисках
2) Контроллер накопителя на миниатюрных гибких дисках (133мм)

barsik
11.12.2017, 14:15
а пересобрать эти утилиты для Специалиста можете?
Тут вопрос не просто дизассеблировать и получив полноценный исходник, затем слегка что-то изменив в коде, получить уже что-то работоспособное на машине с другой организацией экрана.

Тут придётся разобраться в логике и переделать весь алгоритм. Это мне делать не хочется, т.к не люблю разбираться в чужом коде и потому, что это трудоёмко.

Но есть ещё два иных более интересных варианта.

Ну, во-первых, аппаратно-программная эмуляция. Я где-то недавно об этом рассказывал. Суть примерно в том, чтобы сделать так, чтобы не менее, чем пару раз в секунду в любой программе экран РК (76D0...7FFF) сливался в экран СПЕЦИАЛИСТА (9000...BFFF). Это несложно, хотя и требует полной модификации ПЗУ СПЕЦИАЛИСТА, а качественнее всего это получается, если есть аппаратный тик 5 ГЦ на входе магнитофона.

А во-вторых, можно конвертировать не методом переделки алгоритма, а на принципе визуализации, так же как это было сделано в более-менее грамотных конверсиях ZX-игр для машин на Z80, но с другим экраном и клавиатурой.

При этом в программе отыскиваются фрагменты, где что-то наглым образом пишется в экран и в тех местах, где разумно (т.е не после вывода буквально каждого символа, а например, после вывода строки и перехода к вводу) вставляется строка CALL VISUAL - вызов процедуры визуализации.

Это как плюс не тормознёт (в отличие от аппаратно-программной визуализации, что тормозит и требует двойного запаса по быстродействию), и ценно, что таких вставок строк CALL VISUAL в наглой системной программе может потребоваться немного. Я проверил такой метод для ИРИШИ. Простые программы таким методом можно адаптировать довольно быстро. Ценность в том, что не требуется вникать в чужой алгоритм.


Я с начала 90-тых не программировал для СПЕЦИАЛИСТА. Да и тогда написал лишь 200 кб исходников (это очень мало). Проблема была в том, что тогда я сдуру писал в мнемонике КР580. Которая сильно напрягает программиста. Мнемоника Z80 позволяет примерно в 3-5 раз поднять производительность программиста. На это я узнал лишь в 1993.

Поэтому сейчас разбираюсь в программировании для СПЕЦИАЛИСТА, изучаю ROM-BIOS и составляю руководство программиста (вскоре его выложу), где описываются все входные точки ПЗУ, в т.числе и нестандартные.

Попробовал конвертировать от ОРИОНА одну программу. Когда приходится отчищать программы от Z80-кода и кардинально менять алгоритм (т.к программы ОРИОНА на 2 банки), то дикая нехватка ОЗУ и отсутствие хотя бы одной запасной банки памяти всё усложняет и сильно раздражает. Если бы была вторая банка, то менять бы пришлось мало.

SE.COM я адаптирую, но не сейчас. Потому что быстрее получится написать аналогичный убогий Нортон (убогий, т.е без драйвера и потому без окон). Для этого достаточно надёргать процедур из RK-DOS Нортона ОРИОНА, написать несколько подпрограмм и всё скомпоновать. Это ориентировочно ~4...8 часов работы.

Сложность - получить полноценный исходник чужой программы, а как известно Е.Седов использовал нетривиальный стиль программирования, что усложняет дело. Понятно, что получить просто листинг не проблема, IDA делает это за минуты. А получение полноценного листинга для сложной программы требует анализа алгоритма, что отнимает много времени.

Disk-Doctor также постараюсь конвертировать. Я нашёл какой-то CHKDSK для RK-DOS, адаптировал и даже странслировал. Теперь думаю как перенести её в эмулятор для проверки. К сожалению эмулятор не понимает ORD-файлы, а у меня нет программы конвертирующей DAT-файлы в RKS-файлы.

zx_
11.12.2017, 15:00
интересный пост в оригинальной теме
http://zx-pk.ru/threads/11319-radio-86rk-podklyuchenie-diskovoda.html?p=671547&viewfull=1#post671547

как так?

Pyk
11.12.2017, 22:32
FORMAT B:

бла бла , потом
FORMATING DISK ...
I/O ERROR

Странно, у меня работает - как в эмуляторе Специалиста, так и в РК.
Единственное - по умолчанию диск A подключается в режиме "только чтение" (эмулируется наклейка на дискете). Разрешить запись на диск A можно, закомментировав или убрав строку:
diskA.readOnly = yes
(можно также заменить yes на no)

Но вы-то форматировали диск B... Не понимаю, попробуйте еще раз...

zx_
11.12.2017, 22:42
Pyk, о ! по поводу записи на диск А вовремя поправка ваша , сегодня
barsik этим был встревожен, дескать эмуль не работает на запись.

формат опробую завтра

Pyk
11.12.2017, 23:18
создал пустой файл fsutil file createnew c:\500.rkdisk
А размер? Вот так должно быть:
fsutil file createnew c:\500.rkdisk 500000

fifan
12.12.2017, 06:27
По просьбе CodeMaster'а почистил немного тему.

barsik
20.12.2017, 11:58
Во вложении исходники и коды RK-DOS для СПЕЦИАЛИСТА и РК86 вместе с исходниками и основных внешних команд (т.е SYS-файлов), программы COPY и обработчика BAT-файлов (он почему-то называется COMMAND.COM). Из SYS файлов недостаёт лишь утилит работы с магнитофоном TAPE.SYS и TAPE2.SYS (я их не дизассемблировал в прошлом веке потому, что были не нужны, а сейчас лениво). Если надо, сами дизассемблируйте, это несложно (займёт у опытного полчаса, а у новичка пару часов).

Все утилиты - это один к одному оригинал (только в начало вставлена проверка на DOS). А сама RK-DOS не оригинал, а чуть-чуть доработанная. Изменения минимальны.

Оригинал RK-DOS использует команды IN и OUT для доступа к портам. Хотя портов как устройств ввода/вывода (I/O устройств) в РК86 нет как класса, т.к вообще отсутствует системный контроллер ВК28. Используется таинственно свойство КР580 попадать в ОЗУ при использовании команд IN/OUT.

Этот наглый трюк работает только, если для адресации каждого порта выделена область не менее 400H (1024 дес) ячеек, что не проблема в РК86, где на порты сдуру вообще выделяют по 8 кб. Также этот трюк не работает на процессоре Z80 у которого команды IN/OUT работают иначе. Таким образом с'экономив на командах OUT всего 21 байт, Е.Седов создал проблемы при переносе RK-DOS на более приличные компьютеры, чем РК86.

На СПЕЦИАЛИСТЕ и ОРИОНЕ принято тратить на порты по 256 байт или менее. Из-за этого оригинал RK-DOS может работать на СПЕЦИАЛИСТЕ только, если выделить для адресации РК-КНГМД целых 2 кб - F000...F7FF.

Потому, чтобы адресовать РК-КНГМД участком всего в 256 байт, RK-DOS пришлось несложно доработать. Т.к RK-DOS ужата до предела и мне с трудом удалось её уплющить всего на полтора десятка байтов, то пришлось забить драйвер принтера, что позволило выиграть ещё менее 20-ти байтов. Этого выигрыша мне хватило на то, чтобы исправить команду DIR (вывод в 3 столбца) и избавиться, наконец, от мерзких команд OUT.

Данная, уже неоригинальная, версия RK-DOS теперь может работать как с Z80, так и в компьютерах, где для порта выделено меньше, чем 400H адресов. В реале не проверялась, а версия для РК86 не проверялась даже в эмуляторе, хотя изменения столь незначительны, что вряд ли я занёс ошибку.

К сожалению, в объёме 4 кб ничего добавить уже нельзя. В 4 кб не хватает всего-лишь сотни свободных байтов, чтобы сделать версию, которая работает без сигнала READY. А это важно, т.к сейчас все используют не флопы 5.25"-DD, где сигнал READY есть, а HD-флопы 3.5" и 5.25", где такой сигнал отсутствует. Но для платы ЭКСПРЕСС есть выход, - загрузка RK-DOS в верхнее ОЗУ.

Если кому понадобится версия RK-DOS работающая без READY, а также RK-DOS на формат 560 кб на диск, вместо 400, дайте знать. Версия на 560 кб получается заменой нескольких байтов в коде и переделкой форматёра. Но не проверялось даже в эмуляторе, пока нет его версии с настраиваемой частотой кварца.

Для тех у кого есть дополнительные банки ОЗУ, перенёс с ОРИОНА также версию RK-DOS, в которой диск A: это VDISK, объёмом 62 кб (это при 2-х банках) и кратно больший, если доп.банок больше одной. А диск B: при этом дисковод на 560 кб. Позднее будет и версия RK-DOS для винчестера.

Обратите внимание, что RKS-файлы будут вводиться с ошибкой контрольной суммы. Это потому, что ассемблер не умеет считать КС странслированного блока. КС надо считать вручную и подставлять в исходник (там написано где). Но т.к файлы в МГ-формате нужны лишь единоразово, чтобы считать их с ленты и затем записать на диск командой SAVE, то нет смысла тратить на это время. Если будет желание, сами подсчитайте контрольные суммы директивой К, подставьте в исходник и странслируйте. Тогда МГ-файлы будут грузиться без ошибки КС. Адреса блока видны из дампа (это первые 4 байта в формате RKS).

Как ни странно, эмуляторы не поддерживают основной МГ-формат СПЕЦИАЛИСТА с именем, т.е используют формат не орловского, а волковского монитора (RKS надо грузить по R, а файлы с именем грузятся по I). И даже похоже в природе нет виртуального МГ-формата СПЕЦИАЛИСТА с именем, т.е не придумали даже букв для расширений файлов такого формата. Из-за этого, видимо, виденные мной дистирибутивы все в формате RKS.

Изменив ключ трансляции можно получить 3 версии RK-DOS - для РК86, и две для СПЕЦИАЛИСТА. Одна (на выбор) частично или полностью совместимая с RK-DOS РК86, т.е размещение E000...EFFF, а ячейки управляющие DOS на 7500 (что довольно глупо, т.к на СПЕЦИАЛИСТЕ это посередине ОЗУ). Эта версия позволяет использовать форматёр, ассемблер и тест скорости колеса из дистрибутива RK-DOS для РК86, но даёт TPA всего в 27 кб. Другие дисковые программы от РК86 просто не годятся т.к нагло лезут в экран.

Потому вообще нет смысла стремиться к совместимости с РК86 по адресам BDOS. Кроме того, за счёт того что в плате ЭКСПРЕСС по адресу E000 включается ОЗУ, то требование, чтобы DOS размещалась именно на E000 перестаёт играть роль. Для получения совместимости достаточно в ОЗУ по адресу E001 поставить JMP на любой адрес, где реально находится RK-DOS. С другой стороны, чтобы не возникло путаницы с программами разумно адрес RK-DOS перенести. Тогда путаницы не будет, т.к все дисковые программы при старте проверяют версию RK-DOS считывая байт AF в начале RK-DOS (в эти SYS-файлы я это уже добавил).

Т.к загрузчик и монитор занимают C000...CFFF, то нет альтернатив прошивке RK-DOS в адреса D000...DFFF. Если базовая RK-DOS прошита в ПЗУ, то CP/M и другие DOS, а также версии более развитой RK-DOS в 6 кб, могут использовать п/п-ммы чтения/записи сектора в ПЗУ, что сократит объём их кода.

Итого есть две версии RK-DOS - совместимая с TPA 27 кб и с "высоким" TPA в 35.5 кб. Совместимая версия (т.е полный оригинал), имела смысл только для тех, кто не в состоянии перетранслировать RK-DOS на другие адреса и потому вынужден был использовать оригинал от РК86. Но т.к для программирующих любителей перетрансляция на более выгодные адреса не проблема, то совместимая версия не нужна, тем более, что совместимость, как упомянуто выше, простейшим трюком эмулируется.

В каталогах есть TSR-компилятор для MSDOS, поэтому на Win XP или в MSDOS достаточно запустить BAT-файлы, а вот в Windows, которые не умеют запускать программы MSDOS, это надо делать через DosBox. На случай, если запуск программ MSDOS проблема, то приложил уже странслированне коды.

Vladimir_S
20.12.2017, 12:47
А это важно, т.к сейчас все используют не флопы 5.25"-DD, где сигнал READY есть, а HD-флопы 3.5" и 5.25", где такой сигнал отсутствует.
На SAMSUNG SFD-321B хоть он и 3.5" есть полновесный READY. И этот дисковод не очень редкий. Я их только в своем отделе наснимал 8 штук.

Также этот трюк не работает на процессоре Z80 у которого команды IN/OUT работают иначе.
На РКшке я попробовал твой переделанный ДОС без IN/OUT. нормально работает с Z80. Но я ведь вредный и доработал малость схему (я тебе ее показывал). У меня с Z80 прекрасно работает оригинальный ДОС. И на IN/OUT не тратится ни одной ячейки памяти.

barsik
20.12.2017, 13:40
И на IN/OUT не тратится ни одной ячейки памяти
В системах, где есть реальные I/O устройства, т.е есть системный контроллер при КР580 или стоит CPU Z80 или 8085, можно работать и командами IN/OUT используя оригинал RK-DOS и тратить всего 5 адресов на адресацию РК-КНГМД. Но в данном случае задача минимизировать, а точнее вообще исключить доп.аппаратные доработки за счёт программного решения. Программное решение всегда выгоднее и проще.

Но я вообще не вижу смысла цепляться за оригинал. Хотя бы потому, что дисковод 3.5" прекрасно даёт с РК-КНГМД 640 кб на диск вместо 400. Дисковод и РК-КНГМД могут и больше, но сама RK-DOS не может (всего 8 битов в байте, что даёт максимум 8 секторов на трек). Это ограничения сделал Е.Седов, в оригинале Apple-DOS формат допускает 32 сектора на трек. Потому мне пришлось писать свою реализацию Apple-DOS (понятно не конверсия, а написано с нуля), где нет таких ограничений. Хотел сделать подкаталоги, но не стал. Для флопа это не так уж необходимо. А вот для винта это уже желательно. С подкаталогами не буду связываться (это сложнее), а вот юзеры как в CP/M и даты у файлов вводятся в RK-DOS буквально за 10 минут труда. Сделаю это позднее.

RK-DOS в силу малого размера идеально подходит для базового СПЕЦИАЛИСТА. В то время как CP/M почти бессмысленна из-за нехватки ОЗУ, т.к фирменные программы, в т.числе и компиляторы из-за этого не работают. Т.е на СПЕЦИАЛИСТЕ без доп.ОЗУ от CP/M используется лишь файловая система, причём и TPA меньшее, чем у RK-DOS. Потому без расширения ОЗУ RK-DOS несмотря на все её недостатки и дурной интерфейс программиста, имеет смысл для СПЕЦИАЛИСТА.

Vladimir_S, сделайте эксперимент. Замените кварц в РК-КНГМД с 8-ми МГЦ на 10, затем на 12, 14 МГЦ и т.д. И с каждым кварцем форматируйте дискету. Делаете так. Загружаёте форматёр с дискеты (понятно с родным кварцем в 8 МГЦ). Затем меняете кварц на другой, вставляете чистую дискету и нажимаете на пробел, чтобы начался формат. Узнайте с каким кварцем начнутся появления дохлых секторов. На хорошем дисководе это случается при кварце более 18 МГЦ, хотя для этого надо иметь такт Z80 повыше. Но для кварца 16.5 МГЦ клока Z80 в 2.5 МГЦ хватает. А скорости 2-х мегагерцового СПЕЦИАЛИСТА хватит на формат 640 кб на диск.

Vladimir_S
20.12.2017, 13:49
Программное решение всегда выгоднее и проще.
Возможно в чем то ты и прав. Но я ретрокомпами занимаюсь не для того что бы реализовывать только чужие идеи.

zx_
21.12.2017, 13:45
Это ограничения сделал Е.Седов, в оригинале Apple-DOS формат допускает 32 сектора на трек. Потому мне пришлось писать свою реализацию Apple-DOS (понятно не конверсия, а написано с нуля), где нет таких ограничений.

Пора переименовать RK-DOS в SP DOS II
к примеру

barsik
21.12.2017, 15:51
SP-DOS это зарегистрированная (в ж.РАДИО 12.1992) торговая марка makbar-а. Для начала надо добиться работы RK-DOS. Пока она и CP/M это единственные DOS пригодные для КР580.

- - - Добавлено - - -

... для СПЕЦИАЛИСТА на КР580, а не вообще в мире. Имеются ввиду DOS, что реально доступны для использования, т.е такие, чьи исходники или хотя бы коды имеются в наличии.

makbar
21.12.2017, 21:37
SP-DOS это зарегистрированная (в ж.РАДИО 12.1992) торговая марка makbar-а. Для начала надо добиться работы RK-DOS. Пока она и CP/M это единственные DOS пригодные для КР580.

))

barsik
21.12.2017, 23:51
SP-DOS это зарегистрированная (в ж.РАДИО 12.1992) торговая марка makbar-а. Для начала надо добиться работы RK-DOS. Пока она и CP/M это единственные DOS пригодные для КР580
))
В чём смысл такого поста? Если и раньше некоторые общались на форуме междометиями в стиле Эллочки людоедки, то переход к общению вообще без букв это уже перебор.

Очевидно же, что имелось ввиду для СПЕЦИАЛИСТА на КР580, а не вообще в мире. Имеются в виду DOS, что реально доступны для использования, т.е такие, чьи исходники или хотя бы коды имеются в наличии.

- - - Добавлено - - -

Форматёр Е.Седова не имеет индикации процесса, что неудобно в эмуляторе. В реале хотя-бы слышно стук шагового мотора. А в эмуляторе ужасающая тишина, наводящая на мысль о зависе. Поэтому перетранслировал форматёр от ОРИОНА. В нём есть вывод форматируемого трека и сектора, показываются дохлые сектора и запускать можно без параметров (тогда задаёт вопросы, на которые для умолчания можно нажимать <ВК>). Также теперь в любой момент можно нажать ESC или ^C (F4) для аборта.

Т.к в виртуальных дисках эмулятора нет дохлых секторов, то для проверки в эмуляторе пришлось сделать дохлые сектора. Если интересует как, то дизассемблер Вам в помощь. Сделал также специальную программу, которая злонамеренно портит сектора в образе диска (и на дискете в реале) просто заменяя контрольные суммы секторов на неверные. Это надо для отладки CHKDSK в эмуляторе.

Во вложении форматёр для РК86 и форматёр СПЕЦИАЛИСТА для полностью совместимой версии RK-DOS. Полная совместимость означает, что адрес размещения тот же, упр.ячейки DOS также посередине ОЗУ (7500) и адрес порта РК-КНГМД тот же. Полная совместимость не означает полную совместимость всех дисковых программ от РК86, а только корректных программ, работающих средствами DOS и ROM-BIOS.

В посте #94 (http://zx-pk.ru/threads/28485-rk-kngmd-dlya-quot-spetsialista-quot.html?p=941845&viewfull=1#post941845) с выкладкой RK-DOS забыл в некоторых исходниках SYS-файлов заменить Z80-команды, так что если файл при КР580 не работает, доредактируйте вручную и перетранслируйте.

makbar
22.12.2017, 19:00
Очевидно же, что имелось ввиду для СПЕЦИАЛИСТА на КР580, а не вообще в мире. Имеются в виду DOS, что реально доступны для использования, т.е такие, чьи исходники или хотя бы коды имеются в наличии.
Действительно, осталось только это... набить и оттранслировать ))
http://maksoft.myjino.ru/pict/spdos_startlist1.jpg

хотя можно попросить местного Денн-а, он расковырял вариант под Орион.

barsik
22.12.2017, 20:38
осталось только... набить и оттранслировать
можно попросить местного Денн-а
Чем больше DOS, тем лучше. Хотя бы из исторической точки зрения. Но есть и практический интерес. Чтобы взять подпрограммы чтения/записи сектора, т.к якобы, их использование может позволить решить скоростную проблему СПЕЦИАЛИСТА, без хитроумных трюков с подвеской процессора сигналом HOLD, изобретённых Л.Афанасьевым в 1992.

Даже если бы были только коды, и-то было бы хорошо. Ведь все любят дизассемблировать чужие DOS. А авторский исходник с комментариями это ещё лучше.

Хотя пугает формат FCB совместимый с ORDOS. Не понятно зачем на СПЕЦИАЛИСТ с дисководом переносить убогий формат ORDOS. И даже в этом случае почему 3 свободных байта в ORDOS-метке использовать как расширение имени. Ведь во всех приличных DOS на имя отводится не менее 11 символов (в RK-DOS 13 символов). Формат ORDOS имеет смысл для ROM-диска и там уже прочно прописался. Но для дисковода это зачем?

Судя по отступу SP-DOS занимает 7800...8F00 на СПЕЦИАЛИСТЕ и 8C00...B800 на ОРИОНЕ, т.е 5.75 кб на СПЕЦИАЛИСТЕ и 11 кб на ОРИОНЕ. Если Вы отсканируете весь исходник, то кто-то сможет набрать в файл, да и Denn сможет узнать правильные названия меток. В крайнем случае, отсканируйте хотя бы подпрограммы чтения и записи сектора и процедуру формат трека. Тогда это можно будет использовать в других DOS и сделать их версии для Вашего железа.

Какой интерфейс программиста в SP-DOS? Надеюсь, что там есть интерфейс программиста. А то ведь бывают DOS у которых вообще нет интерфейса программиста, а DOS является расширением бейсика, как сделано в Apple-DOS (http://www.computerhistory.org/atchm/apple-ii-dos-source-code/), что крайне неудобно для программирования дисковых прикладных программ (программе приходится симулировать команды бейсика, это не только неудобно и медленнее, но и ограничивает возможности доступа к файлу возможностями бейсика).

makbar
23.12.2017, 17:19
Какой интерфейс программиста в SP-DOS?
Естественно есть. Точки входа. В журнале Радио 1-2/93 можно прочитать.



без хитроумных трюков с подвеской процессора сигналом HOLD,
какой еще холд?) я уже 10 раз тут писал почему у меня регистр повешен на INTRQ и DRQ.



хотя бы подпрограммы чтения и записи сектора и процедуру формат трека.
Денн именно это и расковырял,о чем он писал в теме Ориона когда я там объявился.

barsik
23.12.2017, 23:02
Сразу вопрос почему SP-DOS и коммандер для неё нельзя посмотреть в эмуляторах? Там можно посмотреть уже почти все системы для ОРИОНА и СПЕЦИАЛИСТА, что существовали (не представленные в эмуляторах ранее для СПЕЦИАЛИСТА системы RAMDOS и CP/M станут доступны в ближайшее время). Для этого даже не требуется помощь автора эмулятора по эмуляции железа.

Эмулятор B2M просто редактированием конфига позволяет поиметь мегабайты доп.памяти, как в ОРИОНЕ, так и в СПЕЦИАЛИСТЕ. Эмулятор EMU80 ранее не имел банок в СПЕЦИАЛИСТЕ, но недавно и эта проблема была решена, - 4 банки коммутируемые портом F9 уже есть. А наличие банок позволяет адаптировать любую DOS, заменив в ней подпрограммы чтения/записи сектора на подпрограммы для RAM-диска.

Если лениво писать эти подпрограммы самому, или, например, взять из CP/M для ОРИОНА, то могу дать такие подпрограммы в готовом виде. Тогда вся адаптация любой DOS, исходники которой имеются, занимает несколько минут. Или дайте мне исходники SP-DOS и я это сделаю сам.

Авторы эмуляторов ещё не отказывали никому в эмуляции реального железа для которого есть ПО. Тем более, что переделка эмуляторов под КНГМД SP-DOS, думаю, проста, т.к в уже эмулированном в эмуляторах контроллере MX есть эмуляция выходов INTRQ и DRQ (по ним срабатывает аппаратная готовность). А смена битов в регистре управления не проблема. Напишите авторам эмуляторов и они сделают поддержку Вашего КНГМД.



Какой интерфейс программиста в SP-DOS?В журнале Радио 1-2/93 можно прочитать.
Это и так было ясно. В качестве ответа ожидался список функций или ссылка (http://radioway.ru/author/korotkin_m_/).


какой еще HOLD? я уже 10 раз тут писал почему у меня регистр повешен на INTRQ и DRQ.
HOLD использовал Л.Афанасьев в 1992 для аппаратного решения проблемы. Кстати, очень красивое инженерное решение. И у него тоже есть порт для ввода сигналов INTRQ и DRQ. Но ему этого не хватило, отчего и пришлось использовать аппаратное решение. "Небольшое" преувеличение, один раз это не 10 раз.


Денн именно это и расковырял
Так попросите его выложить исходники, чтобы можно было странслировать для СПЕЦИАЛИСТА. Хотя лучше всё-же опубликовать оригинальные исходники.



Надеюсь, что там есть интерфейс программиста.Естественно естьТочно есть, но он на уровне бейсика, т.е те же цельно-файловые LOAD, SAVE и KILL. Впрочем, уже этого достаточно для большинства задач.

Без сомнения, SP-DOS для своего времени это грандиозный шаг вперед, относительно ORDOS и представляла интерес именно как другая система. Однако позиционирование её не в качестве самостоятельной DOS, а в виде примитивного CHANGER$ для ORDOS всё испортило. Разумно было бы снабдить SP-DOS системным и инструментальным ПО, т.е дисковым редактором, ассемблером, бейсиком и нортоном, а также ввести VDISK и с ORDOS было бы покончено. А для обмена с ORDOS включить действительно Changer$, по типу Changer$ для МГ-ленты. А лучше просто в нортоне ввести возможность в панели включать не только дисковод, но и квазидиск.

Из-за непонятного желания сделать из вполне приличной полноценной DOS жалкий придаток к ORDOS, формат каталоговой записи повторяет ORDOS-метку, жертвуя ради этого полноценным именем в 11 символов, как это во всех профессиональных DOS. Зачем СПЕЦИАЛИСТУ DOS, которая рассчитана на поддержку ORDOS? Ведь в СПЕЦИАЛИСТЕ нет ни ORDOS, ни квазидисков.

По вышеприведённой ссылке посмотрел описание SP-DOS и функций. В концепции SP-DOS использована идея FAT, в котором размещение файла задаётся связанным списком кластеров. Но вот структура каталога странная. Зачем задавать номер файла его позицией в каталоге? В каталогой записи есть 3 неиспользуемых байта, где можно хранить номер файла. Тогда бы получилась полная концепция заимствованная из MSDOS.

Если концепция диска, вполне грамотная, то вот набор функций для программиста примитивный. DOS А.Мамонтова имеет такой же набор функций, но у неё размер всего 2 кб.

SP-DOS приличная разработка и при использовании на ОРИОНЕ была не хуже других, о чём свидетельствуют отзывы пользователей. Но справедливости ради невозможно не признать, что она существенно уступает RK-DOS Е.Седова, которая написана гораздо более профессионально, имеет намного больший набор функций при меньшем размере и оставляет для программ намного больший уровень TPA. Сравнение с RK-DOS правомерно, т.к обе DOS опубликованы в одном журнале.

Вероятно, SP-DOS получила бы бОльшее применение и скорее всего стала бы основной DOS ОРИОНА, если бы были использованы не только идеи MSDOS, а была бы совместимость по формату диска. Именно это сделали в то же самое время в LK-DOS и уже намного позднее и в MSCOMAN$. Но увы, для них не было публикаций в ж.РАДИО. Кстати, расширить набор функций, хоть до всех дисковых функций MSDOS можно было бы и позднее, когда SP-DOS стала бы очень популярной.

makbar
24.12.2017, 17:00
Так попросите его выложить исходники, чтобы можно было странслировать для СПЕЦИАЛИСТА.
пардон, вам надо, вы и просите)

makbar, прекрасный КНГМД, очень грамотная разработка. А работу с ВГ93 я изучал с помощью нагло дизассемблированной SPDOS, огромное спасибо.


И второе, все хотел спросить, вы ( в смысле не вы лично, а те кто сам писал коды) в процедуре форматирования interlace секторов используете?

- - - Добавлено - - -


Вероятно, SP-DOS получила бы бОльшее применение и скорее всего стала бы основной DOS ОРИОНА, если бы были использованы не только идеи MSDOS, а была бы совместимость по формату диска.
А разве мощностей и ресурсов Ориона хватило бы для реализации полноценной Microsoft FAT?
Каждой эпохе своя FS...

barsik
24.12.2017, 18:16
Так попросите Denn-а выложить исходники, чтобы можно было странслировать для СПЕЦИАЛИСТА.Вам надо, вы и просите
Ваша DOS, не моя.

В 80-тые и 90-тые попросить чужой исходник считалось наглостью, почти оскорблением. Это личное. Потому у меня в основном все чужие исходники получены дизассемблированием, и последующим изучением с написанием комментариев. Кстати, это много даёт в плане повышения квалификации.

Если я попрошу Denn-а, то он меня пошлёт и думаю, очень далеко. Мне это не надо. Для удовлетворения люболытства мне бы хватило посмотреть скрин-шоты Вашего нортона и 10 минут в IDA с кодом SP-DOS для ОРИОНА. Я в состоянии написать полный аналог SP-DOS для СПЕЦИАЛИСТА за 8 часов. Что и сделаю из спортивного интереса, если исходник SP-DOS не появится. Но нужны коды нортона ОРИОНА для этой DOS и вообще всё ПО, что работает в этой DOS на ОРИОНЕ.

Иметь ещё одну DOS для СПЕЦИАЛИСТА полезно. Но интересен именно вариант для СПЕЦИАЛИСТА, а не для ОРИОНА. Полагаю, что ядро этой DOS размером ~2 кб, а остальное в версии для ОРИОНА это CCP работающий функциями ORDOS, так что при конверсии для СПЕЦИАЛИСТА из версии для ОРИОНА придётся выкинуть половину кода и написать свой CCP с нуля. Потому-то интересна именно версия для СПЕЦИАЛИСТА.


Всё хотел спросить, Вы в процедуре форматирования interlace секторов используете?
Interlace это на экране, чересстрочная развёртка. А более умное чередование секторов называется интерливинг.

Интерливинг ускоряет загрузку. Например, вставка между сектором 1 и 2 другого сектора, например 6, позволяет пока мимо головки идёт сектор 6, закончить обработку сектора 1 (посчитать КС сектора и сравнить её с считанной) и без необходимости ждать целый оборот колеса сразу приступить к чтению сектора 2.

Естественно, я хотел повысить скорость и использовал интерливинг с середины 90-тых для многих DOS. В форматёрах при старте задаётся вопрос нужен или нет интерливинг. Для нечётного числа секторов на трек используется интерливинг с шагом 1, а для нечётного числа секторов с шагом 2 сектора. Интерливинг лучше ускоряет при маленьком размере секторов. Для CP/M ОРИОНА с КНГМД на ВГ93 форматёр UNIFOR (который форматирует на все форматы) также использовал интерливинг, а оригинальный форматёр от Корвета - нет.

Некоторые DOS я транслировал для секторов размером в 256, 512 и 1024 байта. При маленьких секторах несмотря на интерливинг падает скорость обмена. А при больших секторах падает TPA. Например, в RK-DOS при работе DOS под цели системы тратится ОЗУ размером в 2 физических сектора - один буфер для VTOC и каталога, второй для T/S LIST. Размер сектора в 512 байт оказался самым оптимальным.

Посмотрите исходник форматёра во вложении. Это универсальный форматёр для любого размера секторов, любого числа секторов на трек и даже с любым числом сторон диска (SS/DS). Достаточно изменить цифры в файле PARAMS.INC и чпок... через секунду странслированы форматер и DOS на любой формат. В файле FORM16.ASM в строке 114 запрос о интерливинге, а в строке 416 видно, как интерливинг осуществляется. В данном исходнике параметры настроены на формат 16 секторов по 256 байт на трек, что даёт 640 кб на диск.


не вы лично, а те кто сам писал коды
Тут надо было уточнить о каких кодах идёт речь. О форматёре для какой DOS.

Вообще-то, я тоже иногда САМ пишу, просить это сделать некого. С начала 90-тых до середины нулевых писал программы практически каждый день. Сейчас конечно многое позабыл и потому стал чуть ли не новичком в программировании.

А если вопрос был о форматёре RK-DOS, который написал Е.Седов, то да, он использовал интерливинг секторов для ускорения обмена.


разве мощностей и ресурсов Ориона хватило бы для реализации полноценной Microsoft FAT?
Хватило с запасом. Вы же в SP-DOS реализовали почти MSDOS. Отличие в том, что нет упаковки 12 битовых слов в FAT и другой формат каталога. С дисководом 8-ми разрядки работают с той же скоростью, что и PC, т.к скорость обмена определяется не мощностью CPU, а кварцем в КНГМД. Да и для дискового формата MSDOS требования к скорости CPU ниже, чем при формате CP/M (отпадает полное сканирование каталога и построение Allocation Table).

В начале 90-тых использовалась программа обмена с дисками MSDOS написанная даже не на ассемблере, а на Паскале. Программа на нём работает примерно в 6 раз медленнее, чем ассемблерная. Получилось тормознуто, но работало. А на ассемблере проблем вообще нет. А файловая система FAT на 8-ми разрядке с 1984 года прекрасно работает на MSX. И даже с подкаталогами (в MSXDOS 2.0). На ОРИОНЕ тоже проблем не было. Не так уж ОРИОН превосходит СПЕЦИАЛИСТ.

makbar
24.12.2017, 21:56
Interlace это на экране, чересстрочная развёртка. А более умное чередование секторов называется интерливинг.
точно. Запамятовал.

- - - Добавлено - - -


Я в состоянии написать полный аналог SP-DOS для СПЕЦИАЛИСТА за 8 часов. Что и сделаю из спортивного интереса, если исходник SP-DOS не появится.
Круто, а главное - своевременно.

makbar
07.01.2018, 23:36
Решил тут зачемто еще раз глянуть схему http://www.spetsialist-mx.ru/index22.html
Это какойто ад...

barsik
08.01.2018, 07:07
Это уж чересчур категорично. Мне наоборот эта схемка понравилась. Мне вообще подобные схемы нравятся по принципу, чем проще, тем лучше. Делать-то эту схему обычно людям приходилось вручную.

Схема, похоже не точная. Например, не дорисовано, куда идут 1 и 2 ноги 155 ИД4, видимо это ША3. Но эта схема по числу деталей даже проще, чем КНГМД от ОРИОНА. Хотя этот выигрыш получен плохим путём, за счёт использования такта 1 МГЦ прямо из самого СПЕЦИАЛИСТА, вместо собственного генератора, как общепринято. Из-за этого нельзя использовать контроллер на СПЕЦИАЛИСТЕ с другим тактом, что очень большой недостаток, т.к у меня в планах иметь СПЕЦИАЛИСТ на 3 МГЦ, причём без плющенного экрана.

Кстати, встретил в теме про MX-дисковод обидную фразу - слова Леонида Николаевича Афанасьева: раздельные кварцевые генераторы недопустимы. Сомневаюсь в этом. Почему нельзя иметь один такт на ВГ93 и узел чтения и второй такт на всё остальное. HOLD не обязан быть синхронным, а если режим захвата прекратится спустя не пол машинного такта, а спустя целый маш.такт после сброса триггера HOLD по DRQ, то это вызовет лишь крошечную задержку программы, задержку в петле чтения/записи всего на пару процентов. Вряд-ли это будет фатальным.

И конечно, руки надо отрывать тем, кто рисует схемы используя цифры для нумерации цепей вместо "говорящих" о назначении цепей символических названий. Это же относится и к ссылкам на схему СПЕЦИАЛИСТА, например при D43/13 можно было в скобках указать, что это HOLD КР580.

Некоторые названия ног ВГ93 неверные. Например, RDV это должно было быть RDY (от READY), готовность самого дисковода. В схемах для Синклера это обычно называют CRDY и вешают на +5В. А в схеме КНГМД ОРИОНА эта нога называется HLT и напрямую соединяется с сигналом HLD, т.е готовность есть тогда, когда головка опущена. 37 нога должна называться DDEN (Disk Density). 33 нога WFDE (сигнал ошибки) в контроллелах ZX и ОРИОНА не используются. А трек компенсация, для укорочения импульсов начиная с 43 дорожки наоборот не используется. Не понятно так ли уж необходим сигнал WF/DE (ошибка), что блокирует импульсы записи. В других контроллерах такого не встречал.

В общем, хорошо бы эту схемку перечертить, тогда она будет более понятной. Можно даже упростить, заменив порт для программного выбора плотности на штырьки с надеваемой на них перемычкой. И убрав ещё один триггер для выбора дисковода (мало кто мог позволить себе иметь целых два дисковода). Это даст экономию в целый корпус 155 ТМ2.

По схеме не понял, что бывает при ошибках. Отдав команду чтения сектора, процессор читает байты по готовности. Но если открыть карман дисковода, то будет ошибка, DRQ прекратит поступать, а в регистре состояния будет ошибка. Но процессор останется в режиме HOLD, т.к в петле чтения/записи регистр состояния не контроллируется.

Это может работать только, если DRQ в случае ошибки выставляется в единицу. В связи с этим непонятно назначение цепи 1. Зачем для её формирования используется инвертированный сигнал SIDE - цепь 26? Это какая-то ошибка в схеме.

Вместо сигнала 26 для сброса HOLD в случае ошибки нужен сигнал открытия кармана или какой-то аппаратный признак ошибки. Можно сбрасывать HOLD одновибратором, - если DRQ долго нет, то HOLD сбрасывается. Имея прерывания можно сделать так, чтобы возникало прерывание, если в течение 100 микросекунд нет фронта DRQ. Как работает этот контроллер НГМД точно знают авторы эмулятора СПЕЦИАЛИСТ-MX.

Со схемой можно разобраться, только нужно найти оригинал этой схемы от Л.Афанасьева. Ссылка на схему (http://zx-pk.ru/threads/18006-spetsialist_mkh-kontroller-diskovoda.html?p=460885&viewfull=1#post460885) у меня не работает. Остаётся проблема, где взять готовые подпрограммы чтения/записи сектора и формат трека. Очевидно, что имеющиеся подпрограммы от ОРИОНА, Львова, ZX-Spectrum и других компьютеров не подойдут. Алгоритм совсем иной. Вряд ли можно найти исходники, но дискеты в формате MX-DOS, кажется, сохранились в эмуляторах. Их можно дизассемблировать, чтобы взять код нужных подпрограмм. Можно провести собственные изыскания и экспериментальным путём разработать нужные подпрограммы. Но мне это делать пока не хочется

А паять проводками именно эту схему не обязательно. Т.к обычный контроллер ОРИОНА проще превратить в такой контроллер, чем в контроллер для SP-DOS. Достаточно добавить всего один триггер 155 ТМ2, формирующий сигнал HOLD. Причём удобнее этот триггер ставить не на КНГМД, а на основной плате СПЕЦИАЛИСТА. Годится любой свободный чип-селект, подав его на C-вход, а на D-вход - сигнал /WR. А на ОРИОНЕ для взвода триггера HOLD удобно использовать уже имеющийся сигнал "STA FB00".

Такой контроллер для СПЕЦИАЛИСТА имеет смысл, т.к позволяет писать в формате стандартных БИС, отчего такую дискету можно считать в IBM PC, что невозможно сделать с дискетой записанной программным контроллером от РК86. И ёмкость диска с таким контроллером больше, чем при РК-КНГМД.

Если на СПЕЦИАЛИСТЕ использован системный разъём СНП58-64, такой-же как в ОРИОНЕ, причём с той же самой распайкой сигналов, то можно напрямую использовать периферию ОРИОНА и ОРИОН-ПРО. В противном случае придётся спаять переходник - косу с двумя разъёмами на концах.

fifan
08.01.2018, 10:17
не дорисовано, куда идут 1 и 2 ноги 155 ИД4, видимо это ША3.
А нет никуда не идёт - вот так в воздухе и висят ножки.


за счёт использования такта 1 МГЦ прямо из самого СПЕЦИАЛИСТА, вместо собственного генератора, как общепринято. Из-за этого нельзя использовать с СПЕЦИАЛИСТОМ с другим тактом.
Кстати, встретил в теме про MX-дисковод обидную фразу - слова Леонида Николаевича Афанасьева: раздельные кварцевые генераторы недопустимы. Это меня не напугало, потому что это чушь.
barsik, определись, что 1 МГц нужно брать только со Специалиста и раздельные кварцевые генераторы недопустимы. Сам себе противоречишь.

В Специалисте_МХ2 где нет 1 и 4 МГц мне так и не удалось запустить контроллер дисковода. И именно Афанасьев мне сказал, тогда что "нельзя использовать с СПЕЦИАЛИСТОМ с другим тактом".


В общем, хорошо бы эту схемку перечертить, тогда она будет более понятной. Со схемой можно разобраться, только нужно найти оригинал этой схемы от Л.Афанасьева.
Схема работоспособная. Пользователь Байкал собирал её (http://zx-pk.ru/threads/18006-spetsialist_mkh-kontroller-diskovoda.html?p=679704&viewfull=1#post679704) - всё работает. Тут фотка (http://www.spetsialist-mx.ru/images/SpetsialistM_MX.png) его переделанного компьютера под Специалист МХ с платой контроллера дисковода.


Ссылка на схему (http://zx-pk.ru/threads/18006-spetsialist_mkh-kontroller-diskovoda.html?p=460885&viewfull=1#post460885) у меня не работает.
А у меня ссылка работает. Схема мною перерисована с оригинальной (http://www.spetsialist-mx.ru/schemes/FDDController3.png), только я применил другой кварцевый генератор. Итог не заработало. ЛР11 я заменил логическим элементом И/НЕ применимо двум дисководам 3,5 дюйма. Там снят контроллер дисковода с засунутой схемой в плисину. Я видео (https://youtu.be/oTJVOQpc9ds) снял. Потом я забросил сборку контроллера дисковода для Специалиста МХ2, да и читалка с SD карты действует - зачем дисковод?


Остаётся проблема, где взять готовые подпрограммы чтения/записи сектора и формат трека. Вряд ли можно найти исходники, но дискеты в формате MX-DOS, кажется, сохранились в эмуляторах. Их можно дизассемблировать, чтобы взять код нужных подпрограмм. Можно провести собственные изыскания и экспериментальным путём разработать нужные подпрограммы.
Всё у меня из программ, исходников есть, в эмуляторе работает (реальной железки контроллера дисковода у меня нет). b2m сразу предупредил, что форматирование в эмуляторе не работает - так что это пока проверить не где.

Резюме: barsik, для начала нужно собрать сам контроллер дисковода, как сделал Байкал. А потом уже судить что работает, а что нет. Как можно судить о схеме не испробовав её?

barsik
08.01.2018, 11:35
barsik, определись, что 1 МГц нужно брать только со Специалиста и раздельные кварцевые генераторы недопустимы. Сам себе противоречишь.
Где же я противоречу? В этой схеме сделано так, что 1 МГЦ берётся из платы СПЕЦИАЛИСТА. И это-то как раз я считаю неудачным, т.к кварц 8 МГЦ в самом СПЕЦИАЛИСТЕ неудобен по многим причинам. Не устраивает, что растр вылезает за пределы экрана в телевизоре и не видно 3 последние колонки. А вот при кварце 9 МГЦ растр отображается целиком и быстродействие побыстрее.

Но меня привлекает идея сделать кратность обращения видеоадаптера и такта CPU равной 3-м. Сейчас кратность 2. Т.е видеодаптер нуждается минимум в одном обращении к ОЗУ за 2 такта. А если такт /RAS,/CAS и такт CPU поднять с 2 МГЦ до 3 МГЦ, то понадобится всего одно обращение за 3 цикла /RAS, /CAS. ОЗУ останется прозрачным, а быстродействие возрастёт до 3 МГЦ. Это будет самая быстрая ЭВМ на отечественном КР580. Только ради этой идеи я отказался от использования Z80, который был нужен не ради его продвинутых команд, а именно ради быстродействия.

Я лишь высказал мысль, что отсутствие своего генератора на 8 МГЦ это недостаток схемы. На КНГМД от ОРИОНА есть свой кварц на 8 МГЦ, потому КНГМД не мешает турбировать ОРИОН. Но затем я обнаружил неточности в схеме и стал читать тему MX-дисковод, чтобы узнать побольше о этом КНГМД и его DOS. Где и наткнулся на фразу, что клок 1 МГЦ должен браться из платы СПЕЦИАЛИСТА. Но у меня нет ни одного СПЕЦИАЛИСТА с кварцем 8 МГЦ. Это-то и обидно. Но в схеме я так и не нашёл причины, почему такт 1 МГЦ надо брать именно из основной платы, а нельзя смонтировать свой генератор на 8 МГЦ и поставить ИЕ5 для деления на 8.

По поводу сигнала 26, который участвует в формировании сигнала 1, что сбрасывает HOLD, как я предположил в случае апп.ошибки. Я понял, что это не может быть сигнал "сторона диска" и в схеме ошибка. Читая тему MX-дисковод я нашёл другую схему (http://zx-pk.ru/threads/18006-spetsialist_mkh-kontroller-diskovoda.html?p=645482&viewfull=1#post645482), где вместо цепи 26 идёт цепь 8. Разберитесь со схемой на Вашем сайте, есть ли хоть одна правильная схема?

Собирать контроллер дисковода именно по такой схеме нет смысла. У меня есть ненужные платы КНГМД на ВГ93. Их даже переделывать не надо. Контроллер на идее HOLD мне нравится больше, чем 3 других контроллера НГМД для СПЕЦИАЛИСТА для которые не только программ, но и информации никакой нет и никто даже не видел их работающими.

Интересно повторить не саму схему Л.Афанасьева, а его идею. Тем более, что про MX-DOS я пока ничего не знаю. Я точно знаю, что этот контроллер работал и MX-DOS тоже, т.к в 1994 переписывался с людьми у которых это всё работало. Но не знаю даже, что это за DOS, авторская разработка или CP/M в оригинале (или даже с доработками).


Всё у меня из программ, исходников есть
Не понятно есть у Вас исходник MX-DOS и исходник форматёра или только сами программы. Исходник всей MX-DOS даже не обязателен, достаточно кода DOS-BIOS (если конечно в этой DOS есть деление на BDOS, BIOS и CCP). Интересуют лишь подпрограммы чтения/записи сектора.

Впрочем, даже меньше, - нужна всего-лишь примерно такая коротенькая подпрограмма.


; D0 - занято
; D1 - запрос данных (дубль DRQ)

RDLOOP: LD A,(DE) ; LD A,(RGCOM)
RRA
RET NC ; если конец операции (D0=0)
RRA
JP NC,RDLOOP ; если нет запроса данных (D1=0)
LD A,(BC) ; LD A,(RGDATA) получаем байт
LD (HL),A ; пишем байт в ОЗУ
INC HL
JP RDLOOP


Тогда не составит труда переделать обычные подпрограммы для ВГ93 на те, что работают на КНГМД с ожиданием DRQ с помощью HOLD. В этой подпрограмме контроллер на HOLD позволяет упразднить 2 команды контроля бита DRQ. Возможно этого хватает, чтобы компенсировать пониженную скорость СПЕЦИАЛИСТА. А возможно, что этого всё-равно не хватает и дополнительно применён трюк в стиле Е.Седова типа INC (HL) на регистр ВГ93, чтобы получить флаг готовности за одну команду вместо двух.



не дорисовано, куда идут 1 и 2 ноги 155 ИД4А нет никуда не идёт - вот так в воздухе и висят ножки
Тогда эта схема просто дохлая.

fifan
08.01.2018, 12:03
Разберитесь со схемой на Вашем сайте, есть ли хоть одна правильная схема?
На странице (http://www.spetsialist-mx.ru/index22.html) приведены две схемы. Первая - для работы с 5-ти дюймовыми дисководами, вторая - и 5 и с 3-х дюймовыми. Я как понял, что её и собирал Байкал (там где есть ЛР11) и её я и считаю последней, самой правильной и работоспособной. Как только у меня появится равноценный Специалист с МХ схемой (я надеюсь на мапера МХ для Сябра), то попробую всё таки запустить контроллер дисковода со схемой в плисине.

Исходники RAMFOS и MX-DOS я могу предоставить, что-то переделывать не хочу.

Я писал год назад свой SpetsCommander, в котором я все устройства Специалиста МХ/МХ2 я поддержал: контроллер дисковода, Flash-диск от Шурика/HardWareMan'а, SD контроллер от Vinxru и HardWareMan'а. Получилось очень много места занимает программа, причём я почти не использовал готовые подпрограммы RAMFOS'а. Я решил его забросить.

Сейчас на базе RAMFOS'а версии 6.4 (описание и исходники предоставлены Шевцовым) я пишу свой MX-DOS, но без поддержки дисковода, с поддержкой SD контроллера от Vinxru. Он будет сидеть с адреса E400, с этого же адреса загружалась MX-DOS с дискеты ранее. Особенности: использование не страничного вывода на экран RAM-диска, а как-бы сплошного списка всех файлов. Из трудностей: не могу никак использовать внутренний редактор RAMFOS. Из достижений - запуск файлов с ROM/RAM-дисков, SD карты, копирование файла с/на RAM-диск.

barsik
08.01.2018, 12:22
Исходники RAMFOS и MX-DOS могу предоставить
RAMFOS, так понимаю, это что-то типа ORDOS в ОРИОНЕ. Это не интересует. Тем более, что для базового СПЕЦИАЛИСТА это не годится.

Интересует только дискетная MX-DOS, причём не для использования, а для изучения. Если это CP/M, то BDOS и CCP не надо. Достаточно только BIOS, где дисковые подпрограммы низкого уровня. Это не особо горит, но вскоре я освобожусь и мог бы испытать в реале эти подпрограммы чтения/записи сектора. Это не потребует много пайки, т.к уже спаянных и настроенных контроллеров дисковода на ВГ93 имею достаточное количество, так что спаять придётся только переходник (косу с разъёмами) и установить в СПЕЦИАЛИСТ 155 ТМ2, формирующий HOLD на КР580.

Вообще-то я уже скачал из темы MX-дисковод MX-DOS. Но файл bst_mx0.odi оказался вовсе не ODI, при его открытии Steinblume выдаёт какую-то ерунду.

Что не удивительно, т.к это совсем не CP/M диск. Тогда вытащил из начала этого образа диска первые 1400H байтов и дизассемблировал это. Хотя в начале этого дампа стоит текст "Dos_MX V3.6", но никаких функций ДОС я там не нашёл. На ДОС не похоже. Скорее это похоже на какую-то графическую оболочку активно выводящую рамки псевдографикой. Подрограмм низкого уровня я там тоже не нашёл.

- - - Добавлено - - -

Тогда вспомнил, что читал в теме MX-дисковод про программу LODI.EXE от Л.Афанасьева. Скачав и перетащив мышью файл bst_mx0.odi на на файл LODI.EXE увидел содержимое этого образа диска. Увидев, что есть подкаталоги сразу понял, что MX-DOS это не CP/M, а расширение ODI это не акроним от слов "Орион диск", а просто обман. Затем с помощью этой программы скопировал файл MX_DOS_4 EXE в файл MX_DOS_4 EXE.bin на винчестере.

А затем в каталоге SYSTEM нашёл 3 файла CPMx.EXE и короткое сообщение, что CP/M получена адаптацией CP/M от ОРИОНА (CP/M от МП ORION-SERVICE). Теперь нет проблем выдернуть из этой CP/M подпрограммы чтения/записи сектора, т.к в отличие от MX-DOS, CP/M хорошо документирована.

fifan
08.01.2018, 15:30
Хотя в начале этого дампа стоит текст "Dos_MX V3.6", но никаких функций ДОС я там не нашёл. На ДОС не похоже. Скорее это похоже на какую-то графическую оболочку активно выводящую рамки псевдографикой. Подпрограмм низкого уровня я там тоже не нашёл.
Ну как это нет подпрограмм низкого уровня. А как же подпрограмма установки дисковода в исходное положение, выдачи команды, поиска дорожки, установки номера сектора, записи сектора с прерыванием МП, проверки сектора чтением, чтения сектора - перечислил найденные подпрограммы.

barsik
08.01.2018, 17:44
Ну вот, дизассемблировал CP/M для СПЕЦИАЛИСТА-MX. Это заняло 2 часа, т.к пришлось переименовывать сотни меток, чтобы исходник стал читабельным. Хотя реально нужны были только две подпрограммы, остальное отредактировал просто для порядка.

Это не все подпрограммы, что нужны для использования, но остальные подпрограммы уже не критичны к скорости. Хотя готовность и в остальных подпрограммах в этих ДОС так же проверяются трюком с HOLD, но это уже не обязательно, достаточно программно читать регистр состояния.

Теперь нет проблем те же подпрограммы применить и для обычного СПЕЦИАЛИСТА с таким КНГМД для любых DOS. Хотя для RK-DOS такой контроллер избыточен, т.к RK-DOS не может работать с дисками в 800 кб.

Для использования на обычном СПЕЦИАЛИСТЕ с контроллером от ОРИОНА достаточно подставить адреса порта FC00 и тот же самый контроллер, что требовал 2.5 МГЦ будет работать и на 2 МГЦ. Как видите это достигнуто не только применением захвата шины, но и упрощением подпрограмм. Убрали цикл контроля занятости ВГ75. Эти две меры в совокупности и дали выигрыш. Ясно что попытки в лоб использовать подпрограммы для ОРИОНА с таким КНГМД не привели бы ни к чему хорошему. Поэтому полезно дизассемблировать.

Кстати можно было ещё чуть ускорить, если сделать адрес буфера кратным 00, что позволяет контроллировать только старший байт в регистре указателе адреса в буфере (H). Вот подпрограммы использованные в CP/M для СПЕЦИАЛИСТ-MX. Думаю, что и в MX-DOS такие же. Но MX-DOS нас пока не интересует.



PHOLD EQU 0FFF0H ; адрес для зависа

RGCOM EQU 0FFE8H ; адрес регистра команд
RGTRK EQU 0FFE9H ; адрес регистра дорожки
RGSEC EQU 0FFEAH ; адрес регистра сектора
RGDATA EQU 0FFEBH ; адрес регистра данных

RDSEC: LD BC,RGDATA
LD DE,400H
LD A,80H ; команда читать сектор
CALL EXEC

RD_LOO: LD (PHOLD),A ; уходим в HOLD, ждём DRQ
LD A,(BC) ; при выходе читаем байт
LD (HL),A
INC HL
DEC DE
LD A,D
OR E
JP NZ,RD_LOO
RDDONE:

; ----------------------------------------------

WRSEC: CALL UNIT
RET NZ
PUSH HL
LD BC,RGDATA
LD DE,400H
LD A,0A4H ; команда писать сектор
LD (RGCOM),A

WAIT1: LD A,(RGCOM)
RRCA
JP NC,WAIT1

WR_LOO: LD (PHOLD),A ; уходим в HOLD, ждём DRQ
LD A,(HL)
LD (BC),A ; на выходе пишем байт
INC HL
DEC DE
LD A,D
OR E
JP NZ,WR_LOO
WRDONE:

Теперь нужна программа форматирования дискеты для CP/M на СПЕЦИАЛИСТЕ с таким КНГМД. Есть она ?

В крайнем случае пойдёт и программа форматирования дискет для MX-DOS, но её придётся уже существенно переделывать, т.к форматы совсем разные.

Интересно было бы посчитать число тактов в петлях записи и чтения, чтобы понять насколько процентов этот контроллер и эти подпрограммы ускоряют, по сравнению с подпрограммами от CP/M Корвета.

makbar
09.01.2018, 00:39
Это уж чересчур категорично. Мне наоборот эта схемка понравилась.

И сами себе ответили) ниже:


Но процессор останется в режиме HOLD, т.к в петле чтения/записи регистр состояния не контроллируется.
...

Это может работать только, если DRQ в случае ошибки выставляется в единицу. В связи с этим непонятно назначение цепи 1. Зачем для её формирования используется инвертированный сигнал SIDE - цепь 26? Это какая-то ошибка в схеме.
и т.д. и т. п. "огород".
И резюме):

Тогда эта схема просто дохлая.



обычный контроллер ОРИОНА проще превратить в такой контроллер, чем в контроллер для SP-DOS.
а тут бы я сказал по другому - наоборот. Мой контроллер 12/1992 можно сразу подключать к Специалисту без передлок, ибо сразу для него и делался) . А от spdos взять только подпрограммы I/O.

- - - Добавлено - - -


Как можно судить о схеме не испробовав её?
лехко. бывает на невооруженный взгляд видно очевидные логические и схемотехнические ляпы.
А так да, случайно, при определенных условиях может и зарабоать ))

- - - Добавлено - - -


Интересуют лишь подпрограммы чтения/записи сектора.
возьмите мои и не мучайтесь с какими то ХОЛДами, штатный Спецеалист даже успевает:

XRA A
LXI H,<тот самый регистр DRQ и INTRQ>

LOOP:
XRA M
JP LOOP
...

zx_
09.01.2018, 13:28
Мой контроллер 12/1992 можно сразу подключать к Специалисту без передлок, ибо сразу для него и делался) . А от spdos взять только подпрограммы I/O.

может доделаете первоначальный замысел

barsik
09.01.2018, 14:12
возьмите мои подпрограммы и не мучайтесь с какими то HOLD-ами, базовый СПЕЦИАЛИСТ и так успевает
Возможно так и сделаю. Вскоре собираюсь поэкспериментировать с подпрограммами от разных авторов. Отличие схем небольшое, а для идеологии SPDOS и вот этого контроллера (http://www.asvcorp.ru/darch/hardware/specialist/speciallist-fdc/main-scheme-medium.png) готовый контроллер с чтением 38 и 39-той ног ВГ93 у меня уже есть. Отличие в адресах и битах портов несущественно.

Скорее всего использую Ваши или MX-овые подпрограммы, но Ваши - без порта чтения DRQ, а MX-овые - без режима HOLD (читая DRQ из ВГ93, как обычно). Думаю, что эти более короткие подпрограммы в сочетании с тактом 2.25 МГЦ (вместо 2.0 МГЦ) позволят использовать обычный КНГМД от ОРИОНА без всяких аппаратных выкрутасов.





LOOP: XRA M
JP LOOP

Две команды вместо трёх дают очень небольшой выигрыш. На самом деле Ваш вариант работает на 2 МГЦ вовсе не из-за чтения DRQ аппаратно. Возможно даже без этого можно обойтись (если как в фирменной подпрограмме сделать запись стеком). Как и писал выше, о пользе от регистра для DRQ я знал и даже печатные платы с КНГМД имеющим регистр для чтения ног 38 и 39 (и кстати, тоже на ЛП11) были выпущены для ОРИОНА в 2-х городах и CP/M использующая это была странслирована.

А менее требовательный к скорости Ваш вариант просто потому, что он упрощённый, в отличие от стандартных подпрограмм разработанных фирмой Western Digital для ВГ93 и применённых в Корвете. Точнее просто "химия". Хотя, если при этих подпрограммах не происходит зависа на дохлоте или других неприятностей, то всё нормально.

Т.е секрет был вовсе не в замене 3-х команд CPU на 2 команды, поэтому выше в этой теме я и утверждал, что аппаратное чтение DRQ даёт маленький выигрыш и его явно недостаточно, чтобы снизить требование к быстродействию CPU с 2.5 МГЦ до 2 МГЦ.

Раз уж занялся анализом подпрограмм чтения/записи сектора для разных схем контроллеров на базе ВГ93 от разных авторов, то посмотрел подпрограммы и вот этого контроллера (http://www.asvcorp.ru/darch/hardware/specialist/speciallist-fdc/). DOS для этой системы не была закончена. Дело внедрения дисковода, похоже, ограничилось лишь экспериментами, хотя, по информации авторов, вполне успешными. DOS, кстати, для этой системы собирались делать совместимой с MSDOS по формату дискеты. Во вложении их подпрограммы, в которых я разбирался.

Наиболее критичной по требованиям к быстродействию является подпрограмма записи.

Подпрограмма работающая стеком из CP/M Корвета (и ОРИОНА):



.
LD HL,RGDATA ; запись физ.сектора
LD DE,RGCOM
LD SP,BUFFER ; буфер откуда писать

WR_LOO: POP BC ; берём 2 байта из стека

WAIT_1: LD A,(DE) ; LD A,(RGCOM)
XOR 00000001B ; инвертировать бит D0
JP Z,WAI_01 ; если D0=1 ТО ВГ93 занят и ошибок нет

LD (HL),C ; LD (RGDATA),C пишем младший байт
RRA ; бит D0=0 ?
JP C,WRDONE ; да, значит ВГ93 занят
RRA ; бит D1=1
JP NC,WAIT_1 ; если нет, то нет запроса данных

WAIT_2: LD A,(DE) ; LD A,(RGCOM)
XOR 00000001B ; инвертировать бит D0
JP Z,WAIT_2 ; ждём готовности ВГ93

LD (HL),B ; LD (RGDATA),B пишем старший байт
JP WR_LOO

WRDONE:
Подпрограмма чтения сектора для контроллера отсюда (http://www.spetsialist-mx.ru/schemes/Lin_fdd1.png):



.
RDSEC: LD A,84H ; непосредственное чтение сектора
LD (RGCOM),A
LD BC,RGDATA
LD DE,LP11 ; через 155 ЛП11 читаем готовности ВГ93
RD_LOO: LD A,(DE)
ADD A,A
RET M
JP NC,RD_LOO
LD A,(BC)
LD (HL),A
INC HL
JP RD_LOO

Подпрограмма М.Короткина из SP-DOS версии 4.3 для ОРИОНА:



.
WRSEC: LD DE,BUFFER
LD BC,RGDATA
LD HL,RG_DRQ
LD A,0F4H
LD (RGCOM),A

WR_LOO: XOR A

WAIT_1: OR (HL)
JP Z,WAIT_1

LD A,(DE)
LD (BC),A
INC DE
JP P,WR_LOO
WRDONE:

Подпрограмма для контроллера Л.Афанасьева от СПЕЦИАЛИСТ-MX:



.
WRSEC: LD BC,RGDATA
LD DE,400H

LD A,0A4H
LD (RGCOM),A

WAIT_1: LD A,(RGCOM)
RRCA
JP NC,WAIT_1

WR_LOO: LD (RGHOLD),A ; уходим в HOLD, и ждём в нём DRQ
LD A,(HL)
LD (BC),A ; по DRQ выходим и пишем байт
INC HL
DEC DE
LD A,D
OR E
JP NZ,WR_LOO
WRDONE:

Хотел бы посчитать машинные такты, но увы, давно не программировал и куда-то засунул свою табличку с числом тактов команд Z80. А приближающийся склероз ухудшил память (ранее я знал числа тактов всех команд по памяти) теперь без таблички ничего невозможно посчитать. Если у кого-то под рукой есть ссылка на подобную табличку с временами команд КР580 или Z80, то поделитесь.

Но и без арифметики видно, что "химические" самодельные подпрограммы намного короче.

makbar
09.01.2018, 15:50
А менее требовательный к скорости Ваш вариант просто потому, что он упрощённый, в отличие от стандартных подпрограмм разработанных фирмой Western Digital для ВГ93
я не знаю, что такое "стандартные программы Western Digital для ВГ93" и знать не хочу. Я имел даташит wd1793 и писал по нему. всё. в этом даташите нет никаких кусков кода.



может доделаете первоначальный замысел
не имею такой возможности, отошел от дел. Не имею Специалиста и Ориона. Все раздарил.

barsik
09.01.2018, 17:07
не имею такой возможности, отошел от дел. Не имею ни СПЕЦИАЛИСТА ни ОРИОНА
Конечно, если давно забросил программирование для 8-ми разрядки и забыл, чем отличается байт от бита, это причина.

А вот отсутствие железа это уже не причина, т.к эмуляторы хреново эмулируют только работу с магнитофоном в реальном времени, а вот на эмуляцию ВГ93 авторы эмуляторов не пожалели усилий, так что для разработки и отладки ПО реальный компьютер абсолютно не нужен. А чтобы проверить в реале окончательный продукт найдутся добровольцы, да и возможно кто-то сохранил контроллер для SP-DOS и использует до сих пор.

makbar
09.01.2018, 18:17
кто-то сохранил контроллер для SP-DOS и использует до сих пор.

http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html

Опционально (и очень желательно ):
НГМД________________контроллер на КР1818ВГ93, 2 FDD, MFM, 800 Кб (по схеме из журнала РАДИО №12/1992, стр. 14-15)



забыл, чем отличается байт от бита, это причина.
и еще пяток причин, о которых я деликатно умолчу.

barsik
11.01.2018, 20:41
Сделали CP/M для СПЕЦИАЛИСТА? Под какой контроллер?
Не закончил. Странслировал лишь первую версию (ещё сто раз изменю). Из-за нехватки ОЗУ это не для практического использования, т.к не имея доп.ОЗУ можно грузить программы размером только до 24 кб. Но этого достаточно для проверки разных КНГМД. Увы, для СПЕЦИАЛИСТА без доп.ОЗУ RK-DOS в силу мизерности её объёма оказывается лучше.

Под какой контроллер не важно. Если есть заведомо рабочие подпрограммы чтения и записи сектора для разных версий КНГМД, то замена одних подпрограмм на другие это работа на несколько минут. Имея исходники, немного знаний и подпрограммы чтения/записи сектора, сделать версию стандартной CP/M для данного железа - совсем просто.

Проверенные подпрограммы чтения/записи сектора есть только для РК-КНГМД. Есть п/п-ммы и для контроллера на ВГ93 от ОРИОНА, но это требует такт 2.5 МГЦ. Так что для СПЕЦИАЛИСТА пока выбора нет, - только для РК-КНГМД. Закончив с CP/M для РК-КНГМД займусь экспериментами с КНГМД на ВГ93 с подпрограммами от Л.Афанасьева и М.Короткина и надеюсь смогу сделать формат 720 кб с секторами по 512 байт.

Перетранслировал для СПЕЦИАЛИСТА не стандартную CP/M, т.к в ней нет толка, а какую-то версию CP/M для ОРИОНА. С электронным диском из ОЗУ, с обработкой при старте AUTOEXEC.SUB и с подкачкой BDOS не с системных треков, а из ОЗУ. Электронный диск облегчает. С него запускается форматёр дискеты. Привод A: - эл.диск из ОЗУ, а привод B: на базе РК-КНГМД стоящего по адресу FB00. И в основном эта работа заключалась в очистке от Z80-команд.

Для СПЕЦИАЛИСТА с банками доп.ОЗУ получается CP/M с TPA в 35.5 кб и ей можно пользоваться для хранения и запуска программ. Но вот если доп.ОЗУ нет, то получается TPA всего-лишь 24 кб, а эл.диск имеет размер всего 8 или 10 кб, куда практически ни одна нужная программа не влезает. А ведь ещё надо куда-то грузить драйвер VT52 размером не менее 6 кб, для этого вообще нет места.

При этом BDOS получилась на 6100, что даёт равно 24 кб для загрузки программ. BDOS хранится и подкачивается из 7700...8DFF, дисковый буфер для секторов в 512 байт на 8C00...8EFF (при секторах в 1 кб TPA упадёт ещё ниже). А под электронный диск используется открытое "верхнее ОЗУ" в области D000...F7FF, что и даёт крошечный эл.диск в 9 кб (1 кб каталог). Даже крошечный эл.диск лучше, чем никакого, т.к CP/M плюётся на диск A: временными файлами. Пользоваться такой CP/M можно и без дисковода, т.к диск A: это эл.диск из ОЗУ, но тут проблема в размере эл.диска.

Сейчас ~30 CP/M программ для КР580 вручную сделал RKS-файлами. По SAVE их записать на дискету нельзя (SAVE можно записать только файл с кратностью в 256 байт, отчего размер файлов, что имеет нечётное число лог.секторов увеличится), а POWER-ом не воспользоваться из-за нехватки ОЗУ. Потому надо написать программу, которая грузит с ленты файлы в формате с именем и по окончании ввода автоматичеки записывает файл с точными размерами на диск.

Подобную программу (не для МГ, для линии) я имел когда-то и с её помощью переслал CP/M-программы на дискеты РК86. Кстати и форматёр от RK-DOS не годится. И не только потому, что заполняет дискету кодами 0, а надо E5, а потому-что в RK-DOS нумерация секторов с 0, а в CP/M нумерация секторов с 1.

zx_
12.01.2018, 14:07
для Вектора есть СП/М 39 и вообще, для Вектора много отличных ОС
Т34 от группы Тень весьма легендарна
http://sensi.org/scalar/categories/58/

makbar
12.01.2018, 21:01
займусь экспериментами с КНГМД на ВГ93 с подпрограммами от Л.Афанасьева и М.Короткина
у меня осталось пару-тройку плат) я говорил, если надо - вышлю.


для контроллера на ВГ93 от ОРИОНА, но это требует такт 2.5 МГЦ.
для моих п/п - не требуется.


надеюсь смогу сделать формат 720 кб с секторами по 512 байт.
это нетрудно.

- - - Добавлено - - -


RK-DOS нумерация секторов с 0, а в CP/M нумерация секторов с 1.
насколько я помню, у всех стандартных систем с 1.
Меня удивило в свое время, что номер стороны у CP/М инвертированный.

barsik
12.01.2018, 22:01
у меня остались платы КНГМД для SP-DOS, если надо - вышлю
Спасибо, нет необходимости. Имею настроенный КНГМД для ОРИОНА с регистром на чтение DRQ и даже по биту D7, хотя в незначащих битах читается мусор (т.к считываются лишь 2 бита через ЛП11). Потому XOR (HL) не сработает. Зато сработает INC (HL) выдав флаг по биту D7.



надеюсь смогу сделать формат 720 кб с секторами по 512 байт
это нетрудно
Сектора по 1 кб выгоднее, т.к дают 800 кб. Но при большем секторе тратится и больше ОЗУ под дисковый буфер, а ОЗУ для TPA и так остаётся с "гулькин нос".

И к тому же при секторах в 512 байт дискеты можно форматировать на IBM PC и в принципе у меня есть желание попробовать написать DOS с поддержкой FAT12/FAT16, чтобы можно было снять винчестер и читать/писать на IBM PC. Есть кстати и готовый форматёр дискет в формате MSDOS 720 кб.


Меня удивило в свое время, что номер стороны у CP/М инвертированный.
Это Вы в какой-то конкретной реализации смотрели. В CP/M нет понятия сторона диска. Как нет этого и для ВГ75. Для двустронней DS-дискеты есть лишь 80*2=160 дорожек. Подпрограмма чтения сектора берёт номер дорожки из ячейки TRACK и делит пополам. Это будет физический трек. А значение бита D0 в номере дорожки определяет сторону, - это записывается в упр.регистр формируя сигнал SIDE, задающий сторону для дисковода.

makbar
12.01.2018, 22:34
Спасибо, нет необходимости. Имею настроенный КНГМД для ОРИОНА с регистром на чтение DRQ и даже по биту D7, хотя в незначащих битах читается мусор (т.к считываются лишь 2 бита через ЛП11). Потому XOR (HL) не сработает. Зато сработает INC (HL) выдав флаг по биту D7.
ну смотрите сами.
увеличение кода может стать критичным до неработоспсобности, у меня читается и DRQ и INTRQ. Любой иной код длиннее.

barsik
12.01.2018, 23:50
увеличение кода может стать критичным до неработоспсобности, у меня читается и DRQ и INTRQ. Любой иной код длиннее
Согласен, что если вставить LD A,(HL) : AND 0C0H, то будет больше тактов. Но разве INTRQ надо контроллировать? Контроллер от Л.Афанасьева сбрасывает режим HOLD только по DRQ и этого хватает. Потому и INC (HL) хватит.

Я не разбирался и не знаю в каких случаях выдаётся INTRQ. Если он выдаётся в случае ошибки, причём при этом DRQ не выдаётся, то в случае ошибки возможен завис на ожидании DRQ. Если в указанном случае будет завис, то достаточно объединить INTRQ и DRQ на вентиле ИЛИ и уже выход этого вентиля читать по биту D7. Кроме того я ориентируюсь на такт 2.215 или 2.25 МГЦ (кварц 8.86 МГЦ или 9 МГЦ), что компенсирует одну лишнюю команду в цикле.

b2m
15.01.2018, 12:18
Меня удивило в свое время, что номер стороны у CP/М инвертированный.
Зависит от того, инвертируется ли номер стороны аппаратно (сигнал side). У Башкирии-2м тоже инвертированный (по сравнению с IBM/PC), и это создаёт определённые сложности при создании дампов дискет. Сейчас точно не помню, в чём была проблема (то ли сектор не находится, то-ли КС не совпадает). Приходится дампить всю дорожку. Если бы номер совпадал, можно было бы под линуксом просто командой dd дампить, в нём есть поддержка секторов по 1024 байта.

makbar
15.01.2018, 16:39
Зависит от того, инвертируется ли номер стороны аппаратно (сигнал side). У Башкирии-2м тоже инвертированный (по сравнению с IBM/PC), и это создаёт определённые сложности при создании дампов дискет.
я сейчас конечно не помню, но мне 25 лет назад казалось, что вход накопителя прямой, и дискеты(сторона) созданные моим контроллером совпадают с IBM/PC

makbar
15.01.2018, 21:13
Сейчас точно не помню, в чём была проблема (то ли сектор не находится, то-ли КС не совпадает).
точно же! молодец! в заголовке сектора есть поле side. Соответственно, когда я проектировал контроллер, в нулевую сторону я писал метки с нулевым значением. И поэтому мои дискеты читались на IBM PC.
А когда мне показали CP/M, я очень удивился инверсии.

p.s. все написано в даташите wd1793 ))

b2m
16.01.2018, 10:42
в нулевую сторону я писал метки с нулевым значением
Башкирия-2м тоже пишет в нулевую сторону нулевую метку. Беда в том, что на IBM PC эта сторона читается как первая. Такое вот блин печальное несоответствие.

makbar
16.01.2018, 12:06
b2m, погоди-погоди.... у меня дискеты на PC читались. Значит гдето инверсия зарыта))
Интернеты говорят про:
Side Select - выбор верхней (при низком уровне SS = L) или нижней (при высоком уровне SS = H) головки (стороны диска).

Я точно помню, что не от балды передавал сигнал а придерживался стандарта. А поскольку под рукой были только укнц и ibmpc, то сделал как у них.
Ну а что я реально пишу контроллером надо поднимать исходники...

barsik
25.01.2018, 21:35
Кроме CP/M работающей без дисковода странслировал и RKDOS работающую без дисковода. В качестве носителя используется дополнительное ОЗУ физически образуемое из двух банок 565 РУ7. К сожалению, в этой версии дополнительные банки не "целиковые", а именно, в каждой банке используется не все 64 кб, а только 48 кб.

Но в ближайшее время Pyk собирался составить конфиг для эмулятора EMU80, что обеспечивает в каждой банке 62 кб. При этом, естественно, ПЗУ в банках 1...7 отстутствует. Т.е при включении портом F9 банки 1 (или выше) в адресном пространстве 0...F7FF включается ОЗУ из банки 1, а ПЗУ в адресах C000...DFFF совсем изчезает. Это позволят в каждой банке выше 0-вой получить 62 кб полезной памяти и поиметь RAM-диск объёмом в 7*62= 434 кб, тогда как в том варианте, что используется сейчас RAM-диск имеет размер всего в 7*48= 336 кб.

Данная RKDOS имеет только один VDISK из ОЗУ и не имеет второго привода, т.е дисковода. Сама эта RKDOS тоже не стандартная. Она не нуждается во внешних SYS-файлах, хотя их поддержка из кода не удалена. В SYS-файлах нет никакой пользы, - их концепция интересна, но непонятно зачем.

SYS-файлы отличаются от COM-файлов только тем, что они являются как бы программами написанными только JR-командами, отчего могут работать в любой области памяти. Вот только зачем это надо для резидентной команды DOS ? Резидентная команда должна быть в коде DOS, а не в виде файла, пусть и работающего в любом месте памяти. Работать в любом месте памяти требуется только драйверам, загружаемым по RAMTOP, зачем это прикладным программам, а тем более командам DOS ?

Делать программы в виде SYS-файлов совсем несложно, а вот получать из них исходники - это морока. Ведь перед тем, как сделать переход, программа с помощью специальной функции DOS узнаёт в каком адресе она находится и затем выполняет переход на нужный адрес с помощью цепочки команд ADD HL,BC : JP (HL) или, если переход условный, то ADD HL,BC : PUSH HL : RET FLAG. При разработке программы расчёты делает ассемблер, а вот при дизассемблировании приходится считать эти смещения вручную и разобраться в программе намного сложнее.

Да и неудобно иметь команды DOS в виде внешних файлов. В данной версии не нужны файлы LOADA.SYS, ATTRIB.SYS, ERASE.SYS и RENAME.SYS. Вместо них в DOS просто есть команды LOAD, ATTR, DEL и REN. Синтаксис полностью идентичен внешним SYS-командам. При желании, естественно, можно пользоваться и внешними SYS-файлами.

Внешние файлы RKDOS служащие для обслуживания BAT-файлов, для копирования и восстановления удалённых файлов, т.е COMMAND.COM, COPY.COM и RESTORE.COM также было бы несложно перенести в код DOS. RESTORE (который правильно называть RECLAIM) нужен редко, а COPY и COMMAND не такие маленькие как SYS-файлы, а по ~500 байт каждый, отчего с ними код DOS сильно разбухнет. Потому не уверен, что это стоит делать.

Ещё мне не нравится использование в качестве разделителя в командах DOS запятой вместо пробела. Собираюсь это исправить. Но в итоге объём кода увеличится до 6 кб даже без дисководных подпрограмм, а в версии для дисковода аж до 7 кб. В итоге решающее преимущество RKDOS (малый объём кода) теряется, быстро приближаясь к размеру кода CP/M.

DonkeyHot
02.03.2018, 04:03
Контроллер накопителей на гибких магнитных дисках - кнгмд

CityAceE
13.09.2025, 20:49
Вот ещё один вариант (https://www.asvcorp.ru/darch/hardware/specialist/speciallist-fdc/index.html) контроллера дисковода со схемой и платой. И даже софт у автора под это дело есть!


https://www.asvcorp.ru/darch/hardware/specialist/speciallist-fdc/main-scheme-small.png

https://www.asvcorp.ru/darch/hardware/specialist/speciallist-fdc/fdc-plate-top-small.png

fifan
14.09.2025, 07:03
Поздно, CityAceE, я о нём уже рассказывал в соответствующей теме. Я там ответил: Контроллер дисковода собирать не будем. Тем более никакого ПО (тем более какой-то там ДОС) у нас нету.