6809 в помощь)
Вид для печати
6809 в помощь)
Не обязательно ассемблер :) может какой волшебный луа скрипт, или ещё что :)
Один раз конечно можно пройти и всё заменить, но ведь в процессе модификаций могут опять появиться места, которые можно оптимизировать.
Хотелось бы иметь возможность периодически/постоянно это дело чекать.
- - - Добавлено - - -
Да, что-то такое и напридумывалось.
Если кто будет макро использовать, там чутка пофиксить надо:
https://i.imgur.com/qj1Ut5X.png
Да с безусловными проблема конечно, перезрузки макросов нет в принципе, а условия я думал сами добавите их у меня явно мало. Разбор параметров макросов в сжасме конечно убогий, я как то поднимал этот вопрос сделать как в tasm rst7, но на меня посмотрели как на идиота и пропустили мимо ушей. Как через луа сделать пока не сообразил, монструозно выходит.
Есть ли возможность в сджасме сделать вычитание константы из кадого байта массива при компиляции?
Например:
DB "2345678"
При копиляции вычитаем 1 и получаем результат
1234567
upd
--
нашел директиву ABYTEZ
А вот и облом. :(
Макрос вываливается по error: [IF] Forward reference, так понимаю, пытается посчитать смещение до метки, адрес которой ещё неизвестен, и может стать другим в результате этой самой подмены jp на jr.
Так что вопрос автоматизации (пускай и частичной) актуален.
может конечно известная бага
но я про нее напомню
нужно было сделать примерно следующее (убрано все лишнее для лучшего восприятия)
точнее такая конструкцияКод:dup 10
if aaa = 0
nop
endif
edup
Код:dup 10
if aaa = 0
endif
if aaa = 1
endif
if aaa = 2
endif
edup
в итоге при компиляции
Цитата:
error: Unexpected end of file
даиб;%?К%"№я этот№""№%;
я 20 минут плясал с бубном пытаясь понять где ошибка
сравнивая 2 версии исходника
как это можно скомпилировать неправильно науке не известно...
иногда жалеешь что связался с этим гиблым делом...
Скрытый текст
вынес if за dup-ы
в итоге 20 строк превратилось в 50...
+ еще пришлось делать
количествоdupов = 100500...
рукалицо...
[свернуть]
нужна наверное отдельная тема
багофичи sjasm-а
где в первом посте вести их список
NEO SPECTRUMAN, Этот баг разбирался еще лет так 5 назад
sjasm не приемлет IF/endif внутри dup\edup
Вот такой вопрос возник. Известно, что ужясм в виде .sna генерит кривую область системных переменных $5C00-$5CFF. А был ли фикс?
и еще: не помню кто, но слышал в чятике, что есть другая версия, которая поддерживает STORM'овский синтаксис вида .4 add a,a - повтор 4 раза строки. Если есть, то где можно скачать?
В рамках удовлетворения нездорового желания вспомнить C++ и заодно посмотреть что там нового сделали в C++11/14, возможно, буду неспеша немного "равнять" sjasmplus.
Пока что смерджил ветку Vitamin-а, переделал проект под CMake, поменял схему версий на YYYYMMDD (а то, судя по содержимому ветки, полный бардак с версиями), поправил обработку CRLF-окончаний строк в Unix.
Бинарники для винды (32 и 64 бита): https://github.com/mkoloberdin/sjasmplus/releases
Для Linux/MacOS можете собрать сами из исходников (см. по той же ссылке или репо: https://github.com/mkoloberdin/sjasmplus ):
Пытаюсь прочитать всю тему... Буду признателен за список пожеланий и багрепорты. (ничего не обещаю, но пишите :))Код:mkdir build
cd build
cmake ..
make
Также, насколько я понимаю, ветка Vitamin-а может не содержать некоторых патчей сделанных другими пользователями, которые тут в теме упоминались. Если что-то нужно добавить, ткните носом.
Писал , много тысяч лет назад тут же, но вроде так и не починили. Забавный баг, но голову сломать можно
вот такая конструкция, всего одна потерянная буква, ошибок не дает, но и не компилится. Отыскать только случайно и то глазками.Код:DUP 1
nop;
EDU
я то теперь DUP-ы особо проверяю после того..
Сконвертировал документацию, положил на гитхабовский Wiki: https://github.com/mkoloberdin/sjasmplus/wiki
МОЖНО РЕДАКТИРОВАТЬ прямо там. Присоединяйтесь ;) Было бы неплохо для начала разбить документацию на отдельные Wiki-страницы и составить оглавление.
Отлично подходящая задача для желающих помочь, но не знающих C/C++.
Для желающих проверить/довести до ума документацию в Wiki, вот также ссылка на HTML-версию (должно быть ближе к исходному Docbook XML):
https://htmlpreview.github.io/?https...tml/index.html
lua в sjasm-e какаето упоратая или дремучая
в ней нет кучи нужных команд (которые нагугливаются)
того же goto
приходиться писать неимоверно упоратый код
а еще меня добивает что нельзя завершить цикл
вот так(это на фоне отсутствия goto)
for a=1,128,1 do
a=128
end
это какоето
так и должно быть в lua?
и вообще нету списка команд
приходиться как всегда методом научного тыка
+местами надо немного в видоизмененной форме в отличии от того что во всех мануалах
(а выход с сообщением об ошибке из зацикленного по кода можно сделать по тайм ауту(который должен отключаться при необходимости(тк вдруг захочется что нибудь считать\перебирвать на протяжении нескольких тысяч часов(например вот совсем недавно я делал brutal force для генерации таблиц))))
- - - Добавлено - - -
мы хотим собрать сами из исходников
для умственно отсталых можно написать что нужно скачать как ругаться где взять бубен чтоб все это сходу скомпилировать
в смысле для wind0wZ
- - - Добавлено - - -
В sjasm-е есть такая багофича с макросами
предположим обьявляем макрос
macro mk,xxx
defb 1 + high xxx, 2 + low xxx
endm
при
mk 16384
все будет правильно
$41, $02
но если написать
mk 16384 + $10
компилятор развернет это в
defb 1 + high 16384 + $10, 2 + low 16384 + $10
а там другой приоритет действий
сначала high а потом сложение
в итоге компилируется оно с ошибкой в виде
$51, $12
в место
$41, $12
нужно чтоб во время разворачивания макросов
параметр ставился в скобки
defb 1 + high (16384 + $10), 2 + low (16384 + $10)
тогда результат будет предсказуемым
желательно чтоб было опционально для совместимости со старыми исходниками(пусть по дефолту включено)
или тогда нужно в мануале указывать что может быть такая грабля
а еще я хочу опциональное отключение дебилизма в виде ld a,5,a,b,d,h,ret,fghfdg,ghsd
потому что я пишу привычное мне
cp a,(hl) одна команда
а мне ее компилирует в
cp a
cp (hl)
xor a
xor (hl)
так бы руки по отрывал бы и тем и тем
экономщики блджад
а потом ищешь чаво оно не работает
а еще в sjasm-e
нельзя макрос с переменным количеством параметров
что очень иногда мешает!!!!
я не знаю что добавлено в сборке Vitamin-а
и я ее никогда не использовал
есть где то полный перечень её изменений?
а еще хотелось бы расширение набора команд
и разных видов их написания
+заимтвования их у других компиляторов
например emuzwin с которого всем нужно переходить на что то другое
вот еще полезная команда для сборки всяких snaКод:DEFG ........ .X......
DEFG .XXXXX.. .X......
DEFG ......X. .XXXXX..
DEFG ..XXXXX. .X....X.
DEFG .X....X. .X....X.
DEFG ..XXXX.X .XXXXX..
DEFG ........ ........
(компилируется в 0,40h,7Ch,40h, и т.д.)
или:
DEFG ........ .X......
.XXXXX.. .X......
......X. .XXXXX..
..XXXXX. .X....X.
.X....X. .X....X.
..XXXX.X .XXXXX..
........ ........
(в этом случае порядок другой: 0,7Ch,2,3Eh,42h,3Dh,0,40h, т.е. байты размещаются
по колонкам).
DEFD xxxxxx [[,] xxxxxx ]...
Директива для определения упакованных шестнадцатеричных. Например, DEFD 1234567890
эквивалентно DEFB 12h,34h,56h,78h,90h. Если элемент стартует не с шестнадцатеричной
цифры, то он считается обычным выражением (и занимает 1 байт, как в директиве DEFB).
ERROR [#severity],'text'[,#passes]
или
ERROR [#severity],"text"[,#passes]
Генерирует ошибку, заданную пользователем. Может использоваться, например, в
макроопределениях для проверки допустимости параметров.
severity: 0 - warning (предупрежедение: текст попадает в список сообщений, но
компиляция продолжается); 1 - обычный error (код более не генерируется, но
компиляция может еще некоторое время продолжаться); 2 или выше - fatal error,
компиляция останавливается немедленно.
Если #passes не задано, сообщение показывается на всех проходах компиляции.
Если оно задано, то значение выражения используется как двоичная маска: бит 0
устанавливается, чтобы сообщение показывалось на проходе 1, бит 1 - на проходе
2, и бит 2 - на проходе 3. Т.е. например, если passes = 2, то сообщение будет
отображаться только на первом проходе компиляции, а если pass = 6 - то на втором
и третьем (при его наличии) проходах.
label[:] PROC
...
[label2[:]] {ENDP|ENDPROC|EPROC}
Задает процедуру. Фактически, всего лишь ограничивает видимость локальных меток,
заданных между PROC и ENDPROC. Процедуры могут быть вложены друг в друга, и
уровень допустимой вложенности ничем не ограничен.
FOR var=values
...
{EFOR|ENDFOR}
Дублирует все операторы между заголовком до финального ENDFOR столько раз,
сколько всевозможных значений перечислено в списке для переменной цикла var,
на каждом шаге присваивая этой переменной очередное значение из списка, как
если бы имя var определялось директивой DEFINE.
Список значений может содержать любые выражения, строки, заключенные в одинарные
и двойные кавычки (во втором случае значение подставляется без кавычек),
а так же среди прочего перечень значений в виде #from TO #to [STEP #step].
В последнем случае сначала переменной присваивается значение выражения #from,
и оно на каждом проходе увеличивает свое значение на #step (по умолчанию - на 1),
пока не превзойдет (при отрицательном #step - пока станет меньше) значения
выражения #to.
GOTO [cond,][label]
Эквивалент инструкции JR/JP, но по возможности компилятор использует короткие
переходы (JR). Важное ограничение: любое выражение не может использоваться в
качестве операнда, а только метка, локальная или глобальная.
там их еще многоКод:ENTRYPOINT #expr
Задает точку входа в программу (устанавливает PC в указанное значение в случае
успешной компиляции).
в оригинальном мануале
а еще нужно все варианты написаний уже имеющихся команд
я спотыкался об то что не было какого то завершения команд привычного мне из emuzwin
какойто возможно eif endif emacro endmacro
а еще иногда когда пишешь код зависимый от времянок
или еще что то
хочется написать два(и более) ветвления\варианта в столбик рядом
и чтоб это потом скомпилировалось линейно
x - какой нибудь символ разделительКод:какая нибудь команда + параметр количество столбиков
l5 x l6
ld a,b x xor b
rra x inc a
nop x
jp l2 x jp l3
end какая нибудь команда
вот бы как то это организоватьКод:l5
ld a,b
rra
nop
jp l2
l6
xor b
inc a
jp l3
и еще по возможности в каждом столбике должна быть возможность писать комментарии\расстановку
пусть даже это будет при помощи другого указателя начало комента не ";"
если так будет проще сделать
хотелось бы авто замену
делаю
replace "ld a,a", "defb $AA"
должно учитывать пробелы!!!
(или может при помощи дополнительных параметров должно пропускать любое их количество между и считать табы за пробелы. для случаев если написано ld_____a,__a)
и еще до компиляции
все ld a,a
подменяются на defb $AA
в sjasm-e по моему что то такое есть
но оно не дает нужного функционала (по моему оно не понимает пробел.
...и все! его уже нельзя использовать...)
нужно чтоб набрал
replace "d", "1"
а оно тебе заменило
ld a,a
на
l1 a,a
и выдало ошибку
оно поможет даже если будет возможность использовать ее только в начале исходника
еще не хватает возможности писать шестнадцатеричные цифры
вот так 1234h
как это работает в emuzwin
а потом при адаптации исходника...
по моему sjasm не понимает какой то вариант написания defb defw
db dw чтоле
периодически приходиться в блокноте жать заменить все
и ждать пока оно начухается (все же в курсе как он тормозит на 500К текстах))))
а чтото другое для замены запускать влом...
еще бы хотелось поддержку мнемоник i8080
чтоб не переправлять код с i8080
а просто вставлять готовое
можно в виде
i8080mode
mov a,a
endi8080mode
просить поддержки других процов наверное уже сильно жирно...
но если расширить возможности макросов и впилить автозамену
то на них можно будет дописать поддержку нужных команд
(скоро зарелижу свой компилятор какой то фигни написаный на макросах sjasm-a)))))
не помешало бы сохранение\экспорт в разные другие форматы для разных машин с i8080 z80
всяких zx80-ов, CPC-ов, РК-шек и тс-конф
чтоб не писать свой генератор контрольных сум
а просто указать адреса и все...
или нужно укомплектовать мануалы компилятора готовыми кусками кода
- - - Добавлено - - -
Кстате да!!!
помогла бы проверка на наличие опечаток и недописок (по словарю?)
и выдавание их в виде списка
zebest а как незакрытый dup может не давать ошибку????
не помешал бы вариант написания
if **** then
тк в некоторых компиляторах он используется
с таким же успехом в этом же исходнике он применяется в lua
и вполне его можно случайно написать в место
if ****
наверное нужно повысить совместимость с аль асмом (ALASM)
чтоб компилировать его код без большого количества переделок
чтоб переманить аль асмовцев в sjasm
и чтоб они делали более лучший софт используя ПЦ а не трахались в эмуляторе...
если есть какието разные трактования
можно режим совместимости при необходимости
alonecodersourcemode
всякий alasm код
endalonecodersourcemode
да и улучшеное понимание других старых компиляторов не помешало бы
а то куча софта написано на неизвестно чем
http://opensourcezx.untergrund.net/
и доки к этому неизвестно чему
тоже неизвестно где..
оказываеЦЦа - леххко.. Тем более любой сам может проверить.
видимо синтаксис и вообще наличие закрывающего EDUP не проверяется. Хотя может компилятор ищет его до конца текста, и не находит ничего похожего, ну и молчит,Но и ошибок не выдает, партизан...
При этом не только этот конкретный DUP не компилится, не компилится ВСЯ! программа, уточняю, елси кто-то не понял.
а из хотелок - как раз встроенные друг в друга DUP-ы мне бы иногда не помешали:)
Не знаю может уже устаревшая инфа - на RC6 (и 7 тоже вроде бы остальное не пробовал) ловил баг с ключём --dos866. Оказалось он криво работает в инструкции define. Если написать чтото типа:
DEFINE chetotam "В кодировке виндовс"
и подставить в например:
DB chetotam
то получим невнятные кракозябры. Было подозрение что два раза перекодировалось, но не проверял.
На одних и тех же исходниках новая версия валится, а rc7 нормально отрабатывает
https://i.imgur.com/A6i5vOF.png
внутри файла инклуды вида
INCLUDE "known/..... - отрабатывают
а когда доходит до того, где без директории known - валится.
Привет всем. Подскажите, кто сталкивался. SjASMPlusпо умолчанию не отслеживает пересечение адресов.
Например идет org 100 , потом кусок кода и потом org 200 и второй кусок кода, все в одной странице и в одном слоте, так вот если второй кусок кода затирает первый или первый перевалили 200 , SjASMPlus спокойно компилирует дальше не ругаясь и не предупреждая, что я вылез на другой сегмент.
Этот отслеживание как то можно включить ?
Hacker Grey, нет ему глубоко фиолетово
я так заполнение памяти делаю
Код:org #4000
ds #c000,#ff
org #5b00
...
я наоборот пользуюсь єтим
когда нужно сделать регулируемую(менять смещение) таблицу
проверку залазенья я делал как то так
Код HTML:org 100
l1
nop
nop
nop
l2
org 200
l3
nop
l4
if l2 > l3
display "WTF?? o_O"
endif
if (l2-l1) > 100
display "WTF?? v2 o_O"
endif
Хотя проверка и простое предупреждение было бы полезно
а что дает ASSERT?????
Не работает функция high в такой программе, почему?
mark:
org (high(mark+255))*256
другая версия, наверное?
попробуйте align 256
В итоге, кто какими связками пользуется? И, соответственно, порекомендует для разработки?
Знахарь, akelpad+sjasm+unreal+мешок утилит
пробовал TommyGun - чота вылетает
sjasm+Spectaculator+Emeditor
получаешь .sna, запускаешь и доводишь до ума.
А потом отдельный вопрос сборки в /tap/.trd/.scl
kate + bash + sjasm + mhmt + mctrd + xpeccy
с прямыми руками - и scl, и tap и trd сразу после компиляции
Ну плюсов вижу много )).. звучит привлекательно. Хорошо, а как максимально быстро прыгать между дебагом и асмом?
Знахарь, анрил умеет понимать список меток
sjasm умеет их сохранять
как то так
Цитата:
device zxspectrum48
org #8000
beginning
savesna "qsave.sna",beginning
labelslist "d:\_work\dropbox\unreal\user.l"
полагаю, дебаггер используется из unreal и в него можно попасть сразу после сборки кода? Имеется ввиду, не по нажатию esc, а автоматом, по аналогии со старым добрым STS - с выставлением начала там где указано в коде?
вообще в отладчик нужно попадать только если что-то очень сильно пошло не так, а не сразу же после запуска ) - иначе это не программирование, а "Угадай мелодию" )
это асм, а не php ;) здесь часто надо гадать мелодии. Причем наигранные на барабане )) или самосоздаваемые другими мелодиями ))). Более того, в средах разработок под всякие GBA, Nintendo DS все было, скажем, по аналогии с emuZwin - окно эмуля, окно дебаггера, окно дампов графики в RAM с реалтайм обновлением и все что только можно одновременно, с взаимодействием, переключением. Быстро. чОтко. Кроме того, в дебаге проводится времени порой в разы больше, чем в написании.
Однако, вопрос про состояние сегодняшних дел, опыте разработки и наличии/отсутствии удобства ввиду использования РС-разработки, повышении производительности, приятности против старого-добргого alasm+sts. О том, что делается быстрее, лучше, удобней. Напр, в отдельном окне дамп памяти в виде графики есть возможность сделать с помощью чего-то? (раз уж мы вспомнили GBA)