Вход

Просмотр полной версии : РАДИО-86РК на Z80



Страницы : [1] 2

Vladimir_S
01.03.2013, 10:46
Ну и вот. РКшка на Z80 работает как часы. Самое главное - питание одно.

http://s019.radikal.ru/i609/1303/b7/f395465b3ab3.jpg (http://radikal.ru/F/s019.radikal.ru/i609/1303/b7/f395465b3ab3.jpg)

Mick
01.03.2013, 10:50
И где это вот. О чем тема не понятно. Где фото, инфа?

Kakos_nonos
01.03.2013, 10:51
Ух ты! Только вчера об этом думал. И тут на тебе. Уже придумали. :-)

Vladimir_S
01.03.2013, 11:21
Ух ты! Только вчера об этом думал. И тут на тебе. Уже придумали. :-)
Да особо и думать не пришлось.Все оказалось проще чем думалось. Для переделки потребовалось только одна 555ЛЕ1 и один инвертор. Приведу все в порядок и выложу.

---------- Post added at 09:59 ---------- Previous post was at 09:54 ----------

Причем что хорошо - прекрасно работает Z0840004, которая в Орионе работать не захотела. А их у меня хоть и не большая, но куча.

---------- Post added at 10:06 ---------- Previous post was at 09:59 ----------

Да, еще звук придется делать на ВИ53.

---------- Post added at 10:21 ---------- Previous post was at 10:06 ----------

http://s019.radikal.ru/i609/1303/b7/f395465b3ab3.jpg

Blade
01.03.2013, 11:27
Для Z80 надо монитор переделывать.
Этот код будет неправильно выполняться:

ROM:FCCC ld a, (7604h)
ROM:FCCF dec a
ROM:FCD0 jp m, loc_FCEE
ROM:FCD3 jp z, loc_FD65
ROM:FCD6 jp po, loc_FD73
ROM:FCD9 ld a, c
ROM:FCDA sub 20h ; ' '

Vladimir_S
01.03.2013, 11:38
Blade, Не знаю, но этот фрагмент относится к процедуре вывода символа на экран по п/п F809, и вроде как пока работает.Но еще не вечер, разберусь.

Splinter
01.03.2013, 12:15
хм. а как же система команд ? у них идентичные коды ?

Vladimir_S
01.03.2013, 12:16
хм. а как же система команд ? у них идентичные коды ?
Сверху вниз, да.

Eltaron
01.03.2013, 12:19
хм. а как же система команд ? у них идентичные коды ?
ВМ80 - это клон i8080, расширенным клоном которого является и z80

Titus
01.03.2013, 12:48
Для Z80 надо монитор переделывать.
Этот код будет неправильно выполняться
8080 иначе работает с флагом четности?

Splinter
01.03.2013, 13:04
Так вот почему много портов игр со спека на специалист...

AHTuXPuCT
01.03.2013, 13:39
а схемку можно посмотреть? :)

Blade
01.03.2013, 13:40
8080 иначе работает с флагом четности?
У 8080 это всегда флаг четности, у Z80 это флаг четности/переполнения. После DEC A он работает как флаг переполнения.

Vladimir_S
01.03.2013, 16:02
а схемку можно посмотреть?
Из меня художник...
http://rusfolder.com/35255463

---------- Post added at 13:08 ---------- Previous post was at 13:05 ----------

Забыл - на 9 ногу ГФ24 подать 5 вольт.

---------- Post added at 13:12 ---------- Previous post was at 13:08 ----------


У 8080 это всегда флаг четности, у Z80 это флаг четности/переполнения. После DEC A он работает как флаг переполнения.
Я так плотно еще не разбирался, но после сегодняшней переделки пол дня проработал без проблем.

---------- Post added at 15:02 ---------- Previous post was at 13:12 ----------


У 8080 это всегда флаг четности, у Z80 это флаг четности/переполнения. После DEC A он работает как флаг переполнения.

Blade, какие будут предложения?

Atari
01.03.2013, 16:59
зачем там это уЁ - гф24 ?

AHTuXPuCT
01.03.2013, 17:01
Vladimir_S, а что за микруха рядом с ПЗУ монитора?
статика на 32кб с батарейкой?

Vladimir_S
01.03.2013, 17:25
статика на 32кб с батарейкой?
Да, а еще с часами реального времени.

---------- Post added at 16:25 ---------- Previous post was at 16:05 ----------


и зачем там это уЁ - гф24 ?
Я ведь собрал на 8080, а когда заработало поменял проц. А ГФ24 с одним питанием совсем неплохо - в одном корпусе и генератор и счетчик и узел сброса.

sergey2b
01.03.2013, 18:50
Vladimir_S если возможно выложите пожалуйста схему на народ или если возможно
пошлите пожалуйста на email мой ник @ yandex.ru
rusfolder из загранице нескачать

AHTuXPuCT
01.03.2013, 18:58
вот

Vladimir_S
03.03.2013, 11:12
А вот так выглядят часы.
http://s017.radikal.ru/i434/1303/63/7457bf045f76.jpg

Vladimir_S
03.03.2013, 14:48
Вывод часов я привязал к опросу клавиатуры, но поскольку процессор стоит Z80, я думаю можно как то задействовать внешнее прерывание. Z80 я знаю очень плохо, поэтому хотелось бы услышать какие то предложения на эту тему.Только просьба выражаться простым языком, как для начинающих.

AHTuXPuCT
04.03.2013, 07:57
Vladimir_S, а можно поподробнее, что за микруха памяти с часами?
марка какая?

Vladimir_S
04.03.2013, 08:29
что за микруха памяти с часами?
M48T35.В ней очень удобно для РКшки расположены байты времени с 7FF8 по 7FFF, а последняя ячейка экранной области 7FF4.

Vladimir_S
05.03.2013, 09:23
А вот так однако часики покрасивее.
http://s57.radikal.ru/i156/1303/52/b34db2a1feb9.jpg

Vladimir_S
08.03.2013, 15:47
У Z80 как вы знаете нет выхода подобного INTE и поэтому пришлось поизвращаться.
И родилась такая схемка, которая полностью совместима на программном уровне.

Vladimir_S
08.03.2013, 15:53
Совсем забыл.

HardWareMan
08.03.2013, 22:13
И как оно работает?

b2m
08.03.2013, 23:18
Если оно контролирует чтение процессором кодов команд EI,DI, то надо не A8-A11 параллельно контролировать, а M1. Ну и сброс тоже, для чистоты эксперимента (т.к. после сброса прерывания запрещены).

HardWareMan
09.03.2013, 00:03
Если оно контролирует чтение процессором кодов команд EI,DI, то надо не A8-A11 параллельно контролировать, а M1. Ну и сброс тоже, для чистоты эксперимента (т.к. после сброса прерывания запрещены).
Вот и я про это подумал. Поэтому спросил.

Vladimir_S
09.03.2013, 11:38
b2m, HardWareMan, Собираю на рассыпухе, работает как положено.
А то же самое на PIC, только скрипит.

Посоветуйте толковую книжку по Z80.

HardWareMan
09.03.2013, 13:11
И зачем так сложно?
http://savepic.ru/4253498.png
Но в случае с PICом все должно быть проще: в программном цикле (для быстроты реакции) ждем M1 = 0, затем сразу же читаем D0-D7 и сравниваем на DI/EI. И в зависимости от результата дергать ногой BEEP. Но тут есть одна засада: обе схемы будут некорректно реагировать на команды #CB+#F3 и #CB+#FB. Но в варианте с PICом это можно предусмотреть, т.к. преффикс - это такой же опкод в цикле М1.

Vladimir_S
09.03.2013, 13:52
HardWareMan, а триггер какой серии? В ТТЛ запись на выход вроде по переднему фронту? 8И НЕ не надо дополнительно инвертировать? И наверное RES ни к чему.

HardWareMan
09.03.2013, 14:21
В моей схеме - половинка TM2. она пишет по фронту (0->1). При совпадении опкода и М1 мы имеем 0 на выходе, но память еще не выдала опкод. По завершению чтения М1 снимается вместе с RD, а память вместе с шинкой инертны - они продолжают некоторое время выдавать опкод на шину данных - вот тут то мы его и хватаем. Ресет необходим - по ресету у нас INTE = 0.

Vladimir_S
09.03.2013, 14:27
они продолжают некоторое время выдавать опкод на шину данных - вот тут то мы его и хватаем.
HardWareMan, еще раз прошу порекомендовать книжку по Z80, только толково писаную.

HardWareMan
09.03.2013, 15:58
Не знаю таких. Увы.

Vladimir_S
09.03.2013, 16:34
Не знаю таких. Увы.
Действительно увы.

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

Vladimir_S
09.03.2013, 20:48
Ресет необходим - по ресету у нас INTE = 0.
И что? Каким боком это относится к выводу звука? Не по барабану ли в какое состаяние устанавливается триггер после сброса? Или меняется ли его состояние от сброса?

HardWareMan
10.03.2013, 17:48
Не знаю за РКшку, но в одном из вариантов Специалиста на INTE завязан НП. Т.е., требуется именно начальное состояние после сброса. С другой стороны - подключение сброса по моей схеме - это просто провод к уже имеющемуся выводу. В случае с PICом - тоже. Просто подключи на сброс PICа. Если есть халява, почему бы не заюзать, правда?

Vladimir_S
10.03.2013, 18:02
требуется именно начальное состояние после сброса.

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

---------- Post added at 17:02 ---------- Previous post was at 16:59 ----------


в одном из вариантов Специалиста на INTE завязан НП.
НП это что?

b2m
10.03.2013, 21:30
НП это что?
Начальный Пуск. Включение ПЗУ по адресу 0000 по сбросу и отключение после нескольких команд bios-а (например, разрешив прерывания).

Vladimir_S
11.03.2013, 06:29
Окончательный, работоспособный вариант.

Vladimir_S
21.03.2013, 16:48
Нарисовал тут платку замены КР580ВМ80 на Z80 в РК образных машинах.На плату ПК вместо 12в подать 5в. Вместо ВМ80 установить разъем, ответную часть которого поставить на плату переходника.Может кому интересно будет.

Vladimir_S
21.03.2013, 16:50
Вроде все правильно, но я не проверял.Посмотрите может ошибка где.

VovanRK86
09.04.2013, 00:00
Vladimir_S, подскажите какой использован регистр в ПДП и я правильно разглядел что ПДП К580ИК57, т. е. она нормально работает с Z80? вроде для него своя микросхема есть? (собираю подобный компик, так что тема очень интересна)

Vladimir_S
09.04.2013, 02:16
какой использован регистр в ПДП и я правильно разглядел что ПДП К580ИК57, т. е. она нормально работает с Z80? вроде для него своя микросхема есть? (собираю подобный компик, так что тема очень интересна)
Cтоит импортный аналог 1553ИР33, а насчет К580ИК57, так у меня только такой и есть. К тому же задача стояла заменить ВМ80 на Z80 не затрагивая остальной схемы.

Vladimir_S
09.04.2013, 04:40
собираю подобный компик, так что тема очень интересна
Наверно создалось впечатление, что я хочу родить клон РК86 на Z80 с последующей разработкой ПП. Дело в другом.Меня на это сподвигло
http://zx.pk.ru/showpost.php?p=525970&postcount=231
а особенно
http://zx.pk.ru/showpost.php?p=526009&postcount=233
а я очень люблю такие задачки.Вот и попробовал. Большое спасибо HardWareMan за помощь в прикручивании звука.
На самом деле я склоняюсь к мнению
http://zx.pk.ru/showpost.php?p=526003&postcount=232
Сейчас жду плату РК от zorel, и естественно он будет на ВМ80.

VovanRK86
09.04.2013, 10:25
А я как раз пытаюсь "родить" клон РК на новой элементной базе, ну и с новыми возможностями, сначала взял ВМ85 благодаря теме от Rokl, но увидев Вашу тему перепаял на Z80. А обычный РК у меня есть.

Vladimir_S
09.04.2013, 11:25
А я как раз пытаюсь "родить" клон РК на новой элементной базе, ну и с новыми возможностями, сначала взял ВМ85 благодаря теме от Rokl, но увидев Вашу тему перепаял на Z80. А обычный РК у меня есть.
Ну тогда желаю удачи.Это же очень интересно.

Kakos_nonos
09.04.2013, 14:14
Много в последнее время вариантов РК появилось.
Это хорошо.

Vladimir_S
09.04.2013, 14:21
Много в последнее время вариантов РК появилось.
Это хорошо.
Вариантов много, а нового софта - 0. Кризис жанра. Вот иногда сам думаю, чего бы такого накропать? А нужную задачу придумать не могу.Еще какой нибудь DOS?

VovanRK86
10.04.2013, 00:24
Вариантов много, а нового софта - 0. Кризис жанра. Вот иногда сам думаю, чего бы такого накропать? А нужную задачу придумать не могу.Еще какой нибудь DOS?
Я когда то тоже DOS писать пытался для работы с ROM, а потом и RAM диском по принципу ORDOS (16 байт заголовок у каждого файла) используя драйвер оконного интерфейса, но после подключения FDD (кстати произошло это только в ноябре 2012г.), необходимость отпала. А если ещё SD Card прикрутить? Хочу цветную оболочку SE.com;), кто бы доработал? НО сначала компик надо доделать. Уже месяц не подходил.

Vladimir_S
10.04.2013, 22:59
но после подключения FDD (кстати произошло это только в ноябре 2012г.), необходимость отпала.
Это из Радио за 1993г., или что то другое? И как отзывы?

Vladimir_S
11.04.2013, 04:53
VovanRK86, А вообще можешь указать все ссылки по которым прикручивал KНГМД и DOS?

АлександрПП
11.04.2013, 10:36
Плата
http://www.zx.pk.ru/showthread.php?t=15298&highlight=freddy
Форум
http://zx.pk.ru/showthread.php?t=11319
Описание в журнале Радио №1-3 за 1993г.
Работает нормально. На одну дискету можно записать практически все ПО РК86.

VovanRK86
11.04.2013, 10:58
Это из Радио за 1993г., или что то другое? И как отзывы?
Да из Радио, собрал лет десять назад, но прошивку DOS нашёл на этом форуме только в декабре 2011, отзывы как на ветке форума по теме FDD, сам не ожидал, что так будет работать, как там пишут "железобетонно". У меня МГТФом собран ни одного блокировочного конденсатора нет пока, а работает. Рекомендую.


VovanRK86, А вообще можешь указать все ссылки по которым прикручивал KНГМД и DOS?
Попытаюсь. Я зарегистрировался недавно, вот только что цитаты освоил, буду изучать как ссылки вставлять.

---------- Post added at 10:58 ---------- Previous post was at 10:48 ----------


На одну дискету можно записать практически все ПО РК86.
Вот с этим несогласен категорически. Удивлён, похоже все так считают на этом форуме, давно хотел поспорить. На дискету влезает 400кб, на одну сторону кассеты 256кб вроде, у меня пять кассет и 8 ROM дисков по 64кб с играми, уже перебор, а ещё можно столько скачать, например Bulderdash в цвете 32кб, я за SD Card, ну и Nemo IDE по принципу Ориона на ВВ55.

АлександрПП
11.04.2013, 11:27
я за SD Card
Согласен.
Ну, а насчет того, что все можно вместить на одну дискету, то это я, конечно, несколько гипертрофировал.

Vladimir_S
12.04.2013, 18:38
Плата
http://www.zx.pk.ru/showthread.php?t...ghlight=freddy
Форум
http://zx.pk.ru/showthread.php?t=11319
Описание в журнале Радио №1-3 за 1993г.
Работает нормально. На одну дискету можно записать практически все ПО РК86.
Малость переделать надо и можно собирать.

sergey2b
12.04.2013, 18:48
Вот с этим несогласен категорически. Удивлён, похоже все так считают на этом форуме, давно хотел поспорить. На дискету влезает 400кб, на одну сторону кассеты 256кб вроде, у меня пять кассет и 8 ROM дисков по 64кб с играми, уже перебор, а ещё можно столько скачать, например Bulderdash в цвете 32кб, я за SD Card, ну и Nemo IDE по принципу Ориона на ВВ55.

если возможно выложите пожалуйста программы для РК которые у вас есть

VovanRK86
13.04.2013, 01:11
если возможно выложите пожалуйста программы для РК которые у вас есть
Возможно. Выложу обязательно (у меня есть редактор+ассемблер с оконным интерфейсом Tinny Tools V4.0, за год поисков по интернету я даже упоминание о нём не нашёл, думал потерял его навсегда, но кассета считалась, думаю будет кому то интересен, я Микрон после него так и не признал), но позже так как:
1. Не умею это делать на форуме (пока)
2. 3 кассеты и в нормальные времена не читались(сэкономил и купил нонейм, SKC читается после 5 лет лежания в деревне в нежилом доме)
3. Пока нет переноса с РК на РС (раньше был, соединён через ВВ55 и LPT, но все проги обмена пропали вроде, и как это было я пока не вспомнил)
4. Ну как обычно времени ни на что не хватает...

P.S. Ваш РК ожил?

---------- Post added at 01:09 ---------- Previous post was at 01:03 ----------

Bulderdash в цвете (на Реал Виндовсе вроде) я сам недавно скачал(вроде ссылка на этом форуме попалась), залил в эмулятор, потом в МП3 плеер и на реал, сам в шоке от РК после такого, но у меня пока цвет кривой, я без тригера делал.

---------- Post added at 01:11 ---------- Previous post was at 01:09 ----------


Малость переделать надо и можно собирать.
Что переделать? (Ну в смысле зачем, что не так?)

Vladimir_S
13.04.2013, 06:39
Что переделать? (Ну в смысле зачем, что не так?)
Не нравится мне, что у автора используется три РФ2 (+ монитор). Хочу что бы стояла одна на 8 Кб. Это избавит от установки доп. ИД7. Для выборки ВВ55 дешифратор сделать на рассыпухе. Но тут свои заморочки. ВВ55 и пишет и читает, значит ПЗУ с F000 по F7FF будет мешать чтению. Надо отслеживать А2-А10. Зато в ПЗУ F004 - F7FF можно написать например оболчку для DOS. Я еще ничего не решил, думаю.

VovanRK86
13.04.2013, 10:42
у автора используется три РФ2 (+ монитор)
так у меня одна Flash в ней и монитор и ДОС, а вторая ид7 выбирает их и вв55 ну и регистр , а вот с запретом чтения ПЗУ по F000-F7FF, пришлось помучатся чуть чуть.

Vladimir_S
13.04.2013, 10:51
а вот с запретом чтения ПЗУ по F000-F7FF, пришлось помучатся чуть чуть.
Это как раз и не трудно, трудней запретить ПЗУ F000 - F003. Даже не трудней, а просто сложней дешифрация. А просто так терять 2Кб без четырех ячеек - жалко.

b2m
13.04.2013, 11:33
Надо отслеживать А2-А10. Зато в ПЗУ F004 - F7FF можно написать например оболчку для DOS.
Для портов можно чуть больше оставить, например F000-F03F, на будущее, зато отслеживать нужно будет только A6-A10, экономия логики на лицо. Да и 60 байт в ПЗУ погоды не сделают.

Vladimir_S
13.04.2013, 12:30
b2m, В принципе можно, но для портов, я думаю, лучше добавить дешифратор на А000.

---------- Post added at 10:43 ---------- Previous post was at 10:36 ----------

Кстати, сейчас подумал, а не лучше ли дезассемблировать DOS и перетащить ВВ55 в другое адресное пространство.

---------- Post added at 11:30 ---------- Previous post was at 10:43 ----------

VovanRK86, посмотрел, Dos 2.9 без переделки с Z80 не заработает. Т.к. встречаются команды OUT.

VovanRK86
13.04.2013, 13:41
Dos 2.9 без переделки с Z80 не заработает. Т.к. встречаются команды OUT.
Согласен. Возможно не заработает. У Вектора на Z80 Васик не пускается.
Но думаю дело будет не в команде OUT, скоро проверим надеюсь.


А просто так терять 2Кб без четырех ячеек - жалко.

Я сейчас из Flash'a 250кб, потерял:), а учитывая организацию адресного пространства РК, у меня из Simm'a на 1Мб используется 16кб.
А оболочка ДОС и на FDD прекрасно живёт, но я согласен терять 2кб не стоит, лучше туда знакогенератор залить, и при старте переписывать его в ОЗУ ру10 например, которую вместо ПЗУ штатного знакогенератора поставить.

---------- Post added at 13:41 ---------- Previous post was at 13:37 ----------

P.S. Ну а дешифратор это отдельная тема.

VovanRK86
16.04.2013, 16:59
Т.к. встречаются команды OUT.
Озадачили Вы меня, не по детски.
Я всегда думал, что Z80 отличается от ВМ80 согласно журналу Радио №4 за 94г. битом D2 регистра признаков и выполнением команды DAA, ну и плюс расширенный набор команд, я на спектруме писал в кодах для вм80, не задумываясь особо, только команду добавлял LDIR.
Вот нарыл, может кому сгодится.

VovanRK86
16.04.2013, 17:08
Т.к. встречаются команды OUT.


Для портов можно чуть больше оставить, например F000-F03F
Если DOS не переписывать, вроде не прокатит, как раз из за команд OUT????

Vladimir_S
16.04.2013, 17:26
Сообщение от b2m
Для портов можно чуть больше оставить, например F000-F03F
Если DOS не переписывать, вроде не прокатит, как раз из за команд OUT????
Автор DOS2.9 обращается к РУС ВВ55 по команде OUT 0F3H т.е. по адресу 0F3F3H.
А как на такую команду отреагирует Z80?

VovanRK86
16.04.2013, 17:51
Плохо:( (но думаю победить можно, звук то победили) во вложении как раз об этом. Z80 выставляет на младшую ША №порта, а на старшую содержимое аккумулятора и даже если использовать вывод Z80 обращение к портам, то дешифратор то к старшей половине ША подключен и устройство он выберет не корректно, я так это понимаю.
DOS ещё к ПДП обращается так же.

Vladimir_S
16.04.2013, 18:03
Я думаю надо переделать, что бы обращение было через STA ADR и LDA ADR.

VovanRK86
16.04.2013, 18:16
А у меня мысль с дешифратором повозится.

Vladimir_S
16.04.2013, 18:21
А у меня мысль с дешифратором повозится.
В смысле? Я не знаю Z80 и отсюда вопрос - если в аккумуляторе при OUT старшая половина адреса, то где передаваемые данные?
И вообще полную раскладку команды OUT.

VovanRK86
16.04.2013, 18:52
Кстати хочу Вам сказать отдельное БОЛЬШОЕ СПАСИБО за схемку подключения Z80 и за всю тему РК на Z80. Я за выходные себя заставил и всё таки спаял свой комп, схемка очень помогла.

Запускал почти сутки. Самая главная проблема: Я шину данных подтянул к +5 вольт, на экране курсор и всё, клавиатуры нет (т.е. нет ВВ55, на плате от Павла тоже нет ВВ55, но там постоянно набирается символ "6"), комп запустился только после того как притянул ШД к земле. В отличии от платы от Павла ни каких символов не набирает.

Возникает вопрос куда подтягивать? Проблемы из за подтяжки или из за отсутствия ВВ55?
Ещё вопрос
Какой контролер использовали для клавиатуры? и с какой прошивкой? Всё что находил для Ориона вроде, или они совпадают без всякой адаптации?

---------- Post added at 18:52 ---------- Previous post was at 18:45 ----------


В смысле? Я не знаю Z80 и отсюда вопрос - если в аккумуляторе при OUT старшая половина адреса, то где передаваемые данные?
Пример
ВМ80
MVI A,38h
OUT 45h
ША 4545h
ШД 38h
Z80
ША 3845h
ШД 38h
я так понимаю, но я тоже не знаю Z80, я всегда думал см. пост 66


И вообще полную раскладку команды OUT.
А вложения из поста 66 ещё не читали? Я был в шоке когда прочёл.

Vladimir_S
16.04.2013, 22:21
Какой контролер использовали для клавиатуры? и с какой прошивкой? Всё что находил для Ориона вроде, или они совпадают без всякой адаптации?
У классического Ориона РКшечная клава.

Возникает вопрос куда подтягивать?
Я ничего не подтягивал. Схема кроме проца 1:1.

VovanRK86
16.04.2013, 22:36
Я ничего не подтягивал.
А я где то вычитал, что ШД Z80 надо подтягивать к +5 вольт, тогда при отсутствии на шине активности получаем код FFh, а это какое то прерывание RST № не помню, вот меня это и подвело возможно, т.к. без ВВ55 клавиатуры, при её опросе на ШД код FFh, и он не нравится Монитору РК.

Vladimir_S
17.04.2013, 02:55
Схема кроме проца 1:1.
Соврал, добавил инверсию изображения.

alx32
17.04.2013, 10:02
В Z80, во время выполнения команды OUT/IN, на старшую половину адреса выводится содержимое регистра B, поэтому в спектруме и используются порты аля 7FFD:

LD BC,#7FFD ; LXI B,7FFDH
OUT (C),A ; на ША 7FFD
OUT (#FD),A ; на ША опять 7FFD
OUT (#48),A ; на ША теперь 7F48, тоесть на старшую половину адреса выводится содержимое регистра В.

Vladimir_S
17.04.2013, 10:19
alx32, т.е. в скобках или явное указание на мл.байт адреса, или содержимое регистра ( и не обязательно С )?

Blade
17.04.2013, 10:19
В Z80, во время выполнения команды OUT/IN, на старшую половину адреса выводится содержимое регистра B
Регистр В на старшую половину шины адреса выводится при выполнении команд OUT (C),REG IN REG,(C), OUTI, INI. При выполнении команд OUT (#port),A, IN A,(#port) на старшей половине шины адреса будет содержимое аккумулятора.
А вообще вот: https://pentevo.googlecode.com/svn/docs/z80_UM.pdf. Там все написано.

Vladimir_S
17.04.2013, 10:24
Совсем запутали - видимо надо учить матчасть.

VovanRK86
17.04.2013, 12:01
В Z80, во время выполнения команды OUT/IN, на старшую половину адреса выводится содержимое регистра B, поэтому в спектруме и используются порты аля 7FFD:
Круто. А я и не знал об этом. Значит можно будет применить это и в РК. т.е. дешифратор ни куда не переносить, а управлять им с помощью данных команд.

---------- Post added at 11:51 ---------- Previous post was at 11:44 ----------


А вообще вот:
Отличный мануал!!! Спасибо!!!

---------- Post added at 12:01 ---------- Previous post was at 11:51 ----------

Может кто подскажет ещё:
Пока 2 проблемы
1. При подтяжке ШД к +5 вольт не работает! ВВ55 клавиатуры оказалась не причём.
Возможно дело с ВТ57? (в теме об SD говорится что ВТ не любит притяжку к +)
2. По поводу сброса. Вывод Reset CPU и триггера начального запуска подключил на кнопку, второй вывод на землю. При замыкании проц. сбрасывается, а триггер через раз. Поставил задержку на триггер (2 инвертора) в пошаговом режиме всё идеально, в динамике нет начального запуска т.е. настройки ВГ и ВТ , если пройти по шагам пару команд, то комп запускается нормально, но при очередном сбросе не стирает надпись Радио86рк, а выдаёт очередную стрелку:). Вот такой глюк!!! Возможно Vladimir_S не зря ГФ24 применил!!!

Vladimir_S
17.04.2013, 12:32
Возможно Vladimir_S не зря ГФ24 применил!!!
Ну во первых ГФ24 была нужна по условиям моей задачи ( тупая замена ВМ80 на Z80 ), а потом при дальнейшем рассуждении пришел к выводу, что так оно и лучше. Один корпус, который все увязывает и не конфликтует ни с чем.

Atari
17.04.2013, 13:09
Один корпус, который все увязывает и не конфликтует ни с чем.
да, если б не идиотский делитель на девять.

vinxru
17.04.2013, 13:11
А где можно почитать, почему выбрали делитель 9 ?

Atari
17.04.2013, 13:14
А где можно почитать, почему выбрали делитель 9 ?
я сам уже 24 года как хочу знать.

Mick
17.04.2013, 13:17
Помоему там что то связано с видео.
Вернее под стандарные частоты строчной развертки 15625Гц

Vladimir_S
17.04.2013, 13:24
да, если б не идиотский делитель на девять.
Да и пусть на 9. Главное что в одной микросхеме и генератор и делитель, и формирователь сброса и собирать все это на рассыпухе - ну его. А с одним питанием и вообще хорошо.

Atari
17.04.2013, 13:44
Да и пусть на 9.
пиксель клок тактируется 8 МГц, контроллер флопа 2 МГц. думаю дальше всё очевидно.

Vladimir_S
17.04.2013, 13:48
думаю дальше всё очевидно.
А чего очевидно то, на РКшке все прекрасно работает, а для других конструкций конечно.

alx32
17.04.2013, 15:37
Регистр В на старшую половину шины адреса выводится при выполнении команд OUT (C),REG IN REG,(C), OUTI, INI. При выполнении команд OUT (#port),A, IN A,(#port) на старшей половине шины адреса будет содержимое аккумулятора.
А вообще вот: https://pentevo.googlecode.com/svn/docs/z80_UM.pdf. Там все написано.

Блин, точно, совсем запамятовал, нда... давно это было... всё уже и не припомниш...

Отправлено с моего A7 HD через Tapatalk

VovanRK86
17.04.2013, 22:44
пиксель клок тактируется 8 МГц, контроллер флопа 2 МГц. думаю дальше всё очевидно.

А чего очевидно то, на РКшке все прекрасно работает, а для других конструкций конечно.
Даже FDD будет работать в классическом варианте. Так что Ваш вариант (просто замена ЦПУ в классическом РК) отличная идея, и мне она помогла вм85 сразу на z80 заменить.
Но я делаю совсем другой компик у меня от классики, только ид7 , вт57 и прошивка, НО я это всё уберу! ид3,8237, ну и прошивка другая. забыл вг75 но это в другой теме обсуждается.
п.с. уже пробовал "турбо" режим, ВЕСЧЬ! пока 4mhz загонял в z80, такой проц как у Vladimir_s, не заработал. Кстати припаял в плату от Павла кварц 25mhz, работает! на ура! (в видео тактовый отдельный конечно)

VovanRK86
17.04.2013, 23:45
Вот что пока получилось. Мой РК на Z80
Изучаю как пользоваться вложениями и картинки вставлять.

Vladimir_S
18.04.2013, 10:11
VovanRK86, какие плюсы от применения 8237?

VovanRK86
18.04.2013, 11:14
Самое главное! отлично лезет в цанговую панель;)(а то у одной вт57 уже нога сломалась) и симпатично выглядит :D!!!
Ну а серьёзно у меня из две есть, компик я делаю на импорте, интересно разобраться с её программированием, ну и она меньше жрет и быстрей работает (всё таки у меня турбо режим заложен) и главное может она не будет придираться к подтяжке ШД к +.(а то SD по схеме из соседней темы без атмеги не подключить)
п.с. а может не её надо ставить а специальную для z80, но я пока даже описание на такую не смотрел.

Vasily
18.04.2013, 11:30
Я для отечественных михрух панельку собираэ из нескольких, аккуратно подрезая края, могу сфоткать, если интересно.

Vladimir_S
18.04.2013, 12:29
Vasily, Для компа я думаю и обыкновенная по 2р50коп кроватка пойдет, а вот для чего нибудь типа программатора - да, сборная цанговая - это мысль.

VovanRK86
18.04.2013, 12:31
Конечно интересно, но не для этого компа, может в Ирише пригодится, там как раз я с такими проблемами столкнулся.
Я вчера тоже так же измудрился, удлинил в своём компике цангу 28 до 32 что бы Flash засунуть, такое г.. получилось., но главное работает, потом всё равно уберу.

VovanRK86
19.04.2013, 13:09
а вот для чего нибудь типа программатора - да
всё же лучше с нулевым усилием, я такую для проца применил, для красоты конечно, но не зря оказалось, не все процы завелись на 4mhz, как у Вас один на 2mhz работает, а другой выполняет три команды и виснет.

Vladimir_S
19.04.2013, 13:30
как у Вас
Мы же не на светском рауте, не надо Вы.

VovanRK86
19.04.2013, 14:52
Мы же не на светском рауте, не надо Вы.
Хорошо. Согласен. Но так положено ведь, а то не которые обижаются и собственно правы.

Vladimir_S
19.04.2013, 15:06
Хорошо. Согласен. Но так положено ведь, а то не которые обижаются и собственно правы.
Не знаю, у меня так возникает ощущение, что оппонент этим ВЫ хочет подчеркнуть - ты сам по себе, а я сам по себе. Конечно если например на улице незнакомый человек начнет по хамски тыкать, разумеется неприятно.Но мы здесь в общем то с одними тараканами в голове, так чего выкаблучиваться то.

Rokl
19.04.2013, 21:44
... но не зря оказалось, не все процы завелись на 4mhz, как у Вас один на 2mhz работает, а другой выполняет три команды и виснет.
Выполняет 3 команды и виснет у меня ВМ85 при частоте кварца 12 мГц.(валится 580 серия с запредельной тактовой частотой).
Странно, Z80 и всего 4мГц.
Я 8085 спокойно заводил на 11.059 Мгц(тактовая компика 5,53 Мгц).
Работали стабильно и наши ИМ1821ВМ85 и древний импорт от Интел P8085с подкусаными ногами. Правда, когда плату электронных дисков добавил, частота стабильной работы упала до 8.86 мгц(4,43мгц тактовая). Если учесть, что ВМ85 тактируется на половинной частоте кварца, то тактовая частота компика в 4 - 5 Мгц должна быть гарантирована для любого Z80 (если не брать в расчет Z80 ГДРовского производства U880B.) Либо у вас возникают проблемы в схемотехнике компика в месте совмещения Z80 и 580 серии. Всё же Z80 не интел и поддерживать нужные длительности импульсов синхронизации, чтения, записи и т.д. НЕ обязан для чужого чип комплекта(580 чип комплект). Для этого у Z80 есть свой. Например контроллер ПДП Z810A и т.д. Собственно, это меня и остановило при выборе проца для разработки своего Микрокома-85, т.к. я полагал, что выбор Z80 с прямой заменой только ВМ80 приведет к нестабильной работе компика в целом и потому выбор пал на проц 8085 и похоже я оказался прав.
Хотя потом тактовую частоту своего компика я уменьшил до Ркшной и поставил кварц 3.55 мГц. Иначе все игрушки приходилось ковырять для изменения констант выдержек.
В конце концов все же остановился на компромисном кварце 4 мГц. 2 мгц тактовой частоты достаточно для более шустрой работы, нежели у РК и в тоже время не нужно ковырять константы у игрушек. Да 4 Мгц кварцев завались, а 3.55 Мгц кварцы штучный товар.)))

VovanRK86
19.04.2013, 23:24
Я поясню чуть чуть

Выполняет 3 команды и виснет у меня ВМ85 при частоте кварца 12 мГц.
кварц 12 мГц, так как вм85 его то 6 мГц. а у меня кварц 4 мГц на лн1 и это в процессор идет и потом на ВТ57 ИЛИ через тм2 делим до 2 мГц. так вот один проц. как у Владимира только на 2 мГц. работает, а другой три команды:(
Так хрень в том что 580 серия ни причём, сначала я собрал тактовый и панель для Z80 и пошагиватель, ШД закоротил на землю (код 00, т.е. NOP, на ША перебор адресов), кварц 4 мГц. ну пол дня и промучался, нет перебора и всё!!! и все входные сигналы к + притянул и что только не делал, заменил проц и всё завелось!!! КАК РАЗ НА U880!!!! как ни странно!!! потом попробовал ВМ1 работает! а красивые:) Zilog Z80 нет!! может они отбраковка?



Для этого у Z80 есть свой. Например контроллер ПДП Z810A
Я как раз об этом спрашивал в другой теме, спрошу и тут может его вместо 8237?


В конце концов все же остановился на компромисном кварце 4 мГц. 2 мгц тактовой частоты достаточно для более шустрой работы, нежели у РК и в тоже время не нужно ковырять константы у игрушек. Да 4 Мгц кварцев завались, а 3.55 Мгц кварцы штучный товар.)))
Вот и я 4мГц поставил, т.к. 3.55 нет!!! а может стоит, что бы мафон, работал, но будет ли он работать с таким кварцем на Z80?и буду ли я мафон прикручивать вообще!, а для турбо режима я подберу позже и кварц и проц, ну ПДП по максимуму.



Либо у вас возникают проблемы в схемотехнике компика в месте совмещения Z80 и 580 серии.
А вот это вообще жесть!!! в соседней теме писал про клавиатуру, а тут про ТМ2 начального пуска! то ли ещё будет!
Но за неделю я опыта понабраться диссертацию писать можно:)

Vasily
19.04.2013, 23:34
Как и обещал, пошаговое превращение панельки 2.54 в 2.5. https://plus.google.com/photos/115985625161232218859/albums/5868639888250710849
Все одевается на микруху с шагом 2.5 и впаивается в таком виде, отверстия в плате как раз допускают посадку. После запаивания панелька готова. На Орионе, фото там же, разрезались сразу широкие, причем если аккуратно резать, то отходов не остается.

VovanRK86
19.04.2013, 23:50
Vladimir_S,

Не знаю, у меня так возникает ощущение, что оппонент этим ВЫ
а смутило ВЫ или Вы или вы? я пишу "Вы" или "Вам" ОЧЕНЬ часто во всяких заявления и всем пока не знаком, т. к. так положено.



хочет подчеркнуть - ты сам по себе, а я сам по себе.
про меня так не думай! т.к. см. выше и ниже:)


Но мы здесь в общем то с одними тараканами в голове
Вот вот!, я полностью согласен, но на это форуме я уже видел, как человек ругался когда ему Ты сказали.

Но как и писал согласен на ты, даже за, считай познакомились, тема общая как ни как, ну и как бы нас во флейм не отправили, за такие дебаты:)

VovanRK86
20.04.2013, 13:52
Что то почитал про OUT и не понравилось мне, не ужели придется через мультиплексоры ИД7 к младшей части ША подключать во время в/в из(в) порты?

---------- Post added at 13:52 ---------- Previous post was at 13:34 ----------

В доработке Ориона возможностью использовать in/out пожертвовали. :(

Vladimir_S
20.04.2013, 14:14
Что то почитал про OUT и не понравилось мне
Сейчас занят на третьей работе, малость освобожусь и думаю надо прикинуть как заменить OUT прямой адресацией, а еще насчет турбирования - думаю через отдельный порт программно включать в нужные моменты. А по умолчанию пусть будет стандартной.

alx32
20.04.2013, 14:27
Сейчас занят на третьей работе, малость освобожусь и думаю надо прикинуть как заменить OUT прямой адресацией, а еще насчет турбирования - думаю через отдельный порт программно включать в нужные моменты. А по умолчанию пусть будет стандартной.

Поставить две К555КП11 чтобы они переключали через /IORQ A0...A7 на A8...A15, и отключались по сигналу /BUSAK.

Vladimir_S
20.04.2013, 14:38
Поставить две К555КП11 чтобы они переключали через IORQ A0...A7 на A8...A15, и отключались по сигналу BUSAK.
Я имел в виду не только Z80. Даже для ВМ80 лучше прямая адресация. А то с OUT гадит прямо в середку ПЗУ F000 - F7FF.

---------- Post added at 13:38 ---------- Previous post was at 13:36 ----------

Когда пишет в порт, то и плевать, так ведь он гад еще и читает.

Rokl
20.04.2013, 23:36
... а у меня кварц 4 мГц на лн1 и это в процессор идет и потом на ВТ57 ИЛИ через тм2 делим до 2 мГц. так вот один проц. как у Владимира только на 2 мГц. работает, а другой три команды:(
Тактовая для проца и ВТ57 одинаковая. Если в компике на Z80 подаешь 4 мгц, то и на ВТ57 тоже эти 4 мгц.


Так хрень в том что 580 серия ни причём, сначала я собрал тактовый и панель для Z80 и пошагиватель, ШД закоротил на землю (код 00, т.е. NOP, на ША перебор адресов), кварц 4 мГц. ну пол дня и промучался, нет перебора и всё!!! и все входные сигналы к + притянул и что только не делал, заменил проц и всё завелось!!! КАК РАЗ НА U880!!!! как ни странно!!! потом попробовал ВМ1 работает! а красивые:) Zilog Z80 нет!! может они отбраковка?
Нет, это как раз схемотехника косячит.
Всякие емкостные связи на шинах.


Я как раз об этом спрашивал в другой теме, спрошу и тут может его вместо 8237?
Z810A имеет всего 1 канал ПДП. Для РК этого вполне достаточно а для Z80 отлично, но как Z810A будет работать с 580ВГ75 неизвестно.

VovanRK86
21.04.2013, 13:22
Тактовая для проца и ВТ57 одинаковая. Если в компике на Z80 подаешь 4 мгц, то и на ВТ57 тоже эти 4 мгц.
Ну я это выяснил экспериментально:), подавая на проц 4мГц, а на вт57 2мГц не работает!


Поставить две К555КП11 чтобы они переключали через /IORQ A0...A7 на A8...A15, и отключались по сигналу /BUSAK.
Я так понимаю хватит одного, надо же 3 старших адресных линии коммутировать на ид7 идущие, а можно ещё один ид7, жаль он не с открытым коллектором придётся объединять через лл1. Про /BUSAK учту, но может он не нужен если /IORQ к + подтянуть. Возможно сегодня попробую.


Даже для ВМ80 лучше прямая адресация.
Это как?

---------- Post added at 13:22 ---------- Previous post was at 13:16 ----------


а еще насчет турбирования - думаю через отдельный порт программно включать в нужные моменты. А по умолчанию пусть будет стандартной.
Именно так. Я как раз порт на ир35 предусмотрел (пока 0FFh).

Так портов наставим, видео заменим и РК превратится в спектрум:D

Vladimir_S
21.04.2013, 13:49
Это как?
Например вместо OUT 0F3H, что полностью получается 0F3F3H, использовать команду STA 0F003h, или MVI M (HL = 0F003H).


Так портов наставим, видео заменим и РК превратится в спектрум
Ну его.

VovanRK86
23.04.2013, 00:29
Вот нашёл. Инструкции Z80 Онлайн. Сгодится в этой теме думаю.
http://clrhome.org/table/

alx32
23.04.2013, 05:32
Например вместо OUT 0F3H, что полностью получается 0F3F3H, использовать команду STA 0F003h, или MVI M (HL = 0F003H).


Команда STA вообще-то трёхбайтная, а OUT двухбайтная, а MVI M вообще использовать в данном контексте не выгодно, потому как HL перед этим нужно в стек пихнуть, затем загрузить в него адрес, выполнить команду чтения/записи, а затем восстановить из стека.
Так что OUT там использовалась чисто из экономии памяти, неизвестно на сколько увеличится тот же DOS 2.9 если все команды IN/OUT заменить хотябы на LDA/STA...

Отправлено с моего A7 HD через Tapatalk

Vladimir_S
23.04.2013, 06:59
Команда STA вообще-то трёхбайтная, а OUT двухбайтная, а MVI M вообще использовать в данном контексте не выгодно, потому как HL перед этим нужно в стек пихнуть, затем загрузить в него адрес, выполнить команду чтения/записи, а затем восстановить из стека.
Так что OUT там использовалась чисто из экономии памяти, неизвестно на сколько увеличится тот же DOS 2.9 если все команды IN/OUT заменить хотябы на LDA/STA..
Я только примеры привел. Если использовать STA/LDA, то в памяти под ВВ55 будет занято 4 ячейки F000 - F003. Часть кода можно будет перенести в F004 - F7FF.Тогда можно будет не экономить память.

alx32
23.04.2013, 08:54
Дело не в этом, просто DOS 2.9 не поместится в ПЗУ 2кБ

Vladimir_S
23.04.2013, 10:16
Дело не в этом, просто DOS 2.9 не поместится в ПЗУ 2кБ
Под DOS и контроллер - хоть 6кБ.

VovanRK86
23.04.2013, 11:09
А почему авторы использовали в DOS команды in\out, может для скорости работы, а не для экономии места?

---------- Post added at 11:07 ---------- Previous post was at 11:02 ----------

HardWareMan, что то у меня плохо работает схема из поста №31, для звука, т.е. звук есть и при наборе символа, и из игрушек, но из динамика идёт какой то громкий фон разных частот, гораздо громче чем полезный сигнал?

---------- Post added at 11:09 ---------- Previous post was at 11:07 ----------

п.с нашёл фразу от авторов "для ускорения обмена"

Vladimir_S
23.04.2013, 11:25
п.с нашёл фразу от авторов "для ускорения обмена"
Это где? И каким образом ускоряется обмен?

HardWareMan
23.04.2013, 11:35
HardWareMan, что то у меня плохо работает схема из поста №31, для звука, т.е. звук есть и при наборе символа, и из игрушек, но из динамика идёт какой то громкий фон разных частот, гораздо громче чем полезный сигнал?
Софт оригинальный используется (от ВМ80)? Возможно, нужно еще привязать RD сигнал для надежности. Если не все игрушки так жужжат - то может там коды какие проскакивают из DI/EI. Может еще DMA влиять, но тогда надо заместо RD привязать BUSA.

VovanRK86
23.04.2013, 12:20
Софт оригинальный используется (от ВМ80)?
Софт оригинальный.


Может еще DMA влиять
Я тоже об этом думаю, но одна прога играющая музыку вроде пдп отключает.

Vladimir_S, Например Радио №5 1994г. стр. 18.

Vladimir_S
23.04.2013, 14:34
Команда OUT - 10 тактов, команда STA - 13 тактов. Обе команды выставляют адрес на ША и данные из аккумулятора на ШД. После чего дешифратор выбирает устройство для которого предназначены данные. Не представляю, что можно выиграть за 3 такта в такой машине как РК.

VovanRK86
24.04.2013, 03:00
Не представляю, что можно выиграть за 3 такта в такой машине как РК.
Я то же не знаю, но они (авторы) что то выигрывали, и тем более не догадывались что мы - потомки всё во Flash загоним, RAM статику прикрутим, z80 поставим, SD... и жалобы посыплются дескать на Х Нам ВИ53 его не использовал ни кто, НО с ROM от datasoft ТРИ!!! проги его очень даже юзают, и ОНИ (авторы) не знали какой переполох будет даже от ВИ53, т.к. подключение ЕГО очень специфично или к вв55 или следом за ней или вообще по OUT\IN, где даже схема железа другая, но по двум первым вариантам проги есть, а про третий я читал только....
Вот и занимаюсь этим всем..... интересно всё же....
что и как
и жалобы на авторов....
у меня просто минимальные: поставили бы ид3 вместо ид7 (она даже доступнее думаю была, ну и в ЮТ видимо поняли идею) и..... всё поле для творчества, получаем кучу CS для наших задач, не надо не юзай, пользуй стандарт, остальное резерв (для тех кому надо, пользуй как надо, договорись заранее), а так получили как сейчас, но я ни сколько не в претензии, я вообще респект авторам, в те времена, я это НЕВЕРОЯТНЫМ достижением считаю, думаю они даже не осознавали что надо думать об расширении, минималку бы кто собрал, на комплекте 580, уже хорошо, а дальше и не думал ни кто, но так сложилось РК стал культовым (эх не догадывались авторы тогда :)) и спектрум меня например не зацепил, так как РК например, а ведь если бы хотя бы минимальную стандартизацию авторы в прототип заложили (в рк конечно) , был бы у нас IBM первым изобретён, а не у них... (но собственно так и есть но со стандартами не очень;) конечно получилось, в орионе учли однако, но позже)

---------- Post added at 03:00 ---------- Previous post was at 02:43 ----------

а вообще я стал вдруг осознавать рк86 железяка ОЧЕНЬ грамотная конечно, НО для того времени, и даже сейчас даёт о себе знать как ТРУДНО её оживить, программно аппаратный комплекс как никак ;) не дай Божи на ру3 с ир1, другие например хоть матрац выдают(даже без CPU), а тут притянул ШД к +5 вольт через 10кОм и нет тебе ПДП!!!!!!

Vladimir_S
24.04.2013, 04:45
Например Радио №5 1994г. стр. 18.
Внимательно читать не стал, но там по моему все дело в программировании дешифратора. Вначале программируют дешифратор, а потом устройство к нему подключенное.Потому и гемор такой.

Vladimir_S
24.04.2013, 11:27
VovanRK86, Ты написал, что у тебя ПЗУ стоит 8кБ. Как сделан начальный старт?

VovanRK86
24.04.2013, 11:47
Да я про абзац над надписью радио №5, 1994г. над номером страницы под контрольными суммами, там как раз про ДОС написано.

---------- Post added at 11:47 ---------- Previous post was at 11:34 ----------


VovanRK86, Ты написал, что у тебя ПЗУ стоит 8кБ. Как сделан начальный старт?
Стандартно на тм2, но у меня пока в нем хитрая прошивка (что год назад удалось придумать) т.к. адреса ПЗУ а11 и а12 подключены к дополнительной ид7 дисковода к выводам CS1 и CS2, а вывод CS3 выбирает вв55 и запрещает обращение к ПЗУ, прошито так монитор 2кб(чтобы работало если на а11 и а12 подать нули), дос 4кб, монитор 2кб (а это чтобы работало при единичках на а11 и а12 от дополнительной ид7), а сейчас зашью дос4кб Е000-ЕFFF, 2кб читалка SD F000-F7FF из соседней темы, монитор 2кб F800-FFFF и а11, а12 подключу к процу напрямую, т.е. по адресу Е000, будет целиком ПЗУ 8кб.

Vladimir_S
24.04.2013, 12:01
Я почему спросил то, я, что бы нормально стартовал монитор, в первых ячейках ПЗУ зашил С3 00 F8. И программно переходил в старшую четверть ПЗУ. А так как реально это адрес Е000, то и пришлось репу поморщить. И сегодня придумал - А11 и А12 подавать на ПЗУ не напрямую, а через 2ИЛИ, один конец которого на инверсный выход ТМ2. И получается при сбросе автоматически выбирается адрес 1800. И не надо никаких дополнительных дешифраторов.

VovanRK86
24.04.2013, 12:06
И сегодня придумал - А11 и А12 подавать на ПЗУ не напрямую, а через 2ИЛИ, один конец которого на инверсный выход ТМ2. И получается при сбросе автоматически выбирается адрес 1800.
хорошая идея, вот и я городил огород с прошивкой что бы запуск был

Vladimir_S
24.04.2013, 12:12
А вообще я хочу перетащить ВВ55 контроллера в другие адреса. Нехрен ему с ПЗУ бодаться.

VovanRK86
24.04.2013, 12:25
и я тоже хочу перетащить контролеры, но совместимость не терять, у меня распаяно две озу по 64кб надо как то применить.

Rokl
25.04.2013, 20:36
хорошая идея, вот и я городил огород с прошивкой что бы запуск был
Зачем огород? просто в первых 3х адресах ПЗУ любой размерности (РФ2, РФ6, РФ7, РФ8) пишется 3 байта C3 00 F8. И всё.

Vladimir_S
25.04.2013, 23:32
Зачем огород? просто в первых 3х адресах ПЗУ любой размерности (РФ2, РФ6, РФ7, РФ8) пишется 3 байта C3 00 F8. И всё.
Именно так у меня и сделано. Но теперь с этого адреса у меня будет DOS и сделаю старт с адреса 1800, что в реальных адресах F800.

VovanRK86
26.04.2013, 01:17
Зачем огород? просто в первых 3х адресах ПЗУ любой размерности (РФ2, РФ6, РФ7, РФ8) пишется 3 байта C3 00 F8. И всё.


Именно так у меня и сделано. Но теперь с этого адреса у меня будет DOS и сделаю старт с адреса 1800

Так у меня там уже ДОС, вот поэтому и огород, а идея понравилась, т.к. в моём случае дополнительная ид7 понятно не может выдать два нуля на а11 и а12 поэтому 2кб потеряны, а так проблема решена и довольно просто, скоро опробую.

VovanRK86
30.04.2013, 15:28
Сегодня подключил обе ид7 через кп11 от старшей части ША к младшей, управление на ногу проца обращения к портам и объединил RD и WR памяти и портов, ДОС пускается, даже обращается к FDD, и выдаёт ошибку, на этом всё:(, может у кого есть идеи, где искать? (команду OUT проверял, в память пишет и в ПДП тоже, но ДОС не работает)

Vladimir_S
30.04.2013, 15:40
VovanRK86, При чтении из ППА ПЗУ блокируется?

VovanRK86
30.04.2013, 23:20
Да, оно блокируется как раз сигналом cs3 от второй ид7 из схемы радио по подключению дисковода, и этот cs3 выбирает вв55 и ир22 fdd, так вот ещё загвоздка я загрузил тест fdd из журнала и он работает и в нём особенность, он обращается к fdd по командам STAxx и LDAxx, а ДОС использует in\out может в этом особенность, я ещё думал может проблема в таймингах проца z80, но первое вм80 в штатном режиме можно турбировать, если на видео и дисковод подать 16 мГц, второе сегодня убедился мой компик загружает с мр3 файлы при тактировании 2мГц без подбора константы, кстати сделал вход мафона на 561лн2 как в спеке.

Теперь вопросы, как видишь для себя схему объединения сигналов записи и чтения портов и памяти на z80, что бы получить полный аналог вм80 и второй у тебя звук как работает т.е. стандартный, у меня плохо(очень плохо, я писал) тоже не знаю почему.

---------- Post added at 23:20 ---------- Previous post was at 23:11 ----------

п.с. как и писал я добавил порт 0FFh и он вроде работает я в него пишу вроде нет проблем за счёт второй ид7, но если читать думаю прочтёт ещё и ячейку ПЗУ по адресу 0FFFFh, как то так пока.

Vladimir_S
01.05.2013, 02:19
как видишь для себя схему объединения сигналов записи и чтения портов и памяти на z80
Вот тут не понял, в конфигурации РК нет разницы к чему ты обращаешься, к устройству или к памяти - если изменил схему, то как я могу ответить на этот вопрос?


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


п.с. как и писал я добавил порт 0FFh и он вроде работает я в него пишу вроде нет проблем за счёт второй ид7, но если читать думаю прочтёт ещё и ячейку ПЗУ по адресу 0FFFFh, как то так пока.
Схему ведь я не видел.


Сегодня подключил обе ид7 через кп11 от старшей части ША к младшей, управление на ногу проца обращения к портам и объединил RD и WR памяти и портов
Это что то из области удаления гланд через известное место. Опять же без схемы...

VovanRK86
02.05.2013, 11:34
А на выходе электролит поставил?
Ну это конечно, у меня там кроме звука ещё фон идёт.



Вот тут не понял, в конфигурации РК нет разницы к чему ты обращаешься, к устройству или к памяти - если изменил схему, то как я могу ответить на этот вопрос?

Так по твоей схеме проц не может обратится к памяти как к устройству т.к. ты используешь сигнал MREQ, а сигнал IORQ обращения к внешним портам не используется.
Я же попробовал использовать RD и WR не с чем их не объединяя, т.е. без разницы к чему проц обращается, вот не знаю может здесь ошибка.


Это что то из области удаления гланд через известное место.
Ну а куда деваться всего два кп11 и возможно не придётся переписывать софт, т.е. будет полная с РК совместимость, по крайней мере идея вроде правильная и даже вроде работает.

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

VovanRK86
02.05.2013, 13:14
Вот быстренько дорисовал может будут какие мысли. Вторая кп11 аналогично подключена ко второй ид7.

Vladimir_S
02.05.2013, 13:50
VovanRK86, MREQ используется не для того, что бы обращаться именно к памяти, Z80 активным уровнем MREQ показывает, что уровни на ША выставлены и можно читать/писать.

Vladimir_S
02.05.2013, 14:25
А ПЗУ я вот так подключил

HardWareMan
02.05.2013, 14:28
VovanRK86, MREQ используется не для того, что бы обращаться именно к памяти, Z80 активным уровнем MREQ показывает, что уровни на ША выставлены и можно читать/писать.
.. в память. С портами такое не прокатит.

Vladimir_S
02.05.2013, 14:31
С портами такое не прокатит.
Объясни.

HardWareMan
02.05.2013, 14:37
Сигнал MREQ не выработается, при обращении к портам специальными командами (IN/OUT). Стало быть ему нельзя использовать MREQ как сигнал строба адреса. Если только объеденить по И MREQ и IORQ, тогда да. а для совместимости с ВМ80 поставить мультиплексор (который он уже поставил). С другой стороны, зачем вообще этот геморрой и в рамках данного компьютера можно тупо игнорировать оба сигнала и будет вам счастье. За исключением мультиплексора адресов, перекидываемого ногой IORQ, конечно.

Vladimir_S
02.05.2013, 14:42
Сигнал MREQ не выработается, при обращении к портам специальными командами (IN/OUT).
Понятно.Потому я и хочу заменить IN/OUT на LDA/STA. Для совместимости ВМ80/Z80.

VovanRK86
02.05.2013, 21:35
С другой стороны, зачем вообще этот геморрой и в рамках данного компьютера можно тупо игнорировать оба сигнала и будет вам счастье. За исключением мультиплексора адресов, перекидываемого ногой IORQ, конечно.
Так так я сделал, т.е. использую только WR и RD, MREQ не использую совсем (может зря? может в этом косяк?), а IORQ использую вместе с WR для записи в регистр с №0FFh. Но FDD не работает. Запись точно проходит, а вот с чтением мне кажется проблемы, но где искать не пойму:(

---------- Post added at 21:25 ---------- Previous post was at 21:18 ----------

в схеме не отраженно про WR и RD, я вместо сигнала MREQ подал +5вольт

---------- Post added at 21:30 ---------- Previous post was at 21:25 ----------


А ПЗУ я вот так подключил
Я это понял идея мне понравилась, но у меня выбор ПЗУ подключен к первой ИД7, а сигнал cs3 от второй ИД7 блокирует выбор ПЗУ и не надо трёх входовый логический элемент использовать.

---------- Post added at 21:35 ---------- Previous post was at 21:30 ----------

и можно от второй ид7 отказаться, а адрес 0F000h вылавливать логикой.

sergey2b
02.05.2013, 22:22
объясните пожалуйста как заданный адрес вылавливаеться логикой
там же придеться 16 адрессных шин контролировать

VovanRK86
03.05.2013, 00:20
sergey2b,

Для портов можно чуть больше оставить, например F000-F03F, на будущее, зато отслеживать нужно будет только A6-A10, экономия логики на лицо. Да и 60 байт в ПЗУ погоды не сделают.
пост №63 из этой темы

или вариант берем с первой ид7 сигнал выборки адресов 0E000h-0FFFFh и контролируем только А12 если он единица то наш адрес 0F000h, т.е. выбор контролера FDD и запрет выбора ПЗУ (которая 8кб и подключена по схеме Vladimir_S пост №141), придумал только что, может ошибся, но если прав то вместо второй ид7 нужна ЛЛ1 её ещё используем для выбора А11 и А12 ПЗУ (по схеме Vladimir_S) ну и пара инверторов.

---------- Post added at 23:01 ---------- Previous post was at 23:00 ----------

но вроде ошибся нужно ещё и А11 отслеживать на адрес монитора 0f800h, но всё же три сигнала

---------- Post added 03.05.2013 at 00:20 ---------- Previous post was 02.05.2013 at 23:01 ----------

Vladimir_S, звук победил, заработал гораздо лучше по схеме из поста №30, как то я её проглядел, посторонний фон тоже есть, но гораздо тише, часть логики заменил на ла2 по схеме из поста №31, принцип отличия в работе обоих схем пока понять не пытался, главное заработало.

Vladimir_S
03.05.2013, 00:28
и можно от второй ид7 отказаться, а адрес 0F000h вылавливать логикой.
Я это сделал временно, когда перетащу ВВ55 в адреса A00C - A00F второй дешифратор вообще уберу.

Vladimir_S
03.05.2013, 04:32
VovanRK86, кстати, забыл написать, я все эксперименты буду производить с ВМ80. Дабы избежать всяких непоняток с переделкой.

HardWareMan
03.05.2013, 06:47
Так так я сделал, т.е. использую только WR и RD, MREQ не использую совсем (может зря? может в этом косяк?), а IORQ использую вместе с WR для записи в регистр с №0FFh. Но FDD не работает. Запись точно проходит, а вот с чтением мне кажется проблемы, но где искать не пойму:(
Так да не так. Не следует привязывать запись к IORQ. Сигнал IORQ нужен только для коммутирования адреса. И еще, судя по твоей схеме ты не полностью коммутируешь. а это плохо.

VovanRK86
03.05.2013, 11:48
Не следует привязывать запись к IORQ.
А поподробнее, почему нет?


И еще, судя по твоей схеме ты не полностью коммутируешь. а это плохо.
а зачем полностью, т.е. я потом и хочу полностью сделать, а пока А13,А14,а15 и А11 и А12 на второй кп11, собственно для второй ид7, с контролером FDD должно вроде работать, он использует только А0,А1,А2, главное что бы его дешифратор выбрал, а в память правильно писаться не будет т.к. не коммутируются А8,А9,А10 правильно понимаю?

HardWareMan
03.05.2013, 12:07
Вроде того. Трудно судить не имея полной схемы получившегося компа.

VovanRK86
03.05.2013, 12:18
Трудно судить не имея полной схемы получившегося компа.
Видимо пришло время нарисовать схему, а то самому как то сложно разобраться во всём.

Vladimir_S
14.05.2013, 12:06
VovanRK86, Ты хотел вместо ИД7 поставить ИД3 не по такой схеме?

VovanRK86
14.05.2013, 13:27
Да по такой, но так сейчас мне такое мелкое деление адресов не нужно стоит ИД7 по такому же принципу.

Vladimir_S
14.05.2013, 14:26
мне такое мелкое деление адресов не нужно
А мне наоборот для экспериментов именно так и нужно.Временно поставлю ИД3.

VovanRK86
15.05.2013, 08:56
Временно поставлю ИД3.
А в какой компик на z80 или в рк на SRAM?



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

мне много лет назад хватило выделения только адреса 0B000h, я там разместил озу 2кб на ру10, и в нем программки писал.

Vladimir_S
15.05.2013, 14:27
VovanRK86, Это все пробное, а в итоге будет так.

Atari
15.05.2013, 15:02
Господа, покурите схемы от ямахи MSX. там каждое устройство имееет свой декодер ибо:
1. ИД3 из 155 серии имеет критическую нагрузку для ША процессора. т.е надо однозначно ставить 1533.
2. несколько дешифраторов последовательно создают задержки и "иголки".

VovanRK86
16.05.2013, 10:32
Это все пробное, а в итоге будет так.
В принципе классная схема, и я правильно понимаю в 0A000h-0Axxxh перенести FDD и подцепить и дополнительную ВВ55 и ВИ53?

Vladimir_S
16.05.2013, 10:40
В принципе классная схема, и я правильно понимаю в 0A000h-0Axxxh перенести FDD и подцепить и дополнительную ВВ55 и ВИ53?
Да, ИД14/2 это расширение.

Vladimir_S
21.05.2013, 15:38
Уже писал, но так наверное понятней.

Rokl
21.05.2013, 20:58
Господа, покурите схемы от ямахи MSX. там каждое устройство имееет свой декодер ибо:
1. ИД3 из 155 серии имеет критическую нагрузку для ША процессора. т.е надо однозначно ставить 1533.
2. несколько дешифраторов последовательно создают задержки и "иголки".
В своё время ставил в РК вместо дешифратора адреса 555ИД7 пару ПЗУ К155РЕ3 и проц нормально терпел и работал на УРА. Но, конечно, вы правы и так делать стремно. Только К1533 лучше не ставить. Слаба по выходу и с быстродействием возможны проблемы. Тут лучше импорт SN74НС154. А лучший вариант дешифратора, это ATF22V10B (PALCE22V10H)...гибкость, шустрость, КМОП.

Stampmaker
29.07.2015, 19:28
HardWareMan, еще раз прошу порекомендовать книжку по Z80, только толково писаную.

вопрос ещё актуален, может это поможет?
http://www.igorkov.org/pdf/Z80-Central-Processor-Unit.pdf


и, собственно, вопрос, из-за которого я зашёл в эту тему: схема модуля на Z80, полностью заменяющего КР580ВМ80А, существует?

Vital72
30.07.2015, 17:19
Z80 в РК не нужен

Vladimir_S
30.07.2015, 18:02
Z80 в РК не нужен
8085 в РК нужен.

Viktor2312
30.07.2015, 18:17
8085 в РК нужен.

Тоже не нужен.

alx32
30.07.2015, 18:22
Виктору РК вообще не нужен...

Viktor2312
30.07.2015, 19:18
Виктору РК вообще не нужен...

Ну вообще-то он у меня есть, если чё. Так что не нужно тут за других говорить, мы сами за себя скажем.

Alex_LG
30.07.2015, 21:07
z80, ВМ85... - это интересно, но это больше похоже не на РК, а на его эмуляцию... Это нужно было делать вовремя, как, например, с Орионом, а сейчас - не вижу смысла.

Vladimir_S
31.07.2015, 05:54
Это нужно было делать вовремя
Конечно, а все остальное как раз в духе времени.

Stampmaker
31.07.2015, 08:08
Нужен или нет, давайте каждый при своём мнении останется? :-)
А по теме как?
Схема есть или нет?

Vladimir_S
31.07.2015, 11:11
Схема есть или нет?
Схемы как таковой нет, но насколько помню Z80 подключается 1:1, только RD через инвертор. Только опыт показывает, что не весь софт работает.

Stampmaker
31.07.2015, 11:48
Хорошо.
Буду экспериментировать.

Alex_LG
31.07.2015, 12:36
а все остальное как раз в духе времени.

Я имел ввиду процессор, так сказать, сердце компьютера. Понятно, что мы сейчас используем современную элементную базу для расширения/улучшения наших старичков. Я сам, например, РКшку собрабрал на ПЛМке, программы загружаю с SD-карточки при помощи микроконтроллера AVR, который во много раз мощнее ВМ80, вместо телевизора - монитор. Но в центре всего этого - КР580ВМ80! Как мне кажется, этот процессор, со всеми его недостатками, как раз и делает наши компьютеры НАШИМИ.

alx32
31.07.2015, 15:42
А ИМ1821ВМ85А тоже наш, к тому же потребляет меньше импорта и "ледяной" при тактовой частоте 5МГц.

fifan
01.08.2015, 17:04
Извените если не в тему. На Специалисте-МХ была такая схема (http://www.spetsialist-mx.ru/schemes/z80.PNG), может понадобится.

Vladimir_S
01.08.2015, 17:04
Буду экспериментировать.
Зачем?
http://zx-pk.ru/showpost.php?p=581077&postcount=19

Stampmaker
02.08.2015, 13:43
Зачем?
http://zx-pk.ru/showpost.php?p=581077&postcount=19

да, эту схему я смотрел, но ведь было ещё вот такое дополнение http://zx-pk.ru/showpost.php?p=582697&postcount=31 и лут http://zx-pk.ru/showpost.php?p=585547&postcount=42

поэтому и возникают дурацкие вопросы о полных начерченных схемах и т.д.

Vladimir_S
02.08.2015, 13:48
Это для звука эмуляция INTE. Но работает очень хреново.

zhan57
18.11.2016, 11:54
ОЗУ - какая микруха ? На фото не видно.

Vladimir_S
18.11.2016, 11:59
ОЗУ - какая микруха ? На фото не видно.
M48T35

Vladimir_S
09.01.2017, 16:51
При установленной Z80 в Радио-86РК не работают многие программы. Например ассемблер, дизассемблер, отладчик. Но например в Орион-про, хотя там тоже Z80 они работают. Приходит на мысль, что дело в "мониторе". Покопался и чуток поправил в мониторе п/п F818. теперь большинство программ заработали, но не пашет DOS2.95. Может кто копался на предмет работы DOS2.95 с Z80?

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

Blade оказался совершенно прав.
http://zx-pk.ru/threads/20887-radio-86rk-na-z80.html?p=580891&viewfull=1#post580891

barsik
09.01.2017, 21:06
Покопался и чуток поправил в мониторе п/п F818. теперь большинство программ заработали, но не пашет DOS2.95.

Кажется, единственное место где надо править, - это 'JPO' указанное BLADE. Я в своё время тоже с этим столкнулся, когда делал ROM-BIOS РК86 для эмулятора РК на ОРИОНЕ с Z80 и исправил это место. Написал "кажется", потому, что может быть есть ещё где-то непереностимость Z80, но я этого не знаю. Т.к для эмулятора РК на ОРИОНЕ использовал только стандартные подпрограммы, а командный монитор РК выкинул. Таким образом в стандарных подпрограммах других несовместимостей нет, но надо посмотреть все ли команды RAM-монитора работают.

Поэтому править надо п/п-мму F809 (COUT_C), а не F818 (MSSG). При коррекциях и перетрансляциях можно произвольно менять код ПЗУ РК86, но некоторые внутренние точки двигать нельзя. Надеюсь Вы посмотрели в моём исходнике монитора РК86 те внутренние входные точки ПЗУ F800 РК86, которые необходимо сохранить для совместимости. На всякий случай привожу их.


.
GETLIN EQU 0F8EEH
CMPDH EQU 0F990H
CRHLBL EQU 0FB78H ; Выводит ВК, вправо на 4 позиции и ADR_BL
RIGHT4 EQU 0F9B0H ; Выводит ВК и вправо на 4 позиции
GETPRM EQU 0F92CH
PUSK_VG EQU 0FACEH


Эти точки внутренние и теоретически не обязаны соблюдаться, но к сожалению среди программистов для РК86 нашлось несколько, грубо говоря идиотов, которые не послушались советов авторов РК86 и "лезли" во внутренние точки ПЗУ.

Хотя идея выпустить платы РК86 на Z80 "накрылась" из-за отсутствия интереса у пользователей, но теперь я сам собираюсь починить свой РК86 и поставить туда Z80. Поэтому, на досуге странслировал ПЗУ F800 РК86 для Z80 сохраняющее все указанные внутренние точки. При этом заменой на JR-команды, без труда выиграно 110 байт. Однако пока не проверил на практике. Для начала можно проверить в виде версии для ОЗУ, чтобы не перезашивать ПЗУ.

Привожу фрагмент, чтобы показать как я избавился от неверно используемой команды JPO. Заодно посмотрите на подпрограмму HEX_A (F815). В мониторе РК она дико неэффективна (впрочем, в ПЗУ всех остальных отечественных 8-ми разрядок эта п/п-мма лишь на байт эффективнее). Я применил самый эффективный алгоритм, отчего на 11 байтах выиграл целых 3 байта ! Изменения в ПЗУ заключаются в том, чтобы заменить команду JPO (см.там где точка с запятой закомментирует JPO).




.
HEX_A: PUSH AF
RRCA
RRCA
RRCA
RRCA
CALL NIBBLE
POP AF
NIBBLE: AND 0FH
CP 10
CCF
ADC A,30H
DAA

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-флага
JR Z,BYTE2 ; если ещё не было второго байта 'Y' (1)
; JP PO,AFD73 ; <------ !!!!!! если 3-тий байт
DEC A
JR Z,AFD73 ; если 3-тий байт
LD A,C ; четвёртый байт
SUB 20H
LD C,A
AFCDD: DEC C
JP M,ESCRES ; СБРОС ESC_F И ВЫХОД
PUSH BC
CALL COD18 ; на следующее знакоместо
POP BC
JR AFCDD

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

AFD73: LD A,C ; третий байт
SUB 20H
LD C,A ; номер строки
AFD77: DEC C
LD A,4
JP M,SETESC
PUSH BC
CALL COD1A ; на строку вниз
POP BC
JR AFD77

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

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

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

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

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

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


Кажется Вы выводите звук по INTE ?

Т.к звук в программах РК86 задействован слабо и качество его никудышное, я лично не планирую возиться со звуком по EI/DI на выходе INTE, т.е делать аппаратный эмулятор звука по схеме ОРИОН-СЕРВИС. Я собираюсь иметь звук по 'OUT FF', т.к тогда проще всего переделывать звуковые программы РК86 для Z80.

Меня интересует список игр, которые не работают на Z80, т.к мне надо адаптировать все игры РК86 для ИРИШИ, причём так, чтобы это работало как на КР580 так и на Z80.


Может кто копался на предмет работы DOS2.95 на процессоре Z80?

Кроме меня никто этого не делал, а я это очень давно сделал. Там не только убрал команды вызывающие несовместимость с Z80, но и убрал работу с сигналом READY (готовность эмулируется из сигнала INDEX). Я ранее публиковал готовый листинг версии RK-DOS для Z80 в варианте для ОРИОНА.

Чтобы это работало на РК86, надо сменить адреса размещения ДОС (на E000) и базы служебных ячеек (на 7600) и в одном месте вернуть команду инициализации ВГ75. Больше ничего менять не надо, т.к это чисто текстовая программа. Т.е надо изменить 2 цифры и вставить 2 строчки текста.

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

Когда переделываете ROM-BIOS РК86 для Z80, не обязательно сразу прошивать его в ПЗУ. Гораздо разумнее сначала проверить работу новой версии ROM-BIOS в эмуляторе B2M. Для этого в конфигурационном файле РК86 достаточно указать, что процессор Z80.

NB: Новая версия эмулятора B2M (декабрь 2016) при эмуляции РК86 - не может работать со старым каталогом 'Radio', т.е недостаточно скопировать файл EMU.EXE - надо брать весь новый архив целиком. Кроме того, благодаря эмулятору можно понять какие программы РК86 не работают с Z80. К сожалению, РК-КНГМД эмулятор B2M не эмулирует и проверить RK-DOS в эмуляторе нельзя.

kolk
10.01.2017, 00:31
Читали ли Вы исходники Монитора в книге Miller, Alan 8080/Z80 Assembly Language, techniques for improved programming ?

barsik
10.01.2017, 00:49
Читали ли Вы исходники Монитора в книге Miller, Alan 8080/Z80 Assembly Language, techniques for improved programming ?

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

kolk
10.01.2017, 01:14
Я вообще-то имел в виду сейчас. В Киеве я читал ее в 1988 в бумажном виде. И в последующих правках Монитора применял. В поиске Google качается с archive.org https://archive.org/download/8080_and_Z-80_Assembly_Language_Techniques_1981_John_Wiley_an d_Sons/8080_and_Z-80_Assembly_Language_Techniques_1981_John_Wiley_an d_Sons.djvu или https://archive.org/download/8080_and_Z-80_Assembly_Language_Techniques_1981_John_Wiley_an d_Sons/8080_and_Z-80_Assembly_Language_Techniques_1981_John_Wiley_an d_Sons.pdf

А суть в обсуждаемом hexprint, я его оттуда брал. Поэтому и спросил. Скорее всего, этот вариант ходячий, и мог быть найден в другом месте или переизобретен. А вообще, Монитор РК сильно ужимается выносом в подпрограммы дублирующего кода и повальным IN/OUT (к сожалению, непригодно для Z80).

Vladimir_S
10.01.2017, 04:45
Поэтому править надо п/п-мму F809 (COUT_C), а не F818
Оно в конечном итоге так и есть. Я в оболочке своего FDOSa прятал курсор так - записывал в последнюю доступную для монитора ячейку код 8F (черные символы на черном фоне), а потом с помощью директивы F818 (1BH,59H,38H,5EH,0) помещал туда курсор, который становится совершенно невидимым. Так вот с Z80 курсор хаотично прыгал по левому краю экрана. Ошибку я начал искать естественно с F818, где переход на п/п вывода символа с аккумулятора, ну и F809.


Кажется Вы выводите звук по INTE ?
Нет, у меня стоит ВИ53. И прекрасно выводит звук.


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

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

И да - в этих же адресах то же самое нужно править в Апогее.

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


Т.е, если хотите, я Вам странслирую версию RK-DOS для работы из ОЗУ и когда Вы её проверите, то можно странслировать версию для прошивки в ПЗУ.
В каких адресах?

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


я лично не планирую возиться со звуком по EI/DI на выходе INTE
У меня на плате предусмотрена возможность включения как ВМ85, так и Z80. И на них нет вывода INTE.

barsik
10.01.2017, 06:13
Привожу перетранслированный для Z80 ROM-BIOS РК86. Здесь более 120 свободных ячеек. Сам код почти оригинал. Если выкинуть из монитора никому ненужные зачатки отладчика, то освободится еще 20-30 байтов. Если флаг ORIG поставить =0, то курсор большой. Но проверить это можно только в реале, т.к эмулятор B2M не точно эмулирует вывод курсора. Данная версия не проверена в реале, а только в эмуляторе B2M с config-файлом РК86 изменённым для Z80.


У меня на плате предусмотрена возможность включения как ВМ85, так и Z80. И на них нет вывода INTE.

Речь шла о схеме ловушке, которая используя сигнал /M1 и биты данных, отлавливает команлы EI и DI, соответственно выставляя триггер. Эта схема входила в вариант установки Z80 на ОРИОН от МП ОРИОН-СЕРВИС, позволяя слышать INTE звук на Z80.



можно странслировать версию RK-DOS для работы из ОЗУ и после её проверки, можно странслировать версию для прошивки в ПЗУ.

В каких адресах?

Странный вопрос. Странслировать можно для любого адреса. Изменить цифру в тексте не проблема. Но для совместимости с программами для RK-DOS РК86 ничего изменить нельзя - совместима будет только RK-DOS на E000 (в ПЗУ) с рабочими ячейками ДОС в области 7600H. А для проверки дискетных подпрограмм - годится любой адрес в ОЗУ (например 6000), переделывать внешние SYS-команды для проверки не требуется, т.к команды SAVE, LOAD внутренние.

Vladimir_S
10.01.2017, 07:02
позволяя слышать INTE звук на Z80.
Вложения
Делал я такое - полное г.

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

barsik, Монитор оттранслировал,сам он работает, но на нем не стартует мой FDOS, а на нем весь нужный мне софт.

barsik
10.01.2017, 19:40
Делал я аппаратный эмулятор INTE для Z80 - это полное Г.

Вообще-то РК86 и не может выводить чистые тона, только хриплые. Так как каждые 64 МКСЕК ПДП рвёт вывод звука на 45 МКСЕК. Чтобы программно вывести чистый тон на РК86 надо остановить ПДП (экран погаснет) и регенерировать динамические ОЗУ программно. А вот на ОРИОНЕ аппаратный эмулятор INTE для Z80 работал отлично, выдавая чистые тона.


Предложенный ROM-BIOS для Z80 сам работает, но на нем не стартует мой FDOS, отчего не загрузить весь нужный мне софт.

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

Хотелось бы знать подробности о Вашей ДОС, какое железо, принцип работы и используемые подпрограммы ПЗУ. Используются ли п/п-ммы работы с МГ-лентой?

Не могу проверить ROM-BIOS для Z80 в реале (нет такого железа), а в своём эмуляторе РК86 на ОРИОНЕ проверить ROM-BIOS нельзя, т.к он эмулирует КР580 и не допускает использования произвольного кода ПЗУ F800. В эмуляторе B2M даже с конфигом для Z80 также проверить нельзя. Т.к директивы загрузки не работают и программы для проверки не загрузить. Потому что эмулятор B2M жёстко привязан к коду базового ПЗУ F800. Если подпрограммы RDBYTE (FB98) или WRBYTE (FC46) сдвинуть хотя бы на один байт, то при старте директив I или O произойдёт улёт. Причём нельзя сдвигать не только эти входы, но и ещё какие-то другие (долго выяснять какие именно).

Vladimir_S
11.01.2017, 03:28
Хотелось бы знать подробности о Вашей ДОС, какое железо, принцип работы и используемые подпрограммы ПЗУ.
Тут нужно знать историю возникновения этой ДОС - я вначале хотел замутить ее на AT29C040, но у некоторых форумчан их не оказалось и тогда остановились на AM29F040. Формат записи файлов как в ОРДОС. Одна микросхема на плате (INT), другая подсоединяется к порту (ЕХТ). Вначале все управление было через командную строку, затем я написал ЧБ оболочку, а потом и раскрасил ее.

http://zx-pk.ru/threads/26099-radio-86rk-plyus-sozdanie-i-obsuzhdenie-versii-2016g.html?p=891189&viewfull=1#post891189

b2m
11.01.2017, 16:14
Если подпрограммы RDBYTE (FB98) или WRBYTE (FC46) сдвинуть хотя бы на один байт, то при старте директив I или O произойдёт улёт.
Перехват этих процедур тоже задан в конфиге, это можно убрать, но тогда придётся грузить так-же долго, как и на реальном РК. Автоматическое конвертирование .rk файлов в эмуляторе есть: нужно только при включении "воспроизведения" на тулбаре выбрать не .wav, а .rk. Правда там скорость фиксированная, подходящая для стандартного РК, так что для Z80 нужно будет поиграть с константой чтения.

barsik
11.01.2017, 16:24
я написал чёрно-белую оболочку, а потом и раскрасил её

Посмотрел скрин-шот Вашей цветной оболочки для ДОС. Цвет на РК86 очень впечатляет. Увы у меня никогда цвета на РК не было (т.к монитор был монохром). А атрибут инверсии (по журналу 'Радиолюбитель' 1993) использовал. Но в итоге отказался от использования атрибутов, в пользу более простого решения, которое не только более удобно для программиста даёт инверсию, но и даёт нормальную псевдографику, что не менее важно. У меня тоже есть оболочка для квазидиска в 64К (из 2-х 62256, подключенных через ППА), причём с рамочками и окнами. И всё достигнуто благодаря наличию альтернативного фонта (расход деталей - кусок проволоки 10 см). А атрибут инверсии RVV выгодно использовать для переключения фонтов. Трёх остальных атрибутов (HLGT,GPA1,GPA2) хватает на 8 цветов.

В Вашей оболочке желательно было бы изменить режим дисплея, точнее изменить число линий растра на символьную строку. Сделать 8 линий растра вместо 10. Это позволяет выводить вертикальные линии без разрывов. При этом, при числе строк в 25, экран на 20% плющится по вертикали, но зато тогда можно выводить 28 строк и они будут видны. Чтобы избавиться от 2-х пустых линий между строками, есть и другое решение. Можно прошить в ПЗУ вместо фонта 6*8, фонт 6*10, что надо было сделать еще в 1988.

Можно сделать вывод и в 32 строки, но тогда экранную область придётся перенести в иное место. Если оставить экран в вершине ОЗУ, то бОльший размер экрана затрёт служебные ячейки ROM-BIOS (в области 7600) и подпрограмами ПЗУ нельзя будет пользоваться. В этом случае придётся в программе иметь копию стандартных подпрограмм ПЗУ F800 в области ОЗУ. И это выгоднее, чем делать как делают графические РК- игры, которые переносят экран ниже служебных ячеек 7500 (оставляя 7500...7600 для стека). Выгоднее потому-что для оболочки тогда остается всё ОЗУ за вычетом большого экрана и размера стандартных п/п-мм ПЗУ (это менее 1 кб кода). А в случае переноса экрана ради сохранения ячеек 7600 и возможности вызывать стандартные п/п-мы ПЗУ, свободное ОЗУ оказывается на 2 кб меньше. Что сокращает буфер копирования, который и так при размере оболочки в 7 кб (10 кб в случае CP/M и RK-DOS) маленький, что сокращает скорость копирования.

Для меня таких проблем не было, т.к на РК86 я всегда имел самую разумную доработку РК - дополнительное ОЗУ в области 8400...BFFF, т.е 15 кб. В котором прокачивались две страницы доп.ОЗУ по 15К (это ОЗУ просто открывается при РУ5-тых, а при РУ3-тьих ставится 1 корпус 62256). Без этого нельзя иметь ни пригодную к использованию CP/M, ни РК-ДОС с размером более 4К. Поэтому, если надо расширить экран в НОРТОН-е, то его выгоднее перенести в верхнее ОЗУ, где экран не мешает ни служебным ячейкам и не сокращает ОЗУ для буферов НОРТОНА.

Извиняюсь, что чуть не по теме, но хочу рассказать о моём представлении идеальной архитектуры для РК86, реализуемой на базовой плате за 1.5 часа работы паяльником (у меня почти всё это на плате уже давно реализовано)

Планирую иметь на своём РК86 Z80 и ОЗУ 94/124К следующим образом. Две пол-банки по 32К в адресах 0...7FFF на РУ5-тых и еще 30К на 62256 в окне 8400...BFFF. Но надеюсь, что мой РК86 потянет целых 2 штуки 62256 (или W24257) напаянные в 2 этажа. В РК86 всякая доп.нагрузка шины чревата большими проблемами с надёжностью. Но т.к дисковода у меня уже нет (все сдохли), то и РК-КНГМД подключать не надо, за счёт чего я поставлю 62256 (она уже ранее стояла на моей плате РК86 и панелька 28-ног распаяна).

Отчего я и надеюсь, что мой РК без КНГМД потянет на шине ещё две 62256. Конечно, при наличии буферов для РУ5-тых проблемы с перегрузкой шины отпали бы. Но увы, пока не нашлось ни одного крутого аппаратчика, который бы поставил в РК86 буфер для ОЗУ. Что собственно говоря должны были сделать сами авторы РК86, если были они не увлекались "фатальной минимизацией". Две штучки 589АП16 не намного увеличили бы стоимость РК86.

Цельно-полубанковая коммутация тоже удобна, т.к тогда программа работающая во второй пол-банке может использовать все 32К (а при дальнейшем развитии этой идеи и 64К). Экран отображается из пол-банки 0, а программа работает в пол-банке 1.

Без наличия Z80 реально поддержать такую архитектуру программой в ПЗУ нельзя, т.к там просто нет места. Но при наличии Z80 в ПЗУ освобождается 150 байт, куда без труда "засунется" всё что надо. Теоретически РК86 допускает установку второго ПЗУ на F000, но практически это неразумно, т.к нагружает шину и фатально снижает надёжность.

Как я понял, про то почему не работает предложенный ROM-BIOS для Z80 пока информации нет.

Сообщите про Вашу клавиатуру. Вдруг Вы используете ПЛИС, которые привязаны к входным точкам в ПЗУ. Такой метод подключения IBM клавиатуры тоже возможен. Тогда ПЛИС контроллирует доступ в адреса 8000...83FF и дополнительно контроллирует входные точки внутри ПЗУ.


Адреса перехвата п/п-мм ввода и вывода на МГ-ленту задаются в конфиге

Нашёл в конфиге РК86 такие строчки



cas : tape-recorder {
biproc[FB98-FCA4]=rk
boproc[FC46-FCA4]=rk


Как задать начальный адрес п/п-мм RDBYTE и WRBYTE из этого ясно. Но зачем указан интервал. Как я понял в этом интервале в РК86 размещаются именно эти подпрограммы (и никакой другой код с другим назначением). Но ведь указанные области перекрываются. Если перехватывать интервал, то как Вы отличаете когда ввод, а когда вывод? Я в подобном случае перехватывал только вход, а выход из процедуры (чтобы закрыть файл) делал по входу PUSK_VG (0FBCEH - это куда делается JMP из входной точки F82D).

То есть, если я делаю ROM-BIOS для Z80, то чтобы можно было его проверить в эмуляторе, я обязан полностью повторить код из ПЗУ РК86 (хотя теперь могу размещать RDBYTE и WRBYTE в любых местах ПЗУ).

Но что произойдёт, если мне надо (из экономии для JR-команд) вставить в этот интервал другую подпрограмму. Что, тогда по по входу в эту подпрограмму также произойдёт вылет в диалоговое окно выбора файла?

Интересно каким образом будет читаться звуковой WAV-файл (пусть и медленно), если я уберу эту строчку из конфига? Вероятно, тогда отлавливаются все чтения порта C (где бит магнитофона, а также биты отдельных кнопок УС, СС, РУСЛАТ), но как вы узнаёте, что читается МГ, а не спец.кнопки клавиатуры?


Автоматическое конвертирование .rk файлов в эмуляторе есть: нужно только при включении "воспроизведения" на тулбаре выбрать не .wav, а .rk.

Про возмоэность грузить реальные звуковые файлы *.WAV и даже DAT-файлы в формате файлы *.rk (это те, что почти GAM-формат Пыхонина, но без первого байта E6) я даже и не знал, т.к никакого ДОС-текста по эмулятору B2M до сих пор нет.

Я понял, что как-то эмулируется чтение с МГ (иначе как бы программы попадали в ОЗУ в бездисководном варианте), и попробовал по директиве I грузить GAM-файлы. И это получилось. Я и решил, что эмулятор поддерживает GAM-формат.

У меня есть записи программ РК86, СПЕЦИАЛИСТА и ОРИОНА в WAV-формате с частотой дискретизации 44 КГЦ. Могу ли я их загрузить в соответствующие эмуляторы B2M?

Vladimir_S
11.01.2017, 16:41
Мой РК собран в корпусе Апогея м соответственно клава у него родная. Я схему так до сих пор и не нарисовал, только начал. Но некоторые доработки там уже есть, так что предварительный вариант могу выложить.

b2m
11.01.2017, 17:08
Как задать начальный адрес п/п-мм RDBYTE и WRBYTE из этого ясно. Но зачем указан интервал.
Изначально планировалось, что будет указываться начало и конец процедуры, т.е. второе число - адрес команды RET. Но на практике оказалось, что нужно не только вернуться из процедуры, но иногда и установить флаги. Так что можно считать, что второе число - это просто адрес, куда произойдёт переход после перехвата. Сигнатура после знака "равно" означает, для какого компьютера предназначен перехват, т.к. могут использоваться разные входные и выходные регистры (как правило, либо А, либо С, на входе А может содержать параметр для поиска синхробайта).

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


как Вы отличаете когда ввод, а когда вывод?
biproc - ввод байта, boproc - вывод байта. Есть ещё tproc для пропуска пилот-тона, iproc и oproc для перехвата ввода и вывода блока (сначала был именно такой перехват).


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


вставить в этот интервал другую подпрограмму
Просто изменить адреса в конфиге. Либо вообще удалить эти две строки.

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

Есть ещё контроль байтов по указанным адресам. Это когда БИОС выключается и на его месте оказывается ОЗУ или другая страница БИОСа. Пример можно подсмотреть в конфиге Вектора: строка, где .check="проверяемые байты".

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

Вообще, если я хочу поэкспериментировать с конфигом, я просто копирую его под другим именем. Он также появится в списке при запуске эмулятора.

barsik
11.01.2017, 17:57
Вообще, если я хочу поэкспериментировать с конфигом, я просто копирую его под другим именем. Он также появится в списке при запуске эмулятора

Это-то как раз сразу ясно. Я тоже так делал, позаменяв в конфигах слово 'K580wm80a' на 'Z80' и слово 'BIOS.ROM' на 'ZBIOS.ROM' и записав результат в другой файл.


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

Спасибо за разъяснение. Меня ввело в заблуждение тире, что указывает на интервал адресов, а на самом деле логичнее иметь там запятую.

Не нашёл в списке конфигов варианта РК86 с РК-КНГМД, а ведь это основной вариант. Это варианты с ORDOS и ROM-диском - экзотические. А вариант с РК-КНГМД - основной, стандартный и всемирно распространённый вариант использования РК86. Почему-же он не поддерживается, тогда как экзотические варианты поддерживаются? А ведь эмуляция программного КНГМД намного проще, чем эмуляция БИС ВГ93. Да и на этом форуме все фанаты РК86 давно обзавелись РК-КНГМД.

Что Вы можете сообщить народу насчёт эмуляции РК-КНГМД и эмуляции ПЗУ в 4 Кб по адресу E000 в Вашем эмуляторе B2M? Нельзя ли это ПЗУ ввести без модификаций EMU.EXE, лишь за счёт изменения конфиг-файла? Если бы эмуляция РК-КНГМД была, то на ней можно было бы проверить версию РК-ДОС для Z80.

Кроме того, нельзя ли простой модификацией конфига ввести в эмулятор B2M ОЗУ по адресу 8400...BFFF. Пусть хотя-бы некоммутируемый кусок ОЗУ (т.е нет двух страниц ОЗУ в окне). Это уже было бы очень удобно и к тому же подтолкнуло-бы владельцев на открытие на своих реальных РК86 ОЗУ по этим адресам (а те у кого ОЗУ не на РУ5, а на РУ3, поставили бы в свои РК86 статическое ОЗУ типа 62256, W24257 или W24512)?


Мой РК собран в корпусе Апогея м соответственно клава у него родная

Вопрос про клавиатуру был, чтобы убедиться, что у Вас не клавиатура на ПЛИС, что могло бы стать причиной несовместимости. А раз работает обычный ППА и опрос клавиатуры программный (не эмулированный), т.е опрос делает сам процессор, то это не может быть причиной несовместимости с Вашей ДОС.

Увидев схему я обнаружил там 8085 без клока. Непонятно зачем он, если есть Z80. 8085 это же тот же самый КР580, лишь под другим соусом. Я в курсе, что там есть 2 излишние команды RIM и SIM и один излишний выходной сигнал. Эти команды, если я верно помню, нужны для последовательного вывода. А нельзя ли применить этот выход как сигнальный, как применили выход INTE в КР580? С его помощью можно было бы быстро переключать полу-банки (например ОЗУ/ПЗУ).

Удобно наличие программно переключаемого клока 1.75, 3.5 и 7 МГЦ. Нет ли сбоев при программном переключении скорости? Для ускорения работы выгодно ВТ57 тактировать более высокой частотой.

Удивился, что ОЗУ на статике, а не на РУ5. Раз у Вас две 62256, то значит есть ОЗУ выше 8000 или же Вы используете две пол-банки по 32 Кб в адресах 0...7FFF. Интересно, как Вы используете это ОЗУ, в смысле какая архитектура его включения (понятно, что вопрос излишний, вероятно это уже описано на предыдущих страницах этой темы, но я пока не читал). С ОЗУ при архитектуре РК особо умного ничего не придумать, а вот огромное ПЗУ 64 Кб включаемое в окне 32К это, видимо, удобно. Интересно, это в нём Вы храните файлы в формате ORDOS? Я бы большое ПЗУ в РК86 стал прокачивать кусками по 8 Кб в окне E000...FFFF.

Я в начале 90-х тоже пытался поставить 62256 в РК86, чтобы избавиться от сбоев ОЗУ. Но у меня ничего не получилось. Сам РК работал, но изображения на экране не было. Пришлось выделять для экрана область 76D0...7FFF из РУ5-тых, а остальное ОЗУ делать из 62266. Но это тоже оказалось не лучшим решением, т.к полно игр, которые меняют адрес экранной области и оттого не работали.

b2m
11.01.2017, 23:17
Меня ввело в заблуждение тире, что указывает на интервал адресов, а на самом деле логичнее иметь там запятую.
Просто это у меня синтаксис конфига такой. После имени идёт либо другое имя через точку .field, либо индекс в квадратных скобках, либо диапазон индексов через тире.


А вариант с РК-КНГМД - основной, стандартный и всемирно распространённый вариант использования РК86. Почему-же он не поддерживается, тогда как экзотические варианты поддерживаются? А ведь эмуляция программного КНГМД намного проще, чем эмуляция БИС ВГ93.
Я пробовал добавить, но с наскоку как-то не вышло, и я оставил эту идею. Не всегда то, что проще аппаратно, легче реализовать в эмуляторе.


Что Вы можете сообщить народу насчёт эмуляции РК-КНГМД и эмуляции ПЗУ в 4 Кб по адресу E000 в Вашем эмуляторе B2M? Нельзя ли это ПЗУ ввести без модификаций EMU.EXE, лишь за счёт изменения конфиг-файла?
ПЗУ можно добавить в конфиге, а эмуляция НГМД потребует модификации эмулятора.


Кроме того, нельзя ли простой модификацией конфига ввести в эмулятор B2M ОЗУ по адресу 8400...BFFF.
Можно. В секции CPU обычно указано mem=mm, то есть за раскладку памяти отвечает секция mm (обычно типа MemMap). Вот в ней и задаётся карта памяти. Первый индекс - номер карты (для тех компьютеров, где карта памяти переключается), второй - диапазон адресов (младший байт не учитывается, т.е. нужно задавать в виде xx00-xxFF). То есть нужно добавить памяти (допустим она будет называться mem8400):

mem8400 : Memory {
size=3C00
}

а в секции mm добавим строку

map[0][8400-BFFF]=mem8400

Ну и надо будет убрать или скорректировать адреса устройств, которые попадают в эту область.

Vladimir_S
12.01.2017, 02:56
barsik, Пзу делится пополам потому, что при снятой перемычке П1 это Апогей, а при установленной РК86. И в РК86 в ПЗУ Е000-EFFF ДОС2.9, D000- DAFF FDOS. Ну и пока все. Насчет ОЗУ - D4 по схеме 0000-7FFF, а D5 в режиме Апогея 8000-ЕAFF, А в режиме РКшки 8400-9FFF и А400-BFFF.
Т.е. D4 и D5 расположены линейно друг за другом.

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


Нет ли сбоев при программном переключении скорости?
Пробовал пока только директивой М, но думаю проблем не возникнет. С чего бы вдруг сбои появятся?

barsik
12.01.2017, 04:10
Изменил конфиг-файл согласно информации от B2M и получил в эмуляторе B2M в области E000...EFFF ПЗУ с кодом RK-DOS, а в области 8400...BFFF - ОЗУ. Однако для этого мне пришлось удалить таймер ВИ53. Его перемещение на F000 с помощью строки

map[0][F000-F7FF]=tim.data

не помогло. Пришлось удалить целиком следующие строки


tim : K580wi53 {
clock[0].rate=1/1
clock[1].rate=1/1
clock[2]=tim.out[1]
~gate[0]=tim.out[2]
gate[1].value=1
gate[2].value=1
}


Если этого не сделать, то по адресу A002 байт не изменяется. Предположительно это не вина конфиг-файла, а дефект самого эмулятора. Так что ради ОЗУ в области 8400 пришлось отказаться от таймера ВИ53.

B2M, Вы предложили использовать строку

map[0][8400-BFFF]=mem8400

Но я по аналогии с другим участком ОЗУ использовал следующую строку

map[0][8400-BFFF]=mem8400[0000]

Предполагаю, что цифра в квадратных скобках указывает номер конфигурации, в котором этот кусок ОЗУ "виден" в адресном пространстве. В связи с этим домыслом появились следующие вопросы.

Как задать управляющий порт (адрес в ОЗУ) и управляющие биты в этом порту, которые задают конфигурацию памяти?

В частности, мне надо, чтобы бит D0 порта C дополнительного ППА D14 (который у меня не по адресу A000, т.к там ОЗУ) управлял страницей ОЗУ в 15 Кб, включаемой в окне 8400...BFFF.

Можно ли программно управлять фонтом в ПЗУ знакогенератора?

Мне надо чтобы бит D7 этого же порта C этого же второго ППА управлял тем какой фонт является текущим. При 0 - основной (стандартный) фонт РК86, а при 1 - альтернативный фонт с инверсией и нормальной псевдографикой. Предполагаю, что это тоже можно сделать без модификации самого эмулятора, лишь за счёт изменения конфиг-файла.

Не подскажете что-нибудь на этот счёт?



Нет ли сбоев при программном переключении скорости? С чего бы вдруг сбои появятся?

В первых платах ОРИОН 'СУПЕР-ТУРБО-2' (С.Караваев, Ташкент, 1993) тоже было программное переключение клока (2.5/5/10 МГЦ). И наблюдались сбои при переключениях. Сбои возможны если переключение происходит не по тому фронту сигналов из Z80. Наилучший результат даёт стробирование сигналом /MREQ.

Не понял почему в схеме Вашего компьютера используются сигналы /WR и /RD, а не сигналы /MEMR /MEMW (это /RD и /WR объединённые на ЛЛ1 с сигналом /MREQ). Из-за этого в программах, где для доступа к портам используются сигналы IN/OUT, будет портится ОЗУ и произойдёт улёт. А если использовать /MEMR и /MEMW, то команды с портами вреда не принесут (хотя например, клавиатура и РК-КНГМД работать не будут).

Насчёт двух половинок ПЗУ в области выше 8000 понял. Но если ПЗУ включается выше 8000, то это ПЗУ из-за совпадения с адресами РК-портов может использоваться лишь частично.

А отчего ОЗУ в области 8400...BFFF сделано из двух кусков, оставляя 1 кб для адресации доп.ППА A000? Ведь это ППА из всех программ РК86 использует лишь одна единственная программа - прошиватель УФ-ПЗУ, изменить адреса в которой - это дело нескольких минут труда. Гораздо важнее иметь 15 Кб сплошного ОЗУ. В частности, CP/М имеет размер 10 кб и на два куска она не делится (без особых коррекций в коде).

Раз у Вас есть ОЗУ 8400, то сюда было бы удобно странслировать проверочную версию RK-DOS для процессора Z80. Завтра выложу проверочную версию RK-DOS для Z80 на адреса 9000...9FFF.

Согласно информации B2M настроил конфиг-файл для предложенного мной ROM-BIOS с 110 свободными ячейками. И оказалось, что эмулятор B2M с этим ROM-BIOS и с магнитофоном работает.

Чтобы убедиться в этом надо изменить в конфиг-файле адреса входов в п/п-ммы RDBYTE и WRBYTE. Предположительно, этот ROM-BIOS вполне исправен.



.
cas : tape-recorder {
biproc[FB88-FC87]=rk
boproc[FC30-FC87]=rk
}

Vladimir_S
12.01.2017, 10:46
barsik, Что бы наглядно увидеть конфигурацию погляди на содержимое обеих К155РЕ3

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


А отчего ОЗУ в области 8400...BFFF сделано из двух кусков, оставляя 1 кб для адресации доп.ППА A000? Ведь это ППА из всех программ РК86 использует лишь одна единственная программа - прошиватель УФ-ПЗУ, изменить адреса в которой - это дело нескольких минут труда. Гораздо важнее иметь 15 Кб сплошного ОЗУ. В частности, CP/М имеет размер 10 кб и на два куска она не делится (без особых коррекций в коде).
У меня это вообще делается заменой РЕ3. Куда захочу, туда и перенесу. И самое удобное - перенести в область 8000-83FF.

b2m
12.01.2017, 15:32
Если этого не сделать, то по адресу A002 байт не изменяется. Предположительно это не вина конфиг-файла, а дефект самого эмулятора.
Вряд-ли. Скорее всего, ты просто скопировал строку map[0][A000-BFFF]=tim.data, чтобы вставить map[0][F000-F7FF]=tim.data в нужное место, а исходную строку удалить забыл. Если есть перекрывающиеся области для одной и той же карты, поведение эмулятора не определено.


Но я по аналогии с другим участком ОЗУ использовал следующую строку
map[0][8400-BFFF]=mem8400[0000]
Предполагаю, что цифра в квадратных скобках указывает номер конфигурации, в котором этот кусок ОЗУ "виден" в адресном пространстве. В связи с этим домыслом появились следующие вопросы.
Нет, в скобках опциональное смещение к области памяти, т.е. чтобы ссылаться на эту память не от начала, а со смещением. Например, файл шрифта symgen.bin грузится полностью, но используется часть со смещением 0C00h. Таким образом mem8400[0000] и просто mem8400 эквивалентны.


Как задать управляющий порт (адрес в ОЗУ) и управляющие биты в этом порту, которые задают конфигурацию памяти?
В частности, мне надо, чтобы бит D0 порта C дополнительного ППА D14 (который у меня не по адресу A000, т.к там ОЗУ) управлял страницей ОЗУ в 15 Кб, включаемой в окне 8400...BFFF.
К памяти можно адресоваться через окно (их может быть несколько, каждое со своим размером). Примерно так:

mem8400 : Memory {
size=8000
frame[0].size=4000
frame[0].page=D14.portC[0]
}

D14 : K580ww55 {
}

...
map[0][8400-BFFF]=mem8400.frame[0]
map[0][F000-F7FF]=D14.data
...

Размер страницы я тут увеличил до 4000h, но это не принципиально. Дополнительная ВВ55 подключена к области F000-F7FF.


Можно ли программно управлять фонтом в ПЗУ знакогенератора?
Можно. Для этого память, где расположен шрифт, нужно подключить тоже через MemMap. Пример есть в конфиге Апогея.

Vladimir_S
13.01.2017, 10:42
Перетащил интерфейс пользователя, 580ВИ53, порт на ТМ9 в адреса 8000-83FF. Все работает, и 8400-ВFFF пишет, читает. Но монитор тоже править нужно - с адреса F879 в ячейку А002 пишется FF и еще нужно править директиву R.

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

Из за одного символа в первой половине знакогенератора нужно перезалить из РК в Апогей.

barsik
14.01.2017, 00:33
Разобрался почему ячейка A002 портилась. Ни конфиг-файл для эмулятора B2M, ни сам эмулятор B2M не виноваты. А виноват базовый ROM-BIOS РК86. В нем по WARM BOOT (F86C) зачем-то в порт C клавиатуры кидается 0 (хотя надо одновременно кидать 0 во флаг РУСЛАТ), а также, что вообще ошибка, в порт С доп.ППА (A002) кидается байт FF. Это вероятно, хотели инициализировать принтер, подключенный к доп ППА и погасить светодиод РУСЛАТ (хотя глупо его гасить, если флаг РУСЛАТ не 0).

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

Оптимизировал до конца ROM-BIOS РК86 для Z80. Удалось выжать только 134 свободные ячейки, что составляет 6% от всего объёма ПЗУ. Столько процентов даёт в программах замена на команды Z80. Даже при переделке RAM-монитора, при условии сохранения функционала, больше выжать байтов не удастся, т.к RAM-монитор написан очень экономно. Я могу освободить еще ~20-30 байтов, если выбросить бесполезные директивы (типа X) и зачатки отладчика в директиве G.

Специально, сохранены адреса вх.точек RDBYTE, WRBYTE и точки возврата из этих п/программ (BAK). Однако, т.к п/п-мма WRBYTE стала на 7 байтов короче, то глупо только ради того, чтобы не менять одну цифру в конфиг-файле, впустую терять 7 байтов ПЗУ. Поэтому я ввёл флаг B2M. Если этот флаг не 0, то 7 байтов теряются впустую, только ради того, чтобы не изменять конфиг-файл. При трансляции для прошивки в ПЗУ этот флаг надо поставить 0 (а для эмулятора тогда вместо адреса (возврата из TAPE подпрограмм) FCA4 поставить число FC9D).

Для прошивки в ПЗУ E000...EFFF, а также для использования в эмуляторе B2M, странслировал КР580-отладчик ОРИОНА на адрес E000. В качестве рабочих ячеек задал адреса в области 8400. Чтобы это использовать в эмуляторе B2M, надо использовать прилагаемый конфиг-файл (подробности в исходнике отладчика). Отладчик для Z80 в 4K не влезает, но встроенный в монитор-РК мини-дизассемблер (есть 2 версии для КР580 и для Z80), можно сделать.

В базовом конфиг-файле для РК86 почему-то по адресу A000 задаётся таймер ВИ53, а доп.ППА вообще нет. Разумно перенести таймер в иное место например на F000...F7FF, хотя это и лишает возможности иметь здесь ПЗУ. Впрочем, это потеря только для эмулятора, в реальном РК86 никто второе ПЗУ на F000 на ставит. Зачем нагружать шину, лучше с'экономить ресурс по нагрузке шины для более актуальных внешних устройств.

Если кто-то будет что-то менять и перетранслировать ROM-BIOS РК86 следите, чтобы адреса @RDBYTE, @WRBYTE и @BAK были такими же, как в базовом ПЗУ РК86 (это не важно для реального РК86, но важно для эмулятора). Эти адреса в исходнике специально имеют первой буквой символ '@', чтобы в списке меток они выводились первыми. Если при трансляции в результате Ваших коррекций будет сообщение, что ячейки сдвинуты, то чтобы использовать такой ROM-BIOS в эмуляторе B2M, надо посмотреть PRN-файл и переписать эти адреса, чтобы потом подставить их в конфиг-файл эмулятора B2M.

Могу также странслировать версию ROM-BIOS Z80 для РК с клавиатурой MS7007 (такой драйвер, дизассемблированный 25 лет назад, тоже сохранился). Есть также версия ROM-BIOS в котором прошиты два драйвера клавиатур - обычный драйвер матричной клавиатуры, так и драйвер аппаратной клавиатуры (промышленной типа 15ВВВ-97, КОНСУЛ или клавиатуры от ИРИШИ).

Теперь осталось решить, как использовать освободившиеся 134 ячейки ПЗУ РФ2. Во-первых надо, как в ОРИОНЕ, встроить две подпрограммы для работы с излишним ОЗУ (F836/39). Если излишнего ОЗУ пока нет, то надо встроить просто векторизованные входы, заглушенные по сбросу. Можно вставить поддержку таймера ВИ53 (типа подпрограммы для проигрывания мелодии, как в ИРИШЕ) или встроить загрузчик с какого-либо устройства внешней памяти.


Перетащил интерфейс пользователя, 580ВИ53, порт на ТМ9 в адреса 8000-83FF

Какие у Вас адреса для доп.ППА, ВИ53 и регистра режима? У меня при КР580 стоит ИД7 выбираемая чип-селектом 8000...83FF. Она разбивает адресацию в 1 кб на участки по 128 байт (или 80H). С 15,14,12,10 и 7 выводов ИД7 идут диоды на резистор привязки (к +5В) 1 кОм. Так формируется чип-селект для ППА клавиатуры. Благодаря этому в ППА клавиатуры попадают все команды КР580, в том числе и команды IN/OUT (они попадают в адреса 8181, 8282, 8383, для чего и нужны диоды, чтобы объединить все участки относящиеся к адресации KBD). И остаются ещё 3 свободных чип-селекта ИД7 (ноги 13, 11 и 9), адресующие области 8100...817F, 8200...827F, 8300...837F. Это и позволяет иметь 3 внешних устройства, не теряя совместимости и не затрачивая адресное пространство в области F000...F7FF, которое единственное остаётся в базовом РК свободно для расширений.

b2m
14.01.2017, 00:35
Отладчик для Z80 в 4K не влезает
А чем не устраивает отладчик самого эмулятора? Всё равно разработку проще в эмуляторе делать.

barsik
14.01.2017, 01:43
А чем не устраивает отладчик самого эмулятора? Всё равно разработку проще в эмуляторе делать

Без сомнения в эмуляторе делать отладку намного удобнее, чем в реале. Наверно отладчик в эмуляторе B2M хороший. Но у меня в эмуляторе РК на PC встроена загрузка отладчика ИРИШИ, т.к резидентный отладчик в кодах Z80, а не КР580 (хотя эмуляция КР580). Почему не иметь, если это не стоит никаких затрат труда? В моих эмуляторах тоже есть отладчики (даже в эмуляторе РК на ОРИОНЕ), хотя и не экранные. А т.к РК-ДОС в эмуляторе B2M нет, а ПЗУ для её установки есть, то что-же иное, кроме отладчика, разумно запихать в это ПЗУ?

Кстати, в отладчике эмулятора B2M нет встроенного миниассемблера, а мнемоники соответствуют процессору заданному конфигом. К тому же иногда иметь миниассемблер удобно. А если надо отлаживать что-то на КР580, тому кто ненавидит мнемоники Z80 (такие странные люди существуют)? А вообще, вероятно, для РК86 ничего лучше экранного отладчика 'DBG' С.В.Дрогайвера нет. Я попозже перетранслирую его для области 8400...BFFF. В моих эмуляторах РК он не работает, т.к меняет режимы ВГ75, а в эмуляторе B2M он работает.

Кстати, так и не разобрался пока как сделать в эмуляторе 2 фонта, переключаемых битом D7 доп.ППА. В конфиге АПОГЕЯ нашёл строки про переключения фонта (по-видимому выходом INTE).

fntmap : MemMap {
map[0][000-3FF]=font[2000]
map[1][000-3FF]=font[2400]
page=cpu.int
}

Но не понял, что за цифры (якобы смещения где-то) 2000 и 2400. И в случае, если это ПЗУ знаконенератора типа РФ2, то смещения д.быть 0000 и 0400? И не понятно что писать после символа '=' в строчке 'page='. И ведь как-то надо задать адрес регистра (порт с доп.ППА) и номер бита.

Однако сделать в окне 8400...BFFF две страницы ОЗУ из верхней памяти 565РУ5 (то что выше 8000) удалось без проблем. Для этого в конфиг-файле для РК86 надо сделать следующее:

В секции 'CPU' надо вставить строки

mem8400 : Memory {
size=8000
frame[0].size=3C00
frame[0].page=D14.portC[0]
}

D14 : K580ww55 {
}

А в секции 'mm'

map[0][8400-BFFF]=mem8400.frame[0]
map[1][C400-FFFF]=mem8400.frame[1]
map[0][F100-F1FF]=D14.data
map[0][F200-F2FF]=tim.data

Здесь порт доп.ППА перенесён на F100 (т.к размещение доп.устройств в области 8000...83FF считаю неудачным, - так можно делать для себя, но это пагубно для тех, у кого базовая архитектура, т.к у них будет попадание в ППА клавиатуры). Как видите таймер ВИ53 размещается на F200 (а в том конфиге, что на сайте B2M он был на A000, что может быть правильным для АПОГЕЯ или других, но неверно для РК86). С таким конфигом ОЗУ в окне 8400 коммутируется, но смущает то, что у всех других областей в секции 'mm' после слова 'map' стоит индекс 0. Не значит ли это, что при карте памяти 1, эти области станут вообще недоступны? Не надо ли строки относящиеся к другим областям продублировать с индекстом 1?

Непонятна строка

frame[0].page=D14.portC[0]

Точнее не ясны цифры в квадратных скобках. Насчет 'frame[0]' - это вообще полный мрак, а вот про 'portC[0]' предположительно это бит, который управляет конфигурацией (в данном случае тем, какое ОЗУ включается в окно заданного размера с заданного адреса). Но непонятно как быть если управляется не одним битом, а 4-мя битами, позволяя включать в окне любой кусок из 256 Кб. Чтобы отлаживать РК-ДОС или любую другую ДОС для РК86 в эмуляторе нужно иметь, как минимум, столько ОЗУ.

Но само удобство организации в эмуляторе доп.памяти впечатляет. В моих эмуляторах, чтобы добавить что-то в архитектуре, надо несколько дней усердно модифицировать ассемблерный исходник и затем долго отлаживать. Эмулятор B2M очень удобен для того, чтобы опробовать в нём разные варианты архитектуры, с целью выбрать оптимальный вариант. В частности, вариант РУ5 + две 62256, где РУ5-тые используются как две пол-банки, а на 62256 организовано "верхнее" ОЗУ 8400. Есть и второй вариант расширения ОЗУ - это на 565РУ7.

Собираюсь "организовать" таким образом в эмуляторе B2M поддержку динамических ОЗУ РУ7, с целью иметь в самом РК86 электронный диск, т.к в моём реальном РК86 нет дисковода или других устройств массовой внешней памяти. И тем самым пользоваться РК могу только закачивая в него по линии из IBM PC по одному файлу. А так как обмен (без ВВ51 или другой аппаратуры, с расходом деталей лишь в провода) программный и оттого медленный (всего 100 байт в секунду), то оперативная закачка программ не годится. Наличие подключенного по стандартному програмному интерфейсу эл.диска позволит отлаживать ДОС и программы в эмуляторе для любого типа железа.

Однако при окне доступа в 15К, из каждых 16К впустую теряется 1К, т.е недоступно 14 Кб полезного объёма РУ7-мых. Таким образом максимальный эл.диск будет (256-32-16):16*15= 195 кб. Т.е для программ имеем 32 кб основного ОЗУ и 15 Кб верхнего ОЗУ, а дополнительно имеем 195 Кб электронного диска.

С целью экономии полезнее иметь окно доступа в 8 Кб, что избавляет от потерь. Однако для программ выгодно иметь как можно больше сплошного ОЗУ, т.е важно иметь окно максимального размера в 15К. Поэтому напрашивается более извращенная архитектура, когда есть ОЗУ 8400...BFFF, но коммутируемое окно (окно прокачки) ограничено областью в 8К. Тогда в области 8400...9FFF расположено некоммутируемое ОЗУ, а в окне прокачки A000...BFFF можно включить любой кусок в 8К из 256К. Увы, это требует 5-ти разрядного регистра и для переключения требуется уже две КП11, что приводит к громоздкости схемы и делает её неприемлемой для доработки на базовом РК86 (т.е проводками).

Вариант расширения ОЗУ не играет роли, т.к важно лишь, чтобы в окне 8400...BFFF было 15 кб верхнего ОЗУ. А всё остальное ОЗУ - факультативное (необязательное) и доступ к нему должен происходить только стандартными подпрограммами ПЗУ F800, также как это сделано в ОРИОНЕ. Тогда схема и тип носителя доп.ОЗУ не играет роли. Это может быть как любой тип памяти в самом компьютере, так и внешняя плата эл.диска (256К...1 Мб). Тогда любая ДОС может иметь эл.диск и будет совместима с любым РК86 имеющим количество ОЗУ достаточное для организации эл.диска, внешнюю карту флэш-памяти или внешнюю плату эл.диска (на статических ОЗУ или на РУ7).

Поэтому введя в эмулятор любым способом доп.ОЗУ размером достаточным для эл.диска, можно перетранслировать для РК86 кучу разных ДОС и получить доступ к новым программам. Причём, эти ДОС будут заведомо работать на любом железе РК86 (т.к, как указано выше ДОС работают с эл.диском только подпрограммами F836/39). Всё, что требуется от пользователя это ввести эти две подпрограммы в свои ПЗУ F800, которые работают с конкретным железом пользователя.

А почему в эмуляторе для КР580 не происходит останова, если встретилась команда Z80?

Отсюда и следующий вопрос. Как Вы обрабатываете недокумментированные команды КР580?

Обслуживается ли матричная клавиатура в смысле обнаружения РК-программой одновременного нажатия двух клавиш (не в плане спец.клавиша + символьная клавиша, а две символьных клавиши нажатые одновременно)?

В моих эмуляторах программа Z80 может использовать функции эмулятора, которые вызываются командой INIR (в рег.А номер функции). В частности Z80-программа может читать/писать файлы с винчестера, считывать каталог, переименовывать и т.п. (может даже низкоуровнево работать с секторами на винчестре, вплоть до формата, печатать на принтере и даже читать с линии через порт принтера).

Это позволяло написать в кодах Z80 оболочку, что делает обмен файлами между ДОС в эмуляторе и винчестером PC. В моём эмуляторе РК86 на PC есть 2 подпрограммы для организации ДОС - читать/писать сектор 512 байт с внешнего устройства (это или VDISK 512K из ОЗУ IBM PC или дисковый файл на винчестере). Благодаря этому, код эмулятора при использовании разных ДОС и разного железа менять не требуется. Поэтому можно иметь любую ДОС, и эмуляция "железа" при этом не требуется. Поэтому мне не требовалось эмулировать ни ВГ93, ни РК-КНГМД.

На адаптацию РК-ДОС, чтобы было можно отлаживать программы для неё, у меня ушло всего 10 минут, столько же времени уходит на адаптацию какой-либо версии CP/M. А Вам с навязчивой идеей, что "железо" надо эмулировать, надо тратить месяцы труда и трахаться с отладкой в реальном времени. Встройте в Ваш эмулятор интерфейс, хотя-бы чтение/запись сектора, и Вам уже никогда не придётся в будущем трахаться, чтобы проэмулировать какой-либо привод (контроллер дисковода, винчестера или флэш-карты). Тогда Вам уже не придётся адаптировать чужие ДОС, т.к это смогут делать сами пользователи Вашего эмулятора. А сейчас, для поддержки любого нового железа (привода) надо просить Вас что-то изменить в эмуляторе.

Vladimir_S
14.01.2017, 05:14
Разобрался почему ячейка A002 портилась. Ни конфиг-файл для эмулятора B2M, ни сам эмулятор B2M не виноваты. А виноват базовый ROM-BIOS РК86. В нем по WARM BOOT (F86C) зачем-то в порт C клавиатуры кидается 0 (хотя надо одновременно кидать 0 во флаг РУСЛАТ), а также, что вообще ошибка, в порт С доп.ППА (A002) кидается байт FF. Это вероятно, хотели инициализировать принтер, подключенный к доп ППА и погасить светодиод РУСЛАТ (хотя глупо его гасить, если флаг РУСЛАТ не 0).

Ошибка это потому, что пока доп.ППА не инициализирован (т.е в его РУС не записан управляющий байт) писать что-то в порты ППА бессмысленно.
Принтер здесь ни причем и ошибки никакой нет. Да, если ППА интерфейса пользователя не инициализираван, то писать что то в порт С не имеет смысла. Но авторы предполагали, что при выполнении директивы R СЕ и ОЕ ПЗУ подключены к порту С. И тогда после выполнения директивы R запись FF в порт С очень даже логична.

Какие у Вас адреса для доп.ППА, ВИ53 и регистра режима?
У ВИ53 - 801С-801F, У ДОС на SRAM (1Мб) - 8018-801В, запись в ТМ9 - 8014-8017 , FDOS - 8010-8013.

barsik
14.01.2017, 16:58
Принтер здесь ни причем и ошибки никакой нет

Это ошибка. Хотя-бы потому, что если Вы правы, то директива R, должна сама по окончанию загрузки делать отключение чип-селектов ПЗУ ROM-диска, если это действительно надо.

Ну а зачем, кстати, это надо? В ОРИОНЕ ROM-диск активен всегда, чип-селект на нуле, никто не жаловался. А доп.ППА это общее устройство и оно может использоваться по любому. И в частности, для выбора режимов железа. Поэтому, кидать в доп.ППА какие-то байты по WARM BOOT это явная ошибка. А в данном случае, я думаю, что речь идёт именно о принтере, не о ROM-диске, которому это просто не надо.

Кстати, в ПЗУ РК86 есть ещё одна, более серъёзная ошибка. Если однобуквенная команда не найдена, то делается переход на F000. Не знаю, что там стояло у авторов РК86, но у остальных многих тысяч пользователей на F000 ничего не было. И это приводит к улёту программы. Поэтому, еще в 1988 я эту ошибку исправил, переадресовав переход на вход ERROR. Для доступа к XT-ROM на F000 есть директива U, а для расширения директив должен быть вектор (как в ленинградском мониторе СПЕЦИАЛИСТА и М3 ОРИОНА)

Посмотрел Вашу адресацию в области 8000...83FF. Такая адресация несовместима с другими - базовыми РК86. У меня в реальном РК86 тоже одно время использовалась адресация в области 8000...83FF, причём у меня это было сделано совместимо с программами.

Когда это делается только для себя, то можно использовать область 8000...83FF для подключения В/У. Это не вызывает проблем на одном компьютере. Но в данном случае, мы на форуме, и тут надо учитывать интересы других пользователей РК, т.е проблемы совместимости с базовым РК86. Совместимость - это аксиома.

Кстати, Ваша схема установки Z80 неудобна и для Вас. Если бы Вы поставили на старшую шину адреса две КП11, с целью вывода при командах IN/OUT на адреса A8...A15 младших адресов по схеме ОРИОН-СЕРВИС, то Вам не пришлось бы переделывать много игр и РК-ДОС работала бы без переделок (в RK-DOS всё сделано на командах IN/OUT). Когда я буду ставить Z80 именно так и сделаю, т.к совместимость мне важна.

Из альтруизма разумно ставить В/У в области F000...F7FF, а не в области клавиатуры. Иначе некоторые Ваши программы не смогут работать на базовом РК86. Программы от базового РК86 не использующие IN/OUT, Вам годятся, а вот Ваши программы для базового РК придётся модифицировать. Я понимаю, что это Ваш личный проект, а не общественный, как в других темах, где желаемую архитектуру обсуждают (точнее хотели обсудить, но не стали, т.к заинтересованных в новых платах не нашлось).

Но Вы ведь для этого публикуете сообщения в форуме, чтобы что-то можно было обсуждать с целью получить наилучший результат. Например, Вы поддержите таймер в области 8000...83FF, но все остальные пользователи РК имеют другой адрес (ранее был Ax00).

Я предлагаю, например, адреса следующие: РК-КНГМД - F000, доп.ППА - F100, а таймер ВИ53 - F200, уникальные для каждой конкретной РК86 регистры - это F700. Мне без разницы, где ставить В/У, но вот совместимость мне важна. Предлагаю обсудить адресацию В/У. У Вас ведь всё-равно уже есть В/У в области F000, иначе как Вы подключаете РК-КНГМД? Зачем тратить два дешифратора (на 8000 и F000), если можно обойтись одним.

Область F000 всё-равно занята для РК-КНГМД и ПЗУ сюда уже никто ставить не будет. Если уж надо доп.ПЗУ на нужды ROM-BIOS, то удобна коммутация двух банок ПЗУ в окне F800...FFFF. У меня есть несколько РФ2 с напаянными на них панельками в 24 ноги. И я их повсюду ставлю вместо РФ2, получая 4К ПЗУ вместо двух. Это очень полезно и главное не требует коррекций на платах, что важно. Для Z80 расширение ПЗУ не актуально, т.к при переделке кода в ПЗУ освобождается 130 ячеек, куда вполне влезают нужные расширения. Впрочем, и в ROM-BIOS для КР580 я уже давно встроил подпрограммы F836/39, причём не сами подпрограммы, а векторизованные входы, поэтому можно загружать драйвер любого эл.диска любой конструкции.

Кстати, вот реальный довод в пользу установки Z80. При Z80 я собираюсь эмулировать клавиатуру РК86 на клавиатуре IBM PC по прерываниям. Для этого при обращениях процессора на 8000...83FF будет происходить прерывание NMI (с автовключением по адресу 0...7FF ПЗУ F800) и программная эмуляция матричной клавиатуры. C КР580 это не сделать, т.к NMI нет, а обычные прерывания уже истрачены на звук.

В выложенной ранее версии ROM-BIOS для Z80 неверно работал разделитель пробел, поэтому я заменил ранее выложенный RAR-файл исправленным.

b2m
15.01.2017, 00:46
Но не понял, что за цифры (якобы смещения где-то) 2000 и 2400.
Это смещения шрифтов в файле symgen.bin (я его взял из эмулятора Пыхонина). В этом файле несколько шрифтов, в том числе и для Партнёра и др. компьютеров.


map[1][C400-FFFF]=mem8400.frame[1]
Эта строчка явно лишняя. Во-первых, карту памяти номер 1 (т.е. map[1]) ты явно не задумывал. Да и второй вариант доступа через окно тоже (mem8400.frame[1]). frame[1] имеет смысл, если нужно адресоваться к памяти через окно другого размера, или этих окон несколько, т.е. номер текущей страницы задаётся для каждого окна.



Непонятна строка

frame[0].page=D14.portC[0]
Ну что тут непонятного: номер текущей страницы окна 0 будет равен значению бита 0 порта С устройства D14 (описанного в когфиге как ВВ55).


Насчет 'frame[0]' - это вообще полный мрак
Внутри эмулятора это объект, который предоставляет доступ к памяти через окно. Таких объектов может быть несколько, поэтому есть индекс. У этого объекта есть размер окна size и номер текущей страницы page. А само имя frame[0] предоставляет интерфейс к памяти, т.е. содержимому памяти в окне. Такой объект есть только у устройства, описанного в конфиге как Memory.


Но непонятно как быть если управляется не одним битом, а 4-мя битами
Тогда я бы написал frame[0].page=D14.portC[0-3]


так и не разобрался пока как сделать в эмуляторе 2 фонта, переключаемых битом D7 доп.ППА
Рассмотрим, как задан фонт в Радио-86РК сейчас:


font : Memory {
rom="symgen.bin"
}

crt : K580wg75 {
dma=dma[2]
font=font[0C00]
hilight=crt.ggh
}

Здесь устройство crt это ВГ75, у него есть свойство font, которое связано с неким устройством font, при этом указано ещё и смещение 0C00. Устройство font описано как память (Memory), а свойством rom мы указываем, что это ПЗУ и содержимое нужно грузить из файла symgen.bin

Теперь мы хотим добавить свой переключаемый фонт. Допустим он будет в файле Radio/myfont.bin (пусть будет в подкаталоге Radio). Мы соеденим его через мультиплексор fntmap, и у нас есть ещё дополнительная ВВ55, которая в конфиге называется D14.


font : Memory {
rom="Radio/myfont.bin"
}

fntmap : MemMap {
map[0][000-3FF]=font[0000]
map[1][000-3FF]=font[0400]
page=D14.portC[7]
}

crt : K580wg75 {
dma=dma[2]
font=fntmap
hilight=crt.ggh
}

D14 : K580ww55 {
}

Свойство page у fntmap указывает, откуда брать номер текущей карты памяти. В каждой карте область 000-3FF связана со шрифтом с нужным смещением в файле. То есть, когда меняется значение бита 7 порта С микросхемы D14, то изменится и содержимое области памяти 000-3FF. А ВГ75 в данном случае именно из этой области и будет считывать данные шрифта.

Однако это устаревший способ. С момента появления объекта frame у Memory от мультиплексора MemMap можно отказаться:


font : Memory {
rom="Radio/myfont.bin"
frame[0].size=400
frame[0].page=D14.portC[7]
}

crt : K580wg75 {
dma=dma[2]
font=font.frame[0]
hilight=crt.ggh
}

D14 : K580ww55 {
}


Кстати, левая часть равенства, которое находится внутри секции (обозначенной фигурными скобками) всегда дополняется слева именем секции. То есть следующие две записи эквивалентны:


crt : K580wg75 {
font=font.frame[0]
}



crt : K580wg75 {
}
crt.font=font.frame[0]

Vladimir_S
15.01.2017, 01:57
А доп.ППА это общее устройство и оно может использоваться по любому.
Я когда в далеких восьмидесятых сделал программатор на РКшке, наверно с неделю по неопытности убил выискивая почему портится последняя программируемая ячейка. У меня программирующее напряжение включалось единицей.

barsik
15.01.2017, 14:13
Спасибо B2M. Отличный эмулятор. По предоставленной Вами информации удалось сделать в эмуляторе РК86 и два фонта и 256 кб ОЗУ, прокачиваемого в окне 8400...BFFF. Написал тест расширенного ОЗУ и это ОЗУ оказалось исправно. Интересно, какое это ОЗУ? Думаю, что это ОЗУ не из конвенциональной памяти (не ОЗУ XT, адресуемое до 640 кб), а ОЗУ защищённого режима, и поэтому можно без конца расширять это ОЗУ в эмуляторе РК86. Сейчас закончу писать и попробую сделать в эмуляторе РК86 512 кб, т.к чем больше ОЗУ, тем приятнее.

Однако "ложку дёгтя" добавил тот факт, что фонт всего-лишь 6*8, в то время, как на моём реальном РК86 фонт 8*10 и я привык, что никаких двух линий растра разделяющих строки нет. Ну, я понимаю, что для близости с реальным базовым РК86 надо было ввести эти две линии растра между строками. Но фонт-то зачем уродовать? Зрение-то у всех своё. С эстетической точки зрения лучше было бы применить более красивый фонт 8*8. Кроме того, реальный фонт от реального РК86 не годится, т.к реальный фонт инверсный, а у Вас в эмуляторе фонт неинверсный. Поэтому подставить реальный фонт нельзя, что создаёт лишние неудобства пользователю и к тому-же, "разлучает с реальностью". Поэтому не смог сразу использовать свой фонт с инверсией и псевдографикой. Придётся его вручную переделывать из матрицы 8*10 в матрицу 6*8.

Очень большое достижение, что Вы проэмулировали команды ВГ75. В своём эмуляторе, в своё время, я это делать не стал, т.к решил, что это слишком сложно. Однако, Вы не точно ВГ75 проэмулировали. Я использовал на РК86 монитор (ROM-BIOS), который отличался от базового двумя байтами в п/п-мме PUSK_VG, отчего курсор был не крошечной мигающей чёрточкой толщиной в 1 пиксель, а мигающим прямоугольником 6*8, что визуально намного приятнее. Если в моих исходниках поставить флаг ORIG=0, то будет такой курсор. Но на Вашем эмуляторе это не получается. Курсор получается не сплошной, а какой-то мусор.

Ну вот, теперь можно с удобством сделать для РК86 RK-DOS с поддержкой эл.диска и реального дисковода. Эл.диск - привод 'A:', а дисковод - привод 'B:'. Если ОЗУ для эл.диска нет, то дисковод становится приводом 'A:', а эл.диска нет. Хотя может быть и есть, но очень-очень маленький, размером в 15 кб из ОЗУ в области 8400...BFFF. В реале даже небольшой эл.диск ценен, т.к существенно облегчает копирование файлов на дискетах.

Однако, B2M не расслабляйтесь ещё. Ещё полно недоработок. Во-первых, в реальном РК86, то ОЗУ, что включается в окно 8400...BFFF при записи в порт управления F102 числа 0, это основное ОЗУ с адресов 400...3FFF. И соответственно, при числе 1 - будет отображён участок 4400...7FFF. А в эмуляторе отображается не основное ОЗУ, а какое-то другое ОЗУ, так, как будто мы для основного ОЗУ используем пол-банки РУ5-тых, а для верхнего ОЗУ имеем отдельную банку РУ7-мых. Реальный РК86 столько параллельных банок не потянет, т.к ОЗУ не имеет буферов, отчего возможна только одна банка динамических ОЗУ. Поэтому при числах 0 и 1 в окне 8400 отображается то же самое ОЗУ, что является в РК86 базовым ОЗУ 0...7FFF.

Не подскажете, как совместить основное ОЗУ и ОЗУ оконного диспетчера?

Кроме того, мне не удалось реализовать в архитектуре РК86 в эмуляторе цельно пол-банковую коммутацию ОЗУ. Это когда есть регистр F300 и занося в него порядковый номер пол-банки, во всём основном ОЗУ 0...7FFF включается ОЗУ нужной пол-банки. Это как в ОРИОНЕ, но коммутируется не 60К, а 32К и нет некоммутируемой области F000...F3FF (а зачем некоммутируемая область, если при нужде её легко про-имитировать, записав в обе пол-банки одинаковый код). Думаю, что для реализации такой полу-банковой архитектуры уже понадобится задействовать map[0,1,2,3...FF].

Прилагаю тот конфиг, с которым мне удалось получить два фонта в знакогенераторе и дополнительные 256К ОЗУ (кроме основных 32К) прокачиваемые в окне 8400...BFFF (управление портом С ППА по адресу F100). Здесь тип CPU стоит Z80, поэтому используйте совместимый с Z80 монитор (ROM-BIOS) или измените тип процессора в конфиге и соответственно имя ПЗУ F800 с ZBIOS.ROM на BIOS.ROM. Здесь вместо странного фонта знакогенератора SYMGEN.BIN используется файл 2KFONT.DAT, но вы можете подставить свой фонт от реального РК86 (даже всего 1 кб размером). Если Ваш фонт РК - оригинал, т.е инвертированный, то Вы увидите всё в инверсии (причём синхронизация не сорвётся, как в реальном РК86). Не забудьте убедиться, что в секции 'cas' адреса входов в подпрограммы RDBYTE, WRBYTE и адрес возврата из них (@BAK) соответствуют Вашему ПЗУ F800, иначе при директивах I и O будет завис. Чтобы не заботиться об этих адресах используйте тот монитор, что выложен в моём предыдущем посте (транслировать с ключом B2M=0 (тогда адрес выхода из TAPE-подпрограмм как раз и будет FC9D вместо базовых FCA4). Обратите внимание на первую строчку CPUclock=. Если Вам не хватает скорости 1.77 МГЦ, то можно сделать себе и побольше. А если игра работает слишком быстро (что как раз обычно и имеет место), то ставьте клок поменьше.


main.CPUClock=1777777Hz
main.Caption="Ðàäèî-86ÐÊ"

CPU : Z80 {
debug=cas
mem=mm
pc=F800
port.maptomem=1
}

mem1 : Memory {
size=8000
}

mem8400 : Memory {
size=40000
frame[0].size=3C00
frame[0].page=D14.portC[0-3]
}


font : Memory {
rom="Radio/2KFONT.DAT"
frame[0].size=400
frame[0].page=D14.portC[7]
}

bios : Memory {
rom="Radio\ZBIOS.ROM"
}

memE000 : Memory {
rom="Radio\IRISHA.ROM"
}

D14 : K580ww55 {
}

sys : K580ww55 {
portA=kbd.~mask
portB=kbd.~data
portC[0]=cas.record
portC[4]=cas.playback
portC[5-7]=kbd.~data2
}

tim : K580wi53 {
clock[0].rate=1/1
clock[1].rate=1/1
clock[2]=tim.out[1]
~gate[0]=tim.out[2]
gate[1].value=1
gate[2].value=1
}

crt : K580wg75 {
dma=dma[2]
font=font.frame[0]
hilight=crt.ggh
}

dma : K580wt57 {
mem=mem1
}

mm : MemMap {
map[0][0000-7FFF]=mem1[0000]
map[0][8000-83FF]=sys.data
map[0][C000-DFFF]=crt.data
map[0][E000-FFFF].wo=dma.data
map[0][E000-EFFF].ro=memE000[0000]
map[0][F100-F1FF]=D14.data
map[0][F200-F2FF]=tim.data
map[0][F800-FFFF].ro=bios[0000]
map[0][8400-BFFF]=mem8400.frame[0]
}

kbd : Keyboard {
layout="Radio\layout.kbd"
}

beep : beep {
input=cpu.int
input2=sys.portC[0]
input[0]=tim.out[0]
}

cas : tape-recorder {
biproc[FB98-FC9D]=rk
boproc[FC46-FC9D]=rk
}

b2m
15.01.2017, 17:12
Думаю, что это ОЗУ не из конвенциональной памяти (не ОЗУ XT, адресуемое до 640 кб), а ОЗУ защищённого режима
Под виндой нет такой границы - 640кб, и конвенциональной памяти тоже нет. Начиная с 64-х битных версий у процессора нет даже виртуального V86 режима (это который для эмуляции старого ДОСа, изначально работающего в real mode).


С эстетической точки зрения лучше было бы применить более красивый фонт 8*8
Например в конфиге Роботрона фонт 8х12. Достигается указанием fontwidth и fontheight. По-умолчанию используется 6x8, так что достаточно указать fontwidth.


реальный фонт от реального РК86 не годится, т.к реальный фонт инверсный
Эмулятор может инвертировать загружаемый ROM, нужно только писать не rom="...", а ~rom="..."


Однако, Вы не точно ВГ75 проэмулировали.
Да, вроде с курсором я не угадал. Сейчас уже трудно всё вспомнить, надо в исходник опять вникать.



Не подскажете, как совместить основное ОЗУ и ОЗУ оконного диспетчера?
Отказаться от дополнительной памяти mem8400, увеличить размер основной памяти mem1 и перенести туда frame[0], размер окна сделать 4000, ссылку на окно сделать со смещением: map[0][8400-BFFF]=mem1.frame[0][0400]


Кроме того, мне не удалось реализовать в архитектуре РК86 в эмуляторе цельно пол-банковую коммутацию ОЗУ. Это когда есть регистр F300 и занося в него порядковый номер пол-банки, во всём основном ОЗУ 0...7FFF включается ОЗУ нужной пол-банки.
Вот тут пригодится ещё одно окно: map[0][0000-7FFF]=mem1.frame[1], соответственно нужно будет задать размер frame[1].size=8000 и frame[1].page=...
То есть примерно так (не проверял, так что работу не гарантирую):

mem1 : Memory {
size=40000
frame[0].size=4000
frame[0].page=D14.portC[0-3]
frame[1].size=8000
}

mm : MemMap {
map[0][0000-7FFF]=mem1.frame[1]
map[0][8000-83FF]=sys.data
map[0][8400-BFFF]=mem1.frame[0][0400]
map[0][C000-DFFF]=crt.data
map[0][E000-EFFF].wo=dma.data
map[0][E000-EFFF].ro=memE000[0000]
map[0][F100-F1FF]=D14.data
map[0][F200-F2FF]=tim.data
map[0][F300-F3FF]=mem1.frame[1].page
map[0][F800-FFFF].wo=dma.data
map[0][F800-FFFF].ro=bios[0000]
}


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


port.maptomem=1
Забыл сказать, это фича только ВМ80, для процессора Z80 эту строчку можно удалить.

barsik
16.01.2017, 14:59
port.maptomem=1

Забыл сказать, это свойство только ВМ80, для процессора Z80 эту строчку можно удалить.

Удалил эту строчку в конфигах для Z80.

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

Хотя на реальном компьютере с Z80, если установлены две КП11 подменяющие адреса A8...A15 на адреса A0...A7 при работе команд IN/OUT (как сделано в схеме установки Z80 в ОРИОН от МП ОРИОН-СЕРВИС), то команды попадают в ОЗУ правильно, т.е аналогично процессору КР580.

Если при Z80 действительно нельзя задавать такую строчку, то тем самым, на Вашем эмуляторе не смогут работать программы с командами IN/OUT, рассчитанными на КР580 без дешифратора В/У. Тем самым эмулятор B2M пока не может эмулировать схему установки Z80 с двумя КП11-тыми.

Пользуясь информацией предоставленной B2M, без хлопот получил совмещение основного ОЗУ и ОЗУ в коммутируемом окне расширения памяти 8400...BFFF, т.е теперь эмулятор работает как реальный РК86 с одной банкой динамического ОЗУ. А также "поставил" в эмуляторе РК86 1 мб памяти, хотя мог бы "поставить" и 4 мб памяти (это максимум, чем можно управлять восемью битами при данном окне доступа). В реальном РК86 1 мб получается, если вместо 565 РУ3/РУ5/РУ7 поставить SIMMS 1 мб от 386-тых. У меня есть такие SIMMS от 386-той, поэтому их и думаю применить.

Эл.диск 1 Мб из ОЗУ на скоростях РК очень долго форматируется, что меня раздражает. Поэтому в моём эмуляторе специально для такого случая есть команда TURBO, по которой скорость эмуляции временно устанавливается максимально возможной, отчего форматирование VDISK-а происходит не на скорости 2.5 МГЦ ОРИОНА, а на скорости 100 МГЦ. А по команде НЕТУРБО скорость возвращается к той, что была в момент прогона команды ТУРБО.

Но с попыткой реализовать в архитектуре РК86 в эмуляторе цельно пол-банковую коммутацию ОЗУ в окне 0...7FFF потерпел неудачу.

Во-первых, не понял, как ввести обыкновенный регистр ИР22 по адресу F300, чтобы управлять переключениями полу-банок. Поэтому пришлось "ввести" третий ППА по адресу F300 и использовать его порт А, как регистр. Удобно, что в эмуляторе БИС ППА не надо инициализировать, они работают как порты ввода и вывода и без этого.

Написал тестовую программу для проверки цельно полу-банковой коммутации, которую загружаю в некоммутируемое ОЗУ в области 8400...BFFF. Банки похоже коммутируются, т.к по переключению полубанки изображение на экране исчезает (остается только мигающий курсор). В реальном РК86 изображение тоже будет исчезать при включении иной полубанки (не 0-вой), поэтому надо аппаратно обеспечить, чтобы DMA (сигналом HOLD) принудительно читал из полу-банки 0.

Впрочем, если переключать полу-банки кратковременно, что и имеет место при работе п/п-мм F836/39, то изображение целиком не погаснет, хотя яркость, думаю, упадёт и возможны мигания экрана. Или же надо ввести возможность читать кадровый бланк и переключать полу-банки только во время обратного хода строчной развёртки. Но увы, в РК86 кадрового бланка (т.е сигнала гашения на обратный ход луча) - просто нет, т.к он в РК организуется программно, а не аппаратно).

Видя, что картинка пропала, я перетранслировал ROM-BIOS так, чтобы экранная область оказалась в некоммутируемой области 8400...BFFF. И тут снова "облом"... Оказалось, что эмулятор никак не хочет работать с экраном выше 8000, хотя на рельном РК86 экран без проблем переносится путём перетрансляции ПЗУ (в начале 90-х я имел РК86 со сплошным ОЗУ в 60К для использования CP/M). Думаю, что надо как-то указать DMA, чтобы он читал из frame[0], что в моём конфиге это область 8400...BFFF.

А вообще-то при наличии памяти выше 8000 свойство переносить экран в верхнее ОЗУ очень полезно, т.к для программ освобождается ровно 32К, что позволяет загрузить больший исходный текст для редактора или ассемблера, которые сами загружены в верхнее ОЗУ. Не могди бы Вы указать способ как исправить мой конфиг, чтобы экранное ОЗУ в области 8400...BFFF тоже отображалось на экране.

Я не понял строки

map[0][F300-F3FF]=mem1.frame[1].page

в секции 'mm'. Ведь слева это адрес регистра управления (ИР22), который переключает полубанки. И значит справа должно стоять это устройство. По аналогии со строчкой

map[0][F100-F1FF]=D14.data

относящейся к управлению окном 8400...BFFF. Почему управление окном 0...7FFF иное, чем окном 8400...BFFF. Поэтому я понял, что это ошибка и исправил строчку так:

map[0][F300-F3FF]=XPPA.data

где XPPA - это ППА заменяющее ИР22 (т.к ИР22 вставить нельзя, пришлось использовать третий ППА).

Как сделать, чтобы при Z80 звук звучал по биту D0 порта С клавиатуры (это бит вывода на МГ-ленту)? В БК-010 тоже, кажется, звук объединён с выводом на МГ-ленту.

Вот результирующий конфиг-файл для РК86 на Z80 с 1 мб ОЗУ.

main.CPUClock=1777777Hz
main.Caption="╨рфшю-86╨╩"

CPU : Z80 {
debug=cas
mem=mm
pc=F800
}

mem1 : Memory {
size=100000
frame[0].size=4000
frame[0].page=DOPPPA.portC[0-5]
}

font : Memory {
~rom="Radio/2KFONT.DAT"
frame[0].size=400
frame[0].page=DOPPPA.portC[7]
}

bios : Memory {
rom="Radio\ZBIOS.ROM"
}

memE000 : Memory {
rom="Radio\IRISHA.ROM"
}

DOPPPA : K580ww55 {
}

KBDPPA : K580ww55 {
portA=kbd.~mask
portB=kbd.~data
portC[0]=cas.record
portC[4]=cas.playback
portC[5-7]=kbd.~data2
}

tim : K580wi53 {
clock[0].rate=1/1
clock[1].rate=1/1
clock[2]=tim.out[1]
~gate[0]=tim.out[2]
gate[1].value=1
gate[2].value=1
}

crt : K580wg75 {
dma=dma[2]
font=font.frame[0]
fontwidth=8
fontheight=8
hilight=crt.ggh
}

dma : K580wt57 {
mem=mem1
}

mm : MemMap {
map[0][0000-7FFF]=mem1[0000]
map[0][8000-83FF]=KBDPPA.data
map[0][8400-BFFF]=mem1.frame[0][0400]
map[0][C000-DFFF]=crt.data
map[0][E000-FFFF].wo=dma.data
map[0][E000-EFFF].ro=memE000[0000]
map[0][F100-F1FF]=DOPPPA.data
map[0][F200-F2FF]=tim.data
map[0][F800-FFFF].ro=bios[0000]
}

kbd : Keyboard {
layout="Radio\layout.kbd"
}

beep : beep {
input=cpu.int
input2=KBDPPA.portC[0]
input[0]=tim.out[0]
}

cas : tape-recorder {
biproc[FB98-FC9D]=rk
boproc[FC46-FC9D]=rk
}


Есть ещё один вопрос. Причём актуальный, т.к на реальном РК86 я использую не матричную клавиатуру, а аппаратную. И мой контроллер для подключения к РК86 клавиатуры от IBM PC (на SU880) выдаёт на выходе сигналы именно такой клавиатуры (преобразуя последовательные коды в готовый ASCII-код). Т.к клавиатура IBM PC намного приятнее, чем самодельная матричная клавиатура (с низким качеством кнопок), то многим пользователям РК86 и ОРИОНА этот вопрос тоже важен.

Как сделать в конфиг-файле аппаратную клавиатуру для РК86?

Я её подключаю к реальному РК86 к порту клавиатуры вместо матрицы (листинг такого ПЗУ, если любопытно, можно посмотреть в моём каталоге исходников ROM F800 для РК86).

Вот кусок листинга, поясняющий подключение клавиатуры Apple-IIe, что имеет тот же интерфейс, что и клавиатура ИРИШИ (но без клавиши <фикс.рег>).



PORT_A: на ввод, D0-D6 - код клавиши,
D7 - выход ТМ2 (готовность)

PORT_B: на ввод, бит D0 - сигнал /STB клавиатуры APPLE
бит D7 - клавиша <фикс.рег> (это не обязательно эмул-ть)

PORT_C: на вывод, любой бит - вход R триггера (для сброса ТМ2)


На вход C триггера подводится инвертированный /STB клавиатуры, т.е ТМ2 взводится по нажатию (/STB =0 пока нажата клавиша клавиатуры). В конфиге ИРИШИ это реализовано так

port[04-05]=kbd.keycode - это ASCII-код от апп.клавиатуры

и так

portB[7]=kbd.pressed - это бит готовности кода клавиатуры

Как это сделать для РК86, чтобы вместо порта В/У код читался из порта A ППА клавиатуры РК86 по битам D0...D6? А готовность с того же порта А ППА, но по биту D7. Если из одного и того же порта нельзя читать готовность и данные, то я могу перенести бит готовности в порт B и даже сделать тот же бит D7, как в ИРИШЕ. Но перенести эти регистры в область В/У не могу.

Хотя в ИРИШЕ код клавиши защёлкивается, в ППА код не защёлкивается. Поэтому-то, я и ввёл триггер (он фиксирует, что было нажатие). По биту из триггера узнаём, что было нажатие, а по сигналу /STB узнаём, что код клавиши ещё подаётся (когда клавишу отпустят исчезнет не только 0 на /STB, но и сам код клавиши). Поэтому код клавиши действителен только когда есть /STB и взведён триггер готовности. Так, за счёт всего одного триггера, я подключил аппаратную клавиатуру к РК86 и ОРИОНУ, избавившись от необходимости защёлкивать данные клавиатуры в регистре ИР22.

Правда в ИРИШЕ бит готовности автоматически сбрасывается после считывания, а в РК86 мне приходится сбрасывать его программно делая 0-вой импульс в порт C клавиатуры.

Но для эмулятора сгодится предположение, что ППА защелкивает данные, как в ИРИШЕ и после считывания готовность сама сбрасывается.

У меня возникли вопросы про эмулятор B2M, не касающиеся РК86. Чтобы не злить модераторов и фанатов РК86, я их разместил в теме ИРИШИ.

b2m
16.01.2017, 15:35
Правильно ли я понимаю, что эта строчка нужна для того, чтобы IN/OUT-команды попадали в ОЗУ по адресам, где старший и младший адреса равны адресу порта. А для Z80 такую строчку применить нельзя.
Абсолютно верно. Кстати, если не заморачиваться аппаратно, то реальный Z80 тоже не будет обращаться к памяти командами IN/OUT.


Тем самым эмулятор B2M пока не может эмулировать схему установки Z80 с двумя КП11-тыми.
В принципе, если все порты соеденить через Decoder с памятью, и задать соответственно adrxlat (это собственно и есть перестановка битов адреса), то сможет.


Во-первых, не понял, как ввести обыкновенный регистр ИР22 по адресу F300, чтобы управлять переключениями полу-банок.
А что, вышеприведённый конфиг не заработал? Вводить дополнительный регистр не надо, можно напрямую соединять со свойством page. Я выделил красным цветом строчки, необходимые для "полу-банковой коммутации".


Банки похоже коммутируются, т.к по переключению полубанки изображение на экране исчезает (остается только мигающий курсор).
Странно. ВТ57 соединён непосредственно с mem1, ему банки должны быть по-барабану. В Апогее конфиг мало чем отличается в этой части, а там экран выше 8000.


Почему управление окном 0...7FFF иное, чем окном 8400...BFFF.
Потому-что оба варианта возможны. ВВ55 в данном случае не обязательна. Можешь считать, что page это и есть регистр.


Как это сделать для РК86, чтобы вместо порта В/У код читался из порта A ППА клавиатуры РК86 по битам D0...D6? А готовность с того же порта А ППА, но по биту D7.
В секции нужного ВВ55:
portA[0-6]=kbd.keycode
portA[7]=kbd.pressed
Не забудь настроить порт А на ввод.
Правда специфика реализации kbd.keycode такова, что после его чтения обнуляется kbd.pressed. Так что наверное лучше разнести их по разным портам. Иначе keycode может считаться раньше, чем pressed, и последний будет всегда нулевой.

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


Чтобы не злить модераторов и фанатов РК86, я их разместил в теме ИРИШИ.
Честно говоря, обсуждение эмулятора РК86 и в этой теме немного оффтопик.

barsik
21.01.2017, 21:26
Эмулятор B2M при эмуляции РК86 визуализирует экран выше 8000 только с таким конфигом, при котором область 8400...BFFF некоммутируемая и является частью mem1, расширенной с 32К до 64К.

mem1 : Memory {
size=10000
}

mm : MemMap {
map[0][0000-7FFF]=mem1[0000]
map[0][8000-83FF]=KBDPPA.data
map[0][8400-BFFF]=mem1[8400]

А вот при такой строке отображения экрана выше 8000 нет:

mm : MemMap {
map[0][0000-7FFF]=mem1[0000]
map[0][8000-83FF]=KBDPPA.data
map[0][8400-BFFF]=mem1.frame[0][0400]

Т.е при коммутируемой области 8400...BFFF экран выше 8000 делать нельзя, что несколько снижает ценность эмулятора.

Попробовал получить архитектуру с переключение ОЗУ полу-банками по 8000H байт и с предложенной (красным цветом) строкой

map[0][F300-F3FF]=mem1.frame[1].page

и со строкой

map[0][F300-F3FF]=XPPA.data

Результат одинаковый.

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

К сожалению, исходника отладчика для Z80 у меня нет, да и в 4К в области E000...EFFF отладчик Z80 не влезет. Поэтому пришлось перетранслировать тест на команды КР580 и использовать отладчик для КР580.

В результате удалось выяснить, что экран в эмуляторе гаснет не по команде записи в регистр переключающий банки, а по команде пишущей в ОЗУ 0...7FFF, т.е в уже переключённую полубанку. Но проблема не в отсутствии визуализации, а в том, что одновременно с гашением изображения происходит улёт самой программы, расположенной в области 8400, даже в шаговом режиме под отладчиком, отчего ничего выяснить нельзя.

Тогда странслировал тест для адреса E000, где в эмулируемом РК ПЗУ, т.е где код не должен разрушаться. Однако стек всё-равно пришлось ставить на C000, т.е в область 8400...BFFF. Результат был аналогичным.

Это меня достало. Я не могу тратить столько времени, на то, что особо и не требуется. Достаточно наличия "верхнего ОЗУ". А уж если оно банкированное (несколько страниц), то это предел мечтаний любого фаната РК86, измученного нехваткой ОЗУ.

Коммутацию полу-банок хотелось иметь в эмуляторе, чтобы не тратить 1/16 ОЗУ впустую (из-за некруглости окна в 15К). На реальном РК86 сделать одновременно и "верхнее ОЗУ" и диспетчер ОЗУ с коммутацией всего основного ОЗУ - нереально. Слишком много пайки и слишком много деталей. Я признаю только такие доработки, что можно без хлопот сделать за 1-2 часа. Наличие ОЗУ 8400...BFFF важнее, чем чуть больший размер эл.диска.

Однако и использование "верхнего ОЗУ" в эмуляторе B2M сейчас под вопросом.

Я обнаружил, что отладчик работающий в верхнем ОЗУ нельзя использовать. А именно, при попытке трассировать программу командой Gstart,stop (где START адрес старта, а STOP адрес стоп-точки), отладчик портит программу. Возврат в отладчик из стоп-точки происходит, но сама стоп-точка не восстанавливается. По адресу стоп точки остаётся байт с кодом RST 8. В этом легко убедиться дав команду X, или L. Тот же отладчик странслированный в основное ОЗУ работает как положено. Происходит так, как будто после прогона кода RST 8, и возврата тем самым в верхнее ОЗУ, программа не смогла записать байт в основное ОЗУ.

Опыт был повторён с тремя разными отладчиками, которые использовались в течение 25 лет и не имели нареканий. В файле TEST B2M.RAR прилагаю исходник отладчика, чтобы Вы могли повторить эксперимент. Руководство в файле _READ_ME.TXT.

В то же время в верхнем ОЗУ без проблем работали несколько игр, мой текстовый редактор и макроассемблер. Т.е проблемы с верхним ОЗУ возникают только при каких-то условиях (возможно при прогоне каких-то редких команд).

Как указано выше, тесты работающие из верхнего ОЗУ и вызывающие п/п-ммы F836/39 тоже по непонятным причинам улетают и трассировать их не удаётся. Я потерял много времени, пока это понял. Причём, как в варианте с двумя блоками памяти (mem1 и mem8400), так и с совмещённым ОЗУ из одного блока памяти.

Таким образом пока разрабатывать программы в эмуляторе B2M, по причине отстутствия отладчика, невозможно. Т.к не имея ни отладчика, ни команд эмулятора для управления прогоном, ничего делать нельзя. Команда HALT, если в ней программа находится более 2 секунд должна автоматически вылетать в отладчик.

Обнаружились глюки эмулятора B2M не зависящие от архитектуры. Если по директиве I ввести файл, а по окончании ввода сразу нажать клавишу I и <ВК>, например, загружая программу для отладки и затем отладчик, то второй файл вводится неверно. Старшим байтом введённого блока выводится FF. Т.е блок вводится в область ПЗУ, выходит за сегмент в 64К и концом блока затирает код самого эмулятора. Если затем снова ввести I и <ВК>, то произойдёт улёт эмулятора с авральным его завершением. Если же между первым вводом файла и вторым вводом файла выполнить любую директиву, например дамп, то последующий блок вводится нормально. Данное явление почему-то бывает не всегда. В половине случаев два подряд ввода по директиве I проходят прекрасно. Если такой глюк случился и старшим байтом введённого блока выведен FF, то необходимо сразу сделать сброс (кликнуть кнопку с красным кружком). После такого глюка в эмуляторе ничего делать нельзя, - будет улёт. Если сразу после сброса нажать I и <ВК> и затем в меню выбора файлов нажать <ESC>, то изображение на экране исчезает и прогон зависает. Это тоже глюк эмулятора B2M.

Эмулятор B2M с базовым ПЗУ F800, но без ПЗУ F000 улетает, если нажать <ВК> на пустой строке. Это ошибка не эмулятора, а авторов РК86, точнее их ПЗУ F800 (уход на несуществующее ПЗУ F000). Автор эмулятора B2M избавился от этой ошибки подставив код ПЗУ F800 также по адресу F000, отчего JMP F000 равноценен рестарту. Поэтому надо использовать исправленый мной ROM-BIOS, где вместо ухода на F000, в случае ввода ошибочной команды, сделан уход на ERROR.

Регистр управляющий содержимым окна 8400...BFFF надо инициализировать при старте компьютера, т.е по холодному старту ПЗУ F800. Для этого надо запрограммировать режим доп.ППА (по адресу F100) и вывести в порт C ППА число 2. Иначе в окне 8400 отображается содержимое основного ОЗУ с адресов 0400...3FFF. При числе в порту С равном 1 в окне 8400 тоже отображается основное ОЗУ (но уже 4400...7FFF). Поэтому приходится выводить в регистр число 2. При расширении ОЗУ выше 8000 за счёт статического ОЗУ, это ОЗУ не совмещено с ОЗУ из динамического ОЗУ и таких проблем нет.

Использование ОЗУ 8400...BFFF со стандартным базовым ПЗУ F800, т.е без инициализации регистра управления равнозначно использованию основного ОЗУ 0400...3FFF. И если, использовать текстовый редактор, работающий в верхнем ОЗУ, то при загрузке текста разрушается код редактора и происходит улёт. Таким образом инициализировать регистр управления окном надо как в версии ПЗУ для Z80, так и в версии для КР580.

Т.к регистр управления находится в ППА стоящем по адресу F100, то работать такие ROM-BIOS могут только, если область F000 выделена дешифратором. Если дешифратора нет, т.е РК86 абсолютно базовый, без РК-КНГМД, то запись в ППА F100 попадает в БИС ВТ57. И соответственно такое ПЗУ не годится для базового РК86.

Прилагаю версии ROM-BIOS для КР580 и Z80. В версии Z80 есть п/п-ммы для работы с расширенным ОЗУ, а также добавлены 2 новые директивы. Читайте READ_ME-файлы и смотрите исходники. Всё документировано.

Прилагаю для тестирования версии RK-DOS для Z80. Также читайте READ_ME- файлы и смотрите исходники. Всё документировано.

Прилагаю для теста "верхнего" ОЗУ несколько программ работающих в верхнем ОЗУ. Мой редактор и ассемблер - это последняя версия для КР580, что была адаптирована от СПЕЦИАЛИСТА к РК86. Последующие версии были для Z80 и только для ОРИОНА и их конверсия для РК требует труда и пока не сделана (не ясно как сделать маркировку текста без инверсии, нужна замена Z80-команд, замена координат POSX,POSY и переделка роликов вверх-вниз). В этой версии макроассемблера в макрокомандах нет некоторых расширенных свойств (но документация соответствует).

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

Здесь во вложении версия RKDOS с ошибкой (работает только в ОЗУ) исправленную версию можно взять в конце темы.

b2m
21.01.2017, 22:38
Эмулятор B2M при эмуляции РК86 визуализирует экран выше 8000 только с таким конфигом, при котором область 8400...BFFF некоммутируемая и является частью mem1, расширенной с 32К до 64К.
Всё правильно. ВГ75 читает из памяти через ВТ57, а её "память" подключена непосредственно к mem1. Можно это изменить, и, я думаю, ты получишь, что хочешь:

dma : K580wt57 {
mem=mm
}

Просто с такой конфигурацией можно настроить экран на область портов, а это мне показалось лишним. Да и аппаратная реализация, как мне кажется, позволяет контроллеру ПДП читать только из памяти. Необходимость переключать экран при помощи "банок", на мой взгляд, не является такой уж насущной.


Результат одинаковый.
В смысле работает, или в смысле не работает?


встроенный в эмулятор отладчик оказался неудобным, неполноценным и потому непригодным (для меня) для практического использования
Как? Вы не любите кошек? Да вы просто не умеете их готовить! :)


одновременно с гашением изображения происходит улёт самой программы, расположенной в области 8400, даже в шаговом режиме под отладчиком, отчего ничего выяснить нельзя
Во встроенном отладчике такого не может быть. По клавише F8 всегда происходит выполнение одной команды. И всегда можно выяснить, что происходит. Единственный, может быть, недостаток, это то, что при этом (из соображений эффективности) не обновляется дамп. Но если это не команда перехода или вызова процедуры, то можно нажать Shift+F8 (то есть выполнить до следующей команды, при этом подпрограмма выполнится без трассировки), и дамп обновится. Кстати, точки останова (клавишой F9) можно ставить не только в окне дизассемблера, но и в окне дампа. При этом останов произойдёт при обращении к отмеченному байту памяти, даже если это порт. Таким образом можно отлавливать обращение к портам.


Однако и использование "верхнего ОЗУ" в эмуляторе B2M сейчас под вопросом.
Да нет в эмуляторе никакого "верхнего ОЗУ"! Эта "граница" всего лишь результат используемого конфига. Когда я делаю эмуляцию какого-либо компьютера, я чётко представляю себе его архитектуру, и делаю конфиг таким образом, чтобы программы работали также, как и на реальном компьютере. Да, это не всегда просто. Даже для меня, хотя я абсолютно точно представляю себе, как будет эмулироваться та или иная фича конфига.


Таким образом пока разрабатывать программы в эмуляторе B2M, по причине отстутствия отладчика, невозможно
Отладчик есть, и если научиться им пользоваться, то проблем не возникает.


Если по директиве I ввести файл, а по окончании ввода сразу нажать клавишу I и <ВК>
Открою один секрет: файл, из которого происходит ввод, не закрывается сразу после возврата из перехвата, а только через 5 секунд. Сделано для того, чтобы работали программы, дочитывающие что-либо из файла. Но вообще-то, если файл дочитался до конца, он должен был закрыться сразу. Возможно, в твоём файле в конце были лишние байты.


Если сразу после сброса нажать I и <ВК> и затем в меню выбора файлов нажать <ESC>, то изображение на экране исчезает и прогон зависает. Это тоже глюк эмулятора B2M.
Это не глюк, а непонимание работы эмулятора. Если отказаться от выбора файла при перехвате процедуры ввода, то перехвата не будет, и программа будет выполняться дальше. А дальше п/п ввода с магнитофона отключит ПДП, чтобы не мешать чтению (при этом экран гаснет) и читает из порта магнитофона. В этот момент можно кнопкой на тулбаре "включить" воспроизведение .wav файла (типа включили магнитофон). Всё как на реальном РК.

Pyk
22.01.2017, 01:42
barsik, а что именно не должно было работать в RK-DOS на Z80?
Попробовал в текущей разрабатываемой версии своего эмулятора эту комбинацию - на первый взгляд все ок...

barsik
22.01.2017, 02:13
Попробовал в текущей разрабатываемой версии своего эмулятора эту комбинацию и на первый взгляд - всё OK.

Вы имеете ввиду RK-DOS? Именно ту, перетранслированную для Z80 из файла "RKDOS_for_TEST.RAR", что я выложил для проверки в реале? У меня вообще-то нет особых причин думать, что они нерабочие, т.к я получил их, - одну "кромсанием" рабочего исходника RK-DOS для ОРИОНА, а вторую косметическими изменениями в оригинальной РК-ДОС для КР580. Но т.к обе версии не проверялись в реале и при переделках почти всегда возникают ошибки и с первой попытки обычно ничего не работает, то я и предложил их проверить в реале тому, у кого есть Z80 процессор в РК86 и стандартный РК-КНГМД по адресу F000. Так что конкретных ошибок я указать не могу. Если они есть, их надо определить при проверке в реале или хотя-бы в эмуляторе.

Из текста сообщения понял, что Вы проверили эти коды в эмуляторе, который эмулирует и РК-ДОС и процессор Z80. О существовании такого эмулятора ничего никому ещё не известно. Не сообщите ли подробности о новой версии своего эмулятора EMU80 для Z80? Если действительно сделана эмуляция железа РК-КНГМД, то это удобно, чтобы проверять ДОС на базе дисковода. А вот Z80 в РК86 это пока не актуально.


Следующая строка поможет иметь экран выше 8000


dma : K580wt57 {
mem=mm
}



Эта строка не помогла, хотя появились отличия. Если при 'mem1' вообще ничего на экране не было, то теперь кое-что на экране есть. Но удивляет, что выводится только часть символов.

Теперь снова про глюк в работе отладчика из ОЗУ 8400...BFFF и тот же самый глюк при работе отладчика из ПЗУ E000. Этот глюк не связан со стеком, т.к одинаков при стеке - в основном ОЗУ и в ОЗУ выше 8000.

Как с конфигом, где основное ОЗУ совмещено с помощью 'frame' с ОЗУ окна 8400, так и с конфигом, где эти ОЗУ (mem1 и mem8400) - разные, отладчик ведёт себя так, как я и описывал, - не удаляет RST в основном ОЗУ.

Но если закомментировать одну строку так

// map[0][F100-F1FF]=DOPPPA.data

то отладчик в верхних адресах работает отлично, но естественно коммутации ОЗУ в окне 8400...BFFF - нет, хотя само ОЗУ в области 8400...BFFF - есть. Таким образом, всё портит коммутация кусков памяти в окне.

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


Открою секрет: файл, из которого происходит ввод, не закрывается сразу после возврата из перехвата, а только через 5 секунд.

Я не мог знать насчёт паузы в 5 секунд между вводами по I? Ведь документации нет. Это объяснило почему дефект возникал не всегда. И то, что выполнение какой-то промежуточной команды перед второй директивой I помогало избавиться от дефекта. И это явный глюк эмулятора, а не особенность. Если пользователь страдает, то это всегда глюк. Если произошёл "отлов" прогона входа RDBYTE, чётко указанного в конфиге, то уж сам Бог велел при этом закрыть все файлы. И ссылки на паузу в 5 секунд и ожидание продолжения ввода предыдущего блока, после входа в RDBYTE - неуместны.

Зачем ждать 5 секунд. Достаточно тайм-аута в пол секунды. И это не объясняет откуда берётся старший байт адреса следующего блока равный FF. Предположительно это байт КС предыдущего блока. FF потому, что для неокончательных файлов я не устанавливаю правильную КС, - это ни к чему, если файл ещё изменится 20 раз. Но не важно по каким причинам искажается адрес ввода. В любом случае эмулятор не должен вводить блок в адреса выше C000. Так что с тем, что это глюк спорить невозможно. Но это нормально, все программы содержат ошибки.

Синхронизация должна происходить по байту E6. Это лишний раз доказывает, что формат 'GAM' лучше, чем надуманный формат 'RK', т.к в нём есть байт синхронизации E6. Но эмулятор B2M правильно считывает и файлы с расширением RK. И даже вообще любые файлы с произвольным расширением. Он просто считает первые 4 байта как адреса ввода. А если первый байт E6, то его игнорирует. Вследствие этого, по директиве I файл в формате RK в эмулятор B2M нельзя ввести на адреса E600...E6FF. А вот в формате GAM - можно.


Но вообще-то, если файл дочитался до конца, он должен был закрыться сразу. Возможно, во вводимом файле в конце были лишние байты.

Лишние байты есть всегда. Файлы записанные в CP/M имеют кратность 128 байт. Поэтому после трансляции очень редко появляется GAM-файл у которого длина чётко равна длине блока плюс служебные байты в начале и конце блока. Точнее это может случиться только с вероятностью 1/128-мая, т.е на практике почти никогда.

И кстати, раз уж речь о вводе файлов. А что насчёт ввода других форматов? В частности ORD. Ведь как-то Вы вводите при эмуляции СПЕЦИАЛИСТА и ОРИОНА другие МГ-форматы, кроме формата МИКРО-80 и РК86. Точнее, - задача вводить файлы не с магнитофона, а с винчестера. Это же проще, чем эмулировать ввод с магнитофона.

Когда я делал эмулятор РК86, то сразу решил не "заморачиваться" с магнитофоном. Ввёл в сам эмулятор функцию загрузки файла. А уж какой он, в каком формате этот файл, это эмулятор не волнует. Эмулятор получает от КР580-программы имя файла, адрес загрузки и максимально допустимый размер файла и просто грузит файл с винчестера. Аналогично при записи. Но самое трагичное, что ориентация на магнитофон и низкоуровневую эмуляцию железа, а не на файлы на винчестере, лишает возможности тестировать в эмуляторе ДОС. А особенно, когда даже низкоуровневой эмуляции РК-КНГМД нет. Хоть какой-то выход из этого - это эмуляция большого ОЗУ, используемого в качестве эл.диска.

У меня файлы для всех БК (в том числе РК86) - в формате ORD и этот формат понимает мой эмулятор РК86. Очень неудобно транслировать все программы в двух видах - и в виде GAM и в виде ORD. Формат ORD удобен тем, что он годится и для МГ-ленты (или WAV-файла) и для дискового файла. Форматы RK и GAM при выгрузке на ленту теряют имена файлов.

Я не представляю, как загрузить в эмулятор B2M файл в формате ORD. Ещё большее неудобство возникает при вводе файлов в ИРИШУ. Потому-что там формат записи на МГ не содержит ни адреса загрузки, ни длины файла. Поэтому приходится помнить эти данные или хранить их на бумажке. Я с этим намучился ещё на реальной ИРИШЕ (потерял из-за этого кучу файлов). И был дико удивлён, когда обнаружил такую-же ерунду и в эмуляторе. Здесь задача ввода ORD-файлов, на порядок более актуальна.


Отладчик есть, и если научиться им пользоваться, то проблем не возникает.

Я пользовался экранными отладчиками 80x86. Отладчиком эмулятора B2M пользоваться неудобно. Почему пользователь экспериментальным путём должен устанавливать, что делают команды отладчика, приведённые в HELP-е? HELP должен быть исчерпывающе понятным.

В отладчиках должна быть команда PASS для прохождения подпрограмм без трассировки. В отладчике ИРИШИ из 1977 года нажимаешь P на команде CALL или RST и она прогоняется, как одна команда ассемблера. И кстати, о якобы ущербности командного режима относительно графического представления отладчика. Видя фрагмент кода и зная, где надо остановиться, на порядок быстрее ввести команду 'G,xxxx', чем подгонять курсор куда-то, ставить там стоп-точку и затем нажимать на <F5>. А если стоп точка вообще не на экране, то переход к ней отнимает ещё больше времени.

Видел отладчики которые показывают дамп ОЗУ, куда указывает текущий HL. Удобно если в отладчике работают символьные клавиши, а не только функциональные и мышь. Например, по P,S,A,B,D,H может выскакивать окно для HEX-ввода регистров. По нажатию I,C,Z,E... могут переключаться на обратный флаги. По нажатию только одной клавиши курсор должен перескакивать в нужное окно. В визуальном отладчике тоже удобно иметь команды.

У программирующих для 8080/Z80 не бывает листинга LST, это же не MASM или TASM для 80x86. У них бывает только файл с расширением PRN, где тоже есть таблица меток.

Почему запрашиваются HEX-числа с СИ-префиксом '0x'? По нажатию клавиши окно очищается, в том числе и префикс. Просто HEX-число, без префикса не вводится. Приходится вручную вводить ещё и префикс 0x, что раздражает. Если уж окно очищается, то префикс '0x' следовало оставить, чтобы пользователю не пришлось вводить его вручную. А если уж необходима подсказка, что ожидается HEX-число, то это можно сделать в заголовке окна.

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

Pyk
22.01.2017, 10:25
Ох, написано выше много, не готов пока обстоятельно ответить. Перечитаю сначала последние страницы темы и отпишусь дополнительно (а то я сам уже не уверен, какой именно вариант я проверял ;)

Пока могу лишь сказать, что эмулятор в разработке, поддержка как РК-ДОС, так и Z80 в нем уже есть, но публиковать сырую версию я пока не планирую. Я не ставил перед собой цель поддержать как можно больше платформ, так что таких продвинутых конфигов, как у b2m, у меня, к сожалению, нет. Возможно, для полноценной поддержки вашей конфигурации придется минимально дополнять код.

Отладчик пока также не доделан, некоторые из пожеланий в нем учтены, некоторые нет. Что-то и у b2m на самом деле есть, например, Pass over по Shift-F8.

Что же касается остальных пожеланий, в том числе перехватов файловых операций, то уж не обессудьте - на что сил хватило, то и будет в эмуляторе. Мы ведь занимаемся этим в свободное время и для собственного удовольствия. Поэтому и собираюсь опубликовать исходники, чтобы желающие могли полноценно добавлять нужные фичи...

b2m
22.01.2017, 12:37
Таким образом, всё портит коммутация кусков памяти в окне.
Если программа хранит в коммутируемой области переменные или стек, то конечно же, после переключения ОЗУ в этой области будут совсем другие данные. Особенно критично это для стека, т.к. возврат произойдёт по случайному адресу. Про то, что стек у тебя в области 8400...BFFF ты писал:

Однако стек всё-равно пришлось ставить на C000, т.е в область 8400...BFFF.
Твой отладчик также пользуется стеком. И частично - стеком программы, которую трассирует. В частности, это происходит при срабатывании точки останова. С какого адреса продолжать трассировку, отладчик читает из стека трассируемой программы после выполнения RST. А если последней была команда переключения банки, и стек был в переключаемой области, то считаются случайные данные. Именно поэтому крах происходит не при выполнении команды переключения, а при выполнении следующей команды. И команда RST для следующего шага также запишется по случайному адресу. Но эмулятор тут ни при чём. Если бы ты пользовался моим встроенным отладчиком, то ты бы увидел, что происходит.


Зачем ждать 5 секунд. Достаточно тайм-аута в пол секунды. И это не объясняет откуда берётся старший байт адреса следующего блока равный FF.
За полсекунды ты не успеешь запустить считанную программу, которая дочитывает данные. Хотя, дочитывают данные в основном программы с автозапуском.
И я смотрел .gam файлы, байтов FF после логического конца записи у тебя достаточно. И кстати, не все файлы содержат мусор после контрольной суммы. Некоторые из файлов вполне корректны.


Это лишний раз доказывает, что формат 'GAM' лучше, чем надуманный формат 'RK', т.к в нём есть байт синхронизации E6.
Мне как раз не нравится этот формат. Пропуск первого байта пришлось учесть в коде эмулятора.


В отладчиках должна быть команда PASS для прохождения подпрограмм без трассировки.
Shift+F8 выполнить команду без трассировки (т.е. точка останова временно будет на следующей команде, удобно для пропуска трассировки циклов с пост-условием и подпрограмм)
Ctrl+Shift+F8 выполнить без трассировки, пока не произойдёт RET при значении стека выше текущего положения, т.е. выполнить до выхода из подпрограммы (весьма полезная фича)


Видя фрагмент кода и зная, где надо остановиться, на порядок быстрее ввести команду 'G,xxxx', чем подгонять курсор куда-то
Для быстрого перемещения в окнах кода и дампа есть клавишная комбинация Ctrl+G.
Кстати, до недавнего времени не знал, что в диалоге по клавише F1, в котором выводится подсказка по клавишам эмулятора, текст сместился. На XP было нормально :)

Vladimir_S
22.01.2017, 15:06
А если последней была команда переключения банки, и стек был в переключаемой области, то считаются случайные данные.
Так может все таки уйти от этого дурацкого переключения банок, а поставить SRAM, где каждый байт имеет свой адрес.

barsik
23.01.2017, 05:53
Так может все таки отказаться дурацкого переключения банок, а поставить SRAM, где каждый байт имеет свой адрес.

Куда ставить static RAM? В адресном пространстве РК всё занято. А минимальное статическое ОЗУ - это 32 кб. Так что по любому каждый байт из этого ОЗУ не сможет получить свой адрес.Так что и при статическом ОЗУ выше 8000 имеет смысл диспетчеризация памяти. Если основное ОЗУ на РУ5/ РУ7, то выгоднее "открыть" ОЗУ в окне 8400...BFFF или C400...DFFF.

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

Cюжет заключается в возможности иметь эл.диск как в реале, так и в эмуляторе B2M. Для эмулятора это частично решает проблему проверки в эмуляторе ДОС и программ для них. А для реального РК86 эл.диск из лишнего ОЗУ даёт возможность закачать по линии из PC в эл.диск программы и удобно их использовать, не имея никакого внешнего массового накопителя.

К сожалению, для РК, в отличие от ОРИОНА невозможен программный интерфейс (где расход деталей составляет два куска проволоки), т.к ПДП рвёт программы реального времени. Поэтому обмен по линии с PC возможен лишь аппаратно, при установке в РК микросхемы ВВ51. Да и тогда ПДП на высокой скорости, скорее всего, придётся отключать, что погасит экран. Т.к при высокой скорости передачи, перерыв на 44 МКСЕК (цикл ПДП 78 маш.тактов) приведёт к потере принятых байтов. Хотя скорость передачи в 300 бод получится и без гашения экрана.


Если программа хранит в коммутируемой области переменные или стек, то конечно же, после переключения ОЗУ в этой области будут совсем другие данные. Особенно критично это для стека, т.к. возврат произойдёт по случайному адресу.

Речь не о коммутируемости ОЗУ, а о простейшей программе, которая работает в основном ОЗУ и никак ОЗУ в окне 8400...BFFF не коммутирует. Эта программа была с ошибкой, но трассировать её, чтобы понять в чём дело, не удалось. В итоге, мне всё-же удалось отладить эту программу с помощью отладчика КР580 (см.ниже), что и дало возможность получить проверенный код подпрограмм F836/39 для ПЗУ.

Удалось выяснить, что если отладчик КР580 работает в ОЗУ выше 8000, но стек стоит в основном ОЗУ (что сильно снижает ценность отладчика), то глюка с кодом RST не происходит. Глюка с кодом RST не происходит также, если ОЗУ 8400 - некоммутируемое. Т.е хотя коммутация ни в отладчике, ни в трассируемой программе не задействована, она влияет.

Вы настаиваете, что ошибка в отладчике. Это не так. Он успешно прошёл тестирование в течение 40 лет. Так что, на самом деле ошибка в эмуляторе.

В качестве примера, я привёл программу теста работы оконного диспетчера, точнее тех подпрограмм, что я хотел иметь в ПЗУ F800. Причём программу неотлаженную, т.к не на чем было отлаживать. Просто именно на этой программе, я столкнулся с неработоспособностью отладчика. Точку останова для проверки отладчика я задаю задолго до коммутации ОЗУ в окне. Поэтому в качестве подопытной программы, может использоваться любая программа в основном ОЗУ. По директиве отладчика Gstart,stop происходит искажение отлаживаемой программы в точке останова.

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

Пока перетранслировал отладчик для ПЗУ E000, сделав стек на 7000. C его помощью можно отлаживать программы, что ставят стек на 7600 или рядом. Когда ошибка эмулятора будет устранена, странслируйте себе нормальную версию.


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

Чтобы трассировать и найти точку улёта я пользовался встроенным отладчиком эмулятора. А как же иначе? Программным отладчиком это не сделать. Но и отладчиком эмулятора трассировать не удалось.

В итоге мне удалось отладить тест ОЗУ и теперь он работает. Т.е получены работающие подпрограммы F836/39, причём они такие же как в ОРИОНЕ. А по логике работы даже лучше, т.к в кажлой банке не 60К, а 64К. Однако объём кода этих подпрограмм (75 байтов) и, соответственно, скорость их работы удручают.

Объём кода получился большим из-за необходимости конверсии виртуальных аресов на входе в физические адреса в окне доступа, чтобы получить сплошную адресацию. Позднее я попробую оптимизировать код этих п/п-мм, т.к он явно не оптимальный. Если кто-то может сделать такую оптимизацию, был бы рад.

Однако такие затраты объёма ПЗУ и потеря скорости оправданы. Т.к это существенно упрощает адаптацию, ведь драйверы такого эл.диска давно имеются. Данные подпрограммы пока поддерживают только 4 банки ОЗУ. Но этого уже достаточно для работы любых ДОС.


Твой отладчик также пользуется стеком. И частично стеком программы. В частности, это происходит при срабатывании точки останова. С какого адреса продолжать трассировку, отладчик читает из стека трассируемой программы после выполнения RST. А если последней была команда переключения банки, и стек был в переключаемой области, то читаются случайные данные.

Это не мой отладчик. Это отладчик Гарри Килделла из 1977 года, называемый Dinamic Debugging Tool.

Отладчик в точке останова (точка VEC38) действительно читает из стека отлаживаемой программы POP-ом, чтобы получить адрес останова. Этот считанный из стека адрес отладчик уменьшает на 1 и восстанавливает по этому адресу старое содержимое этой ячейки (код программы в точке останова). Если бы это было случайное число, то оно отображалось бы как другой адрес текущей команды. И легко обнаружилось бы. Считанный из стека адрес верный. Просто не происходит физической записи по этому адресу. Ошибка не программная.


И кстати, не все файлы содержат мусор после контрольной суммы. Некоторые из файлов вполне корректны

Это уже готовые файлы, т.е те, что уже не меняются после очередной трансляции. В них я подставляю КС и удаляю ненужные байты (чтобы сократить RAR-архив). А в тех программах, что перетранслируются, в качестве КС стоят два байта FF. Т.к Microsoft ассемблер 1982 года не умеет считать контрольную сумму полученного объектного кода по F82A и подставлять результат в объектный код. А вот самодельный ассемблер это может.


Ctrl+Shift+F8 выполнить без трассировки, пока не произойдёт RET при значении стека выше текущего положения, т.е. выполнить до выхода из подпрограммы (весьма полезная фича)

Что делает Shift+F8 экспериментальным путём я установил, а про Ctrl+Shift+F8 решил, что это - то же самое. Полезное свойство. В программах иногда POP для сброса адреса возврата удобен. Но были извращенцы, что доводят эту идею до абсурда. И это плохой стиль программирования.

Но одной клавишей это делать привычнее. При трассировке ставишь пальцы на T и P и быстро-быстро жмёшь на них соответственно коду. А если с SHIFT-ом, то это менее удобно. И как в эмуляторе B2M Вы сделаете команду T200 или U200, чтобы прогнать ровно 200 команд с трассировкой или без? Кстати при большом числе, результаты трассировки выводятся только для 24 последних команд, так что долгой задержки нет.


Для быстрого перемещения в окнах кода и дампа есть клавишная комбинация Ctrl+G. Кстати, до недавнего времени не знал, что в диалоге по клавише F1, в котором выводится подсказка по клавишам эмулятора, текст сместился. На XP было нормально

У меня Win XP, но несмотря на это, HELP отладчика эмулятора выводится некрасиво, с переносами строк. Это происходит, если задан другой размер фонтов в меню настройки "Свойства:Экран/Оформление/Дополнительно/Дополнительное_оформление". Что всегда и делается, ибо мизерными буковками при стандартной настройке легко испортить зрение. Сочетанием Control+G я, естественно, пользовался, т.к читать умею.

В отладчике эмулятора не хватает команды для пропуска текущей команды без её прогона. Так, понаставив команд HALT, мы останавливаемся в нужных точках, но чтобы пропустить команду HALT приходится вручную корректировать регистр PC. По HALT нужен автоматический вылет в отладчик, ведь в РК86 прерываний нет и не будет, иначе это просто завис. В моих эмуляторах есть команды STOP N. И при останове по STOP я вижу в какой точке произошёл останов, т.к отображется номер этой точки. А с голым HALT отлаживать программу гораздо тяжелее. Кстати почему при отображении окна отладчика клик на кнопке с красным кружком не работает? Это противоречит правилу - всё для удобства пользователя.

Почему при остановке по HALT содержимое PC показывает следующий адрес, а не адрес HALT. Подсветка жёлтым стоит на HALT, а в регистре PC другой адрес. По нажатию <F5> отладчик пытается выполнить именно команду HALT, а не следующую команду. Поэтому в стопе по HALT, в PC должен стоять адрес HALT, а не адрес следующей команды. Посмотрите другие отладчики.

Чтобы продолжить после HALT приходится набирать в PC тот же самый адрес, что уже и так стоит в PC. Это совсем нелогично. И дико раздражает необходимость вводить префикс '0x'. Это почти издевательство над пользователями. Когда голова забита мыслями о программе, то думать о префиксах '0x' некогда.

Как посмотреть дамп ОЗУ в окне дампа? В HELP-е ни слова не сказано как изменить адрес дампа. Поэтому дамп приходится смотреть как листинг, задавая его адрес по ^G. Или же полчаса ждать пока в ходе ролика дампа адрес дойдёт до 8400.

Как забить код HALT на NOP? Что это за отладчик, если модифицировать программу приходится в машинных кодах в окне дампа? И дампов должно быть два. Или же, - как только я кликну на регистр HL, то в окне дампа должен появиться дамп памяти куда указывает HL.

В ранее выложенной версии ПЗУ F800 для Z80 неотлаженные, т.е абсолютно дохлые подпрограммы F836/39. Поэтому выкладываю версию с уже исправленными подпрограммами. Отладчик от ИРИШИ также иной версии (в директиве L есть команды Z80).

Теперь надо решить проблему как две подпрограммы F836/39 с общим размером 75 байтов уместить в ПЗУ F800 для КР580, где с трудом удалось "уплющить" объём кода всего на десяток байтов. Если выкинуть директиву X, а директиву G упростить (убрав из неё зачатки отладчика, т.е возможность задания стоп-точки, что задаётся вторым параметром), то выигрыш составит ~70 байт. Надо выкинуть ещё какую-то директиву. Есть предложения? Видимо придётся выкинуть директиву R.

Сегодня вечером попробую сделать такое ПЗУ для КР580, а чуть позже выложу CP/M для РК86 из 1994, что работает в расширенном ОЗУ и имеет TPA почти 29К.

Vladimir_S
23.01.2017, 06:04
Куда ставить static RAM?
Динамическое ОЗУ убрать вообще нахрен.

Pyk
23.01.2017, 15:17
barsik, потестировал немного разные варианты Мониторов и РК-ДОС у себя в эмуляторе.

Что касается мониторов, то не заметил проблем ни с Z80-вариантом, ни с совместимым с Z80. На первый взгляд все работает. В то время как с оригинальным неадаптированным наблюдаются проблемы с выводом на экран.

РК-ДОС. Оригинальная версия, та, что была в журнале, никак не адаптированная, на первый взгляд работает нормально. Но это с включенной поддержкой обращения к памяти как к портам (там в коде повсюду IN/OUT, без этого даже пробовать бессмысленно). Что, кроме IN/OUT там такого использовалось, что делало ее несовместимой с Z80? Могу потестировать.
Скрин:
http://emu80.org/temp/rkdos/orig.png

Версия без использования Ready. В принципе, работает, но почему-то при выводе списка файлов не происходит возврат каретки и перевод строки, причем так с любыми Мониторами:
http://emu80.org/temp/rkdos/index.png

С версией же с использованием Ready все еще хуже: при попытке вывода содержимого директории по DIR, похоже, в начало экранной области попадают байты из диапазона F0-FF, и изображение срывается:
http://emu80.org/temp/rkdos/ready.png

До срыва изображения можно успеть заметить, что список файлов начинает выводиться так же, как и на предыдущем скриншоте - без переводов строки. Кстати, если DIR не делать, то запустить с дискеты что-то вполне можно.

P.S. Basic Plus не работает на Z80, кстати...

barsik
23.01.2017, 17:28
РК-ДОС. Оригинальная версия, та, что была в журнале

RK-DOS не было в журнале РАДИО, а там была только реклама МП "Лианозово", где можно было купить эту ДОС. В каком журнале и когда публиковали RK-DOS?


Что, кроме IN/OUT там такого использовалось, что делало ее несовместимой с Z80?

Чтобы увидеть, что изменено в исходниках RK-DOS сделайте в текстовом редакторе поиск '****' и слова 'W_INC'. Вообще все изменения помечены, как минимум так: '; *'. Т.е можно искать точку с запятой, пробел и звёздочку (астерикс).


Что касается мониторов, то не заметил проблем ни с Z80-вариантом, ни с совместимым с Z80

Вообще-то, если у Вас эмулируется базовая архитектура, то с этими ПЗУ должен быть какой-нибудь глюк.

Т.к в этих ПЗУ по WBOOT (а для РК86 WBOOT это и есть вход в CCP) делается инициализация доп.ППА F100 (все порты на вывод) и по адресу F102 (т.е в порт C) записывается число 2. Иначе в окне 8400...BFFF оказывается включённым основное ОЗУ и при попытке использовать ОЗУ 8400 портится программа в основном ОЗУ. Таким образом при записи на F100..F103 на базовом РК86 мы попадаем в ДМА ВТ57, что адресуется по адресам E000...FFFF. И ожидаю, что режим ПДП изменится и будет улёт.

Но проверить это реально не могу, т.к во-первых, у меня с 1993 стоит дешифратор на адрес F000, как делается при установке РК-КНГМД, а во-вторых, мой РК86 дохлый и заняться его ремонтом в ближайшее время не имею возможности и желания. Т.к жаль тратить время на РК86, - сейчас мне интереснее ИРИША, а РК86, сейчас я рассматриваю лишь как источник программ для ИРИШИ. Но через некоторое время я собираюсь поставить на РК86 процессор Z80 и подключить к нему дохлый винчестер (в смысле уже не пригодный для IBM PC).

Если в Вашем эмуляторе ещё нет "верхнего ОЗУ", просто забейте в исходнике ПЗУ F800 инициализацию доп.ППА, а ещё лучше просто верните адрес доп.ППА на стандартные A000. Тогда на реальном базовом РК86 без РК-КНГМД конфликта с ДМА ВТ57 не будет.

В эмуляторе переключение кусков в ОЗУ в окне 8400...BFFF сделать сложнее, но просто включить в этом окне некоммутируемое ОЗУ намного проще (именно так сделано в моём эмуляторе РК на PC, а в эмуляторе РК на ОРИОНЕ расширенного ОЗУ вообще нет, только 32К, т.к в ОРИОНЕ сам код эмулятора расположен в ОЗУ 8000...BFFF).


почему-то при выводе списка файлов не происходит возврат каретки и перевод строки

Вероятно, DIR дохлый из-за того, что я что-то нарушил при модификации. В версиях для ОРИОНА команда DIR была доработана, чтобы список файлов выдавался не в одну колонку (что идиотизм), а в 2 или 3 колонки (в зависимости от числа символов в строке), т.е чтобы можно было видеть все файлы, если их на диске больше, чем 24.

Я попозже странслирую те же версии с "родным" DIR-ом или посмотрю что там, подставив этот DIR в версию РК-ДОС для эмулятора РК86 на ОРИОНЕ (т.к моя версия эмулятора РК86 на PC не поддерживает РК-ДОС, точнее не было версии RK-DOS). В этом DIR должно было проверяться число символов в строке, т.к при разных драйверах RK-DOS м.быть 48/55/64 символов в строке, и в зависимости от этого в команде DIR менялось число колонок в которых выводится каталог.

Могу скинуть версию CP/M РК86 работающую с РК-КНГМД. Хотя она и для "верхнего ОЗУ". Так как для основного ОЗУ CP/M вообще не имеет смысла (т.к она сама занимает 10К, оставляя для программ всего ~17 кб). Но для эксперимента (в смысле проверки верности эмуляции РК-КНГМД в Вашем эмуляторе) её можно странслировать в основное ОЗУ.


Basic Plus не работает на Z80

Все бейсики производные от бэйсика МИКРО-80 на процессоре Z80 не работают. Хорошо бы, если бы кто-нибудь занялся этой проблемой. Что там надо менять знает только В.Пушков, который исправил бэйсик ОРИОНА для Z80. Меня бэйсик никогда не волновал, так что ничего не знаю на эту тему.

Pyk
23.01.2017, 22:29
barsik, итак, по-порядку:

1. Действительно, листинга РКДОС в журнале не было. Были лишь ссылки на нее и контроллер, предназначенный для работы с ней. Это моя неточность.

2. Смотрю, кроме обращений к портам там еще много где меняется INR M на LD A, (HL) \ INC A. Смысл последней замены от меня пока ускользает, видимо по каким-то причинам нужно, чтобы в памяти по адресу (HL) оставалось неизменное значение? За что вообще W_INC отвечает и при чем тут Z80, пока не понимаю; если поясните, буду благодарен. Как я уже писал, после разрешения обращения к устройствам как к портам я проблем в работе РКДОС не заметил, не вижу пока в чем может быть дело, и в исходнике - команд JP PE / JP PO там нет...

3. Тестировал, действительно, на базовой архитектуре. Глюков не заметил, так как в базовой архитектуре порт F102 попадает в порт канала 1 ПДП, который на РК не используется. Расширенную архитектуру готов сделать, можно только резюмировать, правильно ли я понял, что где находится?
- 8000-83FF - осн. ППА
- 8400-BFFF - доп./ основное ОЗУ, переключаемое битом D0 порта C дополительного ППА. если d0=0, то совпадает с основным ОЗУ по адресам 400-3FFF (не уверен, что правильно понял)
- C000-DFFF - вг75
- E000-EFFF - вт57 / РКДОС
- F100-F1FF - доп. ППА
- F200-F2FF - ПИТ
- F300-F3FF - порт переключения банок основного ОЗУ... тут не понял, совпадает ли вторая банка с тем, что отображается на 8400-BFFF когда D0=1 либо это самостоятельная область памяти?
- F800-FFFF - ПДП/ПЗУ
Не понял насчет переключения шрифтов битом d7. Вроде бы ранее было предложено менять шрифты атрибутом rvv? Альтернативный шрифт в бинарном виде пока недоступен? Да и основной, смотрю, тоже высотой 8 строк, а не 10...

4. От CP/M не откажусь, можно посмотреть. По возможности было бы неплохо еще готовые образы дисков для нее. Перекомпилировать для основного ОЗУ нет необходимости, добавить "верхнее" не проблема.

P.S. Кстати, формат .rk без синхробайта - как раз мой, а вот gam с ведущим синхробайтом был использован А. Деминым (aka begoon)...

АлександрПП
23.01.2017, 23:01
В каком журнале и когда публиковали RK-DOS?
Это не то?
https://yadi.sk/d/9_8GUIyQ3AXdQK

uart
24.01.2017, 01:06
Микроша круче. Она и с РК-ДОС совместима, и целиком область 8000-BFFF свободна. Шрифт опять же второй уже есть. Чего к РК-86 так привязались?

barsik
24.01.2017, 01:17
За что вообще W_INC отвечает и при чем тут Z80, пока не понимаю; если поясните, буду благодарен

W_INC (with INC) значит с командами INC (HL), когда HL адресуется в порт. INC (HL) делает считывание из порта и тут же запись в него. Это работает на РК86, но не всегда работает на ОРИОНЕ, даже с тактом всего в 2.5 МГЦ. А при Z80 в ОРИОНЕ такт всегда 5 МГЦ, неважно сделана схема ТУРБО с WAIT (142%) или ТУРБО-200%. ВВ55 не любит когда два обращения в порт происходят сразу друг за другом. Нужна пауза между обращениями. Поэтому была применена условная трансляция, чтобы иметь оба варианта. По этим же соображениям многие константы были увеличены вдвое.

8000...83FF - ППА клавиатуры
8400...BFFF - доп.ОЗУ, переключаемое битами D0...D5 порта C доп.ППА
C000...DFFF - ВГ75
E000...EFFF - ВТ57 / ПЗУ с RK-DOS или другим кодом
F000...F0FF - РК-КНГМД (факультативно)
F100...F1FF - доп.ППА (тот что называется D14)
F200...F2FF - ВИ53 (факультативно)
F800...FFFF - ПДП/ПЗУ с ROM-BIOS

То, какое ОЗУ прокачивается в окне 8400...BFFF, зависит от физической реализации. Может быть совмещённое ОЗУ и две разных банки ОЗУ (РУ5+62256). Самый дешевый вариант это РУ5 и прокачка в окне 4-х сегментов из неё размером по 16К (хотя доступно лишь 15К из 16-ти). При этом отображаемые в окне 8400 сегменты с номерами 0 и 1 оказываются из основного ОЗУ с адресов 0400...3FFF и 4400...7FFF. Можно сделать так, чтобы при РУ5-тых было только два сегмента, т.е управление только битом D0, тогда это получается как будто есть 2 банки ОЗУ, одна - основное ОЗУ, другое - оконное, хотя физически всё в одной банке РУ5-тых. Но при РУ7-мых такой трюк не проходит, т.к 32К не являются половиной от 256К.

Но если ОЗУ - несовмещённое, т.е состоит из двух разных банок ОЗУ, то в окне 8400...BFFF никак не включить основное ОЗУ из РУ5-тых, там всегда включается ОЗУ из 62256 или W24257. Это программно может определить программа и соответственно назначить начальный адрес эл.диска, так что эл.диск не конфликтует с основным ОЗУ при любой физической конструкции.

В эмуляторе надо реализовать большое ОЗУ. А значит, это совмещённое ОЗУ в 288К с прокачкой всех 288 Кб в окне 8400...BFFF. Т.е сегменты 0 и 1 в окне 8400 должны быть совмещены с основным ОЗУ 0...7FFF. 288К, а не 256К потому что, из-за недоступности в окне в каждом куске в 16К участка в 1 кб, чтобы логически иметь 256К, физически надо иметь 288К, т.е 4 банки по 64К + ещё пол-банки 32К. А на реальном РК на РУ7-мых подпрограммами F836/39 в последней 3-тьей банке доступно лишь 48К из 64К, т.е всего 32+30*7=242К, что чуть больше, чем 241К физически доступных в ОРИОНЕ на РУ7-мых..

На реальном РК86 с РУ7 при чтении сегмента с номером 16 будет читаться кусок основного ОЗУ 0400...3FFF, т.к физически банки 4...7, 8...11, 12...15 и т.д, это тоже самое, что банки 0...3, т.к управление выбором сегмента только 4-мя битами (в КП11 всего 4 разряда).

Регистр, для пробы установленный по адресу F300, в эмуляторе B2M должен был переключать целую полубанку в адресах 0...7FFF, по принципу цельнобанковой коммутации ОРИОНА. Т.о при РУ5-тых получалось две полубанки, а при РУ7 - 8 полубанок.

Никто такого реально никогда не имел. Хотя реализация при РУ5 самая простейшая из всех доработок. Если для коммутации использовать бит PC1 ППА клавиатуры, то расход деталей - кусок проволоки. На адрес A15 у мультиплексора КП11 просто заводится бит. Сюжет заключается в том, что тогда есть доступ ко всему ОЗУ без потерь. Минусом такой архитектуры является то, что только подпрограммой из ПЗУ F800 можно читать и писать в дополнительных полубанках.

Однако иметь ОЗУ выше 8000 важнее, чем потеря ОЗУ в 6% при окне не кратном 8 Кб. Делать и окно на 8400 и цельно полу-банковую коммутацию по 32К одновременно - слишком громоздко. Хотя при наличии 62256, что включена двумя страницами в окне 8400...BFFF, имеющуюся на плате банку РУ5 разумно использовать целиком как две полубанки (т.к куска проволоки никому не жалко). Что даёт в сумме 94 (32+32+30) кб.


Не понял насчёт переключения шрифтов битом D7. Вроде бы ранее было предложено менять шрифты атрибутом RVV?

Атрибут RVV это ReVerseVideo и его всегда применяют для инверсии знакомест. А атрибуты HGLT, GPA1, GPA2 (General Purpose Attribute) могут использоваться произвольно. Во-первых одного атрибута для фонтов - мало. Считайте сами. Как минимум, нужен фонт для режима графики 192*100, нужен фонт с инверсией, нужен фонт КОИ-8 и базовый фонт. Поэтому управлять фонтами атрибутами не надо. Пусть атрибуты идут на цвет.

Управление инверсией атрибутом неудобно, т.к не позволяет использовать встроенный в ПЗУ драйвер вывода символов. В то время как инверсия за счёт фонта на порядок удобнее и проще. И главное позволяет иметь инверсные окна с рамками, что даёт программам совсем другой вид. Я использовал в своё время атрибут RVV для инверсии, но отказался. Но сама переделка для RVV на моём РК сделана и она ничему не мешала. И её надо иметь, потому что инверсия фонтом неполноценная и пригодна только для системных программ. Т.к число символов сокращается вдвое с 128 до 64 и остаются только латинские буквы.


Альтернативный шрифт в бинарном виде пока недоступен? Да и основной, смотрю, тоже высотой 8 строк, а не 10

У меня на реальном РК86 фонт в РФ2, т.е всего 2К. Изначально на РК с 60 кб для CP/M был фонт с матрицей 8*10 (только ASCII), но не было никакой совместимости. Впоследствии, я догадался как расширить ОЗУ в РК совместимо, вернул архитектуру РК и стал использовать фонт 8*8 с инверсией. Потому что старые игры РК рассчитаны на фонт высотой в 8 точек. Т.е при 2-х кб ПЗУ можно иметь на выбор, - или фонт 8*10 или два фонта 8*8, один из которых с инверсией. Но для эмулятора нет проблемы иметь фонт и в 4К и 8К, так что такой выбор не стоит. Иметь фонт 8*10 удобно только если в РК есть много фонтов, один из которых - базовый и высотой в 8 точек, чтобы иметь совместимость.

Фонт с инверсией у меня есть в ПЗУ реального РК, надо лишь перенести на PC, есть также где-то в виде листинга в исходнике эмулятора. Но пока нечего смотреть с фонтом с инверсией, т.к это использовано только в НОРТОН-ах, а они только для ДОС.

С трудом сделал ROM-BIOS для КР580 с подпрограммами F836/39. После выкидывания директивы X и стоп точки в директиве G, освободилось почти 90 байт. За счёт этого удалось уместить подпрограммы F836/39 и ввести 2 новые команды. Доп.информация в начале листинга. Используйте этот ROM-BIOS в эмуляторе B2M. Версию ROM-BIOS для Z80 тоже обновлю, т.к нашёл способ выиграть ещё несколько байт. Обращайте внимание на число просмотров и на дату упаковки архива, а также даты в исходниках. Если число просмотров для давно выложенного RAR-файла равно 0, значит этот архив был обновлён, т.к всё устаревшее или дохлое в выложенных ранее RAR-файлах я удаляю или заменяю.

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


Микроша круче

Никто с этим спорить не может. Но "ещё не вечер"... Может быть и РК86 с дополнительным ОЗУ будет не хуже. Кстати, скажите, фонт в МИКРОШЕ более красивый 8*8 или её изготовители не додумались и оставили фонт такой же как в базовом РК - 6*8?


Чего вы так к РК86 привязались?

Люди пользуются реальной РК86, потому что её имеют. А в эмуляторе, потому что про РК86 что-то знают, а про МИКРОШУ и ПАРТНЁР никто ничего не знает, т.к это малораспространённые среди самодельщиков машины. Готовые промышленные ЭВМ покупали "отцы семейств", а радиолюбители РК86 делали себе сами. А так как на этом сайте больше радиолюбителей, то отсюда и "привязка" к РК86.

Хорошо, что Вы напомнили о МИКРОШЕ, т.к это связано с темой ПЗУ.

У меня программ от МИКРОШИ никогда не было, но в дистрибутиве EMU80 в 1999 я нашёл кучу программ от МИКРОШИ и убедился, что они не работают в моём эмуляторе РК86 на ОРИОНЕ, т.к в эмуляторе совсем иной код ПЗУ F800. Дело в том, что в МИКРОШЕ несовместимое с РК86 ПЗУ, даже по стандартным точкам. В частности WBOOT там не F86C, а F89D. Ну а внутренние точки вообще несовместимы, и также для МИКРОШИ полно глупых авторов, что лезут в нестантартные точки ПЗУ глубоко внутри ПЗУ F800. Идиотизм, ради экономии трёх байтов терять совместимсоть.

Обнаружил, что программы МИКРОШИ по большей части вообще наглые и неграмотные. Вместо того чтобы считать стек в HL и проверить старший байт, чтобы узнать ОЗУ 16К или 32К, там сдуру лезут в ПЗУ в то место где стоит команда LD SP,STACK и смотрят старший байт. Это идиотизм (что, кто-то не согласен?). Причём, т.к в РК86 и в МИКРОШЕ эти байты - в разных адресах, то сначала идиотским способом выясняется тип машины - это РК86 или МИКРОША?. Для чего смотрится куда идёт JMP с адреса F800. Если там стоит адрес F836, то это РК86, иначе - МИКРОША. Т.е программы МИКРОШИ сделанные универсальными, - "привязаны" к коду ПЗУ РК86.

Поэтому если использовать 100% совместимое, но не базовое ПЗУ F800, то программы МИКРОШИ успешно глюкаются на РК86. Исправление такой глупости конечно несложно, но неприятно. Теоретически, можно даже написать программку, которая ищет в коде программ МИКРОШИ команды которые считывают несколько популярных точек внутри ПЗУ F800, чтобы сделать вывод о том, МИКРОША это или РК86. Но вообще-то руки надо отрывать авторам таких программ. Всякий, кто "привязывается" к конкретному коду ПЗУ, - это явный "враг народа". Чтобы определить МИКРОША или РК86 надо тестировать где стоят В/У. Например, ППА легко определить. Также идентифицировать другие БИС несложно.

Vladimir_S
25.01.2017, 14:34
Мужики, прошу помощи. С Z80 контроллер FDD вообще не реагирует при запуске, что и понятно. Я родил схемку альтернативной дешифрации портов под Z80. Сейчас контроллер стартует, голова бегает и вроде как что то читает. Но пишет IN/OUT ERROR. Вот чувствую что дело не в схемотехнике, а в софте. Может копал кто и находил нестыковку софта с Z80?

uart
25.01.2017, 15:34
Vladimir_S, а прошивка РКДОС адаптирована под Z80?

Vladimir_S
25.01.2017, 15:41
а прошивка РКДОС адаптирована под Z80?
У меня на РКшке два процессора и мне нужно прошивку изменить так, что бы она работала и с Z80 и с ВМ85. Пока прошивка оригинальная.

barsik
25.01.2017, 15:46
Вот схема ADR.JPG

Посмотрел схему ADR.JPG. Сначала увидел /IORQ и решил, что Вы эксклюзивно включили РК-КНГМД в область В/У, т.е с ним можно работать ТОЛЬКО командами IN/OUT? Но RK-DOS и программы для неё работают командами LD, т.к в реальности РК-КНГМД включён в области памяти, а не в области В/У. Если так сделать, то придётся корректировать все программы, в том числе и RK-DOS. Причём эта коррекция очень сложна. Как заменить конструкцию вида LD A,(HL), где HL меняется по INC или ещё как-то. Сделать так, было бы "самовредительством". Т.к команды OUT Е.Седов применил лишь в тех местах, где идёт прямая адресация. Но в основном RK-DOS работает с РК-КНМД с помощью команда LD A,(HL) и LD (HL),A. К тому же Е.Седов использует некорректную команду INC (HL), когда HL указывает в ППА. Это единственная в мире попытка инкрементировать порт. ППА для этого не предназначен. Он нуждается в паузе между двумя командами записи в него (порядка 1 МКСЕК), оттого этот трюк работает только на скорости 1.77 МГЦ.

Однако в итоге, заметил, что выходы дешифратора портов объединяются на ЛИ1 с какими то сигналами. Предположительно, выборками портов в памяти. Такая конструкция должна работать.

Vladimir_S и Pyk. Вот пожалуйста. Самая близкая к оригиналу версия RK-DOS для Z80. Содержит полностью идентичный оригиналу код, за исключением того, что команды IN/OUT заменены на LD. Эта версия просто обязана работать. Если работает версия для КР580, то точно будет работать и эта версия.

NB: Если у Вас порт доп.ППА (D14) стоит не на F100, то Вам надо корректировать адрес порта на реальный. Иначе, если дешифратора нет, то адрес F100 эквивалентен адресу F000, где стоит ППА платы РК-КНГМД. А так как при старте ДОС эти порты программируются по разному, то в этом случае порт РК-КНГМД окажется запрограммированным, как порт принтера, и естественно RK-DOS работать не будет. В этой версии, я на всякий случай изменил адрес доп.ППА на оригинальный A000 и тем самым при работе RK-DOS ОЗУ по этому адресу будет портиться (поэтому не транслируйте RKDOS в этот адрес). Это справедливо для моих версий RK-DOS, версия Е.Седова вообще не инициализирует порт принтера (считая, что он уже инициализирован при старте монитора).

Здесь, чтобы выиграть 25 байтов, мне пришлось забить вывод на принтер. Теперь при печати на принтер вывод пойдёт на экран. Эта версия будет работать и при Z80 и при КР580.

Но! Сигнал READY здесь, как и в оригинале должен быть аппаратным. В крайнем случае закоротите READY на землю. Если будут сбои из-за медленной раскрутки, то и сигнал START закоротите на землю. Тогда колесо будет всегда вращаться, поэтому на сигнал START лучше поставить тумблер и отключать вращение колеса при ненадобности. Такая проблема возможна на старом DD-дисководе 5.25". Дисководы 3.5" и HD-5.25" (включённые перемычками в режим DD, чтобы скорость колеса была 300 об/мин) разгоняются быстро и т.к делается 10 попыток чтения перед признанием сектора дохлым, то на них всё работает.


почему-то при выводе списка файлов не происходит возврат каретки и перевод строки

Относительно версий RK-DOS для Z80 полученных из версий ОРИОНА и выложенных 3 дня назад, в которых у Вас не работала команда DIR. Я визуально просмотрел текст команды DIR и глюков не обнаружил. Зато обнаружил, что в исходнике файла с именем RKDOS сохранён оригинальный код DIR, выводящий в одну колонку. Чтобы получить версию с "родным" DIR, достаточно откомментировать оригинальный DIR и закомментировать DIR, что выводит файлы в 3 колонки. Чтобы проверить процедуру DIR я взял и целиком подставил её в версию RK-DOS работающую в моём эмуляторе РК86 на ОРИОНЕ. Там процедура чтения/записи сектора работает не с РК-КНГМД, а с ОЗУ ОРИОНА, но для DIR это без разницы. И всё работало. Так что в команде DIR ошибок нет.

При выводе DIR имена файлов выводятся на консоль, а возврат каретки выводится подпрограммой OUT_13, которая выводит код 13 в канал (т.е вызывается подпрограмма, адрес которой в векторе канала на вывод). Вывод кода 13 (что собственно перевод строки) в РК86 автоматически как бы дополняется кодом 10 (что и есть перевод строки), т.е производится переход на другую строку. Это идиотское свойство, которого нет в других компьютерах (для перехода в начало следующей строки там надо выводить на консоль и код ВК и код ПС). Чтобы проверить, что неверно инициализирован канал вывода, замените 'CALL OUT_13' на 'LD C,13 : CALL 0F809H' (только в процедуре DIR ) и посмотрите не будет ли выводиться возврат каретки в команде DIR. Впрочем, я это тоже сделал для Вас.

Прилагаю те же самые версии RK-DOS, но в них введена условная трансляция по ключу
DIRORG. Если этот флаг не нулевой, то транслируется полностью оригинальный DIR, иначе
DIR с выводом в 3 колонки.

Ключ NO_KAN заменяет в командах DIR вывод кода 13 в канал вывода - на вывод кода 13 на MCOUT (F809).

Vladimir_S
26.01.2017, 03:44
barsik, Завтра попробую.

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

Хотя теперь со схемой дешифрации портов IN/OUT в формате Z80 работает.

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


Но! Сигнал READY здесь, как и в оригинале должен быть аппаратным.
У меня несколько 3.5 дисководов с полноценным сигналом READY.

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


Вы что же включили РК-КНГМД в область В/У, т.е с ним можно работать ТОЛЬКО командами IN/OUT?
По схеме ведь видно, что по команде IN/OUT сигналом IORQ подключаются порты С(х), Е(х), и F(х). В остальное время через элементы 2И дешифрация стандартная. Т.е. например к ВГ75 можно обратится и OUT С8 и по адресу С008. И кстати, если бы обращение было ТОЛЬКО по IN/OUT, то комп бы вообще не работал в мониторе.

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

barsik, не работает и с Z80 и ВМ85.

barsik
26.01.2017, 17:27
RK-DOS, где лишь только команды OUT заменены на LD не работает ни с Z80 ни с с 8085.

Печально и удивительно.

Но очень плохо, что Вы не даёте подробной информации, о том, что и как. Какое поведение? Что-то же должно работать. Ну хотябы-бы колесо-то стартует? Готовка отползает на 32-тый трек (где каталог)? Я почти уверен, что не посадил ляпов при замене OUT на LD. Хотя про тот листинг, что был взят за исходник, ничего сказать не могу. Он "пришёл" из глубины веков... из 1993-94. Да и при хранении на древних носителях могло что-то произойти (после крушения винта в 2000, мне пришлось все файлы переносить на PC заново с древних носителей, и естественно, я уже не помнил как какие-то файлы получены, потому переносил, всё подряд, оттого так много дублирующих файлов). Оттого в моём архиве полно версий RK-DOS и в некоторых даже написано "Полный оригинал".

Замена кодов OUT отнимает 5 минут (перестановкой строк из версии, где это уже сделано). Так что я сейчас повторю замену кодов OUT с другим исходником RK-DOS и выложу, через час. Но чтобы уже и "комар не подкопался", то предварительно проверю исходный текст на полную идентичность с оригиналом. Точнее, нет. Я просто в эту версию введу условную трансляцию с ключом W_OUT (with OUT), т.е смогу реверсировать замену команд OUT, и получить, якобы, оригинал и полученный объектный код сверю с оригиналом Е.Седова.

А вообще-то в таких случаях надо писать специальный тест, где работоспособнать проверяется по пунктам. Тогда можно точно выяснить, что конкретно не работает. Это тоже несложно, если все подпрограммы работающие с железом есть по отдельности. А у меня как-ра это есть, т.к пришлось это сделать, когда делал CP/M на безе РК-КНГМД для ОРИОНА. Тогда тест не понадобился, т.к железо было отлажено ещё на РК86, а CP/M заработала сразу.

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

В какое ОЗУ Вы транслировали этот исходник. Я там поставил 6000, исходя из того, что Вы не будете использовать AUTOEXEC, т.к при открытии каждого файла уровень RAMTOP снижается, кажется, на 512+160 байтов. Попробуйте странслировать в другие адреса - на 5000, на 9000.

Vladimir_S
26.01.2017, 18:39
Но очень плохо, что Вы не даёте подробной информации, о том, что и как.
Оригинальная прошивка DOS с процессором ВМ85 уже не первый год работает без единого сбоя. С Z80 вроде как стартует, головка перемещается, движок крутит и светодиод загорается. Потом все останавливается и пишет I/O ERROR и выводится промт А> и на любую (даже безсмысленную) команду все повторяется как при старте. В прошивке с замененными IN/OUT то же самое уже с любым процессором.

barsik
26.01.2017, 20:04
Сделал реверсирование выложенного ранее исходника, т.е включил условную трансляцию с ключом W_OUT (with OUT). Теперь, если этот ключ поставить не 0, то транслируется версия с командами IN/OUT, т.е, якобы, полный оригинал.

И странслировал чтобы получить оригинал и сравнил с дампом полного оригинала, полученного в 1993 из МП "Лианозово". Оказалось, есть небольшие несовпадения в 3-х местах. Поэтому пришлось с этим разбираться, отчего и ушло больше времени, чем 1 час. Оказалось, что это всё-же по работе полный оригинал, а точнее оригинал с исправленными ошибками и глупостями.

Во-первых исправлена ошибка Е.Седова по адресу E778. Это явная ошибка (что ясно, если рассмотреть алгоритм), - у числа случайно стёрся суффикс H. Эта ошибка не сказывается при формате 5 секторов, но фатальна при другом формате.

Во-вторых в двух местах две команды переставлены местами. А именно там регистр B перед возвратом по RET загружается кодом ошибки. В этих двух местах загрузка B сделана раньше, а именно, перед CALL на подпрограмму (которая B не изменяет). Логично параметр загружать перед его использованием, что делает исходник понятным. Причём и у самого Е.Седова в остальных случаях так и сделано, но в этих двух местах логика нарушена и потому была исправлена (а в тексте оставлена строка "Полный оригинал", что и ввело меня спустя 20 лет в лишние хлопоты).

Так что Вы получили всё-же оригинал по работе. Но чтобы убрать все сомнения я опять переставил эти две команды и получился на самом деле полный оригинал. И если Вы утверждаете, что оригинал RK-DOS у Вас много лет успешно работал, то странслируйте эту версию с ключом W_OUT=1 (или не 0) и получите полный оригинал той RK-DOS, что 20 лет работала на моём РК86 на КР580. Она, предположительно должна работать и на 8085.

Про 8085 ничего не знаю. Что 8085 дублирует адреса порта при командах IN/OUT на старших адресах, также как КР580?

Сообщите, что Вы конкретно транслируете (куда), т.е как Вы проверяете исходник. И интересно как Вы пересылаете файлы из PC в РК86. У меня эта задача не была решена (эта задача не ставилась, т.к РК я практически с 1995 не пользовался, а диски РК86 прекрасно читал ОРИОН, у которого был обмен с PC и по проводной линии и через дискеты в форматах 800К ОРИОНА и 360К и 720К в формате MSDOS)

Скиньте мне пожалуйста код вашей версии RK-DOS, которая много лет работает на 8085, а также коды и других версий RK-DOS (имели хождение много версий RK-DOS, хотя 2.95, кажется, последняя от Е.Седова, но после него этим занимались авторы РК-МАКСИ и доработали её).

PS: Сейчас ключ W_OUT стоит равным 1, т.е транслируется полный оригинал, не для Z80. Для трансляции для Z80 поставьте этот ключ равным 0.

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

Ради интереса стал искать на сайте код RK-DOS. С трудом нашёл дистрибутив RK-DOS выложенный Cyb в теме "Подключение НГМД". И оказалось, что этот код один в один совпал с моим оригиналом из 1993 года.

Вчера я перепутал и выложил не ту версию монитора для КР580. Архив с именем 'ROM-BIOS КР580' это незаконченная версия, в которой подпрограммы F836/39 есть, но входов в них в таблице входов нет (т.е нет самих JMP-ов в начале ПЗУ - JMP RRAM и JMP WRAM на адресах F836 и F839). Вот та же самая версия, отличающаяся лишь тем, что эти входы теперь есть, а в остальном код идентичен, можете сравнить.

Pyk
26.01.2017, 22:48
barsik, не смогу, к сожалению, сегодня проверить :( Постараюсь отписаться завтра вечером.

Vladimir_S
27.01.2017, 04:02
интересно как Вы пересылаете файлы из PC в РК86.
Пересылаю через утилиту WRKWIN32. Причем на РКшке я не распаивал компаратор - прямо со звуковухи через 0.1Мкф на С4 ППА клавиатуры со 100% результатом. Но вот чем мне не нравятся средства разработки на РС - результат трансляции приходится считывать НЕХ редактором, копировать, потом создавать новый файл, писать туда скпированное с адреса 4, по адресу 0 вносить начало файла, по адресу 2 конец файла. Потом чтать его эмулятором (который естественно показывает ошибку без КС), потом директивой О под этим же именем делать запись уже готового к записи на РК файла. Меня очень раздражают все эти танцы с бубном. Если создаешь большой софт, то от этого не куда не денешься, но если не большой, то я предпочитаю тот же МИКРОН. Кстати в редакторе МИКРОНА я переделал директивы работы с магнитофоном на работу с FDD. По примеру как это сделано для работы с ОРДОС на Орионе.

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

REGW EQU DOPPPA+2 ; регистр который управляет окном 8400...BFFF - и это в 21 веке! Зачем для области памяти регистры управления? Память должна выбираться выставлением адреса процессором.

barsik
27.01.2017, 06:55
вот чем мне не нравятся средства разработки на РС - результат трансляции приходится считывать НЕХ редактором, копировать, создавать новый файл, писать туда скопированное с адреса 4, по адресу 0 вносить начало файла, по адресу 2 конец файла. Потом читать его в эмуляторе, узнавать КС, подставлять её в конец файла, а потом директивой О делать вывод уже готового к записи на РК файла.

Почему не подставлять адреса блока в исходнике операторами DEFB, и заботиться ни о чём не надо. А для редакции дампов не нужен HEX-редактор. Все программисты пользуются UltraEdit-ом, где всё, что надо программисту есть. Если лень узнавать КС за счёт загрузки в эмулятор, то это автоматизируется. За 15 минут можно написать программку, которая считывает GAM-файл, считает КС и записывает её в этот же файл. Я такую программку сделаю на досуге, чтобы удобнее было проверять программы в эмуляторе B2M, хотя меня КС мало волнуют.

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

По науке для РК86 надо ставить ВВ51. Только так можно получить скорость. Но мне это делать лениво, так что я просто сделаю скоростной протокол обмена через тот же порт принтера. Но теперь протокол не временнОй (что из-за PC очень тормозной). А по 4-м проводам с подтверждением. По одному проводу передаём 0, по другому 1. Когда РК считал, он ставит 0 на проводе READY. Тогда PC выдаёт очередной бит. При этом "рваность работы" как PC, так и РК86 нисколько не вредит. Для меня лучше 4 проволоки, чем пайка, т.к пайку и возню с железом не люблю. Думаю, что таким протоколом я достигну максимальной скорости, которую не достичь даже с ВВ51. Причём и экран РК гаснуть не будет.


регистр который управляет окном 8400...BFFF - и это в 21 веке! Зачем для области памяти регистры управления? Память должна выбираться выставлением адреса процессором.

Диспетчеры ОЗУ есть и в 386-той и даже в Пентиуме, виртуальная память всегда больше физической. И причём здесь текущий век, если используется процессор, что адресует лишь 64К, а ОЗУ - 1 мб. Memory Manager есть в Z180, но в случае РК86 и он бесполезен. Если изначально архитектура уродская, здесь никакой процессор не поможет. А вот диспетчер памяти поможет. Регистр управления в порту удобен, т.к позволяет его считывать и реальный РК имеет низкую нагрузочную способность, так что добавлять регистры ИР22 и нагружать шину мы не можем.

Непонятна критика. Предложите лучшее решение, как использовать в РК86 1 Мб ОЗУ. И как сделать так, чтобы на РК86 работала ДОС с объёмом кода 10-12 кб (плюс дисковые буфера), причём чтобы она могла грузить файлы размером до 7600. Вспомните, что говорил советский разведчик Штирлиц: "Критиковать и злобствовать - проще всего. А вот предложить конкретную программу действий - значительно сложнее".

Vladimir_S
27.01.2017, 08:56
Предложите лучшее решение, как использовать в РК86 1 Мб ОЗУ.
Не понял как будет использоваться память в 1Мб если речь идет о кусочке 8400-BFFF? Как память для хранения софта или как оперативная?

uart
27.01.2017, 08:57
Но вот чем мне не нравятся средства разработки на РС - результат трансляции приходится считывать НЕХ редактором, копировать, потом создавать новый файл, писать туда скпированное с адреса 4, по адресу 0 вносить начало файла, по адресу 2 конец файла. Потом чтать его эмулятором (который естественно показывает ошибку без КС), потом директивой О под этим же именем делать запись уже готового к записи на РК файла. Меня очень раздражают все эти танцы с бубном.
Так попросите автора своего эмулятора поддержать выходной файл вашего ассемблера. Я в своем так сделал, теперь выполняю директиву I и читаю из файла bin, потом O, одновременно читаю I на Апогее.

Vladimir_S
27.01.2017, 09:18
Так попросите автора своего эмулятора поддержать выходной файл вашего ассемблера.
А может там и без просьбы это есть, просто я не в курсе.
http://zx-pk.ru/threads/23087-prekrasnyj-assembler-kr580vm80a-russkie-bukvy.html

barsik
27.01.2017, 13:07
Не понял как будет использоваться память в 1Мб если речь идет о кусочке 8400...BFFF? Как память для хранения софта или как оперативная?

Ответов на этот вопрос много. Каждый использует так, как хочет и может. Моя же концепция использования доп.ОЗУ следующая. Мне доп.ОЗУ нужно не только для загрузки программ в ОЗУ выше 8000, но и для организации из доп.ОЗУ RAM-диска.

Область 8400...BFFF - это окно, через которое CPU получает доступ к памяти значительно больше его адресного пространства. Это архитектура с диспетчером памяти (в противовес архитектуре цельно банковой коммутации, которая тоже имеет свои плюсы).

Но одновремено, это не только окно, но и область где работают ДОС и все те программы, что не должны портить основное ОЗУ. В частности отладчики в этой области позволяют отлаживать любые программы РК86, тогда как отладчики в основном ОЗУ это делать не могут. Текстовый редактор и ассемблер могут иметь всё основное ОЗУ для хранения исходника. А Вы видели, что редактор с макро-ассемблером имеют размеры более 12 кб и если их загрузить в основное ОЗУ, то можно транслировать исходник лишь крошечного размера, что делает макроассемблер бессмысленным.

Программа в области 8400 может занимать своим кодом несколько сегментов по 15К. Но пока это не требуется. Я исхожу из того, что для работы программ из области 8400 отводится только один сегмент в 15 кб. Номер этого сегмента не важен (это первый сегмент, что не из основного ОЗУ). Если ОЗУ раздельные, то это сегмент 0, а если совмещённые, то 2 (тогда сегменты 0 и 1 это куски основного ОЗУ). ДОС при старте
грузится на 8400 и узнает номер текущего сегмента считывая байт из адреса F102. А затем все последующие сегменты использует под RAM-диск. Поэтому ROM-BIOS при сбросе должен инициализировать порт F102.

Из-за того, что для доступа к доп.ОЗУ используется тот же самый участок памяти (8400...BFFF), где работает ДОС, то возникают сложности программирования. Программа работающая в окне 8400 не может сама переключать ОЗУ в этом же окне (иначе при переключении, код самой программы исчезнет из адресного пространства и произойдёт улёт). Подпрограммы чтения/записи из доп.ОЗУ могут располагаться только в некоммутируемой памяти. Именно поэтому так необходимы две подпрограммы в ПЗУ позволяющие читать и писать в любое место ОЗУ, а не только в текущий сегмент, включённый в окне. В крайнем случае, некоммутируемый участок можно программно имитировать в коммутируемом ОЗУ.

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

Пока я стремился сделать эти подпрограммы аналогичными орионовским, т.к тогда мне не требуется переделывать модули VDISK.INC во всех ДОС. Но видимо для такой архитектуры это не оптимально. Процедуры в ПЗУ получились слишком медленными и огромного размера. Это для 256К, а для 1 мб размер кода увеличится. Изменив программный интерфейс (т.е идеологию) можно в те же 75 байт засунуть вместо обмена по 1 байту, обмен целым сектором в 512 байт. Что раза в 3-4 ускорит работу с эл.диском.

Есть ещё один способ организовать доступ к эл.диску при такой архитектуре. При этом даже не требуется менять базовое ПЗУ. Суть в следующем. В каждом сегменте в адресах BFC0...BFFF программно имитируется непереключаемый участок. Для этого в каждый сегмент (программой из основного ОЗУ) в эти адреса записывается один и тот же код. Тогда при включении в окне любого сегмента по адресам BFC0...BFFF остаётся один и тот же код. Т.е этот участок стал как бы некоммутируемым. Где и располагаются две подпрограммы чтения/записи байта или сектора.

ОЗУ размером больше чем 32+16 кб нужно только для ДОС, точнее для эл.диска ДОС. Если же ДОС имеет другой массовый носитель, например "micro-SD"-карточку в 2 Гб, или плату внешнего эл.диска 512К, то доп.ОЗУ более, чем 15 кб не нужно. Для ДОС 15 кб как раз достаточно. Это 10-12 кб для самой ДОС, а остальное под дисковые буфера и системные таблицы (т.к при больших дисках очень большие 'Allocation Tables', VTOC или FAT).

Pyk
27.01.2017, 23:24
barsik, где взять версии РК-ДОС, о которых говорится в этом сообщении?
http://zx-pk.ru/threads/20887-radio-86rk-na-z80.html?p=899021&viewfull=1#post899021

Появилась возможность посмотреть, но вложений уже не вижу :(

barsik
28.01.2017, 05:20
barsik, где взять версии РК-ДОС, о которых говорится в этом сообщении?
Появилась возможность посмотреть, но вложений уже не вижу

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

Переделал для РК86 RK-DOS от эмулятора ОРИОНА. Но пока не до конца. Проблема в том, чтобы найти Z80 команды и заменить их, чтобы работало на КР580. Для обычной программы, т.е в основном ОЗУ - это не проблема. Я запускаю её в своём эмуляторе РК86 на ОРИОНЕ, и если обнаруживается команда Z80, то происходит останов и выход в отладчик эмулятора. Где я смотрю адрес, далее нахожу в листинге трансляции это место и затем исправляю Z80 команду в исходнике. Отчего переделка Z80 --> КР580 происходит быстро.

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

Поэтому пока версия RK-DOS для ОЗУ работает в эмуляторе B2M только с конфигом для Z80. Переделка программ с Z80 на КР580 станет проблемой, если нет эмулятора со свойством отлавливать Z80-команды. Лишний раз доказывает, что надо иметь собственный эмулятор. Полагаться на чужие эмуляторы неудобно.

Но зато увидел с какой скоростью работает электронный диск. Очень долго форматируется. И это ещё п/ри установленном в конфиге клоке CPU 1.77 МГЦ. Причём в чужих эмуляторах нет возможности на время форматирования программно включить эмулируемый такт 100 МГЦ. Хотя скорость чтения-записи файлов приемлемая.

Кстати, во всех конфигах РК86 эмулятора B2M надо заменить частоту клока с 1.77 МГЦ на 1.3. Реальная (эффективная) скорость РК86 - 1.3 МГЦ. 1.77 МГЦ - только с погашенным экраном.

Некоторые современные браузеры (монстрообразные по размеру и скорости работы) заметно тормозят эмулятор (любой). Я использую OPER-у. Если находиться в эмуляторе и одновременно использовать OPER-у, то прогон в эмуляторе тормозится. Это не особо важно, но реакция на клавиши становится плохой. В моём эмуляторе это не проблема, т.к есть настройка и можно сделать любую скорость CPU, хоть 100 МГЦ. Но в эмуляторе B2M скорость не регулируется. Поэтому приходится использовать старые, намного менее тормозные браузеры. Для такого случая я использую Mozilla Firefox пятилетней давности - он совсем не тормозит эмулятор.

Вообще-то грамотный эмулятор должен автонастраиваться на скорость. И желательно не только по его запуску, но и по сбросу. Т.к нагрузка процессора во временем меняется, а скорость прогона программ в эмуляторе не должна меняться.

b2m
28.01.2017, 20:52
А он, в режиме КР580, встретив Z80 команду, не останавливается, а программа просто улетает.
Эмуляция недокументированных кодов в точности соответствует реальному процессору ВМ80.


Вообще-то грамотный эмулятор должен автонастраиваться на скорость.
Эмулятор выполняет ровно столько тактов, сколько должно было выполниться за некоторый реальный промежуток времени. Но это при условии, что процессор успевает. Иначе будет пропуск тактов. Сделано не просто так: если процессор одноядерный и не успевает, то чтобы закрыть эмулятор, приходится долго ждать. По крайней мере такое было раньше на ХР - если процессор не успевал, то система практически была в ступоре.

Pyk
30.01.2017, 00:22
barsik, проверил последний вариант из "RKDOS Z80 и оригинал.rar". Как и следовало ожидать, он работает в эмуляторе без проблем.
Варианта с условной компиляцией по ключам DIRORG и NO_KAN я уже не нашел, пришлось комментировать и менять код. Результаты такие:
- если поменять DIR на оригинальный, все работает без проблем
- если поменять в 3-колоночном DIR вызовы OUT_13 в трех местах на вызов F809 с 13 в регистре C, то вывод происходит без переводов строк. Такое ощущение, что оно вообще не вызывается. Попробовал поменять 13 на другой символ - его нет в выводе. Доделаю отладчик - попробую посмотреть, в чем там дело, а пока разобраться проблематично.

barsik
31.01.2017, 12:04
Эмулятор B2M с конфигом для РУ7, предложенный B2M, не работает как следует.

Диспетчер ОЗУ в окне 8400...BFFF для РУ7 состоит из одной микросхемы КП11, на вход SEL которой заведён адрес A15 от КР580. Такой диспетчер памяти физически работает так.

При обращении CPU к памяти ниже 8000 с помощью КП11 на адреса памяти A15,A16,A17 подаётся 0, а на адрес памяти A14 подаётся A14 от КР580. Этим в адресах 0...7FFF включается самый младший кусок ОЗУ в 32К, образуя основное базовое ОЗУ.

При обращении CPU к памяти выше 8000 с помощью КП11 на адреса памяти A14,A15,A16,A17 подаются разряды PC0...PC3 из ППА по адресу F100. Тем самым в адресах 8000...BFFF включается сегмент размером в 16К, чей номер записан в порт C ППА.

Из-за клавиатуры на 8000, из 16К сегмента видимы только 15К (отступ 400H). Таким образом при записи в ППА числа 0, в окне 8400...BFFF отображается участок 0400...3FFF базового ОЗУ, а при записи в ППА числа 1 в окне 8400...BFFF отображается участок 4400...7FFF базового ОЗУ.

Эмулятор B2M не включает в окне 8400...BFFF сегмент 1 при записи в ППА числа 01. Т.е основное ОЗУ 4400...7FFF в окне 8400 не включается, сегмент не работает как надо. Этот сегмент оказывается как-бы из абстрактного ОЗУ, никак не связанного с общей памятью. Сегмент 00, т.е кусок ОЗУ 0400...3FFF прекрасно включается в окне 8400. А сегмент 01 не включается.

Более того, старшая половина расширенного ОЗУ вообще не работает. Мне пришлось потратить уйму времени и написать кучу тестов, чтобы понять почему программы не работают в эмуляторе так, как следует.

Вот что стоит в конфиге предложенном B2M:



mem1 : Memory {
size=40000
frame[0].size=8000
frame[0].page=DOPPPA.portC[0-3]
}


Ошибка в том, что шаг управления памятью здесь равен 8000, а надо 4000.

А вот как надо, чтобы получить то, что требовалось:



mem1 : Memory {
size=40000
frame[0].size=4000
frame[0].page=DOPPPA.portC[0-3]
}


Чтобы убедиться в вышеизложенном достаточно "поставить" в эмуляторе B2M базовое ПЗУ F800 (точнее любое ПЗУ, что не инициализирует порт F102 по WARM BOOT, чтобы можно было менять содержимое порта вручную), записать в F102 число 01, записать директивой M любое число на 4400H и убедиться, что оно не появилось в ячейке 8400. Затем поставьте исправленный конфиг и повторите эксперимент.

Прилагаю тест архитектуры, а также ПЗУ F800 (то же самое, что и раньше, но на 6 байтов больше свободных ячеек).