Итак, ТС конфа.
Начал разбор платформы соотечественника, сейчас в самом начале пути.
Хочу поделится мыслями. Дополнения крайне приветствуются.
Система программирования под ТС непривычна в первую очередь тем, что мы, неожиданно, к стандартному набору синклеровской обвязки имеем дополнительные акселераторы. Все акселераторы управляются программированием портов #xxAF, и в зависимости от полученных данных выполняют разные действия.
Итак, что можем?
Акселераторы предназначены для управления расширенной памятью, выводом графики, перебросом данных (dma), + имеем расширенную систему прерываний, которая может отрабатывать как стандартная (фреймовая, 50гц) и дополнительная строчная - можно вызывать прерывание каждую строку отображения.
Память имеет возможность отображаться во все доступные зоны по 16 к - с адресов 0, 4000, 8000 и с000. всего получаем 256 страниц по 16к.
для включения страницы в нужное место памяти - используем порты:
PAGE0 equ $10AF - страница расположена с адреса 0
PAGE1 equ $11AF - с #4000
PAGE2 equ $12AF - с #8000
PAGE3 equ $13AF - с #с000
Графика, кроме стандартного 256*192 имеет ещё несколько режимов, связанных с цветностью на точку. все цвета, включая цвет бордюра (бордюров имеем два - стандартный #fe и 256-цветный палитровый #0FAF), завязаны на палитру из 256 цветов. Стандартно используется дефолтная палитра, и для использования других цветов мы можем задать свои.
для этого нужно передать набор цветов железу (акселератору) путём указания на адрес данных самой палитры, для акселератора.
сразу после этого все цвета экрана будут отображаться из обновлённых данных палитры.
Вся графика экрана в дополнительных режимах отображается в памяти страниц как окно просмотра. тут стоит добавить, что "Видеопамять представляет собой битмап размеров 512x512 пикселей", соответственно для режима 320х200 у нас к каждой строке есть дополнительно неотображаемых 512-320=192 точки.
Плюс, мы можем указать, где конкретно в памяти находится наш экран - VPage
Акселератор позволяет управлять этим окном вывода. для этого стоит прописать в порты GXOffs и GYOffs положение окна в памяти - и оп, экран сместился.
Кроме этого "стандартного" экрана мы имеем ещё несколько плоскостей, предназначенных для вывода на экран. Здесь я ещё толком не разобрался, но вижу подобный подход - T0XOffs, T0YOffs - икс и игрек положения для нулевого тайлового экрана, и T1XOffs / T1YOffs для первого.
Кроме этого, акселератор позволяет выводить ещё и спрайты. тут я тоже ещё лох, но уже вижу, что спрайты могут иметь Х и Y на экране и иметь размер от 8 до 64 пикселей, выводятся аппаратно, могут быть перевёрнуты по Х или Y.
про дма ничего не скажу, лох ваще))
Итак, краткий вывод.
Все вот эти вещи работают только лишь управляя акселератором. изучая исходники Робата я обнаружил только лишь управление портами да куски обновления координат для окон вывода - как для всех экранов, так и спрайтов.
Довольно непривычно поначалу, но возможностей очень много, и процессор в момент отработки действий акселератора свободен.
Стоит использовать
Один момент. Тема техническая а не холиварная. Сразу прошу - различных сравнений не нужно. Нужны примеры кода / собственные мысли как это всё использовать.
Юзаем цветастую графику:
Продолжу примерами:
давайте переключим экран в графику 320х200, 256 цветов.
что происходит? теперь система знает, что экран начинается в 32й банке. и продолжается дальше - 33..36, и часть 37го банка памяти по 16к. Начало памяти - #c000, на строчку - 320 байтов, ещё 192 запаса.Код:VPAGE equ $01AF LD BC,VPAGE ; Указываем системе, что видеопамять начинается с #20 LD A,#20 ; Номер банки OUT (C),A
следующая строка - #c200
режим включён, на экране цветной бардак - в памяти хз чо)Код:VCONFIG equ $00AF LD BC,VCONFIG ; Включаем видеорежим: %10-320x240, %001-16 цветов %01 – 320x200 LD A,%01000010 OUT (C),A
что-бы получить все доступные цвета, их нужно указать системе:
В данном случае маппинг - это место в памяти, где лежит палитра. ZXPAL - это метка в коде типа include "pollitra.bin". Можно взять готовую палитру из твоей картинки.Код:LOAD_PAL LD A,%00010000 ; Включаем маппинг по адресу #0000 LD BC,FMADDR OUT (C),A LD HL,ZXPAL ; Перебрасываем данные LD DE,#0000 ld bc,#200 ldir XOR A ; Отключаем маппинг LD BC,FMADDR OUT (C),A RET
давай сконвертим картинку в формат tga и скормим конвертеру, и получим на выходе два файла - файло с точками, файло с уже подготовленной палитрой.
после выполнения кода весь экран резко окрашен в цвета палитры. Кроме бордюра
Красим бордюр в цвета палитры, в регистре а - номер цвета из палитры.
include со всеми equ для портов получаем здесьКод:BORDER equ $0FAF ld bc,BORDER ld a,128 out (c),a





Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
