User Tag List

Показано с 1 по 10 из 18

Тема: Оптимизация Z80-кода для Мандельброта

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    16.12.2014
    Адрес
    г. Ожерелье
    Сообщений
    769
    Спасибо Благодарностей отдано 
    252
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    42 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Оптимизация Z80-кода для Мандельброта

    У меня вопрос скорее по Z80, чем по Спектруму. Но предположил, что лучших знатоков z80 скорее можно встретить только тут.
    Недавно на pouet было выложено интро для БК, размером 242 байта, которое шустро строит Мандельброты - https://www.pouet.net/prod.php?which=87739
    Решил портануть этот код на Амстрад. Получилось почти 500 байт и процентов на 60% медленнее, чем БК0010. На Спек не получится, так как интро использует весь экран БК, реализуя 128х256 графику с 2х1 текстурами. Для Амстрада сделал два кода. Аналогичный с текстурами и с 16 цветами. Oбращение к видеопамяти на Амстраде существенно сложнее и поэтому несколько тормознее, чем на многих других платформах. Но главный тормоз не здесь, а в самом алгоритме расчета Мандельброта. На БК главный цикл занимает 14 строк

    Код:
    1$:
    	mov	sqr(r1), r3	; r3 = y^2
    	add	r0, r1		; r1 = x+y
    	mov	sqr(r0), r0	; r0 = x^2
    	add	r3, r0		; r0 = x^2+y^2
    	cmp	r0, r6		; if r0 >= 4.0 then
    	bge	2$		; overflow
    	mov	sqr(r1), r1	; r1 = (x+y)^2
    	sub	r0, r1		; r1 = (x+y)^2-x^2-y^2 = 2*x*y
    	add	r5, r1		; r1 = 2*x*y+b, updated y
    	sub	r3, r0		; r0 = x^2
    	sub	r3, r0		; r0 = x^2-y^2
    	add	r4, r0		; r0 = x^2-y^2+a, updated x
    	sob	r2, 1$		; to next iteration
    Для Z80 у меня получилось кода заметно больше
    Код:
    loc1:
    r1 equ $+1
        ld hl,0
        ld a,l
        and $fe
        ld l,a
        ld a,high(sqrbase)
        add a,h
        ld h,a
        ld a,(hl)
        inc l
        ld h,(hl)
        ld l,a
        ex de,hl  ;de = r3 = sqr[r1&0xfffe]
        pop bc   ;r0
        ld hl,(r1)
        add hl,bc
        ld (r1),hl   ;r1 += r0
        ld h,b
        ld a,c
        and $fe
        ld l,a
        ld a,high(sqrbase)
        add a,h
        ld h,a
        ld a,(hl)
        inc l
        ld h,(hl)
        ld l,a       ;r0 = sqr[r0&0xfffe]
        add hl,de
        push hl   ;r0 += r3
        ld a,h
        cp 8
        jr nc,loc2
        ld hl,(r1)
        ld a,high(sqrbase)
        add a,h
        ld h,a
        ld a,l
        and $fe  ;sets C=0
        ld l,a
        ld a,(hl)
        inc l
        ld h,(hl)
        ld l,a      ;r1 = sqr[r1&0xfffe]
        pop bc   ;r0
        push bc
        sbc hl,bc  ;C=0
    r5 equ $+1
        ld bc,0
        add hl,bc
        ld (r1),hl
        pop hl
    r4 equ $+1
        ld bc,0
        add hl,bc    ;r0 += r4
        sbc hl,de    ;r0 -= r3
        sbc hl,de
        push hl   ;r0 -= r3
        ld hl,tniter
        dec (hl)  ;r2
        jr nz,loc1
    На 8-битных вычислениях Спек обычно несколько быстрее БК. Но на интенсивных 16-битных расчётах БК похоже заметно быстрее при гораздо лучшей компактности кода. Могу ещё предположить, что на таких расчётах 6502 будет выглядеть совсем бледно. Буду очень признателен, если кто-нибудь найдет способ сделать главный цикл расчёта Мандельброта быстрее и/или компактнее.

    В архиве исходники и бинарники для Амстрада. В эмуляторе запуск через RUN"M4 или RUN"M16

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

    Oleg N. Cher(29.11.2021)

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

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

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

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

Похожие темы

  1. Оптимизация Conway's Game of Life для Z80
    от blackmirror в разделе Программирование
    Ответов: 1
    Последнее: 10.01.2022, 20:47
  2. Ответов: 28
    Последнее: 01.01.2017, 14:28
  3. Ответов: 22
    Последнее: 30.03.2015, 04:52
  4. Оптимизация в HL
    от drbars в разделе Программирование
    Ответов: 33
    Последнее: 22.08.2013, 17:56
  5. Шифр AES-128: компактная реализация для Z80 (1001 байт кода)
    от Barmaley_m в разделе Программирование
    Ответов: 7
    Последнее: 18.03.2013, 00:30

Ваши права

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