PDA

Просмотр полной версии : ПК8000 - Квазидиск



Mick
03.10.2008, 19:04
Итак, чуток поразмыслив, решил задать вопрос. Нужен ли он этой серии.
Если был оригинальный, то пока история об этом умалчивает. Посему будем разрабатывать новый, может быть опять портируем с Вектора(пока порты не смотрел). Я думал 512Кб для начала бы хватило. Так что высказываем свои мысли.

ZEman
03.10.2008, 19:47
Mick, если он был для такого компьютера то нужен хотябы для истории, а если не было то зачем и главное для КОГО его делать.

XobbiMan
03.10.2008, 20:20
Mick,
Cомневаюсь что он был, а вот контроллер с ОС и флоппи диском был 100%.
Возможно был как-то ДОС-Бейсик вместо CP/M.
Я, конечно, даже в глаза не видел, что такое Квазидиск (надо погуглить), но предствляю, что это многоразового записывания ППЗУ. Типо нынешняя флешка.

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


Оффтопик: Идеальный вариант конечно флешку подключить и сэмулировать катритж или cp/m с флопом. Но это будет уж огромная разработка.

Mick
03.10.2008, 20:59
Mick,
Cомневаюсь что он был, а вот контроллер с ОС и флоппи диском был 100%.
Возможно был как-то ДОС-Бейсик вместо CP/M.
Я, конечно, даже в глаза не видел, что такое Квазидиск (надо погуглить), но предствляю, что это многоразового записывания ППЗУ. Типо нынешняя флешка.


Квазидиск - это просто плата с памятью на борту(оперативка). Дополнительная память нужна для памятижрущих приложений.
Проще сказать расширение оперативной памяти(ОЗУ) допустим с 64кб до 512кб.

Многоразозаписывающее ППЗУ или флешка - это тоже объект для рассуждений, но в друго теме. :)

Добавлено через 4 минуты

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

Это возможно как AY, может и не было его. А почему бы не сделать.
Вопрос для кого, а скажи для кого на спек чего придумывают или для той же MSX - просто для себя и может быть для кого то еще. Про AY ты тоже говорил нафиг не нужен - а для эмуля уже интрошки и звуковую поддрежку уже делают. Пускай люди которые когда то эти машинки юзали, вспоминали да еще и могли может чем то помочь для сохранения истории, либо просто понастольгировать :)

Здесь вопрос скорее как бы его видели с точки зрения удобства юзания.
Можно сделать как в Спеке страницами по 16кб.
Ну и наконец - это творчество :)

ivagor
03.10.2008, 21:14
Mick, ты меня пугаешь

для эмуля уже интрошки и звуковую поддрежку уже делают
в смысле на реале (на той плате Sound Tracker которую ты сделал) не работает? Или просто не пробовал?

Mick
03.10.2008, 21:17
Mick, ты меня пугаешь

в смысле на реале (на той плате Sound Tracker которую ты сделал) не работает? Или просто не пробовал?

В смысле пугаешь? А как же рекомпиляция толстовесных игруль :)
Я вот хочу попробовать на вкус старую память от видюшек PCI. Заодно и польза будет :)

Плату я испытывал, свои примерчики работали. Твою интрошку вместе с тестом я попробую на выходных - не всегда есть свободное время.

ivagor
03.10.2008, 21:34
В смысле пугаешь?
Меня "испугали" слова в твоем посте, которые я подчеркнул при цитировании

для эмуля
я понял это так, что AYовые музоны/звучки только для эмулятора и на реале с ними что-то не так. Вроде порты те же, что и в проверенных тобой примерах, так что я надеюсь что все будет нормально не только в эмуле, но и на реале.

XobbiMan
03.10.2008, 22:51
Квазидиск - это просто плата с памятью на борту(оперативка). Дополнительная память нужна для памятижрущих приложений.
Проще сказать расширение оперативной памяти(ОЗУ) допустим с 64кб до 512кб.

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

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

Mick
04.10.2008, 08:50
Спасибо за объяснение.
А как тогда и где использовать квазидиск? Наверно сама программа должна быть написана так, чтобы она использовала переключала страницы памяти и так далее?

Да, именно так. Программа сама переключает станички, в которой расположены ее данные. Так например в Спектруме - проги сами рулят страницами по 16кб включая их в область памяти с C000h по FFFFh.

Mick
06.10.2008, 20:19
Итак я немного поразмыслив, будет два варианта схем:
1) на статической памяти с организацией 512кбx8 - она проще и отладится механизм работы;
2) на динамической памяти с организацией 256кбx16 - она сложнее, так как вводится схема регенерации. Так сказать мое изиыскание в области руления динамикой :)
Векторовская схема неподходит из-за отсутствия в ПК8000 выходов сигналов управления памяти.
Порт управления страницами по 16кб скорее всего будет Векторовский 10h и будет отражать номер страницы. :)

Вроде так :)

Error404
06.10.2008, 20:30
Итак я немного поразмыслив, будет два варианта схем:
1) на статической памяти с организацией 512кбx8 - она проще и отладится механизм работы;
2) на динамической памяти с организацией 256кбx16 - она сложнее, так как вводится схема регенерации. Так сказать мое изиыскание в области руления динамикой :)
Векторовская схема неподходит из-за отсутствия в ПК8000 выходов сигналов управления памяти.
Порт управления страницами по 16кб скорее всего будет Векторовский 10h и будет отражать номер страницы. :)

Вроде так :)

Должна быть возможность коммутировать целые страницы (по 64к). Т.е. отдельный диспетчер, либо 4 окна по 16к.

ivagor
06.10.2008, 20:35
Mick
На чем логику делать будешь (на дискретах или что-то более современном)?
Если на чем-то современном, то может одним портом не ограничиваться?

Mick
06.10.2008, 20:36
Должна быть возможность коммутировать целые страницы (по 64к). Т.е. отдельный диспетчер, либо 4 окна по 16к.

Это без переделки машины не получится. Доступ во вне имеется только два окна 4000h....7FFFh и 8000h....BFFFh. Вот и отсюда и пляшем. И то окна имеют выборку на два разных разъема. Первое окно выбирается на системном разъеме X1, а второе окно на разъеме X2. Причем второй разъем не распаян на Весте. Значит для совместимости надо подключать в первое окно. Но оно еще может быть занято картриджем(ПЗУ), тобишь необходимо ввести схему разрешения и запрещения доступа к квазидиску.

Добавлено через 1 минуту

Mick
На чем логику делать будешь (на дискретах или что-то более современном)?
Если на чем-то современном, то может одним портом не ограничиваться?

Статический вариант можно и на рассыпухе - там микрух мало выйдет, а на счет динамике - пока не думал.

ivagor
06.10.2008, 20:51
Может стоит три порта сделать?
1. Управляющий - определяет режим доступа - КД отключен/вкл для чтения/вкл для записи/вкл для записи и чтения
2. Номер страницы для чтения
3. Номер страницы для записи
Хотя в принципе под вкл/выкл можно порт не городить а выделить битик в портах под №2 и 3.
Теоретически можно было бы еще извраты со стеком в векторовском духе присобачить, т.е. отдельно задавать страницы для чтения/записи стеком (выводится ли на X1 сигнал STEC не смотрел).
Все вышеизложенное носит умозрительный характер, будут ли такие навороты кому-то нужны - это вопрос. Наверно стоит действительно ограничиться одним портом.

Mick
06.10.2008, 20:55
2. Номер страницы для чтения
3. Номер страницы для записи
Хотя в принципе под вкл/выкл можно порт не городить а выделить битик в портах под №2 и 3.
Теоретически можно было бы еще извраты со стеком в векторовском духе присобачить, т.е. отдельно задавать страницы для чтения/записи стеком (выводится ли на X1 сигнал STEC не смотрел).


А зачем разные порты на запись и чтение? И что это за извраты со стеком? Я что то немного не понял. :(
Сигнала стека нету - посему только блоки данных.

XobbiMan
06.10.2008, 21:07
Mick,
Смогут ли сосуществовать Квазидиск и AY?

Или скажем на квазидиске будет IDE-подобный разъем, шлейфом будет соединен с и одной стороны на X1, а с другой стороны на AY - реально ли так?
то есть схематично

X1
[:::::::::::::::::::]
||||||||||||||||| \
....................... - Shleif-Kabel
||||||||||||||||| /
[:::::::::::::::::::] IDE (IDC) \
<Kvazidisk> | Plata Kvazidisk
[:::::::::::::::::::] IDE (IDC) /
||||||||||||||||| \
....................... - Shleif-Kabel
||||||||||||||||| /
[::::::::::::::::::] \
<AY > | Plata AY
/

Тогда Веста с одним портом смогла бы тоже работать
(может тогда и ПЗУ с Досом и Квазидиск тоже подключить)

Если это технически решаемо.

Mick
06.10.2008, 21:16
Mick,
Смогут ли сосуществовать Квазидиск и AY?

Конечно смогут. Я потом нарисую совмещенную схему. :) Но пока исследование квазидиска. Квазидиск будет иметь тоже разъем под шлейф IDC40

Итак предварительное управление квазидиском порт 10h:
bit0 - виртуальный адрес A14 (32кб)
bit1 - виртуальный адрес A15 (64кб)
bit2 - виртуальный адрес A16 (128кб)
bit3 - виртуальный адрес A17 (256кб)
bit4 - виртуальный адрес A18 (512кб)
bit7 - разрешение доступа к квазидиску.
Изначально доступ будет запрещен и установлена 0 страница.
Всего 32 страницы.

ivagor
06.10.2008, 21:29
А зачем разные порты на запись и чтение?
Например, читаем из КД, записываем в основное ОЗУ и можно чтобы адреса были одинаковые. Например
org 8000h
lxi h,4000h
mov a,m ;прочитали из КД
mov m,a ;записали в основное ОЗУ
inx h
и т.д.
Можно тоже самое только наоборот - прочитали из ОЗУ и записали в КД.
Ну и появляется возможность копирования из одной страницы КД в другую.

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


И что это за извраты со стеком?
На векторе можно было отдельно задать номер "банка" КД для обращения к нему стеком. Т.е. те команды, которые читают или записывают в стек обращались к КД. Иногда это довольно удобная штука (например при выводе графики читаем с КД используя pop). Правда потом, когда на вектор начали ставить z80, который не генерирует STEC, это сигнал пришлось генерировать отлавливая коды команд обращения к стеку (примерно так, как в орионе в одном из адаптеров z80 отлавливали ei/di для извлечения звука).

Да, и еще вопрос - на X1 выведены только 14 адресных линий? Не совсем понял, почему отлавливается именно обращение к области 4000-7FFF? Может все-таки обращением к X1 считается обращение к области, для которой в порте 80h задано 01 (а для X2 - 10)? Просто если наружу выходят только 14 линий (это точно?), то все области для которых в 80h будет записано 01 будут "отзеркалены" (для X2 соответсвенно где 10).
Т.е. после
mvi a,01010101b
out 80h
содержимое областей 0000-3FFF, 4000-7FFF, 8000-BFFF, C000-FFFF будет одинаковым?

Просто я помню прокол с основным ПЗУ, когда я (вслед за b2m :)) считал что оно "отзеркалится" во любом окне, если задать 00 в соотетствующие биты порта 80h, а оказалось не так.

Mick
06.10.2008, 21:47
Например, читаем из КД, записываем в основное ОЗУ и можно чтобы адреса были одинаковые. Например
org 8000h
lxi h,4000h
mov a,m ;прочитали из КД
mov m,a ;записали в основное ОЗУ
inx h
и т.д.
Можно тоже самое только наоборот - прочитали из ОЗУ и записали в КД.
Ну и появляется возможность копирования из одной страницы КД в другую.

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


Это конечно хорошо, но опять же у нас главный сигнал - выбор слота, иначе мы не сможем заблокировать страницу ОЗУ в основной памяти.
Посему мы не можем копировать из одной страницы в другую находясь в квазидиске. Для этого нужен буте копировщик, который будет сидеть где нибудь в адресах F000h или других - смысл понятен надеюсь.
Разъем расширения - это не полная шина со всеми сигналами, а толко окно во вне.

ivagor
06.10.2008, 22:07
Это конечно хорошо, но опять же у нас главный сигнал - выбор слота, иначе мы не сможем заблокировать страницу ОЗУ в основной памяти.
Но ПЗУ же пишет в основное ОЗУ "под собой". Не знаю как насчет X1 и X2, но если рассматривать только внутреннее ПЗУ и ОЗУ, то запись 00 или 11 в соответствующее место 80h определяют подключение в соответствующую область страницы на чтение, на запись там всегда основное ОЗУ.
Не получится ли так, что с подключенной к X1 или X2 памяти можно только читать (известно, что ПЗУ туда подключали, а ОЗУ)?

XobbiMan
06.10.2008, 22:08
Разъем расширения - это не полная шина со всеми сигналами, а толко окно во вне.
ОФФТОПИК:
Тогда если там будет на расширении стоят ПЗУ с ДОСом, когда мы подключим по аналогии с Квазидиском, то сможем запустить этот ДОС? а когда он запуститься, чтобы он мог загружать в основную (илт какую нить другую) программы с дискеты ?
(я просто пытаюсь представить возможную картину работы ПЗУ с ДОСОМ и всем этим добром).

Mick
06.10.2008, 22:32
Не получится ли так, что с подключенной к X1 или X2 памяти можно только читать (известно, что ПЗУ туда подключали, а ОЗУ)?

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

Добавлено через 5 минут

ОФФТОПИК:
Тогда если там будет на расширении стоят ПЗУ с ДОСом, когда мы подключим по аналогии с Квазидиском, то сможем запустить этот ДОС? а когда он запуститься, чтобы он мог загружать в основную (илт какую нить другую) программы с дискеты ?
(я просто пытаюсь представить возможную картину работы ПЗУ с ДОСОМ и всем этим добром).

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

b2m
06.10.2008, 22:47
bit7 - разрешение доступа к квазидиску
А иначе - читаем из ПЗУ? Управляющая программа (ДОС) тоже ведь нужна.

Mick
07.10.2008, 06:58
А иначе - читаем из ПЗУ? Управляющая программа (ДОС) тоже ведь нужна.

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

b2m
07.10.2008, 11:03
Я к тому, что во внешнем картридже можно разместить не только квазидиск, но и квазидисковую ОС в ПЗУ. Т.е. подключаем картридж и после включения получаем ДОС.

Protom
07.10.2008, 13:16
Посему мы не можем копировать из одной страницы в другую находясь в квазидиске. Для этого нужен буте копировщик, который будет сидеть где нибудь в адресах F000h или других - смысл понятен надеюсь.

А если страница будет не 16КБ а 8КБ, то есть сразу две страници по 8КБ?
Конешо тогда будет нужно два порта, но будед можно видит ПЗУ и ОЗУ или
ОЗУ и ОЗУ или ПЗУ и ПЗУ :)

Mick
07.10.2008, 13:32
А если страница будет не 16КБ а 8КБ, то есть сразу две страници по 8КБ?
Конешо тогда будет нужно два порта, но будед можно видит ПЗУ и ОЗУ или
ОЗУ и ОЗУ или ПЗУ и ПЗУ :)

Если бить по 8кб, то страниц станет не 32 а 64. Думаю, что 8кб это нецелесообразно вводить. Но это мое мнение.

Дабы подлить масла в огонь кидаю схему(предварительная) квазидиска на статике. Мелочиться не стал - посему в максимальном размере 1024кб - 64 страницы :)
Итак порт управления 10h
bit0...5 - номера страниц(64);
bit6 - разрешение чтения;
bit7 - разрешение записи.

Доступ разделил из-за возникшей мысли слобать еще и ROM диск на порту 11h.

И еще мысль возникла. Чтобы не плодить кабели, думаю имеет смысл сделать кроссплату. И туда втыкать эти маленькие платки :)

Смотрим, высказываем свое мнение.

ivagor
07.10.2008, 14:01
Mick
Почему не стал использовать A14-A15?

Mick
07.10.2008, 15:08
Mick
Почему не стал использовать A14-A15?

Я подумал, что в них надобности нет, так как выбор окна является главным сигналом и формируется дешифратором на плате.

ivagor
07.10.2008, 15:16
Можешь тогда меня немного просветить - как я понимаю, SLTSL для X1 генерируется при обращении процессора к тем четвертям адресного пространства, для которых в порту 80h записано 01 - это не так?

b2m
07.10.2008, 15:44
А ведь ivagor прав, можно использовать хоть все 64Кб адресного пространства.

Mick
07.10.2008, 15:54
Можешь тогда меня немного просветить - как я понимаю, SLTSL для X1 генерируется при обращении процессора к тем четвертям адресного пространства, для которых в порту 80h записано 01 - это не так?

Давайте рассуждать вместе. Порт 80 указывает что мы выбираем, это всем понятно, либо внутреннюю память, либо что то внешнее.
Так берем схему компьютера и смотрим. За выбор сигнало отвечают две микрухи: D34 и D35.
D35 - это дешифратор ИД7, с ним все понятно он генерит сигналы выбора.
D34 - мультиплексор КП2. И вот на входы выбора 14 и 2(A0 и A1) приходят те самые адреса A14 и A15. Это говорит что мы уже выбираем окна по 16кб.

Или я что то недопонимаю, тогда пните меня, не стесняясь :)

ivagor
07.10.2008, 16:30
Я считаю, что в ПК8000 эта система работает очень похоже (за исключением expansion slotов, которых на ПК8000 нет, а на msx нет возможности писать в ОЗУ "под" ПЗУ), как на msx
11.10.2008 Удалил вложение
т.е. это система слотов (0-3) которые поделены на страницы (0-3).
Порт 80h в ПК8000 - это аналог порта A8h в msx.
Даже номера слотов совпадают: 00 - слот ПЗУ, 11 - слот ОЗУ.

Т.е. со слотами 01 и 10 обращение будет практически такое же, как и с внутренними слотами 00 и 11.
если задали в порт 80h 11100100b - это значит
0000-3FFFh - чтение из слота ПЗУ страница 0 (к слову, в остальных страницах ПЗУ сплошной FF) /запись в слот ОЗУ страница 0
4000-7FFFh - чтение/запись в слот X1 страница 1 (возможно параллельно будет запись в слот ОЗУ страница 1)
8000-BFFFh - чтение/запись в слот X2 страница 2 (возможно параллельно будет запись в слот ОЗУ страница 2)
C000-FFFFh - чтение/запись в слот ОЗУ страница 3

Другой пример. Пусть в порт 80h записано 01010111b
0000-3FFFh - чтение/запись в слот ОЗУ страница 0
4000-7FFFh - чтение/запись в слот X1 страница 1 (возможно параллельно будет запись в слот ОЗУ страница 1)
8000-BFFFh - чтение/запись в слот X1 страница 2 (возможно параллельно будет запись в слот ОЗУ страница 2)
C000-FFFFh - чтение/запись в слот X1 страница 3 (возможно параллельно будет запись в слот ОЗУ страница 3)

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

b2m
07.10.2008, 16:30
D34 - мультиплексор КП2. И вот на входы выбора 14 и 2(A0 и A1) приходят те самые адреса A14 и A15
Нет, на входы выбора (1,2 D35) приходят биты из порта 80h. Если в порт 80h заслать 55h (01010101b), то для всех 64Кб будет активным сигнал выбора X1.

Добавлено через 8 минут

возможно параллельно будет запись в слот ОЗУ
Нет, логика зашита в ПЛМ D17, и на её входах есть только выбор ОЗУ и выбор ПЗУ.

ivagor
07.10.2008, 16:46
Нет, логика зашита в ПЛМ D17, и на её входах есть только выбор ОЗУ и выбор ПЗУ.
Т.е. если в моем предыдущем посте убрать все вот это
(возможно ...
(возможно ...
то будет похоже на правду?

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

b2m
07.10.2008, 19:07
Т.е. ты уже раньше смотрел схему на эту тему?
Я особо не вникал, сначала и под обычное ПЗУ нельзя было писать, но тогда ПК8000 не работал :)

Mick
07.10.2008, 19:09
Нет, на входы выбора (1,2 D35) приходят биты из порта 80h. Если в порт 80h заслать 55h (01010101b), то для всех 64Кб будет активным сигнал выбора X1.


Хорошо, я понял. И теперь такой вопрос как будем рулить 64кб страницами. В смысле как это будет выглядеть с точки зрения программера.
А также будем оставлять сегментацию по 16кб

ivagor
07.10.2008, 19:35
Тут как min 2 варианта - один проще для реализации в железе, а другой более удобный для программера :)
1. Оставить все примерно как у тебя есть, но использовать A14-A15. Соответственно будет 64 банка по 64Кб (4 Мб, которые без HDD фиг когда нибудь заполнить), в каждом банке 4 страницы по 16 кб. Номер банка устанавливаем через 10h, а какие страницы из банка включены в адресное пространство рулим через 80h.
2. Установить 4 регистра (например доступные как порты 10h-13h), для выбора которых использовать многострадальные A14-A15, при этом в каждую из четырех областей (0000-3FFF,4000-7FFF,8000-BFFF,C000-FFFF) можно впечатать любую страницу (тогда max будет как в твоем варианте 1 Мб=64x16 кб).
номер страницы для 0000-3FFF - в 10h
номер страницы для 4000-7FFF - в 11h
номер страницы для 8000-BFFF - в 12h
номер страницы для C000-FFFF - в 13h
Ну и для того чтобы в соответствующей области памяти стал доступен КД надо не забыть задать 01 в соответствующем месте порта 80h.

Mick
07.10.2008, 20:33
Тут как min 2 варианта - один проще для реализации в железе, а другой более удобный для программера :)
1. Оставить все примерно как у тебя есть, но использовать A14-A15. Соответственно будет 64 банка по 64Кб (4 Мб, которые без HDD фиг когда нибудь заполнить), в каждом банке 4 страницы по 16 кб. Номер банка устанавливаем через 10h, а какие страницы из банка включены в адресное пространство рулим через 80h.
2. Установить 4 регистра (например доступные как порты 10h-13h), для выбора которых использовать многострадальные A14-A15, при этом в каждую из четырех областей (0000-3FFF,4000-7FFF,8000-BFFF,C000-FFFF) можно впечатать любую страницу (тогда max будет как в твоем варианте 1 Мб=64x16 кб).
номер страницы для 0000-3FFF - в 10h
номер страницы для 4000-7FFF - в 11h
номер страницы для 8000-BFFF - в 12h
номер страницы для C000-FFFF - в 13h
Ну и для того чтобы в соответствующей области памяти стал доступен КД надо не забыть задать 01 в соответствующем месте порта 80h.

Второй вариант ну очень большой. :)
В принципе можно нечто среднее попробовать. Уменьшаем число страниц
8х64кб =512кб, или 32х16кб=512кб. Тоесть урежем память, а в освободившейся бит 5 порта 10h устанавливаем признак мультиплексирования страниц(0-страница 16кб, 1-страница 64кб)
Итак в первом случае работает в листании 4 бит, а во втором он остается без участия. При включении любой 01 в порт 80h там будет отображаться страница в зависимости от режима. Вот нагнал :)
Пока правда не думал как это в железе будет :)

ivagor
07.10.2008, 20:39
Моя не понимай :confused_std:

Mick
07.10.2008, 21:03
Моя не понимай :confused_std:
Сорри, не туда ответил :(

По шагам порт 10h(других пока нет):
bit0 - номер страницы 16/64 кб
bit1 - номер страницы 16/64 кб
bit2 - номер страницы 16/64 кб
bit3 - номер страницы 16 кб
bit4 - номер страницы 16 кб
bit5 - выбор типа страниц 16/64 кб(0 -16,1 - 64)
bit6 - разрешение чтения.
bit7 - разрешение записи.

При записи в 5 бит порта 1 будет режим 64кб страниц и тогда можно записывать 55h в порт 80h. Доступ к целым 64кб страницам.
В режиме 16кб будет при записи в порт 80h комбинации 01h,04h,10h,40h - разрешение X1, то в выбраном окне будет отображаться страница в 16кб. Естетственно если попытаться записать в 80 порт разрешение сразу двум окнам, то доступ будет всеравно к одной емкостью 16кб.

Вроде бы сейчас получше. :)

ivagor
07.10.2008, 21:40
Моя теперь немного понимай :)
Режим 16Кб "зеркалирует" страницу с заданным номером во всех четырех областях (там где она нам нужна пишем 01 в 80h).
Но вопросы остались. Чтобы в обоих режимах (и 64 и 16) получить доступ ко всему КД нужно чтобы число страниц 16Кб было в 4 раза больше чем страниц 64Кб, в твоем варианте вроде только в 2 раза, т.е. при доступе 16Кб страницами потеряем половину емкости КД? Может пожертвовать отдельным разрешением чтения и записи и сделать вместо этого просто бит вкл/откл? Если я правильно понял, отключение - это чтобы потом можно было еще и внешний ROM подключить?
Предложение примерно такое
bit0 - номер страницы 16 кб
bit1 - номер страницы 16 кб
bit2 - номер страницы 16/64 кб
bit3 - номер страницы 16/64 кб
bit4 - номер страницы 16/64 кб
bit5 - номер страницы 16/64 кб
bit6 - выбор типа страниц 16/64 Кб
bit7 - вкл/откл КД
При таком раскладе 64Кб странице 0 соответствуют 16Кб страницы 0-3, 64Кб странице 4 соответствуют 16Кб страницы 4-7 и т.д.

Mick
07.10.2008, 21:50
Если я правильно понял, отключение - это чтобы потом можно было еще и внешний ROM подключить?


Да я уже думаю над FLASH ROM диском - другая тема. Тобишь КД надо отрубить.



При таком раскладе 64Кб странице 0 соответствуют 16Кб страницы 0-3, 64Кб странице 4 соответствуют 16Кб страницы 4-7 и т.д.

Собственно я не против такого расклада, если так удобнее.

В моем случае емкость диска не терялась 5 бит - 32 страницы по 16кб и 3 бита - 8 страниц по 64 кб. Возможно немного было коряво, поэтому и обсуждаем.

b2m
07.10.2008, 22:05
Собственно я не против такого расклада, если так удобнее.
Конечно удобнее, с точки зрения реализации. Ставишь мультиплексор (либо bit0 bit1, либо A14 A15) и всё.

ivagor
07.10.2008, 22:06
В моем случае емкость диска не терялась 5 бит - 32 страницы по 16кб и 3 бита - 8 страниц по 64 кб.
Похоже, пока я писал, ты успел откорректировать первоначальный вариант поста :), либо я обсчитался, мне показалось что было 4 бита на 64Кб страницы.

Mick
07.10.2008, 22:50
Похоже, пока я писал, ты успел откорректировать первоначальный вариант поста :), либо я обсчитался, мне показалось что было 4 бита на 64Кб страницы.

Я успел подкорректировать свою оплошность :)

Добавлено через 1 минуту

Конечно удобнее, с точки зрения реализации. Ставишь мультиплексор (либо bit0 bit1, либо A14 A15) и всё.

Вот и порешили, завтра постараюсь новый вариант выложить.

Mick
08.10.2008, 09:07
Вот обновленный вариант, смотрим высказываемся.

b2m
08.10.2008, 11:20
Дешифрация адреса порта сложновата, как мне кажется. Можно, наверное, сэкономить один корпус, если заменить 8И-НЕ на 8ИЛИ-НЕ (К155ЛД3) и использовать свободные элементы. Можно ещё 2 4ИЛИ-НЕ (К555ЛЕ3).

Mick
08.10.2008, 11:53
Дешифрация адреса порта сложновата, как мне кажется. Можно, наверное, сэкономить один корпус, если заменить 8И-НЕ на 8ИЛИ-НЕ (К155ЛД3) и использовать свободные элементы. Можно ещё 2 4ИЛИ-НЕ (К555ЛЕ3).

Можно сделать вообще на одной типа ATF15V8 или ATF22V10 вместе с мультиплексором. Я делал исходя из расспространнености логических элементов(которые у меня есть). :)

ivagor
08.10.2008, 11:58
И все-таки программать такую штуку не очень удобно.
Mick, может обдумаешь вариант, когда для хранения номеров страниц будут использоваться 4 полубайта из 155РУ2 (остальные 12 не будут использоваться)? Т.е. примерно как программирование палитры на векторе, задаем адрес (на векторе номер цвета, на ПК номер области памяти) и задаем содержимое (на векторе физический цвет, на ПК 8000 номер страницы).
Если использовать 1 РУ2 то можно задавать для каждого окна независимо одну из 16 страниц (т.е. общая емкость КД до 256 Кб). Если две, то до 4Мб.
Программирование примерно такое (пусть 10h - задание номера области которую программируем, например в двух младших битах, старший бит можно под отключение КД, порт 11h - номер страницы).
org 0C000h
mvi a,00000000b; работаем с областью 0000-3FFFh
out 10h
mvi a,0 ;номер страницы для области 0000-3FFFh
out 11h
mvi a,00000001b; работаем с областью 4000-7FFFh
out 10h
mvi a,1 ;номер страницы для области 4000-7FFFh
out 11h
mvi a,00000010b; работаем с областью 8000-BFFFh
out 10h
mvi a,3 ;номер страницы КД для области 8000-BFFFh
out 11h
mvi a,11010101b; ОЗУ-X1-X1-X1
out 80h

b2m
08.10.2008, 13:47
Можно сделать вообще на одной типа ATF15V8 или ATF22V10 вместе с мультиплексором. Я делал исходя из расспространнености логических элементов(которые у меня есть).
Если на одной, да распространённой, то логику лучше в ПЗУ-шку засунуть :)

Mick
08.10.2008, 13:47
И все-таки программать такую штуку не очень удобно.
Mick, может обдумаешь вариант, когда для хранения номеров страниц будут использоваться 4 полубайта из 155РУ2 (остальные 12 не будут использоваться)? Т.е. примерно как программирование палитры на векторе, задаем адрес (на векторе номер цвета, на ПК номер области памяти) и задаем содержимое (на векторе физический цвет, на ПК 8000 номер страницы).


Что то заморочно. А что же со страничностью в 64кб. Тут уж вас непонять совсем. А в чем преимущество.
Слобать можно все или почти все, но хотелось бы определиться.
Тут уж не про многозадачность ты там замышляешь, типа запускать с одного и того же адреса и каждая программа в своей странице :)

b2m
08.10.2008, 13:48
запускать с одного и того же адреса и каждая программа в своей странице
Ну да, и переключать по прерыванию :) Даёшь линукс на ПК8000!

Error404
08.10.2008, 15:50
Ну да, и переключать по прерыванию :) Даёшь линукс на ПК8000!

Линукс-неЛинукс, а UZIX можно было бы портировать. Я уже запланировал себе на будущее полугодие - буду для Ориона пытаться портировать. Сейчас пока читаю исходники - в принципе все понятно, и главное есть и компилятор (HiTech C глючный) и исходники - ядро, либы и приложения. Осталось только взять да сделать. :D И переключать задачи как раз за счет диспетчера по 64к (почему я сразу про него и заявил). Одна задача - одна страница. Переключение контекста - одной командой OUT (упрощая). :) Что не поместится в странички памяти - свопить на HDD.

b2m
08.10.2008, 16:05
переключать задачи как раз за счет диспетчера по 64к (почему я сразу про него и заявил). Одна задача - одна страница
1. Использовать целых 64к ОЗУ на одну задачу - расточительно.
2. В современных ОС есть такое понятие, как разделяемая библиотека (.so или .dll), было бы логично разместить код таких библиотек в отдельной странице (например те-же 16кб) и использовать для всех задач.
3. Необходимо также иметь возможность меж-процессных коммуникаций, т.е. необходимо подключать часть пространства другого процесса.

Error404
08.10.2008, 16:29
1. Использовать целых 64к ОЗУ на одну задачу - расточительно.
2. В современных ОС есть такое понятие, как разделяемая библиотека (.so или .dll), было бы логично разместить код таких библиотек в отдельной странице (например те-же 16кб) и использовать для всех задач.
3. Необходимо также иметь возможность меж-процессных коммуникаций, т.е. необходимо подключать часть пространства другого процесса.

UZIX не поддерживает общую память для коммуникации, только сигналы, а для них в сущности не нужно ничего. С другой стороны, я ни в коем случае не буду спорить: 4 одновременных окна по 16к это более гибко, чем одно на 64к. Главное, что результат достигается - 64 к на процесс и быстрое переключение (без LDIR-ов и аппаратного копирования массивов ОЗУ). Ограничивать процесс заведомо меньшим объемом - это плохо, т.к. процессор адресует 64к, и это минимум в который на С можно скомпилировать хоть какой-то функционал (порядка 2000 строк исходника - всего навсего), в меньший объем поместится разве что hello world. :)
Разделяемые библиотеки это безусловно хорошо, и было бы полезно, но сложно реализуемо, т.к. потребуется внедреж в компилятор, а на него нет исходников. Ну, это опять же если говорить про UZIX / HiTech C. Другое не рассматриваю, т.к. написать свое с нуля ИМХО нереально, по крайней мере для меня - будь то хоть ядро ОС, хоть компилятор ANSI C.

b2m
08.10.2008, 16:43
64к, и это минимум в который на С можно скомпилировать хоть какой-то функционал
Это всё потому, что библиотеки прицепляются. А если будет внешняя C RTL, то будет гораздо меньше.


Разделяемые библиотеки это безусловно хорошо, и было бы полезно, но сложно реализуемо, т.к. потребуется внедреж в компилятор
Абсолютно нет необходимости изменять компилятор. Главное, это чтобы он мог пристегнуть вместо реальной библиотеки заглушку, которая загрузит и свяжет внешнюю библиотеку. Т.е. чтобы вместо библиотеки прицеплялась куча JMP-ов.

Добавлено через 2 минуты

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

Error404
08.10.2008, 17:00
Не совсем понятно, как загружать новые задачи, если переключать полностью всё адресное пространство.

Нужен некий непереключаемый сегмент. В Орионе он есть - аппаратно не переключаются верхние 4к, в которых 3к ПЗУ+порты (ненужные в-общем то) и только 1 к испольуется для обеспечения связи страниц. На другой железке с независимыми страницами (например эхотаге), ничто не мешает диспетчером 16к проинициализировать 64к-страницы - записать в верхний 1к одинаковый для всех страниц код обеспечения связи страниц, а уже затем при помощи процедур, размещенных в этих 1К, переключать страницы по 64к имея оставшиеся 63к под процесс.


Это всё потому, что библиотеки прицепляются. А если будет внешняя C RTL, то будет гораздо меньше.
Абсолютно нет необходимости изменять компилятор. Главное, это чтобы он мог пристегнуть вместо реальной библиотеки заглушку, которая загрузит и свяжет внешнюю библиотеку. Т.е. чтобы вместо библиотеки прицеплялась куча JMP-ов.


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

А про заглушку я не понял. :v2_conf2: Обычную библиотеку, состоящую из набора jmp (или "dispatcher16k_on(); call(_func); dispatcher16k_off(); ret" ) собрать не проблема для любого компилятора. Имена функций в ней будут какие пропишешь, хотя бы и аналоги libc. Или имелось в виду что-то другое?

b2m
08.10.2008, 17:18
Или имелось в виду что-то другое?
Нет, не другое. Я имел ввиду: подменить библиотеку libc на такую, которая перед вызовом main просит ядро загрузить библиотеку и инициализировать адреса в имеющейся куче команд JMP. Хотя, библиотека всё равно будет по фиксированным адресам, так что ничего в этих JMP-ах менять не нужно. Разве что, инициализировать номер страницы, где находится библиотека.

Добавлено через 2 минуты
Если эти jmp-ы (ну или то, что ты написал) будут в начале программы, то она может даже перекрываться с libc, т.е. иметь размер в 64Кб без учёта libc :)

Error404
08.10.2008, 17:53
Нет, не другое. Я имел ввиду: подменить библиотеку libc на такую, которая перед вызовом main просит ядро загрузить библиотеку и инициализировать адреса в имеющейся куче команд JMP. Хотя, библиотека всё равно будет по фиксированным адресам, так что ничего в этих JMP-ах менять не нужно. Разве что, инициализировать номер страницы, где находится библиотека.

Добавлено через 2 минуты
Если эти jmp-ы (ну или то, что ты написал) будут в начале программы, то она может даже перекрываться с libc, т.е. иметь размер в 64Кб без учёта libc :)

В современных компиляторах можно опцией указывать точку входа в пользовательский код. Т.е. можно написать библиотеку с функцией init(), которая из своего тела вызывает _main. Компилируя бинарник, линковать его с этой библиотекой и указывать в опциях компиляции init как точку входа. Думаю, и HiTech С такое может (надо посмотреть). Даже если и не умеет, то это можно решить маленькой присадкой типа вируса, которой обрабатывать уже готовый бинарник получая на выходе init+main.

В-общем, надо браться за работу :)

b2m
08.10.2008, 17:59
dispatcher16k_on(); call(_func); dispatcher16k_off(); ret
Кстати, тут ещё подумать надо, как такое реализовать. Аргументы-то через стек передаются, лишний адрес возврата там совсем ни к чему...

Error404
08.10.2008, 19:08
Кстати, тут ещё подумать надо, как такое реализовать. Аргументы-то через стек передаются, лишний адрес возврата там совсем ни к чему...

Да. На счет аргументов надо думать. Ведь и ядро надо тоже делать не в одной странице с процессом, а в выделенной. Та же проблема.

Mick
10.10.2008, 20:08
И все-таки программать такую штуку не очень удобно.
Mick, может обдумаешь вариант, когда для хранения номеров страниц будут использоваться 4 полубайта из 155РУ2 (остальные 12 не будут использоваться)? Т.е. примерно как программирование палитры на векторе, задаем адрес (на векторе номер цвета, на ПК номер области памяти) и задаем содержимое (на векторе физический цвет, на ПК 8000 номер страницы).


Ivagor
Объясни, а что при этом мы выиграем. Смысл такой тасовки страниц. И тогда мы все же ограничиваемся страницей в 16кб. Я вот пытаюсь прикинуть как это выглядеть будет, пока туплю.

На счет многозадачности. В приципе можно(теоретически) сделать ядро системы со стеком задач в одной непереключаемой странице, допустим c 4000h - по 7FFFh. И 16кб или 32 кб (переключаемые страницы) для приложений. Для примера разделить можно так 16кб сегмент кода и 16кб сегмент данных. В принципе если приложению мало 16кб или 32 кб, то оно может занять свободные страницы. И программы должны иметь один и тот же адрес стартовый допустим 8000h.

b2m
11.10.2008, 00:40
И тогда мы все же ограничиваемся страницей в 16кб
Ну и что, задаёшь в портах 4 подряд идущих страницы (например 4,5,6,7) и открываешь слот во всех 4 окнах - получишь 64Кб. В зависимости от A14,A15 выбирается определённый регистр РУ2, из которого считывается номер страницы. Интересно только, будет ли это всё работать, на выборку из РУ2 тоже время надо.

ivagor
11.10.2008, 11:58
4 подряд идущих страницы
Все-таки фишка была в том, что можно от 1 до 4 страниц с шагом 1 и не обязательно подряд.


Интересно только, будет ли это всё работать, на выборку из РУ2 тоже время надо.
Точных данных о времени выборки РУ2 не нашел, но на векторе, как я понимаю, на выборку из РУ2 тратилось не более 166нс (на вывод каждого пиксела). Даже с учетом времени доступа основного SRAM и мелкой логики должно было бы хватить, на ПК8000 еще и тактовая частота меньше чем на векторе.

Mick
11.10.2008, 20:21
Точных данных о времени выборки РУ2 не нашел, но на векторе, как я понимаю, на выборку из РУ2 тратилось не более 166нс (на вывод каждого пиксела). Даже с учетом времени доступа основного SRAM и мелкой логики должно было бы хватить, на ПК8000 еще и тактовая частота меньше чем на векторе.

Судя по справочнику К155РУ2 она же SN7489 имеет время доступа 60нс.

Но для нас, если будет использоваться емкость 4x4(одна микросхема) или 4x8(две микросхемы) можно использовать К155ИР32(РП1)(SN74170) с временем доступа 23нс или К555ИР32(SN74LS170) - с временем доступа 42нс

Только что нашел в инете есть и 1533ИР32(SN74ALS170).
Так что ваша идея може и реализоваться :)

Добавлено через 5 часов 0 минут
Собственно вот результат моих потуг на тему квазидиска с идеей ivagor'a.
4 метра это конечно не хило, но как говорится рисуем по максимуму, а уж там можно будет и отрезать. Применил ИР32 как раз для этих целей. :) Страницы естественно 16 килобайтовые.

Смотрим высказываемся.

Mick
12.10.2008, 11:03
Только что нашел в инете есть и 1533ИР32(SN74ALS170).
Так что ваша идея може и реализоваться :)


Вот еще одна микруха 555ИР26, это тоже что и ИР32, только без открытого коллектора. По пинам и функциональности они совпадают.

b2m
12.10.2008, 14:17
Мне казалось, ivagor предлагал ввести порты 10h-13h для номеров страниц, а не только 11h с коммутацией из 10h. И непонятно, зачем нужен сигнал блокировки. Регистр порта 10h, как мне кажется, не нужен.

Добавлено через 11 минут
Можно ещё сделать так, что страницы 00-XX это ПЗУ, а XX-FF это ОЗУ. Тогда после сброса будет грузиться система из страницы ноль.

ivagor
12.10.2008, 14:31
Мне казалось, ivagor предлагал ввести порты 10h-13h для номеров страниц
Сначала да, потом было еще такое предложение

когда для хранения номеров страниц будут использоваться 4 полубайта из 155РУ2
чтобы сократить число портов.


И непонятно, зачем нужен сигнал блокировки
Ты имеешь в виду, что КД и ROM-диск можно разнести просто по номерам страниц (если их будет не 16 а больше) или что?
Пока я писал, ты уже отредактировал, т.е. именно разнести КД и ROM-диск в разные страницы.


Регистр порта 10h, как мне кажется, не нужен.
Т.е. предлагаешь задавать номер области (0-3) и номер страницы для этой области (0-63) через один порт?

b2m
12.10.2008, 14:42
Дешифрацию адреса порта можно тоже сделать с учётом на будущее: адресные линии микросхемы идут на A4-A2, разрешение /E3 это объединённые по ИЛИ A7-A5, а разрешение /E2 идёт на /IOWR. Тогда дешифратор можно использовать для записи портов в диапазоне 00h-1Fh, если нужно будет читать из портов - добавить аналогичную схему дешифрации чтения.

Добавлено через 1 минуту
Не, я предлагаю задавать номер области двумя младшими битами адреса порта.

ivagor
12.10.2008, 14:47
Не, я предлагаю задавать номер области двумя младшими битами адреса порта.
А, понял, так даже удобнее для программирования.
Это вроде будет похоже на программирование таблицы цветов в режиме 1 для ПК8000 :)

b2m
12.10.2008, 14:58
адресные линии микросхемы идут на A4-A2, разрешение E1 это объединённые по ИЛИ A7-A5, а разрешение /E2 идёт на /IOWR
Пардон, выше нужно читать не E1, а /E3

Mick
12.10.2008, 15:54
Дешифрацию адреса порта можно тоже сделать с учётом на будущее: адресные линии микросхемы идут на A4-A2, разрешение /E3 это объединённые по ИЛИ A7-A5, а разрешение /E2 идёт на /IOWR. Тогда дешифратор можно использовать для записи портов в диапазоне 00h-1Fh, если нужно будет читать из портов - добавить аналогичную схему дешифрации чтения.

Добавлено через 1 минуту
Не, я предлагаю задавать номер области двумя младшими битами адреса порта.

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

И я так понял вы ужаснулись от размера диска :), что захотели разделить странички с соотношением примерно 1 метр ПЗУ к 3 метрам ОЗУ :)

Вот мое предположение:
как думает b2m - сраницы с 0 по 63 - ПЗУ (1метр - для нужных прог и Ось хватит) страницы с 64 по 256 - ОЗУ (3 метра - все изващенные мечты смогут быть реализованы).
Посему оставляется порт 10 с двумя битами, ну и порт 11 без изменений. Бит блокировки соответственно за ненадобностью уберется.

Если я правильно выразил вашу идею, то если что перерисую.

P.S. А интересно, после ресета ведь ИР32 или РУ2 может и не содержать нули и мы с ПЗУ фиг стартанем. :) Вот как раз и нужен будет бит блокировки. При сбросе он принудительно выбирает ПЗУ с Осью, а там уже идет инициализация страничек и разрешение совместной работы. После этого рам и ром диски станут доступны в страничном режиме.

ivagor
12.10.2008, 17:44
Посему оставляется порт 10 с двумя битами, ну и порт 11 без изменений.
Может все-таки сделать как предложил b2m - пусть номер области выбирается не через отдельный порт, а двумя младшими битами номера порта (т.е. например порты 10h-13h)?


как думает b2m - сраницы с 0 по 63 - ПЗУ (1метр - для нужных прог и Ось хватит) страницы с 64 по 256 - ОЗУ (3 метра - все изващенные мечты смогут быть реализованы).
Может проще выбирать по одному самому старшему биту адреса и тогда ПЗУ и ОЗУ будут одинакового размера?

Mick
12.10.2008, 17:58
Может все-таки сделать как предложил b2m - пусть номер области выбирается не через отдельный порт, а двумя младшими битами номера порта (т.е. например порты 10h-13h)?


Может проще выбирать по одному самому старшему биту адреса и тогда ПЗУ и ОЗУ будут одинакового размера?

Короче вы меня уже запутали окончательно, я уже ничего не понимаю :(

ivagor
12.10.2008, 18:05
порт 10h - 00010000b - определяет № страницы для области 0000-3FFFh
порт 11h - 00010001b - определяет № страницы для области 4000-7FFFh
порт 12h - 00010010b - определяет № страницы для области 8000-BFFFh
порт 13h - 00010011b - определяет № страницы для области C000-FFFFh
Младшие два бита номера порта являются адресом либо в РУ2 либо в одной из предложенных тобой микросхем.

Mick
12.10.2008, 18:24
порт 10h - 00010000b - определяет № страницы для области 0000-3FFFh
порт 11h - 00010001b - определяет № страницы для области 4000-7FFFh
порт 12h - 00010010b - определяет № страницы для области 8000-BFFFh
порт 13h - 00010011b - определяет № страницы для области C000-FFFFh
Младшие два бита номера порта являются адресом либо в РУ2 либо в одной из предложенных тобой микросхем.

Хорошо, теперь я понял. Но в чем выигрыш, только в в простоте программирования и все. Но вот ответьте на вопрос. Если мы разделяем номера страниц на ПЗУ и ОЗУ(что вполне понятно), как вы собираетесь стартовать из ПЗУ. Ведь в РУ2 и ИР32 при сбросе устанавливаются наверняка не нули. И как вводить еще один порт для режима работы.

b2m
12.10.2008, 22:14
как вы собираетесь стартовать из ПЗУ. Ведь в РУ2 и ИР32 при сбросе устанавливаются наверняка не нули
Тут ты в чём-то прав :) Я тогда не знаю. Но получается, что для того, чтобы открыть определённую страницу, нужно сделать целых 3 команды OUT: выбрать область, задать номер страницы, открыть слот.

ivagor
12.10.2008, 22:23
Или вот такое неудобное решение - чтобы в области 4000-7FFF всегда была доступна одна и та же страница. Но лучше уж выбирать страницу в 2 этапа, чем так.

Mick
12.10.2008, 22:50
Тут ты в чём-то прав :) Я тогда не знаю. Но получается, что для того, чтобы открыть определённую страницу, нужно сделать целых 3 команды OUT: выбрать область, задать номер страницы, открыть слот.

Да, в три этапа не есть опимально. Можно попробовать тогда перенести порты с 10h...13h в адреса 40h...43h. И оставить 10h, как системный регистр управления. И будет 7 бит рулить стартапом.
Тогда ваши идеи остануться приделах.
Но все же оставлю соотношение 1 метр ПЗУ и 3 метра ОЗУ в максимальной конфигурации.

b2m
13.10.2008, 10:40
перенести порты с 10h...13h в адреса 40h...43h. И оставить 10h, как системный регистр управления. И будет 7 бит рулить стартапом
Тоже неплохо. А почему именно 40h...43h, а не где-то поближе? :)


И будет 7 бит рулить стартапом
Типа как в х86 - включение страничной адресации :) А защищёный режим не планируешь? :)

Mick
13.10.2008, 11:40
Тоже неплохо. А почему именно 40h...43h, а не где-то поближе? :)
Типа как в х86 - включение страничной адресации :) А защищёный режим не планируешь? :)

Я брал за основу портизацию Вектора.
14h,15h заняли AY
20h,21h занят часами будет.

Ну а 40-е вроде нигде не пересекаются. :)

Защищенный режим, время покажет.

А пока следующий вариант схемы. Логику в последствии можно в мелкую ПЛИСу запихать. Но для понятия процесса - оставим на рассыпухе.

ivagor
13.10.2008, 13:42
Ну а 40-е вроде нигде не пересекаются.
Был такой миф в векторовском прошлом - Вектор-турбо+, там использовались порты 40h-47h. В реальности как min порт 42h был задействован в навороченном варианте их же владимирского адаптера z80, по иронии судьбы тоже для управления КД.

Error404
13.10.2008, 15:31
Был такой миф в векторовском прошлом - Вектор-турбо+, там использовались порты 40h-47h. В реальности как min порт 42h был задействован в навороченном варианте их же владимирского адаптера z80, по иронии судьбы тоже для управления КД.

Забавно. :D Сейчас вколотил в гугле "Вектор-турбо+" и сразу попал на такой журнал:
http://www.sensi.org/~svo/vector06c/vladimir-vector-101007.pdf

А ведь я эти журналы видел на мониторе году этак в 95-м, когда посещал Диму Камшилина (автор журнала) на предмет поинтересоваться чего "этакого" можно передрать с Вектора на Орион. Передрал плейер для AY8910. :) И вектор с z80 на 12 МГц видел лично (авторский коллектив сидел у нас в ВлГУ на пятом этаже корпуса Р).
В-общем, постоял у истоков :v2_finge: :D

ivagor
13.10.2008, 15:58
И вектор с z80 на 12 МГц видел лично (авторский
Надо же, т.е. он существовал хотя бы в одном экземпляре (т.е. про миф я не прав, чему даже рад :), т.к. вектор на 12МГц - это круто). Т.е. это был прототип того самого вектора-турбо+? Может были еще его экземпляры?

Error404
13.10.2008, 16:35
Надо же, т.е. он существовал хотя бы в одном экземпляре (т.е. про миф я не прав, чему даже рад :), т.к. вектор на 12МГц - это круто). Т.е. это был прототип того самого вектора-турбо+? Может были еще его экземпляры?

Точно был как минимум один стабильно работающий экземпляр (т.к. копировали вроде как на нем) и несколько нестабильных (с их слов. Все же 12МГц - половину мсх надо бы поменять на более быстродействующую серию чтобы была стабильная=промышленная воспроизводимость). У меня в Орионе z80 на 5МГц работал, поэтому мне и запомнилось про 12 МГц (типа есть к чему стремиться). И игрушку эксолон еще помню. :) К сожалению, другие технические подробности не знаю, т.к. в основном интересовался на тему скопировать CP/M софт.

Mick
13.10.2008, 19:17
Итак, надеюсь всем кому интересно посмотрели схему. Посему ее и принимаем за последнюю версию. Буду потихоньку собирать, правда пока на 512кб(для монтажки вполне хватит).