Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Для начинающих (http://zx-pk.ru/forumdisplay.php?f=43)
-   -   срочно нужна прога для вывода спрайтов на экран компьютера zX spectrum 48 k(sinclair) (http://zx-pk.ru/showthread.php?t=11970)

ALKO 2nd February 2010 11:35

срочно нужна прога для вывода спрайтов на экран компьютера zX spectrum 48 k(sinclair)
 
в данный момент разрабатываю графический макер для спрайтов.
Размеры сделал фиксированные 8*8 символов.
такую шнягу я уже делал когда-то (но размеры можно было менять в процессесе создания рисунков), данные были потеряны, еще в машинных кодах писал подпрограмму вывода этих спрайтов на экран.
По новой расчитывать эту процедуру не охота, может кто знает,как нарисовать на экране спрайт 8*8 знакомест в машин. кодах ( 64*64 пикс.)
Сам графический редактор сделал так, что он поочередно заливает в память посимвольно (сверху вниз сканирует каждый символ побайтно) и так идет в ряд в первой строке (из 8-ми символов) затем во второй,третьей........................... и восьмой.
так сделал , чтоб при переходе по координатам знакомест не было белиберды,а то на спеке организация памяти экранной области довольно рахитная.

jerri 2nd February 2010 11:38

тебе в каком виде?

VNN_KCS 2nd February 2010 14:54

Вот самая простая, исходя из твоих параметров 8х8:
ld hl,адрес спрайта
ld de,адрес экрана
ld b,64
n1 push bc
push de
dup 8
ldi
edup
pop de
call de_inc
pop bc
djnz n1
ret
de_inc inc d
ld a,d
and 7
ret nz
ld a,e
add a,32
ld e,a
ret c
ld a,d
sub 8
ld d,a
ret

ALKO 2nd February 2010 17:53

а что означает эта мнемоника?
dup 8
ldi
edup

boo_boo 2nd February 2010 18:03

Quote:

Originally Posted by ALKO (Post 253902)
dup 8
ldi
edup

повтор ldi 8 раз (директива асма, не мнемоника)

ALKO 2nd February 2010 18:09

а как бы мне это вдесятичных кодах написать.
А то проги пишу по таблице из книжицы.

---------- Post added at 17:09 ---------- Previous post was at 17:06 ----------

ldi значит LDIR ?
а dup 8 ; edup ; - это обычный цикл ? (какие регистры он использует ? или можно на свое усмотрение ?)

SoftLight 2nd February 2010 18:14

обожемой! Ldi это значит Ldi - тоже самое что LDIR тока без цикла - как бы без хвоста ld a, b; or c; jr nz, ... . edup говорит сколько раз дублировать блок. тоесть берешь и пишешь код LDI 8 раз подряд. А вообще для программирования ассемблеры существуют

null_device 2nd February 2010 18:15

Quote:

Originally Posted by ALKO (Post 253904)
а как бы мне это вдесятичных кодах написать

Расписать всю программу? Или как 8 раз набить LDI (#237, #160 dec)?!

данная команда ассеблера траслируется в что-то типа..
---
..
ldi 237, 160
ldi 237, 160
ldi 237, 160
ldi 237, 160
ldi 237, 160
ldi 237, 160
ldi 237, 160
ldi 237, 160
..

Если есть анреал, можно в мониторе набить мнемокоды (развернув спецкоманды ассемблера), а потом списать соответствующие им числовые значения. Так быстрее получится (ну если не брать в расчет асм и т.п.).

ALKO 2nd February 2010 18:32

а так можно ?
push af
FUCKING_LOOP ld a,8
ldi
dec a
djnz FUCKING_LOOP
pop af
(правда в ущерб процессорного времени)

null_device 2nd February 2010 18:38

Теоретичеки можно. А зачем такие сложности? Тогда уж проще сохранять регистровую пару bc и использовать ldir. Команда ldi используется для быстродествия и ненужных опереций с регистрами..


All times are GMT +4. The time now is 10:59.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.