Вход

Просмотр полной версии : Вывод меток в STS x.x



siril
15.10.2012, 10:45
На маке есть пара эмулей спектрума (FUSE, Unreal Speccy Portable), но в них нет встроенного монитора-отладчика.

Посему использую STS, установленный вместо rom128 (http://zx.pk.ru/showthread.php?t=14018&highlight=STS).

И захотелось мне видеть текстовые метки вместо цифр.
(Метки генерируются средствами sjasmplus).

Внимание вопрос, как и в каком формате (в какую банку памяти) закинуть метки, чтобы STS их подхватывал?

Shadow Maker
15.10.2012, 11:21
Смотря какой версии STS. Вообще метки расчитаны на Аласм с 5 версии начиная (если мне память не изменяет). В 5.1 в 3 банке лежали вроде.

А так вообще например Аласм каждый раз модифицирует STS, указывая ему страницу с метками и начало меток. Формат меток такой же, как у Аласма, конечно же.

siril
15.10.2012, 11:32
Смотря какой версии STS. Вообще метки расчитаны на Аласм с 5 версии начиная (если мне память не изменяет). В 5.1 в 3 банке лежали вроде.

А так вообще например Аласм каждый раз модифицирует STS, указывая ему страницу с метками и начало меток. Формат меток такой же, как у Аласма, конечно же.

Осталось узнать какой формат меток у аласма =) Где бы эту информацию почерпнуть?

Shadow Maker
15.10.2012, 11:40
Ну там че-то простое же.

#a, #2,#60, #0, #0, "liris"

Ну собственно 10 - длина сегмента, #6002 - адрес метки, 0 0 я хз что такое (мож это для всяких там областей памяти, чтобы второй адрес указать? поэкспериментируй), liris = обратная метка (siril то бишь)

Вообще сам глянь, оно в STS 7.4 по #fe71 находится эта печаталка меток. Ну или в сорсах STS посмотри.

siril
15.10.2012, 11:42
понятно, спасибо =) поковыряюсь в STS'е =)

Shadow Maker
15.10.2012, 11:52
Вообще вот тут довольно подробно расписано http://www.zxpress.ru/article.php?id=1688 по поводу модификации процедуры печати меток, там вроде всё, что надо.

---------- Post added at 11:52 ---------- Previous post was at 11:48 ----------

Во, еще более подробно нашел:


Таблица меток состоит из 64 или 128 (зависит от версии) списков,которые объединяют метки с одинаковыми ключевыми суммами.Это не нужно для показа меток, например, STS плюёт на эту структуру.
+0 - младшие 6 бит - длина всей метки (т.е. длина имени метки плюс 5 ). Если бит 6=1, то метка - имя макроса, если бит 7=0, то метка определена. STS на это тоже плюёт. Для последней (с точки зрения STS'а ) метки +0 содержит 0. Hа ней STS останавливается.
+1,2 - ЧИСЛО, т.е. содержимое метки. STS ползёт по меткам,пока число не совпадёт с нужным ему.
+3,4 - адрес следующей метки в ЭТОМ списке. STS'у не нужен, т.к. он движется по всем спискам и вообще в обратном порядке.
+5 - имя метки задом наперёд.
В STS 5.x, 7.x: в ячейке #fe88 номер первой страницы меток (для порта #7ffd ), номера остальных страниц не передаются; в ячейках #fe7c, 7d адрес хвоста таблицы меток, с которого начинается поиск (+1).
Unreal Speccy (v0.27) ищет в #17, #57 страницах STS и берёт данные о странице и адресе начала таблицы меток из него.

siril
15.10.2012, 14:05
Shadow Maker, спасибо огромное!

Люди, кто пользуется этим бесчеловечным Alasm'ом, помогите сконвертировать аласмовские исходники STS74 (во вложении) в нормальный текст =)

(Чтобы по-человечески изменить в нём процедуру печати метки и скомпилить sjasmplus'ом).

Я уже весь упарился O_O

jerri
15.10.2012, 15:03
siril, это же Алон :) тебе никто не поможет
зачем тебе кстати эта печать метки?

siril
15.10.2012, 15:26
siril, это же Алон :) тебе никто не поможет
зачем тебе кстати эта печать метки?

чтобы видеть названия подпрограмм и областей данных в отладчике =)

Shadow Maker
15.10.2012, 16:43
Тебе в чего? В sjasm? И таки зачем все же тебе сурсы СТС? Тебе он в пень не упирался, тебе надо тупо конвертор меток написать в формат аласма и готовый бинарь подключать, нафиг компилить-то с нуля.

siril
15.10.2012, 17:45
Тебе в чего? В sjasm? И таки зачем все же тебе сурсы СТС? Тебе он в пень не упирался, тебе надо тупо конвертор меток написать в формат аласма и готовый бинарь подключать, нафиг компилить-то с нуля.

Мне бы просто этот STS74.H в текст, чтобы нормально процедуру вывода метки переписать. Или хотя-бы посмотреть.

Патчить уже готовый компиленный STS73/STS74 вообще не улыбается - х/з/ что там происходит и по каким адресам эти процедуры лежат - совершенно не понятно.

А написать конвертор меток в формат аласма конечно, можно, но уж больно он... специфический, если не сказать покрепче =) И я до сих пор не уверен, что эта процедура вообще работает - подсовывал ей данные в формате аласма - ничего не выводилось.

Shadow Maker
15.10.2012, 18:05
Не, конвертировать алоновский код в sjasm это проще написать с нуля :) В тексте закинуть могу, не проблема, тока ты хрен его скомпилируешь.

siril
15.10.2012, 19:40
Не, конвертировать алоновский код в sjasm это проще написать с нуля :) В тексте закинуть могу, не проблема, тока ты хрен его скомпилируешь.

Да, я уже разобрался =) Неправильно в ALASM исходник загружал, не по WORK, а по IMPORT - естественно нихрена при EXPORT не происходило =)

В итоге сохранил в .txt, наконец =)

Действительно, адовый ад =)

Shadow Maker
15.10.2012, 22:14
Процедура работает 100%, просто ты скорее всего не туда положил. Могу тебе сделать снапшот с STS и метками (сгенеренными) с компилируемым исходником (типа как у тебя в указанной теме) в качестве примера, хочешь?

siril
15.10.2012, 22:52
Процедура работает 100%, просто ты скорее всего не туда положил. Могу тебе сделать снапшот с STS и метками (сгенеренными) с компилируемым исходником (типа как у тебя в указанной теме) в качестве примера, хочешь?
да, был бы очень благодарен!

Shadow Maker
15.10.2012, 22:56
В общем вот. Всё настолько прозрачно, насколько вообще я смог написать.

http://zx.logtech.ru/STS.zip

Я думаю ты прекрасно разберешься.

В качестве примера загружаешь SNA, идешь на адрес #6000 и жмешь шифт+5, должен увидеть две метки SIRIL0 и SIRIL1

siril
15.10.2012, 23:31
В общем вот. Всё настолько прозрачно, насколько вообще я смог написать.

http://zx.logtech.ru/STS.zip

Я думаю ты прекрасно разберешься.

В качестве примера загружаешь SNA, идешь на адрес #6000 и жмешь шифт+5, должен увидеть две метки SIRIL0 и SIRIL1

да, всё чудесно работает. с форматом разобрался, думаю конвертор в процесс сборки включить никаких проблем не составит =) спасибо большое за помощь!

Shadow Maker
16.10.2012, 00:37
Да не за что, порадуй каким-нить релизом в обозримом будущем :)

siril
16.10.2012, 15:26
Ура, готово =)

Теперь компиляция происходит следующим образом:



#компилируем, чтобы получить файл с метками:
sjasmplus <filename.a80> --sym=labels.txt

#конвертируем метки в формат аласма:
labels2alasm labels.txt alasm.labels

#компилируем ещё раз, чтобы подхватились метки в формате alasm'а
sjasmplus <filename.a80> --sym=labels.txt


В самом исходнике должна быть инструкция типа (в зависимости от того, на какую страницу и адрес настроена процедура вывода меток в STS):


page 3
org #c000
incbin "alasm.labels"


В самом STS сделал ещё одну модификацию (увеличил длину вывода меток до 14).


org #fea3
db #e ;выводимая длина меток (по умолчанию - #0a)

Во вложении - исходный код labels2alasm и версии для win и mac.
обработки ошибок нету, си-кодер из меня тот ещё =)