26

Re: восстановление External Zone, работа в эмуляторе

AlexBel пишет:

Нет, другой: http://forum.agatcomp.ru//viewtopic.php?id=214

Спасибо за "TASM_FIL.zip" во втором посте. буду разбираться. А .FIL для "K" типов файлов как создавать - что нужно прописывать в заголовке в поле TSL?

27 Отредактировано AlexBel (08-08-2021 15:23)

Re: восстановление External Zone, работа в эмуляторе

На память не скажу, но можно посмотреть, экспортировав K-файл через утилиту dos33c2.

Ещё рекомендую ассемблер из пакета сс65: http://forum.agatcomp.ru//viewtopic.php?id=150
TASM - приятная штука, но функционально сс65 мощнее.

28

Re: восстановление External Zone, работа в эмуляторе

AlexBel пишет:

функционально сс65 мощнее.

локальные метки начинающиеся с @ это очень удобно, не спорю.

29 Отредактировано Voldemar0 (08-08-2021 16:49)

Re: восстановление External Zone, работа в эмуляторе

> Из эмуляторов с дебаггером под Win/DOS - есть такие, что умеют софтверные BRK ставить (запоминать содержимое памяти, ставить там "00", затем после срабатывания точки останова восстанавливать оригинальное содержимое) и такие, что умеют перехватывать обращение на запись/чтение по определенному адресу?

Эмуляторам BRK ни к чему, он же может просто перед началом очередной команды сравнивать PC с заранее заданной точкой остановки.

DOS'воский эмуль так умеет делать:
http://agatcomp.ru/agat/PCutils/msdos.shtml
Но он не очень удобен: помимо того, что там нужен будет dosbox для запуска или что-то подобное, что запустит дос-прогу, там также нет умения совмещать видеорежимы и нет поддержки dsk-образов (aim, im, nib только).
В целом, он не был особо ориентирован на отладку, возможность использования точек остановки там была больше для отладки самого эмулятора.

Если будут какие-то совсем тупиковые случаи - прислай образ и скажи, что проверить - я посмотрю.
Могу отследить как команду по заданному адресу, так и доступ к адресу в памяти.
Но лучше опиши работу фрагмента, тогда я смогу отследить всё его поведение и, возможно, раскопаю какую нибудь логическую ошибку.

30 Отредактировано vvhitevvizard (08-08-2021 18:21)

Re: восстановление External Zone, работа в эмуляторе

Последняя версия External Zone определенно была скомпилирована в тестовом и фактически нерабочем состоянии, cмутно помню, что занимался в тот конкретный момент очередной оптимизацией (мое любимое занятие в те годы) - уменьшением кол-ва обращений к диску. В частности, вместо простого хранения имен используемых файлов и поиску их в каталоге дискеты по мере их затребования, переделал на начальную инициализацию, в которой имена файлов заменялись на фактическое их расположение на диске (начальный трек/сектор) для того, чтобы не обращаться к таблице размещения файлов, а считывать их тела непосредственно. Попутно проверялась комплектность файлов на диске.

Также стояла задача втиснуть больше в доступное логическое пространство - как итог, "редактор уровней" (ED) находится прямо на месте видимой текстовой страницы, по адресам 1200...1C00. Тип файла переделан с B на К.
Интересно, как я его запускал из Best 5.3??? К редактору относятся исходники ED_ED.ASM, ED_ET.ASM
----------------------------
Чтобы закончить то, что делал тогда и неожиданно бросил (попал в реанимацию и 3 года было не до этого),
попробую наладить рабочий обмен бинарники -> IDA disassembler -> ca65/tasm -> бинарники. Убедиться, что получается тот же самый код и затем начать вносить правки.
Проблема в том, что к 6502 я не обращался вечность, да и к системному программированию лет 10 (если не считать казуальное скриптописательство на AHK/Python). C той же IDA последний раз работал лет 15 назад. В общем, мне потребуется время.

Волдемар, читаю твою статью
http://forum.agatcomp.ru//viewtopic.php?pid=1698#p1698

31 Отредактировано vvhitevvizard (08-08-2021 19:08)

Re: восстановление External Zone, работа в эмуляторе

Поэтому вероятно будет немного глупых вопросов чтобы "вспомнить все".
в dos33c2w предварительно перегнал на PC SB файл как бинарник без перекодировки и без начальных 4 байт B файла (addr+len).
В IDA 7.2 загрузил его в системе команд MOS 6502. По адресу BA00, offset 0.
Комментарии для обращений к портам и устоявшимся адресам операционки IDA не ставит. Но наверное, есть  плагин?

32 Отредактировано AlexBel (08-08-2021 19:34)

Re: восстановление External Zone, работа в эмуляторе

Лично я ничего подобного не делал (тем более, что не знаю, откуда у 6502 порты и что такое "устоявшиеся адреса операционки") и здесь, судя по тому, что пишут, вряд-ли подскажут. Но, судя по результатам поиска в Гугле, информации по IDA довольно много. По строке поиска "IDA pro комментарии" по первой же ссылке был получен весьма приличный FAQ: http://www.idasoft.ru/faq/

33 Отредактировано vvhitevvizard (08-08-2021 21:45)

Re: восстановление External Zone, работа в эмуляторе

Лично я ничего подобного не делал (тем более, что не знаю, откуда у 6502 порты и что такое "устоявшиеся адреса операционки")

Паясничать только не надо, пожалуйста. "Под устоявшиеся адреса операционки" я имел в виду задокументированные и недокументированные (но дефакто используемые) переменные и буфера, как в случае Apple DOS 3.3 или The Best 5.3. Туда же и порты ввода-вывода от базовых конфигураций до редких карт расширения. IDA умеет такое для других архитектур - поэтому и спросил. :)

Но у меня конкретные вопросы по 6502 формату выходного файла. Alex, выше ты рекламировал IDA, как способный выдать несколько вариантов дизасемблирования, в том числе для TASM - из такого заявления я сделал вывод, что есть выбор в настройках. Их я не нашел.

IDA|File|Produce File|Create ASM... не позволяет выбрать тип ассемблера, то, что он генерирует, имеет такой вид:

; Segment type: Regular
                ;.segment RAM
                * =  $BA00
                STA     $C020
loc_BA10:                               ; CODE XREF: RAM:BA17↓j

Он немного отличается от формата твоего тестового .ASM файле c TASM (?) синтаксом (напр., двоеточие у меток):

; Формируем заголовок .FIL-файла - "отступаем назад" от начала программы
    .org    BEGINFILE-44
    .byte    $D4, $C5
BEGINFILE
    STA        $C732

И хотя вроде TASM'ом принимается, но не все конструкциии проходят. Напр.: "* =  $BA00" или ".segment" -> "unrecognized directive". Понятно, что это можно поправить вручную - спрашиваю на случай, если я пропустил что-то в выборе формата в IDA.

А в целом после правок все в порядке - код генерируется идентичный.

34 Отредактировано Voldemar0 (09-08-2021 09:57)

Re: восстановление External Zone, работа в эмуляторе

Я пока не понимаю, зачем тебе дизассемблер? Если есть исходники - скомпилируй их в Best и сравни потом побайтно с существующими K- файлами (в dos33c2 есть побайтное и построчное сравнение).

Если каких -то исходников не находишь - выложи бинарь соответствующий, может я найду.

<Игорь ещё не закончил съём твоей коллекции, я его просил ещё мостом переснять - возможно, там что-то дочитается. Если не дочитается, то можно добавить немного магии и попробовать вытащить данные из плохо прочитавшихся дисков. Если знать, что искать...>

35 Отредактировано AlexBel (09-08-2021 11:41)

Re: восстановление External Zone, работа в эмуляторе

vvhitevvizard пишет:

Лично я ничего подобного не делал (тем более, что не знаю, откуда у 6502 порты и что такое "устоявшиеся адреса операционки")

Паясничать только не надо, пожалуйста. "Под устоявшиеся адреса операционки" я имел в виду задокументированные и недокументированные (но дефакто используемые) переменные и буфера, как в случае Apple DOS 3.3 или The Best 5.3. Туда же и порты ввода-вывода от базовых конфигураций до редких карт расширения. IDA умеет такое для других архитектур - поэтому и спросил. :)

Но у меня конкретные вопросы по 6502 формату выходного файла. Alex, выше ты рекламировал IDA, как способный выдать несколько вариантов дизасемблирования, в том числе для TASM - из такого заявления я сделал вывод, что есть выбор в настройках. Их я не нашел.

Значит так, для начала. Не нужно мне приписывать намерения и действия, которые я не совершал. Вы, кажется, меня перепутали с какими-то клоунами - это они паясничают. Ещё один такой закидон и общение с Вами с моей стороны будет завершено навсегда. Сюда же "рекламирование" - я не занимаюсь рекламой IDA. И, на всякий случай - это не угроза (если, вдруг, так будут трактованы мои слова), а просто информация.
Далее. Если общаетесь с другими людьми, то и пишите так, чтобы было понятно не только Вам, но и им. Термины "устоявшиеся адреса" лично мне не знакомы и я сомневаюсь, что встречу их в приличной документации. С портами - аналогично, по тексту можно подумать, что речь идёт о портах 6502, которых там просто нет. Всё это - исключительно информация и отвечать на это не нужно.
Теперь по IDA. Options > General > Analysis > Target assembler - выбор в выпадающем меню, в моём случае - 4 варианта, в том числе TASM.

Spoiler

https://i.ibb.co/5X3knKg/idaasm.png

Для экспорта полученного ассемблерного текста использую команду:

idc.GenerateFile(idc.OFILE_ASM, idc.GetInputFile()+".asm", 0, idc.BADADDR, 0)

Вводится в поле внизу окна IDA, напротив Python

36 Отредактировано vvhitevvizard (09-08-2021 15:41)

Re: восстановление External Zone, работа в эмуляторе

Voldemar0 пишет:

Я пока не понимаю, зачем тебе дизассемблер? Если есть исходники - скомпилируй их в Best и сравни потом побайтно с существующими K- файлами (в dos33c2 есть побайтное и построчное сравнение).

Есть подозрения, что бинарники отстают от исходников на день/неделю/месяц.

Я в целом разобрался как переделывать исходники из формата штатного Агат9 ассемблера (где я его нашел в виде отдельно запускаемого файла - в ИКП вроде?) в тот, что усваивается TASM. Все нюансы различия синтаксиса решаемые, напр.:

DSECT
ORG $81
T DS 2 ;обьявление за границами бинарника без размещения данных

->

.org $81
T .block 2 

---

LDY #<ADDR   ;старший байт слова

->

LDY #ADDR>>8

итп.

Проблема только в знакогенераторе - даже латиница имеет свои коды. Но это тоже решаемо.
Попутно выяснилось, что в TASM локальные метки тоже возможны (но начинаются с подчеркивания "_" и должны вручную ограничиваться .module name директивами), все равно удобно для замены "LABEL-3" и "$+3" и прочих потенциально склонных к ошибкам конструкций, мешающих правке кода.
Cейчас переделываю все исходники под TASM (ограничусь пока им - лучшее враг хорошего - линкер от ca65 пока не нужен), чтобы перекомпилировать все и сравнить с бинарниками в моем распоряжении. Возможно появятся мысли, где именно я вносил правки в последние дни.

Игорь ещё не закончил съём твоей коллекции, я его просил ещё мостом переснять - возможно, там что-то дочитается.

Да, надеюсь - фактически, косвенно видно 3 дискеты с последними исходниками но с отличающимися бинарниками. Но остальные 2 дискеты с большим кол-вом ошибок, по несколько на каждый файл - с ними пока сравнивать не получается.

37

Re: восстановление External Zone, работа в эмуляторе

AlexBel пишет:

Options > General > Analysis > Target assembler - выбор в выпадающем меню, в моём случае - 4 варианта, в том числе TASM.
Для экспорта полученного ассемблерного текста использую команду:

idc.GenerateFile(idc.OFILE_ASM, idc.GetInputFile()+".asm", 0, idc.BADADDR, 0)

Вводится в поле внизу окна IDA, напротив Python

Alex, спасибо большое! Это именно то, на что надеялся!

38 Отредактировано vvhitevvizard (09-08-2021 19:32)

Re: восстановление External Zone, работа в эмуляторе

В процессе выяснилось, что исходники содержат ссылки на пару по-просту отсутствующих процедур :( одна критическая. Очень смахивает на ошибочное смешивание исходников разных версий - по крайней мере header файл не соответствует.
SB (6 блоков) загрузчик удается 1 в 1 компилировать из исходников в тот бинарник, что на диске рядом с ним. CONCEPT PROOF.

А вот основной файл SA (тип K) из исходника и бинарник на диске имеют огромное кол-во несовпадений:
https://pic.maxiol.com/thumbs2/1628522730.787614403.clipboard01.png
Разбираюсь :(

39 Отредактировано vvhitevvizard (10-08-2021 03:50)

Re: восстановление External Zone, работа в эмуляторе

Не смог найти документации на формат .FIL файла - она где-то выложена?
Экспериментально выяснилось, что размер заголовка может быть не только 44, как для B файлов:

; Формируем заголовок .FIL-файла - "отступаем назад" от начала программы
    .org    BEGINFILE-44
; Имя файла - 30 байт
    .byte    $D4, $C5, $D3, $D4, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0
    .byte    $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0
; Байты TSL (для типа B - нули)
    .byte    $00, $00, $00, $00, $00, $00, $00, $00, $00
; Тип файла (04 - B)
    .byte    $04
; Адрес загрузки (берём из адреса метки начала программы)
    .word    BEGINFILE
; Длина файла (берём адрес метки конца файла и вычитаем адрес начала файла)
    .word    ENDFILE-BEGINFILE

Но и 40. Мои эксперименты на примере K файла:

    .org    SA-40
;Имя файла - 30 байт. "SA":
    .db    $D3, $C1, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0
    .db    $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0
;9 байт TSL:
    .db    0,0,0,20h,0ECh,0FBh
    .db (SA_END-SA)>>8 ;длина в 100h блоках
    .dw    SA  ;адрес загрузки
;тип файла (00:T, 01:I, 02:A, 04:B, 08:S, 10:R, 20:K, 40:D, FF:<DIR> в системе Best):
    .db    20h ;K

SA .org 4000h

А что насчет остальных байтов в TSL - какие из них влияют на загрузку K файла (который по сути является D файлом)?

40

Re: восстановление External Zone, работа в эмуляторе

Вот здесь http://forum.agatcomp.ru//viewtopic.php?pid=1753#p1753 в файле agatfilK.inc пример заголовка .FIL-файла

41 Отредактировано vvhitevvizard (11-08-2021 20:17)

Re: восстановление External Zone, работа в эмуляторе

Спасибо, Alex. Пустые байты прокатывают. По крайней мере, для обычных K файлов, которые по функционалу B файлы, но с перенесенными 4 байтами (в начале) в TSL.

;9 байт TSL:
    .db    0,0,0,0,0   ;пустые байты
    .dw  SC_END-SC  ;длина
    .dw    SC  ;адрес загрузки

Поначалу смущало то, что dos33c2 конвертер экспортировал оригинальные файлы с непустыми данными в TSL (первые 5)
--------
Выяснились плюсы и минусы TASM. Плюсы - "терпит" UTF-8 файлы (метки возможны только с латиницей), нет проблем с агатовским "я" (0FFh) символом в комментариях.
Контроль над возможной утратой значения при передаче в аккумулятор слов (констант и адресов).

нашлись минусы:
1. Вот такой код вызывает ошибку в TASM, причем в его документации сказано, что "эта ошибка присуща адресации нулевой страницы в 6502". В доке также сказано, что "компилятор получает несовпадение значений меток на 1м и 2м проходах".

    .org 4000h
GN80
    LDA GN84-GN80,X   ;label value misalligned ERROR
GN84
    .end

Смысл этого кода - получить оффсет между двумя адресами, это нужно напр для организации jump tables.

2. Нельзя скомпилировать код с базой 0 (.org 0). Листинг файл создается и в нем все нормально, но бинарник - нулевого размера. :)

3. директива #include ищет файлы только в текущем каталоге (каталог с самим TASM),
нельзя задать полный абсолютный или относительный путь в директиве, нельзя задать пути для поиска включаемых файлов через другие директивы/опции командной строки - по крайней мере, в его доках я не нашел.

4. Помимо нестандартной кодировки знакогенератора, в своих исходниках External Zone нашел фривольное использование "defasc ASC1", содержимое такого ASC1 файла следующее:
https://pic.maxiol.com/thumbs2/1628693286.787614478.asc1.png
То-есть для шрифта в графическом режиме выкинуты все несуществующие символы, а используемые передвинуты в начало.
Решение есть в ca65 ассемблере через задание в конфигах таблиц перекодировки посимвольно.
Но это все решаемо в принципе - ASC "text" заменяется на .db массив результирующих байтов, взятых из бинарника...

42 Отредактировано vvhitevvizard (11-08-2021 20:04)

Re: восстановление External Zone, работа в эмуляторе

В целом, решил проблемы в посте 38. Создал исходники, компилируемые 1в1 в основные бинарники (SB,SA,SE,SC - кроме редактора ED). Пока без необходимых правок изменяющих логику программы.

Выяснились ужасные вещи. Я смутно помню процесс написания большого проекта на .ASM в те годы. Весь исходный код не помещался в памяти, ассемблирование разбивалось на множество файлов и ассемблировалось прямо в память в определенный сегмент, который был предварительно уже загружен с результатами ассемблирования других исходных файлов.
Удобного поиска по всем файлам, я уже не говорю про регулярные выражения, не было. Связи между файлами часто записывал просто на листочки.
Мрак. Итог - часть кода имеет по факту разные понятия точек входа для одной и той же процедуры, часть вызовов (5%) идет по абсолютным адресам... - то-есть код становится НЕперемещаемым, при малейших правках исходника получаем неработоспособный код.
Помню, я тогда был в процессе от избавления этого - но факт остается фактом - часть кода в бинарниках вообще не отражена в исходниках - просто пропущена из-за невозможности в те годы оценить весь проект и составить карту связей между модулями. Эти проблемы решил включением в исходник дизассемблерных вставок/массивов из бинарника.
-----
Но с правками все сложно. Уже при инициализации подпрограммы, загружающие файлы в разные банки, ведут себя странно - не грузят файлы при смене порядка загрузки.
Процедура, копирующая банки Best (0,E,F) в допозу, вызывает в эмуляторе писк ??? - видимо крешится или вызывает ошибку - но каким-то чудом продолжает работу.
При попытке перенести загрузчик на другой логический адрес, загрузка файлов становится медленнее в разы и заканчивается ошибкой в неинициализированной памяти.
Короче, магия какая-то... Надо оптимизировать способ отладки, чтобы разбираться детально.
----------------
Одной отладки через ручные BRK недостаточно. Буду создавать простейшие инструменты для ведения логов работы программы (в файле или хотя бы на экран), напр с содержимым регистров и запрошенной (небольшой) областью памяти. Копаюсь, пытаюсь найти как мне сделать вывод текста и опрос нажатия клавиш через уже существующие процедуры Best или через подпрограммы системного монитора (ПЗУ).

43 Отредактировано AlexBel (11-08-2021 19:38)

Re: восстановление External Zone, работа в эмуляторе

vvhitevvizard пишет:

Выяснились плюсы и минусы TASM.

TASM - ассемблер старый, уже давно не развивается. Он хорош тем, что в его формате IDA может сохранять, т.е. после дизасма можно сразу ассемблировать, ничего не меняя в формате. Ещё удобен (лично мне), чтобы быстро что-то сделать. Но если писать что-то крупное, то, думаю, лучше использовать ca65, ACME (хороший ассемблер, много умеет и поддерживается автором) или что-то подобное, более функциональное. Я сам очень привык к TASM, но пришлось чуть ли не силой переходить на другие. Сейчас выбираю между ca65 и ACME.

44 Отредактировано vvhitevvizard (11-08-2021 20:29)

Re: восстановление External Zone, работа в эмуляторе

Угу, но переделывать исходник еще раз под другой ассемблер я не буду - с задачей-минимум компиляция в оригинальные бинарники TASM справился. :) Выше я просто описал свои первые ощущения и грабли при работе с TASM - может, кому пригодится. Он маленький - можно смело помещать его в архив рядом с исходниками.

Теперь мои задачи - оптимизация отладочного процесса.

45 Отредактировано Voldemar0 (11-08-2021 19:33)

Re: восстановление External Zone, работа в эмуляторе

> defasc
Скорее всего ты её компилировал раньше в ассемблере Громова.
В доках к нему говорилось, что это бинарная (или дизассемблированная?) переделка ассемблера из "Диалогового Отладочного Комплекса" Школьницы. Добавлены некоторые команды (включая defasc) и что-то с буферами сделано (как-то расширенны). И вроде бы ещё там говорилось об изменённой работе с таблицей меток, что позволило сильно увеличить скорость компиляции.
Вот кус доки про defasc:

...
DEFASC
     Позволяет  в  процессе ассемблирования перекодировать
     текст, заданный командами ASC и REV, а также в форма-
     те '<символ>', из кодов ASCII в произвольный код. Фо-
     рмат команды:

         DEFASC <имя файла>
         
     Файл  должен  содержать таблицу перекодировки и может
     иметь любой тип. Таблица строится так, чтобы в нужной
     кодовой позиции стоял требуемый символ или код ASCII.
     Из  файла  берутся  первые 256 байт без контроля типа
     файла.  В  связи  с  этим использование файлов типа B
     нежелательно.
...

На форуме его не обсуждали, поскольку те, кто сейчас радикально влез в разработку, используют кросстрансляцию, а остальным хватает старого ДОК (он же "Ассемблер" в ИКП).

--

Заголовок FIL-контейнера всегда $28 байт. После него идёт тело файла посекторно, как он был в файловой системе dos33.

А то, что B- формат в своём теле содержит два байта адреса загрузки и два байта длины - это личное дело этого формата.

Также как A- содержит в начале своего тела два байта длины.

Если в dos33c2 открыть файл "как есть hex" - то эти байты будут видны в самом начале дампа.
Но дамп будет выводится как бы с офсета 0 (а не с "адреса загрузки").

В K- формат Виктор Цикоза вынес эти 4 байта в TSL вроде как для того, чтобы потом не морочиться со сложным чтением первого сектора (т.е. его нужно куда-то скинуть сперва в буфер, а потом отдельно скопировать, начиная с 4-го байта, в целевой регион ОЗУ). Вроде так в доках на Школьницу даже написано.

С другой стороны он получил проблему в том, что теперь копировщики, архиваторы и прочие проги вынуждены читать/хранить/копировать и кусок TSL, которая - формально - является служебными данными ОС и без прямого доступа к памяти ДОС недоступна (т.е. её нельзя получить через функции FileMan (так называется драйвер и его API файловой системы в dos33)). Для Цикозы-то это не было проблемой, потому что Школьница просто не имеет файловых утилит в своём составе. Всё ограничивается вызовами "читать/писать дамп ОЗУ с заданного адреса или с того, который храниться в ТСЛ". Причем прочитать в нулевую страницу нельзя, потому что именно смещение загрузки 0 в Школьнице как раз и означает "использовать данные ТСЛ" (причем для Т- формата оно недопустимо).

Ну и какой-нибудь старый-эпловский FID, вероятно, К- файл и не сможет правильно скопировать.
Он -то был разработан до Школьницы.

==

Немного о FileMan: эта часть совсем не упоминалась в агатовской документации, хотя она отлично существовала в dos33 семёрки. Она есть и в ИКП-Бейсике, но там до неё уже сложнее дотянуться.
FileMan позволяет обращаться к файлам любых типов, используя типичные вызовы fopen/fread/fwrite/lseek/fclose. Т.е. можно было прочитать любой кусок файла любого типа в заранее заданный буфер.
И bload именно так и поступает: запрашивает 4 первые байта из B- , думает над ними, потом запрашивает остальную часть файла, указывая уже известную точку загрузки и, таким образом, все сложности чтения неполного первого сектора падают на FileMan, который надрессирован на подобные запросы.

Но поскольку о FileMan практически никто из агатовских программеров не слышал (кроме тех, кто добыл книжки по эплу и перевёл их, что-то вроде "Под яблоней DOS"), то каждый изобретал свой велосипед, той или иной степени корявости. И даже вполне развитые BTK и The BEST имеют гораздо меньше возможностей по управлению файлами. Пожалуй, Спрайт-ОС была достаточно развита в этом отношении, но она - совсем другая история.

46 Отредактировано AlexBel (11-08-2021 19:38)

Re: восстановление External Zone, работа в эмуляторе

И ещё - эмулятор "Агата" (я про эмулятор Олега) имеет функцию отладчика, вызываемую через F8. Этот отладчик, несмотря на небольшое количество команд, весьма удобен и, кроме прочего, позволяет загружать бинарные файлы прямо в память с определённого адреса. Насколько я помню, команда R. Например, можно загрузить бинарный файл с адреса 0x4000 командой 4000R и потом передать на него управление 4000G. Можно сохранить память в бинарный файл командой W. Думаю, это значительно оперативнее, чем гонять файлы через образы дисков. Полный список команд отладчика есть в справке эмулятора.

vvhitevvizard пишет:

Выше я просто описал свои первые ощущения и грабли при работе с TASM - может, кому пригодится. Он маленький - можно смело помещать его в архив рядом с исходниками

У меня именно так в проектах и сделано - TASM "в комплекте" с каждым проектом.

47 Отредактировано vvhitevvizard (12-08-2021 03:01)

Re: восстановление External Zone, работа в эмуляторе

AlexBel пишет:

И ещё - эмулятор "Агата" (я про эмулятор Олега) имеет функцию отладчика, вызываемую через F8.

им и пользуюсь. =) Но не хватает трассировки, пошагового исполнения итп

Voldemar, спасибо за факты по форматам. :) Я пожалуй начну записывать у себя, чтобы не потерять - больше их не найти нигде.

Voldemar0 пишет:

> defasc
Скорее всего ты её компилировал раньше в ассемблере Громова.
В доках к нему говорилось, что это бинарная (или дизассемблированная?) переделка ассемблера из "Диалогового Отладочного Комплекса" Школьницы.

Он у меня на дисках раскидан под именем A (чтобы запускать проще), 109 блоков.
Выглядит так (в его меню вход по Esc)
https://pic.maxiol.com/thumbs2/1628717259.787614478.clipboard01.png

И даже вполне развитые BTK и The BEST имеют гораздо меньше возможностей по управлению файлами. Пожалуй, Спрайт-ОС была достаточно развита в этом отношении, но она - совсем другая история.

Тогда мне было удобно работать под Best. Он позволял минимизировать размеры системы на диске и в оперативке. имел полный джентльменский набор из [LOAD/[SAVE, [READ/[WRITE, R/W, [PUT/[GET итп, командные файлы ОС выполняемые по [EXEC, редактора памяти/секторного редактора для задач взлома других программ (чем я занимался большую часть времени - ибо учился только на чужом коде, документации не было).
В USN comp (Москва) я видел одного из авторов этой ОС. :)
------
Вопрос по Best - может кто знает? В документации к нему прописано:

Помните, что Вы можете задавать свои переопределяемые клавиши, если их текущие значения Вас не устраивают. Особенно обратите внимание на клавишу "ST". 

Что за клавиша такая ""? На нее садится команда, выполняемая при загрузке Best.
И как в системе переопределять клавиши? EDIT: Сам себе отвечу - переопределение через УПР К (CTRL-K). Клавиша "ST" в Бесте - УПР-Ю. :)

И еще вопрос - знаю, звучит он глупо сейчас - но память злую шутку играет. Дату на метке дисков я ведь вручную менял? :) Смотрю, у каждого диска педантично расставлена дата... Знаю, что в стандартной конфигурации Агат 9 модуля часов не было.

48 Отредактировано Voldemar0 (12-08-2021 13:54)

Re: восстановление External Zone, работа в эмуляторе

> Я пожалуй начну записывать у себя, чтобы не потерять - больше их не найти нигде.

Про форматы файловой системы как раз В. Цикоза хорошо писал.
В документах на Школьницу, они есть у нас на сайте.
К семёркам это штатно шло, в электронном виде.

--

По шагам можно пройти в отладчике внутри виртуалки, вроде для BTK/Best был некий трассер.
Но не знаю, как он отнесётся к графике (т,е. будет ли переключать дисплей при входе-выходе в отладку).
Я когда-то на агат тоже писал свой отладчик с пошаговым проходом и другими плюшками, но он под дос и школьницу.
Для btk/best её надо допиливать.

--

Были аппаратные часы в виде отдельной платы. Но вряд ли она у тебя была - не штатная штука.
Её поддержка была в Спрайт-ОС, но в BTK/TheBest вроде бы не было.

В dos33c2 есть возможность редактировать метку тома.

--

> Он у меня на дисках раскидан под именем A (чтобы запускать проще), 109 блоков.
> Выглядит так (в его меню вход по Esc)

Вот это очень интересное замечание!
Так выглядит "Ассемблер" в поздних версиях ИКП.
Возможно, ассемблер Громова ушел в ИКП.
Про эти версии ИКП известно крайне мало. Не ясно даже, были ли они производства ЛЭМЗ или нет? Поставлялись за отдельные деньги или всем? Или с каким-то оборудованием в комплекте?
Одна из версий называлась ИКП-Кермит, что намекает на использование его в составе какой-то локалки (возможно, продавались с коммуникационными контроллерами)
И есть ещё версия ИКП-ЛС (локальная сеть).
Возможно, это всё делала или отдельная фирма или кто-то совсем частным образом.

Попробую сравнить код ассемблеров Громова и того, что есть внутри ИКП...

49 Отредактировано Voldemar0 (12-08-2021 21:11)

Re: восстановление External Zone, работа в эмуляторе

Дело сильно не прояснилось.

Нашел я этот файл A на 4 дисках. На одной он повреждён до записи (т.е. пара секторов прочиталась,
но с мусором), остальные три копии с повреждениями, но без несовпадающих участков.
Объединил, получил рабочую копию.
Поиск по коллекции показал, что файл этот у нас уже был.

Пока что наши археологи датируют эту находку периодом т.н. АГАТ-АССЕМБЛЕР.
Это переходное звено между ДОК Цикозы и Best Tools Kit от А. Голова.
Т.е. это считается переделкой ДОК Александром. Но до того, как он всё это в итоге привёл к собственной системе BTK.
В этот момент было несколько версий АГАТ-АССЕМБЛЕР, как для семёрки (видимо, чуть более ранних), так и для девятки. Но нет 100% уверенности, что на девятку этот ассемблер перетянул именно А. Голов.

Стало быть, к Громовскому ассемблеру эта версия отношения не имеет.

Проверка подтвердила, что о команде defasc ей не известно:


----> ИCXOДHЫЙ ФAЙЛ: ???
 ***** HEПOHЯTHAЯ KOMAHДA B CTPOKE    2


 ----> ИCXOДHЫЙ ФAЙЛ: ???
 0000:             1          LST  ON                           
                                              
 ***** HEПOHЯTHAЯ KOMAHДA B CTPOKE    2
 0000: 00 F8 FE    2    DEFASC 2,23,
 0003:             3                                            
                                                                
 KOЛИЧECTBO OБHAPУЖEHЫX OШИБOK:    2                            
                                                                
 OБHAPУЖEHЫ OШИБKИ:                                             
                                                                
 HEПOHЯTHAЯ KOMAHДA B CTPOKE    2  ???                          
 HEПOHЯTHAЯ KOMAHДA B CTPOKE    2  ???                          

Попробовал также скомпилять в нём файл T.WZ1 - тоже ошибка на defasc.

А вот ассемблер Громова 5.0:

TT.WZ1
----> Исхoдный файл: T.WZ1


----> Исхoдный файл: T.WZ1
0000:             1          LST  ON
0000:             2 ;ВНЕШНЯЯ ЗОНА СБ 07 10 95                   
0000:             3 ;ДЛЯ WZ: ТЕКСТОВОЕ СООБЩЕНИЕ
0000:             4 ;СНИЗУ ВВЕРХ ШИРИНОЙ 2 СТРОЧКИ
9900:             5          ORG  $9900     ;$700
9900:             6 TWZ1                                        
                                                                
9FF0:            81          LST  ON                            
                                                                
*** Ошибoк не oбнаруженo                                        

                                                               

Только вот на дисках у тебя пока что громовского ассемблера не обнаружено.
Хотя я пока не особо искал.

==

Также выяснилось, что этот ассемблер ("A") дважды встречался встроенным в ИКП.
Сделал себе пометки-кроссылки между автономным файлом и образом.

Историческая справка по этим образам:

Вроде бы ИКП, но странно переделанное меню ДОК, а может и что-то ещё.
Пришёл из коллекции Серкова (a*) и Лёвина (lmv*), родословную пока установить не удалось.

Между образами есть отличия в 0/3, но не ясно в чём суть
вроде там что-то вроде конфигуратора что ли?

Или всё таки защита?

В памяти отличия начинаются с $929A.

В обеих образах повреждена РАПИРА и Apple-включатель.

Надо сказать, что как Серков так и Лёвин были мощными АГАТ-программистами.
Но Лёвин увлекался базами данных, а вот Серков известен как автор крупным переделок агатовского Бейсика, выходящим затем под названием "Basic Master" (он у тебя есть на дисках под именем SYS.BASIC93).

Во всех случаях указанная в меню версия одна и та же : BEPCИЯ 11.05.89

На одном из дисков также был такой заголовок:

SBTL " ACCEMБЛEP OTЛAДOЧHOГO KOMПЛEKCA "
;
; 17.03.89 - БOЛЬШИE/MAЛEHЬKИE БУKBЫ
;            ДИPEKTИBA PAUSE
;            METKИ MOГУT HAЧИHATЬCЯ C . ИЛИ _
;            ПO F1 OБЪEKTHЫЙ HE COXPAHЯETCЯ
;            COЗДAHИE OБЪEKTHOГO ПO ORG *
;            БУФEP ИCXOДHOГO:  2800 - 77FF
;            БУФEP OБЪEKTHOГO: 7800 - 9BFF
; 28.03.89 - Директива REVerse
; 04.04.89 - Вложенные CHN и DSECT
; 17.04.89 - В CHN указывается только привод
; 25.04.89 - Ассемблер Агат-9
;
; Измeнeния внec Лиcин A.



SBTL "ЗAПPOC ПAPAMETPOB ACCEMБЛEPA"
;
; ASSMPAR: ЗAПPOC ПAPAMETPOB ACCEMБЛEPA - 14.03.86
; ИЗMEHEH BЫBOД MEHЮ ACCEMБЛEPA - 03.07.87
; CTЫKOBКA C ИЗМЕНЕННЫМ TEKCTOBЫM PEДAKTOPOM - 14.03.89
; ПOДMEHA CSWL/H HA COUT C MAЛEHЬKИMИ БУKBAMИ - 16.03.89
; Изменения для ДОК Агат-9 - 25.04.89
;
; Изменения внес Лисин А.


Лисин известен как автор официального теста ОЗУ девятки.
Выходит, Голов тут ни при чём ? Но вроде бы они все были с ЛЭМЗ...

Дальше бы Игоря надо, может он что-то добавил...
Или пообщался с Головым - они вроде в контакте.

/Вот такими плюшками мы тут балуемся/

50 Отредактировано vvhitevvizard (12-08-2021 23:18)

Re: восстановление External Zone, работа в эмуляторе

Эту версию ассемблера мне возможно переписали авторы The Best в USN comp (которые в те времена делали reverse engineering "Best Took Kit" А.Голова и много каких еще адаптаций - может они что-то правили и в этой версии).
На всякий случай приложил его к посту.

Лисин известен как автор официального теста ОЗУ девятки.

Cкинь пожалуйста образ дискеты с "тестом доп озу Лисина" - трудно найти его поиском. Кроме Фонографа, мне пока нечем допозу тестировать. :)


под названием "Basic Master" (он у тебя есть на дисках под именем SYS.BASIC93).

Полагаю, это то, что я запускал из Беста. Хотя раннее агатство у меня прошло под ИКП-шным классическим бейсиком.
Кстати, здесь можно тему сместить в сторону еще одной загадки - "Подземелья Черного Замка" я написал на Агат бейсике, но файлы (их несколько сотен должно быть, на три 840Kb диска) все типа T (являющиеся по сути бейсик файлами типа A, псевдокод) - их подсоединял через директиву CHAIN бейсика.
Но запускаемого файла типа A нет ни на одном диске. Либо стартовый диск игры отсутствует среди пре-пре чтения Игоря, напр потому что вообще непригоден (не раскручивается, полностью посыпалось рабочее покрытие итп), либо я как-то замаскировал запуск под B файл или с нулевой дорожки.

v03fdd, v15fdd - файлы типа T
v20fdd (а здесь бейсик файлы A типа (старая версия игры?), но снова без стартующего главного файла).

Игрушка может по прежнему представлять интерес даже сейчас - это текстовая RPG с огромным массивом текстов.

Post's attachments

Attachment icon A.FIL 27.29 kb, 126 downloads since 2021-08-12