Русский
Русский
English
Статистика
Реклама

Z80

8 оттенков серого, или ZX Spectrum48 за 3

17.10.2020 04:07:11 | Автор: admin

Прочитав статью Передача аналогового тв сигнала с помощью STM32 решил попробовать нарисовать телевизионный сигнал на дешевой китайской плате stm32f401ccu6 за $2.5 без дополнительного железа.

<cut text="Когда-то давным-давно" />

Когда-то давным -давно году так 1988 досталась мне собранная плата ZX spectrum 48 ,без корпуса и клавиатуры. Клавиатуру собрал на герконовых кнопках, а вот телевизор был только черно-белый. И тут прочитав вышеупомянутую статью, решил , а не собрать ли мне черно-белый спекки. Починил подобранный когда то на помойке ч/б телевизор с экраном ЭЛТ в 5 дюймов и почитав спецификации на PAL/NTSC, взял китайскую платку stm32f401ccu6 с 64КB RAM ,256 Flash 84MHz 32bit processor.

Генерация видео-сигнала:

Specci нужно 256 пикселей по горизонтали. Добавим по 8 на рамку. Добавим обратный ход луча и синхро импульс получим около 400 точек на линию 64 мсек. Если берем первый таймер (TIM1) с частотой 84MHz то получим 13 отсчетов ШИМ на точку, то есть от нуля до двенадцати. Возьмем уровень черного 3, уровень белого 10 , а уровень синхроимпульса 1. И запускаем Circular double buffer DMA с высоким приоритетом и отрисовкой в прерывании.Четные и нечетные линии дублируются , то есть у нас реально есть 50 герц обновления экрана (выбран PAL). Скорость эмуляции спектрума задается другим таймером (TIM4), выводящим звук.

Что не получилось:

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

Реализация Спектрума 128. На платке есть место для флеша, так туда подходит и даже работает сериальный PSRAM (PSRAM64H 3.3V SOP8 64Mbit),но только в режиме 1Bit SPI из-за разводки на плате. Примерно вдвое медленней чем нужно для эмуляции.

Телевизор подключен напрямую, но это нарушение спецификации уровня сигнала (3.3 вместо 1 вольта). По хорошему нужен делитель и ФНЧ.

Видео получилось не очень, картинка реально лучше, но с тв сложно снимать:

Исходный код

Подробнее..

Zx spectrum128, CPM 2.2 и терминал на STM32F407

28.10.2020 02:10:35 | Автор: admin
Нарисовавши черно-белый Spectrum48 за $3 на телевизоре и получив вопросы как: а почему не цветной, а почему без музыки, а где НЕИГРУШКИ решил поправить и опубликовать менее бюджетную версию, Spectrum128+СP/M, примерно на $25 железа.


Мне могут возразить это уже дорого, можно купить Raspberry или другой Linux board на эти деньги, однако реализация на STM32 имеет несколько выигрышных черт, таких как:
1 Время готовности при включении меньше пары секунд.
2 Лаг на клавиатуру меньше одного фрейма (20 миллисекунд, примерно как на настоящем, железном спектруме)
3 Эмулятор на STM мне нравится больше, так как у эмуляторов на Linux, а также и других эмуляторов есть фатальный недостаток их писал не я.
4. Можно питаться от батареек.

Подробнее о реализации
Подсистема звука:
2 ШИМ канала 16 bit, на частоте 44100, работают постоянно и вытягивают из Fifo звук. С другой стороны в Fifo пишет текущий процесс. Это или ZX spectrum (Z80 эмулятор), или MP3 player decoder. Если нет места для звука, то процесс ждет сканируя клавиатуру. Z80, в свою очередь, отрабатывает один кадр и пишет эвенты связанные со звуком в очередь событий звука такие как speaker ON-OFF и AY 8910.С каждым эвентом идет и счетчик клоков Z80. По окончании кадра в 20 миллисекунд симуляции (4-8 миллисекунд stm32 ), рендерится кадр на экран(только изменения) и события звука из очереди рендерятся соотвественно в Fifo звука. Если он забит значит мы торопимся, и нужно подождать. Таким образом осуществляется синхронизация времени между симулируемой и симулирующей системами. При чтении ТAP файлов (виртуального магнитофона ), звук рендерится плотнее, с более коротким шагом, в 3-5 раз, и виртуальное время течет быстрее, соотвественно загрузка скорее чем с физического магнитофона. Впрочем можно ускорение отключить, с клавиатуры (F11-F12).
ШИМ, а не DAC, для звука выбран специально. Он позволяет уменьшить помехи от питания и вынести усилитель класса D наружу и организовать регулировку громкости питающим ключи напряжением. Даже простейший, на паре транзисторов, дает более качественный звук, чем просто усиление сигнала с шумного DACa (плата STM покупная, китайская, готовая. С ошибками.)
Чип AY-3-8910 не то что бы сильно сложный, но документация на него скорее предназначена для пользователей и интеграторов, а не для эмуляции/симуляции. О многом приходилось скорее догадываться и смотреть по коду разных эмуляторов, чем просто сесть и написать по документации. Возможно, что где-то и не угадал И фокус написать его нетребовательным к СPU ресурсам. Вроде получилось.

Подсистема видео:
Изменения цвета бордера (если они были) записывается в специальную очередь с клоками процессора. Это будет видно при загрузке с магн. Ну и некоторые игры обновляют его на ходу, для спецэффектов.
После этого, когда z80 отработал свои такты на 20 миллисекунд кадр рендерится.
То есть трюки с изменением кадра на ходу в демках работать будут не все. Но с играми проблем не замечено.
Контроллер обычный, параллельный 16bit FSMC <-> ILI9341 c SPI тачем ( работает, но не нигде не используется).

z80:
Это эмуляция CMOS версии Z80. Салат из разных мест, но большей частью из FUSE и немного моего творчества тоже (в основном на обьем и скорость). Тест zexall проходит.

Клавиатура:
USB host HID device контроллер от STM. C USB роутерами работать не будет. Все претензии к ST, они поленились и я тоже. Конкретно на том боарде, что я использую нужно удалить резистор R21 1.5K: 3.3v<->USB D+.

Disk:
Примерно так отформатирован у меня, но думаю, что не все критично:
Partition 1 type Start 2048: W95 FAT32 (b)
Attributes: 80
Filesystem UUID: xxxx-xxxx
Filesystem: vfat

Корневые директории(для этого кода именно так):
ZX48
сюда класть программы для spectrum48.Форматы: .TAP,.Z80,.SNA
ZX128
сюда класть программы для spectrum128.Форматы: .TAP,.Z80,.SNA
MP3
попробуйте угадать? И форматы?

Видео тест Спектрума:
www.youtube.com/watch?v=WKQc5I55Ji8
Бонус. Реализован слой согласования с CP/M 2.2 от Grant Searle's.
www.searle.wales

Мужик сделал отличную работу по реализации CP/M на Z80 (отдельно) и FPGA (другая система)
Там и BIOS и образ диска с дофига программ, утилит и компиляторов:
Си, Лисп, Ада, Паскаль,Cobol, Алгол,Forth,APL,Fortran,PL/I,Basic всякий, muMath & muSimp (CAS math package), игры, редакторы всего 240 мега. Это сегодня пару страниц текста, а тогда, во времена CP/M столько не было ни у кого.
Подробнее здесь:
obsolescence.wixsite.com/obsolescence/multicomp-fpga-cpm-demo-disk


Ну и видео тест CP/M:
www.youtube.com/watch?v=-h3XCy79aJw

Я немного добавил к эмулятору z80 на STM32 слой обращения к диску и терминал экрана: клавиатуры, микс ANSI и VT100. Надо будет допроверить и доделать. В основном работает, CATCHUM и Turbo Pascal исправны. Запускается CP/M когда видит диск отсюда, по первым двум байтам образа:
obsolescence.wixsite.com/obsolescence/multicomp-fpga-cpm-demo-disk
Если диска вообще нет, то запускается в режиме Spectrum 128 в меню.
Что не сделано:
1. Чтение и запись с физического магнитофона, магнитофон купил, жду пустые кассеты с Али.
2. Вообще любая запись в спектруме не написана.(В CP/M есть запись)
2.".TGZ" формат?

Что еще:
Хм. Положил перед собой железо, выбираю:

Слева направо, сверху вниз:
Stm32h743, программер на stm32f103, Xilinx XC6SLX16, на ней программер для альтеры, Altera ep2c5 & PSRAM 8M, Zynq7010(на али распродажи по $15!!! ) ,W600-pico (60MHz m3+280 ram $2) ,ESP32-CAM with PSRAM 8M (очень дешевая но мало свободных ножек).
Нижний ряд: Еще Xilinx XC6SLX16,Xilinx XC6SLX9, ANLOGIC (22k lut+SDRAM), ALTERA EP4CE15F23C8, еще W600 за $1- но мало ножек.
Справа от клавиатуры белый магнитофон для демонстрации загрузок компьютеров внукам.
Нет ничего дороже $30 Особенно интересно для тех, кто хочет учить Zynq7010 это FPGA 28 K LUT + 2 ARM cores ~600MHz + flash 128MB + ddr 256MB +ETH100. Видимо распродают контрольные платы от битмайнеров. Удивился и купил.
Эмулятор z80 прогонял на них на всех, кроме программера для альтеры и магнитофона. На некоторых и эмулятор 80286-го прогнал.

для тех кто хочет повторить
Искать:
STM32F407VET6 Development Board Cortex-M4 STM32 minimum system learning board ARM core board +3.2 inch LCD TFT With Touch Screen. Проверял только с 3.2 экраном, чип ILI9341.
source:
github.com/sdima1357/spectrum128_cpm
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru