nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 19:31



Reply to topic  [ 219 posts ]  Go to page Previous  1 ... 3, 4, 5, 6, 7, 8, 9 ... 15  Next
Радио-86РК на 8088 (или 8086) 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22413
Location: Silicon Valley
Reply with quote
У меня как-то была мысль сделать Орион на 6502 и я как-нибудь к этой мысли вернусь... :roll:

_________________
:dj: https://mastodon.social/@Shaos


03 Jun 2018 15:34
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
У меня как-то была мысль сделать Орион на 6502 и я как-нибудь к этой мысли вернусь... :roll:

А у меня как-то была мысль сделать "Специалист" на 6502, :lol: и, возвращаясь, к этой мысли,
я думаю, что железку-то спаять нетрудно... а вот софт... :-?

_________________
iLavr


03 Jun 2018 16:06
Profile
Doomed

Joined: 12 Feb 2016 13:39
Posts: 463
Reply with quote
Post Re:
barsik wrote:
Ваше вложение скачал, BAT-файлом транслируется и создаётся MON.BIN размером в 8 кб (кстати, удобнее, если между строками BAT-файла вставлены строки 'pause', чтобы видеть результаты каждого этапа). В LST-файле видно, что на FF00 стоит FAR JMP на F800.

я по быстрому нашел файл для преобразования в bin который делает 8КБ, и по тому и выложил новый конфиг с 8КБ на bios-monitor
barsik wrote:
И кстати, обязательно FAR JMP ? Это лишние 2 байта? Я не подумал о сегментах и в первом варианте применил 3-х байтовый NEAR JMP. Не сработает ? Ведь адреса A16 ... A19 в минимальном включении не задействованы и 0FFFF0H (самый старший сегмент) тоже самое, что 00FFF0H (это в самом первом сегменте в начале памяти).

когда я собрал исходник с простым jmp то emu на нем вылетел, видимо сегментный регистр не проинициализирован, а как поведет себя реальный ЦП я не готов ответить.
barsik wrote:
Попробовал просто подставлять MON.BIN в каталог EMU/radio (соответственно указав каталог для поиска файла ПЗУ в Вашем конфиге). Но всё равно не получилось запустить и выйти в отладчик, эмулятор просто виснет при старте с чёрным экраном.

MON.BIN надо в каталог EMU/radio/8086, я же архив именно каталога 8086 выложил :) который надо распаковать в каталог EMU/radio...
и все запускается и шагается (запускать emu -D), хотя там опять с сегментными регистрами вопрос возникает, их нужно в ff00 проинициализировать или конфиг эмулятора поправить, дабы отразить копию ОЗУ и ПЗУ и в нулевом сегменте...

У меня тут еще вопрос возник к b2m, а на сколько достоверно реализована эмуляция отображения РК? те механизм: запрос от ВГ75 к ПДП - запрос шины от ПДП к ЦПУ(HOLD)- подтверждение шины от ЦПУ(HLDA)? у ВМ86 то эти цепи есть, но вот реализовано ли все это в эмуляторе?


03 Jun 2018 16:59
Profile
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Lavr wrote:
У 6502 шина также не уходит в Z-состояние...
Этого следовало ожидать, т.к 6502 в качестве дешёвого народного процессора делала почти та же команда инженеров, что разработала за год до этого 6800. Читал, что они, чтобы сократить цену сознательно убрали буфера с адресов, что и сократило на тысячу число транзисторов по сравнению с 6800.

Lavr wrote:
А у меня как-то была мысль сделать "Специалист" на 6502, и... думаю, что железку спаять нетрудно
Не так уж и просто сделать такую "железку".

Особенно, когда скорость CPU ниже скорости работы ОЗУ, которое предоставляет для доступа ограниченное по времени окно. Или когда скорость работы CPU намного выше скорости работы ОЗУ. Я обдумывал это и знаю как ставить 6502 с тактом 1 МГЦ в ОРИОН, где ОЗУ имеет такт RAS-CAS в 2.5 МГЦ.

Установка в Специалист или ОРИОН 6502 без-вэйт-овым способом (так же как он стоит в Apple-II) возможна только, если ставить скоростной КМОП 65C02 на клоке 2/2.5 МГЦ. А тормозной n-MOP 6502, что рассчитан только на 1 МГЦ, без WAIT не поставить. 6502 как раз удобен в этом плане (для синхронизации с видео), т.к в нём шина занята только пол периода клока, а во второй половине процессор делает внутренние операции и к шине не лезет (что и позволяет в это время видеоадаптеру читать экран).

При медленном или наоборот очень быстром CPU (да и вообще) проще просто наплевать на прозрачность ОЗУ и потерю 25...30 процентов скорости и ставить любой чуждый процессор асинхронно.

В Специалисте (и в ОРИОНЕ тоже) на время сдвига на видео выход одного экранного байта делается два обращения к ОЗУ. Потому можно просто чередовать период доступа к ОЗУ процессора и видеочасти. Т.е один период жёстко отдаётся видеочасти, второй доступен процессору.

Тогда, когда процессор лезет к ОЗУ взводится триггер устанавливающий неготовность READY. Процессору (также как и в ИРИШЕ) предоставляется первый же очередной период выделяемый процессору для доступа к ОЗУ.

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

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

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

Я именно так несинхронно в 1998 в виде эксперимента ставил Z80H на такте 11.5 МГЦ в ОРИОН, а намного раньше на таком же несинхронном принципе подключались мои текстовые адаптеры к процессорному ядру. Но вообще несинхронность невыгодна, т.к синхронное включение (даже если используются WAIT-ы) даёт намного большее быстродействие.

Так что как видите и в Специалист и ОРИОН всё-же можно поставить любой процессор, хотя и с большой потерей скорости. А вот при устновке чуждых процессоров в ИРИШУ или РК86 нет никаких проблем с синхронизацией с ОЗУ.


03 Jun 2018 17:50
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post Re:
barsik wrote:
Lavr wrote:
А у меня как-то была мысль сделать "Специалист" на 6502, и... думаю, что железку спаять нетрудно
Не так уж и просто сделать такую "железку".
Особенно, когда скорость CPU ниже скорости работы ОЗУ, которое предоставляет для доступа ограниченное по времени окно. Или когда скорость работы CPU намного выше скорости работы ОЗУ. Я обдумывал это и знаю как ставить 6502 с тактом 1 МГЦ в ОРИОН, где ОЗУ имеет такт RAS-CAS в 2.5 МГЦ..

Вполне несложно - вы просто не посмотрели ссылку. Я тоже всё обдумывал, поэтому не стал искать
раритетный 6502 с тактом 1 МГЦ, а приобрел более современный его вариант Rockwell: R65C02P2.
С ним большинства обдуманных вами проблем просто не существует.

_________________
iLavr


04 Jun 2018 07:23
Profile
Doomed

Joined: 12 Feb 2016 13:39
Posts: 463
Reply with quote
Вообщем убрав [ и ] где они не нужны и добавив их где они нужны получаем вот это:
Attachment:
RK8086.PNG
RK8086.PNG [ 8.58 KiB | Viewed 4838 times ]
:rotate:
во вложении исходник и конфиг


Attachments:
MON.zip [9 KiB]
Downloaded 273 times
04 Jun 2018 13:54
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22413
Location: Silicon Valley
Reply with quote
Lavr wrote:
barsik wrote:
Lavr wrote:
А у меня как-то была мысль сделать "Специалист" на 6502, и... думаю, что железку спаять нетрудно
Не так уж и просто сделать такую "железку".
Особенно, когда скорость CPU ниже скорости работы ОЗУ, которое предоставляет для доступа ограниченное по времени окно. Или когда скорость работы CPU намного выше скорости работы ОЗУ. Я обдумывал это и знаю как ставить 6502 с тактом 1 МГЦ в ОРИОН, где ОЗУ имеет такт RAS-CAS в 2.5 МГЦ..

Вполне несложно - вы просто не посмотрели ссылку. Я тоже всё обдумывал, поэтому не стал искать
раритетный 6502 с тактом 1 МГЦ, а приобрел более современный его вариант Rockwell: R65C02P2.
С ним большинства обдуманных вами проблем просто не существует.

Современные 6502 умеют 14 МГц - зачем оглядываться на прошлое? :roll:

_________________
:dj: https://mastodon.social/@Shaos


04 Jun 2018 22:07
Profile WWW
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post .
Выяснил почему не работала эмуляция 8086 с предложенным конфигом. Оказывается эмуляция CPU 8086 есть только в последних релизах EMU. Скачал майскую версию, - заработало.

Но ПЗУ ещё нужно отлаживать (и конфиг тоже). Рабочий сегмент должен быть с 0 (с начала памяти), регистры CS, DS, SS должны быть равны 0.

А программа EXE2ROM, похоже глючная (при неизвестных мне условиях даёт сдвиги начала кода, приходится вручную подгонять). И похоже, что есть и ошибки конверсии. Например загрузка HEX-параметров директивы в регистры не работает.

Жаль, что отладчик в эмуляторе не очень удобный и не рассчитанный на минимальную односегментную конфигурацию. Неудобно, что ни остановить с вылетом в отладчик командой HLT и не задать стоп точку из командной строки запуска EMU.

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

Большинство программистов пользуются UltraEdit-ом. Ничего лучше нет. Это редактор специально для программиста. Для удобного форматирования ставится моноширинный шрифт Lucida Console и OEM-кодировка (это по русски АЛЬТ-кодировка) и размер шрифта 16 или 17. Из UltraEdit можно транслировать и без BAT-файлов, прямо в редакторе, задав команды для компиляции и сразу же не выходя из редактора смотреть HEX-коды.
Shaos wrote:
Современные 6502 умеют 14 МГц - зачем оглядываться на прошлое?
Это по даташитам. Читал на иностранных и даже отечественных форумах о том, что якобы 65C02 разгоняется аж до 25 МГЦ. rw6hrm это делал. Хотя периферии для такой длительности маш.такта нет и потребуется для ППА, контроллера флопа и для ROM/RAM вводить кучу тактов WAIT. Так, что реальное быстродействие системы будет более, чем вдвое ниже 25 МГЦ.
Lavr wrote:
вы просто не посмотрели ссылку
Это не так, я вчера сразу же сходил по Вашей ссылке в тему "6502 в Специалисте" (и даже оставил там свой пост). Из темы узнал только, что Вам удалось достать 65C02 (кстати, если уж покупать новый проц совместимый с 6502, то разумнее брать 65802 или 65816). Но никакой схемы (или хотя бы её описания) как поставить 65C02 в Специалист не нашёл.

В принципе, установка "в лоб", аналогично установке Z80 в Специалист/Орион может быть и сработает. Но нельзя быть в этом уверенным, диаграммы основных сигналов разные. Пока не появится проверенной схемы утверждать, что установка 6502 очень проста, - не стОит.

Хотелось бы поставить 6502 именно на такте 1 МГЦ, т.к имею КНГМД от Apple-II и качественные эпловские 35-трековые дисководы на 140 кб (которые, кстати, на порядок надёжнее, чем современные) и сотни эпловских DD-дискет с просверленными в них индексными дырками (чтобы дискету можно было переворачивать на одностороннем дисководе, получая 140*2=280 кб на диск). А эпловский КНГМД и Apple-DOS могут работать только с процессором на такте 1 МГЦ (т.к КНГМД программный и всё привязано к такту 6502).
Тут более оптимизированная версия за счёт ролика экрана одной командой REP MOVSW, очистки экрана одной командой REP STOSW и замены вызовов CALL CMPDH на одну команду CMP BX,DX.


Last edited by barsik on 01 Oct 2019 03:25, edited 4 times in total.



05 Jun 2018 00:20
Profile
Doomed

Joined: 12 Feb 2016 13:39
Posts: 463
Reply with quote
barsik wrote:
Но ПЗУ ещё долго отлаживать (и конфиг тоже). Рабочий сегмент должен быть с 0 (с начала памяти), регистры CS, DS, SS должны быть равны 0.

А программа EXE2ROM, мало того, что глючная (при неизвестных условиях даёт сдвиги начала кода, приходится вручную подгонять), но главное приводит код к виду, когда CS установлен на начало ПЗУ. При этом вызывать стандартные входы ПЗУ можно только FAR вызовом, что не годится. CS должен стоять на нуле, чтобы входы в ПЗУ были доступны NEAR-вызовами. И похоже, что есть и ошибки конверсии. Например загрузка HEX-параметров директивы в регистры, похоже не работает.

в последнем выложенном конфиге сделано зеркалирование памяти на нулевой сегмент, в таком варианте FAR вызовы уже не нужны.
Скриншот я же сделал с работающей конфигурации.

barsik wrote:
Я не знаю как получить код для адреса F800 странслированный для CS=0. В EXE или COM-файле этого нет. Ну не вручную же глядя на листинг добавлять к адресам переходов число F800. Возможно макро ассемблер может давать чистый код, без MSDOS загрузчика (надо почитать документацию).

Ничего добавлять не надо, используйте мой конфиг.
Единственное нужно на метке YFFF0: сделать ORG 0fff0h, в таком варианте EXE2ROM будет более правильно работать, а глюки у нее есть, но пока нет лучшего варианта я ей пользуюсь.

barsik wrote:
PVV что за неудачным редактором Вы пользуетесь. Он губит форматирование текста начисто. Вместо табуляций вставляет 1 или 2 пробела. После этого надо час восстанавливать текст. Редактор не должен губить форматирование, тем более в тех строках, что не редактируются.

Как то не замечал проблем... в winXPпользуюсь встроенным редактором в Far, а в linux - mc.


05 Jun 2018 01:07
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Lavr wrote:
barsik wrote:
Не так уж и просто сделать такую "железку".
Особенно, когда скорость CPU ниже скорости работы ОЗУ, которое предоставляет для доступа ограниченное по времени окно. Или когда скорость работы CPU намного выше скорости работы ОЗУ. Я обдумывал это и знаю как ставить 6502 с тактом 1 МГЦ в ОРИОН, где ОЗУ имеет такт RAS-CAS в 2.5 МГЦ..
Вполне несложно - вы просто не посмотрели ссылку. Я тоже всё обдумывал, поэтому не стал искать
раритетный 6502 с тактом 1 МГЦ, а приобрел более современный его вариант Rockwell: R65C02P2.
С ним большинства обдуманных вами проблем просто не существует.
Современные 6502 умеют 14 МГц - зачем оглядываться на прошлое? :roll:

Ну я на прошлое как раз не оглядывался, как ты видишь, а действовал по принципу - подходящее
доступное - и побыстрее. Поэтому и приобрел 6 штук Rockwell R65C02P2 на Али.
В России они (все) так и не прижились: по каталогам их можно найти, но привозят их всё-равно "на заказ".



А поскольку заказывают они всё-равно там же, то я и решил заказать сам. :wink:

_________________
iLavr


05 Jun 2018 08:45
Profile
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Нашёл ошибку из-за которой регистры перед началом выполнения директив неверно загружались (загружались адресом ячеек PAR_HL, PAR_DE, PAR_BC, а не из самих этих ячеек), из-за чего все директивы исполнялись для адресов 7625, 7627, 7629, а не для тех, что указаны в команде. Ещё оптимизировал по размеру кода, теперь свободно 23 ячейки. Но всё-равно не хватает всего нескольких байтов, чтобы уместить доп.директиву DIR_K. Чуть позже найду недостающие байты.

Да. После дублирования портов в сегменте 0, работает и при JMP 0000:F836 (ранее работало только при JMP F000:F836, т.е только в старшем сегменте).

Второй ORG никак не влияет на сдвиги кода от EXE2ROM. Специально сделал условную трансляцию с ключом USEORG. Изменяйте этот ключ (в начале исходника) на 0 или не 0 и убедитесь, что сдвиги кода с адреса 1800 в обоих случаях одинаковы. Сдвиг кода зависит только от самого текста исходника, не знаю отчего конкретно.

Вообще второго ORG я всегда избегаю, потому, что при этом при генерации кода не проверяется затирание на этом адресе ранее странслированного кода. А как сделать условную проверку адреса в макро ассемблерах 8086 я не знаю. Т.е если предыдущий код слишком большой и занимает и область FFF0, то вставив ORG FFF0, Вы затрёте этот код. К тому же неизвестно сколько свободных байтов, а когда я заполняю пустое место сам байтами FF, то я знаю сколько места свободно, да и в дампе видно где код, а где пустое место. Да и для прошивки в ПЗУ пустое место надо заполнять FF, а не нулями.

Вместе с эмулятором исправленная версия здесь (достаточно запустить RUN.BAT или EMU.EXE (ключ -d не обязателен, когда код отлажен).

 "вопрос к знатокам"
Кто-нибудь ещё помнит макро-ассемблер для 8086 ?

Я программировал макро ассемблером М80, а в макро ассемблере для 86-го не знаю как сделать некоторые вещи. Например, этот ассемблер считает себя умнее программиста и не допускает арифметику меток, в частности вычитания числа/константы из адреса. Не даёт вычесть даже из одной метки другую метку. Например, в нормальном ассемблере я могу написать так:
Code:
A1      EQU     $
        ...
        программа
        ...
LENGTH  EQU     $-A1

что позволяет узнать число байтов между адресами или размер кода. Как это сделать в ассемблере MASM или TASM для процессоров x86. Выдаётся ошибка "Can't subtract dissimilar relative quantities".

Например, мне надо заполнить пустоту, чтобы нужный кусок кода оказался по конкретному адресу. На нормальном макро ассемблере это делается так:
Code:
if      $   le  0FFF0H
        rept    0FFF0H-$
          DB    255
        ENDM
  else
        if1
          .printx * Code over address FFF0 ! *
        endif
endif
        JMP     0000:XF800
Как сделать то же самое в MASM или TASM ? Только не надо советовать поставить ORG. Который при трансляции конечно разместит код на указанном месте. Но при этом не проверяется есть ли уже на этом месте ранее странслированный код. Потому применять второй ORG неудобно, надо всякий раз изучать листинг и контроллировать, что данное место свободно.


Last edited by barsik on 05 Jun 2018 22:15, edited 1 time in total.



05 Jun 2018 09:13
Profile
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Разобрался, почему EXE2ROM сдвигает код с адреса 1800. Обнаружил, что он это делает только, когда размер кода не достигает 2 кб минус 1. Т.е последним байтом сгенерированного кода при ORG F800 должен быть байт на адресе FFFE.

Не FFFF, т.к тогда уже макро ассемблер ругается, что пересечена граница сегмента. Что кстати ошибка макро ассемблера. Ошибка была бы, если бы код сгенерировался на адрес следующий за адресом FFFF, а ячейка FFFF ещё вполне в сегменте. Разработчики макро ассемблеров этого не узнали, т.к никто не пишет программы с размером сегмента кода ровно в 65536 байтов.

Таким образом это не EXE2ROM глючный. Просто у него такое свойство - он придвигает код к адресу FFFF. Кстати, лучше в конфиге EMU задать размер ПЗУ не в 8 кб, а в 4 кб и стартовать EXE2ROM с ключом /4. А вот размер ПЗУ всего в 2 кб EXE2ROM не поддерживает. Видимо, посчитали, что ПЗУ 2 кб в системе на 8086 это слишком мало.

Но ПЗУ всё ещё с глюками. Потому, что даже правильно подставив секцию с указанием МГ-точек перехвата, всё-равно загрузка с магнитофона не срабатывает. Возможно для 8086-го перехват МГ-точек не эмулируется. WAV тоже не грузится (но это хотя-бы понятно, т.к скорости разные, а константа не настроена).

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

В ближайшие дни попробую сконвертировать в коды 8086 самую маленькую РК-игру "Охота на уток", а далее игру ксоникс (ту, что размером 774H байт). Интересно также произвести сравнение быстродействия КР580 и 8086 при одинаковой частоте клока (на одинаковых программах естественно). Интересно, кто быстрее. У КР580 меньшее число тактов на команду, а в 8088 есть конвейер. Возможно, что при одинаковом такте они близки по быстродействию.

Да, кстати. Так как никто не сможет поставить 8086 в РК86, то разумно переименовать тему, убрав упоминание процессора 8086. Процессор 8086 можно поставить только в машину с 16-ти разрядной шиной или в компьютер в котором нет других активных БИС (типа ВТ57) работающих с шиной данных в 8 бит.


Last edited by barsik on 05 Jun 2018 22:20, edited 4 times in total.



05 Jun 2018 10:25
Profile
Doomed

Joined: 12 Feb 2016 13:39
Posts: 463
Reply with quote
Переименовывать тему не надо, надо 8086 прикручивать, суровыми нитками :).
У меня интерес именно к 8086, тк он есть в наличии, в отличии от 8088...
Перераспределить адресное пространство вполне имеет смысл, РОМ и все УВВ оставить в F0000h-..., а ОЗУ в 0h и доступно будет 64КБ. Положение экрана можно менять, настраивая ПДП.
На данный момент все это не столь принципиально, главное, что появился простой и компактный монитор(глюки, при наличии инструмента-эмулятора выловим, это уже видно).

Как по мне, можно выбросить все, что относится к работе с магнитофоном, вот и будет место, хотя если под ПЗУ выделить целый сегмент в 64КБ, то на размер кода можно сильно и не смотреть.

Я темой простого монитора давно интересуюсь, вот во вложении есть монитор, работающий на консольный вывод, и там есть интересные возможности и из него можно что-то заимствовать. Это проект, реализация 8086 на плис.

а для CPM-86 сколько ОЗУ надо? нет такой информации? :)


Attachments:
cpu86.zip [548.8 KiB]
Downloaded 249 times
05 Jun 2018 12:04
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
PVV wrote:
Переименовывать тему не надо, надо 8086 прикручивать, суровыми нитками :).
У меня интерес именно к 8086, тк он есть в наличии, в отличии от 8088...

Ну если только весь проект либо в ПЛИС, либо 8086+ПЛИС.
В противном случае, как мы вот тут увидели, обвеска 8086 довольно значительна.

Для идеологии Радио-86РК микропроцессор 8088 предпочтительнее, ибо он так и сделан был,
чтобы легко вписываться в 8-разрядные системы.

А с 8086 потом еще и возникнут аппаратные вопросы с переключением младшего/старшего байтов,
и аппаратно схему разопрет так, что возникнет мысль, а не делать ли, действительно, ХТ-совместимый
проект, раз уж напихали столько железа?...

В идеологию Радио-86РК микропроцессор 8086, на мой взгляд, вписывается довольно трудоёмко. :-?

_________________
iLavr


05 Jun 2018 12:31
Profile
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
PVV wrote:
надо 8086 прикручивать, суровыми нитками. У меня интерес именно к 8086, т.к он у меня есть в наличии
У меня тоже есть 8086 и он конечно лучше, т.к в 1.5 раза быстрее. Но 8086 из-за отсутствия 16-ти разрядного ПДП (может есть такой) не позволяет сохранить структуру экрана. Сравнительно просто можно получить только через-байтовую структуру экрана, экран при этом удвоенного размера.

Или надо делать отдельную 16-ти разрядную плату текстового адаптера, но это уже не будет РК, а главное, графические режимы РК туда не перенести, так что это нонсенс.

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

Остаётся только, оставив шину 8-ми разрядной, делать относительно сложный мультиплексор 16-ти разрядной шины в 8-ми разрядную, что тормознёт скорость 8086 до скорости 8088-го (так что тогда 8086 теряет всякий смысл). Получается, что имеет смысл делать, наоборот, демультиплексор шины для ПДП ВТ57, что я пока плохо представляю. И всё это сложно.

Впрочем, можно экран РК визуализировать на прерываниях. Тогда те программы, что нагло лезут в экран, пусть имеют экран в формате РК и где хотят. А по прерываниям 4-5 раз в секунду экран РК сливается для визуализации в отображаемый через-байтовый экран. Для этого достаточно всего 20-30 процентного запаса скорости. А при такте 8086 в 5 МГЦ его превосходство по скорсти будет примерно тройным (с учётом, что реальный такт РК всего 1.3 МГЦ).
PVV wrote:
Перераспределить адресное пространство вполне имеет смысл
Исходя из простоты реализации на имеющейся плате (чтобы сохранился реверс, т.е возможность всё вернуть, отсоединив от системного разьёма платку с 8088 и поставив КР580 в его панельку) можно перенести ППА клавиатуры с 8000 и ППА D14 с A000 куда-нибудь повыше C000, сделав сплошное ОЗУ 0...BFFF в 48 кб. Перенос ППА клавиатуры в данном случае не играет роли, т.к все программы от РК86 всё-равно надо перетранслировать, так что не проблема сменить в исходнике одну цифру.

Это я в том плане, что изначально в железе надо сделать только такой вариант с 48К ОЗУ. А когда всё будет работать в реале можно уже менять кардинально. Но эти варианты уже только для РУ7-мых. При РУ7 удобно для программ отдать сегмент 1 (т.е с отступом в 64К от начала РУ7-мых). Тогда когда адрес A16 равен 1, то дешифратор ИД7 блокируется и порты C000, E000 и даже ПЗУ исчезают, а вся память становится ОЗУ из сегмента 1. В отличие от КР580 для перегрузки данных в другую банку благодаря наличию регистра ES не требуется обязательного наличия некоммутируемого ПЗУ.

Когда ОЗУ всего 64К и все 16 сегментов по 64К совпадают, то меняя регистр CS можно выходы A16...A20 использовать как порт на вывод. Например, при одной банке РУ5-тых и попадании в неё всех сегментов в системе с сохранением адресов ВГ75 и ПДП, установив регистр CS=1000 (что делает адрес A16=1), можно сигналом A16 отключать порты C000 и E000, получая дополнительное ОЗУ на месте этих БИС.
PVV wrote:
Как по мне, можно выбросить все, что относится к работе с магнитофоном, вот и будет место, хотя, если под ПЗУ выделить целый сегмент в 64КБ, то на размер кода можно сильно и не смотреть.
Ну место в ПЗУ и так будет, если его поставить не 2 кб, а 4 кб или даже 8 кб. А магнитофон, по-крайней мере в эмуляторе, нужен. Иначе как грузить в эмулятор программы.

ПЗУ ещё далеко не отлажено. Потому что даже правильно подставив секцию с указанием МГ-точек перехвата всё-равно загрузка с магнитофона не срабатывает.
Code:
cas : tape-recorder {
  biproc[FB42-FC55]=rk
  boproc[FBEE-FC55]=rk
}
Это секция точек перехвата с адресами под данную конкретную версию ПЗУ. По идее, когда программа достигает этих точек (LDBYTE, WRBYTE), то должно открываться окно, где можно выбрать файл с расширение RKR. Но этого почему-то не происходит. Возможно для 8086-го это не эмулируется. WAV тоже не грузится (но это хотя-бы понятно, т.к скорости разные, а константа не подобрана).
PVV wrote:
Я темой простого монитора давно интересуюсь, вот во вложении есть монитор, работающий на консольный вывод, и там есть интересные возможности и из него можно что-то заимствовать.
Монитор это не проблема. Он пишется за всего несколько часов. Быстрее написать своё, чем разбираться в чужом. Чужие исходники конечно посмотрю.
PVV wrote:
а для CPM-86 сколько ОЗУ надо? нет такой информации ?
Это зависит от размера максимальной программы. CP/M-80 (точнее её BDOS+BIOS) обычно занимает менее 8 кб. Потому максимальный размер запускаемой программы получается вычитанием из размера ОЗУ размера BDOS+BIOS. И насколько я понимаю, BDOS+BIOS в MSDOS 1.0 или CP/M-86 1.0 вынесен за первый сегмент в 64К и интерфейс с ним - FAR-вызовами. Что даёт для программ 64К. В XT из 1981 года было всего 128 кб памяти. А вообще CP/M 1.0 работала на 16К. Оычно пишут, что минимум для CP/M 2.2 это 20 кб ОЗУ, что за вычетом 8 кб на нужды ОС позволяет запускать программы до 12 кб. А т.к крутые CP/M-компиляторы требующие TPA в 63.5 кб запускать не надо (т.к их просто нет), то для целей CP/M вполне хватит 32 или 48 кб.

Про CP/M-86 ничего не знаю. Но думаю, что она может работать и при 32 кб, т.к размер её BDOS+BIOS вряд-ли больше 16 кб. Читал, что MSDOS 1.0 имела размер всего 16 кб, а CP/M-86 явно не больше по объёму кода. Иметь CP/M-86 имеет смысл только если надо использовать отладчики, редакторы и компиляторы CP/M-86.


Last edited by barsik on 06 Jun 2018 00:33, edited 16 times in total.



05 Jun 2018 13:01
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 219 posts ]  Go to page Previous  1 ... 3, 4, 5, 6, 7, 8, 9 ... 15  Next

Who is online

Users browsing this forum: Bing [Bot] and 9 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.