Просмотр полной версии : Львов ПК-01 на Altera DE1
ILoveSpeccy
03.07.2011, 02:35
Так как с написанием Корвета у меня небольшие проблемы
и я уже в течении нескольких недель не в состоянии найти
причины кое каких глюков, я решил состряпать чего нибудь
попроще и склепал Львов!
http://speccyland.net/index.php?option=com_kunena&func=view&catid=22&id=196&Itemid=21
ILoveSpeccy,
А как Вы "боретесь" с клавиатурой? Латинская раскладка на "Львове" - JCUKEN, что совсем не похоже на QWERTY. Я в своей адаптации эмулятора Калашникова хочу дописать "переключалку" - или расположение клавиш верное (для игр) или надписи на клавишах (для печатания).
ILoveSpeccy
04.07.2011, 16:19
Пока я раскладку сделал как на клаве писика, тоесть латинские буквы совпадают с теми что на клаве, а кириллица соответственно к ним привязана. тоесть раскладка отличается от оригинальной, но я уже успел к ней привыкнуть. Так что я проблемы из этого не делаю. Хотя можно отлавливать нажатие кнопок РУС/ЛАТ и менять табличку соответствий. Тоесть это сделать очень даже реально!
ILoveSpeccy,
Проблема в том, что дефолтная раскладка - латинская. Если привязать клавиши по надписях, то будут проблемі в играх. Например, для ПК-01 J, F могут использоваться как вверх-вниз (аналог Q, A). А вот на современной клаве, J, F уж никак не ссответствуют своим положениям. Более того, по личному опыту знаю, что в некоторых особо изощренных в управлении играх получается полный бардак. Так что РУС\ЛАТ совсем не спасает.
ILoveSpeccy
04.07.2011, 16:32
тогда сделать наклейки на кнопки как в оригинале :)
Или слелать по нажатию кнопки (например num) временное переключение J,F,Q,A на стрелки
ILoveSpeccy
04.09.2012, 15:23
Сегодня я выложил исходники проекта у себя на сайте www.speccyland.net
Мож кому пригодится!
iceoflame
05.09.2012, 10:33
ILoveSpeccy, Посмотрел исходники, вполне красиво написано, как для пробы пера. Единственное замечание, переменные делаются все мелкими буквами, а константы и сигналы, крупными. А так вполне прилично. Буду еще ковырять. Еще раз -- Спасибо!
Исходниками кто-нибудь может поделиться?
ILoveSpeccy
25.01.2014, 16:19
Исходниками кто-нибудь может поделиться?
Привет,
исходники лежали у меня на сайте, но за последние 3 месяца мою страницу на юмле 2 раза хакнули. Времени совсем нет разбираться что к чему, поэтому я выкачал текущее состояние страницы и пока всё стер. Постораюсь по-возможности выложить тут исходники.
С уважением
Дмитрий
ILoveSpeccy, zebest, спасибо. ILoveSpeccy, я подумал, что Вы решили забить на ретрокомпьютеры и удалили сайт, а то бы адресовал вопрос по исходникам Вам.
ILoveSpeccy
25.01.2014, 18:50
ILoveSpeccy, я подумал, что Вы решили забить на ретрокомпьютеры и удалили сайт, а то бы адресовал вопрос по исходникам Вам.
Не, не забил ;)
Просто времени не всегда нахожу для поделок. Но для меня платки делать и писать софт/прошивки это как для бухариков водка. Я своебразный "кайф" ловлю от этого.
Начал потихоньку Aeon допиливать до "релиза" после месячной паузы.
liberation
26.01.2014, 05:04
Исходниками кто-нибудь может поделиться?
Если не секрет, то что Вы задумали? :v2_dizzy_ironic:
Просто пытаюсь изучать ПЛИСы методом погружения.
С клавиатурой в проекте что-то не то. Пробовал на двух девбордах (DE1 и DE2-115) - клавиши иногда "залипают" и продолжают печатать даже когда не нажаты.
Может я использую старый/неправильный вариант
продолжают печатать даже когда не нажаты
Клоком на модуль поиграй. Поменяй частоту, инвертируй... Не инженерно, зато - спортивно.
Вдвое уменьшил (до 16,25 МГц) клок на клавиатуру - все стало ОК
Просто инверсия клока 32.5 МГц на клавиатуру тоже решает проблему. Ewgeny7, спасибо!
"Учебный" львов + звук + "магнитофон" + палитра - и в принципе можно пользоваться. Временно выложил sof для de1-soc тут (https://yadi.sk/d/sPmK1VQBcDr5r).
Исходники пока не выкладываю, т.к. отдельные моменты желательно сделать более корректно.
liberation
23.10.2014, 10:32
"Учебный" львов + звук + "магнитофон" + палитра - и в принципе можно пользоваться. Временно выложил sof для de1-soc тут (https://yadi.sk/d/sPmK1VQBcDr5r).
Исходники пока не выкладываю, т.к. отдельные моменты желательно сделать более корректно.
А можно выложить презентативное видео, чтобы все на глаз оценить? Хорошо бы посмотреть-послушать, как "учебный" Львов воспроизводит мелодию из какой-нибудь игры, чтобы сопоставить результат с оригиналом.
Учебный это, имхо, когда без звука, магнитофона и палитры, а получившийся вариант уже почти как настоящий. По современным стандартам еще надо бы загрузку с SD, но я вряд ли буду это делать. Самый простой вариант - сплагиатить у b2mа его "дос"/запускалку от РК86, звук я уже оттуда сплагиатил.
Почему нет смысла в записи видео (тем более у меня нечем) и звука с текущего варианта - здесь нет эмуляции тормозов реала, т.е. будет примерно как в emu, только частота проца другая (надо наверно поменять).
Из интересных видеоэффектов здесь ILoveSpeccy реализовал "как бы чересстрочность", а так и видеорежим имеет мало общего с оригиналом.
Попробовал еще на de2-115. К сожалению тут не удалось подобрать клок, при котором клавиатура работала бы стабильно. Т.е. для общего случая клавиатуру надо доделывать/переделывать.
sof (https://yadi.sk/d/kH9HsA-ueJM7K) для de2-115. По возможностям эта версия аналогична ранее выкладывавшемуся варианту для de1-soc (палитра, звук, загрузка с "магнитофона"). Повтор клавиатуры пропал после изменения в ps2.vhd FILTER_SIZE c 4 на 2
Ну и версия (https://yadi.sk/d/xva2I7GbeJdTm) для DE1, тоже с палитрой, звуком и магнитофоном. Версия sdramная, т.ч. пойдет на любых de1
Старые версии удалил, обновленную для de1 выложил в папку (https://yadi.sk/d/hHZ321kHeKSPm). Видимых изменений в этой версии нет, просто изнутри немного навел порядок. Похоже модуль 8255 MikeJ не безупречен, пришлось реализовать хак. Если вдруг кто будет пользоваться - для экономии времени можно использовать при загрузке файлы в 1,5 раза более быстрые, чем стандартные, штатный bload их переваривает.
ILoveSpeccy
29.01.2015, 22:41
Заметил продолжение темы...
Для корректной работы клавиатуры должно хватить увеличения значения фильтра в PS/2-контроллере.
Я глюков с клавиатурой как-то не ловил, не припомню.
-------------
извеняюсь, увидел что уже игрались с этим параметром
Попробовал сделать торможение при обращении к ОЗУ. Вроде неравномерное (разное для ОЗУ и ПЗУ/портов) торможение раньше в эмуляторах львова не встречалось, я успел первым :) Кончено, не как в оригинале, но по эффекту вроде получилось близко. Выложил в упомянутую выше папку. В архиве кроме sofа еще wav, записанный с DE1 - xtab2 NeoSpectrumanа (записано два проигрывания)
Переделал развертку под возможности моего тюнера и с прицелом (потом) на тв
http://i.imgur.com/sFEV2J4.png
Правда теперь не все мониторы будут рады, т.к. 50 Гц
Попутно выяснилось, что в video.vhd (в оригинале и в моих плагиатских версиях) была небольшая помарка - самая нижняя строка рисовалась вверху
ILoveSpeccy
10.02.2015, 13:14
Расскажи плиз как ты игрули грузишь в львов плисовый???
Пока что суровое ретро - через линейный аудио вход, wavы проигрываю на компе.
Может все же соберусь приделать xsd b2mа. Прикинул так: можно немного хакнуть бейсик и одной из команд запускать "дос", который можно разместить в небольшом подключаемом/отключаемом пзу. В основном все ясно, но это скучно, видео мне интереснее
---------- Post added at 18:01 ---------- Previous post was at 16:53 ----------
Обновил архив, добавил readme и переключение VGA/компонент по SW0
---------- Post added at 18:05 ---------- Previous post was at 18:01 ----------
Забыл написать в readme, что на пины {GPIO_1[18],GPIO_1[17],GPIO_1[16]} выведена "композитная синхра". Это мне было нужно для подключения к тюнеру, до того как сделал компонент. Для vga и компонента это не нужно, потом уберу.
В ходе упражнений с вектором нарисовался еще вариант загрузки программ - можно предварительно грузить программу в sram через control panel, потом заливаем sof львова и запускаем прогу. В принципе те, у кого нормально работает панель от de1 могут попробовать такой подход с последней версией, она как раз sramная (не специально, просто пробовал). Только программа не должна пересекаться с бейсиком в начале и с системными переменными в конце памяти. Запускать удобно с помощью бажного lista
LISTадрес--
По хорошему, чтобы не было ограничений по адресам загрузки, стоит грузить панелью не сразу в основную память, а по другим адресам и переделать какой-нибудь оператор бейсика, чтобы он переписывал в основную память и запускал программу
---------- Post added at 01:14 ---------- Previous post was at 00:14 ----------
Попробовал (на de2-115, с панелью de1 сейчас нет желания разбираться) - работает. Но ограничения
программа не должна пересекаться с бейсиком в начале и с системными переменными в конце памяти
еще жестче, я забыл, что при ресете портится озу в районе 80C0h. Т.е. для универсальности надо делать вариант с переписыванием
---------- Post added at 01:16 ---------- Previous post was at 01:14 ----------
Еще на всякий случай напомню, что sram (на de2-115 и de1) 16 битный, поэтому адрес загрузки в панели нужно указывать деленный на 2
ILoveSpeccy
12.02.2015, 23:16
А куды у львова tapein заходит? Беглый взгляд показал что на C4 8255-ой... тоесть я сделал так: PPI_C0_I_PC(4) <= TAPEIN;
Но чегото не грузит. Хватит просто CLOAD + enter?
На экране при загрузке чтото происходит? Выводится имя программы?
У меня ступор полный :)
PPI_C0_I_PC(4) <= TAPEIN;
я сделал так же. Там были (и есть) какие-то странности с 8255 (порт B почему-то не читается штатным образом, пришлось хакнуть), но порт C у меня сейчас читает нормально
Загрузка и запуск кодовых программ
BLOAD"",R
При начале загрузки должен написать имя загружаемой программы, а в остальном ход загрузки никак не виден (никаких полос или чего-то подобного)
---------- Post added at 14:24 ---------- Previous post was at 13:58 ----------
Вспомнил, что сначала у меня вариант
PPI_C0_I_PC(4) <= TAPEIN;
не работал, и я и эту штуку хакал, потом я дешифрацию портов немного переделал и заработало
Выложил версию для DE2-115 с возможностью загрузки .LVT через Control Panel. Да, для этой девборды можно было не страдать фигней с панелью, а с учетом большого озу в плис просто грузить туда (нечто вроде внешнего пзу), но так я промоделировал версию для de1. Только вот мне вспомнилось, что когда я запускал новые версии control panel для de1 там не было поддержки SRAMа. Может в самой последней версии SRAM вернули
ILoveSpeccy
13.02.2015, 15:13
Выложил версию для DE2-115 с возможностью загрузки .LVT через Control Panel. Да, для этой девборды можно было не страдать фигней с панелью, а с учетом большого озу в плис просто грузить туда (нечто вроде внешнего пзу), но так я промоделировал версию для de1. Только вот мне вспомнилось, что когда я запускал новые версии control panel для de1 там не было поддержки SRAMа. Может в самой последней версии SRAM вернули
Куды выложил то? Я бы погонял немного... Да и сырков не помешало бы.
Я сейчас немного допиливаю "Львов" но эоне. В планах добавить LVT-плеер, используя MIPS или ZPU. Так было бы идеально!
Все же сделал для DE1 sdramную версию с загрузкой .lvt через control panel. Версия 1.00 панели у меня работает и нравится мне больше 2.0.x. Загрузка происходит значительно быстрее, чем версией 2.1.1 в SRAM DE2-115
Смущает только один момент - если я правильно понимаю, в процессе замены sofа панели на sof львова sdram не регенерируется. С другой стороны современный sdram крепкий и выдерживает и не такое. В принципе я много-много раз убеждался, что содержимое sdrama на de1 при обновлении sofа остается. В общем 100% уверенности нет, но на первый взгляд работает :)
Выложил все в ту же папку (https://yadi.sk/d/hHZ321kHeKSPm)
Насчет исходников я планирую как со специалистом - если хватит задора, то переведу основной файл и видео на верилог и тогда выложу. Если не хватит - выложу как есть.
---------- Post added at 18:33 ---------- Previous post was at 18:31 ----------
В планах добавить LVT-плеер, используя MIPS или ZPU
Это было бы очень круто, особенно если с исходниками!
ILoveSpeccy
13.02.2015, 16:56
Нашел целую кучу косяков в старом проекте. Переписал некоторые части.
Теперь нет проблем с клавиатурой и правильная дешифрация IO портов по битам A4 и A3! Как приведу в божеский вид, выложу...
Обновил версию для DE1, точнее её "софтовую" часть. Теперь через панель можно загружать не только машиннокодовые lvt, но и на бейсике
Прикрутил дос b2mа для загрузки с sd карты. Теперь может грузить с магнитофона, sd или с предварительно залитого через control panel файла. Ссылка (https://yadi.sk/d/hHZ321kHeKSPm)
---------- Post added at 16:59 ---------- Previous post was at 16:30 ----------
Выложил в ту же папку видео с примером работы с sd. Там же его можно и просмотреть
ILoveSpeccy
15.02.2015, 15:16
Очень хорошие новости! Ждём сырков... Ну или хотябы ROM'а с возможностью загрузки с карты ;)
Исходники "софта" выложил (lvov_softsd.zip, BAUD я переобозвал XDOSом). Основной респект - b2mу
---------- Post added at 18:37 ---------- Previous post was at 18:35 ----------
Порт FF рулит подключением "доппамяти". Бит 0 - включает по адресам 0000-BFFF (read only) озу с загрузкой от панели, бит 1 - включает по адресам 0000-07FF доп. пзу (read only) с xsd
ILoveSpeccy
15.02.2015, 16:14
Вот спасибки то! Сегодня вечером прикручу...
з.Ы. А можешь пжалуста ещё сам бинарник ROM-а выложить, который маппится битом "1"???
Обновил архив (с тем же названием, не стал переименовывать)
rom01sload.bin - замена штатного пзу
xsd.bin - доп. пзу
ILoveSpeccy
15.02.2015, 21:08
Порт FF рулит подключением "доппамяти". Бит 0 - включает по адресам 0000-BFFF (read only) озу с загрузкой от панели, бит 1 - включает по адресам 0000-07FF доп. пзу (read only) с xsd
Получается, что .LVT-файл для заливки в SDRAM не должен быть больше 48Кб?
Вряд ли это можно считать ограничением :) даже в реал больше 48 Кб штатными средствами одним файлом не загрузишь
Вот текущая реализация загрузки с sd действительно несколько ограничивает размер загружаемого файла (и адреса загрузки), т.к. использует буфер в основном озу начиная с A000. Можно сделать при подкючении пзу xsd одновременное отключение части пзу с заменой на доп.озу для буферов. Если будет игрушка, которая не загрузится в текущей реализации, то надо бы так и сделать
ILoveSpeccy
15.02.2015, 22:55
А по какому адресу/порту идёт обращение к SD-карте?
А по какому адресу/порту идёт обращение к SD-карте?
порты F0-F1, там в исходниках всё есть, см. sd_proc.inc
ILoveSpeccy
16.02.2015, 01:48
Заработала загрузка с карточки! Одна проблема... половина игр, что у меня есть, не работают. Например "rockman.lvt" или "saski.lvt"... В чём дело я не знаю, но думаю какие-то ограничения xsd.
А в целом классно! Не надо мучаться с загрузкой через tape in, хотя прототип плеера плёнок львова уже на макетке запустил. PIC24 + SD-карта и гружу проги через магнитофонный вход.
Код "Львова" почти полностью переписан, заменил t80 на корку от b2m, поправил код работы с PS/2 клавиатурой и доработал 8255. Ещё кой чего поправлю и в репозиторий выложу.
ILoveSpeccy
16.02.2015, 03:55
Допилил звук, переделал вывод на экран и почистил исходники. Всё выложил в своём репозитории.
Прошивки для эона на днях будут на сайте...
Ещё раз всем спасибо!!!
rockman.lvt
как раз пример игрушки, налезающей на буфер, который сейчас с A000. Надо
сделать при подкючении пзу xsd одновременное отключение части пзу с заменой на доп.озу для буферов
Через панель грузится и запускается
saski.lvt
saski.lvt я не нашел, нашел CHECKERS.LVT, они работают
MaratBest
16.02.2015, 07:24
saski.lvt я не нашел, нашел CHECKERS.LVT, они работают
http://lvovpc.ho.ua/games/page.php?name=saski
Судя по скринам, как раз эти шашки среди имеющихся у меня lvt называются checkers.lvt. Они работали и в предыдущей версии и в обновленной
Выложил (https://yadi.sk/d/hHZ321kHeKSPm) обновленный вариант (sof и исходники софта), extmem(1) теперь включает не только read only пзу 0000-0FFF но и доп.озу по адресам C000-C7FF. Игрушки, залезающие за A000 (например rockman) заработали
Имхо теперь любые однофайловые программы должны запускаться. С многофайловыми, вероятно, поможет только замена процедур чтения бита, по аналогии с эмулятором b2mа
kapitan-u
05.06.2015, 01:02
могу подсказать почему не все работает.
1. на схеме Львова есть ошибка:на дешифратор D28 заходит не А3, а А5
причем если проследить по картинке разводки платы, то там та же ошибка.
Смотрите оригинальную документацию, там написано порты С0-С3 и D0-D3,
для этого нужна линия A5. Ну и + я прозвонил на живом Львове.
Внимание: А3 в дешифрауии не участвует вообще.
2. Карты памяти: при включении VRAM А15 подаваемые на память всегда 1
kapitan-u, планируете ли реализовать аутентичное торможение?
kapitan-u
18.06.2015, 06:56
Первый релиз Лвов ПК-02 для Aeon Lite
В комплекте
- исходники VHDL
- исходники С
- готовый образ диска для SD со всем необходимым и образами дисков
http://unofficial.portaone.com/~kapitan/LvovPK-02.zip
Умеет:
Львов ПК-02
* 256Kb
* переключение плоскостей экрана
* AY 8910 Sound
* 512x256 Mono mode
* Interupts
* FDD 1818ВГ93
На VHDL реализован универсальный 1818ВГ93, который можно легко пересаживать на любой другой компьютер. К примеру, сделать РК-86 с дисководом займет пол дня.
Внутри у ВГ93 работает более чем полноценный ZX Spectrum. За основу для Спектрума взят известный туториал от Ewgeny7. Он разогнан на 7Mhz и у него полноценные 64Kb RAM, развертка переделана на 60Hz, добавлена двухпортовая VRAM на FPGA, заменена клавиатура (на безглючную VHDL из проекта speccy), исправлено пару ошибок(двойной импульс INT и т.п.). Имеется полноценный адаптер двухпортового доступа к SRAM - Львов и Спектрум работают с ней одновременно. Перед стартом Aeon заружает в ZX софт:
- Модифицированный ZX 48K ROM, который, после инициализации всего чего надо, запускает программу по адресу 0x6000
- Файл с текстовыми расшифровками ошибок FatFs
- и, собственно, саму программу VG93
Переключать экраны Львов - ВГ93 можно кнопками WinLeft & WinRight
На экране ВГ93 бежит консоль, там есть встроенный help, можно наблюдать за выполнением комманд, а самое главное запустить file manager и выбрать DSK файлы!!
Сразу после старта софт пробует вставить default.dsk из корня SD карты в драйв А: остальные будут пустые.
В файл менеджере, так же имеется help
Самое главное, что надо знать:
- софт понимает и показывает только DSK файлы без всяких заголовков - чистые данные. Для определения формата он пытается найти поочереди
* файл с таким же именем как и DSK но с расширением CFG в текущем каталоге
* файл default.cfg в текущем каталоге
* файл default.cfg в корне SD карты
Описания там вот такие:
[VG93 DSK Config]
Name=Lvov MFM
Encoding=MFM
Tracks=83
Sides=2
Sectors=16
First Sector ID=1
Sector Size=256
т.о. ВГ93 может работать с любым форматом дисков. В прилагаемом образе есть все нужные для Львова CFG файлы. К примеру, посмотрите файлы для CPM80.
ВГ93 работает как та чтение, так и на запись. Переключатель защиты записи на карте не работает - FPGA не имеет к нему доступа, но будет работать защита от записи на уровне файлов.
Для ВГ93 реализованны все команды! Даже Write Track, которая используется для форматирования. На консоли можно видеть все подробности формата. Сами данные никуда не пишутся - для этого нет памяти.
Совместимось Львова на невиданном доселе уровне.
За основу был взят Львов ПК-01 идущий с Aeon Lite и глубоко переделан.
По сути, от него осталась толко видео подсистема + в нее был добавлен режим 512х256 и клавиатура,
которая была доработана для режима ленивого сканиврования (это вызывало несовместимость с играми даже для ПК-01).
ПК-01 работает на 100%
ПК-02 на 99.5%
есть пару игр, которые не идут и я разберусь с этим попозже.
Работают игры и дэмо с AY звуком, доп. памятью и высоким разрешением экрана. Софт для тестирования быстродействия Z80 не идет по причине бага в Т80: последовательность команд
EI
HALT
лочит процессор. Причина такова, что после выполнения EI во время следующей за ней команды прерывания запрещены! Это нормально, но во время ваполнения HALT процессор на самом деле выполняет много команд NOP, и это тоже правильно, но прерывания должны быть запрещены только в течении одного полного цикла. Если последовательность команд переделать на
EI
NOP
HALT
то все будет в порядке. Ждем фикса от Т80!
Артефакты:
- BASICZ80 запускается только если сначала запустить игру ZYBEX с этого же диска, нажать сброс и только потом BASICZ80
Это работает ТОЧНО так же как на железном ПК-02.
Причина неизвестна.
Совместимость ПК-01 полная, со скидкой на то, что он на Z80.
BASIC3 с диска пойдет, но будет неправильно работать арифменика.
На ПК-02 идет CPM-36 и CPM80 без проблем!
Для запуска CPM-36 надо вставить диск system в А: и нажать П/Д - F12 на Львове.
Для запуска CPM80 надо вставить диск Loaders и запустить с него
CPM80MFM в Хамелеоне, после чего вставить в А: один из CPM80 дисков, вернуться во Львов и нажать любую кнопку.
На одном из дисков есть программа FORMAT3 для форматирования.
При форматировании времменно меняется режим MFM/FM и размер сектора независимо от типа DSK и запрещается фактическая запись на SD.
Восстановление происходит после команды Restore или Force Interupt. Это обеспечивает корректную работу форматирования и защиту DSK
от порчи при записи чистого каталога с меткой диска после форматирования.
Nice to have: возможность включения логирования консоли на SD карту,
но памяти для этого нету ВООБЩЕ! Утрамбовывать приходилось до последнего байта. Все рабочие области памяти пересажены внутрь ПЗУ.
Скорее всего в следующей версии проекта будет использованна лучшая хост система с большим количеством памяти. Быстродействия 7MHz ZX хватает. При отключеном логе комманд скорость напоминает скорость реального дисковода. Ограничена она скоростью SD карты, поскольку RAM мало и каждый раз подгружается новая дорожка. Быстродействие можно ускорить отключив имитацию времени поиска дорожки как у реального дисковода (включена по умолчанию). Но тогда могут быть сопроблемы совместимости! Не пойдет CPM80 она реально считает индексные импульсы во время позиционирования.
Картинки.
Консоль
http://zx-pk.ru/attachment.php?attachmentid=52574&stc=1&d=1434602139
Файл Менеджер
http://zx-pk.ru/attachment.php?attachmentid=52575&stc=1&d=1434602139
Выбран DSK. Ошибка на экране будет встречаться часто. Те кто снимал образы для Хамелеона незнал, что у него 83 дорожки и снял только 80.
Если такой диск заполнен до конца, то последние файлы на полностью заполненом диске не будут читаться и будет выдана соответствующая ошибка.
http://zx-pk.ru/attachment.php?attachmentid=52576&stc=1&d=1434602139
Лог выполнения команд на консоли. Запись короткого файла.
http://zx-pk.ru/attachment.php?attachmentid=52574&stc=1&d=1434602139
Лог выполнения команды форматирования и пошаговая отладка.Так же есть возможность вклбчит пэйджер консоли
для постраничной остановки.
http://zx-pk.ru/attachment.php?attachmentid=52578&stc=1&d=1434602139
Требуется компилятор z88dk-20141201 в более поздних версиях есть известная ошибка с integer types casting.
Использована библиотека FatFs by Elm Chan с исправленным мной драйвером SD карты.
Библиотека позволяет делать все, но памяти на Спектруме мало, поэтому неработают длинные имена и Code Pages & UNICODE (да и ненадо это, непонятно что делать с ними на экране спектрума), проваливание в под директории ограничено длинной пути для приводов(мало памяти), но достаточно глубока для практических целей.
Сделана полноценная расшифровка ошибок и полная их обработка с автовосстановлением. В любой момент можно вынуть карту и вставить ее назад!
Have Fun!
liberation
18.06.2015, 11:13
Первый релиз Лвов ПК-02 для Aeon Lite
Отличная новость!
Совместимось самого львовы на невиданном доселе уровне.
А что с торможением памяти?
По сути, от него осталась толко видео подсистема + в нее был добавлен еще один режим и клавиатура,
которая была доработана для режима ленивого сканиврования (это вызывает несовместимость с играми даже для ПК-01).
Сейчас вызывает несовместимость или Вы исправили эту несовместимость?
Скорее всего в следующей версии проекта будет использованна лучшая хост система с большим количеством памяти.
Это как?
Have Fun!
Yes, Sir!
kapitan-u
18.06.2015, 17:54
А что с торможением памяти?
пока недобрался до этого, да оно и несильно нужно
Сейчас вызывает несовместимость или Вы исправили эту несовместимость?
исправил
Это как?
например MIPS, перекомпилировать все под нее не составит труда
---------- Post added at 17:54 ---------- Previous post was at 17:12 ----------
Сейчас вызывает несовместимость или Вы исправили эту несовместимость?
было
KEYB_D <= not Matrix(0) when KEYB_A(0) = '0' else
not Matrix(1) when KEYB_A(1) = '0' else
not Matrix(2) when KEYB_A(2) = '0' else
not Matrix(3) when KEYB_A(3) = '0' else
not Matrix(4) when KEYB_A(4) = '0' else
not Matrix(5) when KEYB_A(5) = '0' else
not Matrix(6) when KEYB_A(6) = '0' else
not Matrix(7) when KEYB_A(7) = '0' else
"11111111";
KEYB_D2<= not Matrix2(0) when KEYB_A2(0) = '0' else
not Matrix2(1) when KEYB_A2(1) = '0' else
not Matrix2(2) when KEYB_A2(2) = '0' else
not Matrix2(3) when KEYB_A2(3) = '0' else
"1111";
стало
KEYB_D <= "11111111" and
( not Matrix(0) or (7 downto 0 => KEYB_A(0)) ) and
( not Matrix(1) or (7 downto 0 => KEYB_A(1)) ) and
( not Matrix(2) or (7 downto 0 => KEYB_A(2)) ) and
( not Matrix(3) or (7 downto 0 => KEYB_A(3)) ) and
( not Matrix(4) or (7 downto 0 => KEYB_A(4)) ) and
( not Matrix(5) or (7 downto 0 => KEYB_A(5)) ) and
( not Matrix(6) or (7 downto 0 => KEYB_A(6)) ) and
( not Matrix(7) or (7 downto 0 => KEYB_A(7)) );
KEYB_D2<= "1111" and
( not Matrix2(0) or (3 downto 0 => KEYB_A2(0)) ) and
( not Matrix2(1) or (3 downto 0 => KEYB_A2(1)) ) and
( not Matrix2(2) or (3 downto 0 => KEYB_A2(2)) ) and
( not Matrix2(3) or (3 downto 0 => KEYB_A2(3)) );
liberation
18.06.2015, 18:19
например MIPS, перекомпилировать все под нее не составит труда
Тогда имеет смысл подождать переход на MIPS?
kapitan-u
19.06.2015, 00:20
зачем? полноценный продукт, пользуйтесь на здоровье. если будут баги - исправлю
kapitan-u
19.06.2015, 04:18
V1.1 Перезелил архив, ссылка та же.
Вчера пока писал описание понял, что надо откорректировать.
- Форматирование. Теперь все равно какого типа DSK вставлен.
При форматировании времменно меняется режим MFM/FM и размер сектора независимо от типа DSK и запрещается фактическая запись на SD.
Восстановление происходит после команды Restore или Force Interupt. Это обеспечивает корректную работу форматирования и защиту DSK
от порчи при записи чистого каталога с меткой диска после форматирования.
- добавлен страничный пейджер в консоль с возможностью включения-выключения
- усовершенствованна диагностива при выходе головки за пределы DSK
- вынесен консольный help в отдельный файл con_help.txt загружаемый через config.ini
- даже с учетом экономии памяти на con_help.txt пришлось пожертвовать командой Read Address и она вынесена в условную компиляцию (думаю она никогда и непонадобится)
kapitan-u
19.06.2015, 07:47
Я уже выяснил почему пару програм не идут: не полностью реализована ВВ55
Я тоже поленился это сделать...
Я вижу, что некоторые программы управляют переключением видепамяти через регистр управления ВВ55 0хС3 меняя режим нижней части порта С
Видимо перевод его в вежим ввода дает 1, а режим вывода - то что там прописано в порт С. Идеальный вариант для всех поделок: либо найти полную реализацию ВВ55, либо самому написать.
с dsk-ами более менее понятно, а вот что делать с одиночными файлами??
которые с расширением .lvt,.lvt0,.lvt1 ? Если они никогда не будут грузиться, то как их и чем "впихувать" в имидж пустой?
Идеальный вариант для всех поделок: либо найти полную реализацию ВВ55, либо самому написать.
http://www.cnblogs.com/yuzeren48/p/c_8255.html
kapitan-u
19.06.2015, 09:09
с dsk-ами более менее понятно, а вот что делать с одиночными файлами??
которые с расширением .lvt,.lvt0,.lvt1 ? Если они никогда не будут грузиться, то как их и чем "впихувать" в имидж пустой?
смотрите в ветке FDC для Львова набор моих програм для манипуляции с дме файлами.
их можно запихивать на DSK и вытаскивать от туда
---------- Post added at 09:09 ---------- Previous post was at 09:05 ----------
http://www.cnblogs.com/yuzeren48/p/c_8255.html
немогу врубиться что там такое :-)
немогу врубиться что там такое :-)
Там ссылка на исходники, переводчик google в помощь (ссылка (https://translate.google.ru/translate?sl=auto&tl=ru&js=y&prev=_t&hl=ru&ie=UTF-8&u=http%3A%2F%2Fwww.cnblogs.com%2Fyuzeren48%2Fp%2Fc _8255.html&edit-text=&act=url))
Прямая ссылка на архив (ссылка (http://files.cnblogs.com/yuzeren48/8255%E6%BA%90%E7%A0%81%E5%8A%A0%E6%B5%8B%E8%AF%95% E6%96%87%E4%BB%B6.rar))
Вот попроще http://www.go-gddq.com/down/2011-07/11071221253655.zip
---------- Post added at 09:19 ---------- Previous post was at 09:15 ----------
kapitan-u, можно ли расширить функционал модуля ВГ93 плагинами для эмуляции других устройств?
liberation
19.06.2015, 10:38
Я уже выяснил почему пару програм не идут: не полностью реализована ВВ55
Я тоже поленился это сделать...
Я вижу, что некоторые программы управляют переключением видепамяти через регистр управления ВВ55 0хС3 меняя режим нижней части порта С
Видимо перевод его в вежим ввода дает 1, а режим вывода - то что там прописано в порт С. Идеальный вариант для всех поделок: либо найти полную реализацию ВВ55, либо самому написать.
Полная реализация полезна и хороша, но для "Львова" (если только старый софт смотреть) отлично подойдет компромиссный вариант с частичной эмуляцией самого необходимого:
IO.prototype.input = function(port) {
port &= 0xFF;
//В ПК-01 "Львов" реализована неполная дешифрация портов ввода-вывода
//[http://lvovpc.ho.ua/forum/viewtopic.php?p=2219#p2219]
port = 0xC0 + (port & this.decoding_mask);
if (port === 0xD1) {
this.ports[port] = this.keyboard.get(this.ports[0xD0], 0xD0);
}
else if (port === 0xD2) {
this.ports[port] = this.keyboard.get(this.ports[0xD2], 0xD2);
}
else if ((port & 0x03) === 3) {
//Согласно документу i8255A/i8255A-5 datasheet мы имеем,
//что Control Word Register доступен только для записи:
//"The Control Word Register can Only be written into.
//No Read operation of the Control Word Register is allowed."
//[http://www.classiccmp.org/rtellason/chipdata/8255.pdf]
//Такие дела, котаны. Берегите себя, читайте мануалы.
return 0;
}
return this.ports[port];
};
IO.prototype.output = function(port, w8) {
port &= 0xFF;
//В ПК-01 "Львов" реализована неполная дешифрация портов ввода-вывода
//[http://lvovpc.ho.ua/forum/viewtopic.php?p=2219#p2219]
port = 0xC0 + (port & this.decoding_mask);
if ((port & 0x03) === 3 && (w8 & 0x80) === 0) {
var mask = 0x01 << ((w8 & 0x0E) >> 1),
target = port - 1;
if (w8 & 0x01) {
this.output(target, this.input(target) | mask);
}
else {
this.output(target, this.input(target) & ~mask);
}
}
if (port === this.MEDIA_PORT) {
if ((this.ports[this.PALETTE_PORT] & this.BEEPER_MODE_BIT) || this.ignore_ctrl_bit) {
this.beeper.process(w8 & this.BEEPER_BIT);
}
}
this.ports[port] = w8;
};
И
//port 0xC0
//[http://lvovpc.cu.cc/article.shtml?id=2]
//[http://lvovpc.cu.cc/article.shtml?id=5]
this.PRINTER_PORT = 0xC0;
//port 0xC1 (b)
this.PALETTE_PORT = 0xC1;
this.BEEPER_MODE_BIT = 0x80; // 1 - вывод звука на бипер разрешен
//port 0xC2 (c)
this.MEDIA_PORT = 0xC2;
this.BEEPER_BIT = 0x1; //1 - on, 0 - off
this.VRAM_STATUS_BIT = 0x2; //0 - видеоОЗУ подключено
this.PRINTER_SC_STROBE_BIT = 0x4;
this.TAPE_READ_BIT = 0x10;
this.PRINTER_AC_BUSY_BIT = 0x40;
kapitan-u
19.06.2015, 19:02
так в том то и дело, что не подходит!
Львов ПК-02 пробуйте игры Savage
файлы S1 и S3
ROM:0121 clear_16k_4000: ; CODE XREF: ROM:0104p
ROM:0121 ld a, 10b
ROM:0123 out (0C3h), a ; Lower C =-> OUT Unusual VRAM controll via VV55 PortC mode manipulation
ROM:0125 ld hl, 4000h
ROM:0128 ld de, 4001h
ROM:012B ld bc, 3FFFh
ROM:012E ld (hl), l
ROM:012F ldir
ROM:0131 ld a, 11b ; Lower C =-> IN
ROM:0133 out (0C3h), a
ROM:0135 ret
---------- Post added at 18:23 ---------- Previous post was at 18:17 ----------
Вот попроще http://www.go-gddq.com/down/2011-07/11071221253655.zip
Спасибо, этот супер! Буду прикручивать, но сначала посмотрю на железном Львове как этот артефакт работает. У меня по простому его вылечить не вышло. Не факт, что полная реализация 8255 его имитирует точно.
---------- Post added at 18:25 ---------- Previous post was at 18:23 ----------
[/COLOR]
[/COLOR]kapitan-u, можно ли расширить функционал модуля ВГ93 плагинами для эмуляции других устройств?
не совсем понял вопрос. поясните пожалуйста
---------- Post added at 19:02 ---------- Previous post was at 18:25 ----------
100% все предложенные 8255 не решат проблему.
у них раздельные порты на вход и на выход, а в железе используется артефакт двунаправленного порта
liberation
19.06.2015, 20:12
так в том то и дело, что не подходит!
Львов ПК-02 пробуйте игры Savage
файлы S1 и S3
А я не стал делать эмулятор ПК-02 "Львова". ;)
Насколько я помню, S1 стабильно виснет в Башкирии, а вот S3 прекрасно работает. Больше эмуляторов ПК-02 нет.
kapitan-u
19.06.2015, 21:34
я уже устал и жестоко тупить начал, спасибо Oleg Dolgarev надоумил,
это не артефакт а обычная манипуляция отдельными битами порта С
в этом случае полная 8255 поможет
---------- Post added at 20:42 ---------- Previous post was at 20:19 ----------
сделал упрощенный вариант + добавил манипуляцию бипером
все работает! обе игры Savage идут!
я уже перезалил архив со всеми исправлениями.
Думаю теперь найти программу которая не пойдет - просто невозможно :-)
TO DO проекта:
- прикрутить полную альтеровскую 8255 для красоты
- реализовать джойстик
---------- Post added at 21:34 ---------- Previous post was at 20:42 ----------
Если кто то подарит рабочий MIPS для ISE , то я бы взялся сделать
много чего интересного. Например можно монтировать виртуальный диск из директории с LVT файлами на SD карте, сделать настоящий магнитофон играющий LVT, сделать полную поддержку форматирования с сохнанением форматов, логирование консоли в файл на SD и т.п.
--
PS или ARM
liberation
19.06.2015, 21:53
Если кто то подарит рабочий MIPS для ISE , то я бы взялся сделать много чего интересного.
Эх, хорошо бы еще сделать читалку файлов в .wav формате. Вдруг кто-то решит что-то перегнать с кассет. Вариант маловероятный, но всякое бывает.
kapitan-u
20.06.2015, 06:45
Перезалил архив с новой версией всего.
- добавленны настоящие ВВ55 ! В процессе добавления пробовал все подряд и нашел одну игру, которая не шла: Hawk Storm (HAWKSTOR)
Причем даже при переходе на нормалные ВВ55 были нехорошие глюки. Причина в работе с системной ВВ55 нижней половиной порта С на ввод! Это там где управление VRAM. Хитрая штука, но уже починил. С настоящими ВВ55 код стал красивый, компактный, понятный и самое главное рабочий.
- обнаружено, что бит PB7 системной ВВ55 делает BEEPER Enable - добавлено
- в софте еще порция не сильно нужного кода ушла в условную компиляцию - при
интенсивном исспользовании порой нехватало стека.
-----------------
Все, это было весело, но уже надоело :-) Готов поспорить, что Львов на 100% совместим ( со скидкой на EI-HALT T80 баг).
Если найдете баги - присылайте. Я буду собирать MIPS или ARM систему.
PS: программы, которые не стартуют с дисков - записанны на последних дорожках, битые сами по себе.
kapitan-u
22.06.2015, 09:40
V1.3 незначительный фикс в файл менеджере (восстановление после ошибок FatFs)
kapitan-u
24.06.2015, 08:59
BTW тут был вопрос насчет LVT файлов - я вспомнил, что невсякий LVT файл можно так просто закинуть на диск. Там может быть нехороший адрес закрузки и старта несовместимый с хамелеоном. Так вот моя утилита из набора для Львова lviv-lvt-to-dsk.pl автоматически приделывает перемещающий загрузчик если он нужен.
# 3 type of LVT files processed automatically:
# - loading address = start address (Direct)
# - loading address != start address && loading address > 2 (+JMP command)
# - loading address != start address && loading address < 2 (+Relocating Loader Code)
# BASIC files are supported.
kapitan-u
30.06.2015, 05:13
Львов ПК-02 FPGA V2.0 !
http://unofficial.portaone.com/~kapitan/LvovPK-02.zip
Новости:
FPGA
- доработано подключение клавиатурной ВВ55. BASICZ80 все время работал в пошаговом режиме, теперь ОК
- добавлен звук из хост системы
Софт
- с целью экономии памяти был сначала выполнен переход на Petit Fat и потом на VinxFs, на которой я и остановился. Освободилось около 10кб памяти, что позволило добавить интересные функции.
- включены все команды ВГ93
- добавлен звук передвижения головки дисковода
- добавлено создание виртуальных дисков из LVT файлов !
О последнем подробнее:
Файл менеджер теперь показывает еще и LVT файлы. При выборе LVT файла создается виртуальный диск с одним файлом. Для COM файлов имя файла всегда COMMAND.COM (позволяет удобно заапускать автоматом по сбросу), а для BAS файлов имя всегда LVT.BAS (позволяет незадумываясь запускать LOAD "LVT" ). Настоящее имя из LVT файла видно в метке диска.
Поддерживается два типа бинарных файлов:
- адрес загрузки = адресу старта
- адрес загрузки != адресу старта и адрес загрузки >= 3
третий тип:
- адрес загрузки != адресу старта и адрес загрузки < 3
не поддерживается, но я такой файл знаю всего один!
И поддерживаются BASIC файлы.
Для правильного создания виртуального диска должен присутствовать файл конфигурации совместимый с форматом хамелеона. Можно делать FM или MFM все будет правильно работать автоматически.
На прилагаемом образе диска я включил много разных LVT в отдельных папках:
LVT-BIN1
LVT-BIN2
LVT-BIN3
бинарные файлы соответствующих типов. Как все работает видно на консоли.
LVT-BAS
BASIC файлы, не забывает, что BASICZ80 нормально стартует только после запуска игры ZYBEX или подобной.
Многофайловые ленточные программы LVT + LV0 + LV1 и т.д. не поддерживаются. Их надо портировать на хамелеон в ручную и практически все стоящее портировано и есть на дисках.
В комплект включены мои старые perl скрипты для манипуляции образами дисков и файлами. Но теперь появилась еще одна возможность загнать LVT файл на образ диска DSK:
- монтируем на дисковод А виртуальный дист с LVT файлом
- монтируем на дисковод В образ диска DSK
- коприруем файл с А на В средствами хамелеона и его программ
Наоборот неработает!
Совместимость по железу 100% стартуют Lines любых видов и т.д.
PS: по библиотекам. Обе, Petit Fat и VinxFs, пришлось немного дорабатывать. Добавил кэш на один SD сектор и функцию gets.
Без кэша библиотеки невероятно медленные и чем больше файлов на карте - тем медленнее. Может несколько минут файл искать!
С кэшем работает вполне сносно, чотя и немного медленнее чем на FatFs.
kapitan-u
30.06.2015, 08:23
Пожалуйста подскажите какие еще бывают заголовки у LVT файлов кроме
LVOV/2.0/ и как их загружать. Я уже встречал LVOV/0.0/ например.
Спасибо!
Чего тянуть. Попробовал. Пока два вопроса.
SD Image - это я так понимаю образ sd-карты?
с LvovPK02 каталогом и config.ini более менее понятно? Вопрос в следующем.
Можно чтобы в корне диска был всего один каталог, и все остальное - в нем?
Когда конфигов несколько на карточке, всяких разных - количество файлов и папок в корневом каталоге несколько напрягает)
и второй вопрос - а не работает.:)
Вернее до хамелеон-дос доходит, и там висим. дооооолго...
по левомуу WIN - высвечивает обшибку Hardware Error и Retry увеличивает. Все))
sd как sd? вроде читает-пишет с нее
в DOS *ERROR I/O*
kapitan-u
30.06.2015, 09:03
Вопрос в следующем.
Можно чтобы в корне диска был всего один каталог, и все остальное - в нем?
Когда конфигов несколько на карточке, всяких разных - количество файлов и папок в корневом каталоге несколько напрягает)
можно
и второй вопрос - а не работает.:)
Вернее до хамелеон-дос доходит, и там висим. дооооолго...
по левомуу WIN - высвечивает обшибку Hardware Error и Retry увеличивает. Все))
sd как sd? вроде читает-пишет с нее
Забыл предупредить! Работает только с FAT16 ! там в VinxFs что то не портировалось и я отключил и забыл! Думал FAT16 всем хватит? сейчас, когда все остальное закончил - могу вернуться к этому вопросу.
---------- Post added at 09:03 ---------- Previous post was at 09:00 ----------
по поводу Партнера: у меня к нему софта нет. есть только два CPM диска, там ничего интересного нету. А ленточные файлы , я так понимаю там так просто не прикрутишь через дос. Для партнера может будет интереснее делать какой то контроллер, который будет загружать и запускать как надо ленточные файлы...
liberation
30.06.2015, 11:11
Пожалуйста подскажите какие еще бывают заголовки у LVT файлов кроме
LVOV/2.0/ и как их загружать. Я уже встречал LVOV/0.0/ например.
Спасибо!
Очень интересно. Практически весь сохранившийся софт доступен в формате .lvt (LVOV/2.0/). Можете выложить пример с заголовком LVOV/0.0/ ? Из какого архива такое чудо?
kapitan-u
30.06.2015, 18:33
http://unofficial.portaone.com/~kapitan/LvovPK-02.zip
\SD Image\LVT-BIN3\DIGGER2.LVT
\SD Image\LVT-BIN3\DIGGER3.LVT
где брал - уже не помню
---------- Post added at 18:33 ---------- Previous post was at 17:10 ----------
про FAT16 я соврал! уже совсем запутался. FAT16 это была версия на PetitFS.
текущая на VinxFS должна понимать все, но я тестировал только FAT16
kapitan-u
03.07.2015, 06:33
Версия 2.1
http://unofficial.portaone.com/~kapitan/LvovPK-02.zip
Проверено, работает FAT16 и FAT32, на карте должен быть только ОДИН раздел (partition). FAT12 не поддерживается.
Добавлено:
- Вывод диагностики типа FAT на старте
- Подсказка о типах систам и partition если непроходит инициализация карты
- Работа с read only файлами, в файл менеджере они отображаются красным цветом
- флаг защиты записи на виртуальных дисках, чтобы небыло проблем при попытке записи
- поддержка третьего типа COM файлов!!! теперь можно стартовать игру из папки LVT-C3
Если одним словом - не работает)
Если расширенно - две флешки форматировал, и ФАТ16 и ФАТ32 , или три. парочка на 2Гб и одна на 1Гб. та же самая ошибка, не читает.
Форматил, есичо, двумя разными программами.
Далее. Флешка на 16Гб. не форматировал, стер с нее все. Немного с ней получше, но другая ошибка, и все равно не работает.
http://s3.micp.ru/J5LVw.jpg
http://s1.micp.ru/0uf8C.jpg
http://s1.micp.ru/K8LZY.jpg
http://s2.micp.ru/E6019.jpg
А это на 2Гб sd-карту. Фотки сделаны на другую 2Гб карту
http://s3.micp.ru/ZVimU.jpg
Пока вопрос - какие команды Хамелеон понимает?? на DIR - зависает насмерть
kapitan-u
03.07.2015, 19:42
фотографии обнадеживают. пожалуйста попробуйте в консоли включить МП93 Command Debug нажав кнопку С и пришлите фотографии того, что выйдет.
Хамелеон понимает DIR но его надо не печатать буквами, а ввести кнопкой F0
на PS2 клавиатуре это кнопка ESC
kapitan-u
03.07.2015, 20:52
Отлично! Все вроде работает. После смены думает долго, потому что библиотека медленная. Но в целом по скорости работает приемлимо особенно если не включать дебаг.
Сброс консоли непредусмотрен. Сброс Львова любой из этих кнопок.
kapitan-u
03.07.2015, 21:31
с карточками все просто FAT16 или FAT32 и только один partition.
пожалуйста проверьте, что там у вас с partitions.
Насчет слета консоли, это плохо. Баг в компиляторе, зависит как alignment кода ляжет для длинных целых. Я сейчас подбираю эти параметры, но самое лучшее перейти на другую хост систему... сейчас попробую новые версии компилятора, может что то поменялось...
kapitan-u
04.07.2015, 00:29
Пробовал я разные версии компилятора - это ужас, вообще непонятно как это все работает хоть как то....
http://www.z88dk.org/forum/viewforum.php?id=12
я буду работать над переходом на MIPS, если кто то поможет с запуском MIPS на aeon - буду очень признателен.
kapitan-u
06.07.2015, 02:21
Ошибка найдена и устранена благодаря помощи Алексея Морозова - VinXFS
При портировании драйвера было утеряно 2 строки и работали только SDHC карты, а обычные SD нет. Все библиотеки реабилитированны!
Исправленый вариант перезалит.
http://unofficial.portaone.com/~kapitan/LvovPK-02.zip
kapitan-u
06.07.2015, 20:43
про выход из консоли написано пару раз на форуме и в readme
насчет зависаний консоли - только замена компилятора поможет
я уже собрал болванку MIPS, пробую ее запускать потихоньку
PS самое главное исходники всего доступны: подключайтесь!
kapitan-u
06.07.2015, 22:45
Спасибо за конструктивную критику. Немного доработал VHDL
теперь при нажатии на правый Win автоматически происходит переход в консоль и при отпускании переход во Львов
http://unofficial.portaone.com/~kapitan/LvovPK-02.zip
kapitan-u
29.07.2015, 01:41
потихоньку собираю Львов с ВГ93 на MIPS и нашел пару недочетов в схемотехнике диспетчера памяти ZX версии. Перезалил архив с исправлениями, по идее должно помочь со сбоями ZX при сбросе Львова.
потихоньку собираю Львов с ВГ93 на MIPS
MIPS здесь нужен как зайцу стоп сигнал :) Второй Z80 не справится что-ли? Во первых занимает мало ресурсов (около 1к6 LE), во вторых простота в программировании для любого спектрумиста (Z80 наше всё), не нужно сушить голову над Си библиотеками и компиляторами.
kapitan-u
29.07.2015, 13:14
MIPS здесь нужен как зайцу стоп сигнал :) Второй Z80 не справится что-ли? Во первых занимает мало ресурсов (около 1к6 LE), во вторых простота в программировании для любого спектрумиста (Z80 наше всё), не нужно сушить голову над Си библиотеками и компиляторами.
вот это заявление неправда от начала до конца :-)
я сделал оба варианта и знаю все ответы не теоретически , а практически. По пунктам:
- Z80, даже на 7Mhz справляется плоховато - медленнее чем настоящий дисковод, хотя жить можно. В 64кб все влазит с ОГРОМНЫМ трудом.
- готовый Львов + Host на MIPS занимает всего на 3% больше места на ПЛИС
- компиляторы и библиотеки как раз огромная проблема. z88dk глючный и не очень стандартный.
kapitan-u
29.07.2015, 14:35
это мега-круто, особенно документация на zxpoly.
но MIPS + GCC +NEWLIB + все что еще захочется - это шаг вперед для всех будущих проектов.
это мега-круто, особенно документация на zxpoly.
но MIPS + GCC +NEWLIB + все что еще захочется - это шаг вперед для всех будущих проектов.
Причём здесь zx-poly?!
MIPS, ну-ну шаг вперед и два назад :) Сейчас в разработке для будущих проектов у меня плата с Cyclone V SoC HPS. Для dual-core ARM Cortex-A9 MPCore™ сможете собрать?
ILoveSpeccy
01.08.2015, 14:07
Причём здесь zx-poly?!
MIPS, ну-ну шаг вперед и два назад :) Сейчас в разработке для будущих проектов у меня плата с Cyclone V SoC HPS. Для dual-core ARM Cortex-A9 MPCore™ сможете собрать?
"режим иронии ON" >>>
Блин, читаю тему и прямо таки кажеться, что по этому поводу только единственное мнение "true", и это твоё, Влад. Нет, серьёзно. Других мнений просто быть не может. Z80 единственный процессор, остальное - кал.
>>> "OFF"
А как же куча ограничений? Нет нормального си-компилятора, проблемы с ограничением памяти и в конце-концов скорость. Сравнивать по скорости Z80 и MIPS (даже ISA1), просто слов нет. Next80 хоть на 300МГц заведи, но он в реальных задачах и рядом не стоял с MIPS на 10МГц. Ну если только тупо порты дёргать, и то не факт! Про математику я вообще молчу.
И сравнивать ARM в кристалле с IP-коркой тоже как-то некорректно. Давай тогда так... у меня ноут с i7. Где тогда по-производительности этот ARM????
Короче, я всячески поддержу kapitan-u. Во первых из-за личного интереса к MIPS корке. Во-вторых из-за стремления человека делать так, как ЛИЧНО ему хочется.
з.Ы.
Хотел извениться перед kapitan-u за то, что не ответил на мыло. Был действительно очень занят. Сейчас потихоньку начинаю пилить проект дальше.
Девачки, только не нужно обежаться, я всего лишь предложил использовать простой и понятный всем на этом форуме Z80, и у кого как стояло и кто за что там дергал, меня не интересует. Я планирую делать периферийный, вот и подумал, что с общим модулем на базе Z80 было-бы проще.
kapitan-u
03.08.2015, 23:57
советы собирающим MIPS.
практически все MIPS SOC, которые можно взять за основу, имеют одинаковый контроллер SRAM. В нем можно сделать ряд улучшений:
- если ввести буферные регистры для адреса и данных, то можно пропустить самый последний цикл в автомате записи
- можно сделать более хитрый автомат, который будет анализировать сигналы записи байтов и отрабатывать только нужный цикл записи для байтовых операций.
это экономит еще один цикл, на платформах с 16 бит памятью. Проверено - работает и это много экономит для операций со строками.
- при организации многопортового доступа надо защелкивать в буферном регистре сигналы записи от процессора. MEM_BUSY на процессор удерживает данные и адрес, но не управляющие сигналы.
kapitan-u
13.08.2015, 03:09
Львов ПК-02 + ВГ93 на MIPS для Aeon Lite
http://unofficial.portaone.com/~kapitan/LvovPK02-MIPS.zip
Для MIPS варианта снова был осуществлен переход на FatFS
VinxFS неимеет байтового un-aligned доступа к памяти.
Теоретически его можно сделать, но ограничения по памяти теперь не такие страшные (у MIPS 256k памяти) и FatFs намного лучше.
Результат - работает очень быстро, просто летает. Добавленна новая функция: сохранение на SD карту логов форматирования. Вот примеры:
F4 C:1 RY:1 FM A:0 Write Track
@ 46 GAP1:46 AM TRACK
@ 79 GAP3:32 AM ID TR: 0 SD:0 SEC: 1 SS:1= 256 CRC
@ 103 GAP2:17 AM DATA PS: = 256 CRC
@ 395 GAP3:33 AM ID TR: 0 SD:0 SEC: 2 SS:1= 256 CRC
@ 419 GAP2:17 AM DATA PS: = 256 CRC
@ 711 GAP3:33 AM ID TR: 0 SD:0 SEC: 3 SS:1= 256 CRC
@ 735 GAP2:17 AM DATA PS: = 256 CRC
@1027 GAP3:33 AM ID TR: 0 SD:0 SEC: 4 SS:1= 256 CRC
@1051 GAP2:17 AM DATA PS: = 256 CRC
@1343 GAP3:33 AM ID TR: 0 SD:0 SEC: 5 SS:1= 256 CRC
@1367 GAP2:17 AM DATA PS: = 256 CRC
@1659 GAP3:33 AM ID TR: 0 SD:0 SEC: 6 SS:1= 256 CRC
@1683 GAP2:17 AM DATA PS: = 256 CRC
@1975 GAP3:33 AM ID TR: 0 SD:0 SEC: 7 SS:1= 256 CRC
@1999 GAP2:17 AM DATA PS: = 256 CRC
@2291 GAP3:33 AM ID TR: 0 SD:0 SEC: 8 SS:1= 256 CRC
@2315 GAP2:17 AM DATA PS: = 256 CRC
@2607 GAP3:33 AM ID TR: 0 SD:0 SEC: 9 SS:1= 256 CRC
@2631 GAP2:17 AM DATA PS: = 256 CRC
@2890 GAP4:235
82 C:1 RY:1 FM A:0 Read Sec TR:00 SD:0 SEC:01
82 C:1 RY:1 FM A:0 Read Sec TR:00 SD:0 SEC:02
82 C:1 RY:1 FM A:0 Read Sec TR:00 SD:0 SEC:03
82 C:1 RY:1 FM A:0 Read Sec TR:00 SD:0 SEC:04
82 C:1 RY:1 FM A:0 Read Sec TR:00 SD:0 SEC:05
82 C:1 RY:1 FM A:0 Read Sec TR:00 SD:0 SEC:06
82 C:1 RY:1 FM A:0 Read Sec TR:00 SD:0 SEC:07
82 C:1 RY:1 FM A:0 Read Sec TR:00 SD:0 SEC:08
82 C:1 RY:1 FM A:0 Read Sec TR:00 SD:0 SEC:09
19 C:1 RY:1 FM A:1 Seek TR:00 00 > 00
F4 C:1 RY:1 FM A:1 Write Track
@ 46 GAP1:46 AM TRACK
@ 79 GAP3:32 AM ID TR: 0 SD:1 SEC: 1 SS:1= 256 CRC
@ 103 GAP2:17 AM DATA PS: = 256 CRC
@ 395 GAP3:33 AM ID TR: 0 SD:1 SEC: 2 SS:1= 256 CRC
@ 419 GAP2:17 AM DATA PS: = 256 CRC
@ 711 GAP3:33 AM ID TR: 0 SD:1 SEC: 3 SS:1= 256 CRC
@ 735 GAP2:17 AM DATA PS: = 256 CRC
@1027 GAP3:33 AM ID TR: 0 SD:1 SEC: 4 SS:1= 256 CRC
@1051 GAP2:17 AM DATA PS: = 256 CRC
@1343 GAP3:33 AM ID TR: 0 SD:1 SEC: 5 SS:1= 256 CRC
@1367 GAP2:17 AM DATA PS: = 256 CRC
@1659 GAP3:33 AM ID TR: 0 SD:1 SEC: 6 SS:1= 256 CRC
@1683 GAP2:17 AM DATA PS: = 256 CRC
@1975 GAP3:33 AM ID TR: 0 SD:1 SEC: 7 SS:1= 256 CRC
@1999 GAP2:17 AM DATA PS: = 256 CRC
@2291 GAP3:33 AM ID TR: 0 SD:1 SEC: 8 SS:1= 256 CRC
@2315 GAP2:17 AM DATA PS: = 256 CRC
@2607 GAP3:33 AM ID TR: 0 SD:1 SEC: 9 SS:1= 256 CRC
@2631 GAP2:17 AM DATA PS: = 256 CRC
@2890 GAP4:235
8A C:1 RY:1 FM A:1 Read Sec TR:00 SD:1 SEC:01
8A C:1 RY:1 FM A:1 Read Sec TR:00 SD:1 SEC:02
8A C:1 RY:1 FM A:1 Read Sec TR:00 SD:1 SEC:03
8A C:1 RY:1 FM A:1 Read Sec TR:00 SD:1 SEC:04
8A C:1 RY:1 FM A:1 Read Sec TR:00 SD:1 SEC:05
8A C:1 RY:1 FM A:1 Read Sec TR:00 SD:1 SEC:06
8A C:1 RY:1 FM A:1 Read Sec TR:00 SD:1 SEC:07
8A C:1 RY:1 FM A:1 Read Sec TR:00 SD:1 SEC:08
8A C:1 RY:1 FM A:1 Read Sec TR:00 SD:1 SEC:09
19 C:1 RY:1 FM A:0 Seek TR:01 00 > 01
F4 C:1 RY:1 FM A:0 Write Track
@ 46 GAP1:46 AM TRACK
@ 79 GAP3:32 AM ID TR: 1 SD:0 SEC: 1 SS:1= 256 CRC
@ 103 GAP2:17 AM DATA PS: = 256 CRC
@ 395 GAP3:33 AM ID TR: 1 SD:0 SEC: 2 SS:1= 256 CRC
@ 419 GAP2:17 AM DATA PS: = 256 CRC
@ 711 GAP3:33 AM ID TR: 1 SD:0 SEC: 3 SS:1= 256 CRC
@ 735 GAP2:17 AM DATA PS: = 256 CRC
@1027 GAP3:33 AM ID TR: 1 SD:0 SEC: 4 SS:1= 256 CRC
@1051 GAP2:17 AM DATA PS: = 256 CRC
@1343 GAP3:33 AM ID TR: 1 SD:0 SEC: 5 SS:1= 256 CRC
@1367 GAP2:17 AM DATA PS: = 256 CRC
@1659 GAP3:33 AM ID TR: 1 SD:0 SEC: 6 SS:1= 256 CRC
@1683 GAP2:17 AM DATA PS: = 256 CRC
@1975 GAP3:33 AM ID TR: 1 SD:0 SEC: 7 SS:1= 256 CRC
@1999 GAP2:17 AM DATA PS: = 256 CRC
@2291 GAP3:33 AM ID TR: 1 SD:0 SEC: 8 SS:1= 256 CRC
@2315 GAP2:17 AM DATA PS: = 256 CRC
@2607 GAP3:33 AM ID TR: 1 SD:0 SEC: 9 SS:1= 256 CRC
@2631 GAP2:17 AM DATA PS: = 256 CRC
@2890 GAP4:235
82 C:1 RY:1 FM A:0 Read Sec TR:01 SD:0 SEC:01
82 C:1 RY:1 FM A:0 Read Sec TR:01 SD:0 SEC:02
82 C:1 RY:1 FM A:0 Read Sec TR:01 SD:0 SEC:03
82 C:1 RY:1 FM A:0 Read Sec TR:01 SD:0 SEC:04
82 C:1 RY:1 FM A:0 Read Sec TR:01 SD:0 SEC:05
82 C:1 RY:1 FM A:0 Read Sec TR:01 SD:0 SEC:06
82 C:1 RY:1 FM A:0 Read Sec TR:01 SD:0 SEC:07
82 C:1 RY:1 FM A:0 Read Sec TR:01 SD:0 SEC:08
82 C:1 RY:1 FM A:0 Read Sec TR:01 SD:0 SEC:09
19 C:1 RY:1 FM A:1 Seek TR:01 01 > 01
F4 C:1 RY:1 FM A:1 Write Track
Полные файлы для FM и MFM форматов лежат в архиве.
Софт теперь более прямолинеен и понятен. Нету никаких дополнилельных файлов данных, все сидит прямо в программе.
VHDL VGA консоль взята из сервисной прошивки Aeon Lite.
Теперь можно развернуться и достаточно легко делать новый функционал. Например с FatFs и доступной памятью можно легко сделать длинные именя файлов и русский язык в именах файлов.
Отдельно стоит сказать, что сборка toolchain + libs довольно нетривиальная задача. В комплекте прилагается скрипт, который правильно все сторит под линуксом.
Так же в комплекте имеется Makefile + ld скрипт для правильной сборки под плазму со стартом с нулевого адреса (к плазме прилагают всякие boot.asm + convert - это ненонрально) и мой монитор для работы с консолью.
ld скрипт будет работать со стандартным crt0 ot newlib, в качестве бонуса прилагается crt0 файл с закладками под прерывания.
ILoveSpeccy
13.08.2015, 08:18
Красота! Вот спасибо!!! На днях обязательно гляну...
kapitan-u
14.08.2015, 05:49
как всегда мелкие правки в последний момент. Перезалил
http://unofficial.portaone.com/~kapitan/LvovPK02-MIPS.zip
Улучшения:
- был один аппаратный таймер считающий VGA кадры, добавил еще один аппаратный таймер считающий CPU CLK
- были подпрограммы задержки delay_us delay_ms с пустыми циклами откалиброванными под частоту процессора, переделанны на использование второго аппаратного таймера. частота процессора задается в header file
- исправлена поддержка прерываний в crt0 файле
сам софт ненуждается в прерываниях, но для эксперимента на процессор заведены прерывания по VGA VSYNC и в софте присутствует обработчик со счетчиком.
в main есть закоментированная строка разрешающая прерывания, ее можно раскомментировать и будет крутится програмный счетчик фреймов
этим проектом я доволен - дальше только исправления багов.
Теперь я вынесу MIPS в отдельный проект и добавлю туда полную поддержку клавиатуры + запуск нормальных ОС и будет хорошая платформа для разных проектов на Aeon
kapitan-u
31.08.2015, 04:10
Новая версия
http://unofficial.portaone.com/~kapitan/LvovPK02-MIPS.zip
доработан анализ команды форматирования. Теперь результат такой:
F4 C:1 RY:1 MFM A:0 Write Track
@ 95 GAP1:0x4E*80 SYNC:12 0xC1*3 AM INDEX 0xFC
@ 161 GAP3:0x4E*50 SYNC:12 0xA1*3 AM ID 0xFE TR: 0 SD:0 SEC: 1 SS:1= 256 CRC
@ 205 GAP2:0x4E*22 SYNC:12 0xA1*3 AM DATA 0xFB PS: = 256 CRC
@ 533 GAP3:0x4E*54 SYNC:12 0xA1*3 AM ID 0xFE TR: 0 SD:0 SEC: 2 SS:1= 256 CRC
@ 577 GAP2:0x4E*22 SYNC:12 0xA1*3 AM DATA 0xFB PS: = 256 CRC
@ 905 GAP3:0x4E*54 SYNC:12 0xA1*3 AM ID 0xFE TR: 0 SD:0 SEC: 3 SS:1= 256 CRC
@ 949 GAP2:0x4E*22 SYNC:12 0xA1*3 AM DATA 0xFB PS: = 256 CRC
@1277 GAP3:0x4E*54 SYNC:12 0xA1*3 AM ID 0xFE TR: 0 SD:0 SEC: 4 SS:1= 256 CRC
@1321 GAP2:0x4E*22 SYNC:12 0xA1*3 AM DATA 0xFB PS: = 256 CRC
@1649 GAP3:0x4E*54 SYNC:12 0xA1*3 AM ID 0xFE TR: 0 SD:0 SEC: 5 SS:1= 256 CRC
@1693 GAP2:0x4E*22 SYNC:12 0xA1*3 AM DATA 0xFB PS: = 256 CRC
@2021 GAP3:0x4E*54 SYNC:12 0xA1*3 AM ID 0xFE TR: 0 SD:0 SEC: 6 SS:1= 256 CRC
@2065 GAP2:0x4E*22 SYNC:12 0xA1*3 AM DATA 0xFB PS: = 256 CRC
@2393 GAP3:0x4E*54 SYNC:12 0xA1*3 AM ID 0xFE TR: 0 SD:0 SEC: 7 SS:1= 256 CRC
@2437 GAP2:0x4E*22 SYNC:12 0xA1*3 AM DATA 0xFB PS: = 256 CRC
@2765 GAP3:0x4E*54 SYNC:12 0xA1*3 AM ID 0xFE TR: 0 SD:0 SEC: 8 SS:1= 256 CRC
@2809 GAP2:0x4E*22 SYNC:12 0xA1*3 AM DATA 0xFB PS: = 256 CRC
@3137 GAP3:0x4E*54 SYNC:12 0xA1*3 AM ID 0xFE TR: 0 SD:0 SEC: 9 SS:1= 256 CRC
@3181 GAP2:0x4E*22 SYNC:12 0xA1*3 AM DATA 0xFB PS: = 256 CRC
@3509 GAP3:0x4E*54 SYNC:12 0xA1*3 AM ID 0xFE TR: 0 SD:0 SEC:10 SS:1= 256 CRC
@3553 GAP2:0x4E*22 SYNC:12 0xA1*3 AM DATA 0xFB PS: = 256 CRC
@3881 GAP3:0x4E*54 SYNC:12 0xA1*3 AM ID 0xFE TR: 0 SD:0 SEC:11 SS:1= 256 CRC
@3925 GAP2:0x4E*22 SYNC:12 0xA1*3 AM DATA 0xFB PS: = 256 CRC
@4253 GAP3:0x4E*54 SYNC:12 0xA1*3 AM ID 0xFE TR: 0 SD:0 SEC:12 SS:1= 256 CRC
@4297 GAP2:0x4E*22 SYNC:12 0xA1*3 AM DATA 0xFB PS: = 256 CRC
@4625 GAP3:0x4E*54 SYNC:12 0xA1*3 AM ID 0xFE TR: 0 SD:0 SEC:13 SS:1= 256 CRC
@4669 GAP2:0x4E*22 SYNC:12 0xA1*3 AM DATA 0xFB PS: = 256 CRC
@4997 GAP3:0x4E*54 SYNC:12 0xA1*3 AM ID 0xFE TR: 0 SD:0 SEC:14 SS:1= 256 CRC
@5041 GAP2:0x4E*22 SYNC:12 0xA1*3 AM DATA 0xFB PS: = 256 CRC
@5369 GAP3:0x4E*54 SYNC:12 0xA1*3 AM ID 0xFE TR: 0 SD:0 SEC:15 SS:1= 256 CRC
@5413 GAP2:0x4E*22 SYNC:12 0xA1*3 AM DATA 0xFB PS: = 256 CRC
@5741 GAP3:0x4E*54 SYNC:12 0xA1*3 AM ID 0xFE TR: 0 SD:0 SEC:16 SS:1= 256 CRC
@5785 GAP2:0x4E*22 SYNC:12 0xA1*3 AM DATA 0xFB PS: = 256 CRC
@6196 GAP4:54
F4 C:1 RY:1 FM A:0 Write Track
@ 46 GAP1:0xFF*40 SYNC:06 AM INDEX 0xFC
@ 79 GAP3:0xFF*26 SYNC:06 AM ID 0xFE TR: 0 SD:0 SEC: 1 SS:1= 256 CRC
@ 103 GAP2:0xFF*11 SYNC:06 AM DATA 0xFB PS: = 256 CRC
@ 395 GAP3:0xFF*27 SYNC:06 AM ID 0xFE TR: 0 SD:0 SEC: 2 SS:1= 256 CRC
@ 419 GAP2:0xFF*11 SYNC:06 AM DATA 0xFB PS: = 256 CRC
@ 711 GAP3:0xFF*27 SYNC:06 AM ID 0xFE TR: 0 SD:0 SEC: 3 SS:1= 256 CRC
@ 735 GAP2:0xFF*11 SYNC:06 AM DATA 0xFB PS: = 256 CRC
@1027 GAP3:0xFF*27 SYNC:06 AM ID 0xFE TR: 0 SD:0 SEC: 4 SS:1= 256 CRC
@1051 GAP2:0xFF*11 SYNC:06 AM DATA 0xFB PS: = 256 CRC
@1343 GAP3:0xFF*27 SYNC:06 AM ID 0xFE TR: 0 SD:0 SEC: 5 SS:1= 256 CRC
@1367 GAP2:0xFF*11 SYNC:06 AM DATA 0xFB PS: = 256 CRC
@1659 GAP3:0xFF*27 SYNC:06 AM ID 0xFE TR: 0 SD:0 SEC: 6 SS:1= 256 CRC
@1683 GAP2:0xFF*11 SYNC:06 AM DATA 0xFB PS: = 256 CRC
@1975 GAP3:0xFF*27 SYNC:06 AM ID 0xFE TR: 0 SD:0 SEC: 7 SS:1= 256 CRC
@1999 GAP2:0xFF*11 SYNC:06 AM DATA 0xFB PS: = 256 CRC
@2291 GAP3:0xFF*27 SYNC:06 AM ID 0xFE TR: 0 SD:0 SEC: 8 SS:1= 256 CRC
@2315 GAP2:0xFF*11 SYNC:06 AM DATA 0xFB PS: = 256 CRC
@2607 GAP3:0xFF*27 SYNC:06 AM ID 0xFE TR: 0 SD:0 SEC: 9 SS:1= 256 CRC
@2631 GAP2:0xFF*11 SYNC:06 AM DATA 0xFB PS: = 256 CRC
@2890 GAP4:235
kapitan-u
29.06.2016, 02:37
Новая версия
http://unofficial.portaone.com/~kapitan/LvovPK02-MIPS.zip
- Добавлена поддержка NES gamepads на Aeon. Gamepad 0 работает как клавиатурный джойстик ( стрелки, пробел, косая стрелка)
Gamepad 1 работает как Q-Joystick (AKA Coman) на Внеш2
- default.cfg и default.dsk теперь берутся не в корневом каталоге, а в каталоге /LvovPK02 (это для бесконфликтности с другими аналогичными проектами на одной SD карте)
- софт лежит в /LvovPK02/core и прилагается новый config.ini
liberation
29.06.2016, 11:31
Пора уже для этого проекта отдельную страничку сделать.
sergey2b
15.11.2018, 02:48
Так как с написанием Корвета у меня небольшие проблемы
и я уже в течении нескольких недель не в состоянии найти
причины кое каких глюков, я решил состряпать чего нибудь
попроще и склепал Львов!
http://speccyland.net/index.php?option=com_kunena&func=view&catid=22&id=196&Itemid=21
Подскажите пожалуйста где можно сейчас загрузить исходники Львова для altera de1
ILoveSpeccy
16.03.2019, 19:30
https://github.com/ILoveSpeccy/Aeon-Lite/tree/master/cores
Freiwind
31.03.2020, 12:43
Сайт http://unofficial.portaone.com, похоже, приказал долго жить.
Где еще можно найти архив с готовой коркой?
kapitan-u
01.04.2020, 04:32
Где еще можно найти архив с готовой коркой?
https://drive.google.com/open?id=1UQ3ZR-ZzWAKJxaYUS-5z3m5XeS1o1v85
Теперь я вынесу MIPS в отдельный проект и добавлю туда полную поддержку клавиатуры + запуск нормальных ОС и будет хорошая платформа для разных проектов на Aeon
Как насчет "отдельного проекта" глобальный вопрос, и более узкий, может , при наличии свободного :) времени, прикрутите к одной корке ваш MIPS ?
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot