разобрался.под win7 эта связка будет работать?
http://s015.radikal.ru/i330/1109/1d/ccd8992cd589.jpg
Вид для печати
разобрался.под win7 эта связка будет работать?
http://s015.radikal.ru/i330/1109/1d/ccd8992cd589.jpg
наверное будет :)
---------- Post added at 13:16 ---------- Previous post was at 13:12 ----------
Надо обязательно писать некоторые строчки для компилятора
В моем примере - это строка 1 и последняя
---------- Post added at 13:20 ---------- Previous post was at 13:16 ----------
Я пока то же но решил попробывать Sjasm.
Обновил пост убрав строчку с меткой start в примере
---------- Post added at 13:28 ---------- Previous post was at 13:20 ----------
Кстати у меня в примере написано с пробелами, почему форум их не отображает неизвестно
Надо тэг форума [ code] [ /code] использовать, потому что форум считает, что у тебя там стандартный текст, в котором не надо лишние пробелы показывать.
Тогда будет вот так:
Код:device zxspectrum128
org #6000
ei
xor a
out (254),a
ld hl,23295
ld (hl),a
or (hl)
dec hl
jr z,$-3
jr $
savesna "probe.sna",#6000
Можете меня поздравить -написал первую программку с головы и она работает (значит не даром книжки читаю :))
Код:device zxspectrum48
org 60000
start
ld b,255
ruun ld a,0
out (254),a
nop
ld a,7
out (254),a
nop
ld a,1
out (254),a
nop
dec b
jr nz,ruun
jp start
ret
Молодца!!!!!!!
Sjasm также указывает на строку с ошибкой
Если включить Capture output внизу будет окошко с результатом, тыкаеть по ошибке и автоматом попадаешь на ошибку в тексте
---------- Post added at 14:15 ---------- Previous post was at 13:59 ----------
А в Crimson'е кто-нибудь работает? Какие фишки в нем есть?
Допустим у меня есть моя библиотека процедурок (.txt)
Как допустим пишешь down_hl в редакторе а он вставляет в текст программы
Код:down_hl
inc h
ld a,h
and 7
ret nz
ld a,l
add a,32
ld l,a
ret c
ld a,h
sub 8
ld h,a
ret
есть маленький вопрос где почитать описание самого ассемблера на русском (директивы)
а сейчас подскажите как вводить например опрос клавиш?
на клавишу "P" не реагирует.если вместо "P" постоавить "0" тогда реагирует на 0 .как же прописать тогда клавиши?Код:device zxspectrum48
ORG 60000
XOR A
LD (23560),A ;в системную переменную LAST_K (код
; последней нажатой клавиши) заносится 0
LOOP LD A,(23560) ;из этой системной переменной
; считывается значение кода нажатой клавиши
CP "P" ;сравнение двух кодов - находящегося
; в регистре A и символа P
JR NZ,LOOP ;если результат сравнения не равен 0,
; то переход на метку LOOP, если 0,
RET
savesna "probe.sna",#6000
После того как вы нажмете клавишу P, O, Q или A, программа напечатает в левом верхнем углу экрана одну из фраз, перечисленных в блоке данных, например, «KEY Q».Код:KEY XOR A
LD (23560),A
MET1 LD A,(23560)
CP "P" ;сравнение двух кодов
; Если результат сравнения не равен нулю (то есть нажата не P),
; то переход на метку MET2, после которой проверяются нажатия других клавиш
JR NZ,MET2
LD DE,TXT1
PRINT LD BC,5 ;вывод на экран символа,
CALL 8252 ; соответствующего нажатой клавише
LD A,13
RST 16
JR KEY ;переход на начало программы
MET2 CP "O" ;проверка нажатия клавиши O
JR NZ,MET3
LD DE,TXT2
JR PRINT
MET3 CP "Q" ;проверка нажатия клавиши Q
JR NZ,MET4
LD DE,TXT3
JR PRINT
MET4 CP "A" ;проверка нажатия клавиши A
JR NZ,MET5
LD DE,TXT4
JR PRINT
MET5 CP "0" ;проверка нажатия клавиши 0
JR NZ,MET1 ;если коды не совпадают,
; повторяем все сначала
RET ; иначе - выход из программы
; Данные для печати
TXT1 DEFM "KEY P"
TXT2 DEFM "KEY O"
TXT3 DEFM "KEY Q"
TXT4 DEFM "KEY A"
маленькую p поставь или с капсом нажимай
Ну поставь EI в начало - заработает. Только печатать не будет через RST 16, естессно. У тебя ж в снапшоте бейсик не инициализирован, а ты через его вызовы пытаешься печатать. И буквы маленькие не забудь.
Вообще если хочешь через RST 16, то лучше кодовый блок записывать, а не снапшот, потом в эмуляторе его грузить. Или бейсик-загрузчик написать и записывать в trd. А то без инициализации бейсика это работать не будет.
спасибо за ответ.я понял что мне еще рано на этот ассемблер переходить -слишком он сложный для начала.Буду в Gens4 дальше на реале всё набивать и на дискетку сохранять.там всё хоть работает :)
добавление EI не дало результата,а вот замена букв на цифры 6,7,8,9,0 -работает !так в чём прикол с буковками?
Код:device zxspectrum48
ORG 60000
EI
XOR A
CALL 8859
LD A,68
LD (23693),A
CALL 3435
LD A,2
CALL 5633
; Î÷èñòêà ñòðîêè äëÿ ââîäà èìåíè
LD HL,NAME
LD DE,NAME+1
LD BC,19
LD (HL)," "
LDIR
; Âûâîä òàáëèöû ñèìâîëîâ â ðàìêå
CALL TABL
CALL LINES
LD A,68
LD (23693),A
LD BC,#506 ;íà÷àëüíûå êîîðäèíàòû êóðñîðà â òàáëèöå
LD E,0 ;íîìåð ñèìâîëà â ñòðîêå ââîäà
SET 3,(IY+48) ;ðåæèì ââîäà ïðîïèñíûõ áóêâ
; Óïðàâëåíèå êóðñîðîì è ïå÷àòü âûáðàííîãî ñèìâîëà â ñòðîêó
KEYS CALL SETCUR ;âûâîä êóðñîðà
XOR A
LD (23560),A
WAIT LD A,(23560) ;îæèäàíèå íàæàòèÿ êëàâèøè
AND A
JR Z,WAIT
CP "6" ;ïåðåìåùåíèå êóðñîðà íà
JR Z,RIGHT ; îäèí øàã âïðàâî
CP "7" ;ïåðåìåùåíèå êóðñîðà
JR Z,LEFT ; íà îäèí øàã âëåâî
CP "9" ;ïåðåìåùåíèå êóðñîðà
JR Z,UP ; íà îäèí øàã ââåðõ
CP "8" ;ïåðåìåùåíèå êóðñîðà
JR Z,DOWN ; íà îäèí øàã âíèç
CP "0" ;ïå÷àòü âûáðàííîãî ñèìâîëà
JR Z,SELECT ; â ñòðîêå ââîäà
JR KEYS
; Ïåðåìåùåíèå êóðñîðà âïðàâî
RIGHT LD A,C ;ïðîâåðêà äîñòèæåíèÿ êóðñîðîì
CP 24 ; ïðàâîé ãðàíèöû òàáëèöû
JR NC,KEYS
CALL RESCUR ;óäàëåíèå êóðñîðà íà ïðåæíåì ìåñòå
INC C ;èçìåíåíèå ïîëîæåíèÿ êóðñîðà
INC C
CALL SETCUR ;óñòàíîâêà êóðñîðà íà áóêâó òàáëèöû
JR KEYS
; Ïåðåìåùåíèå êóðñîðà âëåâî
LEFT LD A,C ;ïðîâåðêà äîñòèæåíèÿ êóðñîðîì
CP 7 ; ëåâîé ãðàíèöû òàáëèöû
JR C,KEYS
CALL RESCUR
DEC C
DEC C
CALL SETCUR
JR KEYS
; Ïåðåìåùåíèå êóðñîðà ââåðõ
UP LD A,B ;ïðîâåðêà äîñòèæåíèÿ êóðñîðîì
CP 6 ; âåðõíåé ãðàíèöû òàáëèöû
JR C,KEYS
CALL RESCUR
DEC B
DEC B
CALL SETCUR
JR KEYS
; Ïåðåìåùåíèå êóðñîðà âíèç
DOWN LD A,B ;ïðîâåðêà äîñòèæåíèÿ êóðñîðîì
CP 11 ; íèæíåé ãðàíèöû òàáëèöû
JR NC,KEYS
CALL RESCUR
INC B
INC B
CALL SETCUR
JR KEYS
; Âûáîð ñèìâîëà, êîòîðûé çàòåì áóäåò íàïå÷àòàí â ñòðîêå èëè âûáîð
; ôóíêöèè äëÿ ðåäàêòèðîâàíèÿ ýòîé ñòðîêè
SELECT PUSH BC
PUSH DE
CALL SND ;çâóêîâîé ñèãíàë, èçäàâàåìûé ïðè
; ïåðåìåùåíèè ñèìâîëà èç òàáëèöû â
; íàáèðàåìóþ ñòðîêó
POP DE
POP BC
LD A,B
CP 11
JR NZ,MOVE ;ïå÷àòü ñèìâîëà
LD A,C
CP 20
JR Z,DELETE ;óäàëåíèå ñèìâîëà â ñòðîêå
CP 22
JR Z,SPACE ;ïå÷àòü ïðîáåëà â ñòðîêå
CP 24
RET Z ;âûõîä èç ïðîãðàììû
; Ïåðåìåùàåì ñèìâîë èç òàáëèöû â íàáèðàåìóþ ñòðîêó è ñìåùàåì êóðñîð
; íà ïîçèöèþ âïðàâî, ïðè ýòîì äåëàåì ïðîâåðêó òîãî, ÷òîáû ñèìâîë
; íå âûøåë çà çàäàííûå ãðàíèöû ñòðîêè (ñëåâà è ñïðàâà).
MOVE LD A,E
CP 20
JP NC,KEYS
LD D,0
PUSH BC
PUSH DE
LD A,B ;ïî âåðòèêàëüíîé êîîðäèíàòå êóðñîðà
; îïðåäåëÿåì àäðåñ äàííûõ ñòðîêè
; òàáëèöû (STR1, STR2, STR3 èëè STR4)
SUB 5
LD HL,D_STR
LD E,A
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
EX DE,HL
LD A,C ;ïî ãîðèçîíòàëüíîé êîîðäèíàòå íàõîäèì
; êîä ñèìâîëà â áëîêå äàííûõ
SUB 6
LD C,A
LD B,0
ADD HL,BC
POP DE
POP BC
LD A,(HL) ;ïîìåùàåì êîä ñèìâîëà â A
LD HL,NAME ;îïðåäåëÿåì àäðåñ â ñòðîêå NAME
ADD HL,DE ; äëÿ ââîäà ñèìâîëà
LD (HL),A ;ïîìåùàåì ñèìâîë â ñòðîêó ââîäà
CALL PR_STR ;âûâîäèì ñòðîêó ââîäà íà ýêðàí
INC E ;ñìåùàåì ïîçèöèþ ââîäà âïåðåä
JP KEYS
; Óäàëåíèå íåïðàâèëüíî íàáðàííîãî ñèìâîëà
DELETE LD A,E ;ïðîâåðêà äîñòèæåíèÿ íà÷àëà ñòðîêè ââîäà
AND A
JP Z,KEYS
DEC E ;óìåíüøàåì ïîçèöèþ ââîäà
LD D,0
LD HL,NAME
ADD HL,DE
LD (HL)," " ;çàìåíÿåì óäàëÿåìûé ñèìâîë ïðîáåëîì
CALL PR_STR
JP KEYS
; Ââîä ïðîáåëà
SPACE LD A,E ;ïðîâåðêà äîñòèæåíèÿ êîíöà ñòðîêè ââîäà
CP 20
JP NC,KEYS
LD D,0
LD HL,NAME
ADD HL,DE
LD (HL)," "
CALL PR_STR
INC E ;óâåëè÷èâàåì ïîçèöèþ ââîäà
JP KEYS
; Âûâîä êóðñîðà èçìåíåíèåì áàéòà àòðèáóòîâ
RESCUR LD A,68 ;PAPER 0, INK 4, BRIGHT 1
JR PRATTR
; Óäàëåíèå êóðñîðà âîññòàíîâëåíèåì áàéòà àòðèáóòîâ
SETCUR LD A,79 ;PAPER 1, INK 7, BRIGHT 1
; Âû÷èñëÿåì àäðåñ àòðèáóòîâ çíàêîìåñòà è çàíîñèì
; ïî ýòîìó àäðåñó áàéò èç àêêóìóëÿòîðà
PRATTR LD L,B
LD H,0
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
PUSH AF
LD A,H
ADD A,#58
LD H,A
LD A,L
ADD A,C
LD L,A
POP AF
LD (HL),A
RET
; Ïîäïðîãðàììà ïå÷àòè òàáëèöû ñèìâîëîâ
TABL LD DE,STR
LD BC,LENSTR
JP 8252
; Ïîäïðîãðàììà ïå÷àòè ââåäåííîé ñòðîêè
PR_STR PUSH BC
PUSH DE
LD DE,STR5
LD BC,LENLIN
CALL 8252
POP DE
POP BC
RET
; Ïîäïðîãðàììà ðèñîâàíèÿ ðàìêè
LINES EXX
PUSH HL
LD A,66
LD (23695),A
LD BC,#8A2C ;B = 138, C = 44
CALL 8933
LD DE,#101
LD BC,160 ;B = 0, C = 160
CALL 9402
LD DE,#FF01
LD BC,#3D00 ;B = 61, C = 0
CALL 9402
LD DE,#1FF
LD BC,160
CALL 9402
LD DE,#101
LD BC,#3D00
CALL 9402
POP HL
EXX
RET
; Êîðîòêèé çâóêîâîé ñèãíàë
SND LD B,30
LD HL,350
LD DE,2
SND1 PUSH BC
PUSH DE
PUSH HL
CALL 949
POP HL
POP DE
POP BC
SBC HL,DE
DJNZ SND1
RET
; Äàííûå òàáëèöû ñèìâîëîâ
STR DEFB 22,5,6
STR1 DEFM "1 2 3 4 5 6 7 8 9 0" ;ñèìâîëû ÷åðåç îäèí ïðîáåë
DEFB 22,7,6
STR2 DEFM "A B C D E F G H I J"
DEFB 22,9,6
STR3 DEFM "K L M N O P Q R S T"
DEFB 22,11,6
STR4 DEFM "U V W X Y Z . d s e"
STR5 DEFB 22,19,5,16,5,">",16,2
NAME DEFM "····················"
DEFB 16,5,"<"
LENSTR EQU $-STR ;äëèíà ñòðîêè äëÿ ïå÷àòè òàáëèöû
LENLIN EQU $-STR5 ;äëèíà ñòðîêè ââîäà èìåíè
; Àäðåñà äàííûõ ñèìâîëîâ â òàáëèöå
D_STR DEFW STR1,STR2,STR3,STR4
savesna "probe.sna",#6000
---------- Post added at 17:11 ---------- Previous post was at 16:57 ----------
только на пробел программа тоже не реагирует.только цифры ...
Ну прочитай в той книжке, по который ты набиваешь, про прерывания.
Прикол в том, что в этой переменной (KSTATE вроде она называется) данные появляются посредством бейсиковых прерываний (раз в прерывание обновляются данные). При старте из снапшота бейсик убит, и (я чет не помню, откуда там берется таблица соответствий кодов клавиш) по этой причине коды клавиш, которые суются в #5c08 - другие, а не те, какие надо, видимо только цифровым повезло, правильные коды вставляются. Дальше там у тебя в книжке должно быть написано про нормальную обработку клавиш через порт #fe, вот им лучше пользуйся, наиболее здравый метод.
>про нормальную обработку клавиш через порт #fe
Угу, про ПЗУ лучше вообще не вспоминать, оно так гораздо проще выходит =)
После команды LD (23560),A поставь команду HALT - дождаться прерывания. А EI, если до этого не было DI, ничего не дает.
А вообще, лучше применяй из этой же книжки другую процедуру опроса клавиш - по портам, а не по кодам клавиш.
Прикрутил 3 эмулятора под запуск снапшота. Spectaculator, EmuzWin, Unrel
Как написать бат файл для эмуляторов EmuzWin, Unrel - чтоб не открывался второй, третий и т.д. эмулятор, а открывался как Spectaculator однократно? Возможно это?
Как вариант, можно перед запуском снапшота убивать уже запущенный процесс командой taskkill, напримерКод:taskkill /F /IM emuzwin.exe
А передать аргумент (имя снапшота) в уже открытый эмулятор, или я глупость говорю
В общем, проверка в эмуляторе EmuZWin показала, что буквы нужно вставлять обязательно заглавные и в апострофах, а не в кавычках. А лучше еще - коды нужных клавиш в числовом виде. Тогда всё нормально работает.
Команду HALT ставить не обязательно, но я ставлю, т.к. высер
XOR A
LD (23560),A
WAIT LD A,(23560)
AND A
JR Z,WAIT
больно уж крив. И идиоту понятно, что условие JR Z,WAIT много-много раз успеет выполниться, прежде чем распознается наконец клавиша по умалчиваемому прерыванию.
EmuZWin cкачал эмуль -ассемблер в нём мне нравиться .буду разбираться с ним.думаю тему новую создать по этому эмулю для вопросов.есть только 1 проблема - на работе winXP работает всё как нада ,а дома WIN7 -эмуль запускается но в окне его не видно эмуляции самого спектрума (окно просто молоко).
Такая тема уже есть, можно туда писать: http://zx.pk.ru/showthread.php?t=1345&highlight=emuzwin
А насчет Win7 не знаю. В свойствах файла emuzwin.exe может можно поставить совместимость?
ASAM Compiler By Rob F. / Entire Group
не скачивается. Есть у когонить киньте на Asd1995sse@yandex.ru
Добавил в первый пост компилятор ASAM
denpopov, используй sjasm
denpopov, ммм?
если не понимает out (C),a
то либо ты гдето неправильно написал либо глючит сам компилятор
А он не знает, что есть такая команда, для него все ауты - это только в порт типа OUT (255),A
Ну запиши опкод на бумажке для этого аута тогда, раз он нужен. Вообще если влом смотреть байткод - открыл какой-нибудь Unreal и в дебаггере написал команду, слева посмотрел опкод.
denpopov, когда-то на GENS'е не писал? Он много команд не знал, но разве это нас останавливало?:)
Попробовал связку Spectaculator + Crimson Editor 3.70 Release + SjASMPlus Z80 кросс ассемблер, все настроил как GM BIT выше подробно написал, но не пойму как полученный снапшот запустить на эмуляторе, у меня после нажатия F1 запускается Spectaculator, но ругается на снапшот-файл и фигвам, потому что это не объектный файл типа tap, а обычный текстовый. Наверняка что-то у меня с руками, подскажите, что я не так делаю, очень хочется чтобы в эмуляторе можно было проверять свои художества .
Заранее благодарен за объяснения.
- - - Добавлено - - -
Попробовал EnumZWin, запустил в нем Assembler, скомпилировал, зашел в debug, но не хватает у меня мозгов КАК запустить мой asm код в эмуляторе EmuZWin, чтобы увидеть результат!!! Подскажите как запустить ассемблерный код, или его надо сначала как то в tap файл превратить?
ZX_КМV, так скомпилируй и на выходе сделай что-то типа
savesna "dcdd.sna", start
старт - это точка входа
org #8000
start
di
ld sp,#bfff
и потом уже открывай сна в эмуле
В нужном месте программы нужно написать:
entrypoint $
Что переводится: "Точка входа тут".
После компиляции сразу запуститься с нужного места. (только с паузы сняться)
И консольное окно с результатом компиляции внизу спрятано, если есть ошибки. Двойной щёлк на ошибке - попадаем на неё в тексте.
А если в дебагере, то PC нужно подредактировать на начало исполнения, но это муторнее.