Pyk, спасибо за инструкции по увеличению ОЗУ и ПЗУ СПЕЦИАЛИСТА в эмуляторе EMU80. Сделал себе пока 1 мб ОЗУ, для RAM-диска этого хватит. Также увеличил ПЗУ до 256 кб, хотя в реале пока использую ПЗУ размером всего в 8 кб. Но это тоже пригодится, т.к в это ПЗУ (не для реала, а для эмулятора) смогу "засунуть" постоянно нужные программы, например, можно избавиться от загрузки RAM-диска с МГ-ленты или вообще из резидентного ПЗУ сделать CP/M-диск с атрибутом R/O.
Недавно попробовал отлаживать программы для СПЕЦИАЛИСТА, отчего возникли некоторые пожелания по улучшению отладчика, встроенного в эмулятор EMU80.
Чтобы изменить ячейку памяти, я выхожу в окно дампа и в окне дампа набираю A, затем, когда адрес подсветится, ввожу адрес, например 8FFC. Надо, чтобы указатель по байтам (подсветка байта) установилась именно на байт в адресе 8FFC, а не на 8FF0, как сделано сейчас. Приходится тратить время вручную перегоняя курсор на нужный байт.
По директиве U пропускаться должна только единственная команда HALT, а не любая команда, т.к пропускать осмысленные команды не надо, это приводит к зависам. А иногда случайно нажимаешь на U и полезная для программы команда пропускается и происходит завис.
И специально для команды HALT нужна команда по её забитию в коде программы, когда с данным куском программы уже разобрались и остановка в данной точке больше не нужна. Сейчас это приходится делать вручную. Т.е нужна команда N, которая работает только, если остановка на команде HALT. Тогда по этому адресу вместо кода 76 должен подставляться код 00, что является командой NOP.
И ещё желательно ввести директиву T (от слова TEXT). В окне мини-дизассемблера тексты отображаются какими-то случайными командами ассемблера. Подведя подсветку (указатель текущей строки) к началу предполагаемого текстового фрагмента и нажав T, данный фрагмент должен дизассемблироваться как оператор (или несколько операторов) 'DEFB' или оператор 'DC', т.е текстОвой ASCIIZ-строкой или строкой в которой в последнем символе установлен старший бит в качестве признака конца строки.
Это нужно мне при отладке (т.к использую RST), а также при просмотре кодов программ ОРИОНА от ОРИОНСОФТ, а также многих программ CP/M, где используется тот же способ размещения текста.
Я вывожу текст по RST 18, и даже когда RST недопустимы, то всё-равно текст вставляю непосредственно в программу. Т.е вместо RST 18, ставлю CALL TXTOUT, а сам текст ставится сразу-же после этого CALL. А продолжение программы начинается только после стоп-байта 00 или выставленного старшего бита символа. Потому на экране вашего отладчика вместо программы я вижу мусор. И проблема найти конец текста, чтобы поставить стоп точку именно в этом месте.
Проблема даже не найти, а именно поставить стоп точку, т.к предыдущий перед стоп-байтом символ дизассемблируется как 2-х или трёхбайтовая команда и поставить стоп-точку на продолжении программы сразу за стоп-байтом текста невозможно, т.к этого адреса просто нет в дизассемблированном куске программы, а вся последующая программа искажена. Т.о не имея директивы T не только отлаживать, но даже просто просматривать такую программу невозможно.
Вот смотрите как выводят текст CP/M-программы. Естественно грамотные программисты на ассемблере всегда используют макро-команды. И для вывода текста обычно вот такие:
Код:
.
fmssg EQU 9
CPM MACRO PARAM
LD C,PARAM
CALL 5
ENDM
MSSG MACRO PARAM
LOCAL M1
CALL M1
defb PARAM
defb '$'
M1: POP DE
CPM fmssg
ENDM
CRMSSG MACRO PARAM
LOCAL M1
CALL M1
defb 13,10
defb PARAM
defb '$'
M1: POP DE
CPM fmssg
ENDM
Тогда программист чтобы вывести текст пишет строку
Код:
.
MSSG 'Drive specifier out of range'
что выглядит почти как строка в языке высокого уровня.
А когда я пытаюсь просматривать фирменные программы написанные на макроассемблере в отладчике эмулятора EMU80, возникают вышеописанные проблемы. В своём эмуляторе (для MSDOS) я, естественно, в встроенном мини-дизассемблере дизассемблирую байты после RST 18, как текст.
Это только программисты для РК86 лишённые макроассемблера для вывода текста вынужденно использовали вот такую конструкцию:
Код:
.
MSSG EQU 0F818H
LD HL,TXT
CALL MSSG
.....
TXT: DB 'HELLO !',0
Причём текст обычно размещали в конце программы, оттого трудно уловить логику программы просматривая её в мини-дизассемблере, тогда как, когда текст встроен прямо в код, разобраться в программе проще.
А ещё возмущает, почему мнемоника Z80 в мини-дизассемблере так обижена. Мнемоника КР580 выводится нормальными буквами, а мнемоника Z80 выводися ущербными маленькими буковками. Большинство программистов на ассемблере ценят своё зрение и пишут программы большими буквами, тем более что легко перепутать маленькую L и 1. Для меня программа в мнемонике Z80 выглядит непривычно, это неудобно и раздражает.
PS. В новых версиях, Вы забыли сделать ALT-F11 работающим в отладчике (причём с автозакрытием окна отладчика по ALT-F11 в любом из окон).
- - - Добавлено - - -
И не надо в дампе показывать показывать псевдографику РК86.
В СПЕЦИАЛИСТЕ и в ОРИОНЕ нет такой псевдографики в фонте. А символы выше 80H тоже стоит отображать. Или в виде КОИ-8 или сбрасывать старший бит, делать XOR 20H и отображать инверсно. Тогда в дампе легко находить тексты КОИ-8. А лучше просто выводить символы (по крайней мере с весами C0...FF) в КОИ-8. А ещё лучше выводить в дампе и псевдографику (т.е коды 80...BF), но не от балды, а по книге В.Фигурнова "IBM PC для пользователя" (ISBN 5-279-00900-8).