ZX Enhanced compo 2016

ZX Enhanced party
Итак, обьявляем виртуальный конкурс нестандартных подходов и неожиданных решений!

К участию в конкурсе допускаются новые работы для любых, обратно совместимых с ZX Spectrum компьютеров, которые оборудованы различными расширениями: графическими режимами, отличными от “6912”, память выше 128 Кб, частота от 7 МГц и выше, прочее.
Участвуют платформы, включая, но не ограничиваясь: TS-Config, ATM 1/2/3, Profi, SamCoupe, v6z80p.

“Обычные” клоны, использующие штатные возможности GS/NGS, TSFM, Z-Controller и т.д. за Enhanced не считаются.

Конкурс будет проведён в субботу, 13 февраля 2016 года. Приём работ — до 11 февраля, 23:00.
Голосование будет проведено на сайте events.retroscene.org.

Призы:
Три первых места в каждом компо получат дипломы конкурса.
За первое место в каждом компо — дополнительно плакат компо с Вашим ником, формат плаката А0.

Итак, основные компо у нас такие: Графика, Музыка, Демо и Wild HDL.

Читать дальше →

Threads on Z80

Привет, друзья.

Хочу поделиться с вами своими наработками. Сперва хочу извиниться за то, что постоянно буду использовать свой ассемблер ASAM. Увы, он работает только под 32-бита, у этого есть ряд причин, но почему это так, — не сейчас.

Теперь о сегодняшней теме, о параллельных потоках. Начиная с 2003 года я постоянно использую два типа потоков на Speccy: первый, мой любимый — это сквозные функции; и второй, о котором пойдёт речь — это классические потоки. Я приведу пример самых простых потоков, и если вам это нужно — вы легко сможете доработать его до своих нужд.

Thread'ы очень просты. Всё сводиться к двум основным процедурам — это создание и переключение потоков. Текущий вариант потоков эволюционировал из простых переключений между блоками памяти в переключение между страницами, что очень удобно для decrunch'ингов чего-нибудь, или для распаковок данных. Хочу отметить, что впервые оправданное использование потоков я ощутил при coding'е под ts-conf'у.

Читать дальше →

TSconf: Ports

В данном разделе я хотел бы описать все группы портов, которые задействованы в управлении системой TSconf.
Данный раздел описывает общее назначение портов. Полная дока по портам лежит здесь.

Итак, порты системы можно разделить на следующие группы:
  • порты управления выполнения кода процессором. Сюда отнесём такие порты как: SysConfig, CacheConfig
  • порты управления памятью: MemConfig, Page0 — Page3, FMAddr
  • порты страниц графики TSU: VPage, T0GPage, T1GPage,TMPage, SGPage
  • порты управления графическими режимами / цветом: VConfig, PalSel, Border
  • порты управления отображением: TSConfig, GXOffs/GYOffs, T0XOffs/T0YOffs, T1XOffs/T1YOffs
  • порты управления DMA: DMASAddr, DMADAddr, DMALen, DMANum, DMACtrl
  • порты управления приходом INT: INTMask, HSINT, VSINT
  • порт управления виртуальным FDD: FDDVirt

Читать дальше →

За кунфу

Как-то так случилось, что я составлял ответ на форуме, но выросла целая портянка.

… ну, в общем, раздел Development с разбором TSconf растёт.
Понятно что по данным вещам особо не по флудишь, с другой стороны — очень малый фидбек, как для меня — автора.
Я понимаю, что тут нужно думать, и чаще проще спросить что-то конкретное в чате, но! Хотелось-бы вопросов, разборов тем. И думаю, это будет интересно всем.
Так как я знаю, какие вещи в тех мануалах слабо освещены, либо были поданы упрощённо.

А ведь я только учусь :)

В общем, по моему мнению, ситуация сейчас такова:

Читать дальше →

TSconf: INTs


TSconf имеет расширенную систему прерываний, которые могут быть вызваны при наличии таких состояний как: приход луча в заданную позицию экрана, приход луча в начало строки отображение линии на экране, завершение передачи данных.

Дао говорит: Система имеет три типа маскируемого прерывания, которые могут быть вызваны по адресу, который имеет старшим байтом — адрес в регистре I, а младшим — свой тип:
  1. #FF — кадровый (Frame)
  2. #FD — строчный (Line)
  3. #FB — DMA.
Обработку этих прерываний можно переключать портом INTMask (#2Aaf), изменяя состояние битов:
0 — Frame, 1 — Line, 2 — DMA, что приводит к on/off вызову обработчиков. Состояние битов: 0 — запрещен / 1 — разрешен.
В случае прихода нескольких событий одновременно, сначала обработается прерывание с меньшим номером.

Читать дальше →

TSconf: Gfx layer

Спрайты, тайлы… Возможно, этого нам и хватило-бы…
Но под этими слоями находится базовый слой графики.

Дао говорит: Слой графики отображает данные, которые находятся в страницах памяти. Первая страница для отображения (её адрес обязательно кратен 8 для 16цветов, 16 — для 256 цветного режима, общая длина — 8/16 страниц) указана портом VPage (#01af). Способ отображения данной памяти задаётся битами порта VConfig, который задаёт разрешение и цветовую глубину.
Окно отображения памяти представляет собою блок размерами заданного разрешения и отображается по позициям X (0-511) и Y (0-511), которые указаны парами портов GXOffs и GYOffs. Окно зациклено по краям в отображении.
Цвета отображения заданы палитрой, номер выбирается первой тетрадой регистра PalSel (#06af).

Итак, у нас есть экран со своим внутренним скроллом.

Читать дальше →

TSconf: Memory

Рассмотрим расположение памяти в системе.

ZX Evolution имеет 4Мб памяти.
Организация этой памяти подобна zx spectrum 128 — используется страничная организация.
В переложении на страницы памяти, мы имеем 256 страниц по 16 кб каждая.

Читать дальше →

TSconf: DMA

Учитывая такой большой размер памяти, необходимо средство быстрой передачи данных.
TSconf предлагает нам такое средство, позволяющее переносить данные в памяти без участия процессора.

Дао говорит: Скорость пересылки составляет 7 Мгц, копирование происходит по два байта (16 бит) при условии что в этот такт к памяти нет обращения от ЦПУ, видео или ТСУ.
В среднем: 4 байта — 2 такта, дма обращается к озу за 1 такт 7 мгц, 16 бит, для пересылки надо 2 обращения
Получаем: скорость DMA 7 МБ/с
DMA может копировать данные из следующих источников:

Читать дальше →

TSconf: Tiles

Да, Мультиматограф близок, нужно поднажать!
Итак, тайлы.


Для построения тайлов нам необходимо сделать следующее:
— подготовить графику (разместить её в странице для графики тайлов)
— построить карту тайлов (с размещением в странице карты)
— запрограммировать порты (указать, какие страницы используются для графики, для карты, и включить отображение нужных слоёв)

Читать дальше →