В выложенной ранее коллекции ассемблеров 8080/Z80 было 5 CP/M ассемблеров с исходниками,
вот они отдельно.
Это очень самоотверженное решение. Для этого надо много энтузиазма.
По моему опыту, работая фанатично, ассемблер КР580 с возможностями ассемблера МИКРОН (с объёмом кода ~3 кб) довольно легко пишется за 4-5 дней (не напрягаясь за неделю). С добавкой условной компиляции и вычислений сложных выражений (со скобками) уходит ещё около недели (объём кода достигнет ~5 кб).
А чтобы обслужить хотя бы большинство макрокоманд, т.е получить полноценный макроассемблер уйдёт, как минимум ещё 2 месяца (объём кода возрастёт до 10 кб или более, исходник более 80 кб). И это тяжёлая работа. Для Z80 трудоёмкость надо увеличить на 20%. Я это знаю, т.к сам писал ассемблер КР580 для Специалиста в начале 90-тых (дописал уже для ОРИОНА, причём за несколько лет).
Для сравнения, исходник ассемблера М80 (обычный для 8080/Z80 с объёмом 16 кб) имеет дизассемблированный исходник в 190 кб (см.по ссылке выше) и доводили его профессионалы много лет.
Я хочу сказать, что даже для фанатика это довольно трудоёмко. Потому даже, если на изучение и приспособление чужого исходника уйдёт неделя или даже две-три, это будут трудозатраты на порядок меньшие. А для изучения грамотных ассемблеров лучше самому дизассемблировать Z80ASM24.
Будучи на вашем месте, я бы попробовал использовать ассемблер TASM$ В.Пушкова для ORDOS. Посмотрите его в эмуляторе ОРИОНА. Вряд-ли даже иностранные Z80-ассемблеры лучше, В.Пушков доводил его много лет. Чтобы его использовать возможно будет достаточно смоделировать в ОЗУ среду ORDOS, т.е входы в ПЗУ ОРИОНА и коды ORDOS загрузить в ОЗУ B800...BFFF.
Обычный Специалист легко совместить по входным точкам F800 с РК86 (это делалось простой схемой обеспечивающей, чтобы участок ПЗУ C800...C8FF читался и в области F800...F8FF). А в MX такую среду получить возможно ещё проще.
А если с TASM$ возникли бы сложности, то я бы адаптировал ассемблер CP/M (вероятно Z80ASM24, я с ним уже когда-то разбирался). Аналогично, как с ORDOS, чтобы работало без дисковода можно с'имитировать среду CP/M для ассемблеров сделанных под CP/M.
О... это вам здесь вряд-ли кто скажет (а вот на zx-pk.ru есть асмо-писатели). В фирменных ассемблерах всё очень сложно. Придётся долго разбираться даже имея исходник. Часть кодов 580 (например MOV/LD 40...7F и др.) вычисляются без таблиц. Фирменные грамотные ассемблеры имеют таблиц очень мало. А любительские ассемблеры имеют много таблиц, это тупо, но проще.
Я делал таблицу не одну общую, а несколько, для каждой группы команд своя структура. Общая таблица расточительна и невыгодна для 8-ми разрядки. Например, для однобайтовых команд это просто текст самой мнемоники и один байт кода. Первым байтом в таблице идёт байт задающий длину мнемоники (например, 3), далее с шагом 3+1 перечислены все однобайтовые мнемоники длиной в 3 буквы, затем число 4 (задающее следующую длину мнемоники) и далее с шагом 4+1 перечислены все однобайтовые мнемоники длиной в 4 буквы и т.д. Это можно посмотреть в файле TABLE.INC
вот здесь. Видел, что в M80, по крайней мере в одном месте, команды сгрупированы в таблицы по первой букве мнемоники.
А вот когда экономить ОЗУ не требуется, то проще не думать, а применить огромную таблицу. Когда я писал кросс Z80 мини-ассемблер и кросс Z80 мини-дизассемблер на ассемблере 8086 для отладчика в эмуляторах РК86 и ОРИОНА, то я так и сделал. Конечно мини-ассемблер без меток и выражений намного проще, чем полноценный ассемблер, потому на написание мини-ассемблера у меня ушёл всего один день (см.
здесь), потому, что я не заморачивался, чтобы сделать по-умному, не экономил ОЗУ. Но для 8-ми разрядки ассемблер всегда делают по умному, почти без таблиц. .