Вход

Просмотр полной версии : SjASMPlus Z80 кросс ассемблер



Страницы : 1 2 3 [4] 5 6 7

Shadow Maker
18.09.2012, 15:19
Ну батники необязательны для автосборщика. Есть же shellexec

jerri
02.12.2012, 00:46
вопрос назрел по SjAsm

есть snap128
как заставить sjasm создать снап с включенной страницой 7?

info/SNA (http://speccy.info/SNA)
Версия для 128K

Файл имеет размер 131103 или 147487 байт. Содержимое текущего выбранного банка ОЗУ сохраняется в любом случае, даже если это банк 2 или 5 - в этом случае соответствующий банк хранится в файле дважды. Банки в конце файла сохраняются в порядке возрастания номеров, но только если они не сохранены в первой части файла. Например, если в первой части файла сохранены банки 5, 2 и 4 - в конце файла должны быть сохранены банки 0, 1, 3, 6 и 7; если в первой части сохранены банки 5, 2 и 5 - в конце файла должны находится банки 0, 1, 3, 4, 6 и 7.
Смещение Размер Назначение
0 27 Соответствует версии для 48K
27 16384 Содержимое 5 банка ОЗУ
16411 16384 Содержимое 2 банка ОЗУ
32795 16384 Содержимое текущего банка ОЗУ, отображаемого в адресах 49152..65535
49179 2 Регистровая пара PC
49181 1 Состояние порта #7FFD
49182 1 Выбор ПЗУ TR-DOS (0 - неактивно, 1 - активно)
49183 16384*n Оставшиеся банки ОЗУ в порядке возрастания номеров

GM BIT
20.02.2013, 19:07
Не могу понять, компилит
---------- Capture Output ----------
> "D:\Ìèøà\ZX\sjasm\sjasmplus-win32-1.07-rc7\sjasmplus.exe" logo1.txt
SjASMPlus Z80 Cross-Assembler v1.07 RC7 (build 02-04-2008)
Pass 1 complete (0 errors)
Pass 2 complete (0 errors)
Pass 3 complete
Errors: 0, warnings: 0, compiled: 112 lines, work time: 0.000 seconds

> Terminated with exit code 0.

в конце программы строка
savesna "logo1.sna",main

много раз выгружал snap, сейчас не хочет :(
было у кого такое?

---------- Post added at 18:07 ---------- Previous post was at 17:53 ----------

вот такой код:
dup 7 ld (hl),a: inc h edup: ld (hl),a
был заменен на:
dup 7: ld (hl),a: inc h: edup: ld (hl),a
и все выгрузилось

Двоеточие имеют смысл? ошибок же не было?

GM BIT
21.02.2013, 17:32
Фича такая))
Корявая фича, баг - это!!

GM BIT
21.02.2013, 22:02
Да блин пол часа искал ошибку. Мне-то хочется чтоб текст был покороче (когда в одну строку всё пишешь, то что и перцу ясно), да и ещё к emuzwin'у привык там пробел а не двоеточие
А так нареканий нет, но я ещё со страницами памяти не работал

GM BIT
12.03.2013, 18:33
Есть код


pop hl
ld hl,(16384)
pop hl
ld hl,(16386)
pop hl
ld hl,(16388)
pop hl
ld hl,(16390)

вообщем 16 раз это повторяется

Можно ли в Sjasm'е написать как-то короче?
что-то подобное:


dup 16
pop hl
ld hl,(16384+n*2)
edup

NovaStorm
12.03.2013, 21:34
Ну можно как-то так...
lua allpass
for addr=0x4000,0x4000+2*15,2 do
_pl(" pop hl")
_pl(" ld hl,("..addr..")")
end
endlua

psb
12.03.2013, 21:35
Ну можно как-то так...
можно, наверное, но вот только нафига извращаться - хз...

breeze
12.03.2013, 21:39
вообщем 16 раз это повторяется


ээээ… помнится это называлось «размазать по стеку» и генерилось прямо перед исполнением, нэ? :dizzy_mad_old:

NovaStorm
12.03.2013, 21:50
но вот только нафига извращаться - хз...
Я так пересылку экрана делал и мне нравится =)

jerri
12.03.2013, 22:32
Есть код


pop hl
ld hl,(16384)
pop hl
ld hl,(16386)
pop hl
ld hl,(16388)
pop hl
ld hl,(16390)

вообщем 16 раз это повторяется

Можно ли в Sjasm'е написать как-то короче?
что-то подобное:


dup 16
pop hl
ld hl,(16384+n*2)
edup



count=16384
dup 16
pop hl
ld (count),hl
count+2
edup

Лас
12.03.2013, 23:14
Есть код


pop hl
ld hl,(16384)
pop hl
ld hl,(16386)
pop hl
ld hl,(16388)
pop hl
ld hl,(16390)

Индус в треде.

psb
13.03.2013, 01:32
Я так пересылку экрана делал и мне нравится =)
я не про смысл процедуры, а про извраты с макросами и прочим таким. всегда этот код генерили динамически мааленькой программкой. так потом и пакуется в 1050 раз лучше.

GM BIT
13.03.2013, 05:02
можно, наверное, но вот только нафига извращаться - хз...

всегда этот код генерили динамически мааленькой программкой
Смысл в том чтоб не писать эту маленькую програмку. Я просто, простой пример привел

---------- Post added at 03:53 ---------- Previous post was at 03:51 ----------



count=16384
dup 16
pop hl
ld (count),hl
count+2
edup


---------- Post added at 03:54 ---------- Previous post was at 03:53 ----------

Как все просто, самое оно, спасибо

---------- Post added at 03:59 ---------- Previous post was at 03:54 ----------


ээээ… помнится это называлось «размазать по стеку» и генерилось прямо перед исполнением, нэ?
Лень писать декранчеры, чтоб проверить "расписанные" процедуры вывода, т.к. за момент написания они 100раз переделываются и постоянно править декранчер просто лень :)

---------- Post added at 04:02 ---------- Previous post was at 03:59 ----------

jerri, не работает :(

NovaStorm
13.03.2013, 08:37
jerri, не работает :(

А если так? (Не проверял)


count=16384
dup 16
pop hl
ld (count),hl
count=count+2
edup

Переопределение меток в sjasm какое-то мутное. И ворнингов он нормальных никогда не даёт =\

jerri
13.03.2013, 09:10
jerri, не работает :(

ага проверил


count=16384
dup 16
pop hl
ld (count),hl
count=count+2
edup

работает полностью
генерит то что нужно

psb
13.03.2013, 13:18
Лень писать декранчеры, чтоб проверить "расписанные" процедуры вывода, т.к. за момент написания они 100раз переделываются и постоянно править декранчер просто лень
а постоянно править макросы - не лень:) и не лень 2 дня выяснять, как бы это так замутить...

GM BIT
13.03.2013, 18:35
и не лень 2 дня выяснять, как бы это так замутить...
Не лень, просто на Sjasm как месяц сел, и хочется больше узнать чего он может.
Лень перечитывать 780 сообщений :)

Hacker VBI
18.03.2013, 17:05
А что это за гон?
pop hl
ld hl,(16384)
pop hl
ld hl,(16386)
pop hl
ld hl,(16388)
pop hl
ld hl,(16390)

Хитрая задержка, с декранчем? ;)

perestoronin
29.09.2013, 00:42
SjASMPlus основан на SjASM v0.39.
Давно уже доступна версия SjASM v0.42 http://home.online.nl/smastijn/sjasm.html
0.42 не совместима с 0.39.
Я создал для себя ebuild для Gentoo: http://portage.perestoroniny.ru/dev-embedded/sjasm/ попутно решил несложную проблему, мешавшую собирать SjASM с новыми версиями компиляторов
http://portage.perestoroniny.ru/dev-embedded/sjasm/files/sjasm-039g-gcc-4.8.1.patch
http://portage.perestoroniny.ru/dev-embedded/sjasm/files/sjasm-042c-gcc-4.8.1.patch
Никто не обновлял SjASM в SjASMPlus до актуальной версии?

jerri
29.09.2013, 01:14
perestoronin, что нового то?
стоит переходить?

perestoronin
29.09.2013, 01:22
что нового то?
стоит переходить?
Изменения понятны без перевода, субъективно по исходникам стал в два раза больше, думаю нужно опробывать, но и я старой версией не пользовался, и давно уже ничего не делал для Z80 (с 90х):


Sjasm 0.42 is not 100% compatible with version 0.3x. You can use old SjASM 0.39g6, if that is a problem.
Features:

local labels
modules
macros
file include (source and binary)
conditional assembly
32 bit expression evaluation
storage maps
structures
undocumented Z80 opcodes

OK, that is just the old feature list, but you get the idea. Sjasm is a Z80 assembler.

Known bugs:

Nothing special. Maybe you know some spectacular Sjasm failures?

introspec
29.09.2013, 01:26
Все эти фичи были уже в третьей версии. Вот список изменений из документации 4-й версии:

Differences with SjASM version 0.3

Sjasm version 0.4 is largely rewritten, and in some places the syntax and meaning of commands and operators has changed compared to previous versions of Sjasm. Some differences:

New name: Sjasm instead of SjASM.
DC, DZ, ABYTEC and so on only accept strings.
Character constants are 8 bit. No LD HL,'ab' anymore.
Structures cannot be nested.
The "16 bit fake instructions" like LD HL,DE or LDI A,(HL) have been replaced or removed.
PUSH and POP can have only one operand.
The way to update files has changed.
Commands cannot start with a dot.
Command line options have changed.

psb
29.09.2013, 03:48
я бы не рискнул переходить...

perestoronin
29.09.2013, 04:00
я бы не рискнул переходить...
рисковать и не нужно, старая версия бажнее чем новая, по крайней мере пока я собирал 0.42 ошибок компиляции было меньше, и код чище, а вот 0.39g6 более бажный оказался (11 файлов против 5 потребовалось поправить).

Выложите пожалуйста примеры для тестов обеих версий кроссассембрера sjasm (0.39g6 и 0.42с), как отлажу и выловлю на ваших примерах ошибки этих кроссассемблеров, можно будет замахнуться и на выпуск свой версии (обозначу её как 1.0.8) SjASMPlus :). А когда пойму что за наработки легли в основу этих компиляторов, то смогу выпустить и новый компилятор для Z80, созданный на современных технологиях (flex, bison), а не полностью на тупиковом c++.

Shadow Maker
29.09.2013, 14:45
Как будто кто-то вообще пользуется чистый Sjasm для работы, чтобы еще и тесты иметь... Все пишут на адаптированной версии.

psb
29.09.2013, 16:51
старая версия бажнее чем новая
наверняка. но в ней скорее всего нет специфичных для спека фич (для работы с памятью, образами, снапшотами). +поменяли синтаксис, зарезав какие-то команды... чем больше таких мелочей, тем сомнительнее затея... старый sjasmplus хоть и бажный, но не очень критично, а в новом никаких киллерфич не замечено.

NovaStorm
29.09.2013, 18:49
Выложите пожалуйста примеры
SjASMPlus бывает сильно плющит при определении места ошибки, при отсутствии конца макроса или модуля, метки в макросах - вообще минное поле, поэтому предпочитаю в макрах использовать метки относительные. Но всё это сделать лучше при сохранении функциональности и гибкости врядли возможно, да и как psb сказал, оно не так сильно мешает.

А когда пойму что за наработки легли в основу этих компиляторов, то смогу выпустить и новый компилятор для Z80, созданный на современных технологиях (flex, bison)
Да, современных, лет по пятнадцать всего гнутым реализациям, а оригиналы вообще в 75м и 70м годах сделали =)

а не полностью на тупиковом c++.
То, что лексер с парсером C(могут и ++) код генерят не смущает? Запили уж на хаскеле.

jerri
29.09.2013, 19:08
Выложите пожалуйста примеры для тестов обеих версий кроссассембрера sjasm (0.39g6 и 0.42с), как отлажу и выловлю на ваших примерах ошибки этих кроссассемблеров, можно будет замахнуться и на выпуск свой версии (обозначу её как 1.0.8) SjASMPlus :). А когда пойму что за наработки легли в основу этих компиляторов, то смогу выпустить и новый компилятор для Z80, созданный на современных технологиях (flex, bison), а не полностью на тупиковом c++.

А можешь реализовать компилятор Аласма на ПЦ? Я вот начинал, но как то не осилил. А он пожалуй помощнее Жасма.

perestoronin
29.09.2013, 19:29
А можешь
Со временем, не всё так быстро, думаю всё смогу, с Вашей же помощью. Точнее МЫ СМОЖЕМ, а я один вряд ли ;)
Вот уже готова сборка по мотивам этой темы 1.0.7 под Gentoo http://portage.perestoroniny.ru/dev-embedded/sjasmplus/
PS. Windows я не использую уже несколько лет, только на работе приходится что-то там под ней "тыкать".

Запили уж на хаскеле.
Для меня эта тема новая и перспективная. Но одному вряд ли под силу :(
Сначала сделаем на всяких flex и bison, потом и до ФП доберёмся. Мысль верная, конечная цель намечена правильно.

Alex Rider
29.09.2013, 19:34
PS. Windows я не использую уже несколько лет, только на работе приходится что-то там под ней "тыкать".
И, тем не менее,Win-сборочки-таки-нужны.

perestoronin
29.09.2013, 19:53
Win-сборочки-таки-нужны
Согласен нужны, но частично патчи применить к проектам под win думаю смогут все. А мне просто даже негде собирать win-сборки.

Alex Rider
29.09.2013, 20:00
частично патчи применить к проектам под win думаю смогут все.
Не-не-не, тут проблема не в умении, а в желании. Ты делаешь продукт, который пока сильно явными преимуществами не обладает. Если ты еще и бэта-тестирование сделаешь сложным, ты вообще останешься единственным тестировщиком :) На форуме пролетало 100500 кроссплатформенных проектов, ведущихся на UNIX со сборками под Windows - поспрошай у народа как оно делается. Навскидку вспоминаются ZXTune и Xpeccy.

NovaStorm
29.09.2013, 20:44
perestoronin, для gentoo, если что, есть windows prefix, не знаю, правда, насколько оно работоспособно, пока mingw и msys хватает.
https://www.youtube.com/watch?v=az1RR60s5n4

psb
29.09.2013, 20:50
метки в макросах - вообще минное поле, поэтому предпочитаю в макрах использовать метки относительные.
ну, метки в макрах - дело ожидаемое. а вот временные метки в них глючат ужасно... в доке написано - не юзать их:) метки с точкой работают ок.


А когда пойму что за наработки легли в основу этих компиляторов, то смогу выпустить и новый компилятор для Z80, созданный на современных технологиях (flex, bison), а не полностью на тупиковом c++.
имхо, для такого синтаксиса флекс и бизон нафиг не нужны. как из пушки по воробьям.

perestoronin
29.09.2013, 21:05
делаешь продукт
Я лишь подхватываю то, что уже сделано, и адаптирую под свои условия (Gentoo вместо Win).

для такого синтаксиса флекс и бизон
Не нужен мне код на c++, который невозможно толком поддерживать. А простенькие описания можно будет легко поддерживать и менять. Посмотрим, что из этой затеи получится, я пока не могу сделать таких далеко идущих выводов, Вам наверное виднее, но я останусь при своём мнении.

Win мне не нужен, с++ тоже. От них я буду уходить при любой возможности, на столько - на сколько это получится. Обратно не зовите на win и с++, не пойду.

NovaStorm
29.09.2013, 21:11
ну, метки в макрах - дело ожидаемое. а вот временные метки в них глючат ужасно... в доке написано - не юзать их:) метки с точкой работают ок.
А у меня 1,2,3... f|b в макрах без проблем отрабатывают =)
Правда недавно столкнулся со всем сразу - макрос, условная компиляция и метки, пришлось отлаживать практически наощупь, выхлоп ассемблера был крайне неинформативен.

psb
29.09.2013, 21:16
А можешь реализовать компилятор Аласма на ПЦ? Я вот начинал, но как то не осилил. А он пожалуй помощнее Жасма.
возможно асм Robus'а уделает аласм, а кто-то его курил?


Не нужен мне код на c++, который невозможно толком поддерживать.
это не зависит от флекса и бизона, кроме того, флекс и бизон - это ГЕНЕРАТОРЫ парсеров, к ним надо дописывать код на том же си/си++. или есть другие варианты?

---------- Post added at 23:16 ---------- Previous post was at 23:15 ----------


А у меня 1,2,3... f|b в макрах без проблем отрабатывают =)
вот недавно ставил эксперимент, у меня вперед прыгал на метку только из СЛЕДУЮЩЕГО такого макроса... т.е. типа все скомпилилось, но код неправильный... может у меня не самая последняя версия, хз.

Vitamin
29.09.2013, 21:18
Win мне не нужен, с++ тоже. От них я буду уходить при любой возможности, на столько - на сколько это получится. Обратно не зовите на win и с++, не пойду.
Смешение кислого и длинного. Если пишешь на ЯВУ, то пофиг на платформу.

Alex Rider
29.09.2013, 21:24
Win мне не нужен
У, тогда мне тут с тобой не по пути...

perestoronin
29.09.2013, 21:48
Если пишешь на ЯВУ
Её только Гугл сейчас палочкой.
Не пишу я на Жабе и на с++ тоже желания нет кодить.
Поэтому и буду наработки "вытягивать" из sjasm и sjasmplus и думать как их использовать по возможности без c++ или с минимальными вставками с++.

У, тогда мне тут с тобой не по пути...
Патчи, как будут готовы, для update c 0.39 на 0.42 сгодятся на любую платформу.

Alex Rider
29.09.2013, 22:19
Её только Гугл сейчас палочкой.
ЯВУ = Язык высокого уровня.


Патчи, как будут готовы, для update c 0.39 на 0.42 сгодятся на любую платформу.
Что в твоем понимании есть "патч"?

perestoronin
29.09.2013, 22:26
Что в твоем понимании есть "патч"?
Результат выполнения команды diff -ru a b > my.patch

К примеру патч для сборки SjASMPlus 1.0.7 без ошибок компиляции под новыми компиляторами (в частности gcc-4.8.1 (http://gcc.gnu.org/)):
http://portage.perestoroniny.ru/dev-embedded/sjasmplus/files/sjasmplus-1.0.7-gcc-4.8.1.patch

Оригинальным архивом SjASM 0.39f не поделитесь ?

Vitamin
29.09.2013, 22:34
Её только Гугл сейчас палочкой.
Не пишу я на Жабе и на с++ тоже желания нет кодить.
facepalm.jpg

Если уж говорить о java, то это сейчас- самый популярный язык программирования, есличо.


по возможности без c++ или с минимальными вставками с++.
А на чем тогда? А то так и не понял...

perestoronin
29.09.2013, 22:42
А на чем тогда? А то так и не понял...
На языках ФП, на специализированных языках, на чём угодно, но не на c++.
Но это сейчас не так важно, важно другое :

Оригинальным архивом SjASM 0.39f не поделитесь ?

Alex Rider
29.09.2013, 23:06
Результат выполнения команды diff -ru a b > my.patch

И что мне делать с ним под Windows?

perestoronin
29.09.2013, 23:16
И что мне делать с ним под Windows?
Пока наверное ничего, просто пользоваться старой версий, т.к. этот патч предназначен для адаптации исходников старой версии SjASMPlus v1.0.7 под Gentoo.
Такая сборка уже имеется готовая для Win, ссылка на неё есть в первом сообщении этой темы.

Vitamin
29.09.2013, 23:20
На языках ФП, на специализированных языках, на чём угодно, но не на c++.
Т.е. пока ничего нет, кроме светлых мечт "взять все и переписать"?
А какие специализированные языки можно использовать?

Vitamin
30.09.2013, 07:14
Такие средства как Bison, Flex и в дальнейшем языки ФП. Других я не знаю.
Ну Bison/Flex еще понятно- у них на выходе тот же С/С++, а цель использования- уменьшить сложность парсера и вероятность ошибки. А какой смысл в ФП кроме преумножения сущностей раз не планируется полное переписывание?

Alex Rider
30.09.2013, 08:20
Пока наверное ничего, просто пользоваться старой версий, т.к. этот патч предназначен для адаптации исходников старой версии SjASMPlus v1.0.7 под Gentoo.
Вот и я о том, что мне не по пути с этой идеей.

NovaStorm
30.09.2013, 08:49
Не стоит так сразу рубить концы, патчи такого рода просто наводят порядок.

Hacker VBI
30.09.2013, 09:12
возможно асм Robus'а уделает аласм, а кто-то его курил?

асм роба поначалу как perl из-за обилия значков и точек

jerri
30.09.2013, 10:57
возможно асм Robus'а уделает аласм, а кто-то его курил?

он может и мощный в чем то, но он не подходит. слишком специфичный.
и да я столько не скурю.

psb
30.09.2013, 14:45
он может и мощный в чем то, но он не подходит. слишком специфичный.
лол, а аласм не специфичный:))
а что нужно в ужасме, чтобы аласм стал не нужен?

jerri
30.09.2013, 15:12
psb, исходники из Аласм на 90% компилятся в сжасм
но вот 10% огорчают
как то
- вложенная условная компиляция
- конструирование имен меток в макросах

;RAY 1,1,H,L,D,E,y,x
MACRO RAY
mainplus=\0 ;основное направление положительно
secplus=\1 ;побочное направление положительно
;\2=основное направление для hl
;\3=побочное направление для hl
;\4=основное направление для de
;\5=побочное направление для de
;\6=основное направление
;\7=побочное направление
;LD DE,(cur\7\6)
cur\0\1\7\6=$+1
LD DE,0
LD A,E ;основное направление
;IFN mainplus ;основное направление положительно
; CPL ;1-основное направление
; LD E,A
;ENDIF
LD LX,A ;IX=dist*cos
MULPOS
IFN secplus ;побочное направление положительно
ADD A,D ;побочное направление
LD B,A
;LD HL,(curYX)
ray\0\1\7\6_YX=$+1
LD HL,0
IFN "\6\6"-"xx"
;LD D,H,E,L
;SET mapdifbit,E
ray\0\1\7\6_YX2=$+1
LD DE,0
ELSE
LD D,H,E,L
ENDIF
JNC raynshort\0\1\7\6
INC \5 ;e/d
LD A,(DE)
RLA
JC raysec\0\1\7\6
INC \3 ;l/h
raynshort\0\1\7\6
IFN "\6\6"-"yy"
SET mapdifbit,L
ENDIF
ELSE
LD L,A
LD A,D ;побочное направление
SUB L
LD B,A
;LD HL,(curYX)
ray\0\1\7\6_YX=$+1
LD HL,0
IFN "\6\6"-"xx"
;LD D,H,E,L
;SET mapdifbit,E
ray\0\1\7\6_YX2=$+1
LD DE,0
ELSE
LD D,H,E,L
ENDIF
JNC raynshort\0\1\7\6
LD A,(DE)
RLA
JC raysec\0\1\7\6
DEC \3,\5 ;l/h,e/d
raynshort\0\1\7\6
IFN "\6\6"-"yy"
SET mapdifbit,L
ENDIF
ENDIF

raynsec\0\1\7\6
INC HX
IFN mainplus ;основное направление положительно
INC \2 ;h/l
ENDIF
LD A,(HL)
RLA
JP C,rayhlq ;b=texx
IFN mainplus ;основное направление положительно
INC \4 ;d/e
ELSE
DEC \2,\4 ;h/l,d/e
ENDIF
LD A,B
IFN secplus ;побочное направление положительно
ADD A,C
ELSE
SUB C
ENDIF
LD B,A
JNC raynsec\0\1\7\6
IFN secplus ;побочное направление положительно
INC \5 ;e/d
ENDIF
LD A,(DE)
RLA
JC raysec\0\1\7\6
IFN secplus ;побочное направление положительно
INC \3 ;l/h
ELSE ;побочное направление отрицательно
DEC \3,\5 ;l/h,e/d
ENDIF
JP raynsec\0\1\7\6

raysec\0\1\7\6
EXD
LD A,B
IFN secplus ;побочное направление положительно
SUB C
DIVPOS
ELSE
ADD A,C
DIVNEG
ENDIF
IFN mainplus ;основное направление положительно
CPL
LD B,A ;b=texx
ELSE
LD B,A ;b=texx
CPL
ENDIF
JP raydeq
ENDM
- плотная запись данных (необязательно но просто приятно)

DD 3f4041424445467f ;превращается в db #3f,#40,#41,#42,#44,#45,#46,#7f

psb
30.09.2013, 16:03
- вложенная условная компиляция
это печально, конечно. но хз.


- конструирование имен меток в макросах
зачем их конструировать и тут же на них ссылаться?
метки для слабаков! (С) :)


- плотная запись данных (необязательно но просто приятно)
эт баловство:) примерно так же, как и автодополнение в шторме. без этого можно жить, дело лишь привычки.

jerri
30.09.2013, 19:12
зачем их конструировать и тут же на них ссылаться?
метки для слабаков! (С) :)
хм :) ты я вижу давно ничего не писал.
ты исходничек то посмотрел?
это кусок вулфа48
будет компилится в чем то кроме аласма - будет еще одна игра.


эт баловство:) примерно так же, как и автодополнение в шторме. без этого можно жить, дело лишь привычки.

потому и необязательное :) просто удобное. просто DD которое длинное DW оно вообще как часто используется в данных?

Alex Rider
30.09.2013, 19:56
Чем больше разных дистров, на которых работает SjASMPlus тем разве Вам плохо?

Патчи не ломают уже имеющуюся поддержку Win32, они лишь правят старые косяки под новые версии компиляторов, чтобы меньше мусора и диагностики вываливалось при повторной сборке SjASMPlus и SjASM.
То есть, ты пишешь просто очередную версию SjAsm только для того, чтобы уменьшить output компилятора? Тогда это не полезная идея. И да, если оно работает только под UNIX, зачем мне быть с этим по пути, если я не держу UNIX для развлечения дома?

psb
30.09.2013, 20:00
хм ты я вижу давно ничего не писал.
зрение никуда не годится... я просто не пишу такой страшный *****код, который потом хрен распарсишь или поддержишь. исходник не смотрел, только мельком. стиль алоне-кодера известен и узнается сразу, больше так никто не пишет и не хочет писать, и не хочет это выкуривать. и это о чем-то да говорит.

кроме того, я обнаглею и рискну предположить, что подобное можно переложить на ужасм не так уж и сложно, было бы желание. не без костылей, но все же.

Alex Rider
30.09.2013, 22:52
В моих примерах, кстати, не должно быть ничего экстраординарного. Я бы порекомендовал добыть еще всяких разных проектов для SjAsm.

perestoronin
30.09.2013, 23:04
Нашёл форк SjASMPlusUnreal: SjASMPlus 1.08 beta + Unreal 0.37.7 beta
с исходниками: http://sjasmplusunreal.codeplex.com/SourceControl/latest

Shadow Maker
30.09.2013, 23:38
Слушай, ну ты прекращай уже очевидное-невероятное двухгодичной давности ворошить. Эти линки тут же в теме и выкладывались. Никому оно не надо, ибо сразу же и заглохло.

Есть желание что-то сделать - прекрасно, но каждый шаг описывать здесь необязательно.

---------- Post added at 23:34 ---------- Previous post was at 23:32 ----------


DD 3f4041424445467f
Ну вот это вообще не проблема реализовать, просто оно что, действительно кому-то нужно? o_O Выглядит же как лютый ахтунг.

---------- Post added at 23:38 ---------- Previous post was at 23:34 ----------


асм роба поначалу как perl из-за обилия значков и точек
Я курил. Он в целом мне нравится, за исключением отсутствия много чего полезного, что есть у sjasm.

Мужики, а серьезно - вы сами-то реально собираетесь писать такой код, как у alone? Это же лютейший вынос мозга, ну да, я понимаю, что там нет 10 копий одного и того же, только вот зачем это всё кросс-ассемблеру?

alone
01.10.2013, 00:08
кроме того, я обнаглею и рискну предположить, что подобное можно переложить на ужасм не так уж и сложно, было бы желание. не без костылей, но все же.
Разворачивать макросы внешним парсером.

psb
01.10.2013, 00:23
Разворачивать макросы внешним парсером.
это еще больший костыль. я про переписать чуть-чуть иначе. но это не 100% успех, конечно, хз что там еще из самих макросов нагорожено.

introspec
01.10.2013, 00:36
это еще больший костыль.
Я, кстати, не соглашусь. Что-то вроде m4 - довольно мощная и элегантная вещь, несколько раз применял с большим удовольствием.

ZEK
01.10.2013, 01:13
я когда то грамматику Z80 асма, по офдоке, рисовал, хотел допилить до sjasmplus но как то руки не дошли
грамматика LL1 для coco/r, мож кому надо
3 резолва нарушения грамматик, можно было без них обойтись но страшное описание получилось бы

psb
01.10.2013, 02:50
Я, кстати, не соглашусь. Что-то вроде m4 - довольно мощная и элегантная вещь
да можно любой препроцессор придумать, но ведь это огород. а хорошо когда есть только исходник и асм, и ничего больше (в нашем минималистичном спектрумовском случае).

introspec
01.10.2013, 03:19
да можно любой препроцессор придумать, но ведь это огород. а хорошо когда есть только исходник и асм, и ничего больше (в нашем минималистичном спектрумовском случае).
Ну, имхо, вопрос неочевидный всё же. Конечно, ассемблеры (традиционно) обычно не имели хороших препроцессоров, препроцессоры - всё же более поздняя традиция, по большому счёту. Конечно, один тул лучше двух, во всех отношениях. Но из-за того что нормального стандарта на препроцессоры для ассемблеров никогда не родилось, как раз и возникает разнобой, когда каждый ассемблер препроцессит как может.

Если ближе к делу, мне тоже не хватает в ужасме нормальных текстовых макросов. Но что-то я совсем не уверен, вынесет ли эта избушка на курьих ножках ещё один этаж надстроек.

elf/2
01.10.2013, 11:39
да можно любой препроцессор придумать, но ведь это огород.
так вроде не надо ничего придумывать, там же lua встроенный есть.

NovaStorm
01.10.2013, 11:56
Она встроена весьма своеобразно - определяем функцию в одном месте, а в другом её уже не видно =(
Но даже так помогает.

ZEK
02.10.2013, 01:01
Поперло что то, парсер смог переварить сырок cpm

допилил:
резолвы многих неоднозначностей для LL1
вычисляемые выражения для констант
несколько директив org, defb, defw


Если пруха не попустит, буду допиливать что бы sjasm сырки понимал

esl
21.10.2013, 00:42
попался тут один кроссасм для z80 http://members.shaw.ca/gp2000/zmac.html

из СОВЕРШЕННО необычного в нем
Cycle-counting with sett, setocf pseudo-ops and t, tilo, tihi and ocf operators.



The best description of the T-state counting macros can be found at the end of my cycle counting tutorial. Might also explain why you would want such a feature. setocf and ocf() are newer features not covered there. They're needed when counting clock cycles on the TRS-80 Model 4 when it runs in high speed (4 MHz) mode. While the Z-80 mostly runs twice as fast in that the opcode fetch portion of each instruction is slowed down by 2 wait states. Code on the Model 1 or Model 3 (or Model 4 running in Model 3 mode) can be timed like this:

code: ld a,(de)
ld b,(hl)
add a,b
time equ t($)-t(code)
The first two instructions take 7 T-states, the 3rd 4 T-states so zmac will set time equal to 18. But if you need cycle-accurate counts on a Model 4 you'll have to do this:
code: ld a,(de)
ld b,(hl)
add a,b
time equ t($)-t(code)+2*(ocf($)-ocf(code))
As before we get a base time of 18 T-states but in this case each instruction also takes an opcode fetch thus the equation will add an additional 6 T-states and zmac will set time to 24.

Destr
05.12.2013, 18:52
При создании sna-файла sjasm прописывает в нём по адресу #4000 JP START
Как отучить его портить экран?

jerri
05.12.2013, 19:05
Destr, не видел
у меня ругается если чтото лежит в #ff00 - #ffff

introspec
05.12.2013, 19:24
При создании sna-файла sjasm прописывает в нём по адресу #4000 JP START
Как отучить его портить экран?
Моя версия этого точно не делает. М.б. стоит посмотреть другие сборки?

psb
05.12.2013, 19:34
вот тут норм версия http://sourceforge.net/projects/sjasmplus/

introspec
05.12.2013, 19:53
вот тут норм версия http://sourceforge.net/projects/sjasmplus/
Кстати, я пользуюсь скачанной где-то с форумов сборкой, в которых была добавлена возможность автостарта бейсик-файлов с *.trd. Последняя "официальная" версия, насколько я помню, не поддерживает эту возможность.

psb
05.12.2013, 21:32
Последняя "официальная" версия, насколько я помню, не поддерживает эту возможность.
есть такое...

Destr
05.12.2013, 21:52
вот тут норм версия http://sourceforge.net/projects/sjasmplus/
Да, эта версия гуд, благодарю!

perestoronin
19.01.2014, 20:14
Прошу помощи, может кто смог починить проблему "Label not found" в sjasmplus:

AER # sh compile.sh
SjASMPlus Z80 Cross-Assembler v1.07 RC8 (build 06-11-2008)
Pass 1 complete (0 errors)
Pass 2 complete (0 errors)
Code.a80(176): error: Label not found: AER.MainCode.Logo.rnd
Pass 3 complete
Errors: 1, warnings: 0, compiled: 859 lines, work time: 0.003 seconds

# grep rnd AER.sym.orig (эталон правильно сгенерированного файла имён)
Logo.rnd: equ 0x00005D9D
rnd: equ 0x00000000
MainCode.Logo.rnd: equ 0x00000000

# grep rnd AER.sym (то, что получается у меня без правок исходников контрольного примера - проект AER)
AER.boot.Logo.rnd: equ 0x00005D9D
rnd: equ 0x00000000
AER.MainCode.Logo.rnd: equ 0x00000000
Logo.rnd: equ 0x00000000

Собраться помогает правка исходника AER (но считаю это не дело править работающие ранее исходники):

# cat Code_a80.patch
--- Code.a80
+++ Code.a80
@@ -89,7 +89,7 @@
push bc
ld b,26
clear_one_line_loop:
- call Logo.rnd
+ call @AER.boot.Logo.rnd
ld c,a
ld a,(hl)
clear_and_operation:

PS. А фичу с "." в имени hb-файлов удалось вылечить, возможно кому-то будет полезным:

--- sjasm/io_trd.cpp.orig
+++ sjasm/io_trd.cpp
@@ -83,6 +83,7 @@
int TRD_AddFile(char* fname, char* fhobname, int start, int length, int autostart) { //autostart added by boo_boo 19_0ct_2008
FILE* ff;
unsigned char hdr[16], trd[31], abin[4];
+ char* last;
int i,secs,pos = 0;
aint res;
int autostart_add = autostart > 0? 4 : 0; //added by boo_boo 19_0ct_2008
@@ -165,6 +166,11 @@
}
}

+ last = fhobname + strlen(fhobname) - 1;
+ while (last > fhobname && *last != '.') {
+ --last;
+ }
+
//header of file
for (i = 0; i != 9; hdr[i++] = 0x20) {
;
@@ -175,7 +181,7 @@
if (*(fhobname + i) == 0) {
break;
}
- if (*(fhobname + i) != '.') {
+ if (*(fhobname + i) != '.' || fhobname + i < last) {
hdr[i] = *(fhobname + i); continue;
} else if (*(fhobname + i + 1)) {
hdr[8] = *(fhobname + i + 1);

drbars
04.02.2014, 17:43
Что-то у меня глюк какой-то лезет при использовании директив DISP/ENT, часть адресов к концу кода уползает куда-то на 13 байт.

upd. кажется понял.

внутри DISP/ENT нельзя делать конструкцию вида:

DUP #NN
<code>
EDUP
ORG $-1
<code>

jerri
04.02.2014, 18:08
drbars, ???
а зачем тебе DISP/ENT?

drbars
04.02.2014, 18:09
drbars, ???
а зачем тебе DISP/ENT?

А зачем велосипеду цепь? :)

perestoronin
04.02.2014, 18:11
Оригинальным архивом SjASM 0.39f не поделитесь ?
Автор SjASM отозвался.
Возможно не только мне будут полезны исходники SjASM 0.39f
http://home.online.nl/smastijn/sjasm39f.zip

psb
04.02.2014, 18:22
наткнулся на днях, скопипастил кусочек кода, а в нем оказался не минус, а тире. в итоге IY-50 он молча скомпилил как IY+50...

jerri
04.02.2014, 18:57
А зачем велосипеду цепь? :)

действительно зачем?

http://cheshuyka.ru/foto/raznoe/091020183316/Starinnyi-velosiped-s-bol1shim-perednim-kolesom.jpg


только если над собой размахивать.

видишь? сам пишешь черти че и сам удивляешься :)

drbars
04.02.2014, 19:02
действительно зачем?

http://cheshuyka.ru/foto/raznoe/091020183316/Starinnyi-velosiped-s-bol1shim-perednim-kolesom.jpg


только если над собой размахивать.

видишь? сам пишешь черти че и сам удивляешься :)
Цель уменьшить объем текста... пришлось DUP делать на один меньше, и дублировать последнюю итерацию без байта в конце.

Глюки прут если просто делать ORG $-N внутри DISP относительно текущей компиляции.

Например так тоже нельзя ORG (($/256)+1)*256

psb
04.02.2014, 19:33
Например так тоже нельзя ORG (($/256)+1)*256
есть волшебное слово align.

а зачем тебе DISP/ENT?
какая альтернатива?

introspec
04.02.2014, 19:43
какая альтернатива?
Раздельная компиляция. Я тоже последнее время всё больше к этом склоняюсь.

jerri
04.02.2014, 20:10
какая альтернатива?

Зависит от того что именно требуется.
Если код в другом месте то зачем в рамках одной программы кидать код туда - сюда, не проще ли сразу грамотно распланировать

Disp:ent вобщем-то везде не любит org

NovaStorm
04.02.2014, 21:13
не увлекаясь как автор SjASMPlus v1.07 ООП-программированием
Что имелось в виду? Для ассемблера афаик ничего ООП-специфичного не было добавлено...

и языком lua
Lua не трожь! Она тут на месте.

NovaStorm
05.02.2014, 09:00
>SjASM с версии 0.39 до версии 0.42
Помнится в SjASMPlus можно было не указывать device и писать директивы с начала строки, как с этим в 0.42?

psb
05.02.2014, 13:59
Раздельная компиляция.
ну и зачем плодить сущности? ну, понятно, что дело вкуса, но тем не менее?
вот есть, допустим, загружалка кода в гс и сам код для гс. в последнем - свои адреса, но очевидно, что я хочу его положить следом за загружалкой. зачем мне это разбивать на два небольших файла?


Если код в другом месте то зачем в рамках одной программы кидать код туда - сюда, не проще ли сразу грамотно распланировать
что значит грамотно? пример выше.

еще пример - депакер типа хруста, который перебрасывается в другое место и там работает.

jerri
05.02.2014, 14:13
psb, вот я про пример и говорю - зачем писать декранченый код лежащий в чужих адресах? Проще сделать генератор кода.

psb
05.02.2014, 16:07
зачем писать декранченый код лежащий в чужих адресах? Проще сделать генератор кода.
зачем делать генератор, если сам ассемблер - генератор? (скажем, если на пакуемость пофиг).

introspec
05.02.2014, 16:12
ну и зачем плодить сущности? ну, понятно, что дело вкуса, но тем не менее?
вот есть, допустим, загружалка кода в гс и сам код для гс. в последнем - свои адреса, но очевидно, что я хочу его положить следом за загружалкой. зачем мне это разбивать на два небольших файла?
В 1990-е, при работе на реале, в общем-то выбора не было - или DISP, или никак. Но лично мне работать с DISP никогда не нравилось. Лично мне удобнее добавить "лишний" файл и работать всегда в реальных адресах. Дело, действительно, вкуса, о котором не спорят.

jerri
05.02.2014, 16:13
psb, какой asm разрешает org внутри disp/ent?

psb
05.02.2014, 16:30
какой asm разрешает org внутри disp/ent?
не знаю, но вопрос был не про это? а типа зачем вообще дисп...

jerri
05.02.2014, 16:48
psb, изначальный вопрос был в том
что в подобной конструкции


disp
dup
...
edup
org $-1
ent
адреса куда то уползают

одним из вариантов решения проблемы мною был предложен вариант отказа от disp/ent и предложено 2 варианта решения

1 поменять стратегию и просто отказаться от перемещаемого кода
2 написать декранчер кода.

но поскольку ты продолжаешь гнуть свою линию и настаиваешь именно на таком решении то я предположил что ты знаешь что-то, чего не знаю я.
И задал тебе вопрос.

и вот стою весь в белом и читаю твой ответ. и ты меня не удивляешь.

alone
05.02.2014, 17:30
Есть третий вариант - сменить ассемблер :) Например, в аласме такой код компилируется правильно.

Раздельная компиляция с общими метками - это как? В sjasm есть экспорт меток?

psb
05.02.2014, 17:41
В sjasm есть экспорт меток?
ваще-то да. но не всегда они нужны.

но поскольку ты продолжаешь гнуть свою линию и настаиваешь именно на таком решении
я не настаиваю, мне показалось, что ты сказал, что disp не нужен, типа вообще. я решению не знаю и сам так не делаю, и не люблю когда делают. но вон алон говорит, что это нормально:)

jerri
05.02.2014, 17:49
я не настаиваю, мне показалось, что ты сказал, что disp не нужен, типа вообще. я решению не знаю и сам так не делаю, и не люблю когда делают. но вон алон говорит, что это нормально:)

не, не,
Disp нужная штука. но он наиболее востребован когда пишешь лоадер, или дискофицируешь игру.

---------- Post added at 17:49 ---------- Previous post was at 17:48 ----------


Есть третий вариант - сменить ассемблер :) Например, в аласме такой код компилируется правильно.

Раздельная компиляция с общими метками - это как? В sjasm есть экспорт меток?

есть вроде.

АлАсм есть под ПЦ?
я бы взял

alone
05.02.2014, 17:50
А как в sjasm делать экспорт меток в ассемблеро-инклюживаемом виде?

jerri
05.02.2014, 18:03
А как в sjasm делать экспорт меток в ассемблеро-инклюживаемом виде?

вот на вскидку
или тебе все все метки нужны?



EXPORT label
The named label will be written to the export-file, in the form 'label: EQU value'. This way the export-file can be included in other sources.

Example 5.20.

DRIE=3
EXPORT DRIE

psb
05.02.2014, 18:16
все метки: --sym=file

jerri
05.02.2014, 22:47
perestoronin, AlAsm есть только под Спек.
Единственное что нужно это сделать КроссАсм понимающий синтаксис Аласма.
но я эту тему поднимал года 2 назад. к сожалению безуспешно.
Я конечно РВ подтянул, но вот прототип у меня получился медленным.

alx
05.02.2014, 22:53
LOL а человек с ником alone разве не знаком? Вот у него и спрашивайте ))

PS: Было бы круто иметь что-то на ПЦ по синтаксису и наворотам не хуже аласма. А то я девять лет спустя попробовал - крайне неудобный редактор после пц )))

jerri
05.02.2014, 22:56
LOL а человек с ником alone разве не знаком? Вот у него и спрашивайте ))

PS: Было бы круто иметь что-то на ПЦ по синтаксису и наворотам не хуже аласма. А то я девять лет спустя попробовал - крайне неудобный редактор после пц )))

я начинал его переписывать на РВ - но мне не хватило знаний и опыта.

alx
05.02.2014, 23:00
А если надстройкой к визуал студии, кстати? Вроде было что-то похожее.

Или какие есть еще варианты? Чтобы я не трахался, вспоминая кнопки и задержки клавы, а мог писать на ПЦ, спокойно ассемблируя в хобетный z80-фарш.

Хотя бы, чтобы INCLUDE, INCBIN, DUP, EDUP, DISP, MACRO были. Я уж молчу про условные трансляции (кроме как в крэктрах для нескольких игр они мне нужны еще не были).

psb
05.02.2014, 23:03
Или какие есть еще варианты? Чтобы я не трахался, вспоминая кнопки и задержки клавы, а мог писать на ПЦ, спокойно ассемблируя ввиде кода.
sublime text 2 + plugin + sjasmplus + unreal speccy. куча сниппетов, чтобы не вспоминать синтаксис и прочую муру. 5 минут и прога готова.


Хотя бы, чтобы INCLUDE, INCBIN, DUP, EDUP, DISP, MACRO были.
все это есть, но например макросы макросам рознь. так юзать макросы как юзает их алоне - можно только на аласме юзать...

jerri
05.02.2014, 23:04
alx, чем тебе sjasm не устраивает ?
то что ты перечислил есть в нем
Макросы только малость другие

alx
05.02.2014, 23:15
Вот это меня и смущает, что куча названий-абревиатур и отсутствие нормальных подробных хелпов со ссылками :)

Я уже примерно понял до какого состояния за прошедшие годы перепилили спектрумовое, когда недавно трахался с одними всего-лишь прошивками: 3 текстовика и тема нефига не раскрыта - вместо одного, понятного и чтобы по полочкам )))

Может и не как alone, но писать один и тот же кусок кода с разными регистровыми парами - это вымораживает. Синтаксис я помню - вплоть до растактовок каждой команды, кстати. Совершенно и даже категарически не нужно это менять (!) Просто нужен человеческий компилятор - хоть даже из Notepad+. А вытоге мы имеем крутые видеорежимы хер где поддержанные почеловечески, но полурабочие основные, прошивки 48-го бейсика 2006го с якобы подпралвенным модемом, но зато нефига не умеющие LOAD "". И как вы думаете, об этом хоть кто-то написал в read_me?

PS: "5 минут и прога готова" - это что за компилятор бейскика вы мне предлагаете? )))

Hacker VBI
05.02.2014, 23:41
дядя,не вые. есть асам и сжасм, выбирай
оба круты

jerri
06.02.2014, 00:01
Вот это меня и смущает, что куча названий-абревиатур и отсутствие нормальных подробных хелпов со ссылками :)

Я уже примерно понял до какого состояния за прошедшие годы перепилили спектрумовое, когда недавно трахался с одними всего-лишь прошивками: 3 текстовика и тема нефига не раскрыта - вместо одного, понятного и чтобы по полочкам )))

Может и не как alone, но писать один и тот же кусок кода с разными регистровыми парами - это вымораживает. Синтаксис я помню - вплоть до растактовок каждой команды, кстати. Совершенно и даже категарически не нужно это менять (!) Просто нужен человеческий компилятор - хоть даже из Notepad+. А вытоге мы имеем крутые видеорежимы хер где поддержанные почеловечески, но полурабочие основные, прошивки 48-го бейсика 2006го с якобы подпралвенным модемом, но зато нефига не умеющие LOAD "". И как вы думаете, об этом хоть кто-то написал в read_me?

PS: "5 минут и прога готова" - это что за компилятор бейскика вы мне предлагаете? )))

вот тебе настроенный акелпад + sjasm + unreal

содержимое папки D > на диск D (чтобы пути не менять(
файл a80 ассоциируешь с акелпадом

По F5 запускается файл из папки с акелпадом start.bat и из него на компиляцию main.a80

можешь переделать как удобнее тебе

https://dl.dropboxusercontent.com/u/35328154/d.rar

вопросы - в личку

psb
06.02.2014, 00:29
но писать один и тот же кусок кода с разными регистровыми парами - это вымораживает.
для этого оно умеет макросы на уровне сорцов и сниппеты на уровне редактора.

PS: "5 минут и прога готова" - это что за компилятор бейскика вы мне предлагаете? )))
я ж выше написал:) отличный компилятор:) хелп по опкодам и тактам тоже встроен. http://zx-pk.ru/showthread.php?t=21731

nyuk
06.02.2014, 02:15
вот тебе настроенный акелпад + sjasm + unreal

Слышал, сектанты вообще на Sublime Text перешли. И нахваливают. И добавки просят. Здесь на форуме тема была.

jerri
06.02.2014, 09:45
nyuk, весит сколько?
То на чем работают сектанты можно взять у сектантов.
Я предлагаю то, на чем работаю сам

nyuk
06.02.2014, 10:25
nyuk, весит сколько?
То на чем работают сектанты можно взять у сектантов.
Я предлагаю то, на чем работаю сам
psb выше давал ссылку, это я пропустил. Вот: http://zx-pk.ru/showthread.php?t=21731

Собственно, разница только в редакторе. Связку sjasm + unreal пока трудно чем-либо заменить.

Hacker VBI
06.02.2014, 11:02
nyuk, Связку sjasm + unreal пока трудно чем-либо заменить, но можно.
например, asam + unreal

nyuk
06.02.2014, 11:16
Ну я не сказал, что это не возможно. Я знаю человека, который предпочитает sjasm + spectaculator.

jerri
06.02.2014, 11:37
Ну я не сказал, что это не возможно. Я знаю человека, который предпочитает sjasm + spectaculator.

А я знаю человека который предлагает АлАсм под эмулятором запускать.

jerri
06.02.2014, 13:19
perestoronin, мне для того что бы разобраться что нужно в ALASM
понадобилась только вот эта инструкция (https://www.dropbox.com/s/edem9bad5hzdo5e/AL50HELP.txt). Ну и еще то, что я им пользовался несколько лет.
В код я не лазил.

alone
06.02.2014, 14:00
полурабочие основные, прошивки 48-го бейсика 2006го с якобы подпралвенным модемом, но зато нефига не умеющие LOAD "".
Прошивка 2006 года превосходно умеет LOAD "".

jerri
06.02.2014, 14:22
perestoronin, тоже вариант, но нам всего лишь нужен компилятор понимающий синтаксис аласма.
а все остальное совершенно от других ассмов не отличается.

alx
06.02.2014, 15:00
Прошивка 2006 года превосходно умеет LOAD "".
Но USR 0 не умеет чистить память. После входа в нее из MadRom адрес бейика был явно не #5CCB, поэтому первая же фирменная игра сказала Out Of Memory.

ram_scan
06.02.2014, 17:05
Не хочу расстраивать мировую обчественновть, но sjasm начиная с версии 1.07 включительно принципиально не собирается под юниксами.

В первых релиз кандидатах просто отсутствовал мэйкфайл для сборки, начиная кажется с RC4 стал спотыкаться об ошибку в directives на неопределенном atoi, это если не считать две сотни варнингов о некорректном приведении типа. Разбираться самому если честно лениво. Если разработчики тут в теме есть, задайте наводящие вопросы, уточнимся на предмет и вычислять будем хором где что забыто.

gcc (SUSE Linux) 4.5.1 20101208 [gcc-4_5-branch revision 167585]

Да, предвидя всякие вопросы, тачка у меня "девелопеская", поэтому практически все из -dev пакетов что только можно себе представить - поставлено.

UPD: 1.06 тоже не собирается.
UPD2: 1.05 собирается.

SAM style
06.02.2014, 17:07
Не хочу расстраивать мировую обчественновть, но sjasm начиная с версии 1.07 включительно принципиально не собирается под юниксами.

В первых релиз кандидатах просто отсутствовал мэйкфайл для сборки, начиная кажется с RC4 стал спотыкаться об ошибку в directives на неопределенном atoi, это если не считать две сотни варнингов о некорректном приведении типа.

gcc (SUSE Linux) 4.5.1 20101208 [gcc-4_5-branch revision 167585]
Этот собрался и не крякнул:

sam@debian:~$ sjasmplus
SjASMPlus Z80 Cross-Assembler v1.07 RC8 (build 06-11-2008)Ну, как не крякнул... Кучка warning'ов присутствует, но бинарник получается.
gcc version 4.8.2 (Debian 4.8.2-14)

alone
06.02.2014, 17:23
Но USR 0 не умеет чистить память.
Caps Shift держать не пробовал?

perestoronin
06.02.2014, 17:34
но sjasm начиная с версии 1.07 включительно принципиально не собирается под юниксами.
Наверное имелся ввиду sjasmplus ;)

Ну, как не крякнул... Кучка warning'ов присутствует, но бинарник получается.
А руки на что - и никаких варнингов и "не собирается" не будет:
http://portage.perestoroniny.ru/dev-embedded/sjasm/files/
http://portage.perestoroniny.ru/dev-embedded/sjasmplus/files/
Но sjasmplus пока корректно собирается лишь для 1.07rc8, над остальным работаю, дойдет очередь и до родных багов и хотелок.

breeze
06.02.2014, 18:07
вопрос к знатокам :) Решил тут в кое веков использовать макрос, но при передачи числа в качестве параметра > 255 получаю такую хрень:



intro.asm(150): error: Bytes lost
intro.asm(151): error: Bytes lost
intro.asm(152): error: Bytes lost
intro.asm(153): error: Bytes lost


Если число меньше, всё ок. Это вообще что? как-то надо в самом макросе указать тип данных 16бит, или баг или вообще не возможно?

причём в самих экпрешинах можно использовать данные:



low low x low 8 bits of 16 bit value
high high x high 8 bits of 16 bit value

introspec
06.02.2014, 18:13
вопрос к знатокам :) Решил тут в кое веков использовать макрос, но при передачи числа в качестве параметра > 255 получаю такую хрень
breeze, больше похоже на проблему компиляции собственно команд. Не приведёшь сам макрос, не весь, а те строки, где ты используешь параметры?

jerri
06.02.2014, 18:14
breeze,

у тебя внутри макроса стоит DB
а передаешь ты ему word (255+)
других вариантов не бывает

код покажи.

introspec
06.02.2014, 18:16
других вариантов не бывает
Ну почему же, много вариантов :)
LD A, 257
SUB -293
LD (HL), 100500
Очень много вариантов!

jerri
06.02.2014, 18:20
introspec, вместо Byte ты передаешь Word
все остальное от лукавого

introspec
06.02.2014, 18:22
introspec, вместо Byte ты передаешь Word
все остальное от лукавого
jerri, на этом уровне, мне кажется, breeze и без нас знает.

breeze
06.02.2014, 18:46
Да, вы немного угадали :) макрос строит структуру db, но…



MACRO MCreateSprite posX, posY, width, height, pal

db low posY ; Y0-7 | 8 bit младшие даные Y координаты (0-255px)
;FLAR S Y8
db %00100000|((height/8)-1)<<1|high posY ; Y8 | 0й бит - старшие данные Y координаты (256px >)
; YS | 1,2,3 бит - высота в блоках по 8 px
; RESERVED | 4й бит - зарезервирован
; ACT | 5й бит - спрайт активен (показывается)
; LEAP | 6й бит - указывает, что данный спрайт последний в текущем слое. (для перехода по слоям)
; YF | 7й бит - указывает, что данный спрайт нужно отобразить зеркально по вертикали

db low posX ; X0-7 | 8 bit младшие даные X координаты (0-255px)
;F R S X8
db %00000000|((width/8)-1)<<1|high posX ; X8 | 0й бит - старшие данные X координаты (256px >)
; XS | 1,2,3 бит - ширина в блоках по 8 px
; RESERVED | 4й бит - зарезервирован
; - | 5,6й бит - не используются
; XF | 7й бит - указывает, что данный спрайт нужно отобразить зеркально по горизонтали
;TNUM
db %00000000 ; TNUM | Номер тайла для левого верхнего угла.
; | 0,1,2,3,4,5й бит - Х координата в битмап
;SPALTNUM ; | 6,7й бит +
db %00000000|(pal<<4) ; TNUM | 0,1,2,3 бит - Y координата в битмап
; SPAL | 4,5,6,7й биты номер палитры (?)

ENDM


возможно я не так понял как пользоваться low/high ?

---------- Post added at 17:46 ---------- Previous post was at 17:27 ----------

короче дело было в этих странных low/high, заменил на posX%255 и (posX/256) и всё ок стало.

Но теперь другая проблема. Мегаумный компилятор округляет 0.1 до 1 //_—

Alex Rider
06.02.2014, 18:47
db %00100000|((height/8)-1)<<1|high posY
Заверни вот это вот в low(). Ну и аналогичные строки.

breeze
06.02.2014, 19:25
Заверни вот это вот в low()

эээ… что-то не совсем понял. В первых здесь собираются биты и они означают разные статусы, и кроме того в low я уже заворачивал. Собственно с этого я и начал — вылетает «error: Bytes lost».

По сути мне нужен какой-то операнд, который скажет sjasm'u? что 0.1 это всё-таки 0, а не 1. Тобишь активировать округление в меньшую сторону.

jerri
06.02.2014, 19:35
introspec, видишь я был прав :)

breeze
06.02.2014, 19:38
introspec, видишь я был прав

Дыкть, а толку. Проблема-то осталась. Во первых не ясно как пользоваться этими low/hight, ибо значение даже не посмотреть в том же DISPLAY.

Ну и остался открытым вопрос с округлением.

jerri
06.02.2014, 19:45
Да, вы немного угадали :) макрос строит структуру db, но…


MACRO MCreateSprite posX, posY, width, height, pal

db posY&#ff
db (posy/256)+(((height/8)-1)*2)+#20

db posX&#ff
db (posX/256)+(((width/8)-1)*2)

db #00 ;чтото про TNUM
db (pal&#0f*16)


/*
db low posY ; Y0-7 | 8 bit младшие даные Y координаты (0-255px)
;FLAR S Y8
db %00100000|((height/8)-1)<<1|high posY ; Y8 | 0й бит - старшие данные Y координаты (256px >)
; YS | 1,2,3 бит - высота в блоках по 8 px
; RESERVED | 4й бит - зарезервирован
; ACT | 5й бит - спрайт активен (показывается)
; LEAP | 6й бит - указывает, что данный спрайт последний в текущем слое. (для перехода по слоям)
; YF | 7й бит - указывает, что данный спрайт нужно отобразить зеркально по вертикали

db low posX ; X0-7 | 8 bit младшие даные X координаты (0-255px)
;F R S X8
db %00000000|((width/8)-1)<<1|high posX ; X8 | 0й бит - старшие данные X координаты (256px >)
; XS | 1,2,3 бит - ширина в блоках по 8 px
; RESERVED | 4й бит - зарезервирован
; - | 5,6й бит - не используются
; XF | 7й бит - указывает, что данный спрайт нужно отобразить зеркально по горизонтали
;TNUM
db %00000000 ; TNUM | Номер тайла для левого верхнего угла.
; | 0,1,2,3,4,5й бит - Х координата в битмап
;SPALTNUM ; | 6,7й бит +
db %00000000|(pal<<4) ; TNUM | 0,1,2,3 бит - Y координата в битмап
; SPAL | 4,5,6,7й биты номер палитры (?)
*/
ENDM
возможно я не так понял как пользоваться low/high ?

---------- Post added at 17:46 ---------- Previous post was at 17:27 ----------

Но теперь другая проблема. Мегаумный компилятор округляет 0.1 до 1 //_—
пробуй
в каком месте округляет?

Blade
06.02.2014, 19:52
breeze, у тебя какая версия асма? У меня твой макрос нормально скомпилировался.

breeze
06.02.2014, 20:36
breeze, у тебя какая версия асма? У меня твой макрос нормально скомпилировался.

Не в версии асма дело, я ж не говорил что оно не компилит. Просто ошибку выдавало.

Короче уже сам разобрался, проблема была в 255, заменил на 256 всё ОК. Не внимательно просто заменил.

Если кому интересно, рабочий вариант:



MACRO MCreateSprite posX, posY, width, height, pal

db posY%256 ; Y0-7 | 8 bit младшие даные Y координаты (0-255px)
;FLAR S Y8
db %00100000|((height/8)-1)<<1|(posY/256) ; Y8 | 0й бит - старшие данные Y координаты (256px >)
; YS | 1,2,3 бит - высота в блоках по 8 px
; RESERVED | 4й бит - зарезервирован
; ACT | 5й бит - спрайт активен (показывается)
; LEAP | 6й бит - указывает, что данный спрайт последний в текущем слое. (для перехода по слоям)
; YF | 7й бит - указывает, что данный спрайт нужно отобразить зеркально по вертикали

db posX%256 ; X0-7 | 8 bit младшие даные X координаты (0-255px)
;F R S X8
db %00000000|((width/8)-1)<<1|(posX/256) ; X8 | 0й бит - старшие данные X координаты (256px >)
; XS | 1,2,3 бит - ширина в блоках по 8 px
; RESERVED | 4й бит - зарезервирован
; - | 5,6й бит - не используются
; XF | 7й бит - указывает, что данный спрайт нужно отобразить зеркально по горизонтали
;TNUM
db %00000000 ; TNUM | Номер тайла для левого верхнего угла.
; | 0,1,2,3,4,5й бит - Х координата в битмап
;SPALTNUM ; | 6,7й бит +
db %00000000|(pal<<4) ; TNUM | 0,1,2,3 бит - Y координата в битмап
; SPAL | 4,5,6,7й биты номер палитры (?)

ENDM

introspec
06.02.2014, 21:07
breeze, я всё ещё не могу воспроизвести сообщение об ошибке. Скажи, пожалуйста, какие-нибудь значения height и posY на которых у тебя вылетало. Если что, я довольно последовательно изничтожил деления из моих констант, и всё время пишу с high/low, так что мне интересно понять, откуда растут ноги у твоей проблемы.

breeze
07.02.2014, 01:16
breeze, я всё ещё не могу воспроизвести сообщение об ошибке.

Ну я как бы писал выше:


при передачи числа в качестве параметра > 255 получаю такую хрень:

Реально писал 64*4

Blade
07.02.2014, 01:28
Реально писал 64*4
Тогда надо писать high (posY), low (posY). У high, low приоритет выше, чем у умножения, и без скобок получается так: (high 64) * 4

breeze
07.02.2014, 01:49
Тогда надо писать high (posY), low (posY). У high, low приоритет выше, чем у умножения, и без скобок получается так: (high 64) * 4

ОК. Спасибо, буду знать.

denpopov
14.02.2014, 11:43
а насколько реально внедрить в sjAsm опцию похожую в pasmo сохранение как .TAP?
пользоваться своим костылем уже поднадоело.

jerri
14.02.2014, 12:18
denpopov, сохраняй сна - для отладки самое оно

perestoronin
14.02.2014, 22:20
Кто знает как победить? Не отключая warnings:

# cat rawsource.h
class RawSource {
public:
RawSource(string);
RawSource(StringList);
StringList ReadUntil(StringList,StringList,string);
void Process();
SourceList &GetSource() { return _source; }
void ClearSource() { _source.clear(); }
void AddToSource(SourceList n) { _source.splice(_source.end(),n); }
protected:
RawSource() {}
void _Preprocess();
string _KillComments();
void _Group1(string&);
void _ReplaceDefs(string &);
void _Group2(string&);
void _CutLines(string&);
int _ParseLabel(string&);
void _ParseRepeat(string&);
void _ExpandMacros(string&);
int _AssemblerDirectives(string&);
void _Mnemonics(string&);
int _nextline();
StringList _sl;
iStringList _it;
SourceList _source;
string _unexpectedin;
int _unexcurlin,_unexlistcurlin;
void virtual _Parse(string&);
};

class RSRepeat : public RawSource {
public:
RSRepeat() {}
void parserepeat(string &s) { _ParseRepeat(s); }
};

class RSStructure : public RawSource {
private:
void _Parse(string&);
int _offset,_defaultalign;
bool _global;
Structure &_s;
bool _mustalign;
int _newalign;
public:
RSStructure(int n_offset, int n_align, bool n_global, Structure &n_s, StringList &sl) :
_offset(n_offset), _defaultalign(n_align), _global(n_global), _s(n_s), _mustalign(false), RawSource(sl) {}
};


# make
g++ -Wp,-MD,.deps/datadir.d -Wall -O2 -c -o datadir.o datadir.cpp
In file included from sjasm.h:125:0,
from datadir.cpp:29:
rawsource.h: In constructor «RSStructure::RSStructure(int, int, bool, Structure&, StringList&)»:
rawsource.h:78:8: предупреждение: «RSStructure::_mustalign» будет инициализирован после [-Wreorder]
bool _mustalign;
^
rawsource.h:82:109: предупреждение: базового класса «RawSource» [-Wreorder]
_offset(n_offset), _defaultalign(n_align), _global(n_global), _s(n_s), _mustalign(false), RawSource(sl) {}
^
rawsource.h:81:3: предупреждение: when initialized here [-Wreorder]
RSStructure(int n_offset, int n_align, bool n_global, Structure &n_s, StringList &sl) :
^

denpopov
14.02.2014, 22:23
denpopov, сохраняй сна - для отладки самое он
спасибо, но есть нюансы для использования тапок.

Alex Rider
14.02.2014, 23:28
похожую в pasmo сохранение как .TAP?
Кто такое pasmo?

Vitamin
15.02.2014, 12:44
perestoronin, инициализируй перемены класса в том же порядке, в котором они объявлены. Тебе же компилятор об этом и говорит.
Вызов RawSource (sl ) ставь первым.

denpopov
15.02.2014, 12:55
Кто такое pasmo?
Pasmo (http://pasmo.speccy.org)

я ошибся все же, но в командной строке указывается опция генерации тапки.

Vitamin
15.02.2014, 19:44
Помогло, благодарю.
Обращайся, если что.

ram_scan
18.02.2014, 05:35
Этот собрался и не крякнул:

sam@debian:~$ sjasmplus
SjASMPlus Z80 Cross-Assembler v1.07 RC8 (build 06-11-2008)Ну, как не крякнул... Кучка warning'ов присутствует, но бинарник получается.
gcc version 4.8.2 (Debian 4.8.2-14)

Это шибко "зависит от". Сборка спотыкается на незадефайненом atoi(), который дефайнится только для win32 платформы.

Собирается оно без танцев с саблями только если stdlib заинклужен по дефолту. А по дефолту так сильно не везде.

После правки sjdefs.h и выноса #include <stdlib.h> из под #ifdef WIN32 оно собирается и работает.

Считаю сие багой, и прошу разработчиков выправить косячок-с если они это читают.

ram_scan
20.02.2014, 04:47
Луч доходит до начала экрана и рисует уже испорченные байты.

Все, я понял. Вы свежим глазом увидели косяк в моем коде. Причем в том месте где я его даже не думал искать (процедура записи в память работала правильно, косячила процедура чтения, но она мной не отлаживалась потому как я ей пока не пользовался и был уверен что кроме инструкции pop там ничего криминального появиться не может и в памяти не лазиит).

SJASM подлец своим неестественным мать его интеллектом проявил самодеятельность и втихую сделал то чего я ему не писал.

Я давно не кодил на асме, поэтому написал ld ix,hl (подзабыл я за 15 лет инстракшн сет). Так эта падла, вместо того чтобы матюгнуться на неверную команду, молча сделала перегон значения через стек, о чем ассемблер ващще никто не просил. И мало того что сделала, так сделала молча. Причем сделала это совершенно не будучи в курсе что стеком пользоваться нельзя. Как и памятью вообще.

Поубивав бы гада.

В итоге сидим и несуществующую багу ловим.

Вопрос снимается, сыплю голову пеплом.

SAM style
20.02.2014, 12:51
Я давно не кодил на асме, поэтому написал ld ix,hl (подзабыл я за 15 лет инстракшн сет). Так эта падла, вместо того чтобы матюгнуться на неверную команду, молча сделала перегон значения через стек, о чем ассемблер ващще никто не просил. И мало того что сделала, так сделала молча. Причем сделала это совершенно не будучи в курсе что стеком пользоваться нельзя. Как и памятью вообще.Вот поэтому я всегда делаю свои макросы вместо черных ящиков SJASM-а. Ну хорошо, рад, что разобрались.

psb
20.02.2014, 13:24
Поубивав бы гада.
лол! доки читай! не читают, потом кто-то у них виноват.

Vitamin
20.02.2014, 13:26
лол! доки читай! не читают, потом кто-то у них виноват.
Обычно всякое неявно-опасное поведение должно явно включаться (хоть через ключи командной строки). А тут его хоть выключить можно?

psb
20.02.2014, 13:45
А тут его хоть выключить можно?
возможно, но не уверен, надо доку читать:) там много интересного написано.

есть конечно там реальные косяки такие, которые молча, но то что выше - это не косяк вообще.

ram_scan
20.02.2014, 15:14
возможно, но не уверен, надо доку читать:) там много интересного написано.

есть конечно там реальные косяки такие, которые молча, но то что выше - это не косяк вообще.

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

В данном конкретном случае поведение sjasm в рамки здравого смысла не укладывается (тем более что в той древней версии на которой я до того кодерасил такого поведения по умолчанию не было). Во первых если я захочу каких-то плюшек то я их явным образом включу. До той поры пока я чего-то явно не разрешил мне дополнительного сервиса никакого не нужно. Во вторых я готов еще понять когда какое-нть ld hl,de разворачивается в пару восьмибитных пересылок. Ладно, на байт длиннее программа стала, адреса меток оно пересчитает, для того ассемблер и придумали. Но вот когда оно без спросу в стек лезет это в чистом виде самодеятельность уже. В третьих такое поведение отключить 1) нельзя и 2) в доке не написано каким именно образом в sjasm накостылен тот или иной встроенный макрос разворачивающий одну мнемонику в несколько, сиди и смотри в листинг называется. И не факт кстати что завтра там в этих макросах чего-то не поменяется на этот счет. И сиди потом, ищи из-за чего код не работает.

Сижу как дурак теперь и в листинг после каждой компиляции смотрю. А то вдруг он мне rlc a на rlca где-то поменяет, потому-что оно мол на байт короче и на четыре (кажись) такта быстрее. Или jp на jr заменит, мол зачем тебе jp, тут близко же...

psb
20.02.2014, 15:26
Сижу как дурак теперь и в листинг после каждой компиляции смотрю. А то вдруг он мне rlc a на rlca где-то поменяет, потому-что оно мол на байт короче и на четыре (кажись) такта быстрее.
слушай, ну если ты асм не помнишь, доки не читаешь... ну иди пожалуйся в спортлото. сам накосячил, но виноват асм. пиши на аласме, он чоткий и никогда не глючит.

ram_scan
20.02.2014, 15:46
слушай, ну если ты асм не помнишь, доки не читаешь... ну иди пожалуйся в спортлото. сам накосячил, но виноват асм. пиши на аласме, он чоткий и никогда не глючит.

Ищщо раз. Я прочел доку. В доке нигде не написано что внутренний макрос будет трогать стек. Более того вообще не написано во что эта порнография разворачивается.

В спортлото я жаловаться не буду. Я пожалуюсь разработчику. Если разработчик внимать не будет, пофикшу для себя сам.

Для компилятора подобное поведение считаю недопустимым.

psb
20.02.2014, 17:06
Более того вообще не написано во что эта порнография разворачивается.
если не написано, на что можно рассчитывать? и вообще, расскажите, как вы еще сделаете ld hl,ix не попортив ничего больше?
и да, читаем:

Of course the Z80 is only an 8 bit cpu, but sometimes ld hl,de would be nice. SjASMPlus now 'fakes' some instructions like that. This improves the readability of the source, but it might not be the fastest way to get the result. Also possibly some 'new' load instructions do affect the flags in ways you wouldn't expect.
продолжайте катить бочку... про стек же не написано, да?

В спортлото я жаловаться не буду. Я пожалуюсь разработчику.
это то же самое:)) его никто уже не поддерживает, место вакантно.

Vitamin
20.02.2014, 17:19
psb, ты не прав. Расширения (особенно с побочными эффектами) должны быть ОТКЛЮЧАЕМЫМИ. А в идеале, наоборот- включаемыми.



как вы еще сделаете ld hl,ix не попортив ничего больше


ex de,hl
ld d,hx
ld e,lx
ex de,hl

introspec
20.02.2014, 17:23
Расширения (особенно с побочными эффектами) должны быть ОТКЛЮЧАЕМЫМИ. А в идеале, наоборот- включаемыми.
Я, кстати, согласен с этой мыслью. Но я всё равно не понимаю жалобы на существующие макросы ассемблера. Человек, пишущий на ассемблере, берёт на себя ответственность за каждую деталь кода. Я не понимаю, как можно писать ассемблерный код, не помня, что реально может (и не может) делать процессор, отказываясь вслух прочесть документацию и продолжая использовать встроенные макросы.

Vitamin
20.02.2014, 17:30
Я не понимаю, как можно писать ассемблерный код, не помня, что реально может (и не может) делать процессор, отказываясь вслух прочесть документацию и продолжая использовать встроенные макросы.
Не путай божий дар с яичницей.
Всякие там расширения ассемблера
1) не относятся к работе процессора
2) обычно нигде не описаны
3) имеют тенденцию к изменениям

introspec
20.02.2014, 17:34
Не путай божий дар с яичницей.
Всякие там расширения ассемблера
1) не относятся к работе процессора
2) обычно нигде не описаны
3) имеют тенденцию к изменениям
Именно поэтому я никогда их не использовал, не использую, и не собираюсь использовать. Какое отношение это имеет к жалобам типа "я ассемблер уже забыл, по ошибке вставил несуществующую инструкцию, а sjasm не надавал мне по рукам"?

Vitamin
20.02.2014, 17:40
Какое отношение это имеет к жалобам типа "я ассемблер уже забыл, по ошибке вставил несуществующую инструкцию, а sjasm не надавал мне по рукам"?
Имеющаяся проблема удобства использования инструмента квалифицируется как "так тебе и надо". Разве это правильно?
Имхо, пути решения проблемы два
1) возможность отключения всех расширений
2) не мимикрировать расширения под стандартные команды (шибко умному компилятору пофиг, забыл ли ты ассемблер или просто опечатался).

psb
20.02.2014, 17:42
psb, ты не прав. Расширения (особенно с побочными эффектами) должны быть ОТКЛЮЧАЕМЫМИ. А в идеале, наоборот- включаемыми.
да, и багов в идеале быть не должно. только так не бывает. в данном асме, наверное, многое не по уму, но он такой какой есть, в доке предупреждения имеюццо в избытке. хочется качества - покупайте коммерческий продукт (вон типа иара, там все по-взрослому).


ex de,hl ld d,hx ld e,lx ex de,hl
ну круто, есть на что заменить%) но есть ли смысл?

introspec
20.02.2014, 17:43
Имеющаяся проблема удобства использования инструмента квалифицируется как "так тебе и надо". Разве это правильно?
Имхо, пути решения проблемы два
1) возможность отключения всех расширений
2) не мимикрировать расширения под стандартные команды (шибко умному компилятору пофиг, забыл ли ты ассемблер или просто опечатался).
Оба эти пути подразумевают переписывание sjasmplus. Ты за это взяться готов? вот и я тоже нет. psb, a следом я за ним и я предлагаем третий путь решения проблемы:
3) вспомнить ассемблер, прочесть, наконец, доки и спать спокойно.

psb
20.02.2014, 17:45
Разве это правильно?
это факт, документированный.

Vitamin
20.02.2014, 17:52
да, и багов в идеале быть не должно. только так не бывает. в данном асме, наверное, многое не по уму, но он такой какой есть, в доке предупреждения имеюццо в избытке.
Хорошее предупреждение вида "ожидайте западла отовсюду".


ну круто, есть на что заменить%) но есть ли смысл?
В описанной ситуации- чуть больше, нежели в оригинальном макросе.


Оба эти пути подразумевают переписывание sjasmplus.
Почему ПЕРЕписывание?


Ты за это взяться готов? вот и я тоже нет.
При наличии нормального репозитория (GitHub например) вполне готов вносить правки.


psb, a следом я за ним и я предлагаем третий путь решения проблемы:
Ты никогда не опечатывался? Никогда не ошибался? Ну-ну...
Вместо минимизации цены ошибки в ответ "получи фашист гранату".


это факт, документированный.
Желаю тебе похерить систему и все накопленные данные, а потом обнаружить, что это был "документированный fuckt":)

psb
20.02.2014, 18:20
Хорошее предупреждение вида "ожидайте западла отовсюду".
не отовсюду. посмотри доку, там вполне в конкретных местах написано, если как-то делать нельзя. например, юзать temporary labels в макросах. кто так юзает - получает мину. ассемблер - это не тот язык, где можно ожидать, что тебя предупредят о баге, который сделал ты. написал херню - получил херню. в целом это всегда так.

и нигде не заявлялось, что это самый стандартный асм, скорей наоборот.


В описанной ситуации- чуть больше, нежели в оригинальном макросе.
это был риторический вопрос. он спорный, ибо где-то лучше покороче, где-то минимум тактов, где-то минимум влияния на остальное. и мне кажется не со всеми регистрами твой метод прокатит. нужно всегда понимать, что ты делаешь. автор - не понял и получил:)


При наличии нормального репозитория (GitHub например) вполне готов вносить правки.
есть соурсфорж, есть гитхаб. но правки там, мне кажется, будут адовы... если решишься - скажи, список багов будет:)


Желаю тебе похерить систему и все накопленные данные
сопоставимый ущерб, ога:)

Vitamin
20.02.2014, 18:27
написал херню - получил херню. в целом это всегда так.
Программирование на асме- это уже удар по психике. Зачем еще больше усложнять этот процесс инструментом, который вроде как призван облегчить?


есть соурсфорж, есть гитхаб. но правки там, мне кажется, будут адовы... если решишься - скажи, список багов будет
А ссылочку на гитхаб можно? От соурсфоржа шарахаюсь как черт от ладана.


сопоставимый ущерб, ога
А пофиг на ущерб. Главное- подход. Типа "максимизируй цену ошибки" вместо обратного.
Точно так же новичок на этом асме получит детскими граблями по помидорам и убежит в ужосе на аласм или (простигосподи) шторм. И запал закончится задолго до конца программирования.

introspec
20.02.2014, 18:55
Точно так же новичок на этом асме получит детскими граблями по помидорам и убежит в ужосе на аласм или (простигосподи) шторм. И запал закончится задолго до конца программирования.
Vitamin, sjasmplus лежит в исходниках в куче мест, уже много лет. Я не знаю, что нужно новичкам, возможно, им есть смысл думать о pasmo или об одном из ассемблеров встроенном в эмуляторы. По факту, sjasmplus - единственный известный мне сейчас ассемблер, который поддерживает, без оговорок, все команды (включая недокументированные), имеет высокую скорость, довольно гибкий синтакс, мощные макросы, временные метки, нормальный вычислитель выражений (а не как обычно бывало в нативных ассемблерах), понимает архитектуру (trd, sna и т.п.), плюс, что очень важно лично для меня, поддерживает пространства имён. Бессмысленно говорить о недостатках встроенных макросов в этом контексте. Бессмысленно переживать о проблемах новичков, когда речь идёт об одном из самых мощных из доступных сейчас ассемблеров. Это просто какой-то разговор не о том.

psb
20.02.2014, 19:17
А ссылочку на гитхаб можно?
не уверен, что это последняя версия, но сдается мне что так.
https://github.com/mkoloberdin/sjasmplus/

Vitamin
20.02.2014, 19:36
Vitamin, sjasmplus лежит в исходниках в куче мест, уже много лет
Куча версий лежит в куче мест, а в хождении совсем другая куча. Ситуацию с UnrealSpeccy не напоминает?
Единый репозиторий тем и хорош, что все версии отслеживаются на ура.


Это просто какой-то разговор не о том.
Разговор о том, что в области юзабилити еще расти и расти.

introspec
20.02.2014, 20:04
Куча версий лежит в куче мест, а в хождении совсем другая куча. Ситуацию с UnrealSpeccy не напоминает?
Единый репозиторий тем и хорош, что все версии отслеживаются на ура.

Разговор о том, что в области юзабилити еще расти и расти.
Vitamin, ну я видел, в т.ч. в этом треде, уже несколько человек, которые начинали ковырять и бросали. Я никого не критикую, понятно, что у всех есть реальная жизнь и обязательства, но просто нужно же понимать, что всё упирается не в ключ для включения/отключения встроенных макросов, а в поддержку на годы вперёд. Такого человека нет с 2008 года.

Скажу больше. Для 95% нынешних реальных пользователей, эти макросы - самая ничтожная из проблем. Нужно думать о новой группе поддержки, разбираться с архитектурой, запускать трекер багов, а только потом уже думать про UI.

Vitamin
20.02.2014, 21:05
что всё упирается не в ключ для включения/отключения встроенных макросов, а в поддержку на годы вперёд.
При нормальной организации можно и по чуть-чуть развиваться. Проблема в том, что порог вхождения неоправданно высок (хотя бы отсутствие однозначной версии от которой плясать надо). Посему и запал у людей заканчивается раньше, нежели что полезное получается.

---------- Post added at 21:05 ---------- Previous post was at 20:09 ----------

"Все уже придумано до нас".
Ключ --nofakes добавлен в версии 1.07 Stable


[vitamin@vitamin test]$ ../sjasmplus test.asm --lst=out.lst --nofakes
SjASMPlus Z80 Cross-Assembler v1.07 RC8 (build 06-11-2008)
Pass 1 complete (0 errors)
Pass 2 complete (0 errors)
test.asm(2): error: Illegal instruction: ld ix,de
Pass 3 complete
Errors: 1, warnings: 0, compiled: 3 lines, work time: 0.002 seconds

psb
20.02.2014, 21:39
так и знал что не все ключи в доке! там еще должен быть как минимум, который разрешает команды с начала строки писать:)

Vitamin
20.02.2014, 21:43
там еще должен быть как минимум, который разрешает команды с начала строки писать
И такой есть. --dirbol его зовут.

psb
20.02.2014, 22:52
понятно, на соурсфорже нет последней версии с nofakes.

Vitamin
20.02.2014, 22:53
Я с гитхаба форкнул и собрал. Он при запуске без параметров вываливает инфу по этим опциям.

ram_scan
21.02.2014, 06:57
это был риторический вопрос. он спорный, ибо где-то лучше покороче, где-то минимум тактов, где-то минимум влияния на остальное. и мне кажется не со всеми регистрами твой метод прокатит. нужно всегда понимать, что ты делаешь. автор - не понял и получил:)


Еще раз, покажите мне место в доке, где написано что встроенный макрос ld hl,ix имеет косвенный эффект в виде модификации стека. Я вот смотрю в доку, и вижу, что в макросе фигурируют hl и ix. Я вправе расчитывать на то что у меня ничего нигде не взорвется если я воспользуюсь ? Или надо обязательно сначала на грабли наступить чтобы потом помнить где они разложены ?

Что касается "нечтения док". Представьте себе что я просто опечатался. От этого что-то принципиально поменялось ? Нормальный ассемблер мне бы сразу по рукам за такое врезал. А этот мало того что код сделал, так еще и с косвенным эффектом который программу рушит. И заметьте, про этот эффект ни строчки нигде не сказано.

Что касается "где-то лучше покороче а где-то минимум тактов", то лучше именно так как программист написал. Если ему нужно подлиннее и больше тактов, то это написано не просто так. Я вот не уверен теперь что sjasm со своей трогательной обо мне заботе втихаря не навертит мне "оптимизаций".

Я даже не имею по большому счету ничего против макроса этого будь он неладен. Не трогай он стек - код бы работал и я может быть даже никогда не заметил того что я написал код неправильно. Но код который генерит ассемблер лазиит тудакуда его не просят.

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

NovaStorm
21.02.2014, 08:31
который разрешает команды с начала строки писать

Хоть я и напрягся на переходе с 1.06 из-за таких команд, но это всё-таки зло, и оно должно быть уничтожено вообще. Как и псевдоопы.

psb
21.02.2014, 11:52
Представьте себе что я просто опечатался. От этого что-то принципиально поменялось ?
ну конечно, вы опечатаетесь, сделаете вместо ld a,b - ld a,c, и вас все асмы предупредят.

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


и оно должно быть уничтожено вообще
может и EXA уничтожить? и запретить по нескольку команд/параметров юзать? потом пойти дальше и запретить модули, case sensitive, мало ли, везде можно накосячить... я согласен лишь на отключение fakeops по дефолту.

Vitamin
21.02.2014, 12:00
psb, обещанные баги кидай в https://github.com/vitamin-caig/sjasmplus
Поскольку я не пользуюсь сим продуктом, в описании необходим тест-кейс (что на входе, что на выходе, что должно быть на выходе и т.п.).

introspec
21.02.2014, 13:11
psb, обещанные баги кидай в https://github.com/vitamin-caig/sjasmplus
Поскольку я не пользуюсь сим продуктом, в описании необходим тест-кейс (что на входе, что на выходе, что должно быть на выходе и т.п.).
Vitamin, готов приготовить баг репорт, но было бы лучше, если бы ты положил туда же бинарник текущий версии, чтобы я рапортовал именно по твоей сборке.

Vitamin
21.02.2014, 13:19
Vitamin, готов приготовить баг репорт, но было бы лучше, если бы ты положил туда же бинарник текущий версии, чтобы я рапортовал именно по твоей сборке.
Могу только сборку под archlinux x86_64 сделать- других окружений нет.

perestoronin
21.02.2014, 15:14
баги кидай в https://github.com/vitamin-caig/sjasmplus
бага есть, вот сценарий: проект http://portage.perestoroniny.ru/dev-embedded/sjasmplus/files/AER_Demo.ZIP
ошибка:

SjASMPlus Z80 Cross-Assembler v1.07 RC8 (build 06-11-2008)
Pass 1 complete (0 errors)
Pass 2 complete (0 errors)
Code.a80(176): error: Label not found: AER.MainCode.Logo.rnd
Pass 3 complete
Errors: 1, warnings: 0, compiled: 859 lines, work time: 0.003 seconds
Ожидается, что длина метки с именами модулей никогда не выйдет из формата <модуль.метка>
А у нас, получается, что имена всех модулей кода вложены куски кода лепятся слева к метке. Победить пока не пробывал и не знаю с чего начать. Хотелось бы узнать в каком RC этой баги не было. Может это новая фича и её тоже можно ключиком отключить ? Если да, то каким ?

ram_scan
21.02.2014, 17:21
ну конечно, вы опечатаетесь, сделаете вместо ld a,b - ld a,c, и вас все асмы предупредят.

Знаете, когда я был лет на 20 моложе мне тоже казалось что всякие строгие правила, ограничения, отсутствие каких-то мегафич которыми чешется попользоваться ровно два раза оскорбляют мое чувство творца, лишают меня свободы маневра, и вообще заставляют себя дураком чувствовать. Потом, с опытом у меня это "казалось" пропало.

Я даже не про макрос как таковой говорю. Я про косвенный эффект. Если я напишу код который не работает я буду разбираться в том что я написал и почему он не работает. Но я не имею желания разбираться в коде который я не писал. В моем конкретном случае я бы все равно в конце концов отладил код. Но то что нагенерил мне ассемблер дало интерференцию на другую процедуру которая работала правильно, вынуждая искать ошибку 1) в рабочем коде там где ее нет и 2) в эмуляторе.



в нормальной программе, где стек используется как стек, ничего страшного не случится в принципе. про то, что от таких команд может произойти что-то непредвиденное явно написано в доке

Во первых, с каких это пор использовать стек так как мне нравится а не так как нравится форумчаниу psb вдруг стало ненормальным ? И почему ?

Во вторых я уже наверное в третьем сообщении пытаюсь от вас добиться, не соблаговолит ли глубокоуважаемый джинн показать все-таки это место в доке ? А то вот я ее читаю, читаю, а места этого не вижу ?


может и EXA уничтожить?

Всенепременно. Во первых непонятно чем он лучше ex af,af'. Во вторых потому-что мнемоника стандартизирована. Хотите EXA - напишите макрос.


и запретить по нескольку команд/параметров юзать?

Всенепременно. Потому-что по крайней мере на моей памяти один раз эту фичу поменяли (если не ошибаюсь то порядок занесения параметров в стек). Во вторых манипуляция со стеком в одну строку не наглядна, интуитивно понятнее когда это написано в столбик.

Более того, за 20 лет программирования на ассемблере я навскидку не припомню чтобы подобная фича когда-то было действительно нужна, за исключением нескольких случаев особо извращенных макросов. У некоторых программистов правда руки чешутся использовать эту порнографию для генерации пролога и эпилога, так в нормальных ассемблерах существует документированный механизм их генерации через декларацию процедуры с аргументом uses. Там вообще думать не надо, и пролог и симметричный эпилог генерируются автоматически.



потом пойти дальше и запретить модули, case sensitive, мало ли, везде можно накосячить... я согласен лишь на отключение fakeops по дефолту.

Всенепременно. Оригинальный ассемблер всегда с рождения был case insensitive. Хотите ассемблер с шахматами и поэтессами, включайте все эти фишечки ручками, и сами потом кувыркайтесь с тем что вы там навключали.

То как в sjasm сделаны модули это вообще обнять и плакать. Во всех нормальных ассемблерах генерацию бинарного моделя делает линкер. А манмпуляции с подготовкой к линковке готового двоичного кода делает binobj. Во всяком случае у меня лично никогда проблем с этим не возникало. Зачем это в ассемблер тащить ? Делайте линкеры на свой вкус и цвет и настанет вам щщасте.

Более того, я бы ввел в ассемблер еще и строгую типизацию, запрещая допустим загружать в восьмибитный регистр значение переменной которая описана не как восьмибитная. Хочешь сделать запрещенный прием - напиши явно приведение типа, по крайней мере будет понятно что ты знаешь что делаешь, а не опечатался.

Я имею желание писать код, чтобы ассемблер максимально следил за тем что я делаю это правильно. И чтобы максимальное количество ошибок которые он способен отловить он отлавливал. В данном случае под "фичами" поданы сомнительные возможности которые увеличивают количество ошибок и ослабляют контроль за правильностью программы.

psb
21.02.2014, 18:08
ох лол! я не буду на все подробно отвечать - надоело, как об стенку. самое основное.


Во вторых я уже наверное в третьем сообщении пытаюсь от вас добиться, не соблаговолит ли глубокоуважаемый джинн показать все-таки это место в доке ? А то вот я ее читаю, читаю, а места этого не вижу ?
внимательность аж зашкаливает! я цитату выше давал из доки и жирным даже выделял то самое место.


Всенепременно.
руки прочь!

Всенепременно. Потому-что по крайней мере на моей памяти один раз эту фичу поменяли (если не ошибаюсь то порядок занесения параметров в стек).
руки прочь / читай доки.

Всенепременно. Оригинальный ассемблер всегда с рождения был case insensitive.
руки прочь!

Во всех нормальных ассемблерах генерацию бинарного моделя делает линкер.
ТАК ВОЗЬМИ ЖЕ НОРМАЛЬНЫЙ АССЕМБЛЕР!!!1 всех устраивает, тебя не устраивает, больше альтернативы что ли нет? вперед, осваивать "нормальные" ассемблеры, а нам и этого хватает.

был бы это другой форум, я бы более вежливо ответил.

SAM style
21.02.2014, 18:17
Ассемблер сам по себе - это рота танков, целящихся тебе в ногу. Если кодер ошибся и сделал не так, как хотел, но правильно с точки зрения ассемблера - это отстрел ноги по самые Нидерланды.
Использовать псевдокоманды, которые понимает только компилятор, но не процессор, без осознания, в какую коснтрукцию они будут развёрнуты - это ССЗБ, надо отличать их от команд процессора.
Среди очевидных выстрелов в ногу подпишусь только под попыткой загрузки в 8-битный регистр более чем 8 бит данных.

jerri
21.02.2014, 18:30
ram_scan, для вас есть отличнейший ассемблер от фирмы ZILOG вот им и пользуйтесь
а sjasm оставьте нам.

introspec
21.02.2014, 18:33
Среди очевидных выстрелов в ногу подпишусь только под попыткой загрузки в 8-битный регистр более чем 8 бит данных.
Вообще-то в этом случае sjasmplus даёт чёткое сообщение об ошибке.

psb
21.02.2014, 20:24
обещанные баги кидай в https://github.com/vitamin-caig/sjasmplus
не доступно issues... посмотри, может включить надо?

Vitamin
21.02.2014, 21:07
Чего-то не дает с мобилы. Завтра с компа попробую.

Alex Rider
22.02.2014, 00:32
Но я не имею желания разбираться в коде который я не писал. В моем конкретном случае я бы все равно в конце концов отладил код.
Но решил так не делать. Жаль. Написание кода на ассемблере требует отладки полученного бинаря. Боюсь тебя огорчить, но если твой код вдруг внезапно начнет модифицировать себя или не то, что ты планировал, на ассемблер свалить, увы, не получится.

Еще раз, покажите мне место в доке, где написано что встроенный макрос ld hl,ix имеет косвенный эффект в виде модификации стека.
Подумать надо. Z80 не может выполнить команду ld h,ixh. Варианты имитации ld rp1,rp2 расписаны в лохматых годах в Инфоркомовском трехтомнике. Пошаговую отладку кода что в эмуляторе, что в STS никто не отменял. Если Вам не нравится удобная фича, это не значит, что ее надо выпилить совсем.

Во первых непонятно чем он лучше ex af,af'.
Тем, что многие редакторы, видя апостроф, подсвечивают все дальшейшее строкой.

Во вторых манипуляция со стеком в одну строку не наглядна, интуитивно понятнее когда это написано в столбик.
Это для Вас она ненаглядна. А мне хочется больше кода на одном экране видеть. Подеремся?

Всенепременно. Оригинальный ассемблер всегда с рождения был case insensitive.
А компьютенные интерфейсы - текстовыми. Однако прогресс никто не отменял.

Хотите ассемблер с шахматами и поэтессами, включайте все эти фишечки ручками, и сами потом кувыркайтесь с тем что вы там навключали.
Ога, надо сделать ключи --tasm128compatible, --zasmcomaptible, --xascompatible, --zx-review_compatible и так далее. А то писавшие последний раз 20 лет назад тоже найдут 100500 отличий от канонiчного ассемблера Z80 и будут говорить, что "новомодные фишки" должны быть опциональными.

Делайте линкеры на свой вкус и цвет и настанет вам щщасте.
Плодите много сущностей! С ними так мило ностальгировать!

загружать в восьмибитный регистр значение переменной
Эм... Напомните, в какой версии SjASM появились переменные.

Я имею желание писать код, чтобы ассемблер максимально следил за тем что я делаю это правильно. И чтобы максимальное количество ошибок которые он способен отловить он отлавливал.
Этот (http://vtrdos.ru/system/GENS4TF.ZIP) умеет так.

psb
22.02.2014, 01:03
Alex Rider, против 20 лет опыта программирования на ассемблере не попрешь.

---------- Post added at 03:03 ---------- Previous post was at 02:42 ----------

Vitamin, че-то я еще посмотрел, а там файлы-то прицеплять нельзя... как примеры к тикетам приделать?

Vitamin
22.02.2014, 10:24
Vitamin, че-то я еще посмотрел, а там файлы-то прицеплять нельзя... как примеры к тикетам приделать?
Например, вставить как цитату.

psb
22.02.2014, 20:04
Например, вставить как цитату.
бинарные не вставишь... и кодировка в примерах поломается...

Vitamin
22.02.2014, 21:11
бинарные не вставишь... и кодировка в примерах поломается...
Открыл. Примеры неправильной сборки надо делать как можно короче, локализуя проблему. Они в тест регрессии пойдут сразу.

---------- Post added at 21:11 ---------- Previous post was at 21:09 ----------


бага есть, вот сценарий: проект http://portage.perestoroniny.ru/dev-...s/AER_Demo.ZIP
Упрости пример до минимума. Ковыряться в этой куче, выясняя кто же именно наглючил (асм или разработчик) нереально.

perestoronin
22.02.2014, 21:31
Упрости пример до минимума. Ковыряться в этой куче, выясняя кто же именно наглючил (асм или разработчик) нереально.
Вряд ли виноват разработчик примера. Пример не мой, что там упрощать - я не знаю, мне проще самому вывернуть кишки из кучи самого асма и перебрать их.
Я просто хотел чтобы проверили на своих сборках - с какого RC начался этот глюк, в примере есть эталонный sym - и в нем порядок - значит с каким-то RC этот пример собирался без сообщения о ненайденной метке.

Vitamin
22.02.2014, 21:34
Тогда чуть позже. Я пока болею, только в инет иногда выходить могу.

psb
22.02.2014, 21:48
Примеры неправильной сборки надо делать как можно короче, локализуя проблему.
они и так короткие и локализованные. но там встречается фигня в ср1251, например. я могу словами объяснить всё, а есть просто готовый файл. еще есть пара бинарных файлов.

могу заюючить:)

Vitamin
23.02.2014, 12:46
они и так короткие и локализованные. но там встречается фигня в ср1251, например. я могу словами объяснить всё, а есть просто готовый файл. еще есть пара бинарных файлов.

могу заюючить:)
Открыл баги. Пробуй приаттачить. У битбакета можно вложения делать, значит и на гитхабе должно.

Vitamin
23.02.2014, 19:15
psb, чем декодировать аттачи? В онлайне ничего не нашел. В репозитории только uudeview есть...

alone
23.02.2014, 19:45
Если речь про UUE или MIME-64, то их декодирует Total Commander.

Vitamin
23.02.2014, 20:13
Если речь про UUE или MIME-64, то их декодирует Total Commander.
Я на линуксе. Нашел уже.

perestoronin
06.03.2014, 18:16
По ошибке (http://zx.pk.ru/showpost.php?p=676649&postcount=956) есть прогресс ?


# sh compile.sh
SjASMPlus Z80 Cross-Assembler v1.07 RC8 (build 06-11-2008)
Pass 1 complete (0 errors)
Pass 2 complete (0 errors)
Code.a80(92): error: Label not found: AER.MainCode.Logo.rnd
Pass 3 complete
Errors: 1, warnings: 0, compiled: 452 lines, work time: 0.003 seconds




# grep rnd AER.sym AER.sym.orig
AER.sym:AER.boot.Logo.rnd: equ 0x00005D9D
AER.sym:rnd: equ 0x00000000
AER.sym:AER.MainCode.Logo.rnd: equ 0x00000000
AER.sym:Logo.rnd: equ 0x00000000
AER.sym.orig:Logo.rnd: equ 0x00005D9D
AER.sym.orig:rnd: equ 0x00000000
AER.sym.orig:MainCode.Logo.rnd: equ 0x00000000

Vitamin
06.03.2014, 18:32
Нет баги - нет прогресса.

Vitamin
06.03.2014, 19:15
Данная бага не была отмечена на моем форке проекта на гитхабе, а значит не существует, уж извините.

Shadow Maker
18.06.2014, 14:08
Vitamin, у меня к тебе предложение. Можешь добавить команды SAVETAP и SAVESCL в Sjasm? Сурцов сторонних утилит полно, сам знаешь, наверное не так сложно сделать. А то каждый свои глюки плодит, утомило.

Vitamin
18.06.2014, 14:46
Vitamin, у меня к тебе предложение. Можешь добавить команды SAVETAP и SAVESCL в Sjasm? Сурцов сторонних утилит полно, сам знаешь, наверное не так сложно сделать. А то каждый свои глюки плодит, утомило.
Говоря откровенно- это бред. Компилятор всего лишь должен создавать бинарь из текста. А что с этим бинарем делать- вопрос отдельный и решается отдельными утилитами. Нужно четкое разделение обязанностей компонентов- редактор, компилятор, компрессор, линковщик, архиватор, конвертер.

Shadow Maker
18.06.2014, 15:36
У тебя кстати два бага в багтрекере год висят. Я подозреваю, тут дело не в том, что это хрень...

Я вообще считаю, что это всего лишь запись бинарника в разные места. Принципиальной разницы между бинарником в контейнере и бинарником в папке я собственно не вижу.

Vitamin
18.06.2014, 15:51
У тебя кстати два бага в багтрекере год висят. Я подозреваю, тут дело не в том, что это хрень...
Вот один баг (про условия в макросах) - как раз последствия недоработок в ядре. Так просто не лечится. А второй- далекая от меня область (системные переменные). Проверить нормально не смогу.


Я вообще считаю, что это всего лишь запись бинарника в разные места. Принципиальной разницы между бинарником в контейнере и бинарником в папке я собственно не вижу.
А потом прикрутить встроенный компрессор, встроенный архиватор зипа, 7зипа и рара и т.п. Ну а фигли? Принципиальной разницы же нет.

denpopov
18.06.2014, 16:19
А вот дописать одну строчку чтоб добавляло результат в сцл- это уже сложно, да.
кстати, какую?

Shadow Maker
18.06.2014, 16:20
Строчка в первом посте этой темы.

SAM style
28.06.2014, 00:42
1.07rc8
Только что столкнулся с такой штукой - INCLUDE (наверное, INCBIN и похожие тоже) непривычно работает с относительными путями. Полный путь рассчитывается не от текущего файла, а от директории запуска sjasmplus. Например:
main.asm : INCLUDE "gamedata/data.asm"
gamedata/data.asm : INCLUDE "items.asm"
Сначала я полагал, что items.asm тоже должен лежать в gamedata, а нифига - не видит он его при таком обращении.

ПС : всю тему не читал. Если это где-то исправлено, скажите версию и где её взять.

introspec
28.06.2014, 02:00
INCLUDE (наверное, INCBIN и похожие тоже) непривычно работает с относительными путями. Полный путь рассчитывается не от текущего файла, а от директории запуска sjasmplus.Разве это не стандарт для любых утилит комстроки? я бы, например, не хотел бы, чтобы пути считались как-то иначе...

Vitamin
28.06.2014, 02:37
Разве это не стандарт для любых утилит комстроки?
Нет. Ибо "утилиты комстроки" обычно находятся где-то в системе и поиск инклюдов там же, как подсказывает Капитан, не увенчается успехом.

introspec
28.06.2014, 03:16
Нет. Ибо "утилиты комстроки" обычно находятся где-то в системе и поиск инклюдов там же, как подсказывает Капитан, не увенчается успехом.Смотря что хранить в инклюдах. Как подсказывает Капитан, "stdlib.h" у нас в распоряжении нет и не предвидится. Совершенно точно могу сказать: версию с путями от экзешника я использовать не буду.

SAM style
28.06.2014, 14:24
Смотря что хранить в инклюдах. Как подсказывает Капитан, "stdlib.h" у нас в распоряжении нет и не предвидится. Совершенно точно могу сказать: версию с путями от экзешника я использовать не буду.Сейчас не от экзешника рассчитаывается, а от WORKDIR - директории, в которой он был запущен. Просто хотелось бы, чтобы не WORKDIR был основой, а директория компилируемого на данный момент файла. Иначе вести большие проекты с вложенными директориями слегка неочевидно.

denpopov
28.06.2014, 14:33
Ага, вот валяются инклуды неизвестно где, почему-то кодеры забывают выложить исходники разом..

introspec
28.06.2014, 14:52
Сейчас не от экзешника рассчитаывается, а от WORKDIR - директории, в которой он был запущен. Просто хотелось бы, чтобы не WORKDIR был основой, а директория компилируемого на данный момент файла. Иначе вести большие проекты с вложенными директориями слегка неочевидно.Я думаю, тут весь спор происходит оттого, что некоторые люди работают в комстроке/файл менеджере, а некоторые - из среды. Из среды удобнее как ты описал, из комстроки - как сейчас. Грамотнее всего было бы добавить новый ключ командной строки, мне кажется.

SAM style
28.06.2014, 15:07
Я думаю, тут весь спор происходит оттого, что некоторые люди работают в комстроке/файл менеджере, а некоторые - из среды. Из среды удобнее как ты описал, из комстроки - как сейчас. Грамотнее всего было бы добавить новый ключ командной строки, мне кажется.Я из комстроки работаю, как сейчас мне вообще неудобно. Я запускаю sjasmplus main.asm и ожидаю, что все инклюды в инклюдах там сработают так же, как при работе gcc.
Может, я плохо объясняю, но вот пример - инклюд из инклюда из вложеной директории. При попытке скомпилить main.asm идёт ругань на несуществующий items.asm:
sam@debian:~/data/temp/project$ sjasmplus main.asm
SjASMPlus Z80 Cross-Assembler v1.07 RC8 (build 06-11-2008)
gamedata/data.asm(6): error: Error opening file: items.asmА если выйти на уровень выше и сделать sjasmplus project/main.asm, то он вообще ни одного инклюда не обработает.

Shadow Maker
28.06.2014, 15:19
В принципе для всех, кто работает как сейчас, ничего не поменяется по-моему от того, если сделать инклюды как предлагает Sam Style.

Shadow Maker
28.06.2014, 16:54
В общем, поскольку 99% людей пользуется сборщиками (make, bat), а если и запускают - ходят в папку с проектом перед запуском - то это действительно несколько странный запрос. Несложно ж сделать мейк и не думать через год, чего там как собирается, разве не так?

SAM style
28.06.2014, 17:03
В общем, поскольку 99% людей пользуется сборщиками (make, bat), а если и запускают - ходят в папку с проектом перед запуском - то это действительно несколько странный запрос. Несложно ж сделать мейк и не думать через год, чего там как собирается, разве не так?НАЙН! Я не про это. Посмотри вложение в прошлом посте - там в комментариях написано. Где должен лежать файл, который подключается из файла, который сам подключен из main.asm и лежит в поддиректории?

introspec
28.06.2014, 17:10
НАЙН! Я не про это. Посмотри вложение в прошлом посте - там в комментариях написано.SAM style, я посмотрел и придерживаюсь старой точки зрения. Если все библиотеки лежат в "include\...", логично что ты все библиотеки так именно и включаешь. Си имеет систему дополнительных папок, типа lib, которые прибиты гвоздями, сорри, считаются по относительным путям от экзешника. По идее, такие доп. пути сделали бы то, что тебе хочется.

Чтобы чётче прозвучало: я очень люблю проекты со 100500 файлами разбросанными по папкам, т.е. я очень активно использую и include, и incbin. Но то, что тебе хочется сделать, кажется мне актуальным только если гонять файлы из папки в папку. Обычно мне не хочется это сделать. Ты уверен, что ты именно что хочешь это сделать?

SAM style
28.06.2014, 17:25
Чтобы чётче прозвучало: я очень люблю проекты со 100500 файлами разбросанными по папкам, т.е. я очень активно использую и include, и incbin. Но то, что тебе хочется сделать, кажется мне актуальным только если гонять файлы из папки в папку. Обычно мне не хочется это сделать. Ты уверен, что ты именно что хочешь это сделать?Я не очень люблю кучу файлов, а ещё больше не люблю, когда в огромных файлах каша из тонн кода и данных. Но проект разбух до такой степени, что неизбежно появится либо одно, либо другое.
Если сравнивать с Си, то Сджасмовские инклюды куда ближе к #include "file", чем к #include <file>. В первом случае никаких дополнительных путей не надо - путь у файлу рассчитывается относительно директории файла, из которого он подключен. Внезапно подумалось, что и здесь действует такой же подход, а нет...

Vitamin
28.06.2014, 20:15
introspec, а ты можешь припомнить другие тулзы, обрабатывающие инклюды относительно не текущего файла, а относительно текущей директории?

introspec
28.06.2014, 20:22
introspec, а ты можешь припомнить другие тулзы, обрабатывающие инклюды относительно не текущего файла, а относительно текущей директории?Так ведь текущая папка - понятие командного процессора, а не вызванной утилиты. Поэтому любые утилиты так работают. Сишный стандарт вот так из головы сейчас не вспомню, но нахожу удобство относительных файловых путей скорее спорным.



Sent from my HTC One using Tapatalk

Vitamin
28.06.2014, 20:34
Так ведь текущая папка - понятие командного процессора, а не вызванной утилиты.
Нет. Это свойство процесса.
http://linux.die.net/man/3/getcwd


Сишный стандарт вот так из головы сейчас не вспомню, но нахожу удобство относительных файловых путей скорее спорным.
В с/с++ правила несколько сложнее.

http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html

GCC looks for headers requested with #include "file" first in the directory containing the current file, then in the directories as specified by -iquote options, then in the same places it would have looked for a header requested with angle brackets. For example, if /usr/include/sys/stat.h contains #include "types.h", GCC looks for types.h first in /usr/include/sys, then in its usual search path.

http://msdn.microsoft.com/ru-ru/library/36k2cdd4.aspx

Препроцессор ищет включаемые файлы в следующем порядке:
В том же каталоге, где находится файл с оператором #include.
В каталогах открытых в данный момент включаемых файлов (в порядке, обратном тому, в котором они открывались). Поиск начинается в каталоге родительского включаемого файла, а затем выполняется в каталогах всех включаемых файлов-прародителей.
По путям, заданным всеми параметрами компилятора /I.
По путям, заданным в переменной среды INCLUDE.


Как видно, "текущий каталог процесса" тут никоим боком не присутствует, зато присутствует путь текущего файла.

introspec
28.06.2014, 22:57
Нет. Это свойство процесса.
http://linux.die.net/man/3/getcwdНу да, а как называется наш процесс при сборке из батника? "cmd"! Вот поэтому поведение компилятора си и кажется не до конца логичным: оно может работать только в рамках одной программы или пакета вместе написанных программ. При сборке лапшой из разного кода это не работает.

Vitamin
29.06.2014, 01:01
Ну да, а как называется наш процесс при сборке из батника? "cmd"!
sjasmplus.exe он называется в случае винды. Или cmd уже умеет инклюдить файлы и преобразовывать их в объектный код для зетника?


Вот поэтому поведение компилятора си и кажется не до конца логичным: оно может работать только в рамках одной программы или пакета вместе написанных программ. При сборке лапшой из разного кода это не работает.
Бл... ин! ЧТО ИМЕННО не работает? Ты хорошо выходные отпраздновал чтоли?

esl
03.07.2014, 17:37
Подскажите, можно ли создать новую метку в макросе ?
что-то типа такого (это перебежал в PASM)


macro xx, nn,hh,value
fn_ ## nn ## _h ## hh ## _i0:
ld a,value
jp do_fill
fn_ ## nn ## _h ## hh ## _i1:
ld a,value XOR 0xff
jp do_fill
endm

do_fill:

xx '1','0',11110000b
xx '2','0',01111000b
xx '3','0',00111100b
xx '4','0',00011110b
xx '5','0',00001111b


получаем такое


do_fill EQU 00000H
fn_1_h0_i0 EQU 00000H
fn_1_h0_i1 EQU 00005H
fn_2_h0_i0 EQU 0000AH
fn_2_h0_i1 EQU 0000FH
fn_3_h0_i0 EQU 00014H
fn_3_h0_i1 EQU 00019H
fn_4_h0_i0 EQU 0001EH
fn_4_h0_i1 EQU 00023H
fn_5_h0_i0 EQU 00028H
fn_5_h0_i1 EQU 0002DH


т.е конструируем имя теки из параметров.
такое еще m80 81года рождения умел.

---------- Post added at 16:37 ---------- Previous post was at 16:36 ----------

и заодно, можно ли в LUA скрипт параметр передать (типа как луа как макрос с параметром)

примеров в доке ЖУТКО не хватает.

esl
03.07.2014, 22:37
спасибо, а вызывать как ?
пример бы

esl
04.07.2014, 00:08
огромное спасибо!
с одной стороны круто иметь встроенный язык
с другой - выглядит со стороны это как ... что-то пришитое сбоку :(

jerri
04.07.2014, 00:32
Подскажите, можно ли создать новую метку в макросе ?
что-то типа такого (это перебежал в PASM)


macro xx, nn,hh,value
fn_ ## nn ## _h ## hh ## _i0:
ld a,value
jp do_fill
fn_ ## nn ## _h ## hh ## _i1:
ld a,value XOR 0xff
jp do_fill
endm

do_fill:

xx '1','0',11110000b
xx '2','0',01111000b
xx '3','0',00111100b
xx '4','0',00011110b
xx '5','0',00001111b


получаем такое


do_fill EQU 00000H
fn_1_h0_i0 EQU 00000H
fn_1_h0_i1 EQU 00005H
fn_2_h0_i0 EQU 0000AH
fn_2_h0_i1 EQU 0000FH
fn_3_h0_i0 EQU 00014H
fn_3_h0_i1 EQU 00019H
fn_4_h0_i0 EQU 0001EH
fn_4_h0_i1 EQU 00023H
fn_5_h0_i0 EQU 00028H
fn_5_h0_i1 EQU 0002DH


т.е конструируем имя теки из параметров.
такое еще m80 81года рождения умел.

---------- Post added at 16:37 ---------- Previous post was at 16:36 ----------

и заодно, можно ли в LUA скрипт параметр передать (типа как луа как макрос с параметром)

примеров в доке ЖУТКО не хватает.


нельзя вроде.
но можно попробовать.

esl
04.07.2014, 00:44
нельзя вроде.
но можно попробовать.

?!?

---------- Post added at 23:44 ---------- Previous post was at 23:42 ----------


Ну на самом деле очень полезная весчь. Просто в аспекте данного примера это пушкой по воробьям

в том то и дело :(
я для похожих целей ruby использую.

SAM style
09.07.2014, 23:31
И снова я с тупыми вопросами. Попытался вникнуть в структуры:
DEVICE ZXSPECTRUM128

STRUCT SCOLOR
RED BYTE 0
GREEN WORD 0
BLUE WORD 0
ENDS

org 0x6000

Loop jr Loop

Table SCOLOR 1,2,3
SCOLOR 4,5,6

SAVESNA "test.sna",0x6000На выхлопе получаю
main.asm(14): error: Unrecognized instruction: SCOLOR 4,5,6
Т.е выделение памяти под структуру с меткой проходит, а без метки - ошибка. Хотя в мануале Example 6.4. описывает таблицу структур:
Or without label:

COLORTABLE
SCOLOR 0,0,0
SCOLOR 1,2,3
SCOLOR ,2
; etc.
WTF?

Sergey
10.07.2014, 19:19
И снова я с тупыми вопросами. Попытался вникнуть в структуры... WTF?
Нормальные вопросы.
Для начала пример рабочей структуры:

STRUCT BMHD,0
_W WORD 0
_H WORD 0
_X WORD 0
_Y WORD 0
nPlanes BYTE 0
masking BYTE 0
compress BYTE 0
pad BYTE 0
transparency WORD 0
xAspectRatio BYTE 0
yAspectRatio BYTE 0
PageWidth WORD 0
PageHeight WORD 0
ENDS
Этим мы создали ТИП ДАННЫХ "структура BMHD".

А это объявление конкретной переменной этого типа:

@MyBMHD: DS BMHD,0
В данном случае она пустая, потому что данные в неё будут считаны из файла.
Если тебе надо её проинициализировать "статично", то вместо ds надо использовать соответствено DB и DW и т.п.
Например:

@MyBMHD: DW 1,2,3,4
DB 5,6,7,8
DW 9
DB 10,11
DW 12,13

Теперь для обращения к элементам структуры можно пользоваться их именами.
Например:


LD IX,MyBMHD
LD A,(IX+BMHD.nPlanes)
...
LD L,(IX+BMHD._W+1)
LD H,(IX+BMHD._W)

Если что не понятно, спрашивай.

SAM style
10.07.2014, 20:37
Нет, как оно работает, я вкурил. Вопрос в том, почему нельзя сделать таблицу структур, не присобачивая к каждой метку (пусть и временную).
В документации расписано, что конструкция <ИМЯ_СТРУКТУРЫ> [значения полей,...] должно выделять в памяти область под структуру и заполнять её значениями, то есть можно указать так:
BMHD 5,6,7,8 и всё должно быть хорошо, пропущенные поля инициализируются значениями по умолчанию.
Но, оказывается, разместить такую конструкцию без метки в начале строки нельзя:
Label BMHD 5,6,7,8 ; это скомпилируется, выделит память, заполнит её и даже потом можно обращаться к элементам через Label._W, Label._H итд
BHMD 5,6,7,8 ; а это - не скомпилируется
Имеющуюся у меня документацию прилагаю. См. Chapter 6. Structures, особенно Example 6.4. - реальное поведение сджасма не совпадает с документированным.

Sergey
11.07.2014, 08:56
реальное поведение сджасма не совпадает с документированным.
Похоже, ты прав, - это просто баг или недоработка ассемблера. Возможно, поэтому я и пришёл к инициализации этих структур вышеописанным способом. Сейчас точно не помню, - больше полугода назад было.

Sergey
13.07.2014, 21:59
А-аааааааа! Всё ПРАПАЛО! ПОДСТАВА! ИЗМЕНА! НАС ПРЕДАЛИ!!!
Опция "--raw=<filename>" не работает! Я так понял, она должна "насильно" сохранять результат компиляций в бинарник с заданным именем, - ничего подобного - файл получается пустой, длина = 0.
Кто может пофиксить? А то эта бага мне автоматизацию ломает :(

SAM style
13.07.2014, 23:10
А-аааааааа! Всё ПРАПАЛО! ПОДСТАВА! ИЗМЕНА! НАС ПРЕДАЛИ!!!
Опция "--raw=<filename>" не работает! Я так понял, она должна "насильно" сохранять результат компиляций в бинарник с заданным именем, - ничего подобного - файл получается пустой, длина = 0.
Кто может пофиксить? А то эта бага мне автоматизацию ломает :(
В той версии, что у меня (1.07rc8), работает - что с OUTPUT в самом начале, что без него и с --raw получаются файлы ненулевой длины.

Sergey
13.07.2014, 23:45
В той версии, что у меня (1.07rc8), работает - что с OUTPUT в самом начале, что без него и с --raw получаются файлы ненулевой длины.
А где его брать-то? - у меня rc7 :(