PDA

Просмотр полной версии : Компьютер "Агат-7": Реализация на ПЛИС (DE1)



Santechnik
02.07.2011, 17:53
Как я и обещал - очередной проект. Начал делать Агат-7 на ПЛИС. Это был первый компьютер, за которым я посидел, и было это в Компьютерном центре на Дмитровском шоссе в Москве где-то в середине 80-х.
Так что я с удовольствием приступил к этому проекту.
Компьютер состоит пока только из 32К памяти, подключенной клавы PS/2 и текстового режима АЦР-32. Для вывода на монитор использую режим 1024х768@65Гц, который идеально подходит под агатовские 256х256 (или даже подобие 512х256 в АЦР-64) путем троекратного повторения строк.
Комп пока в самом начале пути, но уже запускается и работает в Сисмоне. Фотку прилагаю. Сделать еще надо много: остальные видео-режимы, звук, магнитофонный вход/выход, прикрутить дисковод на SD, расширить память, сделать ячейку 121 и много чего другого. Буду рассказывать о прогрессе здесь и, конечно, задавать вопросы.:v2_wink2: По окончании выложу проект целиком. А пока вопросы:
1) У Мымрина упоминается про возможность установки по 64 или 128К на основной плате и каждой плате расширения. Интересно насколько это использовалось в серийном производстве? Я думаю, что для совместимости достаточно будет сделать стандартные 32К плюс еще 2 платы расширения по 32К каждая (итого 96К). Были ли программы, которым надо больше?
2) Есть ли у кого-то оригинальная прошивка ПЗУ с Сисмоном? Та которую я нашел поломана - выводит Apple-11 вместо АГАТ в начале. Хочется настоящую.
3) Строчные буквы в знакогенераторе. Насколько я понял, Агат-7 не выпускался со строчными буквами. Все что было, это самоделки. Это так?

И еще хочу поблагодарить создателей сайта про Агат - deka.ssmu.ru/er/agat/ за настоящий кладезь информации об этом компьютере. :v2_thumb:

Sergei Frolov
02.07.2011, 18:20
3) Выпускался со строчными.

AlexBel
02.07.2011, 23:16
Как я и обещал - очередной проект. Начал делать Агат-7 на ПЛИС. Это был первый компьютер, который я потрогал и было это в Компьютерном центре на Дмитровском шоссе в Москве где-то в середине 80-х.
Так что я с удовольствием приступил к этому проекту.

Какое-то время назад (год-полтора) я начал делать "Агат" на DE1. На последний момент работал процессор, видеоконтроллер 32х32 и криво работала клавиатура. Несколько раз брался за проект и откладывал то за неимением времени, то сил, то желания. Теперь, видимо, можно окончательно забросить :)

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

Кстати, в качестве эмулятор а дисковода на SD-карте - посмотри проект Алекса Фрида, у него в Apple ][ на DE1 эмулируется Шугарт...

1. Делай 32кБ + ДопОЗУ 32к + ПсевдоПЗУ 32к. И все будет ОК.
2. ПЗУ, как писал, приложил.
3. Вроде как пытались на "Семерке" вводить и маленькие и большие, но сам не видел, впервые увидел на "Девятке". Программы, которые я видел под "Семерку" пишут буквами одного регистра, т.е. только заглавными. Возможно, я не видел те, что используют и те и другие...

GARNIZON
02.07.2011, 23:36
1) Мало использовалось. На моей памяти это только Штатный копировщик, от этого зависело за сколько проходов пройдет копирование. ОС "Спрайт" понимает у семерки 640Кб и вроде даже больше. И еще пару программ.
В эмуляторе реализовано все это, можете взглянуть.
http://deka.ssmu.ru/er/agat/Soft/winEmul.shtml

2) Вот тут есть: http://deka.ssmu.ru/er/agat/Hard/roms.shtml и еще в эмуляторе другие версии.

3) Конечно самоделок было много, но есть официальный в 256 знаков. Таких семерок тоже предостаточно было выпущено. Есть проги которые хотят именно его.
http://deka.ssmu.ru/er/agat/Apps/Wordmaster.shtml
В последний год выпуска на АГАТ-7 ставили знакогенератор от АГАТ-9.

Кстати в семерке вовсю использовались совмещения видео-режимов с помощью таймерных прерываний. Например совмещение текста с графикой в рапире (РЖМ("ВК"");) и разных обучалках.

Если нужна более подробная инфа – пишите, мой адрес есть на сайте.

Santechnik
03.07.2011, 03:28
Спасибо. Тогда раз программ требующих больше 96К нет, то на этом и ограничусь. Сисмон и знакогенератор поменял. Теперь должны быть и строчные, но пока не могу проверить. Сегодня попробую прикрутить звук и магнитофонный вход/выход. Тогда можно будет загрузить тесты и вместе с ними доделывать память и остальные видео режимы.

GARNIZON
03.07.2011, 08:18
Обратите внимание: ранние программы для семерки не знали о существовании знакогенератора в 256 символов и зачастую использовали адреса как из нижней так и верхней половинки. Таким образом, вместо надписей на экране получалась белиберда из псевдографики. Т.е. чтоб охватить весь список программ одним знакогенератором не ограничится.
То же самое относится и к цвету. Ранние программы не учитывали бит яркости и писались с расчетом на 8 цветов (на самом то деле 16).

Santechnik
04.07.2011, 16:10
На данный момент еще сделано:
1) Таймерные прерывания. Только вместо 50Гц сделано 65Гц, т.к. они привязаны к кадровой развертке (она у меня 65 вместо 50) и наверняка используются в том хитром режиме совмещения текста и графики. А вместо 500Гц сделал 496Гц - так удобнее делить было :rolleyes: Дальше посмотрим как на практике будет это работать.
2) Сделал 2 знакогенератора - полный и старый. Выбор переключателем на плате.
3) Добавил бит яркости. Можно отключить его выключателем на плате и тогда все цвета одинаково яркие (и их всего 8).
4) Магнитофонный вход/выход. "Магнитофонит" нормально. Считывает то, что сам же записал, правильно. Записанный с этого выхода файл был скормлен в эмулятор где тоже считался прекрасно.
4) Кое-какие мелкие шероховатости подчистил.

Ну и вопросы появились:
1) На данном этапе для продолжения нужны тесты, чтобы я мог проверить насколько правильно я подключаю дополнительную память и как хорошо (или плохо) работают видео-режимы. Какие тесты для этого подойдут, где взять и как мне их "замагнитофонить" в комп :) ?
2) Вопрос по пультам и мыши. Чтобы их приделать нужно паять плату расширения (хоть и простую). Они вообще на Агате-7 где-нибудь нужны были? Или совсем ничего не потеряю если про них забуду?
3) Читал сегодня про Ячейку.121. Пока в непонятках как ее режим 280х192 впихнуть в 1024х768 и пропорции сохранить :v2_confu: Буду еще думать. Она вообще нужна? Вроде есть уже на DE1 Apple-][, чтобы проги такие запускать, а на Агате полно прог и своих и уже адаптированных. Какие ваши мнения?

PS Ко мне можно на "ты". :v2_dizzy_vodka2:

Кирлиан
04.07.2011, 16:40
2) Вопрос по пультам и мыши. Чтобы их приделать нужно паять плату расширения (хоть и простую). Они вообще на Агате-7 где-нибудь нужны были? Или совсем ничего не потеряю если про них забуду?


Пульты = джойстик.

Насчет мышки - не знаю. Семерку не использовал, а на Агат-9 мышку юзал весьма активно и по делу.

Sergei Frolov
04.07.2011, 16:41
1) Есть стандартный тест памяти АГАТа. Я когда-то писал тестовую программу, она проверяет конфигурацию и выводит на экран (сидит в бут-секторе)
2) В АГАТе есть стандартные PADDLES, которые сидят на стандартном разъеме. Мышь особо не нужна.
3) Ячейка 121 - это по сути Apple ][, тоже не нужен.

GARNIZON
05.07.2011, 07:03
Таймерные прерывания в агатах жестко привязаны к работе видеоконтроллера.
Частота NMI всегда равна 50 Гц и они происходят во время обратного хода развертки.
А вот с IRQ все несколько сложнее. На семерке длительность IRQ гораздо больше, чем на девятке.
По крайней мере, гораздо больше ложных (повторных) вызовов обработчика IRQ. В эмуляторе подобраны значение длительности равное 700 тактов для семерки и 100 - для девятки. Прерывания для семерки происходят каждые 16 строк изображения с кратностью 20 относительно NMI (с учетом невидимых на экране строк).

"замагнитофонить" тесты не получится, агат не спектрум, ему надо в памяти полноценную ДОС.
общее представление об этом можно тут взять:
http://www.phantom.sannata.ru/forum/index.php?t=6735&a=stdforum_view&o=&st=30

Пожалуй, только тест Сергея Фролова подойдет для этой цели
http://deka.ssmu.ru/er/agat/Apps/Testfrs.shtml
он сам по себе в Boot сидит.
Его нет на сайте (я не успел пока и половины выложит того, что есть), если надо пришлю.

В яч121 смысла нет конечно.

Пульты иногда используются в играх.

Мышь на семерке была только одна, это Увк-01, её еще иногда ошибочно называют мышкой от БК0010.
Но на самом деле Марс к системе МЭП (откуда БК) отношения не имел и это делалось просто как абстрактный ТНП.
Так вот в отличии от девятки (где мышка использовалась вовсю и в куче пакетов) на семерке пожалуй можно вспомнить только Маусграф Ромы Бадера:http://www.chipinfo.ru/literature/radio/199801/p28.html

Santechnik
05.07.2011, 12:12
Я NMI как раз к кадровой развертке и привязал. А вот IRQ сама по себе у меня. Насколько я понял из схемы и описания она каждые 16 строк не срабатывает, а переключается с 0 на 1 и наоборот. Т.е. срабатывание происходит на каждой 32 строке. Т.е. частота в 10 раз выше, чем кадровая, что соответствует описанным 500 Гц в разной литературе. Т.к. у меня кадровая и NMI 65Гц, то если я сделаю IRQ срабатывающей каждые 96 строк (3 мои строки в одной агатовской из-за режима 1024х768), то частота будет 650 Гц. Не многовато? Вообще насколько важна привязка этого прерывания к развертке?

ОК. Мышь делать не буду. Пульты, наверное, сделаю, но после того, как проект в целом будет готов. Существуют вообще фотки пультов?

Ячейку 121 может быть в самом конце все же попробую прилепить. Ее придется другим клоком от основной системы запускать (35.546875 МГц вместо текущего 32.5 МГц) и надо будет подумать как их совместить. Или видеорежим вместо 65Гц сделать 59.4Гц. Интересно как это монитору понравится? Но это потом.

Похоже я дальше не могу двигаться пока худо-бедную реализацию дисковода не слеплю... М-да. Хотел его на попозже оставить. Ну-да ладно, приступаю. :v2_dizzy_army:
Тогда опять вопросы ;) Как Агатовские программы отнесутся к двум дисководам - один 140, а другой 840, если второй будет эмулироваться в ячейке скажем №5? Или лучше сделать один дисковод который будет магически превращаться из одного в другой в зависимости от образа? Мне сдается, что второй вариант еще меньше прогам понравится :v2_wink2:

GARNIZON
05.07.2011, 14:25
Примерно 95 процентов семерок выпушены с одним единственным флопом 140 (контроллер в 3 слоте).
Оставшиеся проценты это когда в 3 слоте 140 флоп а в 5 слоте 840.
Отмечу что сисмон опрашивает слоты на наличие флопа от большего к меньшему. Т.е. если 2 флопа грузится при старте будет с 840. Смысла в 840 применительно к семерке как-то не просматривается. Ну или можно сделать его отключаемым.

Santechnik
06.07.2011, 03:03
Ага. Это интересно. И значительно упрощает задачу. Т.е. никакие программы на 840К не выпускались и при отсутствии этого дисковода ничего потеряно не будет?

GARNIZON
06.07.2011, 11:01
Не совсем так. Вот развернутый ответ от моего соавтора по сайту. Он в значительной степени больше может подсказать относительно этого.

1) NMI/IRQ: я бы попробовал отказаться от 65 Гц и давать на моник 50. Тогда бы решились все проблемы с частотами прерываний и их синхронностью с развёрткой. Есть некоторая уверенность в том, что нынешние мониторы такой режим нормально воспримут (мультичастотные 17'' CRT и многие LCD).

Если не воспримут: программа минимум: развёртка - 65, NMI - 50 +- 1%, IRQ - 500 +- 10%.Почему ? Потому что режим совместимости видео использует очень немного программ (на семёрке, вовсяком случае), а вот опиратся на таймер в игрушках и, особенно, для воспроизведения звука - это встречается почаще. Звук, съехавший на 20% (50 -> 60) - уже будет не вовсем правильным. Хотя для большинства хрюканий в игрушках для начала сойдёт и такой. Программа максимум: выбор (переключателем или ещё как-то) комбинаций:
- синхро = NMI = 50-
синхро 65, NMI - 50-
синхро = NMI = 65

2) Флоповоды на семёрке имеют смысл оба. Но желательно, чтобы 800ка была отключаемой (иначе загрузка будет начинаться с неё [в стандартной конфиге] и чтобы загружаться со 140ки надо будет нажимать отдельные кнопки). 800ка удобна большим объёмом, если нужно свалить кучу игрушек на один образ - то 800ка предпочтительнее, мне кажется. Эмулируются оба дисковода примерно одинакого (по сложности).

"Магическое превращение" приведёт проги в состояние легкого психоза. Операционки, которые поддерживают 140ку и 800ку, при загрузке определяют типы устройств, обычно по сигнатурам драйверов в ПЗУ. Если после этого произойдёт смена устройства без перезагрузки - драйвера просто зависнут или скажут "IO Error". Те ОС, которые поддерживают только один тип дисковода (обычно 140ку, но бываети наоборот) - тоже ищут хоть какой нибудь дисковод (предполагая, что это как раз тот, которыйони знают).

Прог для семёрки, жестко завязанных на 800ку почти нет, но именно что "почти". Например, текстовый редактор"Автограф" мне пока не попадался в версии для 140ки, хотя я уверен, что она или была или может быть легко реализована комбинированием его исполняемых файлов и ОС.

Независимо от реализации, 800ка заметно быстрее. Хотя бы потому, что у неё кодирование/декодированиеданных реализовано аппаратно и форматирование делается с чередованием 1, а у 140 -ки - минимум 2.

3) Штатный тест памяти семёрки вполне плоский (модель памяти) и может быть переведён в WAV безособых проблем. Кажется, AlexBel'у я когда-то высылал архив с небольшой подборкой плоских образов для проверки эмулятора. Там тест памяти семёрки был и несколько игрушек. С комментариями, какие устройства и режимы для какой игрушки важны. Себе я эту подборку не оставлял.

4) Мышь/джой/пульты бывают разные. Есть три варианта:-- штатный интерфейс пультов. Его игрушки активно используют. В качестве входного датчика у них переменный резистор, но его, понятно, можно крутить как напрямую (в пультах), так и джой-ручкой (тоже бывало такое, хотя в инструкциях к агату не упоминается), ну а можно и мыша приспособить - бывает весьма удобно (в железе не реализовывалось вроде бы, но в эмуляторе весьма даже). !! Игрушка Lode Runner на семёрке зависает, если подключены пульты !!

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

-- мышь через контроллер Mouse Nippel Card. Красивая, но экзотика. Реальных прог для семёрки тоже вроде бынет. Хотя аппаратно тоже должна работать. Поэтому я бы обязательно сделал поддержку по первому пункту, а остальное - только когда всё будет законченои станет совсем скучно.

5) Ячейку 121 - нафиг. Логичнее тогда уже полноценную девятку делать - у неё, хотя бы, режим эмуляции эпла более полный, с поддержкой LC. Но, в общем, зависит от финальной цели. А она пока не озвучена.

6) Шрифты: видимо, небольшая партия семёрок выпускалась с полным знакогенератором. В доках про это было несколько размыто, но 96% реального софта, если даже не поддерживали маленькие/большие буквы, всё равно старались выводить на экран с установленным старшим битом. "Агат-Автор" (автономный, не в составе ИКП, но и другие версии, наверное, тоже), пытался использовать полный знакогенератор по честному. Причем он большие буквы выводил (в режиме 32x32) в инверсии, на случай, если з/г всё таки 128.

Бейсики и сопутствующие им ДОСы семёрки довольно вольготно пользовались старшим битом в текстовых строкахи текстовых файлах. Не помню, что именно они там колбасили (тем более разные версии и части делали это по своему), но полагаться на его сохранность тут не стоит. При выводе на экран стандартными средствами (через PRINT) у HELLO-60 D7 жестко ставится в 1.

Отладочный комплекс и редактор РАПИРы в 32x32 выводили маленькие буквы голубым, а большие - зелёным. Но почему-то в нём тоже жестко устанавливался старший бит. Если эту установку отключить (подправив код в памяти или на диске) - редактор совершенно корректно работал с полным набором 256 знаков (ну несовсем все 256, но, во всяком случае, можно было вводить и видеть и маленькие и большие буквы).

2% реального софта (скомпилированного) выводили буквы в виде "тексТ". Т.е. последний знак большой, остальные - маленькие. Они не были расчитаны на 256, а их авторы в коде использовали макрос DCI - он последнему знаку в строке выставлял D7=1 - это такой, чисто агатовский, вариант ASCIZ. Ну и, возможно, были какие-то ещё 2% со своей придурью :)

Santechnik
07.07.2011, 12:22
Огромное спасибо! Очень подробно. Теперь по пунктам:
1) Только что попробовал уменьшить частоту развертки до 50 Гц путем изменения клока с 32.5 до 25Мгц. Ни ACER, ни Samsung LCD этого не поняли. Китайский LCD телевизор показал сильно сдвинутую картинку. Так что считаем, что этот вариант не работает. Пока я просто добавлю переключатель 65/50Гц на это прерывание, а дальше посмотрим как это будет работать.
2) Второй флоп добавит сложности. Сделать его отключаемым не проблема. И надо ли делать возможность работы сразу с двумя флопами или просто сделать возможность выбора переключателем (до загрузки, конечно)? Есть ли еще что-то, чего нет на 140К дисках? Может если это только пара программ, то просто переделать их под 140К потом? Насчет скорости - я пока еще не разбирался с протоколом работы, но отсутствие механики должно ускорить его работу до приемлемого уровня (если конечно в драйверах все задержки жестко не прописаны). В эмуляторах вроде шустро летают. Да и вряд ли кто-то работать серьезно будет на нем, чтобы скорость стала важной.
3) Если есть что-то в WAV, то рад буду испытать это на том, что получилось и доделать таки графику и память тестируя этими прогами.
4) Мышь решено не делать. А вот с пультами я не понял - это физически два одноосевых пульта с кнопкой или это один двухосевой джой с двумя кнопками?
5) Девятку делать не буду - мне 7-ка интереснее. Ячейку долой. Уговорили :) Цель - 7-ка. Промежуточная цель - сделать работающую версию на DE1. Окончательная цель - сделать в железе. Поэтому я и интересуюсь в том числе пультами - планирую разъем под них.
6) Со шрифтами проблем быть не должно. Сейчас уже зашиты два знакогенератора с возможностью переключения между ними "на лету".

Sergei Frolov
07.07.2011, 12:28
Пульты - два одинаковых. У каждого один переменный резистор и кнопка.
Это не джойстик и не похож.

b2m
07.07.2011, 12:51
Ни ACER, ни Samsung LCD этого не поняли. Китайский LCD телевизор показал сильно сдвинутую картинку.
А ты бы не мог посмотреть, как будет выглядеть мой b2m_de1 на твоих мониторах? У меня тоже есть переключатель 60/50Гц. SD-карточку делать не обязательно, он по таймауту в монитор вывалится.

Sergei Frolov
07.07.2011, 12:54
АГАТ? Не вывалится, если сброс не нажать.

KALDYH
07.07.2011, 13:00
1) Только что попробовал уменьшить частоту развертки до 50 Гц путем изменения клока с 32.5 до 25Мгц. Ни ACER, ни Samsung LCD этого не поняли.
То есть частота строк при этом тоже поменялась? Мониторы к ней гораздо более критичны, если что.

b2m
07.07.2011, 13:22
АГАТ? Не вывалится, если сброс не нажать.
Не, не Агат, я про свою Башкирию. Просто, если моя версия 50Гц работает, то это не является невозможным :)

Santechnik
07.07.2011, 15:59
А ты бы не мог посмотреть, как будет выглядеть мой b2m_de1 на твоих мониторах?
Samsung и китайский телек показывают нормально. Acer долго думал и где-то секунд через 40 черного экрана выдал, что Invalid Signal. Но у тебя 800х600, а у меня 1024х768 и тут они все видимо вариантов не допускают.

KALDYH, все поменялось пропорционально. Изначально сделано было строго по стандарту - все поля, синхры и т.д. На раз подхватывалось любым монитором в доме. А как можно сохранить частоту строк при уменьшении кадровой частоты?:v2_conf2:


Пульты - два одинаковых. У каждого один переменный резистор и кнопка.
Это не джойстик и не похож.
А как ими играли? По пульту в каждую руку?

b2m
07.07.2011, 16:09
Samsung и китайский телек показывают нормально. Acer долго думал и где-то секунд через 40 черного экрана выдал, что Invalid Signal.
Ладно, Acer похоже действительно не может 50Гц, но если Samsung нормально показывает 800х600х50Гц, то есть 600 строк по вертикали, то 768 строк по вертикали он тоже должен показывать, разница-то небольшая. Может ты забыл выставить правильную полярность синхроимпульсов? Монитор сравнивает не только кадровую и строчную частоту, но и смотрит на полярность СИ, чтобы определить режим.

---------- Post added at 17:09 ---------- Previous post was at 17:07 ----------

Хотя я не знаю, есть ли стандарт на 50Гц-овые режимы. Так что тут действительно лотерея - покажет или нет.

Santechnik
07.07.2011, 16:26
С полярностью все четко. Я думаю, что дело в том, что твой режим подпадает почти под телевизионный формат. А мой совсем в стороне. Еще конечно можно будет в крайнем случае опуститься до 800х600, оставив неиспользуемые поля, но приберегу это на крайний случай - очень уж хорошо агатовское разрешение вписывается в 1024х768. Жалко отказываться.

GARNIZON
08.07.2011, 12:02
{у меня не получается зарегистрироваться здесь - письмо не приходит, поэтому пишут от Garnizon'a.
Voldemar0}

1) тут его вроде все активно уже обсудили :)

2) "надо ли делать возможность работы сразу с двумя флопами". Тут всё толсто зависит от задачи. Если хочется иметь Крутейшую тачку, то два одновременно - обязательны даже для семёрки :). Но в реальности, это нужно, конечно, только если копировать файлы с одного формата на другой. Больше ни для чего. У девятки имело смысл два флопаря для работы с неадаптированным эпловским софтом, но на семёрке, без ячейки-121, смысла вроде бы нет.

Нужна ли 140ка вообще ? Зависит опять от задачи:

- Бейсик-60, хотя и существует в версии для 800ки, но ты его ещё попробуй найти :) - это редкая вещь. Да и с записью его на физическую дискету есть тонкости. Но ничто не мешает использовать ИКП-бейсик - его навалом в любой коллекции, хоть для 800ки , хоть для 140ки.

- Некоторые редкие игры, например, resraider - не помню их для 800ки, хотя может и есть.

- ШКОЛЬНИЦА с красивой цветной заставкой - тоже для 140ки. Хотя никто, опять же, не мешает запускать её главные части (РАПИРу и ДОК) из состава ИКП-800.

- Alv Graf - редактор графической. Вероятно, в дальнейшем его разработку забросили из-за выхода Mouse Graf, но MG существует только для девятки,
к тому же обвешан защитами.

и т.д. Т.е. когда появились 800ки, конечно, большинство прог были так или иначе для них адаптированы (иногда именно адаптированы, а иногда выпущены новые - расширенные версии, как часто бывало с системным софтом). Но если важна полнота охвата - то 140ка всё таки нужна.

Адаптировать можно, конечно, но это называется "новодел". Тут актуальным становится вопрос - проще адаптировать в другому дисководу или вообще сразу к PC ? Или вообще пользоваться эмуляторами.

"но отсутствие механики должно ускорить его работу до приемлемого уровня"
Этого не стоит особенно ожидать. 800ка и так работает близко к физическому пределу процессора, а у 140ки драйвера тормозятся не столько специальными задержками (хотя есть там и такое.... весьма хитрое... можно попасть на них, можно миновать - зависит от особенностей эмуляции... но до этого тебе пока далеко), сколько необходимостью выполнять групповое кодирование/декодирование байт.

Ну и задержки на движение головки, но это-то на практике не особенно ускоришь - за раз читается дорожки 2-8 - больше просто в память не войдёт - а это всего 8 * 20 мс (в идеале)... Чистый произвольный доступ к файлам на агате хотя и поддерживался некоторыми ОС, на практике редко использовался.

Задержек на ожидание нужного сектора тоже не много - после появления 800ок все драйвера (даже для 140ок) стали поддерживать режим "ленивого доступа" - это когда команды кешируются и сектора читаются в порядке появления под головкой, а не в арифметической последовательности.

3) Если alex не отзовётся - напиши почтой (см на deka.ssmu.ru, внизу), я сделаю их снова.

4) Пульты - две коробочки. Внутри резистор и кнопка. Так по инструкции. Т.е. для двух игроков. Есть даже игры именно для такого режима - balls, например (типа тениса двумерного).

Но на практике многие эпловские игры (и не только игры) снимают данные с пультов, но используют их как две координаты одного датчика. Кроме того, были фотографии агатов с джойстиками. Отсюда вывод: если на две оси джойстика нацепить те же два резистора (с меньшим рабочим углом, разумеется) и две кнопки - получается аналог какого-то ещё, реально существовашего и популярного, устройста. Например, в игре HERO (но там данные с пультов используются дискретно - вправо/центр/влево, вверх/центр/вниз). В resque raider тоже только пульты, вроде бы и тоже именно как один датчик с двумя координатами. В мультсистеме FantaVision (на семёрку её не портировали, но для девятки она есть и для эпла) - там прям курсор мыши так бегает - по данным с пультового входа. Если поковыряться, можно, найти и много других (но это пусть Garnizon подсказывает, он в играх лучше меня разбирается).

Так что желательно иметь оба варианта. Но для начала, конечно, хватит и просто разъёма. А там по вкусу доделаешь.

---------- Post added at 12:02 ---------- Previous post was at 11:29 ----------

ЗЫ Прошивка системного монитора из досовского эмулятора, которая пишет "APPLE 11" вместо "** АГАТ **" отличается не только надписью, но и (ради чего её и делали) поведением после УПР-СБР: если нажать их после сброса модуля ЭмПЗУ, происходит нормальный полный сброс, а не попытка восстановить последнюю живую ОС (jmp $3f2). Это изменение было нужно для того, чтобы для полной перезагрузки машины не нужно было щелкать питанием: на корпус ставилась кнопка обнуления регистров состояния памяти и для перезапуска достаточно было нажать её и затем УПР-СБР.

Santechnik
10.07.2011, 02:05
С дисководами понятно. Буду делать один, но с возможностью выбора 140/840.
Я сейчас активно дисковод делаю, так что пока эти программы не срочно. Задача большая и займет некоторое время. Наверняка будут еще вопросы по форматам образов и протоколу.
Так же сделаю возможность подключения пультов/джойстика, но потом.
Прошивку оставлю "родную" - выключить DE1 не проблема, а память SRAM и кнопки сброса на плате не предусмотрено.
Спасибо, Voldemar0.

Santechnik
16.07.2011, 18:01
Обдумав различные варианты исполнения дисковода, остановился на варианте внешнего микроконтроллера. Преимущества такого решения: наглядность работы, отсутствие необходимости использования дисплея компьютера для интерфейса выбора образов, гибкость работы с наборами образов и папками на SD карте. Кром того, потенциально такую схему можно будет установить и в настоящий Агат. Недостаток - для запуска компьютера на DE1 потребуется изготовить простую плату расширения. Хотя, вероятно, я попробую в дальнейшем уложить этот микроконтроллер внутрь ПЛИС для тех, кто не хочет паять.
Схема состоит из микроконтроллера ATMega644, LCD дисплея 20х4, нескольких кнопок управления и SD слота. Причем вместе с DE1 можно будет использовать встроенный слот просто перенаправив сигналы. Так как конечной целью является изготовление "железной" версии Агата, то такой экранчик над клавиатурой будет достаточно удобен.
Заказанный из Китая программатор для ATMega все еще в пути, так что пришлось пока делать проект в Протеусе. На данный момент работают интерфейсы с SD картой и LCD дисплеем, т.е. читается структура директорий и файлов с карты и выводится на экранчик. По этой структуре можно перемещаться, заходить в директории и т.д.
Также я разобрался с работой контроллера 140К. Собираюсь использовать NIB файлы как наиболее универсальные. На данный момент мне нужны спецификации и структура этого формата. Не подскажете, где это можно почитать? Если есть Си библиотеки для всего этого, то было бы здорово их посмотреть тоже.

AlexBel
18.07.2011, 21:04
Посмотри проект Алекса Фрида - http://alexfreed.com/FPGApple/revisited.html
Зачем использовать лишний дисплей, когда можно воспользоваться существующим видеоконтроллером с небольшими доработками? Зато получится значительно информативней. Не поленись, собери проект Алекса и посмотри.

Santechnik
19.07.2011, 11:29
Я смотрел этот проект и рассматривал это решение как опцию. Но все же не понравилась "софтовость" решения. Хочется чего-то более железного. Т.к. я собираюсь делать АГАТ в отдельном корпусе, то мне показалось, что отдельный экранчик больше подойдет. Да и 4-х строк достаточно, чтобы искать нужный файл.

AlexBel
19.07.2011, 20:11
Ну, хозяин - барин :)

Santechnik
25.07.2011, 16:12
Программатор из Китая дополз-таки ко мне. Так что удалось собрать "дисковод" на макетке. Пока осваивал программатор запорол фьюзы :rolleyes: Предположил, что записались нули в источник клока, что означает внешний источник. Написал простенький генератор частоты 10Мгц на DE1, вывел его на внешний порт и подключил к контроллеру. Контроллер завелся и дал переписать себя нормальными значениями :v2_dizzy_punk: Так что если у кого-то валяются "запоротые" ATmega, то можете попробовать их оживить таким способом.
Пока "дисковод" работает сам по себе и не общается с DE1. DE1 выступает пока лишь в роли блока питания ;) Но зато он уже читает содержимое карты и отображает его на дисплее. При помощи кнопочек можно перемещаться по каталогам вверх и вниз, а при выборе файла можно испытать время чтения/записи сектора 512 байт в/из этого файла. Фотку прилагаю.
Благодаря Voldemar разобрался с файлами NIB. Так что следующий шаг - подружить этот дисковод с моим Агатом на DE1, чем сейчас и занимаюсь. И еще планирую задействовать SD ридер с DE1 вместо того, который воткнут на макетке, чтобы упростить немного задачу тем, кто захочет повторить. Пока все :v2_wink2:

Santechnik
05.08.2011, 14:20
За прошедшую неделю пришлось пересобрать схему на макетке (первая фотка).
Изначально планировалось запускать всю схему на 3.3V. Но потом я понял, что 12Мгц может не хватить, а чтобы запустить контроллер на 20Мгц надо 5V. Тогда в качестве временного решения я начал использовать ПЛИС на DE1 в качестве преобразователя уровней. Изначальное размещение на макетке не предусматривало этого и кончилось все пучками проводов. Во время прошивки контроллера где-то что-то отошло и он прошился криво и перестал отзываться на любые попытки, включая внешний генератор. :v2_dizzy_facepalm:
Был заказан новый контроллер (2 на всякий случай :)) и кое-что еще, чтобы сделать все по уму. В итоге на макетке поставил регуляторы напряжения LV7805 для 5V и LD1117V33 для 3.3V, сделав таким образом независимое от De1 питание.
Кроме того, пришлось сделать согласование уровней 3.3V <-> 5V. Для LCD требуется 6 однонаправленных сигналов 5V -> 3.3V и один двунапрвленный 5V <-> 3.3V. Для SD карты требуется 3 сигнала 5V -> 3.3V и один 5V <- 3.3V (последний можно подключить и без преобразования). Таким образом надо 9 однонаправленных 5V -> 3.3V, один двунапрвленный 5V <-> 3.3V и один необязательный 5V <- 3.3V.
В качестве решения использовал преобразователь SN74LVC4245 (тот что побольше на второй фотке), который позволяет передавать 8 сигналов из 5V в 3.3V или наоборот в зависимости от состояния одной из ножек. Чип достаточно дешев ($1.86 в розницу с бесплатной доставкой) и позволяет решить проблему для 8 из требуемых 9 однонаправленных преобразований.
Для остальных сигналов был использован двунаправленный преобразователь TXB0104 (тот что поменьше на второй фотке). Он позволяет передавать только 4 сигнала, но зато каждый из сигналов автоматически и независимо передается в любую сторону. Учитывая, что этот чип может передавать вдвое меньше сигналов, чем предыдущий, его цена достаточно высока ($2.49 в розницу), поэтому его нецелесообразно было использовать для однонаправленной передачи. К этому чипу был подключен оставшийся девятый однонаправленный сигнал, двунаправленный сигнал для LCD и, так как все равно оставались две свободные ноги, то и сигнал с 3.3 на 5V для SD карты.
Оба чипа я не нашел в DIP, поэтому пришлось изготовить платку для макетки (вторая фотка).
Теперь, когда все надежно собрано и работает автономно от DE1, наконец-то приступаю к соединению моего "дисковода" с DE1. Продолжение следует :)

Santechnik
27.08.2011, 07:13
Так как на последние мои апдейты никаких комментариев не последовало, то можно сделать вывод, что читателем это очень интересно, но нечего добавить, или всем наплевать ;) Видимо я по натуре оптимист, потому предполагаю первое :), следовательно очередной апдейт:v2_dizzy_write:
Сейчас у меня не очень много свободного времени для проекта, но он все же двигается, хоть и медленно. За это время был доделан "дисковод". На данный момент он может работать только в режиме чтения и только с дисками 140к. Кроме того имеются некоторые шероховатости в его ПО и требуется его интенсивное тестирование с разными программами. Очередное спасибо Voldemar за консультации, связанные с работой дисковода и его отладкой. :v2_thumb:
Кроме того, были доделаны модули ДопОЗУ (32 кб) и ЭмПЗУ (32 Кб). Таким образом, на данный момент компьютер имеет свои полные 96 кб памяти. Работа всех модулей памяти была успешно протестирована с помощью штатного теста памяти, который, в свою очередь, был загружен из образа при помощи моего "дисковода". На прилагаемых фотках работа "ТЕСТА ПАМЯТИ" и дисплей "дисковода" во время работы (прошу прощения за качество фото).
Следующие шаги - тестирование и отладка "дисковода" с различными образами и добавление остальных графических режимов (если помните, сейчас работает только режим АЦР-32).
Пока все ;)

b2m
27.08.2011, 13:50
читателем это очень интересно, но нечего добавить
Именно так. Сам я для своей DE1 вряд-ли чего-то паять буду. Вот если бы это всё было внутри DE1, тогда я бы подключился :)

svofski
30.08.2011, 20:21
Очень интересно. Просто правда же, сказать особенно нечего. Всякий раз смотрю и молча восхищаюсь, думаю, -- "ух ты!".

Santechnik
21.09.2011, 14:50
Я очень рад, что проект интересен. Спасибо! :v2_cheer: Небольшой апдейт: проект движется, но, к сожалению, все еще не могу уделять ему достаточно времени. И по всей видимости в октябре и вовсе такой возможности не будет: в начале месяца переезд, а в конце - экзамен. Но зато в ноябре развернусь! :v2_cool:
Уперся в проблему, что "дисковод" не хотел читать правильно дорожки после примерно 3 или 4-ой. Сегодня догадался в чем дело - необходим специфический тип переменной для функции сдвига по файлу библиотеки FatFS, которую я использую для доступа к карте памяти. После исправления все заработало. Вот ШКОЛЬНИЦА и загруженная РАПИРА с этого диска. Штатный Бейсик загружается, но почему-то после этого начинает печатать Ъ на экране, как будто залипла клавиша. Похоже Бейсик по другому опрашивает клаву. Буду разбираться с ним, а также тестировать другие образы.
И еще, при включении питания дисковода в 9-ти случаях из 10-ти микроконтроллером не определяется SD карта. После нажатия Reset, карта определяется и дальше работает без проблем. В принципе мешает не сильно, но как-то это неправильно. Интересно, от чего это может быть?

AlexBel
21.09.2011, 14:55
Если используешь либу от Чена, то как у тебя инициализируется файловая система и подключается карточка? Пришли этот участок кода.

Кирлиан
21.09.2011, 15:17
Слежу. Интересно. Нечего добавить.

Sergei Frolov
21.09.2011, 15:22
Я тоже. Очень интересно.

breeze
21.09.2011, 15:35
Аналогично :) Одна из первых и любимых игр на Агат была — Bolo :)

Santechnik
21.09.2011, 15:41
Да код простой:


driveStatus = disk_initialize(0);

Функция сама тоже от Чена:


/*-----------------------------------------------------------------------*/
/* Initialize Disk Drive */
/*-----------------------------------------------------------------------*/

DSTATUS disk_initialize (
BYTE drv /* Physical drive nmuber (0) */
)
{
BYTE n, cmd, ty, ocr[4];

if (drv) return STA_NOINIT; /* Supports only single drive */

if (Stat & STA_NODISK) return Stat; /* No card in the socket */

power_on(); /* Force socket power on */

FCLK_SLOW();
for (n = 10; n; n--) rcvr_spi(); /* 80 dummy clocks */
//for(int i=0;i<10;i++)
// SPI_transmit(0xff); //80 clock pulses spent before sending the first command

ty = 0;


int retry=0;
int reset_complete = 1;
BYTE response = 0x00;
do
{
response = send_cmd(CMD0, 0); //send 'reset & go idle' command
retry++;
if(retry>0x20)
{
reset_complete = 0; //time out, card not detected
break;
}
} while(response != 0x01);


if (reset_complete == 1/*send_cmd(CMD0, 0) == 1*/) /* Enter Idle state */
{
//sendStr0("Enter Idle state complite");
//Timer1 = 100; /* Initialization timeout of 1000 msec */
//_delay_ms(100);
if (send_cmd(CMD8, 0x1AA) == 1) { /* SDv2? */
for (n = 0; n < 4; n++) ocr[n] = rcvr_spi(); /* Get trailing return value of R7 resp */
if (ocr[2] == 0x01 && ocr[3] == 0xAA)
{ /* The card can work at vdd range of 2.7-3.6V */
//while (Timer1 && send_cmd(ACMD41, 1UL << 30)); /* Wait for leaving idle state (ACMD41 with HCS bit) */
int counter1 = 0;
char buff[100];
for (int i = 0; i < 10 && send_cmd(ACMD41, 1UL << 30); i++)
{
_delay_ms(10);
counter1+=10;
}

if (/*Timer1 && */send_cmd(CMD58, 0) == 0)
{ /* Check CCS bit in the OCR */
for (n = 0; n < 4; n++) ocr[n] = rcvr_spi();
ty = (ocr[0] & 0x40) ? CT_SD2 | CT_BLOCK : CT_SD2; /* SDv2 */
}
}
} else { /* SDv1 or MMCv3 */
if (send_cmd(ACMD41, 0) <= 1) {
ty = CT_SD1; cmd = ACMD41; /* SDv1 */
} else {
ty = CT_MMC; cmd = CMD1; /* MMCv3 */
}
//while (Timer1 && send_cmd(cmd, 0)); /* Wait for leaving idle state */
for (int i = 0; i < 10 && send_cmd(cmd, 0); i++)
_delay_ms(10);

_delay_ms(10);
if (/*!Timer1 || */send_cmd(CMD16, 512) != 0) /* Set R/W block length to 512 */
ty = 0;
}
}
else
{
}

CardType = ty;
deselect();

if (ty) { /* Initialization succeded */
Stat &= ~STA_NOINIT; /* Clear STA_NOINIT */
FCLK_FAST();
} else { /* Initialization failed */
power_off();
}

return Stat;
}

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


Аналогично :) Одна из первых и любимых игр на Агат была — Bolo :)

:v2_thumb: Супер игрушка! Только ради нее стоит этот комп построить!

Всем спасибо за поддержку! :v2_dizzy_vodka3:

Sergei Frolov
21.09.2011, 15:43
У меня есть BOLO для PC. :)

AlexBel
21.09.2011, 16:04
Да код простой:


driveStatus = disk_initialize(0);

Функция сама тоже от Чена:

...............................

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


Не совсем то, про что я говорил, но, видимо, просто неправильно сформулировал вопрос :)

Вот как это делаю я:


f_mount(0, &fatfs);
if((WORD)disk_initialize(0))
{
xputs(PSTR("SD-card not ready! STOP!\n"));
while(1);
}

Питание у меня подается на карточку всегда постоянно, его коммутацию я не делаю. Сигналы CD и WP, как правило, сидят постоянно на нуле, вернее, вместо их опроса я в программу втыкаю "заглушку". Резисторы на подтяжку я ставил и не ставил - разницы не заметил, хотя стараюсь, по возможности, ставить. Либу Чена использовал с AVR и PIC24.
В общем - никаких проблем. Попробуй сделать так, как я.

---------- Post added at 16:04 ---------- Previous post was at 16:03 ----------


У меня есть BOLO для PC. :)

Только хотел сюда выложить :)

Santechnik
21.09.2011, 16:35
Я примерно так и делал. Сейчас поменял на твой вариант - то же самое. Это еще и в карточке дело может быть. Я только на одной пробовал. Если ты видел, то я гребенку припаял прямо к переходнику MiniSD -> SD и уже в него вставляю miniSD карту, а она у меня одна. В планах вывести на слот на DE1. Тогда можно будет с разными картами попробовать.
А тебе не трудно выслать твою версию disk_initialize? Может в ней дело?

AlexBel
21.09.2011, 17:44
Я примерно так и делал. Сейчас поменял на твой вариант - то же самое. Это еще и в карточке дело может быть. Я только на одной пробовал. Если ты видел, то я гребенку припаял прямо к переходнику MiniSD -> SD и уже в него вставляю miniSD карту, а она у меня одна. В планах вывести на слот на DE1. Тогда можно будет с разными картами попробовать.
А тебе не трудно выслать твою версию disk_initialize? Может в ней дело?

Не, как у тебя - я не видел. Вообще удивительно, что ты не использовал слот, что на ДЕ1 стоит. Из-за самой какточки тоже может быть, хоть я такого и не встречал, но не раз слышал, что бывает. У тебя какой контроллер работает с карточкой? Я тебе в личку кинул ссылку на мой проект - посмотри.

Кирлиан
10.11.2011, 14:30
Есть ли новости по проекту?

Santechnik
11.11.2011, 02:53
Проект не заброшен. Но не было времени заниматься им последний месяц, да и сейчас после переезда еще не оборудовал себе постоянное место, чтобы все было под рукой и никто из домашних туда не подходил. :) Но за это время я все же поэксперементировал с тем что есть и убедился в том, что софт-процессор Т65, который я использую, далек от совершенства. Циклы не совпадают с оригиналом, да и недокументированные команды не поддерживает. Попробовал еще раз несколько других (из проекта Commodore и TrueCycle), но первый оказался ничем не лучше, а второй я так и не смог запустить. Но в любом случае все они не поддерживают недокументированные команды и имеют кое-какие другие различия с оригиналом. :(
Для АГАТа точное время исполнения каждой инструкции чрезвычайно важно, так как это необходимое условие синхронизации с дисководом. Так как разные ОС используют разные процедуры задержек, то на Т65, ввиду отличий от оригинала, интервалы между запросами отличаются. Таким образом, если я настраиваю дисковод на одни интервалы, то грузится успешно одно, если на другие, то другое. Некоторое же не грузится совсем если использует разные методы, которые приводят к неравномерным задержкам на софт-процессорах в отличие от оригинала.
Кроме того, мне хочется получить 100% совместимый компьютер, поэтому самым надежным способом я вижу использование оригинального процессора в проекте. Да, это еще дальше отодвигает проект от DE1, но зато позволит изготовить наиболее точный аналог АГАТа, что для меня важнее.
Итак, я нашел на ebay болгарский аналог 6502 - СМ630 по цене рубль за стакан и заказал 5 штук. Все они вместе с доставкой обошлись мне в 20$. Я ни разу не получал ничего из Болгарии, поэтому не знаю как долго идет посылка, но надеюсь получить ее до конца месяца. А пока я оборудую себе рабочее место и потихоньку переписываю проект под этот проц. Чтобы избежать лишних шлейфов, хочу сделать платку ЛУТом под проц с разъемом на торце, которую воткну прямо в DE1. Будет чем заняться пока жду процессоры.
Кстати, когда я закончу проект, то плат компьютера у меня тоже будет 5 (или даже 10), так как там где я заказываю они меньше не делают, но все равно это дешевле, чем 1 в других местах. Так что если получится проект, то смогу желающим вместе с процами выслать для повторения.
Но раз уж все равно я здесь с апдейтом, то заодно и спрошу, как правильнее этот проц подключать? ;) RDY, RES, NMI и IRQ понятно - через подтягивающие в 1К. Адреса и данные можно напрямую. Надо ли подтягивать резюком Ф0? Что делать с SO? Сажать на землю или через резюк на 5V? Что делать с выходами SYNC, Ф1 и Ф2, которые не используются? Посадить через резюки на землю?

Кирлиан
11.11.2011, 18:46
Кстати, когда я закончу проект, то плат компьютера у меня тоже будет 5 (или даже 10), так как там где я заказываю они меньше не делают, но все равно это дешевле, чем 1 в других местах. Так что если получится проект, то смогу желающим вместе с процами выслать для повторения.

Как минимум один желающий у тебя будет!
:v2_dizzy_mutant:

KokaF77
11.11.2011, 19:21
поэтому самым надежным способом я вижу использование оригинального процессора в проекте
Мне этот поход больше нравится. Не хотел писать раньше в тему, но момент пришёл. :)

Кстати, когда я закончу проект, то плат компьютера у меня тоже будет 5 (или даже 10), так как там где я заказываю они меньше не делают, но все равно это дешевле, чем 1 в других местах. Так что если получится проект, то смогу желающим вместе с процами выслать для повторения.
Занимаю очередь в списке желающих. :)

Есть один вопросик. Будет ли в дальнейшем реализована "шина", для подключения реальных интерфейсных плат? Очень бы хотелось это иметь. :)

GARNIZON
11.11.2011, 19:35
использование оригинального процессора в проекте

Тогда я тоже в очередь полюбому....





Но раз уж все равно я здесь с апдейтом, то заодно и спрошу, как правильнее этот проц подключать?

Любую агатовскую схему (ну проще конечно семёрочный модуль проца) взять - там все лапки аккуратно нарисованы

KokaF77
11.11.2011, 19:45
GARNIZON, может вместо 6502 на рассыпухе CPU соберём всем сообществом?! ;)

Santechnik
12.11.2011, 10:51
О как! :v2_dizzy_tired2: Не ожидал такого интереса. Спасибо! Проект начинал делать просто для удовольствия на DE1, но потом ему там стало тесновато и вот уже что-то типа Агат-2011 получается. Наверное пора DE1 выкидывать из названия темы :) Очень рад, что поддержали идею с процессором, т.к. я думал, что никто не захочет собирать этот комп и тогда проект будет совсем никому не интересен кроме меня самого.
Насчет шины я не думал пока. Но плат расширения было не так много для него. Может просто добавить их все на ПЛИС, там места полно, и просто включать при желании? Иначе может получиться так, что придется слишком многоногую ПЛИС использовать из-за шины, а ее руками не припаяешь. Но это уже шашечки - обсудим и прикинем потом. Так же как и S-Video выход. Пока приоритеты такие:

Заставить его работать с родным процессором
Доотладить дисковод
Доделать все графические режимы
Сделать возможность записи на "дискету"
Сделать дисковод 840к
Сделать контроллер клавиатуры

По поводу контроллера клавиатуры - я собираюсь делать свою клавиатуру с оригинальной раскладкой. PS2 останется тоже. Даже кнопки уже купил :D. Хочу в одном корпусе собрать. Контроллером этой клавы будет или ATmega16, или сама ПЛИС. Второй вариант проще, но потребует больше ног у ПЛИС. 138 I/O (корпус 208-BFQFP) это пожалуй максимум, что можно позволить. В идеале было бы здорово в 85 уложиться (корпус 144-LQFP). Но там дальше посмотрим.
С лишними платами тоже решим ближе к делу. Может быть интереснее будет делать rev.2 с исправлениями.

GARNIZON, не могу найти такую схему у Мымрина - там только используемые пины. Буду благодарен за номер страницы или просто за кусочек схемы если это в другом источнике.

b2m
12.11.2011, 17:40
Контроллером этой клавы будет или ATmega16, или сама ПЛИС. Второй вариант проще, но потребует больше ног у ПЛИС.
Можно немного сократить количество ног к клавиатуре, если обращаться к рядам/строкам через дешифраторы. А если ещё и счётчики добавить к дешифраторам, то можно опрашивать состояние клавиш через три ноги: сброс счётчиков, такт счётчиков и состояние клавиши.

---------- Post added at 18:40 ---------- Previous post was at 18:30 ----------

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

GARNIZON
12.11.2011, 17:50
По поводу контроллера клавиатуры - я собираюсь делать свою клавиатуру с оригинальной раскладкой. PS2 останется тоже.

не могу найти такую схему у Мымрина - там только используемые пины. Буду благодарен за номер страницы или просто за кусочек схемы если это в другом источнике.

А может легче под родную клаву сделать?

Стр 161. Там описание модуля ЦПУ и схема.

vinxru
12.11.2011, 20:12
Можно и без сброса счётчиков, если сделать один "псевдо-ряд" который будет возвращать определённый код синхронизации, например нажаты все "клавиши" в ряду кроме одной-двух.

А можно и беспроводную. :)

Santechnik
13.11.2011, 01:33
Можно немного сократить количество ног к клавиатуре, если обращаться к рядам/строкам через дешифраторы.

Прикинул по быстрому - получилось всего на 3 ноги больше, чем на микроконтроллере даже без счетчиков. Но на 10 ног меньше, чем если на прямую. То что надо:v2_thumb: Когда до клавиатуры дойду будет уже понятно сколько ног остается и тогда окончательно определюсь.


А может легче под родную клаву сделать?

А у меня нет родной. Да и у многих мне кажется тоже нет. И я хотел все в одном корпусе сделать. Но там скорее всего пины плис останутся и их можно вывести на разъем. Так что можно будет подключить что-нибудь еще.


Стр 161. Там описание модуля ЦПУ и схема.

Я там и смотрел. Не вижу SYNC и прочих. Посмотрел схему Агат-9, но там все использованы. SO правда на землю кинут, но не факт, что у семерки так же. А остальные как-будто в воздухе висят, что кажется неправильным.

GARNIZON
13.11.2011, 12:50
Voldemar0:

> Надо ли подтягивать резюком Ф0? Что делать с SO? Сажать на землю или через резюк на 5V? Что делать с выходами SYNC, Ф1 и Ф2, которые не используются? Посадить через резюки на землю?

http://deka.ssmu.ru/er/agat/Images/new_CPU/cpu0f.jpg
http://deka.ssmu.ru/er/agat/Images/new_CPU/cpu0b.jpg
Understanding Apple ][, Jim Sather, страница где-то 62 (вообще, очень наглядная книжка),
http://deka.ssmu.ru/er/agat/Reading/docs/Mymrin.djvu
Страницы примерно со 162,

- ф0, лапка 37 - куда и зачем его подтягивать? Туда приходит тактовая частота от внешнего генератора. Толстый жирный меандр. Вообще без вопросов.

- S.O., лапка 38 - странно, но факт: никуда не подключен. Даже по плате посмотрел - висит в воздухе. Может у него там internal pullup или down... И что ещё интересно: в некоторых мануалах на 6502 он вообще обозначен как NC. В эпле его садят на землю.

- SYNC, лапка 7 - не используется, болтается в воздухе. Некоторые считают его входом, но большинство сходятся на том, что это выход. Предназначен для пошаговой отладки.
Вряд ли ему нужен резистор.

- ф1, ф2, лапки 3 и 39 - так это выходные сигналы, какие вопросы ? Проц получает ф0 и из него формирует эти два, слегка фазосдвинутых, сигнала. Никаких резисторов, только в агате они вообще неиспользуются, а вот в эпле ф1 используется. Почему в агате от них отказались (и были вынуждены придумывать своё внешнее решение !) - не знаю. Если не используются - просто висят в воздухе: что в агате, что в эпле.

====

> Прикинул по быстрому - получилось всего на 3 ноги больше, чем на микроконтроллере даже без счетчиков. Но на 10 ног меньше, чем если на прямую.

Лучше счётчик+дешифратор (что-то вроде ие7 + ид3), чем контроллер: в случае проблем/ремонта контроллер надо прошивать, а копеечную микруху можно просто заменить (если именно о пользовательском, а не отладочном варианте).

Но если уж контроллер: можно попробовать взять вообще что-то вроде ATMega8, которая раза в три дешевле 16-й, и использовать её АЦП: т.е. группы клавиш объединять параллельно, но с использованием резисторов разного номинала. Получается аналоговый ввод в пределах группы. У ATMega8 шесть аналоговых входов, можно сделать, например, две группы (переключаемых цифровыми выходами) * восемь уровней напряжения * 4 аналоговых входа = 64 клавиши при 6 используемых лап.

Возможно, тогда на этот проц можно будет навесить ещё какие нибудь функции.
Да хотя бы на оставшиеся две аналоговых лапы пульты повесить.

---------- Post added at 11:50 ---------- Previous post was at 11:47 ----------

PS
> Лучше счётчик+дешифратор (что-то вроде ие7 + ид3)
к176ие8 - всё в одном

Santechnik
14.11.2011, 11:52
Спасибо, то что надо. :v2_thumb: Как-то не люблю лапы оставлять на весу, ну да ладно - буду пробовать так.


Voldemar0:
Но если уж контроллер: можно попробовать взять вообще что-то вроде ATMega8, которая раза в три дешевле 16-й, и использовать её АЦП:


Интересная идея - ни разу не слышал о таких клавах до этого. Возьму на вооружение.


PS
> Лучше счётчик+дешифратор (что-то вроде ие7 + ид3)
к176ие8 - всё в одном

Мне так тоже больше нравится. Но если много ног лишних на ПЛИС останется, то вообще все туда заведу, поэтому пока клаву делать не буду.

GARNIZON
14.11.2011, 12:28
Нехорошо входные лапы на весу. А выходные - всегда так делались. И не только в агате. Может быть ты путаешь с КМОПами - там было больше привередств ? Но даже и в КМОП-схемах вроде выходы бросались всегда.

-=-

Кнопки с АЦП-входом часто используются в бытовой технике. У меня видак, например, panasonic nv-mv20 так сделан: один вход и около десятка кнопок. И не только в нём я это видел. В автомобильных магнитолах попадались.

Santechnik
23.11.2011, 08:09
Вчера получил посылку из Болгарии с процессорами. :v2_dizzy_christmas: Процы все с разными датами выпуска - от 1987 года до 1990. На некоторых следы припоя. Похоже что не зря заказал 5 штук - надеюсь хоть пара из них будет работать. Сегодня вечером буду травить платку подключения к DE1. Надеюсь запустить комп от процессора на днях. :v2_dizzy_army:
Один из участников форума предложил выслать мне для испытаний родную клаву Агата, за что ему огромное спасибо. :v2_dizzy_vodka2: Таким образом, сейчас я определился с концепцией клавиатуры. Наряду с PS/2 буду делать разъем для подключения родной клавы, но кроме этого буду делать аналог родной клавы для подключения к этому же разъему.Это позволит сделать комп в отдельном корпусе и подключить к нему или PS2 клаву, или родную клаву, или самодельную версию родной клавы. Либо просто обьединить его в одном корпусе с самодельной клавой.
Т.к. теперь надо будет обеспечивать протокол обмена с клавиатурой совместимый с родным, клава будет делаться на компактной ATTiny. Опрос клавиш хочу попробовать сделать по комбинированной схеме: перебор рядов будет осуществляться счетчиком/мультиплексором 4017, а чтение через аналогово-цифровой преобразователь контроллера в зависимости от сопротивления (разное для каждой колонки). Матрица получится 10 рядов на 7 колонок. Для управления 4017 понадобится 2 ноги контроллера - одна на clk и вторая на выход номер 12 для синхронизации на каждом 1-ом и 5-ом такте. Ну и одна нога на АЦП. Попозже попробую в Протеусе испытать, а потом и на макетке, если заработает.

Santechnik
26.11.2011, 14:16
Суббота прошла не напрасно. Несмотря на то, что до сих пор нет нормального места для работы, запустил Агат на родном процессоре. :v2_thumb: Пока нет поддержки записи/чтения н магнитофон и пока не прикрутил дисковод. Но самое главное, что комп работает на родном процессоре.:v2_dizzy_punk:
Фотки прилагаю. Завтра буду тестировать работу памяти, прикручивать магнитофон и дисковод.:v2_dizzy_coder:

Santechnik
30.11.2011, 13:02
Добился значительного прогресса за последние несколько дней. Протестировал работу всех частей компьютера с новым процессором - все работает прекрасно. Дисковод тоже работает :v2_dizzy_roll: Загружаются все образы дисков которые у меня есть. :v2_cool: Попортили крови регистры страниц памяти - я сделал запись в них при любом обращении, а оказывается только при записи надо. И некоторые системы сбрасывали его при попытке прочитать оттуда. Дошло не сразу почему они не запускаются :v2_dizzy_wall:
На приложенных фотках: загруженный с "диска" тест памяти успешно пройден, образ DOS_FAST, образ ALVSUPER, ШКОЛЬНИЦА и ее ОТЛАДОЧНЫЙ КОМПЛЕКС.
Сейчас начинаю делать граф. режимы. Есть ли какая-то программа для тестирования их? А то ГСР и ГВР я еще кое-как из Бейсика могу запустить, а вот ГНР нет.

Sergei Frolov
30.11.2011, 13:05
Там в Бейсике есть тест комплексный, он ГНР проверяет.

Santechnik
01.12.2011, 15:55
Закончил сегодня с графическими режимами. Работают все теперь. Даже в игрушки погонял :v2_smoke: Вот фотки "Комплексного теста". Все правильно отображается?
Дальше по плану прикрутить еще звук и наверное начну делать запись на диск. И тогда вопрос по записи: как он пишет на 140к дискеты - целиком дорожку? Или пытается сектора искать?

Sergei Frolov
01.12.2011, 15:56
Ищет сектора

Santechnik
02.12.2011, 16:54
Сейчас пытаюсь продумать концепцию компьютера. Итак, оригинальный Агат-7 имел 7 слотов расширения. Слот 0 могла занимать ячейка 121, слот 1 всегда занят процессорным модулем, слот 2 и 4 расширение памяти, слот 3 контроллер дисковода. В слоте 5 устанавливалась плата интерфейса (ППИ). К ней можно подключить принтер, мышь и пр. Слот номер 6 свободен.
Т. к. мы отходим от изначальной идеи запустить комп на DE1 в сторону реплики, то я склоняюсь к идее все же добавить и ячейку 121 с переключателем выбора.
Так же мне кажется интересным сделать встроенную плату ППИ с разъемом. Будет интересно подключить к нему например принтер. Цена этого разъема - примерно 25 ног ПЛИС.
Остается свободный слот 6, который можно ценой еще примерно 35 ног вытащить наружу для подключения доп. плат. Вот здесь я сомневаюсь в целесообразности. Я не знаю что еще может реально понадобиться подключить. Оставшиеся платы расширения редки и как правило работают. только со своим софтом.
Давайте обсудим. Мне интересно ваше мнение.

Sergei Frolov
02.12.2011, 17:01
У меня в семерке стояли два дисковода: на 140 и на 840 в 6-м и 3-м слоте соответственно.

Ячейка 121-я была, но не пользовался ею.

Santechnik
02.12.2011, 17:16
Да. Точно. Спасибо. Я про второй дисковод забыл. Правда у меня будет один дисковод, но можно будет выбирать каким он будет - 140 или 840. Так что наверное все же 6 слот будет свободен.

GARNIZON
02.12.2011, 22:21
В ячейке121 конечно нет смысла, это точно.

Ячейка ППИ - мощная штука, возможностей куча.
У одного из прожженых Агатовцев (работник ЛЭМЗ), я в прошлом году забирал у него диски,
Агат-7 с ячППИ используется на даче как примитивный клон системы "умный дом",
я тогда еще удивился зачем такие заморочки если можно купить спец устройство.
Он сказал для души. Понравилось что к завершению второй бутылки, он взялся на бейсике писать
алгоритм для красивого мигания гирлянды на ёлке. Вроде что-то не вышло, и она как-то странно мерцала,
но мне так и так бы наверное понравилось, потому-что :v2_dizzy_vodka3:

А вот слота снаружи. может быть полезна для снятия образов дисков для истории,
можно прям с реального на виртуальный флоп копировать....

Кстати, а если реплика, то плата под какой-то маленький корпус будет заточена? типа как speccy2010?
И как обстоят дела с совмещением режимов?

Santechnik
03.12.2011, 15:38
В ячейке121 конечно нет смысла, это точно.

Почему так категорично? Насколько я понимаю добавить ее не очень сложно, дополнительных выводов она не потребует (только одна нога для вкл./выкл.) а бонусная возможность запускать проги от Эппла не помешает как мне кажется. Неужели большинство прог адаптировано?


Ячейка ППИ - мощная штука, возможностей куча.

Согласен. Надо бы добавить. Посчитал поточнее - надо 26 ног.


А вот слота снаружи. может быть полезна для снятия образов дисков для истории,
можно прям с реального на виртуальный флоп копировать....

Действительно ценное свойство. Если я правильно посчитал, то 38 ног надо на слот.
На остальной проект надо 99 ног (если ничего не упустил). Плюс если делать S-Video, то еще 2. Итого 99+2+26+38=165 ног.:v2_conf2: Такое кол-во ног только у Cyclone I (185 I/O, $30) или в BGA корпусе, который на коленке не припаяешь. Я делаю проект для Cyclone II и боюсь что будет много проблем при переходе на первый. Cyclone II имеет 142 I/O ($17), Cyclone III - 160 I/O ($30). BGA версии Cyclone II и III стоят около $15 и имеют 182 I/O.
Я вижу такие варианты:
1) Переход на первый циклон. Опасаюсь проблем. Надо узнавать больше.
2) Установка BGA. В этом случае плата (целиком) будет паяться на заводе. Цены на услуги пока не уточнял, но в первом попавшемся месте стоит ценник $40 за плату при заказе от 5 до 10 штук. Уверен, что можно найти дешевле если поискать. Т.к. сам чип стоит только $15, то себестоимость платы будет только на 25$ выше, чем вариант 1, но зато никаких проблем с переходом на ранний циклон и фирменная качественно спаянная плата. Останется только включить питание. :v2_wink2: Еще одно скрытое увеличение стоимости возможно из-за более дорогой 4-х слойной платы, но это вероятно компенсируется более дешевыми SMD компонентами и меньшим размером платы.
3) Распаять ППИ на дискретах и подключить ее к ПЛИС как второй слот. В этом случае понадобится 3 доп. ноги. Итого будет 142 ноги - в точности сколько у второго циклона. Я бы не стал рассчитывать на этот вариант - наверняка обсчитался в чем-то или еще понадобится что-то еще. Так что будет ставиться 160 выходной третий циклон за $30. Распайка ППИ на дискретах тоже увеличит стоимость компонентов и размер платы (тоже дороже).

При таком раскладе мне лично нравится больше всего вариант номер 2. Какие есть идеи?


Кстати, а если реплика, то плата под какой-то маленький корпус будет заточена? типа как speccy2010?

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


И как обстоят дела с совмещением режимов?

Ты имеешь ввиду текстовый/графический? Не тестировал еще, но я сделаю выключатель, который позволит переключать частоту прерываний.

Кирлиан
04.12.2011, 20:17
Как потенциальному пользователю, мне ближе вариант 2.

Santechnik
06.12.2011, 14:45
Ну ладно. Будем значит делать "полный фарш" :) По крайней мере сократить всегда можно будет и развести версию "лайт". А не подскажете номиналы у звукового выхода у оригинала? Хочу попробовать вывести звук по такой же схеме. Я прикинул, что байпас на 47р, переменник на 1к, а перед транзистором 10n и 10к. Интересно проверить. :v2_dizzy_botan:

GARNIZON
16.12.2011, 10:31
Voldemar0:

Привет!

У нас тут вылезла одна проблемка типа вопрос: в перерытой куче документов по 6502 ничего не говорится о состоянии слова флагов после сброса. Но в некоторых местах (очень редких) упоминается, что, например, флаг запрещения прерываний I после сброса всегда поднят.

Как с этим обстоит дело в моделях проца, предлагаемых для ПЛИС ?

При разборе очередной коллекции была встречена группа программ, которые к этому вопросу оказались чувствительны. Что, конечно, неправильно, но факт.

Sergei Frolov
16.12.2011, 10:38
Да, флаг I после сброса всегда поднят, а десятичный режим отключен.

GARNIZON
18.12.2011, 16:15
Увы :((

Проверил на реале:

Набираем:
7000:A9 00 BA 86 F0 48 28 4C
7008:07 70 08 D8 A2 00 88 D0
7010:FD CA D0 FA A6 F0 CA 9A
7018:68 A2 07 0A 48 A9 B0 69
7020:00 20 29 70 68 CA 10 F3
7028:60 6C 36 00

F800<F800.FFFFM
FFFC:A 70

--

для семёрки: C220:0
[ЭмПЗУ должен быть во втором слоте]

для девятки: C082:2

--

7000G
<упр-сбр>

смотрим ответ (00000000)

--

7001:FF
7000G
<упр-сбр>

смотрим ответ (11111111)

--

7001:55
7000G
<упр-сбр>

смотрим ответ (01010101)

--

7001:AA
7000G
<упр-сбр>

смотрим ответ (10101010)

====

Протестированы um6502 [9], что-то с эмблемкой Rockwell [7] и scl 6502 [9].

Resume: похоже, проц вообще не меняет слова состояния при сбросе. Возможно, что-то задаётся при включении питания, но никакого теоретического подтверждения этому пока не найдено.

====

Проверка кода:


*7000L

7000- A9 00 LDA #$00
7002- BA TSX
7003- 86 F0 STX $F0
7005- 48 PHA
7006- 28 PLP
7007- 4C 07 70 JMP $7007
700A- 08 PHP
700B- D8 CLD
700C- A2 00 LDX #$00
700E- 88 DEY
700F- D0 FD BNE $700E
7011- CA DEX
7012- D0 FA BNE $700E
7014- A6 F0 LDX $F0
7016- CA DEX
7017- 9A TXS
7018- 68 PLA
7019- A2 07 LDX #$07
701B- 0A ASL
701C- 48 PHA
701D- A9 B0 LDA #$B0
701F- 69 00 ADC #$00
7021- 20 29 70 JSR $7029
7024- 68 PLA
7025- CA DEX
7026- 10 F3 BPL $701B
7028- 60 RTS
7029- 6C 36 00 JMP ($0036)


Код несколько усложнён из-за того, что комбинация УПР-СБР не имеет защиты от "дребезга" и, таким образом, программе нужно отличить первый RESET (когда слово флагов жестко задано), от последующих (когда повторные RESET прерывают проц в менее определённых местах).

P.S. Флаг D сбрасывается только у 65c02 - в его описании на это сделан акцент, причем поведение 6502 (флаг не меняется) признан ошибкой.

Santechnik
01.02.2012, 14:01
После небольшого перерыва продолжаю делать Агат. За это время собрал схемку звукового вывода. Пришлось поэкспериментировать и третий вариант заработал вполне удовлетворительно и с достаточной громкостью. :v2_walkm: Вместо дарлингтона, как было в варианте Apple, применил MOSFET. Чуть позже поиграюсь с частотой прерываний, чтобы добиться идентичности звучания в программах, которые используют его для вывода звуков.
Вывод на экран в программах использующих совмещение режимов неудовлетворительный. Треть экрана мерцает белым, верхняя треть просто неприятно мерцает. Частота прерывания привязана к частоте развертки (60 Гц). Игрался и с фазой, и со скважностью (привязывал к верт. синхронизации) - приемлемого результата не добился. Осталось попробовать выставить 50Гц... Вообще у меня подозрение, что на LCD мониторе немерцающую картинку получить не получится. Видимо придется делать S-Video выход для дальнейших экспериментов в этом направлении. Планирую использовать AD725 для этой цели. Она конечно дороговата, но схема проста и надежна и позволит сделать еще и композитный выход заодно. Можно еще сделать режим 800х600х50Гц, но картинка не будет на весь экран и из-за этого опять может быть рассинхронизация. Вообще, каков алгоритм переключения разрешений у таких программ?

balu_dark
01.02.2012, 16:37
возможно то что видите под мерцанием - просто режим интерлейс. Большинство современных телеков и моников работают в прогрессивном режиме. то есть выводят кадр целиком а не в виде полукадров с четными и нечетными строками. побороть может только дисплей с автоматическим распознаванием и переключением в нужный режим или скандаблер с видео буффером.

GARNIZON
01.02.2012, 18:59
применил MOSFET

Динамик не спали :))



попробовать выставить 50Гц... Вообще у меня подозрение, что на LCD мониторе немерцающую картинку получить не получится.

Или картинка или музыка...



Планирую использовать AD725

Что она умеет ? Сколько стоит ?



Вообще, каков алгоритм переключения разрешений у таких программ?

Совершенно бесхитростный: счётчики физических строк и столбцов в агате работают непрерывно. И синхронизация (в семёрке, во всяком случае) идёт от них, тоже непрерывно. А обработчик прерываний просто переключает режимы отображения видео: по NMI (50 Гц) - один режим, а по IRQ (500 Гц) - другой, но не на каждое IRQ, а на какое-то по счёту после NMI (таким образом, счётчик определяет примерную высоту (номер строки) смены режимов. Естесно, IRQ по счёту не больше 10-го, потому что на 10-й IRQ снова пройдет NMI - т.е. начнётся новый кадр.

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

Поскольку синхро идёт без прерываний, любой моник, даже LCD, будет уверен что это просто такой видеосигнал. И будет его отображать. А контроллер дисплея, после некоторой части кадра, начнёт просто по другому формировать RGB: это и называется "совмещение".

Интерлейс в агате не использовался. Нафиг он там нужен ? :)

Небольшое ограничение на выбор IRQ: чтобы оно не попадало близко к середине строки, особенно если строка не чёрная: контроллер может сменить режим и в середине строки, но выглядеть это будет несколько коряво (не знаю почему, но наблюдал такое).

Смена режима может затрагивать любой аспект работы контроллера: как адреса видеопамяти так и собственно режим отображения.

Santechnik
02.02.2012, 16:39
Динамик не спали :))

"Усё под контролем, шеф" :)

AD725 стоит от 4$ из Китая на ebay (но я бы не стал это там покупать) до 10$ в digikey (около 30$ доставка по миру, но имеет смысл если много всего заказывается - на круг выходит дешевле) или 16$ здесь у меня под боком с бесплатной доставкой. Умеет,имея на входе RGB и синхру, выдавать на выход S-Video И композит в PAL или NTSC. Обвязка всего несколько резюков и кондеев.


Совершенно бесхитростный: счётчики физических строк и столбцов в агате работают непрерывно. И синхронизация (в семёрке, во всяком случае) идёт от них, тоже непрерывно. А обработчик прерываний просто переключает режимы отображения видео: по NMI (50 Гц) - один режим, а по IRQ (500 Гц) - другой, но не на каждое IRQ, а на какое-то по счёту после NMI (таким образом, счётчик определяет примерную высоту (номер строки) смены режимов. Естесно, IRQ по счёту не больше 10-го, потому что на 10-й IRQ снова пройдет NMI - т.е. начнётся новый кадр.

Вот ведь! А я не думал, что IRQ используется. :v2_rolley Я думал, что он только для звука. Он там что-то 470Гц или около того у меня. Попробую сделать 600Гц. Спасибо! А вообще можно будет переключатель повесить 50/500 <-> 60/600 - вряд ли и навороченная музыка, и совмещенные режимы понадобятся одновременно. :)

И еще вопрос по 840к дисководу. Вернее по формату nib. Там так же как и в 140к порядок записи - последовательно дорожки от 0 до сколько-их-там? А как со второй стороной быть? Она во второй половине файла лежит?

GARNIZON
04.02.2012, 14:38
Чтобы музыка использовала IRQ - не помню. Хотя может и бывает иногда. Но похрюкивающая только. Приличная музыка так не делается - просто частота маловата.

840: NIB - он считается сейчас неподдерживаемым. AIM рулит.

Дорожки (track) везде подряд, от 0 до 159-й. Сторона - это младший бит номера дорожки. Цилиндр (т.е. положение физической подвески головок) - соответственно - остальные биты. Это было определено ещё в ранних версиях драйверов диска (кроме ONIX, у него вообще что-то вроде LBA) и в таком виде дожило до файлов-образов.

Santechnik
07.02.2012, 16:41
Попробовал поподбирать частоту и сдвиг IRQ. Добился много разных эффектов, но идеальной работы не получается. Удавалось избавиться от мерцания, но всегда белая полоса в середине экрана или без нее, но верх экрана черный (в программе L1). Чтобы мне тупо дальше не подбирать, не подскажете пожалуйста на каких по счету видимых линиях происходит "щелчок" IRQ? Сэкономим время и приступим к дисководу 840к :v2_dizzy_coder:
И заодно вопрос по дисководу - в описаниях сказано, что он сигнал синхронизации выдает при прохождении некой точки на дорожке. Как этот сигнал записан в формате AIM? Где лучше всего описана работа этого дисковода и контроллера?
Кстати, подумываю переделать "дисковод" с ATMega-64 на Cortex-M3 (STM32L). Причина - больше ног, выше скорость (32Мгц против 20Мгц не считая большей скорости исполнения инструкций), вдвое больше памяти (128к и 16к), куча таймеров и, самое главное, DMA. Боюсь, что не потянет ATMega 840к с нужной скоростью. По деньгам на пару долларов чип дороже, но так как он 3.3В, то будет экономия 3$ на микросхемах преобразования 5В <-> 3.3В. Выйдет как минимум не дороже.

GARNIZON
19.02.2012, 14:00
Попробовал поподбирать частоту и сдвиг IRQ. Добился много разных эффектов, но идеальной работы не получается. Удавалось избавиться от мерцания, но всегда белая полоса в середине экрана или без нее, но верх экрана черный (в программе L1). Чтобы мне тупо дальше не подбирать, не подскажете пожалуйста на каких по счету видимых линиях происходит "щелчок" IRQ? Сэкономим время и приступим к дисководу 840к :v2_dizzy_coder:

Лучше бы всё таки понять - откуда у тебя эта белая полоса берётся.
Не должно её быть. Просто из логики действий аппаратуры.

Линий конкретных не знаю, не ковырялся. Но можете спросить у Олега Одинцова - он что-то такое пытался узнать, и вроде по семёрке у него даже это получилось. (про девятку он там шибко ругался, что в разных режимах всё по разному и соотношение не точно 1:10).



И заодно вопрос по дисководу - в описаниях сказано, что он сигнал синхронизации выдает при прохождении некой точки на дорожке. Как этот сигнал записан в формате AIM?

В строгом соответствии с доками на AIM (цитирую уже который раз):


Байты слов хранятся в обратном порядке. Слова анализируются так:
00xx - обычные данные, через регистры IO передается младшая часть
01xx - синхросбой - !!вот он и есть, который тебе нужен!!
02xx - конец дорожки (заворот на начало) [читается, но не записывается]
03xx - индекс начало (1 -> 0)
13xx - индекс конец (0 -> 1)



Где лучше всего описана работа этого дисковода и контроллера?

Нигде. Как только опишешь, так мы тебе сразу диплом нарисуем.
Все исходные данные есть - схемы, прошивки. Но я пока не придумал, как их сопоставить.



Кстати, подумываю переделать "дисковод" с ATMega-64 на Cortex-M3 (STM32L). Причина - больше ног, выше скорость (32Мгц против 20Мгц не считая большей скорости исполнения инструкций), вдвое больше памяти (128к и 16к), куча таймеров и, самое главное, DMA. Боюсь, что не потянет ATMega 840к с нужной скоростью. По деньгам на пару долларов чип дороже, но так как он 3.3В, то будет экономия 3$ на микросхемах преобразования 5В <-> 3.3В. Выйдет как минимум не дороже.

Советовать не буду, но за атмегу оправдаюсь: всё таки 3.3 вольта у L-версии есть, хоть и на частоте 8 МГц, но вполне официальных. Да и обычную версию, без L, на напряжении 3.2 вольта я тоже юзал и она нормально работала.

===

Если хочешь ответы сразу - пиши на почту (vegaio на yandex). Я на форум крайне редко захожу.

---------- Post added at 13:00 ---------- Previous post was at 12:47 ----------

PS и кроме проги L1 были и другие проги с совмещением. В РАПИРЕ есть встроенная поддержка этих режимов: PЖM("*O,H2K"); В игрушках есть GEOGRAFIQ.

Santechnik
13.03.2012, 08:46
Очередной апдейт. Разобрался наконец с STM32. Очень интересный чип, но с наскоку не возьмешь. Приобрел отладочную плату с ним за 14$ причем на этой плате уже есть програматор, который можно использовать и для прошивки других чипов из этой серии. На данный момент написал драйвер работы с LCD дисплеем и подключил FatFS Чена на SD карте. На приложенной фотке работа всего этого - на экране содержимое SD карты. Осталось добавить DMA поддержку для работы с картой и энкодер для удобной работы с меню. После этого можно приступать к собственно дисководу.:v2_cool:
Кстати, красная плата внизу экрана - логический анализатор (см. подробности здесь (http://dangerousprototypes.com/2010/02/25/prototype-open-logic-sniffer-logic-analyzer-2/)). Имеет 32 канала (16 из них 5V). Обошлась мне вместе с доставкой и полным комплектом проводов в 75$. Незаменимейшая штука для отладки! Сколько времени я съэкономил с ней когда делал LCD драйвер или настраивал работу с SD картой! Жалею, что раньше не купил. Очень рекомендую.:v2_thumb:
Также за это время разобрался с работой дисковода 840к. Вроде не вижу проблем с реализацией на данном этапе.
Дополнительно обдумал концепцию компьютера. Очень не хочется ставить ПЛИС в BGA корпусе. :v2_conf2: По моим прикидкам все же удастся сделать полный фарш и на 208-ногом корпусе. Это добавит количество корпусов, но ИМХО это меньшее зло чем BGA. Идея состоит в использовании мультиплексоров, на шинах и выходах/входах. Так, например, через них можно развести VGA и SVIDEO выходы, PS2 и оригинальную клавы, шины процессора на внешний разъем и т.д. Кроме того, планирую использовать I2C расширитель порта, чтобы освободить ноги ПЛИС от различных индикаторов и переключателей режимов, которые не требуют быстрой реакции. Заодно хочу вернуться к идее одновременного использования 2-х дисководов. Дополнительных ног это не потребует, т.к. они тоже будут подключены через мультиплексор. Каждый дисковод будет иметь собственный выключатель. Проект подорожает примерно на 20$ (второй экран, контроллер и SD карта), но зато позволит одновременно работать с двумя дисководами или удобно переключаться между ними.
Сейчас также рисую схему и оптимизирую ноги. Надеюсь, что получится.

Santechnik
07.04.2012, 07:13
Очередной апдейт. :v2_dizzy_rastoman: Заставил работать DMA с SD картой и энкодер. Скорость чтения с DMA не тестировал, но должно быть очень неплохо. Энкодер оказался гораздо удобнее кнопок. Переделаю под него и 140К дисковод и включу в окончательную версию.
Также сделал блог, куда я перенес инфу по моему предыдущему проекту ("ЮТ-88") и куда начал выкладывать инфу по этому. Кстати, я всю инфу там перевел на английский и уже наблюдается некоторый интерес к английской версии сайта. Видимо так и буду продолжать вести этот блог на двух языках. Хочу давать там больше информации, чем здесь, включая код и схемы, а также давать более подробные описания. Посмотрим, как получится. Адрес: electronicsfun.net/RU/ (http://electronicsfun.net/RU/) . Заходите, подписывайтесь на RSS обновления, оставляйте комментарии.
Во время написания программы для STM32L возник такой вопрос. Имеется такая конструкция:


static char Cur_DIR[100]; // Current folder
static char Files[100][13]; // File list

FRESULT scan_files (char *path, char *pname, char *pdir)
{
...........
}

char FDir[100];
f_err_code = scan_files(*Cur_DIR, *Files, *FDir); // Line #263

Она взята из моего дисковода 140К для ATMega644 (написан на AVR Studio). Там она прекрасно работает. Здесь же IAR выдает такие ошибки на последнюю строку:


Error[Pe167]: argument of type "char" is incompatible with parameter of type "char *" C:\STM32_projects\iar_test4\main.c 263
Error[Pe167]: argument of type "char" is incompatible with parameter of type "char *" C:\STM32_projects\iar_test4\main.c 263

В чем может быть проблема? Вроде как по стандарту я могу присваивать указателю массив.

b2m
07.04.2012, 12:49
В чем может быть проблема? Вроде как по стандарту я могу присваивать указателю массив.
Всё правильно пишет, звёздочка нужна только у второго параметра.

Santechnik
07.04.2012, 15:06
Класс! Спасибо! :v2_dizzy_vodka2: Так теперь работает! А почему было не правильно? И почему в "AVR Studio" это работает?

b2m
07.04.2012, 17:41
А почему было не правильно? И почему в "AVR Studio" это работает?
Всё зависит от того, как компилятор трактует массив массивов. Но в стандарте, по-моему, массив массивов трактуется как указатель на указатель, хотя первый уровень массива просто вычисляет смещение, а не производит косвенную адресацию.

GARNIZON
09.04.2012, 18:37
http://www.youtube.com/results?search_query=agat-7&search=tag

Santechnik
10.04.2012, 11:52
Интересно. :v2_thumb: Спасибо, GARNIZON! Я честно говоря разочаровался в софт-процессорах для реплик. Они должны быть очень хорошо протестированы прежде чем применять в реализации. Очень много нюансов с недок. командами и их циклами и неизвестно где они вылезут. Но если у него получилось создать такой процессор, то это просто супер. Если выложит в открытый доступ можно будет попробовать.:v2_dizzy_army:
GARNIZON, я тут только что нашел тему (http://test-zx.pk.ru/showthread.php?t=17754), где вы с b2m обсуждаете 840к дисковод. Суперполезно! Но я еще чуть позже вопросы задам :rolleyes:

GARNIZON
11.04.2012, 09:43
b2m - красавец, но он почему-то решил прекратить тему про агат(как видно из топика). Скорее всего потому что там много других систем эмулирет. Надеюсь позже врнется к этому. Чел грамотный.

Софт проц , тот что на видео, работает пока без нареканий :)

Santechnik
27.06.2012, 13:10
Взял паузу с проектом - сначала был занят с моим финальным экзаменом, а потом решил передохнуть немного от проекта и переключился на несколько маленьких проектов. На прошлой неделе получил результат моего экзамена - сдал. Так что я теперь не просто бухгалтер, а CPA :v2_finge: (читать пожалуйста Си-Пи-Эй, а то по-русски звучит неблагозвучно :biggrin:). Так что можно продолжать проект не отвлекаясь больше на всякую ерунду :v2_dizzy_biggrin2:
В общем переписал я "140К-дисковод" под STM32L. Работает и загружает (но без записи пока). Переделал "по уму" - в предыдущей версии на ATMega выдача битов была по запросу, а не по таймеру. Это приводило к странным эффектам (например, дорожка в РАПИРе могла читаться 10 секунд, а BASIC загружался за несколько секунд). Кроме того, структура затрудняла сделать запись на диск без существенной переделки.
В текущей версии все работает гораздо лучше. Во-первых, благодаря DMA чтение не мешает остальным процессам. Во-вторых, сейчас дисковод ведет себя как настоящий, отдавая данные с интервалом в 32 цикла процессора, что привело к нормальной и ровной скорости загрузки. В-третьих, вычистил и оптимизировал код. В четвертых, код изначально заточен под запись, так что добавить эту функцию будет несложно.
Сейчас начал работу над тем, чтобы ограничить общение с дисководом всего тремя проводами с целью экономии ног ПЛИС. Идея состоит в том, чтобы использовать протокол SPI. Бонусом будет легкая и удобная передача данных в обе стороны без заморочек с переключением направления шины. Мастером будет ПЛИС. Слово будет 16-бит - 8-бит для данных и остальные для передачи состояний (номер дорожки, режим записи и пр.) в обе стороны. При частоте 16МГц это слово будет передаваться за один такт CPU, что более чем достаточно. Каждое переданное слово будет служить еще и тактом для контроллера, так как будет передаваться каждый 32-ой такт CPU. Т.к. мастером будет ПЛИС, то он будет отвечать и за увеличение некоторых интервалов до 36 или 40-ка тактов CPU при записи, когда генерируется синхробит.
В общем идея такая. Посмотрим что получится. Пошел пробовать. :v2_dizzy_cowboy:

Santechnik
07.07.2012, 07:49
Итак, SPI работает. Из-за "лапши" на макетке создается много помех, что приводит к достаточно большому количеству битых байт. Последнюю неделю пробовал разные варианты для их уменьшения. В итоге окончательный вариант таков: частота 8 МГц, слово 8 бит, режим SPI - 0. Так же добавил четвертый провод NSS для синхронизации после ошибки. В режиме чтения в одну сторону передается номер дорожки, а в другую байт. В режиме записи передается байт или Дорожка (в зависимости от старшего бита).
Характер ошибок показывал, что проблема в сигнале SCLK, так как полученные слова были сдвинуты с какого-то места. Для очистки сигналов все они выводятся с минимальной силой и их тип LVCMOS. Это дало лучший результат. Так как у меня пока нет осцилографа, то я не могу посмотреть форму сигнала, поэтому для тестирования я передаю один и тот же байт в каждом цикле и сравниваю что получено. В случае ошибки счетчик увеличивается на индикаторах DE1 и дисковода. Так я могу отслеживать кол-во ошибок за период времени. Пробуя разные варианты я смог оценивать их эффективность.
Для дальнейшего уменьшения кол-ва ошибок я передаю байт трижды и беру то значение, которое встречается дважды. Все эти меры привели к эффективности в 1 ошибку каждые 15 минут (1 ошибка на 25 переданных мегабайт), что неплохо , но все же недостаточно.
Для дальнейшего улучшения, я попробовал разные методы termination сигнала SCLK. Наилучший результат показал метод соединения его с землей через последовательные резистор и конденсатор. После их подбора оптимальным оказались значения 82 ома и 22нФ. На данный момент тест крутится уже больше полутора часов и на счетчиках 0 ошибок.
Теперь, добившись надежной связи, я могу тестировать дисковод. Теперь вместо 12 ног надо всего 4. Для дисковода 840к можно будет применить тот же принцип.
UPD: Попробовал загрузить систему - "Школьница" загрузилась без проблем с переделанного дисковода (см. картинку). Только какие-то проблемы с переключением дорожек. Буду смотреть.

Santechnik
07.07.2012, 16:06
Переключение дорожек пофиксено. Все опробованные системы и программы загружаются без проблем (BASIC, Школьница, AltDOS и программы). Теперь можно смело сказать, что новая версия дисковода функционально равна старой на ATMega, но имеет правильные тайминги, требует всего 4 ноги ПЛИС и предусмотрена запись. :v2_thumb:
Завтра начну прикручивать запись на "диск". :v2_dizzy_sleep2:

Santechnik
23.07.2012, 16:21
Сегодня пришел осциллограф. Первым делом решил посмотреть что там за сигналы по SPI идут, что ошибки проскакивают. Вот такие картинки увидел - первая NSS, вторая SCK.:v2_eek:
Такие наводки происходят по пути от FPGA к разъему на DE1, далее к макетке по 15см ленте, далее проводом длиной еще 15 см по макетке до платы с STM32L и наконец немного по самой плате до микроконтроллера. Мои меры с резистором и конденсатором работают потому, что это уменьшает немного уровни, и помехи не достают до порога срабатывания.
В общем бесперспективно пытаться что-то отладить с таким шумом. По всей видимости надо отложить работу с дисководом пока все не будет размещено на плате. Похоже сейчас лучше сконцентрироваться на завершении составления схемы и доотладке на макетке магнитофонного входа/выхода (благо с осциллографом это будет несложно) с целью изготовления печатки Rev.0. На ней будут выведены неиспользуемые пины на разъем расширения.

svofski
23.07.2012, 17:30
Трудно сказать, конечно, но наблюдаемая картина непохожа на шум. Это похоже на какие-то глитчи, которые вылезают с FPGA и частично фильтруются длинной линией.

Santechnik
24.07.2012, 11:29
Эти колебания на NSS совпадают в точности с SCK. Там как раз идет небольшая пауза перед началом SCK. То есть очень похоже на наводку. Кроме того, я пробовал две версии SPI в ПЛИС. Одну я сам написал, а вторую взял готовую, думая что я напортачил. Так вот обе дают одинаковую картинку. Кроме того, емкость линии такова, что SCK даже не успевает опуститься до нуля и подняться до 3.3В. И обрати внимание на ступеньки между некоторыми пиками SCK - похоже как раз на смену уровня на линиях данных, которые наводятся. Так что мне кажется все же наводки и емкости виноваты, хотя версию с глитчами, конечно, не стоит со счетов полностью сбрасывать.

tnt23
24.07.2012, 11:34
15 сантиметров как-то уже многовато для проброса SPI. А там еще дополнительные 15 сантиметров тоже добавляют радости.
Покороче никак не сделать?

Santechnik
24.07.2012, 12:42
Я теперь тоже знаю, что это много. :v2_rolley
Можно, например, плату сделать и прямо в гнездо DE1 ее воткнуть (как я с процессором сделал). Но я все же склоняюсь полную плату сделать. На ней можно будет все сразу отладить. Подумаю еще. Не хочется сделать плату расширения, потратить время и деньги и окажется, что наводки все равно велики.

svofski
24.07.2012, 14:39
15 или 30, но тут в поламплитуды наводка, это как-то очень эффективно для паразитной связи. Попробуй сделай просто два провода рядом, повесь на дальний конец какое-нибудь сопротивление на землю, подай на один провод 1МГц и посмотри на втором, какого размаха у тебя будет наводка? Будет похоже не эту картинку?

Santechnik
25.07.2012, 09:50
svofski, ты как обычно прав :) Я поиграл с разными режимами и вспомнил, что когда я пробовал те сигналы я не включил чтение файла на микроконтроллере. А SPI интерфейс у меня включается уже после того, как нужный файл выбран (о чем я подзабыл). То есть те сигналы шли в ненастроенный порт микроконтроллера и что там с ними происходило я пока не знаю. :v2_rolley Вот какой сигнал SCK при включенном чтении образа и, следовательно, SPI на микроконтроллере. NSS пришел в норму (почти).
Все еще плохо, но не настолько. Понятно, что емкость линии высока и надо сокращать длину. Однако пока не знаю как - действовать наверняка и все же создавать Rev.0 компьютера или сделать плату расширения непосредственно в гнездо DE1. Пока делаю схему и одновременно буду думать. Плюс Rev0 в том, что заодно можно отладить I2C расширитель портов и TV выход без этих проблем с длинными проводами.

svofski
25.07.2012, 11:55
Линии ведь однонаправленные, попробуй согласовать их, что будет? С передающей стороны буферный усилитель, 100 ом последовательно, с принимающей 100 ом на землю. Например. Не знаю, что получится =)

Santechnik
25.07.2012, 12:09
Буфер посредине пожалуй помог бы. Но у меня нет под рукой к сожалению. Кстати, последовательно там уже на DE1 47 ом резистор стоит перед разъемом. Интересно было наблюдать осциллограмму при разных значениях тока на выводах FPGA. Ожидаемо, что лучший результат показал минимальный ток. При 25mA картинка еще более замылена.

svofski
25.07.2012, 13:35
Это пока он нагружен на высокоомный вход.

Santechnik
01.08.2012, 12:55
Составление схемы движется довольно не плохо. Видео выход полностью готов. Остальные части в разной степени готовности. Я выложил пока видеовыход у себя в блоге с описанием работы: http://electronicsfun.net/RU/archives/552
Буду выкладывать и остальные части по мере готовности. Буду признателен за свежий взгляд с целью поиска ошибок или ценных идей. :v2_dizzy_vodka2:

Santechnik
20.08.2012, 14:30
Вот еще пока дисководы на проверку:

http://electronicsfun.net/RU/archives/567

Я уже разводить начал по кускам. Чуть позже выложу процессор, память и пульты.

Santechnik
03.10.2012, 12:42
С платой я закончил на позапрошлой неделе и отправил в производство. Платы готовы и отправлены мне 21/09. Думаю, что на следующей неделе придут. Заказанные примерно в одно с ними время детали для монтажа уже пришли.
Концепцию данной ревизии немного подправил во время разводки. Во-первых, в этой ревизии не будет "Ячейки 121". Во-вторых, слот расширения будет смонтирован прямо на плату и его по идее можно будет использовать с любыми картами расширения, кроме использующих DMA (каковых серийных для Агат-7 и не было, согласно Voldemar). В-третьих, параллельно-последовательный интерфейс не будет выполнен на плате, но соответствующая карта может быть установлена в слот расширения. В-четвертых, ввиду того, что при такой конфигурации ног ПЛИС оказалось достаточно, I2C расширитель портов оказался не нужен. Более того, осталось еще несколько свободных ног, которые можно будет использовать для дебаггинга или расширения функций.
Итоговый получившийся размер платы примерно 100х230мм. Текущее расположение элементов позволяет сократить длину платы на пару сантиметров за счет их дополнительного уплотнения, но так как на цену плат там где я их заказываю это никак не повлияет, то решил не терять на это время и оставить как есть. Оптимизировать можно будет в следубщей ревизии вместе с улучшениями и устранением ошибок.
А пока платы в пути, выложил в своем блоге описание подключения памяти и процессора: http://electronicsfun.net/RU/archives/572. Как всегда, указание на ошибки приветствуется.

KokaF77
05.10.2012, 09:58
Santechnik, можно ли будет подключить к слоту расширения оригинальный модуль процессора? Я понимаю, что придётся крыжить прошивку ПЛИСины... Либо как вариант предусмотреть подобную возможность в будущих ревизиях, это как пожелание. :-)

Santechnik
05.10.2012, 10:34
Нет, к сожалению, этот модуль нельзя будет подключить. Разъем на плате расширения фактически будет представлять собой разъем номер 7, а процессорный модуль ставится кажется в первый.
Честно говоря, я не вижу смысла в усложнении схемы для возможности подключения этого модуля. Дело в том, что никаких преимуществ его использование не даст, так как я и так использую настоящий процессор в схеме. На ПЛИС же реализованы контроллеры памяти и устройств, ПЗУ и кое-что по мелочи.

KokaF77
05.10.2012, 10:43
Жаль... :( У меня есть несколько плат от Агата, модуль процессора в том числе, а также распиленная материнка от девятки. Вот я и думал кусок с разъёмами прикошачить к вашей платке. ;) Вообще, давно мучила меня идея-фикс собрать в ПЛИСИну всю материнскую плату, а контроллеры оставить родными. Если проект в дальнейшем будет открытым, то наверное это будет возможно повторить, или, как вариант, делать что-то своё. :)

Santechnik
05.10.2012, 11:18
Я все исходники обязательно выложу, но попозже. Сейчас они не закончены, не причесаны и не комментированы нормально :v2_rolley , так как находятся в творческом беспорядке ;) Технически же я не вижу проблем в реализации этой идеи. На вскидку, надо будет заменить блок адресации процессора в ПЛИС, переделать контроллер памяти, выкинуть процессор и память и использовать освободившиеся ноги ПЛИС для обслуживания слотов. Если понадобится помощь с этим, то готов посодействовать.
PS Со мной можно на "ты" :v2_dizzy_vodka2:

KokaF77
05.10.2012, 11:49
Santechnik, спасибо! :) Это пока задумки на будущее, сейчас озадачен более приземлёнными проблемами. ;)

Santechnik
11.10.2012, 11:42
Вчера платы дошли, но только сегодня смог их забрать. Вот пока их фотки. Наверное в выходные не торопясь начну сборку и откладку по кускам. :v2_dizzy_army:

Santechnik
19.10.2012, 15:24
Небольшой апдейт. Блок питания собран и отлажен (см. фотку). На вход подается 15В. На выходе получаются +3.3В, +5В, +12В и -12В (последние два нужны для карт расширения). Осталось еще сделать +1.2В для ПЛИС, но я забыл заказать регулятор LD1117-1.2 для него :v2_dizzy_facepalm: Сейчас заказал, но придет через неделю. Пока это не критично, так как прежде чем паять ПЛИС я хочу отладить всю периферию, так что можно подождать.
Также уже установлены и проверена работа преобразователей уровня сигналов от процессора с 5 до 3.3В.
На данный момент выявлены следующие ошибки на плате:

Неправильно выбраны посадочные места электролитических конденсаторов - слишком маленькие. Приходится выкручиваться.
Нижние пятачки электролитических конденсаторов и некоторых тестовых пинов закрыты паяльной маской - ошибка на посадочном месте в KiCAD. Их немного, так что зачистил аккуратно ножиком и залудил.
Распиновка регуляторов напряжения LD1117-3.3 и LD1117-1.2 выбрана неправильная. На фотке видно как пофиксил (слева от кнопок).

Двигаюсь не спеша, так как тщательно тестирую каждый блок.

svofski
20.10.2012, 14:08
Как это ты смог одолеть KiCAD? Завидую твоей выносливости и проницательности.

Error404
20.10.2012, 14:16
Как это ты смог одолеть KiCAD? Завидую твоей выносливости и проницательности.

+100500. На редкость любительская среда.

Santechnik
20.10.2012, 14:55
А какие альтернативы? Sprint мне не нравится совсем. DipTrace и Eagle более или менее хороши, но не без тараканов и к тому же ограничения в бесплатных версиях. Я эту плату не смог бы поместить ни в один, ни во второй.
А KiCAD зря ругаете. Интерфейс конечно не супер, но если приноровиться, то очень даже удобный. Почти все действия на кнопках, основные я на кнопки своей многокнопочной мыши повесил и совсем хорошо стало. То что посадочные места отдельно сначало напрягло, но потом оценил гибкость. Правда внимательность требуется - легко попутать ноги, что и произошло. А программа разводки плат вообще очень удобная (только опять таки привыкнуть надо). Говорят, что старые версии и правда совсем уж плохи, но я их не пробовал.

Раз уж я здесь, то и апдейт тогда :) Сделано и проверно/отлажено за сегодня:

Завершена обвязка процессора
Установлены переключатели
Смонтирован звук. Опробован и работает
Смонтирован узел пультов. Работает - дает правильные сигналы.
Смонтирован узел клавиатуры PS/2. Работает и выдает правильные сигналы нужного уровня на вход ПЛИС.

Выявлена еще одна ошибка - когда я создавал посадочное место для PS/2 разъема, то сделал его зеркально. Так что пришлось поработать ножом над дорожками и припаять несколько проводов.

tnt23
20.10.2012, 15:56
Santechnik, а что за преобразователи поставил для сопряжения ПЛИС и 5-вольтовых шин?

Santechnik
20.10.2012, 16:05
74LVC245. Они не двухнаправленные, так что направление шины данных переключается сигналом RW процессора. Остальные же все сигналы однонаправленные.

svofski
20.10.2012, 17:36
Я KiCAD не ругаю. Просто я делал на него несколько заходов и все пока неудачно.

Santechnik
24.10.2012, 15:09
С дисководами вышла заминка. Я делал посадочное место под STM32S сам и на одной из сторон ноги пронумеровал в обратной последовательности :rolleyes: Обнаружил я это только когда припаял контроллер на 840К дисковод. Часть ног можно перепрограмировать, но не все. Пока отпаивал микруху, резал дорожки, паял проводки часть дорожек отслоилась. Да и доверия контроллеру тоже теперь особо нет - много ему досталось. Так что будем считать, что на плате дисковод 840К потерян. Дисковод 140К удалось спасти, хотя это было весело подпаиваться к ножкам с шагом 0.5мм. Не уверен, что захочу такой фокус повторить еще. :v2_dizzy_indy: В итоге дисковод 140К запустился и работает (см. фотку). В принципе, так как схематично 140К и 840К идентичны, я смогу отлаживать 840К и на этом дисководе тоже. Так что продолжаем собирать :v2_dizzy_snowball:
На очереди отладка собранного магнитофонного входа/выхода.

KokaF77
26.10.2012, 00:14
Santechnik, где и когда можно будет приобрести платку (прототип или end-релиз не суть важно).

Santechnik
26.10.2012, 02:37
Платы Rev.0 мне прислали 6 штук (5 проверены ими на стенде и одна нет). Но я не торопился их продавать, т. к. там могли быть ошибки. Так и оказалось. Я буду делать Rev.A когда закончу с отладкой. Там ошибок должно быть значительно меньше. Могу и эти платы продать если интерес есть. Цена - 15$ за плату плюс пересылка. Непроверенную же вообще только по цене пересылки могу отправить - я за нее ничего не платил - прислали довеском. Так что если надо, создам тему на Барахолке.

Santechnik
27.10.2012, 16:14
Итак, закончил с магнитофонным входом/выходом. Выход работает без проблем. Со входом пришлось повозиться. Изначально я использовал компаратор типа LM339, но заставить его правильно работать не удалось. Так что я заехал сегодня в магазин радиодеталей и купил там LM324 в DIP корпусе. Накидал на макетке новую схему с этим усилком и она заработала. Придется испытывать комп с подключенной макеткой. В Rev.A буду включать новую схему.
На завтра планы распаять видео выход. Дальше двигаться пока не могу - заказанные детали пока не пришли. Надеюсь придут в понедельник. Тогда же можно будет паять и ПЛИС.

Santechnik
28.10.2012, 07:11
А кто-нибудь может мне объяснить, почему схема с компаратором не работает (см. фотку)? На вход подается сигнал с выхода на наушники и его амплитуда от -0.5В до +0.5В. После конденсатора становится примерно от -0.1В до +0.9В. На выходе же компаратора всегда +3.3В. Пробовал увеличивать/уменьшать громкость сигнала - ничего не меняется. Делитель напряжения создает правильное референсное напряжение +0.2В на ноге 3 компаратора (проверено), так что он по идее должен переключаться при пересечении входным сигналом этого значения. Но этого не происходит. Что я не учел?

svofski
28.10.2012, 16:00
У тебя униполярное питание компаратора и он не rail-to-rail. То напряжение, которое ты пытаешься им выцепить, слишком близко к его Vss. Смести напряжение на обоих входах компаратора одинаковыми делителями напополам: в районе 0.5Vdd все будет точно ок. Или попробуй для начала просто поднять напряжение на "-" до 0.4В, но тогда у тебя будет результат немного несимметричный.

P.S. вот моя схема для C64, которая делает ровно то же самое и работает ;)
http://sensi.org/~svo/b/c64tape-sch.pdf

Santechnik
29.10.2012, 03:07
Понятно. Неудачно выбрал компаратор значит. Я во время наладки пробовал менять 750 Ом резистор в делителе на 2к, что дает около +0.5В. Все равно не заработало (громкостью сигнала, конечно, тоже играл).
Твоя схема с обратной связью и она использует по сути тот же LM324, который я использовал в моем втором варианте и я тоже подключил его с обратной связью. При этом я пробовал по этой схеме включать компаратор, и он заработал, но при выдаче 1 на выходе он давал осциляцию.
В общем остановсь на схеме с LM324 тогда и не буду больше мучать компаратор. Тем более вариант с обратной связью даже лучше - не надо дополнительно инвертировать сигнал в ПЛИС, так как он уже поступает инвертированный.

svofski
29.10.2012, 04:15
Просто с гистерезисом. В моей схеме ОУ, а не компаратор. У тебя компаратор совершенно нормальный. Просто тебе надо сместить входной и эталонный сигналы повыше. На странице 8 даташита от lmv331 дана схема компаратора с гистерезисом.

Santechnik
29.10.2012, 11:46
Сделал с гистерезисом (неинвертирующим) только что - только высокий сигнал на выходе. Похоже надо было другой компаратор выбирать. Ну и ладно, у меня есть рабочая схема на LM324 на макетке ее и поставлю в Rev.А, а пока с макетки отлаживать магнитофонный вход буду, благо там ничего сложного нет.

svofski
29.10.2012, 14:54
Не могу представить себе, чем плох этот компаратор. Даташит говорит, что Input common mode voltage range includes ground. Может быть все-таки сделай два одинаковых делителя на ножках "+" и "-" перед тем, как его выбрасывать?

Santechnik
29.10.2012, 16:07
Делитель не помог. Но знаешь что помогло? Просто в начальной схеме (но с делителем на +0.5В) подтянуть ногу 1 (IN+) к земле резистором 27К :v2_dizzy_fisher: Вот картинка. Почему только так заработало не имею понятия. Посмотрим насколько надежно читать будет. :)

svofski
29.10.2012, 18:44
Не знаю. Наверное потому что без подтяжки у сигнала на "+" нету привязки к нулю вообще никакой, DC составляющая уплывает куда хочет.

Santechnik
30.10.2012, 15:22
В общем впаял резистор 100К на плате между землей и ногой 1 компаратора. Теперь работает правильно. Также сегодня пришел регулятор 1.2В. Его тоже припаял и проверил - теперь питание компьютера полностью закончено.
Пытался собрать видеовыход, но обнаружил, что случайно заказал один из чипов в неправильном корпусе (SOIC-14 вместо TSSOP-14), так что придется подождать пока получу правильный чип - тогда смогу видеовыход закончить. Должен на этой неделе придти.

Santechnik
01.11.2012, 14:59
Пришла сегодня посылка, а там вместо моего заказа (10шт. 74НС04 общей суммой 1.65$ включая доставку :D ) 12 штук светодиодных ламп (на 12В по 1.2W). Я им позвонил и они сказали, что ошиблись и пообещали выслать повторно, но т.к. они есть только на их складе в Великобритании, то займет еще 8 дней, чтобы они до меня дошли. А лампы сказали оставить себе - а они между прочим по цене $20 каждая :v2_dizzy_christmas: Так что с одной стороны обидно, что в выходные не получится закончить компьютер, а с другой стороны подумываю себе светильник на этих лампах сделать у рабочего места, раз так на халяву привалили :)

Santechnik
11.11.2012, 03:40
Пришла в пятницу 74HC04. Промучался, но так и не смог раскачать кристал. Менял конденсаторы в схеме на 22pF и 33pF, играл с резистором - безуспешно. Не исключено, что в процессе экспериментов я вообще сжог кристал. :) Возможно, что надо было использовать 74HCU04 (небуферированная). Но ждать еще 1.5 недели я не хочу. Странно - я использовал схему генератора из даташита AD725.
У меня остаются несколько свободных пинов на ПЛИС, так что я задействую один из них для генерации нужной частоты для формирования несущей PAL сигнала. Но вместо требуемых 17.734475MHz (делится на 4 в чипе AD725) я смогу сделать 17.7734375MHz. Это на 0.22% больше, но я не думаю, что это критично. Посмотрим.

svofski
12.11.2012, 04:05
Santechnik, у меня работала стабильно вот такая схема на 25МГц, может пригодится. Вообще для PAL-а в ПЛИС можно фазовым аккумулятором сделать достаточно приемлемую частоту.
http://i.imgur.com/bBQu2.png

Santechnik
12.11.2012, 10:25
PLL как раз и дает эти 17.7734375MHz. Дело в том, что я уже использую оба PLL, так что я ограничен с умножителями. Если все же не получится, то тогда буду думать и пробовать разные схемы. Может быть 74LS624 задействую.

svofski
12.11.2012, 11:51
Я про фазовый аккумулятор, а не PLL.

Santechnik
12.11.2012, 12:09
А это как? :rolleyes_std:

svofski
12.11.2012, 14:36
Это способ получать частоты без PLL. Может быть тут неплохо объяснено:
http://en.wikipedia.org/wiki/Numerically_controlled_oscillator

Пример реализации у меня в clockster.v:
http://code.google.com/p/vector06cc/source/browse/trunk/src/clockster.v#57

Калькулятор значений:
http://code.google.com/p/vector06cc/source/browse/trunk/tools/pal4.py

Santechnik
13.11.2012, 09:28
Очень интересно. Спасибо, svofski! Я в Excel сегодня поигрался с этим и получилось, что можно очень точно частоту подобрать. Проблема однако со скважностью - чем меньше разница между начальной и конечной частотой, тем хуже картинка. Я смоделировал расчет для 50МГц и 175МГц (см. картинку). На мой взгляд первый вариант неприемлем для несущей. Наверняка будут искажения цвета и мерцания краев точек. Второй вариант тоже не идеален, но искажения скважности малозаметны и он скорее всего подойдет для моих целей, если мой ПЛИС потянет 175МГц. Буду иметь его ввиду.
Ну и апдейт - припаял ПЛИС и обвязку (замучался паять 25 конденсаторов :cool_std: ). ПЛИС прошивается. Пока проверил звук и VGA - все работает. Сегодня буду переносить проект по кускам - заодно и "причешу" его, расставлю комментарии и соптимизирую код.

svofski
13.11.2012, 16:47
175 конечно гораздо лучше. ПЛИС надо тянуть тут совсем немного, только один здоровенный аккумулятор и сумматор. Так что есть шансы, что можно и побыстрее. На DE1 у меня на 300 работает и вроде довольна.

Santechnik
16.11.2012, 16:35
Запустил ТВ-выходы. Пока просто тестовый прямоугольник вывожу случайного размера, но с переключением его цвета имеющимися переключателями на плате. Работают и "тюльпан", и S-Video. На фотке - телевизор подключенный по S-Video. Качество картинки с S-Video лучше - на "тюльпане" все же заметны легкие разводы на черном фоне.
В качестве тактовой частоты использую сигнал, полученный методом, предложенным svofski. Исходная частота - 216.67МГц (50 х 13 / 3). Прямоугольник справа и слева немного размыт - видимо результат неравномерности скважности при таком способе получения сигнала. В принципе я могу увеличить частоту до 325МГц (50 х 13 / 2). Это должно еще улучшить картинку. Какие последствия этого могут быть? Нагрев, нестабильность?
Неприятным сюрпризом стала невозможность каскадирования PLL в Cyclone 2. В Rev.A надо будет обдумать применение Cyclone 3 и наверное все же наладить генератор частоты 17.734475МГц для несущей ТВ сигнала. Хотя и так качество ТВ картинки вполне неплохое (но все же не идеальное). Посмотрим в реальных приложениях.
Видеоконтроллер я пожалуй перепишу, так как это проще, чем адаптировать имеющийся под работу с разными видеовыходами.

svofski
16.11.2012, 18:59
Круто!
Если у тебя цвет получается похожим на ожидаемый, мудрить с частотой ни к чему: то, что телевизор за не цепляется, говорит о том, что она такая как надо. Про размытость трудно чего-то сказать. Отклонения в цветовой поднесущей не должны бы влиять на яркостную составляющую. Шашечки на контрастных переходах в композите будут всегда, ref: dot crawl. Если сделаешь выход с раздельными luma y chroma, шашечки уйдут.

Santechnik
17.11.2012, 02:35
Извини, я не очень внятно написал вчера - уже спать хотелось. В общем так как Cyclone II, как выяснилось, не поддерживает каскадирование PLL (а я на это рассчитывал), то ТВ pixel clock (10.5МГц) тоже пришлось делать тем же способом. Второй PLL у меня естественно оказался не подключен к clock на схеме. И там скорее не яркостная составляющая, а иногда сдвинутые пиксели причина замыленности краев справа и слева.
Я могу сделать 10.48МГц на имеющемся PLL ((50 x 13 / 31) / 2) и может быть попробую этот вариант. Цветовую несущую тоже тогда надо будет скорректировать? Или все же лучше разгонять ПЛИС до 325МГц?

svofski
19.11.2012, 13:45
Я не знаю, какие у тебя в принципе клоки в системе, поэтому вряд ли могу чего-то посоветовать.

В Векторе по сути только один системный клок, он же пиксель-клок, поэтому таких проблем нет. На деле получается, что нужен отдельный клок для АЫ и для PAL-а.

По поводу замыленности краев. Телевизор-то не знает ничего про пиксели, с его точки зрения это просто видеосигнал. Очень вероятно, что на яркостной составляющей стоит фильтр, который не пропускает верхние частоты, которые накладываются на цветовую полосу: это как раз замыленность краев даст. А может быть просто запустить ему заново автонастройку, чтобы его пиксельный ФАПЧ попробовал привязать картинку заново к своим внутренним пикселям?

Santechnik
04.02.2013, 12:41
Проект был мной приостановлен на пару месяцев, но я обязательно планирую продолжить в ближайшее время. Сейчас я занят оборудованием постоянного рабочего места для хобби, так как до этого я располагался за столом без ящиков и очень быстро перестал находить вещи под слоем хлама. :rolleyes:
Но сегодня я получил посылку от GARNIZON с настоящей клавой "Агат", платой параллельного интерфейса и разъемами к ней, за что я ему очень благодарен :v2_thumb:
Так что теперь появился стимул, чтобы быстрее закончить с рабочим место и продолжить проект :v2_dizzy_army:

Santechnik
24.03.2013, 10:53
После всех задержек я вернулся к проекту в своей новой лаборатории. Правда пока на него у меня не очень много времени, ввиду того что у нас с женой сейчас другой совместный проект, который называется Стефани (Stephanie) и ей сейчас три с половиной недели :v2_dizzy_kids: Так что пока буду продолжать эпизодически по мере возможности. :v2_dizzy_sleep2:
Итак, процессор установлен и работает. Компьютер загружается и работает на VGA выход (TV пока не проверил - надо принести телек с кухни). PS2 клава работает.
Планы на ближайшее время - запустить "дисковод" 140К, чтобы загрузить тесты. А также припаять разъем DIN7 и подключить родную клавиатуру. Ну и доделать TV выход, конечно.
По какой-то причине у меня не получается записывать прошивки напрямую в ПЛИС и приходится каждый раз прошивать ROM, что не очень хорошо. Надо будет посмотреть где я напортачил тоже.

tnt23
24.03.2013, 11:19
Santechnik, поздравляю с новым отличным проектом, желаю, чтобы он развивался долго и успешно :)

Santechnik
01.05.2013, 14:55
Я завершил работу над Rev.0 и приступил к работам над Rev.A. :v2_cool: Там будет значительное количество изменений и новых идей. Я надеюсь, что Rev.A будет достаточно отработана, чтобы уже можно было ее повторять. Я выложил результаты работ над Rev.0 и планы по Rev.A в своем блоге, так что тем, кому интересны детали, вот ссылка:
http://electronicsfun.net/RU/archives/739
Rev.0 сейчас запускается и работает с оригинальной клавиатурой, и всеми видео-выходами (VGA, S-Video, RCA).

Так же я сделал простой калькулятор для генерации тактовых сигналов в ПЛИС с помощью фазового аккумулятора. Этот метод, подсказанный svofski, прекрасно работает в Rev.0, но его расчет вручную не очень удобен, так что я выложил калькулятор здесь:
http://electronicsfun.net/RU/archives/699

Santechnik
18.05.2013, 08:58
Для тех кто не дочитал до конца статью в моем блоге, поясню, что Rev.A будет не просто репликой "Агат-7", но и репликой Apple, Commodore, Atari и пр. компов с процессорами семейства 6502. По возможности я постарался учесть нюансы этих компьютеров в этой версии, чтобы избежать проблем при их дальнейшей имплементации на этой плате. Например, я добавил возможность перевода адресной шины процесссора в 3-тье состояние, чтобы можно было реализовать ПДП с картами расширения или добиться совместимости с процессором 6510 из Commodore-64, который отличается от 6502 возможностью переводить шины в третье состояние (ну и 6-тью портами ввода/вывода, но это решается в ПЛИС).
Я почти закончил со схемой Rev.A и уже собирался начать разводить плату, но тут понял, что я упустил один важный момент - каждый компьютер имеет свою собственную палитру цветов и я уже не отделаюсь 3-х битным RGB плюс сигнал яркости, как реализовано сейчас.
Почитав статьи о Commodore и Atari, я понял, что для более или менее аккуратной цветопередачи надо делать как минимум 15-битный RGB. Это означает, что потребуется на 11 ног ПЛИС больше, чем сейчас. Фактически это не оставляет больше никаких запасных ног если потребуется, например, дополнительно вывести сигнал на плату расширения какого-либо из имплементируемых компьютеров.
Большинство из этих компьютеров используют YPbPr цветовое пространство и варианты их ограничены. Я посчитал, что будет достаточно 9 ног ПЛИС, чтобы вывести все возможные варианты для любого из компьютеров. Это всего на 5 ног больше чем сейчас и мы все еще имеем 6 ног в запасе.
Но тут возникает проблема преобразования этого сигнала в RGB для вывода на монитор. Перебрав несколько вариантов я пока остановился на следующем варианте - установить на плате вторую ПЛИС Cyclone 2, но с 144 ногами. Благодаря тому, что она содержит в себе 13 умножителей 18х18 она сможет эффективно налету пересчитывать цветовое пространство в RGB используя таблицы, загруженные во встроенную память, либо просто напрямую использовать заранее подготовленные коэффициенты конвертации, если цветов не очень много и память позволит их разместить. Использование именно этой модели позволит применить уже существующую схему питания. Кроме того, эту ПЛИС можно будет программировать с помощью микроконтроллера STM32 как и основную ПЛИС. Дополнительным преимуществом такого решения будет возможность загрузки различных вариантов палитр под любой компьютер и их обновление с SD-карты также как и прошивки основной ПЛИС.
Благодаря достаточному количеству ног, можно будет реализовать 24-битный RGB выход, добившись максимальной точности отображения оригинальных цветов имплементируемых компьютеров. Конечно, некоторые цвета могут выпасть из RGB палитры, но при 24-битном выходе близкий к нему цвет замены не будет сильно отличаться. Проект удорожается лишь на стоимость ПЛИС ($13) и резисторы для ЦАП.
Не исключено, что дальнейшая оптимизация и определенность с имплементируемыми компьютерами приведет к тому, что Rev.B будет содержать этот модуль в себе и необходимость во второй ПЛИС отпадет, но пока я оставил бы некоторый запас на расширение.
А теперь собственно вопрос :v2_dizzy_snowball: - есть ли какие-либо более изящные и/или дешевые способы решения этой задачи? Если нет, то завтра добавлю вторую ПЛИС в схему и начну разводку.

BYTEMAN
18.05.2013, 11:43
с C64 придётся очень долго мучаться я думаю... там эмуляция видеоконтроллера - очень геморное дело... слишком много недокументированных особенностей, на которые опирается большинство интересного софта.

Santechnik
18.05.2013, 12:46
Вполне возможно. Я не разбирался пока. Но вроде попадались мне в сети проекты C64 на ПЛИС. Но главное, чтобы железо имело возможность запустить Commodore, а там может кто-то другой сделает, когда мой девайс наконец будет готов. Идея как раз и состоит в том, чтобы сделать универсальное устройство, вложить пару-тройку компов туда для начала, а дальше пополнять коллекцию с помощью других энтузиастов, если оно начнет набирать популярность.
Я тут нашел интересный чип MachXO2 от Lattice. По сути это ПЛИС, но с интересными возможностями. Модель 640HC питается от 3.3В, не требует внешнего конфигуратора, выпускается в корпусе 100-LQFP (меньше нет, но всяко лучше чем 144) и имеет на борту быструю память (2 блока по 1024 х 9 бит со скоростью обмена до 120МГц). Стоит такой чип всего $6. Этой памяти достаточно, чтобы хранить таблицу для преобразования 1024 цветов в 18-битный RGB. То есть этого хватит на палитры от многих компьютеров. Но даже если этого будет мало, то девайс позволяет при старте загружать свою конфигурацию, вместо прошитой, по SPI или I2C для чего можно задействовать все тот же установленный на плате STM32. Причем эта конфигурация не прошивается во Flash чипа (хотя можно и прошить при желании опять таки с SD карты, например), так что при следующем запуске загрузятся прошитые палитры если их достаточно для запускаемого на данный момент компьютера. Мне кажется это решение оптимально - схема усложняется незначительно, остаются запасные пины на ПЛИС, удорожание незначительно, но при этом появляется возможность вывода 18-битного цвета (262144 цветов).

Santechnik
12.06.2013, 15:41
Сегодня закончил разводить плату и отправил в производство. Не утерпел и доплатил 15$ за пересылку DHL, так что видимо на следующей неделе получу вместо трех недель обычной почтой из Китая. Все детали тоже заказал. По трекингу они должны придти в эту пятницу. Так что скоро начну сборку Rev.A. Начну с блока питания и обвязки микроконтроллера, чтобы убедиться в правильной его работе с LCD дисплеем, тач-скрин и SD картой. Буду держать в курсе.

Santechnik
21.06.2013, 15:49
Платы сегодня дошли. :v2_dizzy_roll: Я правильно сделал, что заказал доставку DHL. Платы были в производстве неделю и в среду 19/06/13 были отправлены. А уже сегодня после обеда они были у меня. Прислали 6 плат, но одна не тестирована. Напортачили правда со слоем шелкографии - сделали какой-то круг, которого нет в моих Gerber файлах и который закрывает надписи компонентов, так что придется паять, сверяясь со схемой. Буду писать им - может быть на следующий раз скидку получу за это. Вот фотки плат. В остальном качеством доволен.
Сегодня уже спаял и проверил часть блока питания. Пришлось остановиться пока, так как надо подпилить немного радиатор для LM1117-5.0 - ошибся с размером немного - а уже поздно шуметь дремелем. Завтра с утра добью питание и займусь микроконтроллером.

Santechnik
23.06.2013, 08:37
Блок питания собран и работает за исключением его части, которая производит -12В и -5В. Ошибся с номиналом индуктора - заказал 150nH вместо 150uH. Посадочное место сделал тоже маленькое, так что придется подумать как воткнуть туда правильный индуктор. Но в ближайшее время это все равно не понадобится - оба напряжения нужны только для оригинальных плат расширения, а это в моих планах пока на последнем месте.
Микроконтроллер распаян и работает. Была сделана лишь небольшая ошибка, которая легко исправлена - забыл подать питание на Vref.
LCD дисплей подключен и работает. Вот фотка. Мой дисплей выполнен на чипе SSD1289 и его нет в стандартных библиотеках. Но я нашел библиотеку для этого чипа к контроллеру STM32F4 и переделал ее под свой STM32F2. Здесь без ошибки тоже не обошлось. :v2_rolley При разводке платы не учел, что пины дисплея выведены назад и соответственно зеркальны. Таким образом, надо было на плате поменять местами первый и второй ряд контактов, чтобы можно было использовать разъемы. Решил проблему припаяв шлейф прямо к плате. Конструкция не идеальна, но надеюсь, что выдержит отладку. На всякий случай пролью места соединения термоклеем.
Теперь в планах настроить тачскрин и прикрутить к дисплею GUI. Тогда, после этого, можно будет распаивать узел SD карты и отлаживать его с удобством.

Santechnik
30.06.2013, 03:30
Сегодня заработала SD карта и FAT. :v2_dizzy_roll: Пришлось повозиться, чтобы сделать "по уму" - карта подключена по 4-х битному интерфейсу SDIO и обменивается с микроконтроллером при помощи DMA с частотой 20MHz. Такое решение позволяет осуществлять обмен со скоростью близкой к максимальной и может достигать 10Мбайт/с. Естественно существуют потери на команды, запросы ожидания карты памяти и файловую систему, но тем не менее реальная скорость обмена как минимум втрое выше, чем была в Rev.0 проекта.
Отдельной проблемой была работа с картами памяти размером более 4Гб, которая также успешно решена.
Вот фотка списка файлов 8Гб карты памяти, выводимого на LCD дисплей устройства. Поддержка длинных имен отключена для экономии памяти. Возможно, в дальнейшем эта функция будет подключена, но пока я в ней не вижу смысла - размер LCD экрана все равно не очень подходит для этого.
Тачскрин я пока не прикрутил к контроллеру. Так что возможно следующим шагом я займусь этим. А также часами реального времени (на плате я установил соответствующий кварц и батарейку).

BYTEMAN
30.06.2013, 03:46
вот за что сам люблю STM - это за очень мощную системную библиотеку.. Любая периферия прикручивается на раз-два :)

Santechnik
30.06.2013, 04:54
Абсолютно согласен. Правда библиотеки глючные и допиливать приходится прилично. Но это все равно, конечно, проще чем с нуля писать. И еще камешки напичканы плюшками прилично за небольшие деньги. Например, STM32F205VG, который я использую в проекте, стоит 13$, но при этом там 1Мег флэш, 128К памяти, скорость 120МГц, есть DMA, SDIO, 3xSPI, 3xI2C, часы, USB OTG и куча других вкусностей.

Santechnik
01.07.2013, 15:57
Сегодня распаял FLASH-память и интерфейс программирования ПЛИС. Прикрутил к контроллеру библиотеку и опробовал запись - чтение - стирание памяти. Все работает отлично.
Еще распаял USB интерфейс, но пока его отладку оставлю на будущее - это необязательная фича.
Пожалуй пора распаивать и проверять интерфейсы клавиатуры, магнитофона, видео и пр.

BYTEMAN
01.07.2013, 17:16
И еще камешки напичканы плюшками прилично за небольшие деньги. Например, STM32F205VG, который я использую в проекте, стоит 13$, но при этом там 1Мег флэш, 128К памяти, скорость 120МГц, есть DMA, SDIO, 3xSPI, 3xI2C, часы, USB OTG и куча других вкусностей.
угу, напичканы они по самое небалуйся) юзаю 207VG (до этого был 107, сейчас посматриваю в сторону 407).

Santechnik
04.08.2013, 11:48
Давненько я не делал апдейт. Итак, за этот месяц я припаял большинство компонентов, проверил работу звука, PS2 клавиатуры и убедился в работе нового узла видео-выхода.
ПЛИС Lattice, которую я использовал для хранения палитр, требует достаточно дорогого программатора. Их недорогая development board не имеет выхода JTAG, несмотря на наличие програматора на плате. Зато на этой плате есть удобное поле для пайки своих компонентов, так что я использовал его для установки разъема и джамперов. Теперь эта плата в зависимости от положения джамперов программирует внешний или внутренний чип. Плата на фотке справа. Я пробовал поиграться с выводом разных цветов через эту ПЛИС и результат весьма положительный - проблем с выводом различных палитр для Commodore и пр. быть не должно.
Вот фотка проекта на сегодня.
Возникла проблема с переделкой проекта под SDRAM (если помните, то я заменил SRAM на SDRAM в Rev.A). С ходу заставить работать компьютер не удалось, так что я перенес проект обратно на DE1, где и завершил работу над SDRAM контроллером. Сейчас компьютер работает на DE1 с использованием SDRAM вместо SRAM, так что следующим шагом я планирую перенос его обратно на плату Rev.A для дальнейшей работы. Надо будет еще настроить работу "дисководов" и проверить вход/выход на ленту.

Santechnik
18.08.2013, 05:58
Завершил перенес проекта обратно на Rev.A. И сегодня наконец компьютер запустился. :v2_clapp: Так что можно сказать, что Rev.A работает. Конечно еще много работы по организации интерфейса ПЛИС с STM32, дисководами и пр., но это все уже будет делаться на работающем проекте, что очень радует.
Перенос занял некоторое время, так как была очень тонкая "сопля" припоя между выходом на DQ11 (SDRAM) ПЛИС и землей, которую незаметно было если целенаправленно не вглядываться. Так что пришлось провести кучу тестов и локализовать проблему. Вот фотка работы Rev.A. Как видите запись и чтение SDRAM теперь работает без проблем.
Есть некоторые шероховатости пока (например, были перепутаны красный и синий в прошивке Mach2 :v2_rolley - пофиксено), но все они не в "железе" и незначительны - могут быть отполированы в дальнейшем. Пока планирую заняться дисководом 140К на STM32 и интерфейсом с ПЛИС, чтобы можно было загрузить тесты, проверить работу всех узлов и завершить с железной частью.

Santechnik
24.08.2013, 06:26
Запустил сегодня утром тачскрин. Так что теперь есть интерфейс, а то ведь я все кнопки с Rev.A убрал. На работе занимаюсь очень интересным, но сложным проектом сейчас, так что после уже мозги напрягать не хочется, поэтому "Агат" продвигаю понемногу только в выходные.
Сейчас занят прикручиванием записи в SDRAM с микроконтроллера, чтобы образы дисков туда кидать.

Santechnik
31.08.2013, 15:54
Зегодня запустил запись в SDRAM микроконтроллером. На данный момент микроконтроллер записывает число 80 по адресу 1004 ОЗУ каждый раз, когда нажимается кнопка на LCD дисплее.
На фотке видно, что на шаге 1 мы проверяем содержимое памяти и ячейка 1004 содержит число 33. Далее я тыкаю в тачпад перед шагом 2 и опять проверяю содержимое памяти по тому же адресу. Оно изменилось на 80 - как раз то, что записал микроконтроллер. В шаге 3 я записываю число 44 по тому же адресу и в шаге 4 убеждаюсь, что оно благополучно записалось и микроконтроллер не вмешивается.
Если я опять ткну в тачпад, то микроконтроллер снова перезапишет эту ячейку числом 80.
STM32 соединена с ПЛИС интерфейсом SPI по которому и передает/принимает данные. Кроме того, они соединены двумя дополнительными сигналами, которыми STM32 сообщает ПЛИС что именно он передает/принимает (адрес, запись, чтение). ПЛИС заботится же о непосредственном интерфейсе с SDRAM.
Завтра начну прикручивать последовательную запись в ячейки с установкой начального адреса. Когда это заработает, микроконтроллер сможет быстро записывать произвольные блоки данных начиная с любого адреса SDRAM - прямая дорога к записи образов дисков.
Образ диска 140К должен записываться/считываться за менее чем полсекунды. Образ же диска 840К потребует чуть более двух секунд для чтения или записи в память. При этом потенциально эту скорость можно будет удвоить в дальнейшем немного усложнив интерфейс.

Santechnik
25.09.2013, 15:36
Когда начал настраивать дальнейший обмен микроконтроллера и ПЛИС в какой-то момент вдруг стала появляться ошибка прошивки контроллера. После разных попыток с ресетом и различными режимами загрузки удалось наконец прошиться, но ничего не запустилось. Прошил пробную прогу, которая просто дрыгает ногой и она заработала. Однако нормальная прошивка так и не заработала. В общем, варианты были, что накрылся микроконтроллер, шлейф или экран (в порядке вероятности). Тогда я заказал еще один комплект деталей и спаял вторую плату :v2_dizzy_rastoman: Вчера она успешно завелась и я могу продолжать проект на ней. Экран я переставил с первой платы и он работает, так что остается контроллер или шлейф. Шлейф вроде звонится, да и симптомы не похожи так что я наверное перепаяю контроллер, благо заказал запасной. Если получится, то будет два компа :cool:

djvini
28.11.2013, 17:22
а будет ли массовое изготовление?
в том числе конструктор и платная сборка?

Santechnik
29.11.2013, 15:44
Этот проект не коммерческий. Просто делаю его в свободное время (которого последнее время не много). Если будет интерес, то планирую сделать наборы для сборки. Честно говоря не думаю, что будет больше 20-30 человек желающих.
Последний месяц я вообще не прикасался к этому проекту - решил переключиться на кое-что другое, менее глобальное. А то начал замечать, что приходится иногда себя заставлять делать этот проект. Так что пока взял тайм-аут чтобы соскучиться по проекту и продолжить с новыми силами. В принципе там софтовая часть по большому счету только осталась.

djvini
29.11.2013, 16:42
Ok.
Ну, Будем считать, что первого клиента Вы получили :)
Думаю, что народ подтянется.

Может потом договоримся и на сборку ;)

---------- Post added at 16:42 ---------- Previous post was at 16:13 ----------

Santechnik, согласно Вашего Адреса, Вы в Австралии обитаете?

perestoronin
29.11.2013, 18:06
+4 чистые платки и мне :)

Santechnik
30.11.2013, 00:39
Да рано, ребята, еще заказы делать. Когда что-то цельное получится, хотя бы даже с одним работающим компьютером внутри, то тогда я и свистну. Мне не сложно платы заказать и наборы разослать. Собирать я их не буду, так как они достаточно трудоемкие. Я лучше другим проектом вместо этого займусь. Хотя если будет достаточно много желающих, то можно будет заказать в Китае и пайку. Я не против это тоже организовать. Но пока рановато это обсуждать как мне кажется.


Santechnik, согласно Вашего Адреса, Вы в Австралии обитаете?

Да. В городе Брисбан.

PS. Со мной можно на "ты".

Кирлиан
04.12.2013, 17:37
Ну, Будем считать, что первого клиента Вы получили :)
Думаю, что народ подтянется.
За мной будете - http://zx-pk.ru/showpost.php?p=434278&postcount=47
http://zx-pk.ru/images/smilies/v2_dizzy_mutant.gif


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

Santechnik
05.12.2013, 02:20
На данный момент проект стоит к сожалению :v2_rolley Но у меня 2 недели отпуска на Новый год / Рождество, так что думаю к тому времени я как раз отдохну от проекта в достаточной мере, чтобы с удовольствием продолжить. Сейчас я пока 3D принтер делаю. :rolleyes:
А оригинальная клавиатура конечно поддерживается и даже работала, хоть и кривовато. Для подключения контроллера дисковода тоже все есть - слот расширения выведен. Остается только эту часть в FPGA прописать и оттестировать. У меня для целей отладки слота расширения плата параллельного/последовательного интерфейса будет использована.

djvini
19.12.2013, 15:06
Уже трое.
Присоединяюсь к Кирилиан-у, подождем...

djvini
28.11.2017, 13:28
Добрый день. Проект заглох что-ли? :(