User Tag List

Страница 43 из 51 ПерваяПервая ... 394041424344454647 ... ПоследняяПоследняя
Показано с 421 по 430 из 501

Тема: Тема для всяких глупых вопросов

  1. #421

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

    По умолчанию

    Цитата Сообщение от Dart Alver Посмотреть сообщение
    LD B,(_SPR_W) - нет такой команды в Z80 !!!

    В остальном нифига не понял что ты хочешь сделать.
    Да... опять на те же грабли...
    Странно что компилятор не ругается и сглатует за милую душу эту ересь.

    Вопрос снят. Терь всё ок.

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

  3. #422

    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,691
    Спасибо Благодарностей отдано 
    302
    Спасибо Благодарностей получено 
    223
    Поблагодарили
    159 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    Это не пересылка - это вывод.
    туда еще внести эти данные надо.
    а изза структуры буфера может быть проблематично
    А у нас ТЗ очень размытое. Может, нужно просто положить в экран из памяти.
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

  4. #423

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

    По умолчанию

    Казалось, что всё уже, баZа для движка имеется. Ан нет. Всё никак не отстану.
    Вот в том блоке, где мы прибавляем смещение к hl, как мне выполнить проверку, что атрибуты находятся в диапазоне от 0 до 31 ? Чтоб отсекало, а не лезло на след. строку.

    Цитата Сообщение от Dart Alver Посмотреть сообщение
    сначала найдём адрес в буфере (почти та же процедура) ))

    ld a,d
    rrca
    rrca
    rrca
    ld d,a
    and #E0
    or e
    ld e,a
    ld a,d
    and 3
    add a,#F2 ; Для буфера в #F200
    ld d,a ; в DE - адрес, никаких BC портить не надо

    ld a,32 ; ну а вот и наше смещение
    sub c ; теперь в A - смещение для строки

    1 ; всё начинаем цикл
    push bc
    ld b,0
    ldir
    ld c,a ; теперь bc - смещение
    ex de,hl
    add hl,bc ; переход на новую строку
    ex de,hl
    pop bc
    djnz 1B

    ret
    Как-то так. Это пример конечно, можно и ещё поколдовать )) Да я и обшибиться мог, не проверял всё-таки ))
    И да - код что этот, что изначальный предполагает что спрайт атрибутов целиком помещается в экране,
    если вылезет - будет пичалька ))
    - - - Добавлено - - -

    Прост не хотелось бы переделывать ширину буфера.

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

    Цитата Сообщение от ALKO Посмотреть сообщение
    Прост не хотелось бы переделывать ширину буфера.
    но, видимо, таки придётся...

  5. #424

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

    По умолчанию

    Стал переделывать шырину буфера (на 40 байт на строку вместо 32-ух)
    Заменил в этой строке на ld a,40
    Цитата Сообщение от ALKO Посмотреть сообщение
    ld a,32 ; ну а вот и наше смещение
    sub c ; теперь в A - смещение для строки

    1 ; всё начинаем цикл
    Затем процедура переброски буфера на экран:

    Код:
    VIRT_WIDE_ATTR_TO_SCR 
    	halt
    	di
        ld de,REAL_SCREEN
        ld hl,MAIN_BUFF ; главный буфер
    ;    ldir
    	LD    B,24
    WIDE_LOOP
    	push bc
        ld bc,32
    	ldir
    	ld bc,8 ; 40 ширина буфера минус 32 область реального экрана - остаток
    	add hl,bc 
    	pop bc
    	DJNZ  WIDE_LOOP 
    	ei
    RET
    Но почему-то позиция XY атрибутов начинается с косяком. То, что должно быть 0 по X, равняется 32-8.
    И вместо отсечения - переход на следующую строку...

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

    ааа.. кажется я поооонииил.. пока не уверен наверняка, но по-моему там сорс-дестинейшн адреса блитинга спрайтов нарушены (ибо я их изначально делал под запас буфера с вертикальным скроллом)

  6. #425

    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    556
    Спасибо Благодарностей отдано 
    187
    Спасибо Благодарностей получено 
    197
    Поблагодарили
    100 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ALKO Посмотреть сообщение
    Стал переделывать шырину буфера (на 40 байт на строку вместо 32-ух)
    Заменил в этой строке на ld a,40
    И это всё что ты заменил ? А то, что старом варианте проги адресация была гвоздями прибита к ширине 32 байта ты учёл ? ))

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

    Вот очень простенький и медленный вариант адресации для 40 байтной ширины буфера.

    Код:
    ; адрес в буфере шириной 40 байт  E-x , D-y
    ; 40 не кратен степеням 2-ки
    
                    ; ADR= Y*40+X = Y*32+Y*8+X
                    ; максимальный Y=23 ; 256/23=11,13...
                    ; в нашем случае можно умножение на 8 использовать байтовое
                    ; а уже дальше придётся переходить на слова
                    
                     push hl
                     ld a,d ; Y
                     ld d,#F2  ; старший байт буфера
                     add a,a ; *2
                     add a,a ; *4
                     add a,a ; *8
                     ld l,a
                     ld h,0
                     add hl,hl ; *16
                     add hl,hl ; *32
                     add a,l    ; \ 
                     ld l,a     ; |  *32 + *8
                    jp nc,1F    ; |
                     inc h      ; /
    1                add hl,de  ; +x +буфер
                     ex de,hl
                     pop hl
    Пытаться оптимизировать дальше влом. ))
    Если бы ширина буфера была бы скажем 64 или 128 (кратна степеням 2-ки), то арифметика адресации была бы попроще. ))

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

    ALKO(06.10.2024)

  7. #426

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

    По умолчанию

    Цитата Сообщение от Dart Alver Посмотреть сообщение
    Если бы ширина буфера была бы скажем 64 или 128 (кратна степеням 2-ки), то арифметика адресации была бы попроще. ))
    Шота оно не пашет у меня...
    делать шырину 64... жертвовать впустую 576 байт... не уверен что могу сейчас себе это позволить.

  8. #427

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

    По умолчанию

    Снова атрибуты.

    На сей раз пытаюсь скроллить циклически экран влево
    Но получается какая-то муть.
    Код:
    SCROLL_PLANE_L
    di
    ld hl,22528
    ld de,22528-1
    ld b,24 ; строки
    
    ld a,(hl); берём первый пиксель
    push af
    SCROLL_PLANE_L1:
    push bc
    ld bc,31 ; столбцы
    ldir
    pop bc
    pop af 
    ld (hl),a; переносим на последний столбец
    inc hl ; следующая строка
    djnz SCROLL_PLANE_L1
    ei
    ret
    По задумке тут через аккум первый пиксель в строке должен переноситься на последний циклично (в идеале вообще бы через теневые регистры это замутить, чтоб лишний раз не долбиться в стек).
    В общем, сыпется оно не так, как задумывалось.

  9. #428

    Регистрация
    18.01.2010
    Адрес
    Крым
    Сообщений
    238
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    41
    Поблагодарили
    34 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Убери push af / pop af и подыми SCROLL_PLANE_L1: на строку выше.
    Тут нумерация строк не делается?

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

    ALKO(30.10.2024)

  10. #429

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

    По умолчанию

    Цитата Сообщение от M80 Посмотреть сообщение
    Убери push af / pop af
    а... понел. Я чёт подумал, что ldir задевает аккум.

    Да, провтыкал метку цикла. Очень невнимательный я Альйоша.
    Теперь вот не могу нужный оффсет подобрать меж значениями "ld bc,31 ; столбцы" и "inc hl", чтоб картинку не расколбашувало диагонально.

  11. #430

    Регистрация
    18.01.2010
    Адрес
    Крым
    Сообщений
    238
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    41
    Поблагодарили
    34 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Наверно так?
    Код:
    SCROLL_PLANE_L
    
    1. di
    2. ld de,22527 ; начало экрана
    3. ld hl,22527 + 1 ; начало экрана + 1
    4. ld b,24 ; строк
    5. SCROLL_PLANE_L1:
    6. ld a,(de) ; сохраним первый столбец
    7. push bc
    8. ld bc,32 - 1 ; всего столбцов - первый
    9. ldir ; переместим все влево
    10. pop bc
    11. ; DE - указатель на последний в текущей строке
    12. ; HL - на первый на следующей строке
    13. ld (de),a ; переносим сохранённый первый на последний столбец в строке
    14. inc de ; следующая строка
    15. inc hl ; следующая строка + 1
    16. djnz SCROLL_PLANE_L1
    17. ei
    18. ret
    Старайся писать аккуратно. Себе же меньше работы будет! И людЯм приятно.)
    Что то LIST этот свернул всё.(
    Код:
    SCROLL_PLANE_L
            di
            ld      de,22527        ; начало экрана
            ld      hl,22527 + 1    ; начало экрана + 1
            ld      b,24            ; строк
    SCROLL_PLANE_L1:
            ld      a,(de)          ; сохраним первый столбец
            push    bc
            ld      bc,32 - 1       ; всего столбцов - первый
            ldir                    ; переместим все влево
            pop     bc
    
    ;       DE - указатель на последний в текущей строке
    ;       HL - на первый на следующей строке
    
            ld      (de),a          ; переносим сохранённый первый на последний столбец в строке
            inc     de              ; следующая строка
            inc     hl              ; следующая строка + 1
            djnz    SCROLL_PLANE_L1
            
            ei
            ret
    Последний раз редактировалось M80; 31.10.2024 в 11:43.

Страница 43 из 51 ПерваяПервая ... 394041424344454647 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 42
    Последнее: 05.05.2021, 17:01
  2. Общая тема для моих вопросов (ассемблер и zx spectrum)
    от moronizzz в разделе Для начинающих
    Ответов: 17
    Последнее: 23.08.2016, 18:13
  3. тема для мобильного....
    от rasmer в разделе Музыка
    Ответов: 0
    Последнее: 18.01.2008, 20:25

Метки этой темы

Ваши права

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