Кодинг для Спектрум и 8бит

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Кодинг для Спектрум и 8бит » Demo » SProject


SProject

Сообщений 1 страница 3 из 3

1

http://content.pouet.net/files/screenshots/00077/00077710.png

Слабал от расстройства. учитесь (:

pouet

2

Сделано неплохо, хороший динамизм ! А будет ли собственно сеанс разоблачения магии с исходниками и течением авторской мысли которые сподвигли на написание ?

3

Исходники выложены, я поясню фрагменты кода

Генерация псевдосинуса. Для экономии байт используется известный трюк: после Randomize Usr NN BC=NN, получается BC=$6000

Код:
sinp=$6000
; exx
; ld bc,sinp;$8000
 dec b
 exx
 ld hl, 0
 ld de,hl


gens:
 ld a, h
 cp 32
 ex de, hl
 ld bc, 4
 jr c, bra1
 and a
 sbc hl, bc
 jr bra2
bra1:
 add hl, bc
bra2:
 ex de, hl
 add hl, de
 
 ld a,h
 exx
; sub 32
 ld (bc),a
 inc c
 exx
 jr nz,gens
;34bytes


Генерация основы эффекта спрайта-пирамидки

Код:
;generate pyramid
;hl=de=0
;	jr $
	push hl
	pop ix
	ld bc,hl

	ld h,$C0;ld hl,$C000

gp:
	bit 0,h
	jr nz,noscro
	scf
	rl c;l
	rl b;h
	scf
	rr e
	rr d
noscro:
;H.L|E.D
	ld a,l
	ld (hl),b:inc l
	ld (hl),c:inc l
	ld (hl),e:inc l;c
	ld (hl),d:inc l;b
	ld l,a
	inc h
;	exx
	jr nz,gp


Формирование процедуры, которая будет использовать вывод с помощью стека. Выводится меньше на одну линию, но по идее исправимо.

Код:
;form
	ld de, ous_e
folp:
	ld hl, ous_b
	ld bc,ous_e-ous_b
	ldir
	ld hl,(scrs+1)
	dec hl
	call nbhl
	inc hl
	ld (scrs+1),hl
	ld a,h
	cp $58
	jr nz,folp
	ld a,$40,(scrs+2),a
	ex de,hl
	ld (hl),$C3:inc hl; возврат из процедуры
	ld (hl),low backsp:inc hl
	ld (hl),high backsp;:inc hl

Подготовка спрайтов-пирамидки для горизонтального смещения:

Код:
;shifts
	ld h,$C0
shl1:
	ld l,0
shl2:
	ld b,(hl):inc l
	ld c,(hl):inc l
	ld d,(hl):inc l
	ld e,(hl):inc l
shl3:
;	call roll
	or a
	rr b
	rr c
	rr d
	rr e
	jr nc,nolbit
	set 7,b
nolbit:
	ld (hl),b:inc l
	ld (hl),c:inc l
	ld (hl),d:inc l
	ld (hl),e:inc l
	jr nz,shl3
	inc h
	jr nz,shl1


http://i100.fastpic.ru/big/2018/0821/84/ef48d6385badfdd3264185c7dac0e984.png

Сама процедура:

Код:
ous_b:
	ld h,sinp/256
;+
	ld l,c
	ld a,(hl)
;	sra a
	ld l,b
	add a,(hl)
	exa
;+
	ld l,e
	ld a,(hl)
	ld l,d
	add a,(hl)
	bit 5,a
	jr z,noinv
	cpl
noinv:
	and 31
	add a,$C0
	ld h,a
	exa
	add a,a
	add a,a
	ld l,a
	ld sp,hl
	exx
	pop de,bc
scrs: ld sp,$4020
 dup 8
 push bc,de
edup
	exx
	ld a,e
	add a,ixl
	ld e,a

	add a,ixh
	ld d,a
	
	inc c
	inc b
	inc b
ous_e:


Эффект использовался в разных демо и давно уже разобран. Каждая линия экрана заполняется линией спрайта-пирамидки, высота определяется как
s()-таблица синусов
h=s(y)+s(2*y) регистры D,E.
if h>31 then h=32-h  зеркальное отображение пирамидки, получается вытянутый ромб.

Заодно вычисляется смещение по горизонтали(регистры B и C).


Вы здесь » Кодинг для Спектрум и 8бит » Demo » SProject