Важная информация

User Tag List

Страница 21 из 32 ПерваяПервая ... 171819202122232425 ... ПоследняяПоследняя
Показано с 201 по 210 из 311

Тема: РАДИО-86РК на Z80

  1. #201
    Banned
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Изменил конфиг-файл согласно информации от 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 - альтернативный фонт с инверсией и нормальной псевдографикой. Предполагаю, что это тоже можно сделать без модификации самого эмулятора, лишь за счёт изменения конфиг-файла.

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

    Цитата Сообщение от Vladimir_S
    Цитата Сообщение от barsik
    Нет ли сбоев при программном переключении скорости?
    С чего бы вдруг сбои появятся?
    В первых платах ОРИОН 'СУПЕР-ТУРБО-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
    }
    Последний раз редактировалось barsik; 12.01.2017 в 07:36.

  2. #202
    Guru Аватар для Vladimir_S
    Регистрация
    12.12.2011
    Адрес
    г. Иркутск
    Сообщений
    2,507
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    19 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

  3. #203
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,846
    Спасибо Благодарностей отдано 
    83
    Спасибо Благодарностей получено 
    227
    Поблагодарили
    166 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

    Цитата Сообщение от barsik Посмотреть сообщение
    Как задать управляющий порт (адрес в ОЗУ) и управляющие биты в этом порту, которые задают конфигурацию памяти?
    В частности, мне надо, чтобы бит 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.

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

  4. #204
    Guru Аватар для Vladimir_S
    Регистрация
    12.12.2011
    Адрес
    г. Иркутск
    Сообщений
    2,507
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    19 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

    Из за одного символа в первой половине знакогенератора нужно перезалить из РК в Апогей.
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	rk_ap.jpg 
Просмотров:	204 
Размер:	58.9 Кб 
ID:	59407  

  5. #205
    Banned
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Разобрался почему ячейка 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 (типа подпрограммы для проигрывания мелодии, как в ИРИШЕ) или встроить загрузчик с какого-либо устройства внешней памяти.

    Цитата Сообщение от Vladimir-S
    Перетащил интерфейс пользователя, 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, которое единственное остаётся в базовом РК свободно для расширений.
    Последний раз редактировалось barsik; 21.01.2017 в 21:31.

  6. #206
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,846
    Спасибо Благодарностей отдано 
    83
    Спасибо Благодарностей получено 
    227
    Поблагодарили
    166 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от barsik Посмотреть сообщение
    Отладчик для Z80 в 4K не влезает
    А чем не устраивает отладчик самого эмулятора? Всё равно разработку проще в эмуляторе делать.

  7. #207
    Banned
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от B2M
    А чем не устраивает отладчик самого эмулятора? Всё равно разработку проще в эмуляторе делать
    Без сомнения в эмуляторе делать отладку намного удобнее, чем в реале. Наверно отладчик в эмуляторе 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. А Вам с навязчивой идеей, что "железо" надо эмулировать, надо тратить месяцы труда и трахаться с отладкой в реальном времени. Встройте в Ваш эмулятор интерфейс, хотя-бы чтение/запись сектора, и Вам уже никогда не придётся в будущем трахаться, чтобы проэмулировать какой-либо привод (контроллер дисковода, винчестера или флэш-карты). Тогда Вам уже не придётся адаптировать чужие ДОС, т.к это смогут делать сами пользователи Вашего эмулятора. А сейчас, для поддержки любого нового железа (привода) надо просить Вас что-то изменить в эмуляторе.
    Последний раз редактировалось barsik; 15.01.2017 в 01:34.

  8. #208
    Guru Аватар для Vladimir_S
    Регистрация
    12.12.2011
    Адрес
    г. Иркутск
    Сообщений
    2,507
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    19 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    Ошибка это потому, что пока доп.ППА не инициализирован (т.е в его РУС не записан управляющий байт) писать что-то в порты ППА бессмысленно.
    Принтер здесь ни причем и ошибки никакой нет. Да, если ППА интерфейса пользователя не инициализираван, то писать что то в порт С не имеет смысла. Но авторы предполагали, что при выполнении директивы R СЕ и ОЕ ПЗУ подключены к порту С. И тогда после выполнения директивы R запись FF в порт С очень даже логична.
    Цитата Сообщение от barsik Посмотреть сообщение
    Какие у Вас адреса для доп.ППА, ВИ53 и регистра режима?
    У ВИ53 - 801С-801F, У ДОС на SRAM (1Мб) - 8018-801В, запись в ТМ9 - 8014-8017 , FDOS - 8010-8013.

  9. #209
    Banned
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vladimir_S
    Принтер здесь ни причем и ошибки никакой нет
    Это ошибка. Хотя-бы потому, что если Вы правы, то директива 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-файл исправленным.
    Последний раз редактировалось barsik; 21.01.2017 в 21:33.

  10. #210
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,846
    Спасибо Благодарностей отдано 
    83
    Спасибо Благодарностей получено 
    227
    Поблагодарили
    166 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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


    Цитата Сообщение от barsik Посмотреть сообщение
    Непонятна строка

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

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

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

    Цитата Сообщение от barsik Посмотреть сообщение
    так и не разобрался пока как сделать в эмуляторе 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]

Страница 21 из 32 ПерваяПервая ... 171819202122232425 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Радио-86РК: Видеовыход
    от m.d. в разделе Радио-86РК
    Ответов: 13
    Последнее: 21.05.2015, 08:19
  2. Радио-86РК: По страницам журнала "Радио"
    от Viktor2312 в разделе Радио-86РК
    Ответов: 79
    Последнее: 13.02.2014, 08:34
  3. эмулятор радио-86рк
    от sergey2b в разделе Эмуляторы отечественных компьютеров
    Ответов: 4
    Последнее: 09.06.2011, 15:59
  4. Радио 86РК
    от Shnurkov в разделе Барахолка (архив)
    Ответов: 1
    Последнее: 02.01.2009, 12:52

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •