Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Для начинающих (http://zx-pk.ru/forumdisplay.php?f=43)
-   -   Конвертнуть jpeg в формат zx screen. (http://zx-pk.ru/showthread.php?t=9908)

Kurles 5th April 2009 01:12

Quote:

Originally Posted by rasmer (Post 193103)
если загружена непакованная картинка, то:
ld hl,адрес картинки в памяти
ld de,#4000
ld bc,#1b00
ldir

вуаля...

а если пакованая с декомпрессором, то ещё проще =)
Code:

call адрес картинки с декомпессором ; =)
правда перед этим желательно атрибуты экрана в 0 выставить, что бы не было заметно, как картинка распаковывается -

Code:

ld hl,#5800
ld d,h
ld e,l
inc de
ld (hl),l
ld bc,#2ff
ldir

но это и для простого ldir справедливо.

Добавлено через 7 минут
а можно ещё проще:

Code:

10 CLEAR 24999: BORDER 0: PAPER 0: CLS
20 RANDOMIZE USR 15619: REM: LOAD "screen" CODE 32768: REM адрес компрессированой картинки с декомпрессором
30 RANDOMIZE USR 32768
40 PAUSE 0

В итоге на экране - картинка =)

anarchyman 5th April 2009 01:46

С выводом картинки на экран разобрался.
Громадное спасибо rasmer'у (с меня простава при встрече).

Сейчас остро нуждаюсь в примере кода со скролом :-)
Где бы про это прочитать?

Kurles 5th April 2009 02:33

Quote:

Originally Posted by anarchyman (Post 193147)
С выводом картинки на экран разобрался.
Громадное спасибо rasmer'у (с меня простава при встрече).

Сейчас остро нуждаюсь в примере кода со скролом :-)
Где бы про это прочитать?

Тут можно почитать =)

anarchyman 5th April 2009 02:37

Quote:

Originally Posted by Kurles (Post 193152)
Тут можно почитать =)

О, круто :-)
Ща в лом пьяный, завтра буду читать и разбираться :-)

anarchyman 5th April 2009 16:32

Почитал :-)
Возникло несколько вопросов:

1. Почему используется ORG 40000
2. При компиляции выползает вот такая ошибка:
Quote:

C:\Documents and Settings\Administrator\Desktop\spectrum\_sj\sj\ana rchy2>..\sjasm
plus.exe -mbi. test.a80
SjASMPlus Z80/R800 Cross-Assembler v1.06 Stable (build 2006-08-02)
Pass 1 complete (0 errors)
test.a80 line 29: Label not found: FFH
test.a80 line 64: Label not found: FFH
Pass 2 complete
Errors: 2, compiled: 193 lines, work time: 0.016 seconds
Хотя в коде он вроде как присутствует:

DEFB FFH

Спасибо за ответы!

Kurles 5th April 2009 18:49

Quote:

Originally Posted by anarchyman (Post 193264)
Почитал :-)
Возникло несколько вопросов:

1. Почему используется ORG 40000
2. При компиляции выползает вот такая ошибка:


Хотя в коде он вроде как присутствует:

DEFB FFH

Спасибо за ответы!

1. Можешь заменить ORG на любой другой адрес.
2. замени "DEFB FFH" на "DEFB #FF". C "CP A,FFH" аналогично - "CP A,#FF" или короче - "CP #FF", ибо команда CP всегда с аккумулятором (регистром A) работает.

anarchyman 5th April 2009 19:08

Спасибо за ответ!
Сейчас буду пробовать.

А пока возник еще один вопрос. Предположим есть процедура:

Quote:

loop
halt
ld ix,a1
call play
ld ix,a2
call play
jp loop
ret
Где можно почитать про таймер или подсчет циклов.
Чего хочется: что бы jump на процедуру loop был бы не бесконечным, а например выполнялся несколько раз.

на pc assembler'е можно было бы сделать примерно так:

loop:
inc %eax ; увеличиваем %eax на 1.
...
основная процедура
...
cmp 111,%eax ; сравниваем значение регистра %eax, с интересующим числом.
jne loop ; если не равно прыгаем на loop.
je newloop ; если равно прыгаем на новую процедуру.

Спасибо за ответы!

Добавлено через 16 минут
Скроллер теперь компилируется без проблем, но не работает :-)
Что то наверное я не так сделал. Код такой:

Quote:

ORG #6000
STARTF ei
Далее копипаст оригинального кода:
Quote:

LD A,(COUNT)
CP 0
JR Z,SETCHAR
DEC A
LD (COUNT),A

START LD HL,401FH
LD DE,BUF
LD B,08
MET LD A,(DE)
SLA A
PUSH HL
DUP 32
RL (HL)
DEC L
EDUP
LD (DE),A
INC DE
POP HL
INC H
DJNZ MET
RET
SETCHAR LD A,7
LD (COUNT),A
VAR LD HL,MESS
LD A,(HL)
CP A,FFH
CALL Z,SETST
PUSH HL
LD L,A
LD H,0
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD DE,(23606)
ADD HL,DE
LD DE,BUF
LD B,08
MET1 LD A,(HL)
LD (DE),A
INC HL
INC DE
DJNZ MET1
POP HL
INC HL
LD (VAR+1),HL
JP START
SETST LD HL,MESS
LD (VAR+1),HL
RET
Тут я добавил его вызов:

Quote:

m_loop call 6000
halt
jp m_loop
Далее продолжение оригинального кода:

Quote:

COUNT DEFB 0
BUF DEFB 0,0,0,0,0,0,0,0
MESS DEFB " I made it! I made it! I made this stupid "
DEFB "scroll!!! Well, now i haven't any idea "
DEFB "to write something here. What about "
DEFB "greets? Erm.. There is no greetinx :(( "
DEFB "Now it's really end of my message. Scroll "
DEFB "coded by mig'95 on 01.11.2006 at 21:20 "
DEFB "... Read again: "

DEFB #FF
В чем может быть дело?

Kurles 5th April 2009 20:25

1 Attachment(s)
Quote:

Originally Posted by anarchyman (Post 193290)
В чем может быть дело?

Ну во-первых, sjasm хоть и понимает запись шеснадцатиричных чисел в формате "FFFFH", но лучше их привести к виду 0xfff или #ffff. Во-вторых адресс в памяти 6000 - это адрес ПЗУ, собственно по этому адресу пользователь не может хранить собственные программы, лучше использовать для этого память выше 0x8000. В-третьих в данном конкретном случае лучше воспользоваться одним ORG'ом в начале, а все остальное вызывать через метки, а не абсолютные адреса. Считать количество циклов - проще пареной репы:
Code:

ld b,#ff ; сколько раз надо повторить участок кода
loop
 push bc ; запоминаем за стеке регистр B
 call scroll
 pop bc ; вытаскиваем со стека регистр B
 djnz loop ;уменьшаем B на еденицу, и если B<>0, то переходим на loop
 ret ; выход

в аттаче работающий исходник скролла для sjasmplus 1.07RC7

anarchyman 5th April 2009 21:07

Огромное спасибо!!!
Сейчас буду пробовать и разбираться!

Добавлено через 1 час 58 минут
Очень странно :-(
Почему то ругается на вышенаписанный код.

Суть. Что было:

Quote:

loop
halt
ld ix,a1
call play
ld ix,a2
call play
jp loop
ret
Что стало:

Quote:

loop
halt
ld ix,a1
call play
ld ix,a2
call play
ld bc,#10
push bc
call loop
pop bc
djnz newloop
ret
Но компилятор ругается:
Quote:

C:\Documents and Settings\Administrator\Desktop\spectrum\_sj\sj\ana rchy2>..\sjasm
plus.exe -mbi. testf.a80
SjASMPlus Z80/R800 Cross-Assembler v1.06 Stable (build 2006-08-02)
Pass 1 complete (0 errors)
testf.a80 line 35: Unrecognized instruction: bc,#10
testf.a80 line 36: Unrecognized instruction: bc
testf.a80 line 37: Unrecognized instruction: loop
testf.a80 line 38: Unrecognized instruction: bc
testf.a80 line 39: Unrecognized instruction: newloop
Pass 2 complete
чем ему там bc не понравился? :-(

Kurles 6th April 2009 00:11

Quote:

Originally Posted by anarchyman (Post 193301)
чем ему там bc не понравился? :-(

не знаю, попробуй в строках, где нет меток, перед мнемониками пробелов наставить, ибо оригинальная версия sjasm'а не поддерживала компиляцию ассемблерных команд в начале строки, может твоя ситуация - это отголоски того времени. Ещё ошибка - где у тебя задается количество циклов в регистровой паре bc - надо, что бы кол-во циклов задавалось в регистре B. ld b,#10. Ещё: не нашёл у тебе метки newloop, которая в комманде djnz newloop используется, определи куда нибудь.


All times are GMT +4. The time now is 00:25.

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