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

User Tag List

Страница 10 из 113 ПерваяПервая ... 67891011121314 ... ПоследняяПоследняя
Показано с 91 по 100 из 1128

Тема: ЭТЮДЫ

  1. #91

    Регистрация
    27.11.2008
    Адрес
    Красноярск
    Сообщений
    747
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сообщение от dimasy:
    Заполним экран решеткой:
    device zxspectrum128
    ORG #61a8
    begin
    ld hl, #4000,a,#aa,b,#18
    m0 ld (hl),a:inc l:jr nz,m0
    cpl
    inc h:djnz m0
    br2 jr br2
    end
    display /d,end-begin
    savesna "test.sna",begin

    Кто сообразит короче?
    LD HL,#3faa
    LD A,L
    и увеличение цикла по b, не считается (это очевидно)

    ---------- Post added at 20:42 ---------- Previous post was at 20:36 ----------

    Итого 14 байт без зацикливания в конце
    Последний раз редактировалось GM BIT; 19.11.2011 в 08:28.

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

  3. #92
    goblinish
    Гость

    По умолчанию

    Цитата Сообщение от GM BIT Посмотреть сообщение
    Сообщение от dimasy:
    Заполним экран решеткой:
    device zxspectrum128
    ORG #61a8
    begin
    ld hl, #4000,a,#aa,b,#18
    m0 ld (hl),a:inc l:jr nz,m0
    cpl
    inc h:djnz m0
    br2 jr br2
    end
    display /d,end-begin
    savesna "test.sna",begin

    Кто сообразит короче?
    LD HL,#3faa
    ld a,l
    и увеличение цикла по b, не считается (это очевидно)

    Итого 14 байт без зацикливания в конце
    угу. а как на экране лучше будет выглядеть при заполнениии с #aa и с #18?
    и какие в регистрах будут при запуске данные?

  4. #93

    Регистрация
    27.11.2008
    Адрес
    Красноярск
    Сообщений
    747
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Dimasty Посмотреть сообщение
    угу. а как на экране лучше будет выглядеть при заполнениии с #aa и с #18?
    и какие в регистрах будут при запуске данные?
    Теперь переведите на русский

    ---------- Post added at 08:56 ---------- Previous post was at 07:27 ----------

    Заполнение экрана сеткой
    13 байт
    Код:
            ld hl,#5700
            ld a,#aa
    loop    dec l
            ld (hl),a
            jr nz,loop
            cpl
            dec h
            jr nz,loop

  5. #94
    goblinish
    Гость

    По умолчанию

    Цитата Сообщение от GM BIT Посмотреть сообщение
    Теперь переведите на русский
    в моем примере - где начальный адрес-#40aa или #4018?
    и теперь - какие регистры будут при USR 25e3?

    Цитата Сообщение от GM BIT Посмотреть сообщение
    Заполнение экрана сеткой
    13 байт
    Код:
            ld hl,#5700
            ld a,#aa
    loop    dec l
            ld (hl),a
            jr nz,loop
            cpl
            dec h
            jr nz,loop
    отлично! правда, без учета ROM покатит.
    Последний раз редактировалось goblinish; 19.11.2011 в 10:34. Причина: чо писал?

  6. #95

    Регистрация
    27.11.2008
    Адрес
    Красноярск
    Сообщений
    747
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Dimasty Посмотреть сообщение
    в моем примере - где начальный адрес-#40aa или #4018?
    заполняем начиная с #3faa

  7. #96
    goblinish
    Гость

    По умолчанию

    Цитата Сообщение от GM BIT Посмотреть сообщение
    заполняем начиная с #3faa
    я мыслил от #4018, ну фиг с ним, наделали этюдов.
    теперь осталось классическую XOR-текстуру сделать наверх.

  8. #97

    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Джерри попросил процедурку вычисления адреса в экране.
    Суть следующая:
    есть DE - адрес в экране
    C - количество пиксельных линий которые надо пропустить вниз
    Надо сделать п/п, которая получит в DE адрес новой пиксельной линии

    Что получилось:
    Код:
    ld	a,d		4	берём уже имеющееся смещение по пикселям вниз
    and	%00000111	7	маскируем
    add	a,c		4	добавляем к смещению, т.к. можем перейти через треть или з/м
    ld	c,a		4	сохранили полученное значение
    and	%00111000	7	выделили часть, отвечающую за положение внутри трети экрана
    rlca			4	смещаем её в старшие биты
    rlca			4	
    add	a,e		4	добавляем к младшему адресу
    ld	e,a		4	сохраняем
    sbc	a,a		4	если у нас появился CY, значит надо будет делать переход в другую треть
    and	%01000000	7	заполнили флагом переноса шестой бит аккумулятора
    add	a,c		4	добавили значения по третям из исходных данных
    and	%11000000	7	выделили
    rrca			4	смещаем в 4-5 бит для адреса экрана
    rrca			4	обращаю внимание что полученные трети никуда не сохраняем!
    rrca			4
    xor	c		4	нам надо ещё младшие 3 бита, адрес пиксельной линии
    and	%11111000	7	по хитрому без промежуточного регистра выделяем её
    xor	c		4	получили в аккумуляторе
    ld	b,a		4	спрятали
    ld	a,d		4	из регистра D забираем треть и сам адрес
    and	%11111000	4	маскируем их
    add	a,b		4	добавляем спрятанное значение, младшие 3 бита учтены вначале
    ld	d,a		4	готово!
    итого 111 тактов. Кто короче? :-)



    ---------- Post added at 10:20 ---------- Previous post was at 09:53 ----------



    Ещё один перл.
    Пересчёт из атрибутной области в адресную.
    Там фактически надо переместить биты из младших 0-1 в более старшие 3-4, плюс сохранить адрес. Универсальность процедуры в применимости и по отношению к теневому (#c000-#daff) экрану.

    Код:
    	ld	a,h		; 4
    ;	and	%00000011	; 7	0  - так и хочется замаскировать эти биты, но эта операция не нужна, 
    	add	a,a		; 4	8  - т.к. старшие биты уйдут по дальнейшей маске %00011111, а 
    	add	a,a		; 4	12  - младшие биты забиты нулями по add a,a
    	add	a,a		; 4	16
    	xor	h		; 4	20
    	and	%00011111	; 7	27 - сохраним нужные биты и обнулим ненужные 0-2
    	xor	h		; 4	31 - вытащили исходный адрес расположения
    	ld	h,a		; 4	35
    итого 35 тактов :-) кто быстрее?
    Последний раз редактировалось GriV; 03.01.2012 в 11:23.
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  9. #98

    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Думаю спрошу в тему - а табличный(разумного размера) DOWN_HL быстрее обычных вариантов есть?

  10. #99

    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    [/COLOR]
    Цитата Сообщение от NovaStorm Посмотреть сообщение
    Думаю спрошу в тему - а табличный(разумного размера) DOWN_HL быстрее обычных вариантов есть?
    Нет. Табличные значение для двухбайтовых элементов - это не для ZX.
    Типа:
    если есть HL, который надо сделать DOWN HL сделаю две таблицы, одна будет ссылаться на старший байт, вторая на младший. Отличаться будут битами в регистре адресах расположения. Тогда ультрабыстрый DOWN HL будет такой:
    SET 7,H ; #С000-#ВB00 - младшие байты
    LD E,(HL)
    SET 5,H ; #E000-#FB00 - старшие байты
    LD D,(HL)
    EX DE.HL

    получилось 8+7+8+7+4=34 такта и невероятные две таблицы. Быстрее нельзя.

    Теперь классика:

    inc h
    ld a,h
    and 7
    jr nz,exit
    ld a,l
    add a,32
    ld l,a
    jr c,exit
    ld a,h
    sub 8
    ld h,a

    exit:


    наиболее типичный цикл, это просто inc h и выход, будет 4+4+7+12 = 27 тактов, т.е. даже быстрее чем в табличной методе! Так что не городите огород :-)
    Последний раз редактировалось GriV; 04.01.2012 в 12:37.
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  11. #100

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

    По умолчанию

    192 строки * 2 байта = 384 байта - вся таблица. Приемлемо.

Страница 10 из 113 ПерваяПервая ... 67891011121314 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Этюды: как бы написать поизящнее.
    от AndTorp в разделе Программирование
    Ответов: 5
    Последнее: 17.03.2008, 00:43
  2. Ответов: 0
    Последнее: 18.08.2006, 22:40
  3. Этюды: печать шрифтом 5x5...
    от breeze в разделе Программирование
    Ответов: 12
    Последнее: 27.03.2005, 05:21

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

Ваши права

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