Важная информация

User Tag List

Страница 14 из 14 ПерваяПервая ... 1011121314
Показано с 131 по 139 из 139

Тема: Портирование игр с PC на БК

  1. #131
    Member Аватар для Manwe
    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    181
    Благодарностей: 63
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    blackmirror, пытаюсь осмыслить как применить эту хитрую таблицу на практике.

    Возьмём какой-нибудь байт из исходного спрайта, например такие 4 точки:
    ◼︎◼︎◼︎◼︎

    В таблице ему должно соответствовать несколько слов:
    ◼︎◼︎◼︎◼︎◻︎◻︎◻︎◻︎
    ◻︎◼︎◼︎◼︎◼︎◻︎◻︎◻︎
    ◻︎◻︎◼︎◼︎◼︎◼︎◻︎◻︎
    ◻︎◻︎◻︎◼︎◼︎◼︎◼︎◻︎

    Значком ◻︎ я обозначил точки произвольного цвета, конкретные значения нас не интересуют.
    В исходном спрайте рассматриваемые 4 точки должны храниться не в виде цветов (11001001), а в виде порядкового номера в таблице.

    Чтобы нарисовать наши 4 точки, мы достаём число из данных спрайта, умножаем его на 2 (потому что таблица состоит из слов, а не из байтов), берём значение из этой таблицы, сделав отступ в таблице, если надо. И ещё применяем маску.
    Код:
    MOVB (R1)+,R2    ; взяли данные из спрайта
    BIC #177400,R2   ; сбросили старшие биты, можно маску сброса хранить в каком-нибудь регистре
    ASL R2           ; умножили на два, получили индекс в таблице
    Дальше если надо вывести точки без сдвига, делаем так:
    Код:
    MOV TABL(R2),R2   ; забрали 8 точек из таблицы
    BIC #377,R2       ; сбросили ненужные 4 точки, маску опять же можно хранить в регистре
    BIS R2,(R3)       ; вывели оставшиеся 4 точки на экран
    Если надо вывести точки со сдвигом на одну, делаем так:
    Код:
    MOV TABL+2(R2),R2   ; забрали 8 точек из таблицы
    BIC #140077,R2      ; сбросили ненужные 4 точки по маске
    BIS R2,(R3)         ; вывели оставшиеся 4 точки на экран
    Сдвиг на две точки:
    Код:
    MOV TABL+4(R2),R2   ; забрали 8 точек из таблицы
    BIC #170017,R2      ; сбросили ненужные 4 точки по маске
    BIS R2,(R3)         ; вывели оставшиеся 4 точки на экран
    Сдвиг на три точки:
    Код:
    MOV TABL+6(R2),R2   ; забрали 8 точек из таблицы
    BIC #176003,R2      ; сбросили ненужные 4 точки по маске
    BIS R2,(R3)         ; вывели оставшиеся 4 точки на экран
    Довольно изящно. Да ещё и организация таблицы умная: точки ◻︎ - не абы что, а цвета для других входных данных.
    Но изящно оно пока мы выводим изображение в чётные адреса экрана.
    Как только надо вывести 4 точки по нечётному адресу, появляются костыли:
    Код:
    MOVB (R1)+,R2       ; взяли данные из спрайта
    BIC #177400,R2      ; сбросили старшие биты
    ASL R2              ; умножили на два, получили индекс в таблице
    MOV TABL+6(R2),R2   ; забрали 8 точек из таблицы
    BIC #176003,R2      ; сбросили ненужные 4 точки по маске
    BISB R2,(R3)+       ; вывели часть точек на экран
    SWAB R2             ; переключились на оставшиеся точки
    BISB R2,(R3)        ; вывели оставшуюся часть точек на экран
    А это уже довольно долго.


    P.S. На самом деле порядок точек на экране слева направо соответствует порядку битов справа налево, но это детали. Просто изображённые мной цветные квадратике будут выводиться на экран БК в обратном порядке.
    Последний раз редактировалось Manwe; 13.10.2018 в 11:13.
    Manwe/SandS

  2. #132
    Member
    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    113
    Благодарностей: 51
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Manwe, это в примере она по 4 точки, в реальности нужна таблица из 256 слов плюс небольшой хвост, которая будет работать для 8 точек. Только в таблице биты 0,2,4,6,8,10,12,14 будут хранить данные, а оставшиеся биты нули. Плюс по такому же принципу разделяются исходные 8 точек спрайта, и для них формируются два индекса(они будут разными), один показывает где в таблице можно найти такое сочетание чётных бит, а второй для нечётных(если их сдвинуть на место чётных). Два индекса хранить нужно сдвинутыми на 1 разряд, чтобы не умножать на 2, а использовать маску, в общем для 8 точек получается что-то типа такого:
    Код:
    ;извлечение индексов
    MOV (R1)+,R2       ; взяли из спрайта два индекса, для чётных и нечётных бит
    ;(они были циклически сдвинуты чтобы не умножать)
    MOV R2,R3	;скопировали индексы
    BIC #177001,R2	;извлекли индекс для чётных бит
    XOR R2,R3	;обнулили эти биты в копии
    SWAB R3		;извлекли индекс для нечётных бит
    ;вывод точек в текущее слово экрана
    MOV TABLE+SHIFT(R3),R4	;читаем нечётные биты(вернее пока они лежат в чётных)
    ADD R4,R4		;ставим на законное место
    ADD TABLE+SHIFT(R2),R4	;добавляем к ним чётные
    BIC #MASK,R4		;применяем маску
    BIS R4,(R5)+	;выводим на экран
    ;вывод остальных точек в следующее слово экрана
    MOV TABLE+SHIFT-16(R3),R4	;читаем нечётные биты
    ADD R4,R4			;ставим на законное место
    ADD TABLE+SHIFT-16(R2),R4	;добавляем к ним чётные
    BIC #177777-MASK,R4		;применяем маску
    BIS R4,(R5)	;выводим на экран
    ;команд здесь конечно многовато, нужно еще подумать что можно сделать с циклическими сдвигами, вдруг 8 отдельных процедур будеть быстрее и меньше по размеру
    
    ;если остальные точки не выводить сразу а оставить скажем в регистре R0
    ;и взять из спрайта следующие 2 индекса
    ;то вместо команд BIC/BIS можно объединять 8 точек и вывести командой MOV
    ;при выводе точек из середины спрайта
    XOR R0,R4
    AND #MASK,R4
    XOR R0,R4
    MOV R4,(R5)+
    ;команд здесь столько же, но нет команд чтения/модификации/записи
    ;может по такому-же принципу можно объединять если выводим по 4 точки
    - - - Добавлено - - -

    Manwe, всё же отдельные функции вывода со сдвигом будут наверно работать чуть быстрее(считаем что данные спрайта уже загружены в R0):
    сдвиг на 1 точку:
    rol r0 rol r0 mov r0,r1 rol r1
    сдвиг на 2 точки:
    + еще rol r0 rol r0 в начале
    сдвиг на 3 точки:
    в первом варианте rol меняется на ror, а в начале добавляется swab
    сдвиг на 4 точки:
    swab r0 mov r0,r1
    для сдвигов на 5,6,7 точек:
    rol меняется на rol и наоборот

    То есть между чтением 8 точек из спрайта, наложением маски и выводом командами bic/bis требутеся не более 6 команд для его сдвига, можно вместо bic/bis делать объединение через xor, команд столько же, но для середины спрайта меньше обращений к памяти, а для хвостов пару раз читаем слово с экрана(и используем маски). В общем при выводе одной строки спрайта, для изменения 8 точек на экране требуется не более 12 команд(если цикл сделан через SOB). По объёму кода наверно тоже будет меньше чем табличка.

  3. #133
    Guru Аватар для hobot
    Регистрация
    29.08.2011
    Адрес
    Зеленоград
    Сообщений
    4,857
    Благодарностей: 1122
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Manwe, извиняюсь не по теме вопрос, если вот такая крутизна как ваша ДЕМО (прямое и инферстное тыблоко)
    - это второе место, как выглядело 1-е место
    Архив программ для УК-НЦ, ДВК и БК.

    Ищу игру "СТРАНА МОНСТРОВ" [monstr.sav] для ДВК.

  4. #134
    Member Аватар для Manwe
    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    181
    Благодарностей: 63
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от hobot Посмотреть сообщение
    Manwe, извиняюсь не по теме вопрос, если вот такая крутизна как ваша ДЕМО (прямое и инферстное тыблоко) - это второе место, как выглядело 1-е место
    Вот так:

    Занимает 4 килобайта. http://www.pouet.net/prod.php?which=77759
    Manwe/SandS

  5. Этот пользователь поблагодарил Manwe за это полезное сообщение:
    hobot (14.10.2018)

  6. #135
    Moderator Аватар для CodeMaster
    Регистрация
    26.04.2009
    Адрес
    Воронеж
    Сообщений
    4,373
    Благодарностей: 600
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    Занимает 4 килобайта.
    Это как?
    platform : Windows
    type : 4k
    4k - демо, 400m - библиотеки для работы этого демо и 40g - ОСь для работы этих библиотек?
    Рыцарь ордена Хламовников

    Мои магазины на Мешке: Retro store и Компьютерные комплектующие

  7. #136
    Member Аватар для Manwe
    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    181
    Благодарностей: 63
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CodeMaster Посмотреть сообщение
    Это как? 4k - демо, 400m - библиотеки для работы этого демо и 40g - ОСь для работы этих библиотек?
    Из ресурсов системы используется драйвер видеокарты и входящий в состав драйвера транслятор с языка GLSL в машинный код видеокарты. Плюс вывод звука системной функцией waveout.
    В принципе, никто не запрещает и на БК-0010 пользоваться функциями монитора в 4kb intro
    Manwe/SandS

  8. Этот пользователь поблагодарил Manwe за это полезное сообщение:
    hobot (15.10.2018)

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

  10. #137
    Moderator Аватар для CodeMaster
    Регистрация
    26.04.2009
    Адрес
    Воронеж
    Сообщений
    4,373
    Благодарностей: 600
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    В принципе, никто не запрещает и на БК-0010 пользоваться функциями монитора в 4kb intro
    Ну, это понятно, бы ли же вроде демы использующие функционал SMK, но во-первых тут сравнение было бы правильным, если бы эта дема использовала только функции BIOS/UEFI. А во-вторых, определение "platform: Windows" не совсем корректное. Скачал я этот экзешник и что - "работа программы была завершена" не начавшись, а меня тоже Windows на компутере.
    Но, всё это уже жёсткий офф, так что завязываем ;-)
    Рыцарь ордена Хламовников

    Мои магазины на Мешке: Retro store и Компьютерные комплектующие

  11. #138
    Guru Аватар для hobot
    Регистрация
    29.08.2011
    Адрес
    Зеленоград
    Сообщений
    4,857
    Благодарностей: 1122
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Manwe, администратор 1000бит добавил линк на вашу дему в самом низу на страничке портала про БК-11М )
    https://www.1000bit.it/scheda.asp?id=1791
    Архив программ для УК-НЦ, ДВК и БК.

    Ищу игру "СТРАНА МОНСТРОВ" [monstr.sav] для ДВК.

  12. Этот пользователь поблагодарил hobot за это полезное сообщение:
    Manwe (15.10.2018)

  13. #139
    Activist
    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    238
    Благодарностей: 27
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    /* Для Manwe - запакованый лабиринт */

    https://yadi.sk/d/W5PHisDbnxNEyQ

    SCREEN:: - (0-91) массив ссылок на описание комнат.
    PATTER:: -(0-117)ссылки на паттерны из тайлов.

    SCRn::
    1. 0, кол-во элементов (ниже) // нули добавлял чтобы читать словами
    2. X, Y, № паттерна(PATnn), 0 (X,Y - координаты в буфере размерностью кратной размерам тайла т.е. Xmax кол-во тайлов в ширину..) //нули можно убрать или местами поменять, скажи как лучше.
    .......

    PATn::
    1.x,y - размерность паттерна (так и выводить в буфер.. если 2x8 значит ширина 2 и вниз 8)
    2. №тайла, №тайла...

    ........
    P.S.
    Сюда можно впихнуть описание объектов но я об этом пока не думал..
    Последний раз редактировалось S_V_B; 15.10.2018 в 17:27.

Страница 14 из 14 ПерваяПервая ... 1011121314

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

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

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

Похожие темы

  1. Портирование Lode Runner БК->УКНЦ
    от nzeemin в разделе ДВК, УКНЦ
    Ответов: 100
    Последнее: 21.08.2017, 01:20
  2. Портирование Stop the Express
    от nzeemin в разделе ДВК, УКНЦ
    Ответов: 89
    Последнее: 09.04.2017, 21:40
  3. Портирование на Xilinx конфигураций компьютеров на ПЛИС
    от parsec в разделе Клоны на ПЛИС, МК и БМК
    Ответов: 20
    Последнее: 01.04.2016, 20:11
  4. Ответов: 38
    Последнее: 23.11.2014, 16:00

Ваши права

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