This is just your opinion
And this is your right
Вид для печати
https://github.com/z00m128/sjasmplus...es/tag/v1.20.1
- new directives: SAVEAMSDOS, DEFDEVICE
- added "smart" SMC offset syntax: `value_addr+*: ld a,123`
- parse+ignore decimal numeric constants (for easier migration to Lua5.4)
https://github.com/z00m128/sjasmplus...es/tag/v1.20.2
- added optional second argument for DUP to have index variable
- option --exp will create file even when no EXPORT is used
- fixing variable name-clash when compiling against musl-clib
- LuaBridge updated, CMake and Makefile updated a bit
- minor bugfixes/improvements in parser in specific edge cases
Так и не понял, что это за index variable, и зачем она нужна.
Есть магия, как получитьКод:struct MedikitVTab /*виртуальная таблица для класса TMedikit*/
Metod dw #abcd
Metod1 dw fPick
ends
struct TMedikit /*класс*/
dw MyMedikitVTab /инкапсуляция!!!/
Coord dw #1f00 ; X
dw #1f00 ; Y
Count dw 55 ; Здоровье
ends
ORG #9e00
MyMedikit TMedikit /*экземпляр класса TMedikit (объект MyMedikit) объект класса */
MyMedikitVTab MedikitVTab
StartProg
ld bc,MyMedikit.+Coord
nop
ret
fPick ret
смещениеадрес по метке в инкапсуляции MyMedikitVTab из объекта MyMedikit?:
Код:ld bc,MyMedikit.+Metod1
you mean something like this?
also check listing with symbol table, or docs about structs, what values are available, you have all offsets, struct size and instance full addresses available at assembling time.Код:struct MedikitVTab /*виртуальная таблица для класса TMedikit*/
Metod dw #abcd
Metod1 dw fPick
ends
struct TMedikit /*класс*/
dw MyMedikitVTab /*инкапсуляция!!!*/
Coord dw #1f00 ; X
dw #1f00 ; Y
Count dw 55 ; Здоровье
ends
ORG #9e00
MyMedikit TMedikit /*экземпляр класса TMedikit (объект MyMedikit) объект класса */
MyMedikitVTab MedikitVTab
; DE = address of TMedikit instance
fPick:
ld hl,TMedikit.Count ; offset of Count in TMedikit struct
add hl,de ; HL = MyMedikit.Count #9e06
; ...
ret
; HL = object instance, BC = method offset in vtable
runVMetod:
ld de,(hl) ; DE = MyMedikitVTab #9e08 ; fake ld e,(hl) : inc hl : ld d,(hl) : dec hl
ex de,hl
add hl,bc ; HL = MyMedikitVTab.Metod1 #9e0a
ld a,(hl)
inc hl
ld h,(hl)
ld l,a ; HL = fPick #9e0c, DE = MyMedikit #9e00
jp (hl) ; jump to fPick
StartProg
ld hl,MyMedikit ; HL = MyMedikit instance address #9e00
ld bc,MedikitVTab.Metod1 ; offset of Metod1 in MedikitVTab struct #0002
call runVMetod ; `MyMedikit.Metod1();` alias `fPick(MyMedikit);`
jr $
(sjasmplus --lst --lstlab=sort file.asm)
https://github.com/z00m128/sjasmplus...es/tag/v1.20.3
- added alias --define for -D
- added string-literals suffixes Z and C to add zero or set high bit of last char
- end of line backslash continues source line (limited support, not recommended)
- Lua: minor version upgrade to 5.4.6 (from 5.4.4)
- minor updates to Makefile
https://youtu.be/Gerd209yR-M?si=pwIx2QP-Ae4N3QLs
мб кому пригодится VCode + sjasmplus
v 1.20.3 Lua
Я так понял появилась возможность забирать в lua-скрипт непосредственно значения макросов. Но без примеров нихрена непонятно как это работает.Цитата:
[string] sj.get_define("name", "include_macro_args" = false)
Get define value, returns nil if define is not found. Can optionally search also macro arguments (with higher priority).
Может кто разъяснить ?
- - - Добавлено - - -
До этого использовал v 1.19.0.
Там для прокидывания в Lua аргумент макроса делал как-то так :
Теперь вроде как можно делать напрямую sj.get_define("p0000000", "чето надо указать типа")Код:MACRO LUT_ p00000000 ; проверочная макроса однако )))
DEFINE _p0000000 p00000000
LUA ALLPASS
local stra = sj.get_define("_p0000000")
sj.insert_define("_p0000000","'"..string.upper(stra).."'")
ENDLUA
DB _p0000000
UNDEFINE _p0000000
ENDM
И вот второй параметр непонятен от слова совсем ))
Did you check the test accompanying the change?
One using the ", true" to enable macro argument search:
https://github.com/z00m128/sjasmplus...macro_arg2.asm
https://github.com/z00m128/sjasmplus...ro_arg.asm#L24
Let me know if this is not enough and what have you tried and does not work for you.
In your example I think this should work (but I didn't test it, just writing it here in forum live):
Let me know if this doesn't work for you, I will try harder. :)Код:MACRO LUT_ p00000000 ; проверочная макроса однако )))
LUA ALLPASS
local stra = sj.get_define("p00000000", true)
_pc("DB '"..string.upper(stra).."'")
ENDLUA
ENDM
Был бы очень благодарен авторам ассемблера, если бы они сделали схемы подсветки к двум моим любимым редакторам: NotePad ++ и EditPad Lite !
Hello, thanks for the feedback and idea. I'm personally not interested to work on the syntax highlight for these editors, as I prefer open source software, you can try Kate (it has also windows binary builds) - syntax highlight rules are directly in the sjasmplus git repository.
Or maybe somebody else will be interested in doing this, then I hope they will let me know about the result so I can mention it here or in the sjasmplus docs. Have a great time.
Ну а что им, жалко что ли? Для любимого же редактора просят.
- - - Добавлено - - -
И до сих пор же доступно, что примечательно)
Канеш!
Там только для светлой темы :-) и для EditPad Lite нет.
- - - Добавлено - - -
Разобрался немного, как это делается в NotePad++, сделал пока подсветку комментариев, это сильно упростило жизнь!
Я всё-таки думаю, что авторам ассемблера сделать подсветку синтаксиса гораздо проще, чем мне, а чем больше редакторов поддерживаются - тем лучше!
Установил Kate под Windows 10 x64. К сожалению, убрать атрибут "только для чтения" с папки
C:\Program Files\WindowsApps\KDEe.V.Kate_24.201.6869.0_x64__7 vt06qxq7ptv8\bin\org\kde\syntaxhighlighting
не удаётся даже в Total Commander!
И сразу к этому, такой вопрос: если всё же удастся, нужно ли создавать в этой папке папку syntax ? или записывать файл, как есть?
- - - Добавлено - - -
Notepad++ is Free Software. This means that not only is it an open-source project, but you also have the right and the freedom to access the source code, modify it, and distribute the compiled binary along with the modified source code. These rights (the freedom) are protected by the GNU General Public License.
Notepad++ source code can be access via its repository on GitHub: https://github.com/notepad-plus-plus/notepad-plus-plus
https://notepad-plus-plus.org/resources/
Подробнее тут и в комментариях ниже: https://hype.retroscene.org/blog/dev/946.html
Не надо там ничего читать. Информация по ссылке давно устарела, описываемых плагинов доброй половины уже больше нет на VSCode marketplace, вместо них появились другие.
Для VSCode модно сейчас использовать DeZog. Этого вполне достаточно. Для удобства можно добавить ASM CodeLens, Hex Cover Converter, Z80 Assembly Meter, Z80 Instruction Set.
I either didn't know or forgot notepad++ is open source. Nice. I'm still not interested to work on syntax highlight for it now, but maybe in some distant future, now it makes more sense (although there's no linux binary, so I would have to run it with wine).
Kate: I'm not sure about windows, but in linux you put your customization files like syntax highlight or color schemes to folder local to the user, I have it in the comments of the file itself, as it's a bit hidden. I would expect the windows versions of KDE apps to have also configuration stored in some user directory, try to change few options and store the new config, it must be written somewhere. If you will find it, and compare the folder tree against what is used on linux, you will probably find where to put syntax highlight rules too. Or maybe it's even in documentation?
Ничем не отличается от программирования в любом другом редакторе. Жмешь кнопки - пишется код.
Другое дело - компиляция и отладка. У DeZog есть огромная инструкция, как его настроить и использовать.
Попробовал VSCode, и есть вопросик.
Как я устанавливал
1. Установил VSCode.
2. Поставил внутри VSCode все плагины, что и у тебя в видосике.
3. Закачал твой пример. Распаковал. В VSCode "выбрал папку".
4. Отредактировал пути к Unreal-у.
5. Раскомментировал запуск в анриле, и запустил (Ctr+Shift+B). Ура работает! Кружочек нарисовался!
6. Скопировал шаблон в новый тестовый проект, и начал его немного править.
И вот тут-то и небольшая запарка:
[свернуть]
Редактирую я строчку. Сохраняю, запускаю -> в этой строчке ошибка. Исправляю, сохраняю, запускаю -> в этой строчке другая ошибка. НО и первая ошибка остаётся.
Наконец я окончательно исправляю строчку, сохраняю, запускаю, всё работает, ноль ошибок... Но всё равно те две ошибки, они есть, в списке проблем (который видно по Ctr+Shift+M).
Я что-то не так сделал? Или, надо просто это терпеть?
Нет, это не надо терпеть. Уже не припомню точно, что именно - но что-то не так настроено либо в launch.json, либо в tasks.json. Вроде где-то здесь - ""problemMatcher": "$problem-matcher-sjasmplus"", но могу ошибаться. Было у меня такое, но давным-давно настроил, и теперь просто тягаю папку .vscode из проекта в проект, минимально редактируя файлы внутри.
Код:{
"version": "0.2.0",
"configurations": [
{
"type": "dezog",
"request": "launch",
"name": "Internal Simulator",
"remoteType": "zsim",
"zsim": {
"visualMemory": true,
"memoryModel": "ZX48K",
"ulaScreen": true,
"zxBorderWidth": 20,
"vsyncInterrupt": true,
"zxKeyboard": true,
"zxBeeper": true
},
"sjasmplus": [
{
"path": "main.sld"
}
],
"history": {
"reverseDebugInstructionCount": 1000000,
"spotCount": 10,
"codeCoverageEnabled": true
},
"startAutomatically": false,
"disassemblerArgs": {
"esxdosRst": true
},
"rootFolder": "${workspaceFolder}",
"topOfStack": "stack_top",
"mainFile": "main.asm",
"load": "main.sna",
"smallValuesMaximum": 513,
"tmpDir": ".tmp"
},
]
}
Как-то так у меня.Код:{
"version": "2.0.0",
"tasks": [
{
"label": "Build project",
"type": "shell",
"command": "sjasmplus.exe",
"args": [
"--sld=main.sld",
"--color=on",
"--fullpath",
"main.asm"
],
"problemMatcher": "$problem-matcher-sjasmplus",
"group": {
"kind": "build",
"isDefault": true
},
"isBackground": false,
"presentation": {
"echo": false,
"reveal": "always",
"clear": true,
"focus": false,
"panel": "shared",
"showReuseMessage": true
},
},
]
}
Но подозреваю, что вопрос более подходящий скорее для этой темы: https://zx-pk.ru/threads/33549-progr...udio-code.html
Здесь можно взять пример рабочего каталога с примером. Скорее всего, в конфигурационных файлах придется кое-что подредактировать (адрес, где лежит sjasmplus.exe, например, и т.п.).
Собстна, как посчитать длину в секторах? Каким образом можно произвести деление с округлением до целого числа?
Капец, а что так просто-то всё. Видать, я все же тупой дядя. :v2_dizzy_punk:
without `DEVICE` you will be in "none" device mode. You can produce raw machine code and store the output with `OUTPUT` directive or `--raw` option on command line, but you can NOT do `SAVEBIN/SAVESNA/SAVEDEV/SAVETAP/SAVETRD/...` and similar, which save memory content after it is ready, as there is no memory in "none" device, machine code is emitted and gone.
Some people work with this mode on rather large projects (super mario bros for MSX producing 2MiB cartridge ROM file), but for ZX it's more common to use the virtual device and all the extra directives capable to work with the virtual memory.
лол, те, кто жаловались, ниасилили почитать руководство. И я тоже xD
интересует такой вопрос - каковы ортодоксальные правила z80 ассемблера для меток? :)
А именно:
- можно ли добавлять пробелы перед меткой (в обоих случаях - когда метка завершается : и без)?
- можно ли использовать метку без : и без инструкции в той-же строке?
- можно ли использовать метку с : и с инструкцией в той-же строке?
- можно ли использовать метку с : или без, в строке с безметочной директивой (например ORG)?
В си пробелы перед меткой допускаются, но в ассемблерах z80 я вижу это не везде допустимо.
Особенно интересен случай с разделителем инструкций :, т.к. ассемблер поддерживающий такой разделитель по идее должен иметь более строгие правила к меткам, т.к. иначе может ошибочно воспринимать макросы как метки и тихо игнорировать ошибки
Можно, но адрес метки будет последним адресом перед исполнением директивы ORG, так как она начинает работу после своего обьявления. Поймал такой ляп как-то ))
- - - Добавлено - - -
Не а. Метки начинаются исключительно с начала строки, после разделения ':' метку поставить нельзя.
какие операторы в выражениях поддерживает SjASMPlus?
Также вопрос - есть ли ассемблеры z80, которые умеют ассемблировать код вроде такого:
Код:leng1 equ 10
leng2 equ label2-label1
rept leng2*2
jr $+2 ; 12T
endm
label1:
rept leng1*2
jr $+2 ; 12T
endm
label2:
Документация вам в помощь: http://z00m128.github.io/sjasmplus/documentation.html
Конкретнее : http://z00m128.github.io/sjasmplus/d...#s_expressions
Ну тот же SjASMplus вполне ассемблирует если правильно операторы писать, а не endm к rept прикручивать. ;)