С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
ну и главное с нулями в начале
00000001
00000010
00100001
00000111
от сокращенной записи толку не будет
1
10
100001
111
так как не прослеживаются столбцы
конечно для себя я нагородил вот такое
но это не совсем то что хотелось бы
не сильно удобно использовать
Код:tmp_var0 = ((tmp_out and %00000001)/%00000001) tmp_var1 = ((tmp_out and %00000010)/%00000010)*$10 tmp_var2 = ((tmp_out and %00000100)/%00000100)*$100 tmp_var3 = ((tmp_out and %00001000)/%00001000)*$1000 tmp_var4 = ((tmp_out and %00010000)/%00010000) tmp_var5 = ((tmp_out and %00100000)/%00100000)*$10 tmp_var6 = ((tmp_out and %01000000)/%01000000)*$100 tmp_var7 = ((tmp_out and %10000000)/%10000000)*$1000 tmp_varA = tmp_var0 + tmp_var1 + tmp_var2 + tmp_var3 tmp_varB = tmp_var4 + tmp_var5 + tmp_var6 + tmp_var7 display tmp_varB," ",tmp_varA," ",/D,tmp_cnt
NEO SPECTRUMAN(24.08.2020)
Я тоже засел как-то с алгоритмом из-за того, что "SUB A,B" превратились этим ассемблером в два опкода - "SUB A" и затем "SUB B", что было ФАТАЛЬНО не тем, что мне нужно было. Главное, такие ошибки довольно трудно-отлавливаемые. Нахрена такие "фичи" добавлять, не понятно. Такие фичи должны быть включаемыми и по умолчанию выключенными, а не включенными и хрен знает как выключаемыми. Ну или они ХОТЯ БЫ должны быть корректно реализованы. В данном случае, по моему мнению, реализованы они некорректно, потому что мнемоникой предполагается синтаксис SUB [A,]B, и если конкретный ассемблер sjasm хочет как-то расширить синтаксис в этом месте, то должен учитывать необязательный неявный "A," вначале списка, а не тупо собирать кучу команд по списку регистров. Это мое мнение. Считаю, что здесь все же ошибка реализации. Вначале нужно удалить A из начала списка, затем уже реализовывать свои фантазии, и проблем ни у кого не возникло бы. И если кому-то нужно будет зачем-то получить ряд инструкций, начиная с регистра A (понятия не имею, зачем), то пусть пишет SUB A,A,B,C,D, и так далее, на здоровье, сколько угодно (т.е. все ноль раз), а не я вместе со всеми должен страдать, выискивая дизасмом, почему корректный алгоритм не работает. Ped7g пишет, что
но вместо того, чтобы помочь мне, программисту, создал еще больше проблем. Да нормальный тут у Зилога синтаксис. В SUB, AND, OR, XOR, CP не указывается A, потому что нет одноименных инструкций, работающих не с A. А у ADD, ADC, SBC указывается A, потому что есть еще ADD|ADC|SBC rp,rp, и возникла бы неопределенность. Обязан ли я помнить такие моменты, что SBC надо писать с A, а SUB - без A? Не обязан. Тут скорее неправильное трактование этого официального синтаксиса автором ассемблера, который В ПЕРВУЮ ОЧЕРЕДЬ должен был ПОМОЧЬ программисту с написанием программы, либо убрав "A,", либо, в крайнем случае, подсказывая ему о таких моментах предупреждениями или ошибками. Уж точно не мешать своими "фичами", трактуя код как-то по-своему, как какой-то сумасшедший. Ну два возможных варианта, автор. Тут не предусмотрено варианта - наассемблировать какой-то херни. Своими такими вот "фичами" "помогать" ассемблер должен где-то в десятую очередь, и то, если такой запрос поступил. А у нас тут в этом месте происходит конкретное такое вредительство, и иначе это не назвать. И, главное, куча человек уже написали о проблемах в этом месте, все опытные, уже с 30+ опытом программирования, но нет, "я - художник, я так вижу". Браво.
Решение проблемы двойными запятыми - костыльное, но да, работает. Добавил "OPT --syntax=abf", как рекомендует Ped7g, это работает. Но это костыль, потому что проблема, на мой взгляд, как я сказал, в реализации "фичи", а не в количестве запятых. Не понимаю, почему я должен добавлять какую-то хрень в код, чтобы наконец-таки получить чистый ассемблер. Ну окей, я свои личные проблемы решил добавлением директивы, но в ассемблере так и осталась некорректная реализация фичи. Ну это такова в целом философия автора, которая идет вразрез с моей философией. Я считаю, что база должна работать из коробки, а автор, очевидно, считает, что я вначале обязан использовать его выдуманные директивы, указать устройство, чтобы хотя бы что-то начало работать, например, зачем-то указать NOSLOT, чтобы ассемблировать по нулевому адресу, и что-то еще указывать, чтобы начать получать в итоге базовую базу, а не чьи-то фантазии на тему SUB A: SUB B.
И чего еще мне не хватило - это добавления \x## (16-чное 2-разрядное число) последовательностей в строковых параметрах для указания управляющих символов. И это для Спектрума, где куча управляющих символов, всякие управляющие AT, INK, PAPER, и т.д. Это я не понял, почему было не добавить. Серьезно, никому в голову не пришло сделать?! Очевидная же штука, казалось бы. Но нет.
В остальном, все супер, но я макросы не использовал, много в какие дебри не лез. ALIGN попользовал для выравнивания кода в паре мест - отлично подошло, DISP отлично работает. Какими-то другими изысками не пользовался. Половинками индексных регистров тоже, мне сподручнее было написать DEFB #FD и LD L,A, чем пользоваться фейками. В общем, мне вообще мало что нужно для счастья, так что я скорее всем доволен.
Последний раз редактировалось cafedead; 10.05.2025 в 18:32.
читаю инструкцию
нашел опечатку
- - - Добавлено - - -[void] _pc("code")
Parse string of Z80 assembly. Example: _pc("ADD A,B")
[void] _pl("label code")
Parse line of Z80 assembly. Example: _pc("SOMELABEL ADD A,B")
[integer] sj.calc("expression")
Se
все равно метки получаются плохо различимыми
![]()
Ped7g(24.08.2020)
yes, doesn't look well.
I would maybe try to use the CN ahead of instruction, and real labels on separate line ahead:
BTW, the "=" (alias "DEFL") is more like variable, and allows redefinition of the value. If things like `frq` are used for self-modify code, I would suggest to use EQU instead, which creates "constant" (attempt to redefine it second time in source will emit error about different value assigned).Код:frq = $+1 CN=CN+10 : ld de,$0123
With a bonus of the EQU maybe creating different visual feel in this case too:
Or maybe use macro? But that will explode the listing file, but if you are not planning to use listing very often for this area of code, it may help with the source (you can disable listing for particular part of source, if you are using listing to check other areas).Код:frq EQU $+1 CN=CN+10 : ld de,$0123
Код:countT MACRO cycles? CN=CN+(cycles?) ENDM CN=0 ld a,b : countT 4 and $70 : countT 7 frq=$+1 ld de,$1234 : countT 10 IF CN < 26 .((26-CN+3)/4) nop countT (26-CN+3)&-4 ENDIF
NEO SPECTRUMAN(24.08.2020)
а он и так у меня обычно не читаемый и весит мегабайтов 7
например листинг NSID_Emu весит 15MB
туда давно бесполезно заглядывать...
- - - Добавлено - - -
интересно
возможно оно даже будет работать с adp
а на каком pass-е уже будет результат?
так как полученные цифры еще будут передаваться lua для расчета таблиц
- - - Добавлено - - -
а как это делать?
- - - Добавлено - - -
ну и на верно только мои исходники компилируются столько времени в sjasm
![]()
Последний раз редактировалось NEO SPECTRUMAN; 24.08.2020 в 04:48.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)