denpopov, я не ставлю задачу расписать всё.
это вводный курс, как я его понимаю.
где пример говорит "другое"?
если есть обьяснение, как пользовать тайлы - welcome
http://zx-evo-fpga.googlecode.com/hg...les/example01/
вот смотри сколько тумана:
из примера куда понятнее.VCONFIG equ $00AF
LD BC,VCONFIG ; Включаем видеорежим: %10-320x240, %001-16 цветов %01 – 320x200
LD A,%01000010
OUT (C),A
bad try
Я для эмуляции много почерпнул отсюда - http://zx-evo-fpga.googlecode.com/hg...onf/TSconf.xls
Все любят гипножабу
Buyan, я прокомментирую, поправишь:
Код:start di ld sp,49151 call init_gfx ;устанавливаем режимы call init_zx_pal ;грузим палитру call gfx_copy ;грузим графику для 0-го тайлового слоя call fill_tiles ;заполняем карту тайлов stop jp stopХорошо комментированный текст Смотрим екселевский файл, видим, что в TSConfig ложим %00100100, -Код:include dev\ts-ports.asm ; названия портов лежат здесь, в первом посте есть ссылка на подобный файл init_gfx ld bc,VConfig ; 320x240 ld a,%10100001 out (c),a ld bc,TSConfig ; 0й тайловый вкл., отображение тайлов с номером 0 - вкл. ld a,%00100100 out (c),a ld bc,PalSel ld a,%00000000 out (c),a ld bc,T0YOffsL ; смещения для 0-го тайлового слоя ставим по 0 out (c),a ld bc,T0YOffsH out (c),a ld bc,T0XOffsL out (c),a ld bc,T0XOffsH out (c),a ld bc,T0GPage ; графика 0-го тайлового слоя ld a,128 out (c),a ld bc,TMPage ; страница карты тайлов ld a,128+8 out (c),a ret
Скрытый текст
T0_EN Tile Layer 0 Enable
T0Z_EN Tiles with number 0 display Enable
[свернуть]
0й тайловый вкл., отображение тайлов с номером 0 - вкл.
PalSel - Palette selection for 4 bit modes. выбор палитры в 0, в инициализации палитры ( init_zx_pal ) видим, что она начинается с адреса 0. палитра загружается стандартная спековская из файла.
для тайлов мы имеем 16 цветов онли. тут бы хотелось немного болше информации, по выбору палитры.
Дальше - указывается адрес отображения окна просмотра - х=0, y=0, выбирается страница с графикой тайлового слоя и выбирается страница карты тайлов, всё видно в комментариях.
пример знакомКод:;------------------------------------------------------------ init_zx_pal ld a,%00010000 ld bc,FMAddr out (c),a ld hl,zx_palette ld de,0 ld bc,32 ldir xor a ld bc,FMAddr out (c),a ret zx_palette include "dev\zx_palette.asm"
дальше интереснее. DMA
используется для переброски загруженной картинки в нужные страницы в нужном формате:
DMASххх - dma источник
DMADххх - dma приёмник
DMASAddrX - страница источника
DMASAddr - адрес откуда
DMALen - DMA Burst Length
Длина 1 бурста в словах минус 1. Т.е. 0 - 2 байта, 255 - 512 байт.
в данном случае - 160/2-1 - строками по 160 байт (320 точек 16С)
DMANum - колво строк
DMACtrl - %00010001. DMA Control / Start
включен бит D_ALGN, Destination Address Alignment.
"After each burst lower bits of address restored to their initial values before burst, upper bits increased by 1"
- выравнивание по 256b, т.е. каждая следующая строка будет загружена по адресу + 256
включенный бит 0 значит, что пишем из озу в озу: RAM (Src) is copied to RAM (Dst)
читаем статус (DMAStatus), пока операция не закончится.
дальше самое интересное.Код:;------------------------------------------------ gfx_copy ld bc,DMASAddrX ld a,100 ; из spg графика загружена начиная с 100-й страницы out (c),a ld hl,0 ld bc,DMASAddrH out (c),h ld bc,DMASAddrL out (c),l ld bc,DMADAddrX ld a,128 ; перекидываем в 128 ( T0GPage ) out (c),a ld hl,0 ld bc,DMADAddrH out (c),h ld bc,DMADAddrL out (c),l ld bc,DMALen ld a,160/2-1 ; строками по 160 байт (320 точек 16С) out (c),a ld bc,DMANum ld a,240-1 ; 240 строк out (c),a ld bc,DMACtrl ld a,%00010001 ; с выравниванием по 256b, т.е. каждая следующая строка out (c),a ; будет загружена по адресу + 256 ld bc,DMAStatus nm1cl in a,(c) or a jr nz,nm1cl ret
тайловая карта задаётся двумя байтами на каждый тайл. первый байт - номер, второй байт: 4 младших бита - номер тайла, а так-же выбор палитры и возможность переворота тайла:
Скрытый текст
TNUM Tile Number for upper left corner. Bits 0-5 are X Position in Graphics Bitmap, bits 6-11 - Y Position.
XF Horizontal Flip
YF Vertical Flip
TPAL Tile Palette Selector, bits 0-1. Bits 2-3 are taken from PalSel register bits 6-7 or 4-5, dependently on tiles layer 1 or 0.
[свернуть]
Тайловая карта генерится слева-направо, сверху-вниз. всего можем иметь 64*64
Скрытый текст
tpos_x tile X position on the plane 0-63
tpos_y tile Y position on the plane 0-63
[свернуть]
размер тайла имеем 8*8 точек. других размеров быть не может, так?
Тайловых карт всего две, и они находятся в одной странице вперемешку. тайлы0 - от 0до 127, тайлы1 - от 128-155
Сразу после вызова последнего сall видим девушку на экране.Код:fill_tiles ld bc,Page3 ; включаем страницу тайлмапа с #C000 ld a,128+8 out (c),a ld ix,#c000 ; адрес 0-го тайла 0-го слоя ( для слоя 1 соответственно #C000+128 ) ld de,64 ld hl,0 ; начальный номер тайла ld b,30 ; тайлов по вертикали (240/8) fill_y push bc push ix push hl ld b,40 ; тайлов по горизонтали (320/8) fill_x ld (ix+0),l ld a,h and %00001111 ; биты номера палитры тайла и инверсий XY по 0-м т.е палитра №0 и зеркалирование тайла выкл. ld h,a ld (ix+1),h inc hl ; номер следующего тайла inc ix ; адрес следующего тайла (+2 т.к описатель тайла 2 байта) inc ix djnz fill_x pop hl add hl,de ; первый тайл следующей строки ( номер + 64 т.к. слой 64х64 тайла ) pop ix inc ixh ; адрес следующей строки слоя в тайлмапе ( + 256 ) pop bc djnz fill_y ret
нулевой цвет для тайлов должен обозначать прозрачность: 4 bits per pixel, transparent color is 0 from 16 (4'b0)
Последний раз редактировалось Hacker VBI; 04.05.2014 в 13:50.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Buyan, и я пропустил, хоть в описании битов всё нашёл правильно)
поправил
В описателе тайла за выбор палитры отвечают только 2 бита TPAL (биты 1,0), биты (3,2) прописываются в регистре PalSel для каждого из слоев, эти биты в сумме и задают конечный 4х битный номер палитры конкретного тайла. Т.е. получается что в пределах одного тайлового слоя для каждого тайла можно использовать 1 из 4х смежных палитр.
ZXM-Phoenix 1024 Rev.02+ProfROMUni+SMUC2b ZX-Evolution Rev.C ZX Spectrum +2A Yamaha YIS503IIIR Atari 65XE
Народ, интересно?
На очереди разбор MindWarp - офигезный эффект палитры)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)