PDA

Просмотр полной версии : Заполнение экрана Специалиста точками случайного цвета



CityAceE
31.03.2025, 10:58
Вот такую штуку на досуге написал. Практической ценности нет. Кто сделает короче/быстрее? ;)



org 0

ld bc, 0x9000
m1:
ld hl, (seed)
ld d, h
ld e, l
add hl, hl
add hl, hl
add hl, de ; HL=HL*5
inc hl ; +1
ld (seed), hl

ld a, h
out (0xfa), a
ld (bc), a

inc bc
ld a, 0xc0
cp b
jp nz, m1

halt

seed: dw 0x1234


https://pic.maxiol.com/images2/1743408195.3280329127.screen.png

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

ivagor
31.03.2025, 13:13
Если не менять "ГСЧ", то например так

org 0

ld bc, 0x9000
ld hl, 0x1234
m1:
ld d, h
ld e, l
add hl, hl
add hl, hl
add hl, de ; HL=HL*5
inc hl ; +1

ld a, h
out (0xfa), a
ld (bc), a

inc bc
ld a, 0xc0
cp b
jp nz, m1

halt

CityAceE
31.03.2025, 13:42
А ведь действительно, сохранение HL тут было совершенно излишне!


Если не менять "ГСЧ"
А есть более короткий вариант с приемлемым распределением?

ivagor
31.03.2025, 14:08
16 битный LFSR чуть длиннее (8 байт вместо 6), но быстрее и не трогает DE.
Можно сократить на байт, если заполнять в обратную сторону, от BFFF до 8000h. Тогда проверку окончания можно упростить (xor a\ or b\ jp m,m1), правда будет затираться область 8000-8FFF (не вижу в этом проблемы).

lexarr
31.03.2025, 22:51
Подобная штука, побитовая экранная ГСЧ-заполнялка

rst
01.04.2025, 03:41
Кто сделает короче/быстрее?Для Z80 не писал, может ошибусь, но для i8080

inc bc
ld a, 0xc0
cp b
jp nz, m1можно заменить на:

INR C
JNZ m1
INR B
MVI A, 0C0h
CMP B
JNZ m1Мнемоники у Z80 как я понимаю - другие, но команды аналогичные должны быть.
Чуть длиннее, но немного быстрее.

Serg6845
01.04.2025, 08:30
Вот такую штуку на досуге написал. Практической ценности нет. Кто сделает короче/быстрее? ;)


не будет работать на компах с Z80 - из-за команды out.