RUЭВМ
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
Апрель 2024
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930     

Календарь Календарь

Последние темы
» Вити больше нет!
автор bug19 Пн Фев 20 2023, 19:54

» Собираем оригинальный Орион 128
автор bug19 Пн Фев 20 2023, 19:47

» Проблема плющеного экрана ОРИОНА
автор kanzler Пн Ноя 28 2022, 12:05

» Орион 128 и его клоны возрождение 2019-2022 год
автор kanzler Пн Ноя 28 2022, 12:03

» Электроника КР-04. Информация, документы, фото.
автор kanzler Пн Ноя 28 2022, 12:02

» Новости форума
автор kanzler Пн Ноя 28 2022, 11:52

» Орион-128 НГМД запуск 2021 года
автор matrixplus Сб Сен 10 2022, 17:36

» ПЗУ F800 для РК86
автор ведущий_специалист Сб Сен 10 2022, 10:37

» Микропроцессорная лаборатория "Микролаб К580ИК80", УМК-80, УМПК-80 и др.
автор Электротехник Вт Июл 26 2022, 19:33

» Орион-128 SD карта в Орионе
автор matrixplus Чт Июн 02 2022, 09:00

» 7 Мая. День Радио!
автор Viktor2312 Чт Май 12 2022, 10:58

» Серия: Массовая радио библиотека. МРБ
автор Viktor2312 Ср Май 11 2022, 12:17

» Полезные книги
автор Viktor2312 Пн Май 09 2022, 15:07

» Орион 128 Стандарты портов и системной шины Х2
автор matrixplus Вс Май 08 2022, 23:08

» Орион-128 и Орион ПРО еще раз про блоки питания
автор matrixplus Вс Май 08 2022, 19:09

» Орион-128 Программаторы
автор matrixplus Вс Май 08 2022, 19:02

» Орион ПРО история сборки 2021 до 2022
автор matrixplus Вс Май 08 2022, 18:47

» Анонсы монет (New coin).
автор Viktor2312 Сб Май 07 2022, 23:11

» Хочу свой усилок для квартиры собрать не спеша
автор Viktor2312 Сб Май 07 2022, 19:33

» Амфитон 25у-002С
автор Viktor2312 Сб Май 07 2022, 09:38

» Майнер: T-Rex
автор Viktor2312 Вс Май 01 2022, 09:12

» GoWin. Изучение документации. SUG100-2.6E_Gowin Software User Guide. Среда разработки EDA.
автор Viktor2312 Пн Апр 25 2022, 01:01

» GoWin. Изучение документации. UG286-1.9.1E Gowin Clock User Guide.
автор Viktor2312 Сб Апр 23 2022, 18:22

» GoWin. Documentation Database. Device. GW2A.
автор Viktor2312 Ср Апр 20 2022, 14:08

» GOWIN AEC IP
автор Viktor2312 Ср Апр 20 2022, 12:08

Самые активные пользователи за месяц
Нет пользователей

Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск


Конфиги для эмулятора EMU80 V4

Перейти вниз

Конфиги для эмулятора EMU80 V4 Empty Конфиги для эмулятора EMU80 V4

Сообщение  barsik Чт Янв 09 2020, 08:49

1
Речь о эмуляторе EMU80 V4.277...292 написанном Pyk в 2017-2018 годах. После очень большой трудозатраты и сотен экспериментов мне удалось научиться изменять в нём конфиг-файл, что позволяет получить почти любую архитектуру бытового компьютера у которого экран и клавиатура одного из эмулируемых типов (в т.числе РК86, Специалист и ОРИОН). К сожалению, EMU80 пока не эмулирует переключение фонтов в РК86 (что резко снижает его ценность для написания новых программ для РК86) и промышленную ASCII-аппаратную клавиатуру типа 15ВВВ-97-006.

Хочу в этой теме выложить чрезвычайно ценную и никому (кроме самого автора Pyk) неизвестную информацию о том, как используя редактирование конфиг-файла изменять архитектуру компьютера эмулируемого эмулятором EMU80. Информация относится к версиям эмулятора 277...292. Т.к последующие после 292 релизы EMU80 не работают у меня на Win XP (и на них я проверить работоспособность конфигов не могу), а релизы ниже 277 не позволяют страничность ОЗУ и ПЗУ и не имеют прерываний (и потому практически бесполезны).

Как всем известно пока для ОС Windows есть только два наиболее приличных мульти-платформенных эмулятора, - EMU80 от Pyk и EMU от b2m. Они превосходят остальные, даже достаточно приличные тем, что являются скрипто-настраиваемыми, т.е позволяют путём описания архитектуры бытовой ЭВМ на процессоре КР580/8085/Z80 получить эмулятор практически любой ЭВМ с достаточно традиционной архитектурой и клавиатурой от РК86 (или Специалиста). Это очень полезное свойство позволяющее пользователю всего за пару минут изменив конфиг как бы написать свой эмулятор для своего конкретного железа.

Эмулятор EMU эмулирует бОльшее число платформ, т.к дополнительно поддерживает процессоры 6502 и 8088 и аппаратную ASCII-клавиатуру, а также, что очень важно для РК86, поддерживает включение альтернативного фонта. EMU80 тоже должен по идее поддерживать программную смену фонта, т.к в Микроше (если в ней запаять перемычку к PB7 запасного ППА) и в Партнёре фонты должны переключаться, но к сожалению по их конфигам невозможно понять как это делается и есть ли вообще в EMU80 настройка управления фонтом в конфиге (т.е может сразу встроено в эмуляцию платформы). Это существенно подрывает ценность EMU80 при эмуляции РК86.

К сожалению, не всё так радужно. Проблема в том, что авторы этих эмуляторов по непонятным причинам (вероятно от жадности, из-за вредности или из-за лени) не написали инструкции по редактированию конфигов. По счастью, кое-какую ценную информацию я успел выведать у авторов этих эмуляторов до того, как меня ни за что выгнали с форума ZX-PK.ru, а затем анализируя конфиги разных бытовых ЭВМ, с архитектурой которых я знаком, и экспериментируя (путём редактирования конфига и прогона соответствующего теста) я разобрался как конфигами можно добавлять ОЗУ и ПЗУ и менять адреса портов. Ранее я мог я мог это делать для обоих эмуляторов.

К сожалению, после гибели винчестера я утратил все сделанные ранее конфиги, а нужную информацию частично позабыл. Потому сейчас мне приходится восстанавливать сведения и нужные конфиги. Конфиги EMU для ИРИШИ с доп.ОЗУ я восстановил без хлопот, т.к в этом же форуме полгода назад привёл все нужные сведения о редактировании конфига для ИРИШИ, чтобы добавить в неё банки.

В конфигах для Специалиста с доп.банками ОЗУ и страничным ПЗУ также кое-как удалось разобраться, т.к я выкладывал несколько таких ранних конфигов в одном форуме. Сейчас пытаюсь создать нужные конфиги для эмуляции РК86 с банками ОЗУ, расширенным ПЗУ и поддержкой дисковода (EMU не поддерживает дисковод в РК86, потому для этого пригоден только EMU80).

Сейчас для тренировки пытаюсь сделать CP/M с дисководом и эл.диском для РК86. CP/M без эл.диска с TPA 28 кб я уже сделал, т.к для этого и готовый исходник уже имелся (ещё из 1994) и конфиг с доп.ОЗУ A000...BFFF я составил за 15 секунд. Теперь надо добавить эл.диск из излишнего ОЗУ, т.к без эл.диска дискетная система неудобна (замучишься копировши на одном дисководе, точнее рука отсохнет, при копировании целой дискеты в нортоне надо 150 раз их переставлять, а если без нортона программкой DISCOPY, то всего 70 раз, т.к тогда буфер больше).

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

Итак, первым делом учимся как в РК86 добавить ПЗУ до 8 кб в окне ПЗУ и ВТ57 (E000...FFFF). Естественно, это можно сделать только в базовой версии РК86, т.е версии без РК-КНГМД, т.к он как раз и занимает участок E000...F7FF. В реале, т.к чип-селект ПЗУ на область E000...FFFF уже присутствует, то для расширения ПЗУ достаточно просто заменить панельку на 28-ми ногую (заведя на неё два доп.адреса A11 и A12). Если РК-КНГМД в конфиге есть, то просто закомментируйте символом # относящиеся к нему строки (их легко узнать по словам в которых есть три буквы 'fdc').

Замечу, что к сожалению (в отличие от EMU, где кодировка нормальная 8-ми битовая), конфиг EMU80 использует мудацкую 16-ти битовую кодировку Unicode, потому нормальные программистские редакторы для его редактирования непригоды и приходится пользовать убогим блокнотом Windows.

Сначала ПЗУ надо задать имя файла с кодом ПЗУ. Для этого строку начинающуюся с '@ROM =' редактируем так:

@ROM = "rk86/ROM_E000.DAT"

Естественно, в каталог RK86 надо поместить файл ROM_E000.DAT размером точно в 8 кб. Этот файл должен в старших двух килобайтах содержать код ПЗУ F800, а первые 3 байта, что будут читаться в адресах E000...E002 должны содержать команду JMP F800. Так как по сигналу "нач.пуск" прогон начинается с начала ПЗУ.

о стандартном ПЗУ F000:

Теперь расширяем объём самого ПЗУ до 8 кб. Сначала задаём новый размер. Для этого ищем секцию '#### Platform ####' и меняем в ней строку объявляющую ПЗУ и задающую его размер:

Rom rom = @ROM, 0x800

и меняем её вот так:

Rom rom = @ROM, 0x2000

Теперь изменим адреса области куда включается ПЗУ. Для этого ищем вот такую строку

addrSpace.readRange = &rom, 0xF800, 0xFFFF

и меняем в ней нач.адрес области, вот так:

addrSpace.readRange = &rom, 0xE000, 0xFFFF

В принципе, для эмулятора не обязательно, но для полного соответствия реалу надо ещё изменить стартовый адрес по сбросу. Ищем строку 'cpu.startAddr = 0xF800' и меняем в ней адрес старта на 0xE000. При этом в ПЗУ E000 первой командой обязательно должен стоять JMP F800.

И это всё. За 30 секунд мы увеличили ПЗУ в 4 раза. А в реале эта работала заняла бы не 30 секунд, а, как минимум, 30 минут каторжного труда на удаление старой панельки на 24 ноги и монтаж панельки на 28 ног. Кстати, если панельку 24 ноги нежелательно менять (например, чтобы осталась возможность использовать РФ2 для теста), то можно панельку на 28 ног впаять в имеющиеся и специально предназначенные для этого отверстия около разъёма ГРПМ-61 и соединить цепи проводами (у меня именно так сделано, т.к я расширял ОЗУ на статике 62256).

Подобным образом не проблема "нарисовать" себе ещё кучу ПЗУ, включая его в окнах портов отданых БИС. Только надо помнить, что некоторые программы лезут в порты командами IN/OUT, из-за чего окно доступа к БИС не может быть меньше 1 кб (а для РК-КНГМД нужно 2 кб, т.к туда некоторые программы лезут командой IN F4).

Теперь "нарисуем" себе дополнительное ОЗУ в 8 кб в области A000...BFFF. В реале на это можно поставить 6264 или, при РУ5-тых, просто "открыть" доступ к РУ5 в этом окне. Но т.к эту область в оригинале занимает запасное ППА D14, его надо куда-то переставить. Проще всего область ППА клавиатуры 8000...9FFF разбить дешифратором на участки и поиметь кучу дополнительных чип селектов. Всё равно, перенести ППА клавиатуры мы никуда не можем, т.к слишком много программ "лазают" туда внаглую.

Если применить ИД7, то получатся 8 окон по 1 кб. Но как указано выше РК-КНГМД с оригиналом RK-DOS сдуру требует окна доступа аж в 2 кб. Разделив область 8000...9FFF на всего 4 участка, получаем 4 чип-селекта с окном в 2 кб каждый. Тогда на 8800 поставим запасной ППА, что стоял на A000, и ещё останется 2 чип-селекта: например, один для флоповода, а второй для таймера 580 ВИ53.

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

addrSpace.range = &ppi1, 0x8000, 0x9FFF

меняем на:

addrSpace.range = &ppi1, 0x8000, 0x87FF

Теперь меняем адрес запасного ППА D14. Для этого строку

addrSpace.range = &ppi2, 0xA000, 0xBFFF

меняем на:

addrSpace.range = &ppi2, 0x8800, 0x8FFF

Теперь область A000...BFFF свободна и можно здесь включить доп.ОЗУ. Сначала создаём это ОЗУ в секции Platform добавив туда строку:

Ram ramH = 0x2000

Теперь задаём область адресов куда включается это доп.ОЗУ добавив строку:

addrSpace.range = &ramH, 0xA000, 0xBFFF

Получился чуть доработанный РК86 с расширенным до 8 кб ПЗУ и верхним 8 кб ОЗУ выше 8000, о котором программы не знают. Потому туда удобно грузить отладчик, текстов редактор, бейсик и DOS.
Теперь Вы можете запустить этот конфиг в эмуляторе и командами монитора проверить наличие доп.ОЗУ и ПЗУ.

Теперь переставим РК-КНГМД с адреса F000 на адрес 9000. Раскомментируйте строки про FDC. И измените адрес РК-КНГМД вот так:

#addrSpace.readRange = &fdcRom, 0xE000, 0xEFFF
addrSpace.range = &fdcAddrSpace, 0x9000, 0x97FF

Как видите строку про ПЗУ на плате РК-КНГМД не раскомментируем. Потому что теперь это ПЗУ заменено на большое ПЗУ 8 кб, и соответственно, чтобы использовать RK-DOS надо прошить в ПЗУ 2764 на адресах E000...EFFF код RK-DOS. Можно полный оригинал, лишь перетранслированный с адресом РК-КНГМД на 9000. Хотя теперь можно применить версию RK-DOS с объёмом до 6 кб. В частности можно применить RK-DOS с программной эмуляцией сигнала READY из сигнала INDEX, т.к все современные дисководы уже не формируют сигнал READY (он есть только у дисководов на 5.25"). При использовании ПЗУ из двух РФ2 на плате РК-КНГМД такая версия RK-DOS просто не умещается в 4 кб, а в 6 кб - влезает без проблем.

Таким образом ясно, что вставка дополнительных ОЗУ и ПЗУ в неиспользуемых дырках адресного пространства предельно проста и доступна и кенгуру. Значительно сложнее вводить страничность ОЗУ и ПЗУ, т.к это явно не следует из анализа конфига РК (казалось бы, что по конфигу ОРИОНА можно догадаться как коммутируются страницы ОЗУ, но увы, там это лишь для ОРИОНА: OrionPageSelector, для РК не заимствуешь).

В следующих постах я расскажу, как ввести в РК86 многостраничное ОЗУ коммутируемое в окне 8 кб (A000...BFFF) или цельно банковую коммутацию банок ОЗУ в окне основного ОЗУ 0...7FFF. Также для полноты удобства введём в РК страничность и для ПЗУ E000 в окне 8 кб (E000...FFFF) и добавим прерывания частотой 50 Гц (что упрощает адаптацию ZX-игр). Затем добавим в конфиг эмуляцию ROM-диска на 64 кб и обеспечим старт DOS хранящейся в ROM-диске по сбросу.


Последний раз редактировалось: barsik (Чт Янв 16 2020, 11:34), всего редактировалось 2 раз(а)
barsik
barsik
Ветеран

Сообщения : 1032
Дата регистрации : 2016-11-10
Откуда : Россия

Вернуться к началу Перейти вниз

Конфиги для эмулятора EMU80 V4 Empty введение страничного ПЗУ в эмуляцию РК86

Сообщение  barsik Вс Янв 12 2020, 14:31

2
Как видите, расширить ПЗУ до 8 кб в окне E000 крайне просто, это делается за 30 секунд и сообразить как это сделать, анализируя базовый конфиг, - легко. А вот ввести страничность в ПЗУ уже совсем не просто (т.к негде посмотреть аналогичное). И к тому же недавно обнаружились неприятные нюансы, как раз касающиеся EMU80 релиза 271, которая как раз и работает с РК-КНГМД.

Я уже раньше вводил страничное ПЗУ в эмуляцию Специалиста и ОРИОНА и с версией 292 проблем не имел, но когда вчера захотел ввести страничное ПЗУ, то получил облом. В итоге, дело оказалось в том, что страничность ПЗУ в эмулятор EMU80 введена только с версии 277, а я вынужденно пытался это сделать на версии 271 (т.к это последняя версия, где нормально эмулируется РК-КНГМД). Или в более ранних версиях это делается как-то иначе (т.е ключевые слова иные). В версиях 277...292 есть поддержка страничности, а в версиях ниже - есть поддержка РК-КНГМД. А версии, где есть и то и это - у меня пока нет.

Т.о в эмуляторе EMU можно иметь или страничность ПЗУ и ОЗУ или РК-КНГМД. Эмулятор от ОРИОНА (как это беспроблемно делается для Специалиста) в эмулятор РК86 (и реал) также не включить (т.к ПДП мешает работать ВГ93 с программным обменом). Для РК ещё возможен КНГМД от Партнёра (который сам использует ПДП), но он в EMU80 не эмулируется и п/программ для него у меня нет.

Вот как в версиях выше 271 вводится страничность ПЗУ. В вышеприведённый конфиг введём 4 страницы ПЗУ размером по 8 кб каждый в окне E000...FFFF, что потребует применения уже 27256 вместо 2764.

#@ROM = "rk86/ROM_E000.DAT"

@ROM_0 = "rk86/rom0.DAT"
@ROM_1 = "rk86/rom1.DAT"
@ROM_2 = "rk86/rom2.DAT"
@ROM_3 = "rk86/rom3.DAT"

#Rom rom =  @ROM, 0x2000

Rom rom0 = @ROM_0,0x2000
Rom rom1 = @ROM_1,0x2000
Rom rom2 = @ROM_2,0x2000
Rom rom3 = @ROM_3,0x2000

AddrSpaceMapper rom = 4
rom.page = 0, &rom0
rom.page = 1, &rom1
rom.page = 2, &rom2
rom.page = 3, &rom3

PageSelector romPageSelector
romPageSelector.mapper = &rom

Translator romSelectorTranslator = &romPageSelector
romSelectorTranslator.writeAndMask = 0x7

addrSpace.writeRange = &romSelectorTranslator, 0x8800, 0x8BFF

addrSpace.writeRange = &dma, 0xE000, 0xEFFF
addrSpace.readRange = &rom, 0xE000, 0xFFFF

Но это работает только в версиях EMU80 от 277 и выше. При попытке так ввести страницы ПЗУ в версии ниже 277, возникает вот такое обидное сообщение.

Переключение страниц ПЗУ размером в 8 кб в окне E000...FFFF тут управляется записью чисел 0...3 в адрес 8800...8BFF. Чип-селект /8800 возникает за счёт дешифратора ИД7 на область 8000. Добавив на плату РК регистр 1533ТМ9 (подав на C-вход ТМ9 объединённые на вентиле ЛЛ1 сигналы /WR и /8800, на входы ТМ9 - D0...D3 из ШД и сигнал сброса - на вход RESET ТМ9) и подав выходы ТМ9 на входы A11...A14 ПЗУ 27256 получаем страничное ПЗУ в окне 8 кб. 4 файла с кодами ПЗУ должны иметь размер точно в 8 кб, причём в коде ПЗУ rom0.DAT в начале должна стоять команда JMP F800.

Без конфликтов с имеющимися программами можно расширить окно ПЗУ до 15 кб в области C400...FFFF. И хранить там резидентный бейсик РК86 (самый большой бейсик РК86 занимает всего 8.75 кб). По данному образцу Вы можете в эмуляцию РК86 сами ввести себе и другие страницы ПЗУ в участках сегментов отведённых под адресацию БИС.

В случае, если по каким-то причинам нельзя перенести адрес РК-КНГМД из F000 на другое место, что мешает расширить нач.адрес окна ПЗУ до E000, то можно поиметь страничное ПЗУ F800 с окном всего в 2 кб. Из такого маленького окна программам работать неудобно, но в доп.страницах по 2 кб можно хранить резидентные программы, перегружая их при запуске в ОЗУ.

Управляющие порты на запись, такие как регистры типа ТМ9 управляющие режимом или архитектурой в РК удобно ставить в область F800...FFFF, т.к она занята только на чтение (естественно в реале нужна развязка ПДП от адреса F800, иначе при записи в F800 будет попадание в ПДП). Например, чтобы была преемственность по коммутации страниц ОЗУ между ОРИОНОМ, Специалистом и РК86 коммутировать банки удобно портом F900, как это делается в ОРИОНЕ. Тогда, например, драйверы эл.диска от ОРИОНА годятся для DOS для РК86.


Последний раз редактировалось: barsik (Вс Янв 12 2020, 18:01), всего редактировалось 1 раз(а)
barsik
barsik
Ветеран

Сообщения : 1032
Дата регистрации : 2016-11-10
Откуда : Россия

Вернуться к началу Перейти вниз

Конфиги для эмулятора EMU80 V4 Empty расширение ОЗУ в коммутируемом окне A000...BFFF

Сообщение  barsik Вс Янв 12 2020, 16:45

3
Страничность ОЗУ и ПЗУ поддерживают версии EMU80 V4 только начиная с релиза 277. Вот как добавляется доп.ОЗУ в конфиг.

ОЗУ, естественно, тоже следует расширять только совместимо. Недопустимо перекорёживание архитектуры. Порт клавитуры в РК86 всегда должен маячить посередине адресного пространства, как и было благородно задумано авторами РК86 (чтобы излишне не баловать советских людей и сократить хищения микросхем 565РУ3 на промышленных предприятиях МЭП и МПСС).

Таким образом есть только два основных способа добавить ОЗУ в РК86. Первый способ - это цельно банковая коммутация, второй способ - прокачка доп.ОЗУ в небольшом окне доступа. Каждый из этих способов имеет свои преимущества и назначение. Цельно банковая коммутация предполагает переключение сразу всего основного ОЗУ, в случае РК это участок 0...7FFF размером в 32 кб. При применении 565РУ5 по сути получается цельно полубанковая коммутация, т.к банок РУ5 на 32 кб, т.е отбраковки (типа 565 РУ5-Д1/Д2) уже давно не выпускают. Т.о уже на одной банке РУ5 можно поиметь две страницы ОЗУ по 32 кб. Цельно банковая коммутация позволяет иметь в доп.страницах большие фрагменты кода и полезна для огромных программ, что не влезают в 28 кб.

Однако ввиду того, что пока программ для РК86 с размером более 28 кб не так много, более удобно оконное расширение ОЗУ в одном крошечном окне размещённом вне основного ОЗУ, т.е где-то выше $8000. Прокачка доп.ОЗУ в маленьком окне не очень удобна для работы оттуда программ, но зато это намного удобнее для организации так называемого VDISK-а, виртуального диска из ОЗУ, который обычно называют эл.диском. Это конечно не диск (он скорее имеет сферическую форму в вакууме), но так называется потому, что заменяет реальный привод с физическими дисками, которые в свою очередь делятся на гибкие, жёсткие и полужёсткие (в 50-тые годы ещё использовались трубчатые).

По трудоёмкости в реале ввести 2-х страничную коммутацию из 565 РУ5 легче всего (делается без доп.микросхем с расходом ~15 см дорогой проволоки МГТФ-0.03). Ввести это в эмулятор EMU80 также легко, но у меня используется расширение ОЗУ на 64 кб на двух 62256, включённых в крошечном 8-ми килобайтовом окне A000...BFFF и кроме того такой вариант не требует перешивки ПЗУ F800 (т.к программа переключающая страницы ОЗУ может работать из основного ОЗУ). Потому для начала расширим ОЗУ вторым способом.

Одна 62256 (или две 62256 спаянных в 2 этажа) ставится в панельку запаянную в предусмотренные на базовой плате отверстия около разъёма ГРПМ-61 (и проводками соединяется с выводами панельки ПЗУ F800). Если руки не крюки, то такая доработка делается всего за полчаса и добавляет в РК86 эл.диск на 32 или 64 кб. Впоследствии использую эту панельку как разъём DIP-28 несложно подключить платку эл.диска и большего объёма.

В реале у меня добавлено всего 64 кб на двух 62256, но в эмуляторе я "нарисовал" себе ОЗУ 512 кб. Для удобства будем добавлять в конфиг 128 кб. Это 16 кусков по 8 кб. Сначала создаём само ОЗУ. Если в вашем конфиге уже ранее было задано некоммутируемое доп.ОЗУ A000...BFFF, то эту строку следует удалить как лишнюю (хотя вреда она не причинит, т.к в дальнейшем ссылок на это ОЗУ уже не будет).

Ram ram0  = 0xC000
Ram ram1  = 0xC000
Ram ram2  = 0xC000
Ram ram3  = 0xC000
Ram ram4  = 0xC000
Ram ram5  = 0xC000
Ram ram6  = 0xC000
Ram ram7  = 0xC000
Ram ram8  = 0xC000
Ram ram9  = 0xC000
Ram ram10 = 0xC000
Ram ram11 = 0xC000
Ram ram12 = 0xC000
Ram ram13 = 0xC000
Ram ram14 = 0xC000
Ram ram15 = 0xC000

Кстати, обратите внимание, что писать все слова надо точно так как приведено, т.е сохраняя тот же верхний/нижний регистр букв. Если написать ram, вместо Ram, то будет ошибка. Как видите это страницы по 48 кб, хотя включаться в окне A000 будут только 8 старших килобайт. Теперь "разработаем" узел коммутации страниц доп.ОЗУ. Управлять номером страницы в окне будем портом 8C00 (т.к чип-селект 8800 мы уже сдуру заняли на коммутацию страниц ПЗУ).

AddrSpaceMapper pages = 16
pages.page = 0,  &ram0
pages.page = 1,  &ram1
pages.page = 2,  &ram2
pages.page = 3,  &ram3
pages.page = 4,  &ram4
pages.page = 5,  &ram5
pages.page = 6,  &ram6
pages.page = 7,  &ram7
pages.page = 8,  &ram8
pages.page = 9,  &ram9
pages.page = 10,  &ram10
pages.page = 11,  &ram11
pages.page = 12,  &ram12
pages.page = 13,  &ram13
pages.page = 14,  &ram14
pages.page = 15,  &ram15

PageSelector pageSelector
pageSelector.mapper = &pages

Translator Xram_Select = &pageSelector
Xram_Select.writeAndMask = 0x0F

И в секции, где описываются все участки адресного пространства (т.е после строки AddrSpace addrSpace) вставляем участок с портом выбора страниц (8C00) и участок окна с доп ОЗУ (A000). Естественно, старый описатель для некоммутируемого ОЗУ A000...BFFF надо удалить (иначе будет конфликт и доп.ОЗУ не будет).

addrSpace.writeRange = &Xram_Select, 0x8C00, 0x8FFF
addrSpace.range = &pages, 0xA000, 0xBFFF

Теперь запустите эмулятор РК86 и командами монитора убедитесь, что доп.ОЗУ в окне A000...BFFF появилось и коммутируется. Для этого можно переключая окна командой M8C00<ВК> записью в порт коммутации страниц их номера (от 00 до 0F), в ячейку A000 в каждой из страниц записать её номер, а затем снова переключая банки (записью чисел в 8C00) убедится, что после переключения банок записанные в каждой банке байты сохраняются.

С таким конфигом можно запускать CP/M использующую как привод эл.диск из этого дополнительного ОЗУ.

Располагая вышеприведённой информацией для вас не составит особого труда самостоятельно сделать конфиг с цельно банковой коммутацией. Только для тестирования вам нужно ПЗУ F800 в котором есть подпрограммы F836/39 для чтения записи байтов из страниц доп.ОЗУ. Монитором РК86 в это ОЗУ не добраться, т.к при переключениях цельных страниц переключается и стек и происходит улёт. Потому переключать банки может только программа в ПЗУ или в ОЗУ выше 8000.

Кстати, чтобы командами монитора проверить коммутируемость окон ПЗУ с ROM-BIOS, надо файлы с кодами всех страниц ПЗУ сделать одинаковыми (с кодом ROM-BIOS конечно, а не со случайными байтами), а в последний байт каждой страницы (что читается по FFFF) записать номер этой страницы. Тогда по переключения монитором (что сам в этом же ПЗУ) улёта не будет и а вдресе FFFF можно посмотреть номер включённой банки ПЗУ (с ROM-BIOS).
barsik
barsik
Ветеран

Сообщения : 1032
Дата регистрации : 2016-11-10
Откуда : Россия

Вернуться к началу Перейти вниз

Конфиги для эмулятора EMU80 V4 Empty введение прерываний в EMU80

Сообщение  barsik Сб Янв 25 2020, 11:42

4
Хотя пока в Специалисте и РК86 прерывания 50 Герц в программах никто ещё не использовал, эмулятор EMU80 позволяет поиметь их за полсекунды. Достаточно вставить в конфиг в секции CPU несколько нижеприведённых строк.

Однако, т.к в программах встречается код EI, то в реальном изделии необходим аппаратный запрет для поступления импульсов на вход INT процессора. Замечу, что схемы узла прерываний для КР580 и Z80 совершенно разные. У них не только разные фронты, но и принцип фиксации и сброса запроса.

Для запрета импульсов на входе INT в РК86 разумно использовать бит D7 в единственном порте, что вводится в РК86 при расширении ОЗУ. Для совместимого варианта, чтобы это также позволяло иметь большое ПЗУ E000...FFFF, наиболее удобно введение доп.порта (упр.регистра) на вывод в области 8000...9FFF. Чтобы максимально полезно использовать дешифратор и дешифрируемый участок адресов, а именно ввести не только доп.порты, но и доп.ПЗУ 9000...9FFF (для отладчика, можно для DOS), на порты выделяем только область 8000...8FFF в 4 кб. И формируем из неё 4 чип-селекта.

8000...83FF - ППА клавиатуры (D20)
8400...87FF - ППА пользователя (D14), что в оригинале стояло на A000
8800...8BFF - системный регистр для управления доп памятью и прерыванием
8C00...8FFF - РК-КНГМД, винчестер или ППА для microSD интерфейса
9000...9FFF - область для расширений портов или ПЗУ с отладчиком

Системный регистр записываемый по 8800 удобно сделать на 1533 ТМ9 (тут именно 1533, т.к шина в РК и так на пределе перегрузки). Биты D0...D6 позволяют переключать 128 страниц доп.памяти. При размере окна страницы в 8 кб (A000...BFFF) это даёт 1 мб доп.ОЗУ. Этого вполне достаточно для VDISK-а. А если применять схему с цельно банковой коммутацией в окне 0...7FFF, то общая память может достигать 4 мб. И раз уж регистр есть, то нет смысла вводить ещё один ради прерываний.

Потому логика приводит нас к биту D7 порта 8800. По сбросу все биты устанавливаются в 0, что запрещает поступление импульсов на вход INT. А когда вдруг прерывания нужны, то достаточно по биту D7 в порт 8800 записать 1.

В Специалисте порт F800 используется для коммутации страниц ПЗУ, а бит D7 в этом порту занят на полное отключение ПЗУ (FULL RAM). Порт F900, как и в ОРИОНЕ, переключает банки по 62 кб (лишь в банке 0 - 48 кб, т.к там часть пространства занимает ПЗУ). А бит D7 в этом порту как раз и служит тем же целям - разрешает поступление импульсов 50 ГЦ на вход INT процессора.

Cpu580 cpu
PeriodicInt8080 periodicInt = &cpu, 7, 50

Translator intTranslator = &periodicInt
intTranslator.writeRShift = 7
intTranslator.writeAndMask = 0x1

Splitter Splitter8800
Splitter8800.device = &Xram_Select
Splitter8800.device = &intTranslator

# addrSpace.writeRange = &Xram_Select, 0x8800, 0x8BFF строка закомментируется
addrSpace.writeRange = Splitter8800, 0x8800, 0x8BFF

Как видите устройство Xram_Select, что ранее было включено по адресам 8800...8BFF теперь уже не включено в эту область памяти, т.к удаляется (выше эта строка показана закомментированной, чтобы было ясно вместо чего вставляется нижняя строка). Вместо устройства Xram_Select теперь коммутацию делает другой объект Splitter8800, включённый в эту область. И теперь не запись в область 8800, а именно устройство Splitter8800 управляет устройством Xram_Select служащим для переключения страниц доп.ОЗУ.

Для того, чтобы один порт мог (разными битами) управлять разными устройствами в эмуляторе вводится объект Splitter8800 типа Splitter. В его описании задаётся, что порт 8800 управляет устройством intTranslator и устройством Xram_Select. Из описания уже этих устройств видно, что памятью управляют биты D0...D3, а прерывания включает/выключает бит D7.

Для Z80 ничего не меняется, меняется лишь строка с типом CPU.
barsik
barsik
Ветеран

Сообщения : 1032
Дата регистрации : 2016-11-10
Откуда : Россия

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения