AFAIK, INF является исторически сложившейся мнемоникой это операции.
Вид для печати
Есть еще одна подобная команда-
ED 71 out (c),0
можешь посмотреть как ее принимают (и принимают ли вообще) разные ассемблеры
GENS её видит как OUT (C),(HL)
насчёт INF не помню но вроде так же IN (C),(HL)
Ну по логике - там же есть три бита которые отвечают за трансляцию регистров, для восьмибитовых там идут 000b - b, 001b - c,и так далее для d,e,h,l,(hl),a
вот тот самый out (c),0 по идее должен выглядеть как out (c),(hl)
Только видимо МП как то особо в этом случае транслирует команду, получая всегда из (hl) 0.
Ткните носом плз что не так... Мозги кипят уже.. SjAsm несохраняет ни .sna ни savebin(более предпочтительно):
ниччо нипанимаю! :v2_mad:Код:DEVICE ZXSPECTRUM128
org 32768
begin jr $
ld l,a: add a,a: add a,a: add a,l
add a,low lvl_tab
ld l,a
adc a,high lvl_tab
sub l: ld h,a : ld (copy_0+1),sp: ld sp,hl
ld hl,#f859: pop bc
exx
pop hl: ld bc,#7ffd
pop de: ld d,#10
copy_0 ld sp,#3131
copy out (C),e: ld a,(hl): dec hl: out (c),d
exx
ld (hl),a: cpd
exx
jp pe,copy
exx
ret
lvl_tab
dw #2395,(#bfff+#2395): db #11
dw #20db,(#bfff+#20db): db #13
dw #1ee4,(#e0da+#1ee4): db #13
dw #20f2,(#bfff+#20f2): db #14
dw #16b4,(#bfff+#16b4): db #16
dw #0f32,(#e394+#0f32): db #11
dw #1f68,(#e0f1+#1f68): db #14
dw #1959,(#d6b3+#1f68): db #16
;2bytes(lenght),2bytes(lvl adress in ram),1byte(ram)
SAVESNA "game.sna",begin
;savebin "check.C",#8000,#0100
по умолчанию сиджасм работает в режиме, когда в начале строки должна быть только метка - если же написать команду или директиву выдается ошибка. нужно либо компилировать с ключом (не вникал с каким =) ), либо просто ставить пробелы перед командами.
в данном случае ошибка в том что SAVESNA стоит в начале строки - поставь пробел и все заработает...
кстати - dw #1f68,(#e0f1+#1f68): db #14 - эта строка выдает ошибку из-за переполнения.
вот рабочий пример
Спасибо! :v2_thumb: А я думал и что это он "save.sna" меткой всё обзывает! :v2_lol:
Может кто-нибудь ещё посоветует www с хорошим калькулятором?(hex/dec/bin) :v2_wink2:
Вчера помог одному иностранцу, не спектрумисту, насчет разработки программы в обычном режиме кросс-компилятора двумя макросами для SjASMPlus:
Чтобы не пропадало, в общем.Код:MACRO PADORG addr
; add padding
IF $ < addr
BLOCK addr-$
ENDIF
ORG addr
ENDM
MACRO PADORG2 addr
; add padding + display warning
IF $ > addr
; no padding
DISPLAY /L, "Warning! PADORG failed! ", $, " is more than ", addr
ELSE
; add padding
BLOCK addr-$
ENDIF
ORG addr
ENDM
присоединяюсь к ожиданию!!! кстати кто-то обещал пофиксить глюк с 48ми снапшотами =) заранее спасибо!
Новая версия - SjASMPlus 1.07 RC6. Содержит множество багфиксов. Качать с сайта: [...вышла новая версия...]
Модули http://zx.pk.ru/showthread.php?t=392...EE%E4%F3%EB%E8 поддержать не планируется?
Нет, да и в этой теме не нашел ничего конкретного.
Для меня был бы интереснее какой-нибудь редактор кода, с функцией аля "Code Insight", который бы анализировал исходный код на наличие специальных комментариев как в Javadoc/phpDoc и какие регистры использует конкрентая процедура(назовем так). Например:
Код:/**
* Вывод спрайта 2хX.
*
* @in a Количество строк
* @in bc Адрес спрайта
* @in h Y-координата
* @in l Х-координата
* @out a Не вышел ли спрайт за границу экрана?
*/
PrintSprite2xX:
;... код
хм....Код:C:\Temp>sjasmplus.exe
SjASMPlus Z80/R800 Cross-Assembler v1.07 RC6 (build 29-03-2008)
based on code of SjASM by Sjoerd Mastijn / http://www.xl2s.tk /
Copyright 2004-2008 by Aprisobal / http://sjasmplus.sf.net / my@aprisobal.by /
Usage:
sjasmplus [options] sourcefile(s)
Option flags as follows:
--help Help information (you see it)
-i<path> or -I<path> or --inc=<path>
Include path
--lst=<filename> Save listing to <filename>
--lstlab Enable label table in listing
--sym=<filename> Save symbols list to <filename>
--exp=<filename> Save exports to <filename> (see EXPORT pseudo-op)
--raw=<filename> Save all output to <filename> ignoring OUTPUT pseudo-ops
Note: use OUTPUT, LUA/ENDLUA and other pseudo-ops to control output
Logging:
--nologo Do not show startup message
--msg=error Show only error messages
--msg=all Show all messages (by default)
--fullpath Show full path to error file
Other:
--reversepop Enable reverse POP order (as in base SjASM version)
--dirbol Enable processing directives from the beginning of line
--dos866 Encode from Windows codepage to DOS 866 (Cyrillic)
C:\Temp>
может я конечно не туда куда-то смотрю ? :cool:Код:D:\My ZX\Projects\16colors>sjasmplus.exe main.asm
SjASMPlus Z80/R800 Cross-Assembler v1.07 RC6 (build 29-03-2008)
Pass 1 complete (0 errors)
Pass 2 complete (0 errors)
Pass 3 complete
Errors: 0, warnings: 0, compiled: 140 lines, work time: 0.047 seconds
D:\My ZX\Projects\16colors>
Новая версия SjASMPlus 1.07 RC7. Исправлен ряд недочетов, добавлены новые директивы IFUSED/IFNUSED(по аналогии с ZXASM), с помощью которых можно создать библиотеку полезных подпрограмм, каждая из которых подключается только тогда, когда используется где-нибудь в коде программы.
Качать: http://sjasmplus.sourceforge.net
Спасибо, это действительно нужные команды в хозяйстве! :v2_wink2:
не ассемблит после ccz80.
похоже что то насчет переменных описанных после применения.
это проблема похоже вообще sjasm.
pasmo кстати может
а вообще отличный ассемблер. хватит его улучшать :)
+1
я кстати остановил свой выбор на одной достаточно неновой версии...
очень нравится - ещё без всяких указателей типа памяти... очень долго мучился чтобы выходной бинарник занимал ровно 16384 - но таки добился...
http://zx.pk.ru/showthread.php?t=7554 - вот тута вот всё оно лежит вместе с исходом и эмулем настроенным... :)
сорри за оффтоп....
Скоро появится новая директива SAVETAP(сохранение в tap файлы), которая, правда, кроме как для preproduction development целей не сойдет из-за невозможности изменения загрузчика кодов. Зато в ней будет поддержка систем вплоть до 1024кб.
Да, знаю, сам пробовал. Но ccz80 генерирует такой исходник, который и на ни одном спектрум-нативном ассемблере не пройдет.
Не стоит на этом заморачиваться, тем более, что автор обещал сделать ccz80 встроенный компилятор ассемблера.
гм... странно, а там разве не так же как в SAVETRD ?
как например в монолоадере ?
сорри на работе нет сорцов дверей, так бы глянул там...
Если не работает, значит глюк, надо править!
Код:;Creater mono loader
;nikphe^ANY 2oo1
;remixed for SjASMPlus by Aprisobal 2006
DEVICE ZXSPECTRUM128
MODULE MonoLoader
ORG 16384 ;чтобы не забивала память, если захотите использовать прямо в программе
DISP 23867
Basic DW #100,EndBasic-Begin
Begin DW #30FD,#E,#B300,#5F,#F93A,#30C0,#E,#5300,#5D,#EA3A
DI
;очистка экрана
XOR A
OUT (-2),A
LD HL,#5AFF
LD (HL),A
OR (HL)
DEC HL
JR Z,$-3
LD HL,#C000-1 ;адрес загрузки
LD B,4 ;количество секторов
CALL Load
JP #C000-1 ;старт вашей программы
Load LD DE,(#5CF4)
LD C,#05
JP #3D13
DB #D
EndBasic
ENT
EMPTYTRD "Worm255.trd"
SAVETRD "Worm255.trd","worm255.B",16384,EndBasic-Basic
DISPLAY "Monoloader saved!"
ENDMODULE
Worm255
INCBIN "worm255.out"
SAVETRD "worm255.trd","worm255.C",Worm255,$-Worm255
DISPLAY "Worm255 saved!"
DISPLAY "Run worm255.trd in your favourite emulator."
асм хороший, быстрый, юзаю. Нашел такой косячок:
на выходе имеем снапшот, с текстом в нулевой странице со смещением 0.Код:device zxspectrum128
org 0
main
db "test"
savesna "test.sna", main
мда, вообще-то можно трактовать двояко. Но, имхо, в режиме zxspectrum128 адреса 0x0000-0x3fff - это ПЗУ, соответственно в снапшот эти данные попадать не должны.