Просмотр полной версии : Программирование и отладка в VisualStudio Code
Здравствуйте, граждане.
Нравится мне VisualStudio Code, поэтому, после того, как я передрал содержимое своих древних дискет, на которых когда-то программировал, в первую очередь, начал искать плагины для программирования под ZX именно для этого редактора. Нашел и установил всего два плагина - Z80 Macro-Assembler (mborik.z80-macroasm) и DeZog (maziac.dezog).
Ну и что-то не получается мне в них работать. Возможно, они между собой не дружат, возможно, они не дружат со sjasmplus, возможно, это я с ними не дружу.
Сложно сразу объяснить, в чём конкретно проблема. Я взял образ .trd со своими исходниками, запустил эмулятор, запустил в нём GENS4, открыл исходник, откомпилировал. Компиляция прошла без ошибок, запустил - программа запустилась. Делаю то же самое в VS Code - прога компилится, но виснет в начале. Ну, с этим ладно, скорее всего, при переносе GENS - VS где-то получились некорректные метки (у меня в коде есть метки с совпадающими названиями, но в GENS4 эти метки находятся в разных файлах, которые, при компиляции, подгружаются как инклюды, поэтому там проблем не было), или стек расположил неправильно, или ещё что - с этим буду разбираться, отлавливать трассировкой.
Но пока что большие трудности у меня с самим редактором. Вроде бы, смотрю в мануал по SjASMPlus, но всё работает как-то непонятно. Например, на скриншоте, я объявил модуль TXT43, в нём есть метка OUT43. Почему мне автоподстановка не предлагает переход к этой метке?
У кого-нибудь вообще есть опыт работы с DeZog, или, может, что-то другое посоветуете?
http://i.piccy_.info/i9/ca0e5c2662b038caac27e4c9040e8039/1627133805/21407/1379577/Code_2021_07_24_16_32_53.png
http://i.piccy_.info/i9/7672d930fdb94bbb643942348e60a95a/1627135805/8546/1379577/Code_2021_07_24_17_09_48.png
Black Cat / Era CG
25.07.2021, 17:39
Может быть сей плагин не знает о модулях сжасма.
Может быть сей плагин не знает о модулях сжасма.
Запросто, на Западе же больше по pasmo угорают, а плагины вроде не наши
http://i.piccy_.info/i9/30cf861fa02c6bf04fb6750f537b13b1/1627226763/38859/1379577/13333msedge_2021_07_25_18_25_09.png
Установил ASM Code Lens от того же maziac - появились, вроде, подсказки на ссылки. Буду пилить дальше.
Может я конечно чего-то не понимаю, но эти плагины обычно открытые.
Что-то мешает найти его исходники на гитхабе и создать там баг-репорт?
Мешает отсутствие чёткого понимания, баг это, или я что-то не так настроил, или я использую неверный синтаксис, или вообще так и должно быть по задумке автора.
Можно и автору плагина вопрос задать, не проблема - просто я сначала хотел спросить пользователей (если бы такие нашлись), чем задавать банальные вопросы автору.
upd
Между тем, проблема с зависанием программы после запуска была совсем не в метках.
Оказывается, если сохранять результат компиляции в .sna, то происходят некоторые чудеса с прерываниями.
The snapshot header content is hard-wired in sjasmplus binary (disabled interrupts may surprise some users)
When a SNA file is created with the SAVESNA pseudo-op, interrupts are disabled by default. The raw assembled output behaves as expected, so it appears to be an issue with the SNA container file?
В общем, по истечении месяца работы: мне нравится. Как-то кривовато работает отладка во внешних эмуляторах (CSpect, ZEsarUX), но для отладки чего-нибудь не чересчур заумного, встроенного эмулятора вполне достаточно.
Ещё думаю, для разнообразия, попробовать SpectNetIde на Visual Studio 2019, благо, она установлена с незапамятных времён.
Alex Rider
15.01.2024, 09:13
Хотелка
Хочется компилить и отлаживать в Unreal Spectrum проекты для Спектрума в Visual Studio Code тем же хоткеем, который я использую для других языков.
Проблема
Я давно освоил Visual Studio Code и использую ее, например, для проектов на Python. При этом все мои проекты для Спектрума жили в Sublime Text с расширением Z80Asm от Breeze, и я решил смигрировать их в более привычный VS Code.
В VS Code есть понятие Build Task, позволяющее запустить только компиляцию workspace (и, вообще говоря, выполнить любую команду shell) и отдельно debugger'ы, свои для каждого типа workspace. Если для языка установлено отладочное расширение, то по F5 (у меня клавиатурная тема от MSVS) workspace компилится при наличии изменений, и сборка запускается в отладчике. А запускать вместо отладчика команду shell (и Unreal Spectrum) нельзя, нужно отладочное расширение. Итого: для Python использую F5, для Z80 - Shift+Ctrl+B, и постоянно путаю их.
Чуть подробнее
Для разработки на Z80 есть расширение Z80 Macro-Assembler, которое понимает синтаксис Z80 и имеет еще всяческие фишки (подробнее про это писал камрад sq в статье Как быстро настроить среду разработки на ZX: Visual Studio Code + Z80MacroAsm boilerplate (https://hype.retroscene.org/blog/dev/946.html)). Однако расширения, позволяющего запускать Unreal Spectrum в качестве отладчика нет.
Переопределить шоткат F5 для проекта невозможно, глобально переопределить его на Build Task - тоже не выход, потому что оно тогда будет так работать и для всех остальных языков.
Надо сделать как-то так, чтобы для workspace Z80 F5 вызывал Build Task, в котором можно выполнить команду shell и запустить что хочется, а для других проектов поведение оставалось прежним: компиляция (если есть) и запуск отладчика из расширение.
На просторах Интернета накопал способ переопределить шоткат для проекта, которым на всякий случай делюсь. Суть способа такая:
пользовательские шоткаты переопределяют системные, при этом, если условие when для пользовательского шотката не выполнено, то работает штатный шоткат из клавиатурной схемы;
условие вычисляемое, в нем можно использовать настройки, в том числе, и уровня проекта;
суть решения: добавляем в проект некоторую кастомную настройку, наличие которой является условием пользовательского шотката на запуск Build Task, а при ее отсутствии работает штатный шоткат VS Code для запуска дебаггера.
Инструкция
Нажать Shift+Crtl+B (или ваш шоткат для билда) чтобы появилось предложение создать tasks.json. Если дефолтные таски в конфигах самой VS Code уже есть, то, по Вашему вкусу, можно либо добавлять новые таски туда, либо создать в проекте файл .vscode/tasks.json
Вставить в tasks.json пример сборочных тасков из справки extension'а Z80 Macro-Assembler (https://github.com/mborik/z80-macroasm-vscode/wiki/tasks.json) и настроить его на свой вкус. Для настройки шотката интересен только параметр label. Назовем его, например, Compile and run. В параметр command пишется shell-команда, которую хотим прикрутить к шоткату;
Нажать Shift+Ctrl+P (или ваш шоткат для поиска команд) и выполнить Preferences: Open workspace settings (JSON). Добавить в него параметр
"runTaskInsteadOfDebug": true
Нажать Shift+Ctrl+P (или ваш шоткат для поиска команд) и выполнить Preferences: Open Keyboard Shortcuts (JSON). Добавить в него:
{
"key": "f5",
"command": "workbench.action.tasks.runTask",
"when": "config.runTaskInsteadOfDebug && taskCommandsRegistered",
"args": "Compile and run"
}
Собственно, все. Теперь в проектах, в которых есть .vscode/settings.json с параметром "runTaskInsteadOfDebug": true, по кнопке F5 будет вызываться таск с именем Compile and run, а в проектах без этой опции - отладчик по умолчанию для workspace.
Например, я себе в проектах Saboteur сделал по F5 сборку и запуск отладочной версии, по Ctrl+F5 - релизной, а по Shift+F5 - только компиляцию без запуска.
А можно просто настроить launch.json и будет по f5 запускать, это конфиг и нужен для запуска программы или отладчиков
Это все здорово, конечно, но вот я был вынужден отключить Z80 Macro-Assembler, так как использую ASM Code Lens, который также работает как language server, но показывает еще и количество линков на метку и позволяет их просмотреть - а одновременно эти расширения работать не могут. Возможно, ASM Code Lens тоже можно так настроить, но мне не сложно нажать ctrl-shift-b. :v2_dizzy_roll:
Alex Rider
16.01.2024, 11:55
А можно просто настроить launch.json и будет по f5 запускать, это конфиг и нужен для запуска программы или отладчиков
Это если есть отладчик для Z80 с поддержкой запуска Unreal Spectrum. Хотя, наверное, надо было покопать в сторону отладчика PowerShell, в котором можно прописать сборку и запуск. Но гибкого перехвата шоткатов так все равно не сделать.
- - - Добавлено - - -
использую ASM Code Lens
Спасибо за идею, попробую заценить. Описанный способ подходит для любого language server'а.
Это если есть отладчик для Z80 с поддержкой запуска Unreal Spectrum
Я не особый любитель Unreal, но, как бы там ни было - зачем он нужен, если существует DeZog? Как эмулятор для этапа разработки - вполне достаточен; как отладчик - по-моему, намного превосходит встроенные отладчики в всяких там унреалах и спектакуляторах вместе взятых.
Если дело привычки - тогда понимаю, вопросов нет. А DeZog еще и zrcp умеет, кстати.
Alex Rider
16.01.2024, 21:32
А может tap или trd?
Alex Rider
01.02.2024, 18:13
Может ли DeZog отлаживать код в tap и trd-образе? Можно ли собрать SjAsm'ом образ и запустить отладку кода из него?
Может ли DeZog отлаживать код в tap и trd-образе? Можно ли собрать SjAsm'ом образ и запустить отладку кода из него?
tap отлаживать может, но в этом случае в качестве эмулятора нужно использовать не встроенный, а ZEsarUX по протоколу zrcp. Отладка будет производиться все равно средствами DeZog. trd - не знаю, как-то даже придумать себе не мог, для чего мне это могло бы пригодиться. Писать или читать при компиляции в trd-образ возможно, так что вполне себе можно сделать в тексте
INCTRD "test.trd","mygfx.C" ; include mygfx.C from test.trd
и передать туда управление и отлаживать. Но это какой-то изврат.
Хочется компилить и отлаживать в Unreal Spectrum проекты для Спектрума в Visual Studio Code тем же хоткеем, который я использую для других языков.
Так, к слову:
Помнится для таких целей однажды даже пересобирал среду (это был akelpad), но например purebasic кодить удобней в jaPBe, а что-то ещё - в других средах. Чтоб все работали на одинаковых хоткеях (F5=запуск, F6=запуск с дебагером) сделал специальный ланчер для сред который их запускает, передаёт параметры (чтоб работало "Открыть с помощью") и потом сидит до самого завершения работы как невидимый процесс в памяти и следить за нужными кнопками, отменяя стандартные вызовы среды и заставляя её делать что-то там другое (имитируя нажатия на её родные хоткеи). Поначалу способ казался неудобным, но потом вдруг оценил что достаточно было один раз написать такой ланчер для каждой из нужных прог и после этого не страшны всякие там переустановки и т.д. - ланчер остаётся самим собой и работает как надо.
Здравствуйте, граждане.
Нравится мне VisualStudio Code, поэтому, после того, как я передрал содержимое своих древних дискет, на которых когда-то программировал, в первую очередь, начал искать плагины для программирования под ZX именно для этого редактора. Нашел и установил всего два плагина - Z80 Macro-Assembler (mborik.z80-macroasm) и DeZog (maziac.dezog).
Ну и что-то не получается мне в них работать. Возможно, они между собой не дружат, возможно, они не дружат со sjasmplus, возможно, это я с ними не дружу.
Сложно сразу объяснить, в чём конкретно проблема. Я взял образ .trd со своими исходниками, запустил эмулятор, запустил в нём GENS4, открыл исходник, откомпилировал. Компиляция прошла без ошибок, запустил - программа запустилась. Делаю то же самое в VS Code - прога компилится, но виснет в начале. Ну, с этим ладно, скорее всего, при переносе GENS - VS где-то получились некорректные метки (у меня в коде есть метки с совпадающими названиями, но в GENS4 эти метки находятся в разных файлах, которые, при компиляции, подгружаются как инклюды, поэтому там проблем не было), или стек расположил неправильно, или ещё что - с этим буду разбираться, отлавливать трассировкой.
Но пока что большие трудности у меня с самим редактором. Вроде бы, смотрю в мануал по SjASMPlus, но всё работает как-то непонятно. Например, на скриншоте, я объявил модуль TXT43, в нём есть метка OUT43. Почему мне автоподстановка не предлагает переход к этой метке?
У кого-нибудь вообще есть опыт работы с DeZog, или, может, что-то другое посоветуете?
http://i.piccy_.info/i9/ca0e5c2662b038caac27e4c9040e8039/1627133805/21407/1379577/Code_2021_07_24_16_32_53.png
http://i.piccy_.info/i9/7672d930fdb94bbb643942348e60a95a/1627135805/8546/1379577/Code_2021_07_24_17_09_48.png
https://youtu.be/Gerd209yR-M?si=dXFU6Eimr4UcEb3o
Ну даже не знаю, что и сказать.
Ок, ничего не скажу.
Zeizwell
22.04.2025, 11:04
Может кто-то скинуть готовый шаблончик c запуском анрила по ф5 и тд? А то я не силен в launcher.json всяких. Почекал разные с форума и видосов, там то dezоg, то ошибки, то еще что.
Оказалось это целая проблема сделать проектик на VS code, уж думаю в аласм просто пойти.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot