PDA

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



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

Aprisobal
08.03.2005, 18:55
Доработанная версия SjASM'a by Sjoerd Mastijn - SjASMPlus. Текущая версия 1.07 RС8 (в github) и основана на SjASM 0.39f(но включает все исправления от версии g).

При нахождении глюков прошу писать в ЛС или делать пулл-реквесты в Github.

Исходник прилагается.

Помощники:
Читаем documentation/documentation.htm, входящего в состав компилятора.

---------------------------------------------

Веб-сайт:
http://sjasmplus.sourceforge.net

Страница проекта на GITHUB:
https://github.com/mkoloberdin/sjasmplus

Страница проекта на SourceForge:
http://sourceforge.net/projects/sjasmplus/

Качать:
http://sourceforge.net/project/showfiles.php?group_id=173915
Качать с сайта: http://sjasmplus.sourceforge.net
Win32 1.07 RC7: http://prdownloads.sourceforge.net/sjasmplus/sjasmplus-win32-1.07-rc7.zip?download
Win32 1.07 RC6: http://prdownloads.sourceforge.net/sjasmplus/sjasmplus-win32-1.07-rc6.zip?download
Win32 1.07 RC5bf: http://prdownloads.sourceforge.net/sjasmplus/sjasmplus-win32-1.07-rc5bf2.zip?download
Win32 1.07 RC5: http://prdownloads.sourceforge.net/sjasmplus/sjasmplus-win32-1.07-rc5.zip?download
Win32 1.07 RC4bf: http://prdownloads.sourceforge.net/sjasmplus/sjasmplus-win32-1.07-rc4bf.zip?download
Win32 1.07 RC4: http://prdownloads.sourceforge.net/sjasmplus/sjasmplus-win32-1.07-rc4.zip?download
Win32 1.07 RC3: http://prdownloads.sourceforge.net/sjasmplus/sjasmplus-win32-1.07-rc3.zip?download
Win32 1.07 RC2: http://prdownloads.sourceforge.net/sjasmplus/sjasmplus-win32-1.07-rc2.zip?download
Win32 1.07 RC1bf: http://prdownloads.sourceforge.net/sjasmplus/sjasmplus-win32-1.07-rc1bf.zip?download
Win32 1.07 RC1: http://prdownloads.sourceforge.net/sjasmplus/sjasmplus-win32-1.07-rc1.zip?download
Win32 1.06 Stable: http://prdownloads.sourceforge.net/sjasmplus/sjasmplus-win32-1.06-stable.zip?download
FreeBSD 1.06 Stable: http://prdownloads.sourceforge.net/sjasmplus/sjasmplus-freebsd-1.06-stable.zip?download
DOS 1.06 Stable: http://prdownloads.sourceforge.net/sjasmplus/sjasmplus-dos-1.06-stable.zip?download

F.A.Q.
Q: SjASMPlus не понимает путей к файлам вида C:\Program Files\...!!!
A: Для задания пути к файлу, в котором содержатся пробелы, его нужно выделять в кавычки. Пример:
sjasmplus.exe "C:\Program Files\myproga.asm"
если в коде, то:
INCLUDE "C:\Program Files\myproga.asm"

Q: SjASMPlus безбожно тормозит!
A: Возможно ваш редактор при вызове компилятора дает последнему низкий приоритет. Также компилятор может медленнее работать, если захват выходных данных в вашем редакторе тормозит исполнение приложения. Такое, например, наблюдается в редакторе ConTEXT.

Q: Как записать данные в SCL-файл?
Воспользуйтесь этой программой: http://zx.pk.ru/showthread.php?t=10559
Её можно вызвать например через скрипт типа bat (Windows) или sh (Linux) на этапе ассемблирования, или непосредственно в ассемблерном файле через SHELLEXEC:

SHELLEXEC "mctrd cscl image.scl"
SHELLEXEC "mctrd add имяфайла image.scl"

Q: Как записать данные в TAP-файл?
Воспользуйтесь этой программой: http://zx.pk.ru/showthread.php?p=514586 (Windows)
Её можно вызвать например через скрипт типа bat (Windows) на этапе ассемблирования, или непосредственно в ассемблерном файле через SHELLEXEC:

SHELLEXEC "taptool.exe +f tap.tap example.bin example C 24576"

elf/2
08.03.2005, 22:33
Выпущена под лицензией GNU/GPL. Исходник прилагается.

извини что занудствую, но какое ты имеешь право выпусткать чужой продукт со своими изменениями по другой лицензии?
у товарища Sjoerd Mastijn лицензия отнють не GPL...

Producer
08.03.2005, 23:43
извини что занудствую, но какое ты имеешь право выпусткать чужой продукт со своими изменениями по другой лицензии?
у товарища Sjoerd Mastijn лицензия отнють не GPL...
Товарищ SM ни на сайте (http://www.xl2s.tk/) ни в рид.ми не указывал лицензию, есть лишь копирайт, указывающий на то, что Апри не может указать свое авторство.

"...
GPL - это лицензия, под которой выпускается свободное ПО). Коротко и упрощенно, GPL - это лицензия на программное обеспечение, которая предоставляет пять основных прав:
п1 Вы, как автор программы, оставляете за собой право авторства программой
п2 Вы можете использовать программу
п3 Вы можете модифицировать программу
п4 Вы можете свободно распространять программу
п5 Вы можете получать прибыль, продавая программу или осуществляя любую другую коммерческую деятельность, связанную с программой, но не подпадающую под пункт об использовании. При этом Вы обязаны распространять ее вместе с исходниками
..."

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

ЗЫ и вообще о чем и зачем мы дискутируем?
Проделана работа, человек делится своими наработками.

breeze
08.03.2005, 23:57
ЗЫ и вообще о чем и зачем мы дискутируем?
Проделана работа, человек делится своими наработками.

полностью согласен! больше и лучше хорошего софта! :eek:

Aprisobal
09.03.2005, 02:13
полностью согласен! больше и лучше хорошего софта! :eek:Нашёл интересную директиву в SjASM'е - MODULE. Позволяет создавать как бы библиотеки-модули, метки внутри которых, будут действовать только внутри них. А чтобы обратится к метке другого модуля, будет достаточно написать имя модуля перед меткой, i.e. CALL mylibrary.DOWNHL. Очень удобно при написании больших программ и подключении внешних библиотек. Подробнее см. в readme SjASM'a.

elf/2
09.03.2005, 15:40
Товарищ SM ни на сайте (http://www.xl2s.tk/) ни в рид.ми не указывал лицензию, есть лишь копирайт, указывающий на то, что Апри не может указать свое авторство.

в вот это что:
SjASM Z80 Assembler

Copyright (c) 2005 Sjoerd Mastijn

This software is provided 'as-is', without any express or implied warranty.
In no event will the authors be held liable for any damages arising from the
use of this software.

Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it freely,
subject to the following restrictions:

1. The origin of this software must not be misrepresented; you must not claim
that you wrote the original software. If you use this software in a product,
an acknowledgment in the product documentation would be appreciated but is
not required.

2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.

3. This notice may not be removed or altered from any source distribution.

типичный пример Public Domain Software Licence


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

нельзя быть немножко беременной, если GPL то GPL. нельзя использовать GPL но не задействовать п.5 :)
твоя версия GPL действительно сильно упрощенная :)


ЗЫ и вообще о чем и зачем мы дискутируем?
Проделана работа, человек делится своими наработками.
да я только ЗА!!! но давайте будем более аккуратно относиться к чужой интелектуальной собственности и другим аспектам авторского права. особенно при живом авторе.
а уж вставлять модные слова типа GNU, GPL, etc надо вообще с большой аккуратностью...

Aprisobal
09.03.2005, 18:03
...
да я только ЗА!!! но давайте будем более аккуратно относиться к чужой интелектуальной собственности и другим аспектам авторского права. особенно при живом авторе.
а уж вставлять модные слова типа GNU, GPL, etc надо вообще с большой аккуратностью...Вчера написал письмо автору по этому поводу и только что получил ответ:

Hi Aprisobal,

Great to hear you like SjASM. I have no problem with anyone modifying it.
However, you should make clear in the sourcefiles also that it's a modified
version.

Yours,

Sjoerd Mastijn.Как видите с правами всё в норме. Также автор требует дописать в исходниках, что они изменены. Хорошо.
Но всё равно лучше уберу GNU/GPL, чтобы не было лишних вопросов.

elf/2
09.03.2005, 18:30
Вчера написал письмо автору по этому поводу и только что получил ответ: Как видите с правами всё в норме. Также автор требует дописать в исходниках, что они изменены. Хорошо.
Но всё равно лучше уберу GNU/GPL, чтобы не было лишних вопросов.
супер! а нельзя ли тогда интегрировать твои изменения в основную версию? чтобы две параллельные ветки не плодить. особенно учитывая тот факт что автор вроде 0.4 версию обещает...
и еще маленькая просьба, не мог бы ты свои изменения в исходниках sjasm'а как-нибудь отмечать?


кстати, спасибо за хороший кросс-асм

Aprisobal
10.03.2005, 02:39
супер! а нельзя ли тогда интегрировать твои изменения в основную версию? чтобы две параллельные ветки не плодить. особенно учитывая тот факт что автор вроде 0.4 версию обещает...
Лучше, наверное, переносить мои изменения в будущие авторские версии.


и еще маленькая просьба, не мог бы ты свои изменения в исходниках sjasm'а как-нибудь отмечать?Сделал.

Вышла новая версия. Всю информацию об изменениях смотрите в первом посте.

Aprisobal
13.03.2005, 20:02
Вышла новая версия SjASMPlus - 1.02. Сильно ускорено время компиляции. 250000 различных строк кода компилируется за 2.5 секунды вместо 7 секунд (!) и кушает памяти в 3 раза меньше. Остальные изменения см. в первом посте.
Также в проекте стал принимать участие Kurles^HS^CPU (добавил директивы DISP и ENT и оказал помощь в добавлении поддержки памяти спекки).

breeze
14.03.2005, 01:07
Может я конечно чего не понял но вот с SAVESNA какая-то засада :(

вот пример:


org #8000
main jp _main
init_system jp _init_system

;---------------------------------------------------------
; Include modules for another platform:

include "system.asm" ;main modul

SAVESNA "..\bin\main.sna",#8000


а вот результат компиляции :( точнее её отсутвие...



---------- Capture Output ----------
> "D:\zx programs\sjasm\sjasm.exe" -m -p D:\MyZX\projects\bios3\src\main.asm
SjASMPlus Z80 Cross-Assembler v1.02 (debug)
Pass 1 complete (0 errors)
D:\MyZX\projects\bios3\src\main.asm line 27: Unrecognized instruction: "..\bin\main.sna",#8000
D:\MyZX\projects\bios3\src\main.asm line 27: Unexpected: "..\bin\main.sna",#8000
Pass 2 complete
Errors: 2
Work time: 0.010 seconds

> Terminated with exit code 1.

Aprisobal
14.03.2005, 01:28
У тебя ошибка, в том, что перед SAVESNA должен быть хоть какой-нибудь пробел, т.к. это директива, а не метка.

breeze
14.03.2005, 01:46
У тебя ошибка, в том, что перед SAVESNA должен быть хоть какой-нибудь пробел, т.к. это директива, а не метка.

ага! с этим ясно! но вот засада в том что ключ -p не работает ! то есть pop af,bc,de,hl как периварачивал! так и переварачивает :(

ы ?

Aprisobal
14.03.2005, 01:55
ы ?Ключ -p работает правильно. Он включает обратную компиляцию POP (pop af,bc --> pop bc, pop af). По умолчанию этот ключ отключён и соответственно компиляция будет такая: pop af,bc --> pop af, pop bc
И вообще RTFM! :mad:


-P включает обратную обработку команды POP (т.е. POP AF,BC ; pop bc / pop af <- в реальности будет наоборот)

Alex/AT
14.03.2005, 10:35
Хотелось бы еще SAVEZ80 и SAVEHOB ;)

Aprisobal
14.03.2005, 20:00
Эй, модераторы! Shadow Maker, а куда твой пост делся? И ответ на него random'a?
И почему изменился ID темы? Раньше был 404, а тут вдруг стал 447. В моей подписи стоит старый ID=404 и теперь, при переходе по ссылке [SjASMPlus], форум выдаёт ошибку.

Producer
14.03.2005, 20:07
Эй, модераторы! Shadow Maker, а куда твой пост делся? И ответ на него random'a?
И почему изменился ID темы? Раньше был 404, а тут вдруг стал 447. В моей подписи стоит старый ID=404 и теперь, при переходе по ссылке [SjASMPlus], форум выдаёт ошибку.
Похоже на форуме работает группа зачистки :) Вот только чем она руководствуется? CityAceE?

Shadow Maker> Руководствуюсь здравым смыслом :)

Aprisobal
15.03.2005, 02:21
Вышла новая версия SjASMPlus - 1.03. См. первый пост темы.

random
15.03.2005, 05:46
это Shadow Maker чтобы не позориться удалил :)
aprisobal, слушай, а как прикрутить сей асм к кримсону? кинь свой конфиг, будь любезен. Да и подстветку настраивать самостоятельно как то влом =)

breeze
15.03.2005, 09:41
это Shadow Maker чтобы не позориться удалил :)
aprisobal, слушай, а как прикрутить сей асм к кримсону? кинь свой конфиг, будь любезен. Да и подстветку настраивать самостоятельно как то влом =)

Очень просто! получился суперский IDE Z80 :)
есть идея выложить настроенный пакет CE + sjASM + Unreal = улётная работа и удобство написания :D

или могу пошаговый FAQ написать ? :rolleyes:

random
15.03.2005, 10:51
ну пошаговый не надо, просто выложить файл подсветки (родной кривой какой-то), батничек для сборки/отладки, еще там чего нибудь.

писать мы все горазды, а ты приаттачь их :)

Shadow Maker
15.03.2005, 11:52
Эй, модераторы! Shadow Maker, а куда твой пост делся? И ответ на него random'a? И почему изменился ID темы? Раньше был 404, а тут вдруг стал 447. В моей подписи стоит старый ID=404 и теперь, при переходе по ссылке [SjASMPlus], форум выдаёт ошибку.
ID изменился, потому что я сюда некоторые мессаги из /Хороший ПЦшный ассемблер - залог успеха!/ добавил, потому как достало - про одну и ту же программу обсуждают в 10 местах... Не делайте так, и ID меняться не будут :)

Пост и ответ естессно я удалил :) Ибо действительно тупо получилось :) Тем более никакой смысловой нагрузки в посте и не было...

А файлик во вложении - это раскраска для Кримсона, мне апри который присылал, думаю он не обидится :)

Spectre
15.03.2005, 13:26
2Aprisobal:

В процессе переделки исходников написанных в sjasm'е в аласм и наоборот всплыли несколько мелких проблем, которые легко исправить в sjasm:

1) Перед IF обязательно должен быть пробел
2) XOR у него нестандартный: "^", а не "!"

Так же известно что в аласме IF перевернут относительно нормального, приходится юзать IFN. Как вариант в sjasm можно было-бы добавить команду IFN (то же самое что IF).

random
15.03.2005, 13:45
! это всегда было NOT, а не ксор, как возомнили о себе левые асмы :)
XOR же всегда был ^. пожалуйста, не портите АСМ изменяя такие БАЗОВЫЕ истины.

а что значит IF с пробелом?

Spectre
15.03.2005, 18:17
2Random:

Я всего-лишь прошу незначительной доделкой sjasm'а облегчить жизнь тем кто переносит исходники между двумя ассемблерами. Следование канонам и классике программирования здесь далеко не на первом месте.

Shadow Maker
15.03.2005, 18:29
По поводу ксора я согласен с random'ом, тем более мне кажется, что тебе вполне по силам написать конвертор из Аласма в сьясм... А по поводу IFN - думаю вполне можно было бы добавить... Кстати, в этом плане более удобно сделан ASAM - там можно самому добавлять любые alias'ы любым командам...

breeze
15.03.2005, 19:12
ээээ.... я конечно фиг его знает, но будьте любезны приведите пример исходника из спекрумовсекого асма ? что-то я не помню директив IF ^ :o

я знаю только команды XOR и многие другие... :rolleyes:

breeze
15.03.2005, 19:13
ну пошаговый не надо, просто выложить файл подсветки (родной кривой какой-то), батничек для сборки/отладки, еще там чего нибудь.

писать мы все горазды, а ты приаттачь их :)

ну эт я смогу только как домой доберусь, так что coming soon... :(

Spectre
15.03.2005, 20:30
По поводу ксора я согласен с random'ом, тем более мне кажется, что тебе вполне по силам написать конвертор из Аласма в сьясм...

Мне по силам и новый Аласм написать, но мне не нужен конвертер или что-либо подобное! Мне нужна возможность работы с одним исходником как в Аласме так и в sjasm'е без всяких изменений оного! То есть легко и просто компилить один и тот же исходник в любом из этих асмов.


А по поводу IFN - думаю вполне можно было бы добавить... Кстати, в этом плане более удобно сделан ASAM - там можно самому добавлять любые alias'ы любым командам...

Во многих ассемлерах можно добавить собственные инструкции через макросы. Но зачем это делать в каждом исходнике, если это можно добавить в сам асм?!

Подожду я лучше самого Aprisobal'я.

Aprisobal
15.03.2005, 21:32
Пост и ответ естессно я удалил Ибо действительно тупо получилось Тем более никакой смысловой нагрузки в посте и не было...Много чего на форуме и в этой ветке в частности не имеет никакой смысловой нагрузки. Получается надо удалить почти все посты breeze'a, elf/2, Producer'a в этой ветке или есть какой-то другой критерий?


По поводу ксора я согласен с random'ом, тем более мне кажется, что тебе вполне по силам написать конвертор из Аласма в сьясм... А по поводу IFN - думаю вполне можно было бы добавить... Кстати, в этом плане более удобно сделан ASAM - там можно самому добавлять любые alias'ы любым командам...В отличие от ASAM, SjASM (..Plus) проект с открытыми исходниками и любой человек, знающий Си может туда добавить свою директиву/функцию и пр. и отправить мне изменённый код, который я сравню со старым с помощью UltraCompare для вставки и анализа изменений, и с удовольствием впишу его в соавторы.

1) Перед IF обязательно должен быть пробел
2) XOR у него нестандартный: "^", а не "!"1) Проблема в том, что несколько странно, что Аласм позволяет такое делать и не расценивает её как метку. Может проще сделать замену ("IF"=>" IF"), а то вдруг у кого-нибудь не заработает исходник, если добавлю это.
2) Я бы с радостью, но это уже стало стандартом на ПЦ. :( Но правда в Сторме, судя по его документации, символы логических операций ещё более не соответствует ПЦ:
& AND, ! OR, | XOR Только есть вариант с добавлением ещё одного ключа, который будет включать пресеты для разных ассемблеров(для Alasm, Zasm, Storm).

Как вариант в sjasm можно было-бы добавить команду IFN (то же самое что IF).Ок. А пока можешь использовать IF !(<expression>), т.к. ! символ отрицания.
Не совсем понял, что ты имеешь в виду под "Так же известно что в аласме IF перевернут относительно нормального"? Это если в IF выражение TRUE, то будет компилироваться то, что после ELSE?

Приаттачил файл раскраски для Crimson Editor, в котором добавлены все новые директивы.

батничек для сборки.bat файл? В Crimson Editor можно настроить Tools и назначить их на горячие клавиши. Например F9 - запуск ассемблера(только поставь галку Capture Output) , F10 - запуск UnrealSpeccy.

Spectre
15.03.2005, 23:37
1) Проблема в том, что несколько странно, что Аласм позволяет такое делать и не расценивает её как метку. Может проще сделать замену ("IF"=>" IF"), а то вдруг у кого-нибудь не заработает исходник, если добавлю это.

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


2) Я бы с радостью, но это уже стало стандартом на ПЦ. :( Но правда в Сторме, судя по его документации, символы логических операций ещё более не соответствует ПЦ:
& AND, ! OR, | XOR Только есть вариант с добавлением ещё одного ключа, который будет включать пресеты для разных ассемблеров(для Alasm, Zasm, Storm).
Ок. А пока можешь использовать IF !(<expression>), т.к. ! символ отрицания.
Не совсем понял, что ты имеешь в виду под "Так же известно что в аласме IF перевернут относительно нормального"? Это если в IF выражение TRUE, то будет компилироваться то, что после ELSE?

Аласм выполняет IF если в нем нулевой результат! А вот IFN аналог правильного IF'а (выполняется если не ноль).

Aprisobal
16.03.2005, 00:06
Аласм выполняет IF если в нем нулевой результат! А вот IFN аналог правильного IF'а (выполняется если не ноль).В SjASM'е директива IF сделана правильно. Может целесообразней исправить эту ошибку в Alasm 5.0, чем портить прекрасный ассемблер, перенося в него все особенности Alasm'a,Zasm'a и пр., присущие только им и внедрённые по некомпетентности авторов?
Скорее нужно написать Alone Coder'у и тем, кто собирается дорабатывать Zasm:
"1) Почему XOR нестандартный '!' ?
2) Почему неправильно работает IF, проверяя на 0, а не на 1, как во всех языках программирования в мире?"

Shadow Maker
16.03.2005, 01:35
Много чего на форуме и в этой ветке в частности не имеет никакой смысловой нагрузки. Получается надо удалить почти все посты breeze'a, elf/2, Producer'a в этой ветке или есть какой-то другой критерий?
Апри, ну ты ваще :) Мне мою собственную мессагу уже удалить нельзя :) Я ж на чужие не зарюсь :) Ну и рэндомовскую удалил, ибо его ответ без моего вопроса был бы странным. С вашими мессагами ниче не случится, не бояцца! :)


В отличие от ASAM, SjASM (..Plus) проект с открытыми исходниками и любой человек, знающий Си может туда добавить свою директиву/функцию и пр. и отправить мне изменённый код, который я сравню со старым с помощью UltraCompare для вставки и анализа изменений, и с удовольствием впишу его в соавторы.
Я не знаю Си... Да и нету у меня его... Мне удобней когда файл с командами асма внешний и я сам могу его подредактировать в соответствии с командами того асма, к которому я привык...

Spectre
16.03.2005, 14:19
В SjASM'е директива IF сделана правильно. Может целесообразней исправить эту ошибку в Alasm 5.0, чем портить прекрасный ассемблер, перенося в него все особенности Alasm'a,Zasm'a и пр., присущие только им и внедрённые по некомпетентности авторов?

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

Aprisobal
16.03.2005, 20:04
Ты меня не понял: я ж просил только добавить команду IFN аналогичную по действию IF. IF переделывать не надо - это проблема аласма, что он нестандартный. Я бы в аласме ее не использовал, а использовал IFN.По логике - IFN есть IF !(<выражение>). И как-то странно будет выглядеть в док-ции "IFN - тоже самое что и IF", не так ли?
Лучше запиши в каком-нибудь текстовом редакторе(UltraEdit, Crimson Editor...) макросы Alasm -> SjASM и SjASM -> Alasm. Заодно и другим поможешь :rolleyes:

Aprisobal
17.03.2005, 23:21
Вышла новая версия SjASMPlus - 1.04. Ассемблер был ускорен ещё в два раза, добавлена возможность перекодировки строк WIN->DOS. Подробнее см. первый пост темы.
Также перекомпилировал его с помощью MinGW. Размер файла увеличился в 1.5 раза, но зато ассемблер ускорился примерно на 10%.

Spectre
18.03.2005, 13:07
Мда, зря просил. :( "Если что-то хочешь, сделай это сам" - старую истину никто не отменял.
Может хоть ключи включающие "режим совместимости" с разными асмами сделать? Это не сложно и не посягает на "религию" отдельных программистов. Основные особенности Аласма уже перечислялись:

- Инвертированный IF/IFN;
- Можно с начала строки писать команды;
- Другие команды логических и арифметических операций (из хелпа можно полный список взять);

Правда мне это все равно никак не поможет исходник из sjasm в аласм переделывать. :(

elf/2
18.03.2005, 13:18
Мда, зря просил. :( "Если что-то хочешь, сделай это сам" - старую истину никто не отменял.
Может хоть ключи включающие "режим совместимости" с разными асмами сделать? Это не сложно и не посягает на "религию" отдельных программистов. Основные особенности
есть дурацкое предложение которое может примирить "спорящие стороны".
2Aribobal:
если в катологе sjASM'а лежит некое файло (transform.exe например), то после чтения очередного исходника он обрабатывается этой прогой. она уже в свою очередь делает приведение чужого исходника к "правильному виду" на лету.

а еще лучше плагины... вообще можно было бы конфетку сделать, т.е. есть плагины для преобразования исходников, другие результат запихивают в .trd или .sna, что-то еще. если есть хорошее API, то написать плагин значительно проще чем разбираться в исходниках самого продукта (проверено на практике много раз)

Bulba
18.03.2005, 15:26
- Инвертированный IF/IFN;
- Можно с начала строки писать команды;
- Другие команды логических и арифметических операций (из хелпа можно полный список взять);


Да, забыл сказать тебе, что в том переделанном исходнике, что ты мне присылал, ты использовал . вместо ', т.е. а аласме надо T_/256 заменять на 'T_

... Ay_Emul: Silent now...

Spectre
18.03.2005, 15:34
Да, забыл сказать тебе, что в том переделанном исходнике, что ты мне присылал, ты использовал . вместо ', т.е. а аласме надо T_/256 заменять на 'T_

Это я немного позже сам заметил, хотел тебе письмо написать, но увидел что в релизе у тебя все правильно написано.

Producer
18.03.2005, 23:06
to Spectre:
я не кодер, но чисто на пользовательском уровне твои предложения в духе: " а почему бы в ZASMe не сделать поддержку особенностей ALASMA, т.к. мне трудно исходник переделывать ".
Улавливаешь? ;)

Aprisobal
19.03.2005, 00:18
... T_/256Замечу, что в SjASM'e есть LOW <выражение> и HIGH <выражение>

"Если что-то хочешь, сделай это сам" - старую истину никто не отменял.Так и есть.

если в катологе sjASM'а лежит некое файло (transform.exe например), то после чтения очередного исходника он обрабатывается этой прогой. она уже в свою очередь делает приведение чужого исходника к "правильному виду" на лету.Полную совместимость SjASM <--> Alasm не сделать - Alasm'у не хватает множество операторов SjASM'a, SjASM'у нехватает некоторых операторов и директив Alasm'а. Так что стоит всем успокоится по этому поводу и начать перегонять свои исходники в SjASM.

а еще лучше плагины... вообще можно было бы конфетку сделать, т.е. есть плагины для преобразования исходников, другие результат запихивают в .trd или .sna, что-то еще. если есть хорошее API, то написать плагин значительно проще чем разбираться в исходниках самого продукта (проверено на практике много раз)Да, конечно, это хороший вариант, и тут даже мне больше бы не пришлось делать новых версий - кому что надо делал бы в плагине. Но то состояние, в котором сейчас находится асм, меня вполне устраивает и ради этого я и начинал разработку модификации.
На всякий процитирую себя:

SjASM (..Plus) проект с открытыми исходниками и любой человек, знающий Си может туда добавить свою директиву/функцию и пр. и отправить мне изменённый код, который я сравню со старым с помощью UltraCompare для вставки и анализа изменений, и с удовольствием впишу его в соавторы.Ну что ж, вперёд, друзья.

Bulba
19.03.2005, 06:35
Замечу, что в SjASM'e есть LOW <выражение> и HIGH <выражение>

Да я знаю, речь то была не об SjAsm, а об ограниченном Alasm ;) Перед релизом исходников приходится делать версии и под ZX-ассемблеры, каким бы удобным не был SjAsm :)

... Ay_Emul: Silent now...

Bulba
19.03.2005, 06:41
Сейчас проверил: в Аласме можно все команды писать с начала строки и он не думает что это метки. В этом тоже есть своя логика: чтобы не было путаницы вряд-ли кто станет делать метки с именами операндов.

Да, по мне это пока единственный _существенный_ недостаток SjAsm, правда с этим можно жить, можно привыкнуть.


Аласм выполняет IF если в нем нулевой результат! А вот IFN аналог правильного IF'а (выполняется если не ноль).

Если речь о логических выражениях, то в SjAsm используется 0 и 255 для результата, а IF действительно проверяет "ноль-не ноль".

... Ay_Emul: Silent now...

Spectre
19.03.2005, 19:38
to Spectre:
я не кодер, но чисто на пользовательском уровне твои предложения в духе: " а почему бы в ZASMe не сделать поддержку особенностей ALASMA, т.к. мне трудно исходник переделывать ".
Улавливаешь? ;)

Любая просьба к автору любой утилиты выглядит как "мне без ... трудно работать, а не сделаешь ли это?". Например, в sjasm v1.03 появился счетчик скомпилированных строк, неужели кому-то трудно было каждый раз вручную считать их количество? ;)

Doctor Max
24.03.2005, 14:33
Обнаружил злостный глюк в sjasme!!!
на макросах виснет!
и ещё код
----
org #8000
ret
org #8080
ret
----
генерирует код длиной всего 2 байта вместо #81 байт
Также хотелось бы автоматом генерить ini файл для bin2sna.

Aprisobal
24.03.2005, 17:30
Обнаружил злостный глюк в sjasme!!!
на макросах виснет!Да это глюк последней версии. Я даже рад, что ты это заметил - значит мой труд+труд Kurles'a не прошёл даром и ассемблер кто-то использует.


и ещё код
----
org #8000
ret
org #8080
ret
----
генерирует код длиной всего 2 байта вместо #81 байтЭто же кросс-ассемблер! Тут ORG нужен, чтобы просто указывать адреса для меток.
А для твоего случая в ассемблере добавлен ключ -m, включающий поддержку памяти спектрума+доп. директивы(SAVESNA...) и программирование на sjasm ничем не будет отличаться от alasm/zasm/storm...


Также хотелось бы автоматом генерить ini файл для bin2sna.В ассемблер уже встроен генератор снапшотов - SAVESNA <filename>,startaddress

Doctor Max
24.03.2005, 23:46
Да это глюк последней версии. Я даже рад, что ты это заметил - значит мой труд+труд Kurles'a не прошёл даром и ассемблер кто-то использует.
В ассемблер уже встроен генератор снапшотов - SAVESNA <filename>,startaddress

Да, да, да!!! Ваш труд даром не проходит! Вот и Бульбе асм понравился.
Пытаюсь начинать использовать! Но ХОЧУ макросы!!!

Вообще, это моя первая попытка пользовать кросс-асм. До этого писал либо на реале либо в эмуле. А сейчас попробовал рекомендуемую связку CrimsonEditor+SjASM и протащился. Планирую переделать под него проекты Global Tracker и Global Commander. Надо бы конвертер Аласмовских текстов написать. А то менять . на low и ' на high забипаешься. А в Sjasm как я понимаю, не получится сделать аналог . и '

Это же кросс-ассемблер! Тут ORG нужен, чтобы просто указывать адреса для меток.
Ну, мне как-то более привычно как на спекки. Какой ORG поставил - туда и скомпилилось. Чтоб потом захрустил это дело и телемаркет.

А для твоего случая в ассемблере добавлен ключ -m, включающий поддержку памяти спектрума+доп. директивы(SAVESNA...) и программирование на sjasm ничем не будет отличаться от alasm/zasm/storm...
Тем не менее отличается.

А, точно-точно! Ну тогда для какой-нить другой проги полезно было б...
Например для сборки релиза. С загрузчиком и т.п. Эх! мечта!!! Нажал на кнопочку - и релиз готов! Лафаа-а-а-а ;)

Shadow Maker
25.03.2005, 00:04
Можно кстати если уж так хочется бинарник непрерывный бинарник, сделать таким образом:

ORG #CE00
DS #CE20-$
ORG #CE20

Doctor Max
25.03.2005, 00:16
Можно кстати если уж так хочется бинарник непрерывный бинарник, сделать таким образом:

ORG #CE00
DS #CE20-$
ORG #CE20

Да, мне тоже пришло в голову то же самое. Видимо, так и придется делать. Но мне привычней чтоб компилер сам это делал.. Ну не знаю! Привык я так просто!!! :)

Aprisobal
25.03.2005, 00:27
Да, мне тоже пришло в голову то же самое. Видимо, так и придется делать. Но мне привычней чтоб компилер сам это делал.. Ну не знаю! Привык я так просто!!! :)А чем ключ -m не подходит?

Doctor Max
25.03.2005, 00:36
А чем ключ -m не подходит?
так что с ключем, что без - результат одинаковый.
зыж когда можно ждать багфикса с макросами?

Aprisobal
25.03.2005, 00:46
так что с ключем, что без - результат одинаковый.
зыж когда можно ждать багфикса с макросами?Не может быть такого - ключ -m включает режим поддержки памяти спектрума, т.е. какой ORG укажешь, туда и будет записывать. Конечно, в файле *.out будет всё в каше, но на то он и файл этот. Чтобы сохранить блоки памяти используй SAVEBIN/SAVEHOB, а для снапшота SAVESNA.
Новая версия с багфиксом и множеством новшеств должна скоро выйти.

Doctor Max
25.03.2005, 00:56
Не может быть такого - ключ -m включает режим поддержки памяти спектрума, т.е. какой ORG укажешь, туда и будет записывать. Конечно, в файле *.out будет всё в каше, но на то он и файл этот. Чтобы сохранить блоки памяти используй SAVEBIN/SAVEHOB, а для снапшота SAVESNA.

хм, действительно. но вообще-то я ожидал, что .out будет вести себя как память на спектруме.


Новая версия с багфиксом и множеством новшеств должна скоро выйти.

Жду с нетерпением!!!

elf/2
25.03.2005, 11:03
Надо бы конвертер Аласмовских текстов написать. А то менять . на low и ' на high забипаешься. А в Sjasm как я понимаю, не получится сделать аналог . и '

могу поделиться своим конвертором alsm->text. его потом можно с помощью регулярных выражений привести к нужному виду

nyuk
25.03.2005, 11:27
могу поделиться своим конвертором alsm->text. его потом можно с помощью регулярных выражений привести к нужному виду
Если это имеет преимущества перед открыть через xLook и пересохранить по Shift+F2, то неплохо бы.

elf/2
25.03.2005, 11:52
Если это имеет преимущества перед открыть через xLook и пересохранить по Shift+F2, то неплохо бы.

в новом xLook'е можно будет входить в файлы разных zx asm'ов по enter'у и копировать сорцы как текст

ближе к теме: кто-нибудь (Spectre?) может сформулировать что на что надо заменять при конвертации и при каких условиях?

Spectre
25.03.2005, 14:24
в новом xLook'е можно будет входить в файлы разных zx asm'ов по enter'у и копировать сорцы как текст

ближе к теме: кто-нибудь (Spectre?) может сформулировать что на что надо заменять при конвертации и при каких условиях?

Менять IF/IFN.

MAIN, MACRO, DISPLAY убирать или комментировать.

Операции:
a+b
a-b
a*b
a/b
a&b - AND
a|b - OR
a!b - XOR
a>b - циклический сдвиг слова a на b бит вправо
a<b - циклический сдвиг слова a на b бит влево
() - скобки (сначала рассчитываются они)
{a} - слово, находящееся в памяти по адресу a
a~ - инвертирование текущего результата
?метка - возвращает 0, если метка уже определена, #ffff, если не
определена, и 1, если не определена, но к ней было уже
обращение. Если метка - название макроса, то 2.
'a - старший байт a
.a - младший байт a

Дополняйте дальше...

Aprisobal
25.03.2005, 15:24
Вышла новая версия SjASMPlus - 1.05. В ней переписана процедура чтения файлов, добавлено множество полезных директив и пр. Подробнее см. первый пост темы.
Также поддерживается запись директив с начала строки. Если программа будет ругаться на ваш исходник, из-за того, что метка==директива, то прошу пинать не меня, а Сергея Бульбу ;)
О найденных багах сообщайте, плз, по ЛС.


MACRO, DISPLAY убирать или комментировать.
Убирать уже не надо. MACRO работает, а DISPLAY добавился в новой версии(by Kurles^HS^CPU).

elf/2
25.03.2005, 15:57
Менять IF/IFN.
понял...


Операции:
a+b
a-b
a*b
a/b
a&b - AND
a|b - OR
a!b - XOR
a>b - циклический сдвиг слова a на b бит вправо
a<b - циклический сдвиг слова a на b бит влево
() - скобки (сначала рассчитываются они)
{a} - слово, находящееся в памяти по адресу a
a~ - инвертирование текущего результата
?метка - возвращает 0, если метка уже определена, #ffff, если не
определена, и 1, если не определена, но к ней было уже
обращение. Если метка - название макроса, то 2.
'a - старший байт a
.a - младший байт a
на что менять и при каких условиях? я же сам ни за что не догадаюсь

elf/2
25.03.2005, 15:59
Вышла новая версия SjASMPlus - 1.05. В ней переписана процедура чтения файлов, добавлено множество полезных директив и пр. Подробнее см. первый пост темы.
а можно при анонсе новой версии дублировать ссылку на download? чтобы на первый пост не листать...

nyuk
25.03.2005, 16:02
Вышла новая версия SjASMPlus - 1.05.
При компиляции вложенного примера frost4k выдает ошибку:


frost10.asm line 2332: Label not found: E
frost10.asm line 2367: Label not found: E
Работает конечно, но все равно для примера некрасиво.

После переименования метки NOTE ошибка исчезла.

Aprisobal
25.03.2005, 16:06
При компиляции вложенного примера frost4k выдает ошибку:Ок.

И ещё:

О найденных багах сообщайте, плз, по ЛС.

Aprisobal
25.03.2005, 16:47
а можно при анонсе новой версии дублировать ссылку на download? чтобы на первый пост не листать...Такая ссылка пойдёт(чтобы сразу и изменения видели)? http://zx.pk.ru/showpost.php?p=5889&postcount=1

При компиляции вложенного примера frost4k выдает ошибку:Спасибо за нахождение бага.

Всем: скачайте, плз, заново ассемблер: http://zx.pk.ru/showpost.php?p=5889&postcount=1. Спасибо.

elf/2
25.03.2005, 16:52
Такая ссылка пойдёт(чтобы сразу и изменения видели)? http://zx.pk.ru/showpost.php?p=5889&postcount=1
если только вместе с http://zx.pk.ru/attachment.php?attachmentid=421
мы же тебе верим :) arisobal плохого не сделает...

Doctor Max
26.03.2005, 00:29
Ура! Свершилось! SjASM проверен на большом проекте!
Сегодня успешно были сконверчены исходники Global Tracker 1.2.
После незначительной правки все успешно скомпилилось!

кол-во строк: 11132

Кстати, при формировании .sna нужно туда засунуть системные переменные. Я решил эту проблему INCBIN'ом , но хотелось бы чтоб асм это делал. Вот!

Doctor Max
26.03.2005, 00:53
Системные переменные для .sna. Адрес - #5c00

Aprisobal
26.03.2005, 01:47
Системные переменные для .sna. Адрес - #5c00Спасибо

Выложена новая версия - 1.05 RC1. [...вырезано...]

Doctor Max
26.03.2005, 04:39
Спасибо!

Выложена новая версия - 1.05 RC1. Качать - http://zx.pk.ru/attachment.php?attachmentid=430

Тебе спасибо!

вылетает по экзепшену при INCLUDE :(

Spectre
26.03.2005, 12:35
понял...

на что менять и при каких условиях? я же сам ни за что не догадаюсь

a+b, a-b, a*b, a/b, a&b (AND), a|b (OR) все нормально;

Менять:
IF на IFN, IFN на IF;
a!b (XOR) на a^b;
a>b (циклический сдвиг слова a на b бит вправо) вроде на a>>b или a>>>b (надо проверять);
a<b (циклический сдвиг слова a на b бит влево) аналогично;

Вот это надо добавить в sjasm:
{a} - слово, находящееся в памяти по адресу a;
a~ (инвертирование текущего результата) - такого в sjasme'е я не видел;
'a - старший байт a (high a);
.a - младший байт a (low a);
?метка - возвращает 0, если метка уже определена, #ffff, если не определена, и 1, если не определена, но к ней было уже обращение. Если метка - название макроса, то 2;
Вместо EQU можно писать label=5;

Дополняйте кто может...

Kurles
26.03.2005, 17:24
Вот это надо добавить в sjasm:
{a} - слово, находящееся в памяти по адресу a;
a~ (инвертирование текущего результата) - такого в sjasme'е я не видел;
'a - старший байт a (high a);
.a - младший байт a (low a);
Я над этим уже думал. <'a> - в принципе реализуемо, в отличие от <.a>, т.к. <.> при работе с метками уже используется для обозначения принадлежности к какому-либо модулю.

?метка - возвращает 0, если метка уже определена, #ffff, если не определена, и 1, если не определена, но к ней было уже обращение. Если метка - название макроса, то 2;
Не забывай, что sjasm в отличии от :), двухпроходной, и все арифмитические операции выполняются на втором проходе, т.ч. метка "ещё не определённой" быть не может %)

Вместо EQU можно писать label=5;
Такой синтаксис даже оригинальный sjasm 0.39 понимает.

Дополняйте кто может...

Spectre
26.03.2005, 22:15
Цитата:
Сообщение от Spectre
?метка - возвращает 0, если метка уже определена, #ffff, если не определена, и 1, если не определена, но к ней было уже обращение. Если метка - название макроса, то 2;


Не забывай, что sjasm в отличии от , двухпроходной, и все арифмитические операции выполняются на втором проходе, т.ч. метка "ещё не определённой" быть не может %)

Ты немного не так понял. При помощи ? мы проверяем существует ли такая метка в листинге программы. Делается это для таких случаев:

;memdriver

IF ?memdriver
...
ENDIF

То есть если раскомментировать слово memdriver, то будет компилироваться кусок в IF:ENDIF.

Aprisobal
27.03.2005, 00:18
Я над этим уже думал. <'a> - в принципе реализуемо, в отличие от <.a>, т.к. <.> при работе с метками уже используется для обозначения принадлежности к какому-либо модулю.Имхо такие символы как ' и . не надо добавлять, т.к. в других асмах спековских совсем по-другому - STORM: [ и ]

Вышла новая версия - 1.05 RС2. [...вырезано...]
В этой версии появилась возможность писать команды через запятую типа LD A,B,H,L,A,0 и т.п. Пока это только для LD,INC,DEC,CALL,DJNZ,JP,JR. А что делать с AND,CP,XOR,OR и др., в которых поддерживается запись вида XOR A,B (XOR B) или OR A,C (OR C)? Ведь если написать XOR A,B,A,C,A,D, то получим XOR B,C,D, а должно быть XOR A,B,A,C,A,D как в спековских асмах.

lvd
27.03.2005, 12:14
А что делать с AND,CP,XOR,OR и др., в которых поддерживается запись вида XOR A,B (XOR B) или OR A,C (OR C)? Ведь если написать XOR A,B,A,C,A,D, то получим XOR B,C,D, а должно быть XOR A,B,A,C,A,D как в спековских асмах.

Видимо, отменить xor a,b вместо xor b и т.д. как несуществующие в мануалах по Z80 =)

Aprisobal
27.03.2005, 18:29
{a} - слово, находящееся в памяти по адресу a;В SjASM'e скобки {..} являются синонимами (..) и [..]. В других асмах такого не замечал. Всем: как считаете, сделать функцию скобок {..} (будет работать только с ключом -m) такой же как в аласме?

lvd
27.03.2005, 22:10
В SjASM'e скобки {..} являются синонимами (..) и [..]. В других асмах такого не замечал. Всем: как считаете, сделать функцию скобок {..} (будет работать только с ключом -m) такой же как в аласме?

Видимо, выбросить все нестандартно-гореизобретательские фишки из съясма стоит. А вот совместимость со спековыми асмами - всегда хорошо. Может быть, даже стоит сделать (в далёком будущем) наборы парсеров для разных спековских асмов. =)

Aprisobal
27.03.2005, 22:53
Видимо, выбросить все нестандартно-гореизобретательские фишки из съясма стоит. А вот совместимость со спековыми асмами - всегда хорошо. Может быть, даже стоит сделать (в далёком будущем) наборы парсеров для разных спековских асмов. =)Нет смысла.

elf/2
28.03.2005, 11:43
Всем: как считаете, сделать функцию скобок {..} (будет работать только с ключом -m) такой же как в аласме?
есть дурное предложение: воспользоваться идеями Metal'а разработанного Владимиром Кладовым.
т.е. всевозможные скобки {}, [], () могут находиться в строке в области метки. Скобки должны быть парными. Разрешается делать отступ на произвольное число пробелов. При этом скобки являются аналогом LOCAL/ENDLOCAL и возможны переходы на скобки, например:
"DJNZ {" - переход на начало цикла
"JR C, }}" - выход из цикла 2й степени вложенности

Плюсы:
1. лучше видна структура программы за счет парности скобок и отступов для вложенных блоков
2. упрощается повторное использование кусков кода за счет отсутсвия проблем с использованием уже существующих меток
3. нет нужды каждый раз придумывать имена меток для начала/конца циклов (типа: next_*, loop, endLoop)
4. в правильных редакторах возможен folding, т.е. свертывание блока кода в одну строку

Минусы:
1. непривычно
2. надо серьезно переделывать парсер
3. не портируемо

lvd
28.03.2005, 13:07
Нет смысла.
Тогда и вообще нет смысла подгонять под особенности, например, аласма с его if/ifn, etc.

Aprisobal
28.03.2005, 16:44
"DJNZ {" - переход на начало цикла
"JR C, }}" - выход из цикла 2й степени вложенностиВ SjASM уже похожее есть:
Temporary labels
----------------
To keep the number of used labels
reasonable it is possible to use numbers
as labels. These labels can only be
used as labels to jump to. To jump
to these labels, use the number
followed by an 'F' for forward branches
or a 'B' for backward branches.
Temporary labels should not be used within macro's.
Example:
ADD A,E
JR NC,1F
INC D
1 LD E,A
2 LD B,4
LD A,(DE)
OUT (152),A
DJNZ 2B



Тогда и вообще нет смысла подгонять под особенности, например, аласма с его if/ifn, etc.А мы и не подгоняем. Только добавляем полезные директивы типа DISPLAY.

elf/2
28.03.2005, 18:08
В SjASM уже похожее есть:
так может довести это похожее до ума? имхо цифры менее удобны в качестве мнемонических обозначений...
кроме того остальные плюсы цифровые метки не покрывают

Vladimir Kladov
28.03.2005, 19:47
а по-моему достаточно удобно. Когда близко, чего зря имена придумывать. Вот помню в асме PDP, с коим я познакомился еще до спека, были локальные метки вида @nnn (n-цифра), локальность которых ограничивалась метками обычными. Т.е. между двумя обычными метками все метки @nnn были локальными. Хотя слово PROC дает лучше эффект.

lvd
28.03.2005, 20:28
а по-моему достаточно удобно. Когда близко, чего зря имена придумывать. Вот помню в асме PDP, с коим я познакомился еще до спека, были локальные метки вида @nnn (n-цифра), локальность которых ограничивалась метками обычными. Т.е. между двумя обычными метками все метки @nnn были локальными. Хотя слово PROC дает лучше эффект.

devpac на амиге: локальные метки == .metka, ограничены обычными. Ещё удобнее, чем цифры only - так как можно и .1 .2 .3 писать, так и .label .metka

Vladimir Kladov
28.03.2005, 21:40
кстати может там как раз точка и была (или еще какой знак, вроде солнца, столько лет прошло, все детали не упомню).

Aprisobal
29.03.2005, 00:14
devpac на амиге: локальные метки == .metka, ограничены обычными. Ещё удобнее, чем цифры only - так как можно и .1 .2 .3 писать, так и .label .metkaВ SjASM тоже есть локальные метки. Только, что цифры как локальные метки теперь не поддерживаются - определяются как директива повтора строки (как в Шторм)

так может довести это похожее до ума? имхо цифры менее удобны в качестве мнемонических обозначений...
кроме того остальные плюсы цифровые метки не покрываютРеализаций данной функции ассемблеров может быть много, например вот как это сделано в WLA DX:

3.3. Labels

Labels are ordinary strings (which can also end to a ':'). Labels starting
with "_" are considered to be local labels and do not show outside sections
where they were defined, or outside object files, if they were not defined
inside a section.

Here are few examples of different labels:

VBI_IRQ:
VBI_IRQ2
_VBI_LOOP:
main:

Note that when you place ':' in front of the label string when referring to
it, you'll get the bank number of the label, instead of the label's address.
Here's an example:

LD A, :LOOP
.BANK 2 SLOT 0
LOOP:

Here "LD A, :LOOP" will be replaced with "LD A, 2" as the label LOOP is
inside the bank number two.

When you are referring to a label and you are adding something to its address
(or subtracting, any arithmetics apply) the result will always be bytes.

.org 20
DATA: .dw 100, 200, 300
ld a, DATA+1
^^^^^^ = r

So here the result r will be the address of DATA plus one, here 21. Some x86
assemblers would give here 22 as the result r as DATA points to an array
or machine words, but WLA isn't that smart (and some people including me
think this is the better solution).

You can also use -, --, ---, +, ++, +++, ... as un-named labels.
Labels consisting of '-' are meant for reverse jumps and labels consisting
of '+' are meant for forward jumps. You can reuse un-named labels as much
as you wish inside your source code. Here's an example of this:

dec e
beq ++ ; jump -> ?
dec e
beq + ; jump -> %
ld d, 14
--- ld a, 10 ; !
-- ld b, c ; #
- dec b ; *
jp nz, - ; jump -> *
dec c
jp nz, -- ; jump -> #
dec d
jp nz, --- ; jump -> !
ld a, 20
- dec a ; $
jp nz, - ; jump -> $
+ halt ; %
++ nop ; ?

Note that "__" (that's two underline characters) serves also as a un-named
label. You can refer to this label from both directions. Use "_b" when
you are jumping backwards and "_f" when you are jumping forwards label "__".

Example:

dec e
jp z, _f ; jump -> *
dec e
__ ldi a, (hl) ; *
dec e
jp nz, _b ; jump -> *

elf/2
29.03.2005, 11:09
например вот как это сделано в WLA DX
"+++, --, _b" - тоже не плохо. хотя это опять только _метки_. использование скобок позволяет подчеркнуть структуру программы и вложенность блоков. кроме того обозначение '}' для конца блока/цикла лучше отражает смысл чем +.

опять же, это имхо, настаивать не буду, да и не имею права...

Aprisobal
06.04.2005, 12:45
Вышла новая версия SjASMPlus - 1.05 RC3. Исправлен небольшой глюк с ENDM, добавлена поддержка скобок {..} и записи любых команд через запятую(INC A,B,C,A). Качать - [...вырезано...]
Spectre, скобками {..} берётся 1 байт из памяти или 2 байта?

Spectre
06.04.2005, 23:22
Spectre, скобками {..} берётся 1 байт из памяти или 2 байта?

Слово.

А вообще вот фирменное описание Аласма (усеченное Alone Coder'ом до нескольких страниц). Это часть касающаяся команд и синтаксиса:


4. ДИРЕКТИВЫ АССЕМБЛЕРА
ORG адрес[,страница]
Установка адреса компиляции. По умолчанию параметр "страница"
старый, в начале компиляции =0.
метка EQU значение
Присваивает метке значение, эквивалентное параметру "значение".
DISP адрес
Установка адреса, в котором должна работать программа.
ENT
Присвоение адресу работы программы текущего адреса компиляции.
Пример:
SCREEN EQU #4000
ORG #8000
LD HL,BEGIN ;Пересылка в область экрана
LD DE,SCREEN ;и запуск программы ожидания
LD BC,END-BEGIN ;[A] прерываний
LDIR
CALL SCREEN
DI
HALT
BEGIN DISP SCREEN
MARKA DEC A
HALT
JP NZ,MARKA ;JP не случайно
RET
ENT
END
Текущее смещение компиляции (shift=org-disp) узнают так:
a ORG 0
ENT
shift ORG a+shift
DISP a
INCLUDE "drv:имя файла"[,страница]
Включение в компилируемый файл дополнительного исходника,
лежащего на диске под именем "имя файла". При этом указанный
файл загружается в страницу, определенную параметром "страница"
(по умолчанию - текущая). По окончании компиляции включенного
блока компиляция продолжается со строки, следующей после данной
директивы. Файл не будет загружаться с диска, если
он уже находится в необходимой странице. "" - любой файл.
Пример:
LDIR
INCLUDE "TOKENIZE",1
OTDR
INCLUDE "ALASM2"
HALT
Сначала будет откомпилирован LDIR, потом текст "TOKENIZE.H",
загруженный в страницу 1, потом OTDR, затем в тек.страницу
будет загружен и откомпилирован текст "ALASM2.H", после чего
с диска будет считан основной файл и компиляция продолжится
с команды HALT.
MAIN "имя файла"[,страница]
Указание основного файла компиляции. Директива MAIN должна быть
первой исполнимой директивой подчиненного файла.
Символы "." и "*" заменяйте на "?".
Пример:
MAIN "MAKE6?7",6
LDIR
После подачи команды ASSEMBLE компиляция передается
программе MAKE6*7, находящейся в странице 6,
затем находящийся в ней INCLUDE вызывает подчиненную
программу, состоящую из директивы MAIN и команды LDIR.
Во включаемых файлах MAIN игнорируется, поэтому после
ассемблирования LDIR происходит возврат назад и
продолжение компиляции.
INCBIN "дисковод:имя файла"[,длина]
Включение в компилируемую программу кодового блока с диска
размером "длина" байт или по умолчанию из данных каталога.
DUP число
Указывает начало блока, который необходимо компилировать
"число" раз подряд
EDUP
Указывает конец повторяемого блока. Возможна вложенная
конструкция.
Пример:
DUP 32
LDI
LD A,B
OR C
JR Z,$+3
LD (HL),D
EDUP
Блок между DUP и EDUP откомпилируется 32 раза
REPEAT
<тело>
UNTIL <выражение>
Компилирует <тело> до тех пор, пока <выражение> не 0
DB байт[,список байт]
Пример:
DB "У",13,10,"попа",13,10,"была",13,10,"собака",13,10
DEFB "она съела",13,10,"попа факу..."
DW слово[,список слов]
Пример:
DW ALASKA,BUFFER,12,#BD15,32767,.NUMB1
DEFW 12345,34567
DS количество повторений[,список байт]
Список байт (по умолчанию нулевой байт) копируется в текущий
адрес компиляции. Число циклов = "количество повторений".
Пример:
DS 10,#E5
DEFS 32,#ED,#B0
DD [#]hexбайт[hexбайты]
Плотное хранение шестнадцатиричных чисел.
DD 1D4FDC42
эквивалентно
DB #1D,#4F,#DC,#42
+<нечто>
ОПАСНО ПРИ ДЛИНЕ СТРОКИ=#2C..#2F!
При загрузке текста с диска он сканируется на наличие в нем "+"
в начале каждой строки. В процессе компиляции все встреченные
"+" будут заменены на "-", что заставит компилятор пропускать
строки при следующем ассемблировании.
Пример:
LD HL,#DB00
+SAVEADR
+ ORG #DB00,7
+ INCBIN "sts70r"
+ ORG SAVEADR
JP (HL)
отладчик загрузится только при первой компиляции
метка=выражение
(Пере)присвоение значения метке.
Пример:
SHLUSS=0
ORG 32768
DUP #4000
DEFW SHLUSS
SHLUSS=SHLUSS+1
EDUP
память выше #8000 заполнится увеличивающимися словами 0..16384
IF <выражение>
<тело1>
ELSE
<тело2>
ENDIF
Если <выражение>=0, то компилируется <тело1>, иначе <тело2>
IFN <выражение>
<тело1>
ELSE
<тело2>
ENDIF
То же, но наоборот.
Допускается вложенность условной компиляции (до 254)
LOCAL
<тело>
ENDL
Объявление локальных меток. Все метки в пределах этой
операторной скобки будут невидимы вне ее (кроме меток,
начинающихся с символа @ - это глобальные метки). Допускаются и
вложенные конструкции.
Если в пределах локальных меток определять метки с именами,
к которым обращались раньше этой конструкции, то такие метки
будут глобальными:
LD HL,LABEL
LOCAL
LABEL
ENDL
MACRO <имя_макросa>
<тело>
ENDM
Определение макроса.
В теле макроса:
\0..\9 - параметр номер 0,1,2,..9
\C - текущий символ
\N - перейти на следующий символ (ничего не выдает)
\R - установить указатель на начало строки параметров
\S<char> - строка от текущего символа до символа <char>
\P - сдвинуть строку параметров на один параметр. Выдает
съеденный параметр. \R возвращает, как было.
<имя_макроса> [параметр1[,параметр2[...]]]
Использовать макрос.
Разделитель параметров - запятая
(заключенная в кавычки не считается).
MACRO DOWN
LOCAL
INC \C
LD A,\C
AND 7
JR NZ,LABEL
LD A,\N\C
SUB #E0
LD \C,A
JR NC,LABEL
LD A,\R\C
SUB 8
LD \C,A
LABEL
ENDL
ENDM
Теперь мы можем процедуры DOWN HL и DOWN DE компилировать по их
именам - DOWN HL, DOWN DE и т.д.
Пользуясь условиями типа
IF " "-" \1"
или
IF ?macroname\1-2
можмо определять макросы с переменным числом параметров.
DISPLAY [/L,]["any text",][[/D|/H|/A,][/T,]выражение]
Отображает текст или числа в процессе ассемблирования. Ключи
/D, /H и /A устанавливают формат вывода для одного следующего
числа. Далее числа выводятся в текущей системе счисления. /D -
десятичное число, /H - шестнадцатиричное, /A - в обеих
системах.
/L указывает, что необходимо печатать не с новой строки.
/T выводит сначала само выражение, потом его значение.
Примеры:
DISPLAY "code size: ",/D,end-start
DISPLAY /A,"abc+xyz=",abc+xyz
DISPLAY "simple"," text"
DISPLAY "Баран жевал "
DISPLAY /L,"травКу"
DISPLAY /A,/T,abc+xyz
эквивалентно
DISPLAY /A,"abc+xyz",abc+xyz
Половинки IX и IY: HX,HY,LX,LY.
Можно: INF;SLI;OUT (C),0;EXA;EXD;JZ;JNZ;JC;JNC
LD L,0,H,'fnt и т.п.
5. Выражения
Считаются слева направо без приоритетов (кроме скобок).
a+b
a-b
a*b
a/b
a&b - AND
a|b - OR
a!b - XOR
a>b - циклич.сдвиг слова a на b бит вправо
a<b - влево
() - скобки (сначала рассчитываются они)
{a} - слово, находящееся в памяти по адресу a
a~ - инвертирование текущего результата
?метка - возвращ. 0, если метка определена, #ffff, если не
определена, и 1, если не определена, но к ней было уже
обращение. Если метка - название макроса, то 2.
'a - ст.байт a
.a - мл.байт a
%const двоичная
$$ - текущая страница кода
Как узнать страничку компилируемого исходника
и адрес компилируемой строки (из макроса нельзя)
ORG #C0E1,2
DISPLAY {$}-#C040,"/pg",.{$+2}
Как определить, не из mkace ли мы запущены
ORG #FF32,2
IF {4>4+{$}}-#BF43
make ;mkace!
ENDIF
Во всех операциях, кроме + и -, не допускается использование
меток, которые будут определены ниже (из-за однопроходности)

Yaroslav
29.06.2005, 07:32
:( А почему у меня такая фигня :(
При использовании INCLUDE вылетает сообщение об ошибке
---------- Capture Output ----------
"C:\ASM\sjasm.exe" My.asm
SjASMPlus Z80 Cross-Assembler v1.05 RC3
Terminated with exit code -1073741819

Dexus
06.08.2005, 12:14
Да что-то конкретно запарил он с ERROR: Forward reference.
Может есть какой ключик чтобы он во время второго прохода делал подобное?
Он что - вообще не умеет ссылаться "вперед"?



len equ start2-end2
org 30000
start2
ret
end2


Можно с ума сойти.. невозможно ссылаться на метки инклуженных файлов

ругается "Bytes lost" если пытаешься использовать -1 (в качестве 65535 или 255, в засивимости от регистра). Никуда ничего не потеряно же!

Матерится "Label has different value in pass 2"...
Гы.. автор совсем чтоли не знает как асм должен работать? Лэбелы должны все использоваться из 2го прохода, а на 1м проходе лишь вычисляться, и запоминаться места, где они используются, чтобы во втором проходе их вставить уже скорректированными.

Короче то ли я туплю, то ли у меня 90% всех исходников вообще не компилятся в sjasm.
Писаны на TASM. И z80asm их компилит влёт.

Robus
06.08.2005, 16:54
Да что-то конкретно запарил он с ERROR: Forward reference.
Может есть какой ключик чтобы он во время второго прохода делал подобное?
Он что - вообще не умеет ссылаться "вперед"?



len equ start2-end2
org 30000
start2
ret
end2


Можно с ума сойти.. невозможно ссылаться на метки инклуженных файлов

ругается "Bytes lost" если пытаешься использовать -1 (в качестве 65535 или 255, в засивимости от регистра). Никуда ничего не потеряно же!

Матерится "Label has different value in pass 2"...
Гы.. автор совсем чтоли не знает как асм должен работать? Лэбелы должны все использоваться из 2го прохода, а на 1м проходе лишь вычисляться, и запоминаться места, где они используются, чтобы во втором проходе их вставить уже скорректированными.

Короче то ли я туплю, то ли у меня 90% всех исходников вообще не компилятся в sjasm.
Писаны на TASM. И z80asm их компилит влёт.

Нет, ты вовсе не тупишь, просто так как пишешь ты и пишется КОД на асме, поэтому при появлении аласма я понял, что на нём будут писаться простые работки или сложные с большим трудом ... Поэтому когда-то Golden Eagle и не дописал своих WORMS'ов на Speccy, всё в итоге заглючило !!! Но, наверное, в асме, который обсуждается на этом форуме сделали учёт многопроходности, однако, если нет, то не зря что я по-прежнему сижу на своём личном асме !!! Мой это безусловно умеет, - я вообще не представляю как можно писать проги без меток указывающие на метки, указывающие ещё на какние-нибудь метки !!!

Shiru
06.08.2005, 16:58
Нет, ты вовсе не тупишь, просто так как пишешь ты и пишется КОД на асме, поэтому при появлении аласма я понял, что на нём будут писаться простые работки или сложные с большим трудом ...
Прочёл предложение три раза. Смысл до сих пор неясен;)

Robus
06.08.2005, 17:30
Прочёл предложение три раза. Смысл до сих пор неясен;)

Значит не судьба быть понятым ... А смысл прост, на ТАSМЕ можно написать такой код, который не будет компилится в аласме.

ORG 49152-(END-START)
START
LD HL,MeST
LD DE,MeEN
LD BC,(MeEN-MeST)*3
LDIR
LD HL,MeSTT
LD DE,MeENN
LD BC,(MeENN-MeSTT)*3*(LINES-1)
LDIR
;...
;фА-ФА-ФА ЛЯ-ЛЯ-ЛЯ
;...
;Эффект ...
;...
MeSTT
LD SP,0
MeST
PUSH HL DE BC AF
MeEN
DS (MeEN-MeST)*3
MeENN
DS (MeENN-MeSTT)*(LINES-1)

LINES EQU 192
END

Как приятно мыслить на АСМЕ ... А DUP'ы нужны, но совсем не для создания кода, который должен расписаться на пол памяти ...

Хотя это мой стиль программирования, просто привык так, а АЛАСМ не понимает как так можно ...

Dexus
06.08.2005, 19:54
Прочёл предложение три раза. Смысл до сих пор неясен
Приветы!
Может человек малость непонятно выразился, но по-моему и так понятно о чем речь... А речь лишь о том, что асмы поледние - далеко не "золото", несмотря на всякие навороты (которые в моем случае никакой пользы не имеют), недочетов концептуальных полно. А то я уж подумал "вот - наконец-то хороший асм", а в нем - на тебе... "взгрели", называется.

Скажите мне, в каких еще компилерах подобные "приколюхи" есть? Чтобы сразу из расмотрения их выбросить...
И еще мне интересно в каком языке на PC такая фигня имеется... если имеется.

Aprisobal
02.09.2005, 02:02
я вообще не представляю как можно писать проги без меток указывающие на метки, указывающие ещё на какние-нибудь метки !!!Прикинь, можно.


Может человек малость непонятно выразился, но по-моему и так понятно о чем речь... А речь лишь о том, что асмы поледние - далеко не "золото", несмотря на всякие навороты (которые в моем случае никакой пользы не имеют), недочетов концептуальных полно. А то я уж подумал "вот - наконец-то хороший асм", а в нем - на тебе... "взгрели", называется.Можно взять исходники оригинального SjASM'a или SjASMPlus'a и сотворить лучший ассемблер в мире. Осталась самая малость - добавить все фенечки и затыки спековских ассемблеров. Сам прославишься и спектрумистам-кодерам поможешь, которым, как плохим танцорам, карманы мешают.

Robus
02.09.2005, 11:08
Прикинь, можно.

Куда прикинуть ???

Как легко найти оправдание облому сделать человеческий компилятор !?! Нет, что бы сесть и сделать нормальный асм, так сидят и "прикидывают".
Хех ... Типичный мир виндовсов и СИ, - а бы работало ...

Aprisobal
02.09.2005, 18:03
Куда прикинуть ???

Как легко найти оправдание облому сделать человеческий компилятор !?! Нет, что бы сесть и сделать нормальный асм, так сидят и "прикидывают".
Хех ... Типичный мир виндовсов и СИ, - а бы работало ...Думаю удивишься, что SjASM написал не я, я и Kurles лишь его доработали под себя и назвали SjASMPlus.
А по поводу "Нет, что бы сесть и сделать нормальный асм, так сидят и "прикидывают". Компилятор ASAM до сих пор для ДОС? Или ДОС стала для современных программ нормой? со всеми вытекающими... Перечитай, в своем посте, что (по сути) ты написал про самого себя и свою программу.

Robus
04.09.2005, 00:45
Думаю удивишься, что SjASM написал не я, я и Kurles лишь его доработали под себя и назвали SjASMPlus.

Я знаю, что написали его не вы ! Это не удивило !


А по поводу "Нет, что бы сесть и сделать нормальный асм, так сидят и "прикидывают". Компилятор ASAM до сих пор для ДОС? Или ДОС стала для современных программ нормой? со всеми вытекающими... Перечитай, в своем посте, что (по сути) ты написал про самого себя и свою программу.

Норма для программ это компьютер, а не ДОС или ВИНДОВС ! Программа должна работать на компьютере а не на виндовсе, этим и отличается Coding от приграммирования ! Мой компилятор вместе с досом велеколепно уместится на одну дискету, что мне и нужно было. У тебя странные сравнения ... неужели ты предложишь писать современные игры не для старого и убого TR-DOS'а, я для, скажем, IS-DOS !?! Представляю какие ГИПЕР ограничения появятся при её создании ... Кстати, если из ASAM'а выкинуть эмулятор ZX'а, он прекрасно будет работать под винду или уникс или ещё под что-нибудь !!! Такая версия уже была, но она быстро ушла в прошлое ... А текущая версия прекрасно запускается под виндой, правда на ХР я не проверял, но на 2000-ном идёт без проблем ! НО !!! Я никогда не стану гордиться этой глупостью, компилятор сделан для программирования а не для хвастовства его гиперзапускаемости под разнообразные оси !!!

Если чем обидел, aprisobal, - не обижайся ... Просто на ZX'е, был единственный лучший асм - TASM-4 (rst), для 128-ого !!! Там оставленно максимум памяти для пользования и максимально места для меток, остальные асмы просто захлёбывались ! Не говоря уже о метках, которые указывают на другую, ещё не известную метку ... На ПиЦи для ZX'а, я не встречал хорошего асма ... Те, что я перепробовал обязательно в чём-то обламывали ... Вот я и сел делать ASAM ... Последняя версия всё ещё не оптимизирована но он делает ВСЁ, что только можно придумать ... Я не люблю писать компиляторы, и я бы не писал, если бы была альтенатива ...

Aprisobal
08.12.2005, 18:55
В связи с тем, что итальянский фанат MSX Артуро Рагозини (Arturo Ragozini) прислал баг репорт для SjASMPlus, выпускаю новую версию последнего - 1.05 Stable:
- Исправлен глюк при обработке имен подключаемых файлов (thx 2 A.Ragozini)
- У исполнимого файла компилятора появилась иконка
- (!)В состав программы включена версия под FreeBSD
- Исправлена ошибка, когда "END" нельзя было использовать в качестве метки
- Исправлена ошибка, когда директива повтора .число работала и в начале строки (thx 2 A.Ragozini)
- Добавлен новый ключ -B, отключающий возможность написания директив с начала строки
Качать: [...вырезано...]

Aprisobal
20.01.2006, 00:46
Новая версия SjASMPlus - 1.06 RC1.

Новое в 1.06 RC1:
- ВНИМАНИЕ! Чтобы изначально увеличить совместимость ассемблера с другими, ключ -B теперь включает(а не выкл. как раньше) возможность записи директив с начала строки
- Исправлена ошибка с обработкой символов, номер в таблице ascii которых больше 127
- Исправлена ошибка с обработкой директив DISP/ENT
- Добавлена директива DEFM/DM как синоним директивам DEFB/DB/BYTE
- DEFL(новая директива) и LABEL=... можно переназначать.
- Исправлен баг с невозможностью использования числовых меток в DUP/REPT
- Новая директива DEFARRAY, для создания массивов DEFINE'ов

Скачать: [...вырезано...]
Исходники: [...вырезано...]

Знахарь
02.02.2006, 18:11
Поэтому когда-то Golden Eagle и не дописал своих WORMS'ов на Speccy, всё в итоге заглючило !!!

Неправда! Ничего не глючило. Даже мой малой помнит беседу с Иглом... И проблема была в нехватке 1 страницы под метки. Всего лишь. Аласм его устраивал вполне. А Алем обещал больше страниц... Решили подождать... :) просто забили :)

Robus
03.02.2006, 16:12
Неправда! Ничего не глючило. Даже мой малой помнит беседу с Иглом... И проблема была в нехватке 1 страницы под метки. Всего лишь. Аласм его устраивал вполне. А Алем обещал больше страниц... Решили подождать... :) просто забили :)

Я так же помню беседу с Eagl'ом, мы с Jungar'ом и Dreamer'ом тогда сидели у меня, после чего Jungar поехал в Николаев водку пить =) И мне Golden показывал как при не хватке меток глючит "аласм" и как ему очень не хватает возможностей "тасма", где можно казывать метку на метку. А меток и вправду не хватала, поэтому последнюю версию ВОРМСа Еагл переписал под "тасм". После Голден купил себе амигу и уж тогда забил на спекки. Хотя настоящую причину "забития" почти никто не знает, кроме Макса и Еагла, и распространяться об этом не будем, это личное Silicon Brains'ов.

А в аласме есть только один минус, это меткаи на метки вот и всё, а эта пичина одна из самых главных.

Эх, какие были времена, когда мы с Еаглом по очереди засыпали над его компом, кодируя. Если честно, то я впервые встречал человека, который мог продолжать писать код с того места, на котором я остановился, как и наоборот ... Хех ... "Были люди в наше время, Не то что нынешнее племя, Богатыри, не Вы" ...

Благодарен, Вам ...

Robus
03.02.2006, 16:28
..........еток и вправду не хватала, поэтому последнюю версию ВОРМСа Еагл переписал под "тасм". После Голден купил себе амигу и уж тогда забил на спекки. Хотя настоящую причину "забития" почти никто не знает, кроме Макса и Еагла, и рас....................


Хотя, чего я на это трачу время ... Куда мне знать ... Аласм - АЗБЕСТ, CJASM - АЗБЕСТ !!!

Пойду доделывать последний проект ... =)

Знахарь
03.02.2006, 16:45
Я так же помню беседу с Eagl'ом

Вот это другое дело :) точки над "и" расставлены :) Проехали.

Aprisobal
03.02.2006, 20:36
Robus, что можно укодить такого на ассемблере с фичей "метка на метку", чего никогда не укодишь на ассемблере без этой фичи? С примером плз.

Robus
04.02.2006, 06:37
Robus, что можно укодить такого на ассемблере с фичей "метка на метку", чего никогда не укодишь на ассемблере без этой фичи? С примером плз.

Вот пример программы, где очень много построено на метка в метку ...





; Пример программы супер-микро-мини демка ...

EQU $ASAM.PASS.ERROR=1 ;Количество пустых компиляций, для
;устронения вложенных меток в дважды
;запаковынном блоке или больше.






INCLUDE "speccy.az8" ;Маленький набор утилит.

.LoadPack ,_ ;Загрузка ранее запакованных кусков из
@.1.P EQU $PAGE ;файлов, в данном случае это нужно
@.1.S INCBIN @.0 ;для LOADER'а, который подгрузит
@.1.E EQU $-1 ;картинку загрузки ... =)
@.1.L EQU $ASAM.LOAD.SIZE+2
DW $ASAM.LOAD.SIZE
..

.PackerXP _ ;Запаковка блока для 128 страниц
ORG @.0
@.0.P EQU $PAGE
DSQ.Pack @[email protected]
@.0.E EQU $-1
@.0.S EQU [email protected]
..

.RunXP _ ;Автоматическая распаковка и запуск
LD A,@.0.P
LD HL,@.0.E
LD DE,FREEBLOCK
CALL DEPACKXP
..


PAGE 17 ;Какая-то часть компилится в страницу
ORG 49152
EFFx1 PHASE FREEBLOCK ;Адрес свободной памяти
EFFx1_S CALL WaitINCER ;Ожидаем окончания секундного интервала
LD A,1*8+7
CALL Clearuchik ;Стираем экран
CALL Printik ;Печать текста
DW 20480
DB "Spectrum Is The Best ..."+128
RET ;Прощай жизнь, конец части =)
UNPHASE
PackerXP EFFx1 ;Запаковываем кусок

B17.S EQU $-49152 ;Размер страницы #17, который в будущем
;запакуется в LOADER, я понимаю, что
;в этой странице уже и так всё запаковано,
;но это всё просто пример


PAGE 19 ;То же, что и сверху ... =)
ORG 49152

EFFx2 PHASE FREEBLOCK
EFFx2_S CALL WaitINCER
LD A,2*8+6
CALL Clearuchik
CALL Printik
DW 18432
DB "Hello To Aprisobal ..."+128
RET
UNPHASE
PackerXP EFFx2


CLR_P19: ;Процедура, стирания экрана, которая
PUSH AF ;распологается сразу после запакованной
LD A,R ;части
AND 00000111B
LD B,A
RLCA
RLCA
RLCA
OR B
CALL CLR_M0
POP AF

LD HL,16384
LD DE,16385
LD BC,6143
LD (HL),L
LDIR

CLR_M0: LD DE,22529
LD B,A
RRA
RRA
AND A
RRA
LD HL,ICLR+1
LD (HL),A
CLR_M1 BIT 7,(HL)
JZ CLR_M1
LD A,B
LD HL,22528
LD (HL),A
LD BC,767
LDIR
RET






EFFx3 PHASE FREEBLOCK ;Ещё один блок части, в котором
EFFx3_S JMP EFFx3_START ;используется метка на метку !

ORG 49152-(EFFx3_END-EFFx3_START) ;Откомпилит дальнейший код с адреса
EFFx3_START ;в самый конец свободной части памяти.
CALL WaitINCER ;Последний байт картинки "GFX\entire.scr"
LD A,3*8+0 ;будет находиться по адресу 49151
CALL Clearuchik
CALL Printik
DW 16384
DB "Assembler FOREVER ..."+128
CALL WaitINCER
XOR A
CALL Clearuchik
LD HL,ENTIREL
LD DE,18432
LD BC,2048
LDIR
HALT
LD DE,22528+256
INC B
LDIR
RET
ENTIREL IncBIN "GFX\entire.scr"
EFFx3_END
UNPHASE
PackerXP EFFx3

B19.S EQU $-49152




PAGE 20 ;Для красоты, что бы что-то валялось в странице
ORG 49152
DB "CJASM Is The Best ..."+128
B20.S EQU $-49152


PAGE 22 ;Для красоты, что бы что-то валялось в странице
ORG 49152
DB "HAVA NAVA VOCHEZ ??? ..."+128
B22.S EQU 16384



PAGE 23 ;Для красоты, что бы что-то валялось в странице
ORG 49152
DB "NAVA NAIN VOCHEZ ??? ..."+128
B23.S EQU $-49152


PAGE 16 ;Депакер, который будет использоваться как в деме,
ORG 23296 ;так и в LOADER'е
DEPACK
PUSH DE
INC HL
LD C,(HL)
INC HL
LD B,(HL)
DEC HL
DEC HL
DEC DE
EX DE,HL
ADD HL,BC
PUSH HL
EX DE,HL
AND A
PUSH HL
SBC HL,DE
POP HL
JNC DEPAx1
LDDR
JMP DEPAx2
DEPAx1
INC HL
INC DE
SBC HL,BC
EX DE,HL
SBC HL,BC
EX DE,HL
LDIR
DEPAx2
POP HL
POP DE
DEPACKX DSQ.DePacker ;Распаковщик by IMP



B23296.S EQU $-23296










;Programm Block ...





ORG 23552

INT: PUSHA ;Прерывание
ICLR LD A,0 ;Для примера, сюда запихивается цвет бордюра вне INT'а
PUSH AF ;да бы можно было понять, что все блоки распаковываются
AND 7 ;и запускаются автоматически
OUT (254),A
POP AF
OR 10000000B
LD (ICLR+1),A
INCER LD A,1 ;Счёчик по секунде, что бы синхронезироваться после
DEC A ;затраченного времени на распаковку и другую фингню.
JNZ INCERx1
LD A,50
INCERx1 LD (INCER+1),A
POPA
EI
RET

Clearuchik: ;Вызов процедуры очистки экрана, которая лежит в 19-ой
LD BC,32765 ;странице памяти между двумя запакованными блоками
EXA
LD A,19
OUT (C),A
EXA
JP CLR_P19





OrgInt INT,INT ;Утилита из Speccy.az8, устанавливающая в ближайшем
StackSP EQU INT.VecAddr ;адресе вектор прерывания, стек лепится перед вектором,
;нпдо же его куда-нибудь поместить




WaitINCER: ;Ждём окончание секунды
LD HL,INCER+1
LD A,(HL)
DEC A
JNZ WaitINCER
RET





M1 ;Цикл запуска трёх частей, в одной из которых
RunXP EFFx1 ;появляется наш логотип
RunXP EFFx2
RunXP EFFx3
JMP M1


Printik: ;Печать текста
POP HL
LD E,(HL)
INC HL
LD D,(HL)
INC HL
PR1 LD A,(HL)
PUSH AF HL
RLCA
RLCA
RLCA
LD L,A
AND 00000011B
ADD A,60
LD H,A
LD A,L
AND 11111000B
LD L,A
LD B,D
.8 ;Восем раз повторить нужно !!! =)
LD A,(HL)
LD (DE),A
INC L
INC D
..
ORG $-2 ;Стираем лишние команды, будем экономны !!! =)
LD D,B


POP HL AF
INC E
INC HL
RLCA
JNC PR1
PUSH HL
RET






DEPACKXP: ;Распаковка блока и запуск его, так как он депачится
LD BC,32765 ;сразу послет CALL DEPACKX
OUT (C),A
CALL DEPACKX
FREEBLOCK

;Start Of Programm

START: ;Сюда происходит JMP из LOADER'а, так как этот кусок
DI ;запускается только раз, его в будущем сотрут
LD A,(22528) ;части ГИГА-демы !!! =)
RRCA
RRCA
RRCA
LD (ICLR+1),A
LD SP,StackSP
LD BC,32765
LD A,16
OUT (C),A
LD A,INT.VEC
LD I,A
LD HL,INT
LD (INT.VecAddr),HL
IM 2

EI
JMP M1 ;Интересно, в итоге получился "JP M1" или "JR M1" ?





.1
INCLUDE "loader.az8" ;Там лоадер всё запакует и сделает готовый для
ORG @. ;использования файл, запихнув его в TRD
..



SaveLabels "wl.txt" ;Для примера сохраним все мекти, которые были
;в проекте


;ВСЁ !!! нано-дема отова ... Кстати, вы обратили внимание, на то, что дема
;компилится вообще во всю область памяти, и на ВАСИКовские переменные !!! =)
;
;В итоге всё это ужалось в 4352, с учётом нулей, при сохранении запакованных
;страниц для блоковой загрузки по секторам ... Не экономно, но облом делать
;качественную версию ... В игре Surgicsl Fantasy увидите качественную структуру
;файла, имеющий до 300-та запакованных файлов, блоков и других кусков.
;




Можно-ли подобное откомпилировать в CJASM'е ? Я лишь нажимаю "ентер" и получаю готовый файл, которым уже можно пользоваться !!!

Внимательно посмотрите кусок с метки EFFx3 ... Хотя не важно, главное, что бы Вы были Счастливы ...

ССссори за опечатки, всё это делалось за час и я не обращал внимание на грамматику ... =)

Может что-нибудь ещё накодить ??? =) !!!

Aprisobal
04.02.2006, 18:08
Вот пример программы, где очень много построено на метка в метку ...
Спасибо. Но можно было и не писать столь большую программу, а дать след. код, который нельзя никак переделать для ассемблера, не умеющего ссылаться вперед:

EFFx3: PHASE FREEBLOCK ;Ещё один блок части, в котором
EFFx3_S: JP EFFx3_START ;используется метка на метку !
DB 192
DB 192
EFFx3_START:
DEPHASE

DEPACKXP:
DB 255
DB 255
FREEBLOCK:
;Start Of Programm

START:
;...............


Можно-ли подобное откомпилировать в CJASM'е ?Никогда не слышал о таком.
На SjASM/SjASMPlus/Pasmo/Xasm/PazAsm/AsMSX/As80/Asm80... нельзя. Знаю только один такой ПЦшный ассемблер tniASM - он мульти-проходной.
Надо будет и что-нибудь с SjASMPlus попробовать сделать на досуге.

Robus
04.02.2006, 23:19
Никогда не слышал о таком.
На SjASM/SjASMPlus/Pasmo/Xasm/PazAsm/AsMSX/As80/Asm80... нельзя. Знаю только один такой ПЦшный ассемблер tniASM - он мульти-проходной.
Надо будет и что-нибудь с SjASMPlus попробовать сделать на досуге.

Прости, я перепутал ... Это моя оплошность ... Не CJASM, а SjASM... Однако мой компилирует, и ещё TASM 4.0 на Speccy ... Это и была проблема перехода на ALASM, который вообще ниодну мою прогу не компилировал, разве что если всю логику кода переписать. Просто я привык к универсальности. Но это всё вкусы ...
А писать код - приятно большой, маленький, не важно, главное делать.

Alex/AT
18.03.2006, 16:39
Новая версия SjASMPlus - 1.06 RC1.


Скачать: http://zx.pk.ru/attachment.php?attachmentid=2338
Исходники: http://zx.pk.ru/attachment.php?attachmentid=2339

Ех. Использую структуры (STRUCT). При первой же попытке поюзать заданный стракт вылетает с Exception'ом.

ЗЫ. Банальный тестовый код:

; common sprite structure
STRUCT SPRITE
NEXT WORD 0 ; 00 02 Next sprite in queue (0 - end)
PREV WORD 0 ; 02 02 Previous sprite in queue
NEXTDQ WORD 0 ; 04 02 Next display queue entry (0 - end)
FLAGS BYTE 3 ; 06 01 Flags
; 0: visibility (0 - not visible)
; 1: invalidated (1 - coordinates changed or new sprite)
; 2: delete flag (1 - delete it)
; 3: current visibility (1 - offscreen, preprocessed)
SPRNO BYTE 0 ; 07 01 Sprite number to display
X WORD 0 ; 08 02 X coordinate (pixels) on VSCREEN
Y BYTE 0 ; 0A 01 Y coordinate (pixels) on VSCREEN
DESC WORD 0 ; 0B 02 Sprite descriptor pointer (preprocessed)
SADDR WORD 0 ; 0D 02 Screen address (preprocessed)
HCLIP WORD 0 ; 0F 02 Horizontal clipping routine (preprocessed)
PENTRY WORD 0 ; 11 02 Putter entry (preprocessed)
PEND WORD 0 ; 13 02 Putter endpoint (preprocessed)
LOOKUP BYTE 0 ; 15 01 Lookup high byte (preprocessed)
ENDS

; first queue sprite (0 in visible field)
CSS_Q_FSPR SPRITE 0,0,0,0,0

Aprisobal
24.03.2006, 23:42
Alex/AT, вот bugfix, пока следующая версия не вышла. См. аттачмент.

Alex/AT
25.03.2006, 10:21
Alex/AT, вот bugfix, пока следующая версия не вышла. См. аттачмент.

Вот спасибо!!! Respect :v2_clap2:

Alex/AT
20.04.2006, 12:23
А можно один просьб?

Кусочек из мануалки.

"Extended instructions"
=======================

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.
Anyway, here's the list:

rl bc
rl de
rl hl
rr bc
rr de
rr hl


Нельзя ли весь (не только цитированный) этот набор команд сделать отключаемым (опциональным). А то временами промахиваешься, а он все нормально компилит...

Aprisobal
20.04.2006, 12:34
Нельзя ли весь (не только цитированный) этот набор команд сделать отключаемым (опциональным). А то временами промахиваешься, а он все нормально компилит...Может быть в версии 1.06 RC3 или 1.07.

Вышла новая версия SjASMPlus.
Новое в 1.06 RC2: (2006-04-20)
------------------
- Исправлены некоторые ошибки в директивах STRUCT/ENDS
- Применены изменения к SjASMPlus от новой версии SjASM 0.39g, а именно:
- ENDMAP directive.
- DEFM and DM synonyms for BYTE. (уже было)
- Some bug fixes:
- file size is reset when a new output file is opened. (уже было)
- 'bytes lost' warning fixed.
And thanks to Konami Man:
- PHASE and DEPHASE directives as synonyms of TEXTAREA and ENDT. (уже было)
- FPOS directive.
- Expanded OUTPUT directive.
- The possibility to generate a symbol file.
Качать: [...вырезано...]
Исходники: [...вырезано...]

Alex/AT
22.04.2006, 08:46
[bug] RC2: LABELSLIST при использовании вылетает в AV. Кондишны так до конца и не понял - но вылетал как на простом коде без модулей, так и на коде с модулями.

Aprisobal
23.04.2006, 13:26
[bug] RC2: LABELSLIST при использовании вылетает в AV. Кондишны так до конца и не понял - но вылетал как на простом коде без модулей, так и на коде с модулями.Упс, просто кое-что в этой версии сильно поменял(и буду дальше менять, чтобы сделать его мультипроходным), а про LABELSLIST забыл. Спасибо.

Багфикс:
Bin: http://zx.pk.ru/attachment.php?attachmentid=3108
Src: http://zx.pk.ru/attachment.php?attachmentid=3109

hi_soft
22.05.2006, 21:08
Что то мене не разобраться..
компил.я прошла
удачно все ок
а в эмуль не граузиться что я не так сделал??

jim
25.05.2006, 12:43
Нельзя ли добавить опцию компиляции на ленту (tap) в виде загрузчик + код. Был бы очень признателен (возможно не я один). Батники напрягают. А z80 и SNA это все таки недоформаты (не хочу никого обидеть).

nyuk
25.05.2006, 13:30
Нельзя ли добавить опцию компиляции на ленту (tap) в виде загрузчик + код. Был бы очень признателен (возможно не я один). Батники напрягают.
О, грамотный подход! Батники напрягают, поэтому пойду-ка понапрягаю авторов...

jim
26.05.2006, 23:15
О, грамотный подход! Батники напрягают, поэтому пойду-ка понапрягаю авторов...
А для чего тогда эта ветка?

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

jim
26.05.2006, 23:45
Могу еще предложить: для совместимости с различными ассемблерами, использовать соответствующую директиву в начале текста (например: .alasm или .gens). мне кажется добавить одну строчку вначале - проще чем перелопачивать всю программу. тем более, что вроде как отличия синтаксиса не очень большие. есть поддержка популярного ассемблера - все ок! нет - выдается ошибка..

Aprisobal
25.07.2006, 21:02
Могу еще предложить: для совместимости с различными ассемблерами, использовать соответствующую директиву в начале текста (например: .alasm или .gens). мне кажется добавить одну строчку вначале - проще чем перелопачивать всю программу. тем более, что вроде как отличия синтаксиса не очень большие. есть поддержка популярного ассемблера - все ок! нет - выдается ошибка..Количество пользователей SjASMPlus настолько мало, что лучше конкретный кодер сам "перелопатит"(а лучше используя Find & Replace) свою программу, которая обычно не превышает 7000 строк.


Нельзя ли добавить опцию компиляции на ленту (tap) в виде загрузчик + код. Был бы очень признателен (возможно не я один). Батники напрягают. А z80 и SNA это все таки недоформаты (не хочу никого обидеть).Если TAP и сделаю, то очень не скоро. А вообще в комплекте с SjASMPlus поставляются примеры, в одном из которых есть метод по созданию монолоадера и записи его в TRD образ.
------------------
В новой версии SjASMPlus 1.06 RC3 особых доработок нет, но исправлен ряд жестких багов.
Качаем:
Bin: [...вырезано...]
Src: [...вырезано...]
------------------
Подсчитал ради интереса количество строк кода в UFO 2. Оказалось ~19000!

moroz1999
08.08.2006, 03:56
нет ничего удивительного в том, что я, как эмуляторщик, пересел на sjasm с zasm, тем более, что мои запросы к ассемблеру минимальны.

demon_zx
09.08.2006, 09:16
вот с ис-дос ассемблером бы совместимости добавить, было бы вообще круто.

Aprisobal
09.08.2006, 15:27
вот с ис-дос ассемблером бы совместимости добавить, было бы вообще круто.Да я сам ис-дос никогда не видел. :( Приаттач доку-ю, если хочешь - на досуге посмотрю.

demon_zx
14.08.2006, 15:31
Да я сам ис-дос никогда не видел. :( Приаттач доку-ю, если хочешь - на досуге посмотрю.

30 кБ в архиве, приаттачить не получается, могу на мыло отослать. А так в принципе главное, что мешает использовать sjasmplus в компиляции исходников для ис-асма, так это, то что глобальные метки в нем начинаются со знака доллара $. И как правило глобальными являются номера rst вызовов в ис-дос, которых в программе очень много.

Aprisobal
15.08.2006, 00:13
30 кБ в архиве, приаттачить не получается, могу на мыло отослать. А так в принципе главное, что мешает использовать sjasmplus в компиляции исходников для ис-асма, так это, то что глобальные метки в нем начинаются со знака доллара $. И как правило глобальными являются номера rst вызовов в ис-дос, которых в программе очень много.Хм. В таком случае достаточно сделать Replace All в любом текстовом редакторе: $ => @
А если редактор поддерживает regexp, то лучше так: \$([a-zA-Z0-9_]+) => @\1

demon_zx
15.08.2006, 11:50
это если перенести исходники один раз, а при постоянном переносе туда сюда, уже удовольствия мало.

rasmer
16.08.2006, 18:24
Люди - проститер ламера ушастого, но в описании по крайней мере я не понял, есть ли такая штука в sjasm:

label1
nop
nop
nop
nop
nop
label2
nop
nop
nop
nop

1)вот как сделать чтобы label2 начиналась с первого возможного "красивого" адреса вида #XX00?
2)Как загрузить допустим в h , старший байт адреса метки label2?

Aprisobal
16.08.2006, 19:55
1)вот как сделать чтобы label2 начиналась с первого возможного "красивого" адреса вида #XX00?
2)Как загрузить допустим в h , старший байт адреса метки label2?1) ORG ($+255)/256*256 перед label2
2) LD H,high label2

rasmer
16.08.2006, 21:09
1) ORG ($+255)/256*256 перед label2
2) LD H,high label2жесть...

Alex/AT
17.08.2006, 09:17
ORG ($+255)/256*256 перед label2
Ээээ. ALIGN 256 еще не отменяли :)

Aprisobal
05.09.2006, 11:55
Новая версия SjASMPlus - 1.06 Stable
Проект теперь размещается на SourceForge.net.
Страница проекта: http://sourceforge.net/projects/sjasmplus/
Веб-страница: http://sjasmplus.sourceforge.net
Качать: [...вырезано...]

bugsy
05.09.2006, 21:07
апри! я ещё раз благодарю тебя за твой ассемблер и хочу спросить: сколько страниц памяти -М понимает SjASM?

Aprisobal
06.09.2006, 00:14
апри! я ещё раз благодарю тебя за твой ассемблер и хочу спросить: сколько страниц памяти -М понимает SjASM?Пока только 8 (0..7). В версии 1.07 (которая скоро должна выйти) будет(уже есть) 32. Правда .SNA не поддерживает такое количество, поэтому придется или оставить как есть или делать запись в .Z80.

bugsy
06.09.2006, 07:29
В версии 1.07 (которая скоро должна выйти) будет(уже есть) 32. Правда .SNA не поддерживает такое количество, поэтому придется или оставить как есть или делать запись в .Z80.
Дада!! Мне надо хотябы 16 страниц. Моя графика не входит в 128Кб...
У меня там юниты большого размера... и враги ещё отличаются от юнитов игрока... и вообще...

Короче буду ждать новую версию SjASM`a, пока приходится извращаться подгрузкой уже в эмуле...

P.S. удалось переманить на SjASM также и моего брата Firestarter`a. Теперь слово ALASM мы видим только из alasmview.wlx (Vitamin привет!)

Aprisobal
18.09.2006, 13:57
Вышла новая сильно переработанная версия SjASMPlus 1.07 RC1.
Кратко о том, что нового:
- компилятор стал 3-х проходным
- имеет встроеный скриптовый язык Lua. С помощью него можно реализовать любые выходные форматы, генераторы процедур и пр.
- были изменены ключи командной строки. Подробнее см. в документации.
- была переработана документация в формат HTML и дополнена.
- добавлены новые директивы: DEVICE, SLOT, SHELLEXEC
- добавлены predefined константы: _SJASMPLUS=1, _ERRORS (количество ошибок) и др.
- немного изменен выходной лог ошибок - ошибки теперь разделяются на error'ы и warning'и.
- и ещё много чего, что не вспомнил.

При таком количестве изменений не обойдется без глюков. Но на моих проектах пока ничего не заметил.

Качать: [...вырезано...]

bugsy
18.09.2006, 15:07
ну и наверное поддержка 512 килов?
спасибо апри! отличный подарок на моё день рождения!

Aprisobal
18.09.2006, 23:13
ну и наверное поддержка 512 килов?
спасибо апри! отличный подарок на моё день рождения!:)) Угу.
См. директиву "DEVICE ATMTURBO512". Расположение страниц будет таким: $0000-$3FFF - слот 0, страница 31, $4000-$7FFF - слот 1, страница 5, $8000-$BFFF - слот 2, страница 2, $C000-$FFFF - слот 3, страница 0. Текущий слот по умолчанию устанавливается 3-ий. Менять текущий слот (т.е. куда будет вставлена страница директовой PAGE) - "SLOT <номерслота>". Например "SLOT 0:PAGE 1" и с $0000 по $3FFF будет находится 1-ая страница памяти.

Только теперь осталость кому-то написать скрипт на Lua для сохранения снапшотов Z80 c 512кб. Или скрипт для сохранения в TAP файле. Вариантов много, а главное я снял с себя часть проблем :) .
Ещё, например, можно слить всю память в образ TRD. Но эмулятор, наверное, грузить долго будет.
Или сохранить первые 128кб в снапшот SNA, а остальные 384кб догружать с дискеты. :)

Aprisobal
23.09.2006, 11:34
Новая версия SjASMPlus 1.07 RC1bf. Cодержит несколько важных bug фиксов. Качать: [...вырезано...]

bugsy
23.09.2006, 18:31
очень рад что ты поправил! спасибо! видишь, даже делая ремонт я на что-то гожусь ;)

Aprisobal
28.09.2006, 13:34
Новая версия - SjASMPlus 1.07 RC2
Чуть-чуть подравленная и доработанная.
Качать: http://sourceforge.net/project/showfiles.php?group_id=173915

transman
11.10.2006, 01:32
почему при компилировании (чистый асм, zx128) по адресу #8000 всегда 0?
Этот глюк во всех 1.07 и он здорово мешает.

bugsy
11.10.2006, 13:20
а у меня в ошибки компиляции не те строки выдаёт... толи я не правильно что-то настроил, толи это глюк...
обламывает...

key-jee
11.10.2006, 13:58
а у меня в ошибки компиляции не те строки выдаёт....
Не с тебя одного подобная проблема.

bugsy
11.10.2006, 14:52
скорее всего это из-за трёхпроходности

Aprisobal
12.10.2006, 10:18
почему при компилировании (чистый асм, zx128) по адресу #8000 всегда 0?
Этот глюк во всех 1.07 и он здорово мешает.А что по адресу #8000 должно быть?


а у меня в ошибки компиляции не те строки выдаёт... толи я не правильно что-то настроил, толи это глюк...
обламывает...
Не с тебя одного подобная проблема.Знаю и знал ещё до первого релиза 1.07(в 1.06 не было такого). Пока не исправил.


скорее всего это из-за трёхпроходностиНет.

bugsy
12.10.2006, 10:34
хм...
приятно читать большие, развёрнутые ответы сразу на все вопросы...
;)

Aprisobal
12.10.2006, 14:13
Вышла новая версия 1.07 RC3.
Вроде бы исправил баг с неправильным подсчетом строк. Также добавил поддержку 48кб снапшотов.
Качать: [...вырезано...]

transman
14.10.2006, 22:17
А что по адресу #8000 должно быть?

не ноль :)
там код. и похоже это проявляется только в SNA

demon_zx
16.10.2006, 08:26
а у меня нормально 8-)

elfh
17.11.2006, 00:34
не ноль
там код. и похоже это проявляется только в SNA

у меня тоже самое. похоже, что это не конкретно на #8000, а по адресу org.

moroz1999
17.11.2006, 03:14
после каждого компилирования у меня автоматически собирается TRD из заранее подготовленных файлов.
Сегодня встретил проблему, что один из файлов стабильно добавляется битым, остальные файлы из сборки появляются в trd на ура.
Пробовал закинуть его туда ручками, с помощью плагина для TC - всё работает на ура.
Вот эта последовательность стабильно добавляет файл mod.C битым.


EMPTYTRD "my.trd"
DEVICE ZXSPECTRUM128

org 30000
INCBIN "mod.bin"
SAVETRD "my.trd","mod.C",30000,23414
DISPLAY "mod saved!"

что я могу не так делать?

Aprisobal
29.11.2006, 10:45
Вышла новая версия 1.07 RC4.
Исправлен баг с SAVESNA и возможно с SAVETRD. Добавлен Makefile для компиляции под Linux и пр.
Качать: [...вырезано...]

Alex/AT
02.12.2006, 13:09
Подтверждаю - в SNA по адресу #8000 оказывается ноль вместо нужного #C9 (RET).

С ORG не связан, ORG #8000 нет в природе.

Aprisobal
02.12.2006, 22:26
Вышла новая версия 1.07 RC4bf.
Важный багфикс в функциях генерации кода.
Качать: http://sourceforge.net/project/showfiles.php?group_id=173915

psndcj
12.12.2006, 00:28
Уважаемый Aprisobal!!! По Вашему совету попробовал дизассемблер IDA Pro (речь заходила в теме о реинкарнации Pulsoid'а) - впечатлен для глубины души! Вопрос - а нельзя ли сделать настройку этого дизасма сразу под SjAsm (это раз) и компиляцию в ассемблере в .idb формат для последующего просмотра в IDA???

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

Aprisobal
12.12.2006, 01:32
Уважаемый Aprisobal!!! По Вашему совету попробовал дизассемблер IDA Pro (речь заходила в теме о реинкарнации Pulsoid'а) - впечатлен для глубины души!О, успел прочитать мой пост :) , до того, как rasmer подчистил ту тему, оставив один флуд.

Вопрос - а нельзя ли сделать настройку этого дизасма сразу под SjAsm (это раз)Ранее пробовал модифицировать модуль Z80 из IDA SDK, но к сожалению моих знаний в области Си не хватает, чтобы просто скомпилировать этот модуль. :( С этими Makefile'ами одни проблемы, не то что на дельфях, например. :)
...и компиляцию в ассемблере в .idb формат для последующего просмотра в IDA???1. Формат IDB файла в документации/SDK не описан.
2. Зачем?

psndcj
13.12.2006, 00:47
ну так то конечно - особого смысла нет, вполне наверняка в каком-нить крЮтом текстовом редакторе нечто подобного можно добиться... просто очень понравилось графическое отображение блок-схемы (всю жизнь наивно предполагал, что блок-схемы изобретение учителей информатики, в жизни абсолютно бесполезное) =)

ну а 2 - если поддержать выгрузку в IDB формате (ну сейчас то уже понятно чисто фантазия), то очень просто и удобно изменять метки, переразбивать массивы ну и прочее...


кстати - слегка не в тему - а нельзя ли сделать в SjAsm'е поддержку команды EX HL,DE (синоним команды EX DE,HL)??? =)

ну и по асму еще одна просьба - а почему нельзя писать мнемоники асма с начала строки (без отступа)? это же все зарезервированные слова - метками они быть точно не могут....

Aprisobal
18.02.2007, 13:00
кстати - слегка не в тему - а нельзя ли сделать в SjAsm'е поддержку команды EX HL,DE (синоним команды EX DE,HL)??? =)Не вижу смысла это делать.

psndcj
18.02.2007, 20:40
ну в Шторме (и кажется в XAS'е каком-то) было сделано подобное... я конечно прошу по шкурным интересам - просто туева хуча исходников в Шторме - да и привык я прсото за 7 то лет =)

с другой стороны - это же делается абсолютно просто - почему бы и нет?

Shadow Maker
20.02.2007, 22:41
Да, IDA Pro это мощь... Хм, а может кто напишет простую инструкцию по дизассму спековских прог (а то реально что-то не очень хочется вникать в эту кучу менюшек), ну что-то типа фаст гайда для чайников?

psndcj
21.02.2007, 00:16
Оффтоп конечно уже, так как к теме асма никакого отношения не имеет...
Лично я отдизасмил 48ю игрушку одну довольно просто, имхо все весьма интуитивно - правой кнопкой мыши тыкаешь в текст - узнаешь горячие кнопки и вперед =) проблемы какие-то правда иногда возникают с двухбайтовыми переменными (у которых к любому байту обращение), а еще с адресами, к которым обращение идет - hl, adr: de, adr+1... ну и в идеале неплохо было бы с 128ми прогами научиться работать... Отдельная тема наверно нужна - ну и люди заинтересованные в этом....

Vasil
01.03.2007, 18:51
Вышла новая версия 1.07 RC4bf.
Важный багфикс в функциях генерации кода.
Качать: http://sourceforge.net/project/showfiles.php?group_id=173915

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

Баги в v1.07 RC4bf (build 02-12-2006).

1). Баг в отработке директивы "EXPORT" - не продвигается (?) входящий поток, поэтому компилятор ругается. В оригинальном компиляторе (2-х проходном) такого бага нет.
Пожелание: Было бы не плохо для "EXPORT" перечислять имена меток через запятую, а не прописывать для каждой метки директиву "export".

2). Баг с выводом hex-чисел для "EQU" (по опциям --sym, --exp), если число занимает все разряды (т.е. оно 32-х битное) и самый старший разряд начинается с A..F. Измени формат записи числа - ставь ведущим "#" или "0x" вместо концевого "h".

3). Тоже что-то там с входящим потоком, ругается на следующий код:


db 0,0,0,0,0,0,0,0,0,0,0
;
T0C83: db "Ё",1Bh,"!",'"',"#","$",":",",",".",";","?","%","_","+",8

Оригинальный асм это компилит без проблем.

4). И еще одна ситуация. Не переваривает например такую запись байта:


ld a,"\"

Понятно, что для записи обратного слэша нужно юзать "\\", но правильней все же записывать как "\". Такая запись применяется во всех асмах (кроме этого). Это как-то криво, записывать ld a,"\\"

Вобщем ты увлекся второстепенными фитчами, а про сам асм забыл. Исправляй ситуацию.

Aprisobal
22.04.2007, 21:02
3). Тоже что-то там с входящим потоком, ругается на следующий код:


db 0,0,0,0,0,0,0,0,0,0,0
;
T0C83: db "Ё",1Bh,"!",'"',"#","$",":",",",".",";","?","%","_","+",8
Попробуй плз версию, которая приклеплена к сообщению. [...вышла.новая.версия...]


4). И еще одна ситуация. Не переваривает например такую запись байта:


ld a,"\"

Понятно, что для записи обратного слэша нужно юзать "\\", но правильней все же записывать как "\". Такая запись применяется во всех асмах (кроме этого). Это как-то криво, записывать ld a,"\\"Ориентировка была не на спековские асмы(думаю ты их упомянул), а на современные стандарты. Также как и в C, C++, C#, PHP, Perl, JavaScript и пр. в двойных кавычках "" SjASMPlus (и оригинальный SjASM) обрабатывает управляющие последовательности типа \n, \t, \r... Просто в SjASMPlus сделал так, что в одинарных кавычках '' управляющие последовательности не действуют.


После недавнего общения с Alone Coder'ом составил следующий полезный LUA скрипт. Вставляю сюда, чтобы не пропало.


LUA
-- Функция увеличивает на 1 число, записанное в файле fname и создает define с именем BUILD для, например, директивы DISPLAY
-- Пример использования функции см. ниже.
-- Внимание! Самостоятельно создайте пустой файл build.txt, иначе функция не будет работать
function increase_build(fname)
local fp
local build
fp = assert(io.open(fname, "rb"))
build = tonumber(fp:read("*all"))
assert(fp:close())
if type(build) == "nil" then
build = 0
end
build = build + 1;
sj.insert_define("BUILD", build)
fp = assert(io.open(fname, "wb"))
assert(fp:write( build ))
assert(fp:flush())
assert(fp:close())
end

increase_build("build.txt")

-- Создать define "TIME" с текущим временем
sj.insert_define("TIME", '"' .. os.date("%Y-%m-%d %H:%M:%S") .. '"')
ENDLUA

; отобразим время и номер сборки
DISPLAY "Build time: ", TIME
DISPLAY "Build number: ", /D, BUILD

Lethargeek
24.04.2007, 14:06
1) "sub a,*" ассемблируется в две команды "sub a" и "sub *", что выбивается из ряда "add/adc/sbc a,*", совпадающих при ассемблировании с "add/adc/sbc *" (хотя формально все правильно, выглядит нелогично).

2) СЕРЬЕЗНЕЙШИЙ БАГ - директивы "ORG $-n" (и "ORG $+n") не влияют на бинарник, хотя в листинге отражаются правильно!! (хотел панимаиш встроить в макросы оптимизацию, а тут такой облом) :(

Aprisobal
24.04.2007, 21:18
1) "sub a,*" ассемблируется в две команды "sub a" и "sub *", что выбивается из ряда "add/adc/sbc a,*", совпадающих при ассемблировании с "add/adc/sbc *" (хотя формально все правильно, выглядит нелогично). По справочнику всё ИМХО логично. Сам из оригинального асма это убрал.


2) СЕРЬЕЗНЕЙШИЙ БАГ - директивы "ORG $-n" (и "ORG $+n") не влияют на бинарник, хотя в листинге отражаются правильно!! (хотел панимаиш встроить в макросы оптимизацию, а тут такой облом) :(Как понял ты пишешь про бинарник, который задается директивами OUTPUT (или который выдается в файле *.out). ORG не в режиме, устанавливаемом дир-ой DEVICE, работает почти как DISP/PHASE/TEXTAREA, т.е. просто задает виртуальный адрес, а все данные компилятор одним потоком сует в выходной файл.
Советую использовать директиву DEVICE и доступные после директивы SAVEBIN, SAVETRD, SAVESNA и т.д.

Lethargeek
25.04.2007, 07:04
ORG не в режиме, устанавливаемом дир-ой DEVICE, работает почти как DISP/PHASE/TEXTAREA, т.е. просто задает виртуальный адрес, а все данные компилятор одним потоком сует в выходной файл.
А если неохота привязываться к устройству? Вон на песюке же такой номер сразу же проходит, а там ведь сначала формируется obj... Имхо как должно быть: в out выводится участок от минимального из всех случившихся значений счетчика размещения до текущего (на момент END). Как вариант - до максимально случившегося значения.

Еще вопрос: LUA вообще нельзя в макрах использовать, или я че-то неправильно делаю? (пишет unexpected end of file)

Aprisobal
25.04.2007, 10:47
А если неохота привязываться к устройству? Вон на песюке же такой номер сразу же проходит, а там ведь сначала формируется obj... Имхо как должно быть: в out выводится участок от минимального из всех случившихся значений счетчика размещения до текущего (на момент END). Как вариант - до максимально случившегося значения.Пока не смогу сделать твой вариант. Может быть FPOS поможет решить твою проблему? К сообщению приложил версию, в котором эта директива добавлена (в предыдущей версии была сделана, но не вставлена в обр-ик директив). [...вышла.новая.версия...]


Еще вопрос: LUA вообще нельзя в макрах использовать, или я че-то неправильно делаю? (пишет unexpected end of file)Нельзя.

psb
28.04.2007, 14:24
а можно сделать, чтоб после фразы

"Errors: 6072, warnings: 0, compiled: 2343 lines, work time: 20.293 seconds"

он ставил ентер? а то если делать echo в батнике, оно сразу за этой сторокой пишется..

спасибо:)

Aprisobal
28.04.2007, 17:07
а можно сделать, чтоб после фразы

"Errors: 6072, warnings: 0, compiled: 2343 lines, work time: 20.293 seconds"

он ставил ентер? а то если делать echo в батнике, оно сразу за этой сторокой пишется..

спасибо:)20.293 seconds - что-то очень долго.
Ок, сделаю в след. версии.

breeze
03.05.2007, 23:32
Гм... или я дурной или чего-то не понял, но почему у меня на строчке


TIMEOUT DB 5000

сыпится Bytes Lost и привет родне ? :(

moroz1999
04.05.2007, 09:52
замени на dw?

breeze
05.05.2007, 00:59
замени на dw?

спасибо! помогло :eek:

psndcj
05.05.2007, 20:40
=) улыбнуло! ведь модератор как никак =) без обид!!!

breeze
06.05.2007, 03:04
=) улыбнуло! ведь модератор как никак =) без обид!!!
я конечно понимаю что без флейма нам никак :mad:
но просто если меч не вынимать из ножен, то он всё-таки заржавеет.
так что каким бы ты не был гуру - во всём нужна практика! что-то забывается , где -то упускается из виду , где-то просто описка, а тебе кажется что всё правильно... я лично вообще подумал что слово TIMEOUT забито в число системных, а оказалось всё гораздо проще... :sleep: я уж не говорю что быть модератором и хорошим кодером не одно и тоже :eek:

psb
12.05.2007, 18:31
в версии 1.07 RC4bf не получается записать что-то по адресу #ffff.
включаю нужный девайс, делаю, например, ORG #FFFF:NOP, он при компиляции ругается (warning) и выходит как при ошибке.. можно это оперативно подправить? (может не проверять вообще, выходит ли $ за #ffff?)

и еще, можно расширить действие ALIGN? чтоб не заполнялось всё нулями, а просто менялся $? типа, если ALIGN 256, то не заполняется нулями, а если ALIGN 256,0, то заполняется..

psndcj
12.05.2007, 22:47
2 дня трах.... (мучался) с конвертацией своего исходника из Шторма =( фих с ним, что команда EX HL,DE не существует - так нашел несовместимость:
.30 ld (hl),a:inc l
после компиляции выдает код
.30 ld (hl),a
inc l

имхо немного неадекватно - для подобных случаев есть конструкция dup/edup...

(но сколько я крови и пива на этом деле потратил....)

Vitamin
13.05.2007, 16:50
Баг:

Код


...
STRUCT
;дальше просто код

логично выдает ошибку, а вот код:



...
STRUCT @
;...

выкидывает компилятор нафиг


Пожелание:
сделать опцию, согласно которой псевдоинструкция
ld rr1,rr2
будет собираться в
push rr2
pop rr1 (как сейчас для индексных регистров)
или в
ld rr1.l,rr2.l
ld rr1.h,rr2.h (длиннее и медленнее, зато без стека)

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

Aprisobal
14.05.2007, 01:53
в версии 1.07 RC4bf не получается записать что-то по адресу #ffff.
включаю нужный девайс, делаю, например, ORG #FFFF:NOP, он при компиляции ругается (warning) и выходит как при ошибке.. можно это оперативно подправить? (может не проверять вообще, выходит ли $ за #ffff?)

и еще, можно расширить действие ALIGN? чтоб не заполнялось всё нулями, а просто менялся $? типа, если ALIGN 256, то не заполняется нулями, а если ALIGN 256,0, то заполняется..Исправлено и расширено.


2 дня трах.... (мучался) с конвертацией своего исходника из Шторма =( фих с ним, что команда EX HL,DE не существует - так нашел несовместимость:
.30 ld (hl),a:inc l
после компиляции выдает код
.30 ld (hl),a
inc l

имхо немного неадекватно - для подобных случаев есть конструкция dup/edup...

(но сколько я крови и пива на этом деле потратил....)EX HL,DE добавил.



Баг:

Код


...
STRUCT
;дальше просто код

логично выдает ошибку, а вот код:



...
STRUCT @
;...

выкидывает компилятор нафигОк, спс.

Пожелание:
сделать опцию, согласно которой псевдоинструкция
ld rr1,rr2
будет собираться в
push rr2
pop rr1 (как сейчас для индексных регистров)
или в
ld rr1.l,rr2.l
ld rr1.h,rr2.h (длиннее и медленнее, зато без стека)

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

Новая версия SjASMPlus 1.07 RC5. Исправлены некоторые баги и учтены несколько пожеланий. Качать с сайта: [...новая версия...]
Также не забывайте, что в исходники компилятора входит Makefile и соот-но его можно скомпилировать под Linux, FreeBSD и пр.

psndcj
15.05.2007, 07:29
EX HL,DE добавил.
спасибо огромное!!! =)

psb
30.05.2007, 17:54
странно, но у меня последняя версия совсем не запускается..

The application has failed to start because the application configuration is incorrect. Reinstalling the appl. may fix this problem...

:((

Aprisobal
30.05.2007, 22:28
Новая версия SjASMPlus 1.07 RC5bf. Исправлен баг, связанный с утечкой памяти, применены патчи от Ric Hohne, добавлены в примеры исходники демо CosmoCubes от triebkraft. Качать с сайта: [...вышла новая версия...]

Lethargeek
31.05.2007, 07:25
Что еще очччень хотелось бы видеть:

1) UNDEFINE для меток/переменных (удобно)
2) возможность опускать параметры при вызове макры, и связанные с этим конструкции IFB/IFNB (как в песюковом масме)

Aprisobal
31.05.2007, 14:51
Что еще очччень хотелось бы видеть:

1) UNDEFINE для меток/переменных (удобно)
2) возможность опускать параметры при вызове макры, и связанные с этим конструкции IFB/IFNB (как в песюковом масме)Записал в список TODO.

Напоминаю, что на сайте SjASMPlus есть страничка с проектами, где он был задействован - http://sjasmplus.sourceforge.net/projects-using-sjasmplus/
Если вы использовали компилятор в своем проекте, то пишите - добавлю. Спасибо.

Adramelek
14.07.2007, 01:17
Возможно, уже было -- нет времени просто всю тему читать, -- есть ли для SjAsmPlus нормальный файл подсветки для Colorer?

breeze
18.08.2007, 13:05
Такс ;)
Решил я тут вплотную заняться дверями (Doors которые) и столкнулся с проблемой, точнее нашел один баг , полубаг и небольшой энхансмент ;)

1) при выполнении SAVEHOB, если имя файла меньше 8 символов расширение сохраняется нормальное, но если имя файла ровно 8 символов, то вместо указанного расширения встравляется I

2) при сохранении файла SAVETRD, если трехсимвольное расширение у файла (например "config.sys") то оно обрезается до одного символа :( я конечно понимаю что это стандарт, но всё-таки на спекртуме давно уже используется система трехсимвольных расширений и почему бы её не поддержать ? тем более что мне это необходимо для реализации системы.

3) Есть такая замечательная вещь как DirSys, было бы очень здорово заюзать это расширение TR-DOS, опять же необходимо для моей системы

заранее big snx!

breeze
18.08.2007, 14:52
О! Неужели поддержишь DirSys? :)

Ну если отмотать в далёкий 1998 год ;) то уже в те далёкие времена Doors поддерживала работу с директориями ;) Я ещё не разбирался что из себя представляется DirSys, но директории в tr-dos моя давняя мечта ;)


2Aprisobal: Кстати на sourceforge вместо сорцов лежит архив с доками :( sjasmplus-docs-1.07-rc5bf2.zip

breeze
18.08.2007, 17:31
Ну, если вдруг дело дойдёт до реализации и появятся вопросы, то всегда готов ответить! :)

Вопросы это конечно хорошо ;) но я бы с радостью не отказался от готовых решений в виде либы: readFile, saveFile, deleteFile, createDir, removeDir :rolleyes:

Добавлено через 1 час 56 минут
Короче!
Понял, что следующего билда мы будем ждать оооочень долго :)
Скачал я сорцы sjasma (правда не самые последние)

Исправил баги и добавил фичи:

[+] если в SAVEHOB или SAVETRD 3х-символьное расширение, вместо адреса загрузки пишутся именно 2 оставшихся байта из расширения
[+] исправил ошибку если имя файла ровно 8 символов (вместо нормального расширения писалось "I")
[+] попутно исправил ошибку в SAVEHOB (при сохранении BASIC файлов, не верно указывался адрес, в результате чего терялся автозапуск BASIC-файлов, взял идею как было сделано в SAVETRD)


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

CityAceE
09.11.2007, 15:17
Не получается собрать SjASMPlus под Linux. Кто-нибудь может помочь?

boo_boo
09.11.2007, 16:15
Не получается собрать SjASMPlus под Linux. Кто-нибудь может помочь? если ругается на dlopen и прочие dl* при линковке, раскомментируй в makefile строчку:

LDFLAGS="-ldl"

sq/skrju
16.11.2007, 19:32
люди, подскажите, кто знает, что надо сделать, чтобы sjasm после компиляции не сохранял .out файлы? (нахрен они вообще нужны, абсолютно бесполезная фича имхо). или чтобы сохранял их в определённую папку (сразу в recycled) ;)

nyuk
16.11.2007, 20:05
батник напиши

sq/skrju
16.11.2007, 22:33
я не батником компилю, а из редактора. батником неудобно.

nyuk
18.11.2007, 02:57
Я из редактора запускаю батник.
А так-то sjasmplus поддерживает LUA-скрипты, можно ими наверное...

Aprisobal
18.11.2007, 15:33
Во время компиляции не удастся удалить *.out файлы, т.к. они заняты SjASMPlus.
В следующей версии добавлю опцию, чтобы без директивы OUTPUT компилятор не создавал *.out файл.

sq/skrju
18.11.2007, 17:09
огромное спасибо, апри! очень ждём.

breeze
18.11.2007, 21:11
В следующей версии ...

Кстати, я уже скачал сорцы последней версии, и внёс туда изменения (выслать?), и когда же мы увидим новый билд ? :eek:

Totem
18.12.2007, 15:32
вот бы сюда его прикрутить
реально удобная штука
http://www.radasm.com/

Q-Master
28.01.2008, 16:17
Собрал версию SjASM для AmigaOS3/Morphos
Взять можно тут: http://amirus.org.ru/files/sjasmplus_1.07rc5.lha

breeze
02.02.2008, 22:54
Гм o_O оказывается sjasmplus не знает инструкции INF:


error: Unrecognized instruction: inf

странно, что дебаггер в Unreal показывет это как


#ED #70 in (С)

STS 7.0 показывает как:


#ED #70 inf

кому верить ?

или это опять извращения AlCo c аласмом ? да и сталкером заодно ?

Vitamin
02.02.2008, 23:16
или это опять извращения AlCo c аласмом ? да и сталкером заодно ?
AFAIK, INF является исторически сложившейся мнемоникой это операции.

breeze
02.02.2008, 23:21
AFAIK, INF является исторически сложившейся мнемоникой это операции.

ога :o значит запишем в баги sjasmplus !!! :mad::mad::mad:

Да и Unreal заодно тоже :dizzy_mad_old:

Vitamin
02.02.2008, 23:28
Есть еще одна подобная команда-
ED 71 out (c),0

можешь посмотреть как ее принимают (и принимают ли вообще) разные ассемблеры

psb
04.02.2008, 11:42
Есть еще одна подобная команда-
ED 71 out (c),0
а вот 0 ли там - это большой вопрос;) сомневаюсь, что эта команда была документирована в таком виде..

GriV
06.02.2008, 19:43
GENS её видит как OUT (C),(HL)
насчёт INF не помню но вроде так же IN (C),(HL)

Vitamin
06.02.2008, 20:26
OUT (C),(HL)
А с какого боку тут взялся (HL) ?????????

GriV
07.02.2008, 08:25
Ну по логике - там же есть три бита которые отвечают за трансляцию регистров, для восьмибитовых там идут 000b - b, 001b - c,и так далее для d,e,h,l,(hl),a
вот тот самый out (c),0 по идее должен выглядеть как out (c),(hl)
Только видимо МП как то особо в этом случае транслирует команду, получая всегда из (hl) 0.

crushers[4ePT]
17.02.2008, 03:00
Ткните носом плз что не так... Мозги кипят уже.. SjAsm несохраняет ни .sna ни savebin(более предпочтительно):

DEVICE ZXSPECTRUM128

org 32768
begin jr $


ld l,a: add a,a: add a,a: add a,l
add a,low lvl_tab
ld l,a
adc a,high lvl_tab
sub l: ld h,a : ld (copy_0+1),sp: ld sp,hl
ld hl,#f859: pop bc
exx
pop hl: ld bc,#7ffd
pop de: ld d,#10
copy_0 ld sp,#3131
copy out (C),e: ld a,(hl): dec hl: out (c),d
exx
ld (hl),a: cpd
exx
jp pe,copy
exx
ret

lvl_tab
dw #2395,(#bfff+#2395): db #11
dw #20db,(#bfff+#20db): db #13
dw #1ee4,(#e0da+#1ee4): db #13
dw #20f2,(#bfff+#20f2): db #14
dw #16b4,(#bfff+#16b4): db #16
dw #0f32,(#e394+#0f32): db #11
dw #1f68,(#e0f1+#1f68): db #14
dw #1959,(#d6b3+#1f68): db #16
;2bytes(lenght),2bytes(lvl adress in ram),1byte(ram)

SAVESNA "game.sna",begin
;savebin "check.C",#8000,#0100

ниччо нипанимаю! :v2_mad:

psndcj
17.02.2008, 08:19
по умолчанию сиджасм работает в режиме, когда в начале строки должна быть только метка - если же написать команду или директиву выдается ошибка. нужно либо компилировать с ключом (не вникал с каким =) ), либо просто ставить пробелы перед командами.

в данном случае ошибка в том что SAVESNA стоит в начале строки - поставь пробел и все заработает...

кстати - dw #1f68,(#e0f1+#1f68): db #14 - эта строка выдает ошибку из-за переполнения.

вот рабочий пример (http://slil.ru/25482817)

crushers[4ePT]
17.02.2008, 11:21
Спасибо! :v2_thumb: А я думал и что это он "save.sna" меткой всё обзывает! :v2_lol:
Может кто-нибудь ещё посоветует www с хорошим калькулятором?(hex/dec/bin) :v2_wink2:

Aprisobal
18.03.2008, 09:46
Вчера помог одному иностранцу, не спектрумисту, насчет разработки программы в обычном режиме кросс-компилятора двумя макросами для SjASMPlus:


MACRO PADORG addr
; add padding
IF $ < addr
BLOCK addr-$
ENDIF
ORG addr
ENDM

MACRO PADORG2 addr
; add padding + display warning
IF $ > addr
; no padding
DISPLAY /L, "Warning! PADORG failed! ", $, " is more than ", addr
ELSE
; add padding
BLOCK addr-$
ENDIF
ORG addr
ENDM

Чтобы не пропадало, в общем.

breeze
18.03.2008, 11:57
Вчера помог одному иностранцу...

Ну эт... :rolleyes: круто конечно, но ты когда билд новый родишь ? :eek:

psndcj
18.03.2008, 15:38
присоединяюсь к ожиданию!!! кстати кто-то обещал пофиксить глюк с 48ми снапшотами =) заранее спасибо!

Aprisobal
27.03.2008, 23:39
Пожелание:
сделать опцию, согласно которой псевдоинструкция
ld rr1,rr2
будет собираться в
push rr2
pop rr1 (как сейчас для индексных регистров)
или в
ld rr1.l,rr2.l
ld rr1.h,rr2.h (длиннее и медленнее, зато без стека)Перечитывал тему, увидел это сообщение, задумался над своим предыдущим ответом. Новый ответ: ld rr1,rr2(ld bc,de...) уже есть(и в оригинальном SjASM тоже).

Vitamin
28.03.2008, 10:10
Перечитывал тему, увидел это сообщение, задумался над своим предыдущим ответом. Новый ответ: ld rr1,rr2(ld bc,de...) уже есть(и в оригинальном SjASM тоже).
А чтото вроде:
ld bc,ed (ld b,e:ld c,d) поддерживается? :)

Aprisobal
29.03.2008, 15:36
Новая версия - SjASMPlus 1.07 RC6. Содержит множество багфиксов. Качать с сайта: [...вышла новая версия...]

GriV
30.03.2008, 15:31
Модули http://zx.pk.ru/showthread.php?t=3925&highlight=%E1%E8%E1%EB%E8%EE%F2%E5%EA%E8+%EC%EE%E4 %F3%EB%E8 поддержать не планируется?

Aprisobal
30.03.2008, 22:34
Модули http://zx.pk.ru/showthread.php?t=3925&highlight=%E1%E8%E1%EB%E8%EE%F2%E5%EA%E8+%EC%EE%E4 %F3%EB%E8 поддержать не планируется?Нет, да и в этой теме не нашел ничего конкретного.

Для меня был бы интереснее какой-нибудь редактор кода, с функцией аля "Code Insight", который бы анализировал исходный код на наличие специальных комментариев как в Javadoc/phpDoc и какие регистры использует конкрентая процедура(назовем так). Например:


/**
* Вывод спрайта 2хX.
*
* @in a Количество строк
* @in bc Адрес спрайта
* @in h Y-координата
* @in l Х-координата
* @out a Не вышел ли спрайт за границу экрана?
*/
PrintSprite2xX:
;... код

breeze
31.03.2008, 00:56
Новая версия - SjASMPlus 1.07 RC6. Содержит множество багфиксов. Качать с сайта: http://sjasmplus.sourceforge.net или с первого поста этой темы.

гм...



Saturday, August 18, 2007, 10:36:59 PM:

A> Спасибо!, что сообщил,исправил и доработал - вышли, пожалуйста,
A> файлы и я тогда выпущу новую версию и допишу в Credits твой вклад.


совсем так случайно... :rolleyes:

ZEK
31.03.2008, 01:30
функцией аля "Code Insight", который бы анализировал исходный код на наличие специальных комментариев как в Javadoc/phpDoc и какие регистры использует конкрентая процедура(назовем так). Например:
Для VS приблуду напиши :)

Aprisobal
31.03.2008, 01:39
совсем так случайно... :rolleyes:Что-то не так?

breeze
31.03.2008, 02:26
Что-то не так?



C:\Temp>sjasmplus.exe
SjASMPlus Z80/R800 Cross-Assembler v1.07 RC6 (build 29-03-2008)
based on code of SjASM by Sjoerd Mastijn / http://www.xl2s.tk /
Copyright 2004-2008 by Aprisobal / http://sjasmplus.sf.net / [email protected] /

Usage:
sjasmplus [options] sourcefile(s)

Option flags as follows:
--help Help information (you see it)
-i<path> or -I<path> or --inc=<path>
Include path
--lst=<filename> Save listing to <filename>
--lstlab Enable label table in listing
--sym=<filename> Save symbols list to <filename>
--exp=<filename> Save exports to <filename> (see EXPORT pseudo-op)
--raw=<filename> Save all output to <filename> ignoring OUTPUT pseudo-ops
Note: use OUTPUT, LUA/ENDLUA and other pseudo-ops to control output
Logging:
--nologo Do not show startup message
--msg=error Show only error messages
--msg=all Show all messages (by default)
--fullpath Show full path to error file
Other:
--reversepop Enable reverse POP order (as in base SjASM version)
--dirbol Enable processing directives from the beginning of line
--dos866 Encode from Windows codepage to DOS 866 (Cyrillic)

C:\Temp>
хм....



D:\My ZX\Projects\16colors>sjasmplus.exe main.asm
SjASMPlus Z80/R800 Cross-Assembler v1.07 RC6 (build 29-03-2008)
Pass 1 complete (0 errors)
Pass 2 complete (0 errors)
Pass 3 complete
Errors: 0, warnings: 0, compiled: 140 lines, work time: 0.047 seconds
D:\My ZX\Projects\16colors>
может я конечно не туда куда-то смотрю ? :cool:

Aprisobal
31.03.2008, 02:32
C:\Temp>sjasmplus.exe
SjASMPlus Z80/R800 Cross-Assembler v1.07 RC6 (build 29-03-2008)
based on code of SjASM by Sjoerd Mastijn / http://www.xl2s.tk /
Copyright 2004-2008 by Aprisobal / http://sjasmplus.sf.net / [email protected] /

Usage:
sjasmplus [options] sourcefile(s)

Option flags as follows:
--help Help information (you see it)
-i<path> or -I<path> or --inc=<path>
Include path
--lst=<filename> Save listing to <filename>
--lstlab Enable label table in listing
--sym=<filename> Save symbols list to <filename>
--exp=<filename> Save exports to <filename> (see EXPORT pseudo-op)
--raw=<filename> Save all output to <filename> ignoring OUTPUT pseudo-ops
Note: use OUTPUT, LUA/ENDLUA and other pseudo-ops to control output
Logging:
--nologo Do not show startup message
--msg=error Show only error messages
--msg=all Show all messages (by default)
--fullpath Show full path to error file
Other:
--reversepop Enable reverse POP order (as in base SjASM version)
--dirbol Enable processing directives from the beginning of line
--dos866 Encode from Windows codepage to DOS 866 (Cyrillic)

C:\Temp>
хм....



D:\My ZX\Projects\16colors>sjasmplus.exe main.asm
SjASMPlus Z80/R800 Cross-Assembler v1.07 RC6 (build 29-03-2008)
Pass 1 complete (0 errors)
Pass 2 complete (0 errors)
Pass 3 complete
Errors: 0, warnings: 0, compiled: 140 lines, work time: 0.047 seconds
D:\My ZX\Projects\16colors>
может я конечно не туда куда-то смотрю ? :cool:SjASMPlus до тебя фиксили в горазде больших объемах много людей. По-твоему на выходе нужно тащить шторы из реквизитов и контактной информации о предыдущих багфиксерах, которые помогали в разработке SjASMPlus? :)

breeze
31.03.2008, 09:20
SjASMPlus до тебя фиксили в горазде больших объемах много людей. По-твоему на выходе нужно тащить шторы из реквизитов и контактной информации о предыдущих багфиксерах, которые помогали в разработке SjASMPlus? :)

я задал относительно простой вопрос: ты обещал (причём заметь сам! :cool:), в списках я не нашел, конкретно где есть список этих людей, кроме Kurles^HS^CPU на первой странице ? :rolleyes:

Aprisobal
31.03.2008, 10:35
я задал относительно простой вопрос: ты обещал (причём заметь сам! :cool:), в списках я не нашел, конкретно где есть список этих людей, кроме Kurles^HS^CPU на первой странице ? :rolleyes:См. файл "documentation/documentation.htm"

Aprisobal
02.04.2008, 13:16
Новая версия SjASMPlus 1.07 RC7. Исправлен ряд недочетов, добавлены новые директивы IFUSED/IFNUSED(по аналогии с ZXASM), с помощью которых можно создать библиотеку полезных подпрограмм, каждая из которых подключается только тогда, когда используется где-нибудь в коде программы.
Качать: http://sjasmplus.sourceforge.net

crushers[4ePT]
08.04.2008, 02:18
Спасибо, это действительно нужные команды в хозяйстве! :v2_wink2:

jim
25.04.2008, 22:08
не ассемблит после ccz80 (http://perso.orange.es/emilio.guerrerog/ccz80/ccz80.html).
похоже что то насчет переменных описанных после применения.
это проблема похоже вообще sjasm.

pasmo кстати может


а вообще отличный ассемблер. хватит его улучшать :)

rasmer
26.04.2008, 00:00
+1
я кстати остановил свой выбор на одной достаточно неновой версии...
очень нравится - ещё без всяких указателей типа памяти... очень долго мучился чтобы выходной бинарник занимал ровно 16384 - но таки добился...
http://zx.pk.ru/showthread.php?t=7554 - вот тута вот всё оно лежит вместе с исходом и эмулем настроенным... :)
сорри за оффтоп....

Aprisobal
26.04.2008, 22:03
Скоро появится новая директива SAVETAP(сохранение в tap файлы), которая, правда, кроме как для preproduction development целей не сойдет из-за невозможности изменения загрузчика кодов. Зато в ней будет поддержка систем вплоть до 1024кб.


не ассемблит после ccz80 (http://perso.orange.es/emilio.guerrerog/ccz80/ccz80.html).
похоже что то насчет переменных описанных после применения.
это проблема похоже вообще sjasm.

pasmo кстати может


а вообще отличный ассемблер. хватит его улучшать :)Да, знаю, сам пробовал. Но ccz80 генерирует такой исходник, который и на ни одном спектрум-нативном ассемблере не пройдет.
Не стоит на этом заморачиваться, тем более, что автор обещал сделать ccz80 встроенный компилятор ассемблера.

vicktech
01.08.2008, 18:47
Думаю, Апри не собирался задействовать п5, а лишь облачил модификацию программы хоть в какие-то рамки лицензирования ПО.


Подскажите пожалуста как создать свой проект на коммерческой основе.

Aprisobal
11.08.2008, 15:22
Подскажите пожалуста как создать свой проект на коммерческой основе.Не понял вопроса.

breeze
11.08.2008, 18:38
как сделать чтоб при SAVEHOB сохранялся код всей программы без указывания фиксированного размера ? (интуитивно пробовал вместо длины блока ставить разницу меток например END-START ???)

гм... странно, а там разве не так же как в SAVETRD ?
как например в монолоадере ?

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

Если не работает, значит глюк, надо править!




;Creater mono loader
;nikphe^ANY 2oo1
;remixed for SjASMPlus by Aprisobal 2006

DEVICE ZXSPECTRUM128

MODULE MonoLoader
ORG 16384 ;чтобы не забивала память, если захотите использовать прямо в программе
DISP 23867

Basic DW #100,EndBasic-Begin
Begin DW #30FD,#E,#B300,#5F,#F93A,#30C0,#E,#5300,#5D,#EA3A

DI

;очистка экрана
XOR A
OUT (-2),A
LD HL,#5AFF
LD (HL),A
OR (HL)
DEC HL
JR Z,$-3

LD HL,#C000-1 ;адрес загрузки
LD B,4 ;количество секторов
CALL Load

JP #C000-1 ;старт вашей программы

Load LD DE,(#5CF4)
LD C,#05
JP #3D13

DB #D
EndBasic
ENT

EMPTYTRD "Worm255.trd"
SAVETRD "Worm255.trd","worm255.B",16384,EndBasic-Basic

DISPLAY "Monoloader saved!"
ENDMODULE

Worm255
INCBIN "worm255.out"
SAVETRD "worm255.trd","worm255.C",Worm255,$-Worm255
DISPLAY "Worm255 saved!"
DISPLAY "Run worm255.trd in your favourite emulator."

goodboy
11.08.2008, 19:56
гм... странно, а там разве не так же как в SAVETRD ?
как например в монолоадере ?

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

Если не работает, значит глюк, надо править!

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

breeze
11.08.2008, 21:17
спасибо что обнадёжил - всё получилось, видать чуток напутал с синтаксисом. работаю с версией портированной на Амигу.

всегда пожалуйста ;)

Antipod
19.08.2008, 15:05
асм хороший, быстрый, юзаю. Нашел такой косячок:


device zxspectrum128
org 0
main
db "test"
savesna "test.sna", main

на выходе имеем снапшот, с текстом в нулевой странице со смещением 0.

axor
19.08.2008, 15:58
асм хороший, быстрый, юзаю. Нашел такой косячок:


device zxspectrum128
org 0
main
db "test"
savesna "test.sna", main

на выходе имеем снапшот, с текстом в нулевой странице со смещением 0.

ORG 0 и говорит что нужно ложить код в ноль. По-моему, все верно

psb
19.08.2008, 16:28
ORG 0 и говорит что нужно ложить код в ноль.
говорит что именно в 0ю страницу?;)

Antipod
19.08.2008, 16:52
мда, вообще-то можно трактовать двояко. Но, имхо, в режиме zxspectrum128 адреса 0x0000-0x3fff - это ПЗУ, соответственно в снапшот эти данные попадать не должны.

axor
19.08.2008, 17:14
мда, вообще-то можно трактовать двояко. Но, имхо, в режиме zxspectrum128 адреса 0x0000-0x3fff - это ПЗУ, соответственно в снапшот эти данные попадать не должны.

В таком случае, в любом режиме там есть ПЗУ. Компилятор он на то и компилятор, и компилит он туда, куда скажут. А как иначе можно было бы создавать всякие прошивки для Спектрума? А в снапшоте, на сколько я понимаю, содержимого ПЗУ быть не должно (хотя могу ошибаться).

psb
20.08.2008, 07:45
А в снапшоте, на сколько я понимаю, содержимого ПЗУ быть не должно
так вот про то и речь, а говорят, что попадает в 0 страницу.
конечно, фиг знает, может ли это где помешать...

NovaStorm
20.08.2008, 08:07
ИМХО как раз тот случай, когда не баг, а фича =)

Antipod
20.08.2008, 10:35
конечно, фиг знает, может ли это где помешать...

помешать вряд ли, потому что вроде как компиляция в ПЗУ при желании сохранить только снапшот выглядит странной...:confused:
Но чисто теоретически вот такое:


device zxspectrum128
main
org 0xc000
page 0
db "abcd"
org 0
db "test"
savesna "test.sna", main

дает неожиданный результат ( вместо "abcd" имеем "test" в нулевой банке ).

axor
20.08.2008, 15:15
помешать вряд ли, потому что вроде как компиляция в ПЗУ при желании сохранить только снапшот выглядит странной...:confused:
Но чисто теоретически вот такое:


device zxspectrum128
main
org 0xc000
page 0
db "abcd"
org 0
db "test"
savesna "test.sna", main

дает неожиданный результат ( вместо "abcd" имеем "test" в нулевой банке ).
А после указания страницы компилятор не считает ее текущей?

Antipod
20.08.2008, 15:45
С директивой page все ок. Вот тока "test", который компилится позже, затирает "abcd".
Вот более показательный пример:


device zxspectrum128
main
org 0xc000
page 0
db "abcd"
abcdLen equ $ - 0xc000
page 1 // does not matter
org abcdLen
db "test"
savesna "test.sna", main

Aprisobal
22.08.2008, 17:44
В компиляторе с 0х0000 по 0x3FFF находится по умолчанию 0-ая страница. Или нужно было там разместить дамп ПЗУ? Не вижу смысла, ведь режим ZXSPECTRUM128 и прочие созданы только для упрощения разработки программ для спектрума. Компилятор не эмулирует спектрум ;)

Страницу с 0х0000 по 0x3FFF можно изменить следующим образом:
SLOT 0
PAGE страница
SLOT 3 ; по умолчанию - пространство с 0xC000 по 0xFFFF.

В снапшот формата SNA, ПЗУ сохранить нельзя.

Antipod
22.08.2008, 18:20
Теперь понятно зачем это. Руль!:)

Aprisobal
28.08.2008, 22:41
Скоро появится новая директива SAVETAP(сохранение в tap файлы), которая, правда, кроме как для preproduction development целей не сойдет из-за невозможности изменения загрузчика кодов. Зато в ней будет поддержка систем вплоть до 1024кб.Думаю, что все-таки надо выпустить версию с SAVETAP. В эмуляторах TAP-файлы моментально загружаются, ограничения по размеру памяти почти нет, можно работать с TR-DOS(или нет?).

transman
29.08.2008, 12:43
SAVETAP нужен однозначно. Сэкономит кучу времени.
Только вот фиксированного загрузчика кодов не надо. Иначе смысл какой делать?
Тогда уж и на savetrd такой-же загрузчик прикручивать надо

psb
29.08.2008, 16:15
идею поддерживаю, только надо бы иметь возможность записывать тап без заголовка