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

User Tag List

Страница 14 из 23 ПерваяПервая ... 101112131415161718 ... ПоследняяПоследняя
Показано с 131 по 140 из 228

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

  1. #131
    Veteran Аватар для Manwe
    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,722
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    403
    Поблагодарили
    256 сообщений
    Mentioned
    11 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.pdp-11.ru

  2. #132
    Member
    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    192
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    1 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
    R.I.P. Аватар для hobot
    Регистрация
    30.08.2011
    Адрес
    Зеленоград
    Сообщений
    7,161
    Спасибо Благодарностей отдано 
    2,979
    Спасибо Благодарностей получено 
    370
    Поблагодарили
    309 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

  4. #134
    Veteran Аватар для Manwe
    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,722
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    403
    Поблагодарили
    256 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    Занимает 4 килобайта. http://www.pouet.net/prod.php?which=77759
    manwe.pdp-11.ru

  5. #135
    Guru Аватар для CodeMaster
    Регистрация
    26.04.2009
    Адрес
    г. Воронеж
    Сообщений
    6,225
    Спасибо Благодарностей отдано 
    138
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    182 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  6. #136
    Veteran Аватар для Manwe
    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,722
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    403
    Поблагодарили
    256 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

  8. #137
    Guru Аватар для CodeMaster
    Регистрация
    26.04.2009
    Адрес
    г. Воронеж
    Сообщений
    6,225
    Спасибо Благодарностей отдано 
    138
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    182 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  9. #138
    R.I.P. Аватар для hobot
    Регистрация
    30.08.2011
    Адрес
    Зеленоград
    Сообщений
    7,161
    Спасибо Благодарностей отдано 
    2,979
    Спасибо Благодарностей получено 
    370
    Поблагодарили
    309 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

  10. #139
    Veteran
    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    1,396
    Спасибо Благодарностей отдано 
    86
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    136 сообщений
    Mentioned
    21 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    https://yadi.sk/d/BO9q5VcNdpHe9A

    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; 17.10.2018 в 18:39.

  11. #140
    Veteran Аватар для Manwe
    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,722
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    403
    Поблагодарили
    256 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от S_V_B Посмотреть сообщение
    Для Manwe - запакованный лабиринт
    Благодарю, я скоро к этому вернусь.
    manwe.pdp-11.ru

Страница 14 из 23 ПерваяПервая ... 101112131415161718 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Портирование Lode Runner БК->УКНЦ
    от nzeemin в разделе ДВК, УКНЦ
    Ответов: 103
    Последнее: 12.12.2020, 04:04
  2. Ответов: 21
    Последнее: 04.10.2019, 18:03
  3. Портирование Stop the Express
    от nzeemin в разделе ДВК, УКНЦ
    Ответов: 90
    Последнее: 21.11.2018, 09:46
  4. Ответов: 38
    Последнее: 23.11.2014, 16:00

Ваши права

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