User Tag List

Страница 61 из 63 ПерваяПервая ... 57585960616263 ПоследняяПоследняя
Показано с 601 по 610 из 699

Тема: SjASMPlus от z00m

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    11.02.2005
    Адрес
    【RB】
    Сообщений
    3,884
    Спасибо Благодарностей отдано 
    134
    Спасибо Благодарностей получено 
    135
    Поблагодарили
    83 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    Похоже он просто отказывается компилировать в моей Windows10.
    Ну куда уж проще, запусти командную строку с путём где у тебя лежит твой исходник и прям там запусти свой батник или прямо в ней напиши «sjasmplus "имя твоего исходника.asm"».
    Если есть какие-то проблемы с запуском, нехваткой библиотек итд, сразу увидишь. А так можно гадать до второго пришествия.

    Этот пользователь поблагодарил breeze за это полезное сообщение:

    metamorpho(17.06.2025)

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

  3. #2

    Регистрация
    24.08.2012
    Адрес
    г. Волжский
    Сообщений
    467
    Спасибо Благодарностей отдано 
    797
    Спасибо Благодарностей получено 
    277
    Поблагодарили
    106 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от breeze Посмотреть сообщение
    Ну куда уж проще, запусти командную строку с путём где у тебя лежит твой исходник и прям там запусти свой батник или прямо в ней напиши «sjasmplus "имя твоего исходника.asm"».
    Если есть какие-то проблемы с запуском, нехваткой библиотек итд, сразу увидишь. А так можно гадать до второго пришествия.
    Именно так я и делаю
    Видно что появляется окно и тут же исчезает, поэтому узнать что там не так не получается.

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

    Меня вот это настораживает:

    Цитата из описания к SjASMPlus: "SjASMPlus — это кросс-компилятор языка ассемблера Z80. Он доступен для систем Win32"

    Обзор от ИИ: "Да, файл Win32 (32-разрядный) может работать в 64-разрядной версии Windows, но не всегда. 64-разрядные версии Windows включают среду совместимости под названием WoW64, которая позволяет запускать 32-разрядные приложения. Однако, есть некоторые ограничения и случаи, когда 32-разрядные приложения могут не работать или работать некорректно на 64-разрядной системе. "

    Может ли так быть что у кого-то SjASMPlus работает в Windows10 а у кого-то нет ?

  4. #3

    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,697
    Спасибо Благодарностей отдано 
    305
    Спасибо Благодарностей получено 
    226
    Поблагодарили
    160 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    Именно так я и делаю
    Видно что появляется окно и тут же исчезает, поэтому узнать что там не так не получается.
    Пробуем разобраться.

    1. создаём новую папочку
    2. кладём в папочку sjasm (взятый здесь https://github.com/z00m128/sjasmplus...es/tag/v1.21.0 , нужен только sjasmplus.exe файл)
    3. и файлик с исходником, который хотим компилить, например, mygame.asm
    4. запускаем командную строку (в поиски винды пишем cmd , выскочит диалог выбора, там должно быть cmd.exe)
    5. в появившемся чёрном окне с текстовым режимом переходим в нашу папочку
    - узнать текущее место и рядом находящиеся файлы/папки можно написав команду dir и нажав enter
    - перейти в папку при помощи cd имяпапки (если имя папки содержит пробел, то нужно писать в двойных кавычках)
    - перейти на уровень выше при помощи cd .. (две точки)
    - можно сразу перейти в нужное место, например cd "C:\work\my project"

    6. находясь в нашей папочке даём команду sjasmplus.exe mygame.asm
    7. наблюдаем, что ассемблер выплюнул в окно - там могут быть как сообщение, что всё хорошо, так и ошибки
    Код:
    SjASMPlus Z80 Cross-Assembler v1.21.0 (https://github.com/z00m128/sjasmplus)
    Pass 1 complete (0 errors)
    Pass 2 complete (0 errors)
    Pass 3 complete
    Errors: 0, warnings: 0, compiled: 15 lines, work time: 0.000 seconds
    8. если всё хорошо, рядом с исходником должен появиться скомпилированный файл

    P.S.
    отключить лишний вывод при компиляции можно таким образом
    sjasmplus.exe --msg=war --nologo mygame.asm

    P.P.S.
    пример исходника:

    Код:
    	DEVICE ZXSPECTRUM48
    	
    	org $8000
    start:
    	ld hl, $4000
    	ld b, 0
    loop:
    	ld (hl), l
    	inc hl
    	djnz loop
    
    	jr $
    	
    	SAVESNA "mygame.sna", start
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

    Этот пользователь поблагодарил Bedazzle за это полезное сообщение:

    metamorpho(17.06.2025)

  5. #4

    Регистрация
    20.04.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,875
    Спасибо Благодарностей отдано 
    523
    Спасибо Благодарностей получено 
    252
    Поблагодарили
    226 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Просто DEVICE ZXSPECTRUM48 не должно начинаться в нулевом столбце. А регистр роли не играет. Для чего так сделано - это вопрос к разработчикам SJASMPLUS.
    Последний раз редактировалось andrews; 17.06.2025 в 13:15.

    Этот пользователь поблагодарил andrews за это полезное сообщение:

    metamorpho(17.06.2025)

  6. #5

    Регистрация
    06.05.2010
    Адрес
    Бердск, НСО
    Сообщений
    4,996
    Спасибо Благодарностей отдано 
    1,092
    Спасибо Благодарностей получено 
    1,190
    Поблагодарили
    925 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    потому что с 0 столбца расположена метка.
    Личка заполнена! И чистить я ее не буду! Пользуйтесь адекватными средствами связи! Спасибо.

    Seamos realistas y hagamos lo imposible!

    Ernesto Che Guevara
    Переехал сюда: SteinBlume (ex ATM CP/M Explorer)
    http://era-cg.su

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

    Speccy2010 r2 (Спасибо m.d. & xlat),
    Sinclair ZX Spectrum + (Спасибо stepmotor),
    ZX Evolution rev.C + 5'25 FDD Epson SD-700AA + NedoPC PAL-Coder (Спасибо m.d. & xlat)
    [свернуть]

    Этот пользователь поблагодарил Black Cat / Era CG за это полезное сообщение:

    metamorpho(17.06.2025)

  7. #6

    Регистрация
    06.05.2019
    Адрес
    г. Подольск
    Сообщений
    108
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    18
    Поблагодарили
    13 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Для vscode.
    Установить не сложно, в документации к DeZog есть рекомендации, какие надстройки подходят.

    Актуальные надстройки


    DeZog
    To use DeZog in Visual Studio Code, simply install the "DeZog" extension (maziac.dezog) from the Visual Studio Code Marketplace. Although not required, there are several other helpful extensions available, including:

    ASM Code Lens, which provides syntax highlighting for Z80 assembler, as well as completions, references, jump to label, and renaming functionality.
    Z80 Instruction Set, which displays opcode, affected flags, and a description when hovering over a Z80 instruction.
    Hex Hover Converter, which converts numbers to decimal, hexadecimal, and binary formats when hovering over them.
    ZX SNA File Viewer/ZX NEX File Viewer, which allow viewing of ZX Spectrum snapshot (.sna) and ZX Spectrum Next (.nex) files (search for "snafile" and "nexfile" in the Marketplace).
    ZX81 BASIC to P-File Converter and P-File Viewer, which converts ZX81 P-Files (.p) to ZX81 BASIC (.bas) and vice versa.
    [свернуть]

    В приложении, скрипты, для запуска разных вариантов эмуляторов, с переключением страниц (64 страницы) для ZSim (ZSim Custom Memory), для режима debug. Псевдо-порты переключения страниц, прописаны в скриптах. Нужно только поменять пути к файлу запуска проекта и путь к sjasm.

    Опции самого vscode:


    Editor: Quick Suggestions Delay
    Управляет длительностью задержки (в мс) перед отображением кратких предложений. (1000)

    Editor › Hover: Delay
    Определяет время задержки в миллисекундах перед отображением наведения. (1000)

    Ctrl + Shift + P
    Configure Display Language

    Editor: Auto Closing Comments
    Определяет, должен ли редактор автоматически закрывать комментарии,
    при добавлении пользователем открывающего комментария. (never)

    Autohide
    Определяет, скрыта ли мини-карта автоматически. (Enable)

    Editor: Selection Highlight
    Определяет, должен ли редактор выделять совпадения, аналогичные выбранному фрагменту. (disable)

    Editor: Occurrences Highlight
    Определяет, следует ли выделять вхождения в открытых файлах. (off)

    Editor: Color Decorators
    Определяет, должны ли в редакторе отображаться внутренние декораторы цвета и средство выбора цвета. (disable)
    (если написать текст и набрать позже #NNNNNN, то он прибавляет квадрат к тексту, где можно выбирать палитру)
    [свернуть]


    Для Notepadplus.

    Т.к. у меня исходники и бинарники разложены по разным папкам, стандартный скрипт не может уловить путь откуда запускать скомпилированный файл. Пришлось пойти на хитрость и просто выделять этот путь перед компиляцией и запуском. Пример, SAVESNA "..//BIN//main.sna" - здесь выделяется отрезок ..//BIN. Т.к. Notepadplus используется очень редко, то это не критично.

    Compile-SJAsm


    Код:
      // [Ctrl+F9] Скрипт компиляции проекта
      // Сохраняем все файлы
    //REM/ npp_saveall
    npp_save
      // Сохраняем путь текущего редактируемого файла
    set current = $(FULL_CURRENT_PATH)
      // Переключаемся на основной файл проекта (должен быть открыт в 1-ой вкладке!)
    //REM/ npp_switch $(#1)
      // Получаем полные имена файла меток и основного файла проекта
    set symbol_name = "$(CURRENT_DIRECTORY)/$(SELECTED_TEXT)/$(NAME_PART).sym"
    set project_full_name = "$(FULL_CURRENT_PATH)"
      // возвращаемся на ранее открытую вкладку
    //REM/ npp_switch $(current)
      // компилируем проект
    cd $(project_full_name)
    "$(NPP_DIRECTORY)/../SJAsm/sjasmplus.exe" --fullpath --sym=$(symbol_name) $(project_full_name)
    [свернуть]

    sna-SJAsm-Unreal


    Код:
      // [F9] Скрипт компиляции и запуска проекта
      // Сохраняем все файлы
    //REM/   npp_saveall
    npp_save
      // Сохраняем путь текущего редактируемого файла
    set current = $(FULL_CURRENT_PATH)
      // Переключаемся на основной файл проекта (должен быть открыт в 1-ой вкладке!)
    //REM/    npp_switch $(#1)
      // Получаем необходимые имена файлов
    //REM/    set image_name = "$(CURRENT_DIRECTORY)\$(NAME_PART).trd"
    set image_name = "$(CURRENT_DIRECTORY)/$(SELECTED_TEXT)/$(NAME_PART).sna"
    set image_dir = "$(CURRENT_DIRECTORY)/$(SELECTED_TEXT)/"
    set symbol_name = "$(CURRENT_DIRECTORY)/$(SELECTED_TEXT)/$(NAME_PART).sym"
    set project_full_name = "$(FULL_CURRENT_PATH)"
      // Возвращаемся на ранее открытую вкладку
    //REM/    npp_switch $(current)
      // Компилируем проект
    cd $(project_full_name)
    "$(NPP_DIRECTORY)/../SJAsm/sjasmplus.exe" --fullpath --sym=$(symbol_name) $(project_full_name) 
      // запускаем откомпилированный проект
    cd $(image_dir)
    "$(NPP_DIRECTORY)/../Unreal/unreal.exe" $(image_name)
    [свернуть]

    Unreal-Run-a80


    Код:
    // [F10] Скрипт запуска проекта
      // Сохраняем путь текущего редактируемого файла
    set current = $(FULL_CURRENT_PATH)
      // переключаемся на основной файл проекта (должен быть открыт в 1-ой вкладке!)
    //REM/ npp_switch $(#1)
      // Получаем полное имя образа диска с откомпилированным проектом для запуска
      // (если вы компилируете в sna, поменяйте расширение на нужное)
    set image_name = "$(CURRENT_DIRECTORY)/$(SELECTED_TEXT)/$(NAME_PART).sna"
    set image_dir = "$(CURRENT_DIRECTORY)/$(SELECTED_TEXT)/"
      // Возвращаемся на ранее открытую вкладку
    //REM/ npp_switch $(current)
      // Запускаем откомпилированный проект   
    cd $(image_dir)
    "$(NPP_DIRECTORY)/../Unreal/unreal.exe" $(image_name)
    [свернуть]
    Вложения Вложения
    Последний раз редактировалось Biland; 18.06.2025 в 15:07.

    Этот пользователь поблагодарил Biland за это полезное сообщение:

    metamorpho(18.06.2025)

  8. #7

    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    559
    Спасибо Благодарностей отдано 
    189
    Спасибо Благодарностей получено 
    200
    Поблагодарили
    101 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ped7g , а можете реализовать поддержку особых макросов с неопределённым количеством параметров, чтоб от ни одного до много-много ?

    Я тут подумал - в ZASM, в макрос можно передавать неопределённое количество параметров или не передавать вовсе, при этом доступ к ним осуществляется через =1 , =2 и т.д. Пример:

    NAME macro : ld hl,=1 : ld de,=2 :endm

    но там из-за многих ограничений эта фича преимуществ не даёт. А вот в SjASMplus с его Lua scripting , можно будет реализовывать довольно гибкие макросы, например реализовать какую-либо особую перекодировку строк символов в стиле записи в формате DEFB. Или что-то более сложное.

    У нас конечно знак '=' не подойдёт, да и чтобы не ломать проверки, этот макрос лучше оформлять отдельной командой . Например использовать слово 'macro$' или 'macro+' или что-то подобное.

    Типа :
    Код:
             macro$ <name>
                ....   
             endm
    Чтобы данный макрос можно было бы использовать как без параметров, так и с параметрами, количество которых не ограничено.
    Пусть например введённые параметры принимают имена по порядку p1 , p2 , ... , p10 , p11 , ... , p100 ... и так далее, а p0 , как в bash скриптах, показывает номер последнего параметра.
    А если две запятые идут друг за другом или через пробел, то значит параметр пустая строка (без кавычек)

    Lua функция sj.get_define("name", true) при отсутствии параметра в таком макросе пусть не орёт про ошибку, а выдаёт обычный nil

    Как смотрите на такое возможное дополнение ?
    Последний раз редактировалось Dart Alver; 18.06.2025 в 22:38. Причина: --

  9. #8

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

    По умолчанию

    Цитата Сообщение от Dart Alver Посмотреть сообщение
    Ped7g , а можете реализовать поддержку особых макросов с неопределённым количеством параметров, чтоб от ни одного до много-много ?

    ...

    varargs for macro are mentioned few times in various issues, like: https://github.com/z00m128/sjasmplus/issues/150

    You are welcome to check current proposal/notes and add any new suggestion/syntax detail so it's not lost when finally somebody will want to work on it.
    (I'm currently working very little at hobby stuff, too busy with newborn, work and running/fitness, ZX dev time shrink to few hours per month right now)

    - - - Updated - - -

    Цитата Сообщение от CityAceE Посмотреть сообщение
    ...
    Вот так работает, но в итоге имеем лишних 7 байт на константы. Причём в конец кода их перекинуть нельзя, так как они должны находится перед первым вызовом макроса.
    There's no good native support for what you are trying to do.
    You can maybe hack it by doing DEFINE with numeric values, ie. DEFINE A 1 : DEFINE REG_A 1 : IF reg1 == REG_A ... but it will probably bite you badly in other ways because the defines like "A" are too short and generic. Other possible hack is to use lua script to check for value of macro argument reg1, that's less intrusive, but cumbersome.

    Mind you, sjasmplus has the i8080 support the other-way, ie. you can write i8080 code in Zilog syntax and the assembler will warn you when you use Z80-specific instruction by accident. sjasmplus has also support for "M" register as `(hl)` alias.

    You can add to source code:
    Код:
    ; use --i8080 switch to 8080 instructions only
      OPT --syntax=M   ; enable "M" register as (hl) alias
      LD A,B   ; MOV A,B
      LD A,M  ; MOV A,M
      LDIR ; error "Unrecognized instruction: LDIR"
    and assemble it with --i8080 switch to get results like this:
    Код:
    $ sjasmplus --i8080 --msg=lstlab -
    ; use --i8080 switch to 8080 instructions only
      OPT --syntax=M   ; enable "M" register as (hl) alias
      LD A,B   ; MOV A,B
      LD A,M  ; MOV A,M
      LDIR ; error "Unrecognized instruction: LDIR"
    # file opened: <stdin>
    1     0000              ; switch to 8080 instructions only
    2     0000                OPT --syntax=M
    3     0000 78             LD A,B   ; MOV A,B
    4     0001 7E             LD A,M  ; MOV A,M
    <stdin>(5): error: Unrecognized instruction: LDIR
    5     0002                LDIR ; error "Unrecognized instruction: LDIR"
    6     0002
    # file closed: <stdin>
    But to do it the other way, ie. to support original i8080 syntax, you should probably look for other assembler, sjasmplus is not a good choice for that.
    Последний раз редактировалось Ped7g; 08.07.2025 в 13:04.

  10. #9

    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    5,226
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    710
    Спасибо Благодарностей получено 
    1,662
    Поблагодарили
    577 сообщений
    Mentioned
    50 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Столкнулся с дурацкой ситуацией, которую пока не знаю как правильно решить. Прошу помощи!

    Я переделывал код Z80 в код i8080. Отсутствующие у i8080 заменял макросами. А чтобы не плодить огромную кучу похожих макросов я сделал универсальные макросы, которые принимают на вход имя регистра. Внутри макроса по имени переданного регистра я выполняю определённые действия. Но проблема в том, что я не нашёл как делать условия правильно, чтобы оно срабатывало с передаваемым именем.

    Пример:

    Код:
     macro instr reg1, reg2
     if reg1 == A
      ; some code
     if reg2 == H
      ; some code
     endm
    
    
     instr A, C
    Ни одно из условий не выполнится. Я пробовал и кавычки и много чего ещё. Чаще всего получаю ошибку на отсутствующую метку.

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

    Код:
     macro instr reg1, reg2
     if reg1 == A
      ; some code
     if reg2 == H
      ; some code
     endm
    
    A:     db    "A"
    B:     db    "B"
    C:     db    "C"
    D:     db    "D"
    E:     db    "E"
    H:     db    "H"
    L:     db    "L"
    
     instr A, C
    Вот так работает, но в итоге имеем лишних 7 байт на константы. Причём в конец кода их перекинуть нельзя, так как они должны находится перед первым вызовом макроса.
    С уважением, Станислав.

  11. #10

    Регистрация
    24.07.2018
    Адрес
    г. Москва
    Сообщений
    96
    Спасибо Благодарностей отдано 
    36
    Спасибо Благодарностей получено 
    51
    Поблагодарили
    36 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Ни одно из условий не выполнится. Я пробовал и кавычки и много чего ещё. Чаще всего получаю ошибку на отсутствующую метку.
    Не знаю, как вы кавычки пробовали. Вот я попробовал:

    Код:
    	macro instr reg1, reg2
    	 if reg1 == "A"
    	  DISPLAY "A"
    	  ; some code
    	 if reg2 == "H"
    	  DISPLAY "H"
    	  ; some code
    	 endm
    
    	instr "A", "C"
    Все нормально выполняется. Первое условие выполнилось, второе - нет, все корректно. Хотя я у этого кросс-ассемблера заметил какую-то лажу в приоритетах операций. Иногда довольно странные скобки приходится ставить.

    Код:
    SjASMPlus Z80 Cross-Assembler v1.21.0 (https://github.com/z00m128/sjasmplus)
    Pass 1 complete (0 errors)
    Pass 2 complete (0 errors)
    > A
    macro.asm(11): error: [IF] No ENDIF
    macro.asm(15): ^ emitted from here
    macro.asm(11): error: [IF] No ENDIF
    macro.asm(15): ^ emitted from here
    Pass 3 complete
    Errors: 2, warnings: 0, compiled: 23 lines, work time: 0.000 seconds
    Ну и да, у вас второй иф вложен в первый, ENDIFов нет.

    Или вы хотели в instr именно без кавычек писать имена регистров?
    Последний раз редактировалось cafedead; 03.07.2025 в 23:11.

Страница 61 из 63 ПерваяПервая ... 57585960616263 ПоследняяПоследняя

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

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

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

Похожие темы

  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

Ваши права

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