PDA

Просмотр полной версии : Вариант универсального загрузчика для Ориона.



vinxru
14.12.2012, 15:36
Внезапно мне стало надо собрать ROM-диск для Ориона одному хорошему человеку.

По идее это плата с одной микросхемой ПЗУ на 64 Кб. Суть этого компьютера в том, что он ведет себя как дисковый. Половина ОЗУ используется как диск A:, а ПЗУ на 64 Кб используется как диск B:

Но вот какая мысль. На 64 Кб не помещается толком ничего. Если даже использовать ПЗУ на 512 Кб (и сделать переключатели на плате для выбора 64К-страницы), то это толком не решит проблему. Решила бы проблему загрузка с SD-карты. Но что бы сохранить суть компьютера, что бы можно было пользоваться ORDOS-ом (это операционка Ориона), надо эмулировать ПЗУ. Оперативной памяти у микроконтроллера всего 1-2 Кб, поэтому для полноценной эмуляции потребуется внешняя память.

Вот и пришла идея (только пока идея) собрать универсальную плату. Тут вместо ОЗУ и микроконтроллера впаиваются панельки.

http://ic.pics.livejournal.com/vinxru/24784160/42749/42749_original.png

В панельки можно установить:

1) Стандартную ПЗУ на 64 Кб. Две панельки остаются пустыми. Это стандартный ROM-диск.

2) 2 стандартные ПЗУ на 32 Кб. Аналогично.

3) Микроконтроллер + ПЗУ. Это стандартный ROM-диск половинного объема + возможность грузить нестандартным загрузчиком файлы с флешки. Запускать CP/M.

4) Микроконтроллер + ОЗУ. Загрузка с флешки подготовленных прошивок. Прошивки можно переключать кнопками. Можно запускать CP/M.

5) Только микроконтроллер. Будет эмулироваться диск на 1 Кб, который будет содержать нестандартный загрузчик, который будет грузить с SD карты файлы. Можно
запускать CP/M, но бессмысленно ORDOS. ПЗУ он не увидит, следовательно ничего запустить не сможет. Разве что с магнитофона на диск A: грузить.

Проблема в том, что нестандартный загрузчик и драйвер диска для CP/M надо писать, а плату хочется сделать побыстрее. За пару вечеров :) Поэтому я сделаю плату по варианту 4.

А нестандартную загрузку и CP/M прикручу позже. Точнее адаптирую с Апогея.

Кстати, этот же ROM-диск можно подключить и к NES, если добавить еще 3 микросхемы 74LS245.

Эти микросхемы 74LS245 нужны, что бы отключить ОЗУ от компьютера, что бы загрузить туда данные.

Я использовал две микросхемы ОЗУ по 32 Кб, потому что других нет.

Error404
14.12.2012, 16:17
Чего-то я не догоняю. CP/M по этим вариантам работает в дополнительном микропроцессоре (эмулирующем i8080) или все же в классическом журнальном Орионе, а доп. микропроц. только организует загрузку "rom-дисков" с SD-карты в ОЗУ, имитирующую 64-кшную ПЗУ ROM-диска, и весь этот "гипер-ром-диск" как и раньше висит на ВВ55 порта F500?

vinxru
14.12.2012, 16:33
В этом варианте в микроконтроллере находится только драйвер SD-карты.

CP/M будет запускаться на самом компьютере, и обращаться к ATMega с тремя командами:

SelectDisk
ReadSector
WriteSector

А уже ATMega будет читать из файла соответствующего выбранному диску.

---

А в базовом варианте, ATMega при включении заполнит ОЗУ данными и с компьютером никак общаться не будет.

Error404
14.12.2012, 17:53
В этом варианте в микроконтроллере находится только драйвер SD-карты.

CP/M будет запускаться на самом компьютере, и обращаться к ATMega с тремя командами:

SelectDisk
ReadSector
WriteSector

А уже ATMega будет читать из файла соответствующего выбранному диску.

---

А в базовом варианте, ATMega при включении заполнит ОЗУ данными и с компьютером никак общаться не будет.

Т.е. АТМега включается не в РОМ-диск, а внутрь кишок Ориона c резаниной (а иначе как писать в ОЗУ - DMA или простейший BusReq ЦПУ в Орионе штатно не поддерживается)? В этом случае встает вопрос - а зачем все эти сложности, если Орион сам может читать с SD при помощи простейшего контроллера на россыпухе штатно подключенного к разъему расширения? Схемы и исходники драйвера инита/чтения/записи сектора SD-карты тут где-то в орионовской ветке форума размещались (помню, что 2010 году, но точно не скажу). Размещался и монитор F800 c начальной загрузкой с SD, но он для Z80 (может не подойти для классики на i8080)

vinxru
14.12.2012, 18:05
Нет, нет, нет.

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

Эта плата заменитель ПЗУ.

Её можно хоть вместо ПЗУ спектрума влепить, хоть как картридж от Денди.

---------- Post added at 17:05 ---------- Previous post was at 17:03 ----------

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

kovdry
17.12.2012, 18:55
vinxru, мысль очень хорошая. Сам много раз об этом думал.

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

Хорошо еще то, что есть много вариантов использования. Кому то достаточно будет обычного ПЗУ. Кто то ОЗУ с батарейкой поставит. А кому то флешку подавай.

Тут я бы еще обратил внимание на такие моменты:

1. Какой файл с флешки будет браться? С фиксированым именем, или будет возможность выбора?

2. Как будет увеличен обьм ПЗУ выше 64кб? Я бы предложил вариант как в Апогее.

3. Как реализовать запись в ПЗУ со стороны Ориона?

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

Как вам кажется?

С удовольствием буду следить за разработкой и отладкой девайса. А если он получится то повторю для своего старенького Ориона.

vinxru
17.12.2012, 20:33
1. Какой файл с флешки будет браться? С фиксированым именем, или будет возможность выбора?

Можно выбирать аппаратными кнопками.


2. Как будет увеличен обьм ПЗУ выше 64кб? Я бы предложил вариант как в Апогее.

Никак. Можно иметь кучу 64 Кб дисков и кнопками их переключать. Или программно, через специальную программу.


3. Как реализовать запись в ПЗУ со стороны Ориона?

Никак. Запись на диск D: запрещена.

Но никто не мешает (мне) написать программу сохранения диска C: на флешку. А потом можно с ним работать, как с диском D:

P.S. Помимо всего прочего, CP/M так же будет работать с образами дисков. Но там образы будет бОльшего размера.

b2m
18.12.2012, 11:00
Шина данных, как я понимаю, идёт напрямую на ВВ55? Если Орион-128 случайно запрограммирует соответствующий порт на вывод, будет конфликт на шине данных.

AHTuXPuCT
18.12.2012, 11:03
по идее на шину данных тоже буфер надо ставить

b2m
18.12.2012, 11:05
Обнаружить это можно контролируя один из битов шины следующим образом: один из пинов атмеги повесить через резистор на контролируемый бит, настроить его на вывод и подать последовательность бит, а пином, который напрямую соединен - контролировать. Если бит не "рулится", значит им "рулит" ВВ55.

---------- Post added at 12:05 ---------- Previous post was at 12:04 ----------

Даже если повесить буфер, конфликт всё равно возможен - с буфером.

AHTuXPuCT
18.12.2012, 11:06
тогда наверно уже проще будет сделать переходник - будет вставляться вместо ВВ55 в панельку :)

vinxru
18.12.2012, 15:01
Даже если повесить буфер, конфликт всё равно возможен - с буфером.

Может забить. Ведь о конфликтах с ПЗУ никто не думал. А тут почти та же ПЗУ.

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


тогда наверно уже проще будет сделать переходник - будет вставляться вместо ВВ55 в панельку

Не аутентично :) Тут мы ПЗУ эмулируем.

b2m
18.12.2012, 15:09
Может забить. Ведь о конфликтах с ПЗУ никто не думал. А тут почти та же ПЗУ.
Можно и забить. Я просто подумал, что можно было-бы и шину данных использовать для передачи данных атмеге. Но ты наверняка опять будешь через шину адреса данные гонять :)

vinxru
18.12.2012, 15:16
Можно и забить. Я просто подумал, что можно было-бы и шину данных использовать для передачи данных атмеге. Но ты наверняка опять будешь через шину адреса данные гонять

А на Апогее сделал через адресную шину. Для отправки байта читаем:

= 0x08 | (d<<4)
= 0x0C | (d&0xF0)

Протокол достаточно сложный, что бы случайно не вызвать непредвиденное действие. И одновременно полностью незаметный для оригинального Ориона.

b2m
18.12.2012, 16:07
Для отправки байта читаем:
А глюков не будет, если атмега считает адрес в тот момент, когда часть битов уже новая, а часть старая? Не стоит ли усложнить протокол ещё и стробовым битом (а-ля 0xA,0x8,0xE,0xС, строб 1->0)?

BYTEMAN
18.12.2012, 16:09
для ориона был "драйвер", который позволял сделать 64к ром-диск на статике. И запись была... В Радио была статейка...

b2m
18.12.2012, 16:15
А номер журнала? :)

---------- Post added at 17:15 ---------- Previous post was at 17:11 ----------

Оно? (http://www.danbigras.ru/Orion/ElDskOr/ElDskOr.html)

Error404
18.12.2012, 22:31
Оно? (http://www.danbigras.ru/Orion/ElDskOr/ElDskOr.html)

"Подключают его к портам F500 и F600 компьютера (первый из них — порт ROM -диска — использован в качестве адресной шины диска S , а его шина данных, управление чтением/записью, а также переключение микросхем подключены к параллельному порту F600)."

Фтопку. Мало того, что ромдиск (как и Ордос) вообще малополезная фигня (из-за отсутствия нормального софта в куче ордосовского шлака: с этой точки зрения мне кажется малоинтересной и проектируемая железка, но хотят люди творчества - пусть их), так они в том древнем решении еще и последний универсальный порт прибрали к рукам.

BYTEMAN
18.12.2012, 22:51
Оно?
оно

vinxru
19.12.2012, 01:31
Фтопку. Мало того, что ромдиск (как и Ордос) вообще малополезная фигня (из-за отсутствия нормального софта в куче ордосовского шлака: с этой точки зрения мне кажется малоинтересной и проектируемая железка, но хотят люди творчества - пусть их)

А разве есть нормальный софт для Ориона, кроме того, что можно загрузить с магнитофона или запустить с ром-диска (что однофигственно)?

Машинонезависимый софт CPM мы не рассматриваем, ибо Орион тут не при чем.

vinxru
19.12.2012, 12:30
А глюков не будет, если атмега считает адрес в тот момент, когда часть битов уже новая, а часть старая? Не стоит ли усложнить протокол ещё и стробовым битом (а-ля 0xA,0x8,0xE,0xС, строб 1->0)?

Как раз так и есть.

= 0x08 | (d<<4)
= 0x0C | (d&0xF0)

Линия A2 адреса подключена к прерыванию микроконтроллера, которое вызывается при смене 0-1 или 1-0. Поэтому передача данных микроконтроллеру и реализована сменой A2.

d3 d2 d1 d0 1 0 0 0
d7 d6 d5 d4 1 1 0 0

d3 d2 d1 d0 1 0 0 0
d7 d6 d5 d4 1 1 0 0

d3 d2 d1 d0 1 0 0 0
d7 d6 d5 d4 1 1 0 0

d3 d2 d1 d0 1 0 0 0
d7 d6 d5 d4 1 1 0 0

d3 d2 d1 d0 1 0 0 0
d7 d6 d5 d4 1 1 0 0

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

Будет вот так.

http://s017.radikal.ru/i419/1212/36/ed6c395758fe.png

Вместо 3-х диодов можно впаять стабилизатор на 3.3 Вольта типа 7805 (только на 3.3)

Кнопочки прямо на плату забыл. И отверстия для крепления платы.

b2m
19.12.2012, 14:20
Линия A2 адреса подключена к прерыванию микроконтроллера, которое вызывается при смене 0-1 или 1-0.
Это всё понятно, просто я предположил, что А2 может смениться раньше, чем остальные биты, и если считать все биты без задержки, некоторые биты могут оказаться ещё предыдущими значениями.

vinxru
19.12.2012, 15:11
Это всё понятно, просто я предположил, что А2 может смениться раньше, чем остальные биты, и если считать все биты без задержки, некоторые биты могут оказаться ещё предыдущими значениями.

Это можно программно будет подстроить.

A2 вызывает прерывание. Микроконтроллер будет на него реагировать 4-16 тактов при частоте 8 Мгц. Лишь потом читать с шины адреса адрес.

Error404
19.12.2012, 19:52
А разве есть нормальный софт для Ориона, кроме того, что можно загрузить с магнитофона или запустить с ром-диска (что однофигственно)?

Машинонезависимый софт CPM мы не рассматриваем, ибо Орион тут не при чем.

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

vinxru
23.12.2012, 21:28
Что то я сразу не сообразил, что флешку неудобно будет доставать. Сделал так. Теперь можно вставлять её снаружи компьютера.

http://s017.radikal.ru/i412/1212/ab/0800d8f06f83.jpg

http://s020.radikal.ru/i715/1212/d7/8325c819af14.jpg

Все детали запаиваются снизу. Максимально большие контактные площадки. Сделал под DIP версию микроконтроллера.

P.S. Орион 524288 :)

vinxru
25.12.2012, 11:59
http://s017.radikal.ru/i443/1212/38/3d9f6bea6fa3.jpg

http://s13.radikal.ru/i186/1212/94/5d2e5fdc204f.jpg

http://s019.radikal.ru/i600/1212/5c/679467c419f9.jpg

vinxru
27.12.2012, 12:04
http://s41.radikal.ru/i092/1212/61/04d3ca326012.jpg

Теперь надо прошивку написать и устранить возможные обрывы и замыкания.

Разъем для программирования оказался слишком близко к микросхеме. Что бы его вставить, надо микросхему из панельки выдергивать.

Еще перепутал местами контакты для подключения провода. Ошибка чисто эстетическая. Нижний ряд подпаивается слева, а верхний справа.

На плате разъемы. Слева на право.

1) Два кнопки для переключения файлов.
2) Программатор
3) Если используется одна или две ПЗУ 27256, то закоротить две перемычки. Иначе они не используются.
3.1) Если используется одна ПЗУ 27512, то еще надо вытащить 155ЛА3 и замкнуть 3-ю ногу на землю. A15 подключен к 155ЛА3, а оттуда на входы OE+CE ПЗУ. Я не стал делать еще одну перемычку.