С рамдиском есть подвох: если на него много записать, то сохранения будут портиться. Что-то в духе "каталог рамдиска повстречается с содержимым рамдиска и начнут затирать друг друга". Он вроде растёт навстречу типа стека.
Не помню где читал про это, может в описании ошибок пзу128.
ZX-Evo Rev. C4 (Double-config) / VDAC2 / NeoGS / ZX-Multisound / NemoIDE / ZiFi
Scorpion ZS 256 Turbo+ (Light) / GMX / ZXM-GS / TSFM / SMUC / ZXKM / Gotek
Ну экран 6912 байт. 10-12 экранов влезет в рам диск
В ZX Like Pascal для этого имеются встроенные операторы WindowGet, WindowPut и WindowSet.
Но если надо на ассемблере, то вот они:
Код:; ===== _window_get_put ===== ; сохранение окна в памяти ; вход: нет ; выход: нет getimage ld de,addr_virt_screen ld hl,col_window ldi ldi ldi ldi ld hl,(col_window) ; l=col_window, h=row_window ld a,(height_window) ld b,a getimage_01 push bc push hl LD A,H ; расчет адреса первого байта знакоместа в HL RRCA RRCA RRCA AND A,224 ADD A,L LD L,A LD A,H AND 24 OR 64 LD H,A dup 8 push hl ld bc,(width_window) ld b,0 ldir pop hl inc h edup pop hl inc h pop bc djnz getimage_01 ; +++++ _flag_attr_window +++++ ld hl,(col_window) ; l=col_window, h=row_window ld a,(height_window) ld b,a getimage_02 push bc push hl LD A,H ; расчет адреса атрибутов знакоместа в BC RRCA RRCA RRCA LD C,A AND 31 OR 88 LD B,A LD A,C AND 252 OR L LD C,A ld h,b ld l,c ld bc,(width_window) ld b,0 ldir pop hl inc h pop bc djnz getimage_02 ; ----- _flag_attr_window ----- ret ; вывод окна из памяти ; вход: нет ; выход: нет putimage ld hl,addr_virt_screen+2 ld de,col_window+2 ldi ldi ld de,(col_window) ; e=col_window, d=row_window ld a,(height_window) ld b,a putimage_01 push bc push de LD A,D ; расчет адреса первого байта знакоместа в DE RRCA RRCA RRCA AND A,224 ADD A,E LD E,A LD A,D AND 24 OR 64 LD D,A dup 8 push de ld bc,(width_window) ld b,0 ldir pop de inc d edup pop de inc d pop bc djnz putimage_01 ; +++++ _flag_attr_window +++++ ld de,(col_window) ; e=col_window, d=row_window ld a,(height_window) ld b,a putimage_02 push bc push de LD A,D ; расчет адреса атрибутов знакоместа в BC RRCA RRCA RRCA LD C,A AND 31 OR 88 LD B,A LD A,C AND 252 OR E LD C,A ld d,b ld e,c ld bc,(width_window) ld b,0 ldir pop de inc d pop bc djnz putimage_02 ; ----- _flag_attr_window ----- ret addr_virt_screen equ 57344 ; адрес вирт.экрана col_window defb 0 ; столбец окна row_window defb 0 ; строка окна width_window defb 0 ; ширина окна height_window defb 0 ; высота окна
Пока что до кода не добрался. Пилю арты и музло. Где-то половина работы проделана в этом направлении.
А вот что касается кода... Ну вроде бы Барсовы процедурки устраивают, правда на деле ещё не гонял.
Но помимо этого мне бы процедурку заполнения экрана заданными тайлами 8*8 (например дизеринг, или диагональные полосочки), но не просто заполнение, а OR.
Понели как хочу? Типа шоб предыдущие слайды были на месте, но они как бы покрывались дизерингом, а поверх накладывался следующий слайд, как диалоги диззи.
Надо бы ещё окантовку какую-то. Типа Bright 0 падающую тень. Или, фиг знает, синий пэйпер. Шото такое. Как в дос-окнах.
Во, такое реализовать хочется в виде комикса.
https://youtu.be/NpNTAf1gAho?t=14
В смысле сам принцип отображения слайдов
- - - Updated - - -
музон уже готов. Осталось арты дорисовать... ну и запихнуть в прогу как-то.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Делай спрайтами тогда, а не экранами.
Всё ещё рисую арты. И всё меньше верую в то, что оно уместится в память, если не использовать хотя бы RLE-компрессию.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)