User Tag List

Страница 10 из 70 ПерваяПервая ... 67891011121314 ... ПоследняяПоследняя
Показано с 91 по 100 из 699

Тема: SjASMPlus от z00m

  1. #91

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    - - - Добавлено - - -

    Цитата Сообщение от Sayman Посмотреть сообщение
    Кроме того, когда в исходнике будет сотня всяких ифов, то читаемость такого исходника падает.
    какие ифы?

    все ифы в библиотеке
    с cорцe только call procedure
    а в инклуженной библиотеке
    при использовании procedure
    создается метка procedure и комплилится код

    - - - Добавлено - - -

    Цитата Сообщение от Sayman Посмотреть сообщение
    включая прочие зависимости. всё что не нужно, останется в файле, а не в собираемом бинаре.
    ну если зависимости между 2+ библеотеками
    то тогда придется крепить к сорцу каждую библиотеку самому
    или же будет как раз куча костылей
    по самоинклуживанию
    что не вариант

    - - - Добавлено - - -

    Цитата Сообщение от Sayman Посмотреть сообщение
    твой любимый Core I.
    нету у меня такого
    терпеть ненавижу єту линейку процов

    - - - Добавлено - - -

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

    - - - Добавлено - - -

    а щас можно ложить сджасм в комплекте с сорцом
    и все собирается из коробки в 1 клик

    - - - Добавлено - - -

    Цитата Сообщение от Sayman Посмотреть сообщение
    и ничуть не тупит при компиляции тяжёлых файлов. а ты переживаешь, что ужасм поставит на колени твой любимый Core I.
    ну не совсем так
    просто как по мне
    впиливание новой версии lua
    намного важней єтих сишных приблуд
    которые итак как по мне легко заменяются тем что есть
    Последний раз редактировалось NEO SPECTRUMAN; 04.06.2019 в 19:48.

  2. #91
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #92

    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,280
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    нету у меня такого
    терпеть ненавижу єту линейку процов
    ну значит amd fx/amd ryzen, не суть важно.


    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    все ифы в библиотеке
    в какой библиотеке? то, о чём ты говоришь не библиотека, а просто исходник, который ты инклудишь. опять таки - пачка ифов портит читаемость.
    я твой посыл понял, тебе это удобно, а мне было бы удобно иметь объектный файл. никаких ифов и прочей фигни. и исходники чистые, особенно если эта библиотека собирается не из одного мегаисходника, а их серии мелких. это ещё один недостаток твоего метода - всё нужно засовывать в один большой файл или делать с десяток инклудов.
    хочется примеров? да пожалуйста. я вот под трдос не делаю что-либо, а кодю под спринтера. всякие fopen, fread, fwrite, всякие page_alloc, функции печати аля printf (да да, есть и такая, как для си, только писанная на асме без поддержки float). порядка 40 системных вызовов завернул бы в одну либу. а сейчас это всё в одном мегаисходнике. аж воротит туда заглядывать. вот пилю щас новый fdisk и такая либа была бы очень кстати.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  4. #93

    Регистрация
    24.07.2008
    Адрес
    г. Курган
    Сообщений
    2,062
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    и чем это отличается от ifused?
    В библиотеке может быть 10 процедур, при вызове одной только она и возьмется, в этом и есть отличие

    Скрытый текст

    Profi 5.06 1024K 12Mhz (кварц на 24), палитра, COM-порт, часы, hdd, covox, программатор
    ZX-Spectrum +3, ZX-Spectrum +2B, ZX-Spectrum +2, ZX Spectrum 48, ZX Spectrum 48+
    ZX Evolution Rev B.
    Color 48 + Beta Disk Interface +FDD+YM2149F
    Орель-08БК
    Pentagon-48 (недоссобранный кем-то)
    Pentagon-128 (полуубитый)
    Кворум-128 (в ремонте)
    Магик-05 (в ремонте)
    Robotron 1715
    Корвет ПК8020 и ПК8010
    Amstrad CPC 464
    Amstrad CPC 6128
    [свернуть]

  5. #94

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    в какой библиотеке? то, о чём ты говоришь не библиотека, а просто исходник, который ты инклудишь. опять таки - пачка ифов портит читаемость.
    как они портят читаемость?

    они несколко портят читаемость лог-а\готового листинга

    в основном исходнике же
    только только call
    и 1 инклуд 1 библиотеки


    Цитата Сообщение от Sayman Посмотреть сообщение
    а кодю под спринтера. всякие fopen
    а как процедуре должны передаваться параметры?

    - - - Добавлено - - -

    Цитата Сообщение от Vadim Посмотреть сообщение
    В библиотеке может быть 10 процедур, при вызове одной только она и возьмется, в этом и есть отличие
    та глянь пример
    при вызове одно процедуры
    ТОЛЬКО ОДНА ПРОЦЕДУРА И СОБЕРЕТСЯ ЖЕ!!!!!!!!1


    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    45 8012 ifused dup1 46 8012~ dup1 47 8012~ dup 5 48 8012~ ld c,c 49 8012~ ret 50 8012~ edup 51 8012 endif
    вот те цитата
    dup1 не вызывался
    и не попал в сорец



    вот с параметрами для процедуры
    могут быть проблемы
    это я не учел

    если вы их хотите передавать в виде
    procedure 444,444,44
    это нужно городить макросы с костылями
    и тут тогда я не совсем прав

  6. #95

    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,280
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    как они портят читаемость?
    тем, что все библиотечные процедуры и функции сидят в одном мегаисходнике, который потом инклудится. если дробить на мелкие файлы, то в основном исходнике уже не 1 инклуд, а пачка, что тоже не удобно.
    а как процедуре должны передаваться параметры?
    не понял вопроса. какой процедуре? в библиотеке? точно так же как и всегда - хоть через регистры, хоть через буфера, хоть через стэк. как сам напишешь.

    макрос это макрос. у ужасма макросы параметрические, как и у всех асм компиляторов, даже у старого М80.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  7. #96

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    тем, что все библиотечные процедуры и функции сидят в одном мегаисходнике, который потом инклудится. если дробить на мелкие файлы, то в основном исходнике уже не 1 инклуд, а пачка, что тоже не удобно.
    а что тогда из себя представляет библиотека в твоем понимании?

    - - - Добавлено - - -

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

    ld a,parameter
    call procedure

    ?

    - - - Добавлено - - -

    а так ты ужо столько настрочил

    мог бы 100 раз привести строчек 10 псевдокода
    чтоб донести идею
    Последний раз редактировалось NEO SPECTRUMAN; 04.06.2019 в 20:16.

  8. #97

    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,280
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    или параметры хочешь ложить при помощи обычных инструкций перед вызовом

    ld a,parameter
    call procedure

    ?
    именно так. иначе это уже си какой то. хотя если будет дериктива procedure для обозначения процедуры/функции, то не откажусь.


    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    а что тогда из себя представляет библиотека в твоем понимании?
    может я ранее как-то не верно сформулировал, попробую сейчас пояснить, "перефразируюсь"...
    вот смотри - есть часто прикручиваемые к разным прогам функции и процедуры. открыть файл, прочитать файл, записать файл, запрос памяти у доса, вернуть досу память, печать текста (простая печать и более сложная функция printf выдернутая из си и адаптированная под свои нужды), мат.функции, вроде 8/16/32 бита умножение и деление и другие. лично мне содержать в одном большом файле это всё не удобно. да. 1 инклуд, я знаю, но в случае правки кода в этой "библиотеке", перемещаться становится там всё сложнее. плюс гора этих ифов. я бы разбил это всё на мелкие исходнички, которые потом скомпилировал бы в одну статичную либу/объектный файл/rel файл. при сборке основного кода в качестве доп.аргумента указал бы имя этой либы. каждая вызываемая процедура/функция подключалась бы к процессу компиляции. при этом, к примеру, на си когда компилишь, то порядок перечисления исходников. объектов и библиотек будет соблюдаться и при линковке кода из этих объектов и библиотек. но у нас ужасм, значит можно было бы добавить директиву, по которой можно было бы указать место размещения кода из библиотеки. может даже указать внутри основного кода имя этой библиотеки. это было бы равносильно инклуду с той разницей, что нет нужны ковыряться в большом мегаисходнике-библиотеке или инклудить с десяток мелких.
    надеюсь так понятнее будет, если не запутал...
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  9. #98

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    как вариант

    сорец
    ld a,66
    call procedure1
    call procedure3
    call procedure1

    include "libs.asm"



    libs.asm
    display "version"
    include "libs\a1.asm"
    include "libs\a2.asm"
    include "libs\a3.asm"
    include "libs\a4.asm"
    include "libs\a5.asm"

    a1.asm
    ifused procedure1
    procedure1
    rra
    ret
    endif


    либасм и папку подкидывать в каждый нужный сорец


    include "libs.asm"
    можно вообще наверно сослаться на
    include "с:\фигзнаетчточтониукогон т\libs.asm"
    и использовать одну библиотеку для всего
    но после єтого тебя будут вспоминать...

    - - - Добавлено - - -

    Цитата Сообщение от Sayman Посмотреть сообщение
    надеюсь так понятнее будет, если не запутал...
    нутак

    а как происходит вызов функций из сорца?
    сомневаюсь можно ли их чем то заменить

    - - - Добавлено - - -

    Цитата Сообщение от Sayman Посмотреть сообщение
    которые потом скомпилировал бы в одну статичную либу/объектный файл/rel файл. при сборке основного кода в качестве доп.аргумента указал бы имя этой либы. каждая вызываемая процедура/функция подключалась бы к процессу компиляции.
    но а потом получить читаемый сорец будет проще из дизасма
    чем из твоего исходника
    пушо будет упоминание левых процедур
    а самих процедур не будет

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

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

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

    если передавать параметры через стек
    ты уже не можешь быстро запушить все регистры
    в начале процедуры
    тебе нужно будет достать и куда то сохранить параметры
    а потом только пушить

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


    тут не си
    регистры общие для всего


    или же на этих си костылях просрется вся скорость
    для которой и нужен асм

    как эту всю байду оптимизировать?


    а потом дизасмишь игры
    а там часто такое...
    call l1
    l1 jp l4
    l4 jp l7
    l7 ld a,b
    jp l44
    l44 ret
    Последний раз редактировалось NEO SPECTRUMAN; 04.06.2019 в 21:21.

  10. #99

    Регистрация
    10.05.2019
    Адрес
    Prague, Czech Republic
    Сообщений
    229
    Спасибо Благодарностей отдано 
    51
    Спасибо Благодарностей получено 
    103
    Поблагодарили
    77 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    I will try to be very brief (as I'm busy and my "brief" posts tend to be 3 pages long, while "non-brief" would aspire for a book chapter).

    sjasmplus does assemble directly into machine code. There is no support for object file currently. If you want support for some specific object file, create issue on github with documentation about the object file format... but it better should be mostly as-machine-code with just some meta data added on top of it, otherwise it would need another assembler inside the assembler = I don't think somebody will find time to do that.

    For my personal projects (and for all SW I use) I strongly prefer sources, "libraries" like libSomething-dev.deb are convenient to install (I can turn fresh linux installation into developer's machine in ~5 minutes, having all compilers and stuff installed), but sooner or later one always needs also sources to fix or modify something, or just verify how the author did implement it. I mean, I don't build from sources everything I use, but I always make sure I can obtain source of everything I use (and if the source is not available, I usually go great lengths to find alternative or write my own).

    With assembly programming it's even worse, almost always I need to slightly adjust particular code per-project, there's rarely something I just copy/paste without any modification, so having "libraries" in sources works nicely for me (in assembly especially).

    Aside my personal preferences, there are these tools available:

    ** Way of "include source":

    `INCLUDE` to include source files, you can set include paths on command line, if you want to keep all utility sources at one place outside of project (by using quotes/angle-brackets around file name you can specify if the sjasmplus should search first system includes, or current source directory). (and if you will use the "IFUSED" in the library source, only the used subroutines will emit machine code)
    (this also makes it easier to relocate Z80 machine code, because Z80 CPU doesn't provide good support for "position independent code", so relocating binary without source is usually big pain).

    These source lines are of course visible in listing file, and in labels table.

    About listing file: in upcoming sjasmplus (v1.13.2+) there will be new option to suppress listing file temporarily, so you can use that to make library "invisible" in listing.

    About labels table: the sjasmplus does support "MODULES" (for a long time), so you can use particular module namespace for your library to avoid accidental collisions with labels used by your project code. These will be still visible in listing of all labels (you can delete module labels quickly in any text editor by search+replace, if that would become a real problem)

    ** Way of "include binaries":

    You can also create "export" file - in library source use `EXPORT function_name` to put the symbol into export file, then at command line while assembling use `--exp=export_file_name.asm` to store these symbols in small ASM source file. You can then include this export list in project source, and use symbols to call the library code. And you can use INCBIN to include the library code itself or load it separately from code (listing and labels table will show only the exported symbols).

    ------

    I have very difficult time to imagine real world ZX Spectrum project written in ASM which would be too large to manage in the "source" way above, so I never thought too much about the "binary" way. From a quick glance it seems viable too (although I would expect it to be more cumbersome and not as powerful as tailoring sources to specific needs of particular project).

    If you have on mind some large project, where maintaining sources would be too difficult, you can also check other projects like z88dk compiler suite (contains two C compilers for Z80, assembler and linker).

    I personally have no plans to extend sjasmplus so much, that it would compete with these (and I'm not aware of anyone else willing to contribute toward this goal at this moment).

    Actually the small-size and self-containment of sjasmplus is something what I **like**. If you want just to try some small Z80 assembly on ZX Spectrum, like some short piece of code from book, sjasmplus should be simple to download, and use even by somebody new to the assembly programming (and if it is not, let me know what is problematic, so we can improve it).

    Yet I believe it is very powerful tool (already in current version, and I have some plans how to extend it even a bit more), with most of the bugs fixed and quality assured, I have no hesitation to recommend current v1.13.1 even for "production-quality" large projects.

    But if you are used to other tools, you should invest some time into reading through documentation and checking out the accompanying "examples" and "tests" folders, to get more familiar with sjasmplus options and features.
    Последний раз редактировалось Ped7g; 04.06.2019 в 22:14. Причина: adding direct urls to docs/tests/examples

  11. #100

    Регистрация
    10.05.2019
    Адрес
    Prague, Czech Republic
    Сообщений
    229
    Спасибо Благодарностей отдано 
    51
    Спасибо Благодарностей получено 
    103
    Поблагодарили
    77 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    а потом дизасмишь игры
    а там часто такое...
    call l1
    l1 jp l4
    l4 jp l7
    l7 ld a,b
    jp l44
    l44 ret
    You know, so you decide to optimize it, replace `call l1` with `ld a,b` and suddenly the game stops to work correctly, because the new timing will uncover some bug somewhere else which didn't show up with the slower code before... :P ... I know you all, you will not trick me so easily ... this time... (/joke)

Страница 10 из 70 ПерваяПервая ... 67891011121314 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 1 , гостей: 1)

  1. Ped7g

Похожие темы

  1. SjASMPlus Z80 кросс ассемблер
    от Aprisobal в разделе Программирование
    Ответов: 1663
    Последнее: 19.06.2021, 01:36
  2. Исходники TR-DOS для SjASMPlus
    от Keeper в разделе Программирование
    Ответов: 20
    Последнее: 11.02.2011, 11:57
  3. Запуск STS из .sna, сгенерированного sjasmplus.
    от siril в разделе Программирование
    Ответов: 7
    Последнее: 11.10.2010, 21:33
  4. Breakpoints в связке Sjasmplus+UnrealSpeccy
    от Kurles в разделе Программирование
    Ответов: 19
    Последнее: 26.01.2009, 12:36
  5. Disturbed COverMAnia ( music disk with z00m music collection)
    от kyv в разделе Музыка
    Ответов: 10
    Последнее: 27.03.2008, 10:01

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •