User Tag List

Страница 46 из 54 ПерваяПервая ... 424344454647484950 ... ПоследняяПоследняя
Показано с 451 по 460 из 531

Тема: ZX Like Pascal

  1. #451

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Пиксел-позиционирования пока не будет, но подумываю. Т.к. мне писать игру Z, где возможно сделаю попиксельный скроллинг.
    Процедуры я обычно выискиваю здесь

    Цитата Сообщение от ALKO Посмотреть сообщение
    Т.е. в одном коде можно будет как одноцветные спрайты использовать, так и предварительно разукрашенные массивом в DEFB?
    Теперь в массиве DEFB вообще не будет атрибутов. Формат спрайтов всегда один и тот же будет, во всех программах. Цвет FLASH+BRIGHT+PAPER+INK задается только в операторах SpritePut, новый однобайтовый параметр. Правда, из-за этого спрайт может быть только одноцветным (один ink и один paper). Цвет спрайта можно менять в операторе SpritePut - это арифметическое выражение, можно подставлять переменные, константы, выражения. Раньше можно было только жестко задавать в DEFB.


    Цитата Сообщение от ALKO Посмотреть сообщение
    Как одноцветные спрайты будут взаимодействовать с уже имеющимся paper-ом фона? Будут затирать своим? Или ink свой, а paper берется из области размещения? Тут бы тоже флаг на выбор не помешал.
    Будут затирать своими атрибутами. Но это не печально, т.к. цвет можно рассчитывать в параметре SpritePut, обычное арифметическое выражение.
    А также, если не используются атрибуты в программе (выключен флаг атрибутов), то цвета спрайтов игнорируются.
    Последний раз редактировалось Andrew771; 18.05.2020 в 10:42.

  2. #451
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #452

    Регистрация
    25.09.2009
    Адрес
    Одесса
    Сообщений
    2,311
    Спасибо Благодарностей отдано 
    96
    Спасибо Благодарностей получено 
    186
    Поблагодарили
    89 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    . Правда, из-за этого спрайт может быть только одноцветным
    Карочь, решили свести универсальность среды на минимум.

    .А также, если не используются атрибуты в программе (выключен флаг атрибутов), то цвета спрайтов игнорируются.
    AGD стиль тоже ни к чему.
    Фишка с "цвет (ink) спрайта, пейпер фона" куда полезнее.
    Так как поверх одного и того же фона бегают спрайты разной окраски, зачастую.

  4. #453

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ALKO Посмотреть сообщение
    Карочь, решили свести универсальность среды на минимум.
    Да. Но тоже есть сомнения, нужно ли это. На днях сделал универсальность еще большую - оставил атрибуты в DEFB, как было, а также добавил задание цвета в SpritePut. Если в SpritePut задан 0, то цвет спрайта берется из DEFB (можно делать разноцветные знакоместа спрайта). Если не 0, то берется цвет из оператора. Но посчитал это сложным для программиста. Может всё-таки оставить?

    Еще я сократил количество флагов компиляции с 8 до 3 для упрощения:
    - атрибуты (вся программа либо цветная, либо монохромная. Раньше можно было отдельно задавать цветность для текста, окон, спрайтов и карт);
    - проверка краев спрайтов (оставил, как было. Но подумывал снести и жестко проверять всегда. Но ухудшилось бы быстродействие для программ, где проверка краев спрайтов не нужна);
    - виртуальный экран (теперь действует на всех сразу, а не по отдельности для текстов, спрайтов и карт).

  5. #454

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ALKO Посмотреть сообщение
    Фишка с "цвет (ink) спрайта, пейпер фона" куда полезнее.
    Так как поверх одного и того же фона бегают спрайты разной окраски, зачастую.
    А как восстанавливать изображение фона и цвет фона после прохождения спрайта? Для этого в Паскале имеются операторы WindowGet, WindowPut (запомнить окно экрана до вывода спрайта; вывести обратно окно после прохождения спрайта). Либо, если много движущихся спрайтов, использовать виртуальный экран с полной перестройкой изображения экрана.

  6. #455

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Свершилось! Наконец спустя более 5 лет после начала разработки я выпускаю официальную версию 1.0, можно скачать в первом посте.

    По сравнению с версией 0.909 изменения:

    - сокращение флагов компиляции с 8 до 3 для упрощения: флаг использования атрибутов, флаг отслеживания краев спрайтов, флаг вывода на виртуальный экран;
    - цвет спрайта задается теперь только в операторах вывода спрайта новым параметром, формат кодов спрайтов теперь един и для монохромных, и для цветных спрайтов;
    - компиляция пользовательского кода в PRG после последнего "end" программы на Паскале в самом конце файла ASM.

    Исправлены обнаруженные баги:

    - сложение с константой;
    - вывод констант на экран;
    - вывод ячейки строкового массива;
    - 8-я пиксельная строка зеркальных спрайтов.

    Эти 2 пользователя(ей) поблагодарили Andrew771 за это полезное сообщение:

    Azm(23.05.2020), nzeemin(21.05.2020)

  7. #456

    Регистрация
    25.09.2009
    Адрес
    Одесса
    Сообщений
    2,311
    Спасибо Благодарностей отдано 
    96
    Спасибо Благодарностей получено 
    186
    Поблагодарили
    89 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Что тут поменять, чтоб оно выплёскивало не в 16384, а в виртуальный экран?

    Проверка границ не помешала бы

    Код:
    PUTIMAGE1	
    
    		ld	de,(_WINX)			; e=col_win, d=row_window
    		ld	a,(_WINH)
    		ld	b,a
    
    putimage_011	push	bc
    
    		push	de
    
                    LD      A,D				
                    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,(_WINW)
    		ld	b,0
    		ldir
    		pop	de
    		inc	d
    		edup
    
    		pop	de
    		inc	d
    		pop	bc
    		djnz	putimage_011
    
    ; +++++ _flag_attr_window +++++
    
    		ld	de,(_WINX)			; e=col_win, d=row_window
    		ld	a,(_WINH)
    		ld	b,a
    
    putimage_021	push	bc
    		push	de
    
                    LD	A,D				
                    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,(_WINH)
    		ld	b,0
    		ldir
    
    		pop	de
    
    		inc	d
    
    		pop	bc
    		djnz	putimage_021
    
    
    		ret

  8. #457

    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,295
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    203
    Спасибо Благодарностей получено 
    1,460
    Поблагодарили
    949 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    вроде OR 64/ OR 88 , pixel/attr

    Этот пользователь поблагодарил goodboy за это полезное сообщение:

    ALKO(24.05.2020)

  9. #458

    Регистрация
    25.09.2009
    Адрес
    Одесса
    Сообщений
    2,311
    Спасибо Благодарностей отдано 
    96
    Спасибо Благодарностей получено 
    186
    Поблагодарили
    89 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ещё по схожему принципу пытаюсь копировать заданную область виртуалки на экран
    Но в итоге получаю мусор

    По дефолту лайк паскаль переносит фулл-скрин.

    а мне надо бы с отступом 5 знакомест сверху, и 6 знакомест снизу.

    Код:
    
    
       row_win equ  5
     col_win equ  0
     height_win equ  12
    width_win equ 31
    
    
    
    PIMAGE  ld      hl,addr_virt_screen+2
                    ld      de,col_win+2
                    ldi
                    ldi
    
                    ld      d,(col_win)
                    ld      e, (row_win)                  ; e=col_win, d=row_window
                    ld      a,(height_win)
                    ld      b,a
    
    pimage_01       push    bc
                    push    de
    
                    LD      A,D                             
                    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_win)
                    ld      b,0
                    ldir
                    pop     de
                    inc     d
                    edup
    
                    pop     de
    
                    inc     d
    
                    pop     bc
                    djnz    pimage_01
    
    ; +++++ _flag_attr_window +++++
    
                    ld      de,(col_win)                    ; e=col_win, d=row_window
                    ld      a,(height_win)
                    ld      b,a
    
    pimage_02       push    bc
                    push    de
    
                    LD      A,D                             
                    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_win)
                    ld      b,0
                    ldir
    
                    pop     de
    
                    inc     d
    
                    pop     bc
                    djnz    pimage_02
    
    
    
                    ret
    Последний раз редактировалось ALKO; 24.05.2020 в 14:55.

  10. #459

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Процедуры сохранения окна в виртуальном экране и вывода окна из виртуального экрана на экран ниже.
    Перед вызовом задать параметры: col_window (столбец окна), row_window (строка окна), width_window (ширина окна), height_window (высота окна).
    Если же это нужно в программе на ZX Like Pascal, то эти процедуры вызывать операторами WindowSet (установка параметров), WindowGet (вывод окна в память), WindowPut (вывод окна из памяти на экран), свои писать не надо.

    Код:
    
    virt_screen_high	equ	160				; старший байт смещения вирт.экрана
    addr_virt_screen	equ	57344				; адрес вирт.экрана
    col_window			defb	0					; столбец окна
    row_window			defb	0					; строка окна
    width_window			defb	0					; ширина окна
    height_window			defb	0					; высота окна
    
    
    ; сохранение окна в памяти
    ; вход: нет
    ; выход: нет
    
    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
    - - - Добавлено - - -

    ALKO, тебе что конкретно надо? Из целого виртуального экрана вырезать область и вывести на экран?
    Последний раз редактировалось Andrew771; 24.05.2020 в 15:24.

  11. #460

    Регистрация
    25.09.2009
    Адрес
    Одесса
    Сообщений
    2,311
    Спасибо Благодарностей отдано 
    96
    Спасибо Благодарностей получено 
    186
    Поблагодарили
    89 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от goodboy Посмотреть сообщение
    вроде OR 64/ OR 88 , pixel/attr
    да, оно. Только без проверки границ по краям возникают артефакты при перемещении, и заодно таблицу зеркальных спрайтов кромсает.

    - - - Добавлено - - -

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    тебе что конкретно надо? Из целого виртуального экрана вырезать область и вывести на экран?
    Именно.
    При условии если будет выигрыш в тактах.
    Просто в фуллскрине монолитный цикл, а при разбивке на области если будет ущерб производительности, то лучше тогда не надо...

    - - - Добавлено - - -

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    WindowGet (вывод окна в память), WindowPut (вывод окна из памяти на экран), свои писать не надо.
    WindowGet копирует адрес #4000 в виртуалку, а у меня же напротив, всё сразу в виртуалке рендерится, а оттуда уже готовое надо выплёскивать.

Страница 46 из 54 ПерваяПервая ... 424344454647484950 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. PASCAL + MACRO11 (УКНЦ-ДВК).
    от hobot в разделе ДВК, УКНЦ
    Ответов: 341
    Последнее: 15.01.2022, 17:30
  2. Turbo Pascal для msx/msx2
    от Оззя в разделе MSX
    Ответов: 4
    Последнее: 23.02.2020, 23:59
  3. в розыске дисковая версия Pascal.
    от goblinish в разделе Программирование
    Ответов: 18
    Последнее: 16.08.2011, 16:30
  4. Pascal
    от Andrew771 в разделе Программирование
    Ответов: 22
    Последнее: 24.05.2011, 21:20
  5. Скопировать/вставить из/в HiSoft Pascal в эмуляторе
    от kit в разделе Программирование
    Ответов: 1
    Последнее: 05.02.2010, 15:35

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •