Просмотр полной версии : I8080 TO Z80 SOURCE TRANSLATOR
Борясь на работе со стрессом, набросал примитивненький транслятор иcходного текста на ассемблере Intel 8080 в текст для Z80.
Прошу прощения, но на REXX.
Сохранение исходного форматирования не обеспечивается.
Исходный текст:
spcash: push psw
call spcs2
pop psw
ret
spcs2: lhld svv1 ;if INFO1 is the constant:
shld sr0 ;<constant value> into sr0
call cmh
shld sr2 ;-<constant value> into sr2
dcx h
shld sr4 ;-<constant value + 1> into sr4
Текст после трансляции:
spcash: push af
call spcs2
pop af
ret
spcs2: ld hl,(svv1) ;if INFO1 is the constant:
ld (sr0),hl ;<constant value> into sr0
call cmh
ld (sr2),hl ;-<constant value> into sr2
dec hl
ld (sr4),hl ;-<constant value + 1> into sr4
Прошу прощения, но на REXX
Кто такой Рекс?
perestoronin
29.11.2015, 17:21
https://ru.wikipedia.org/wiki/REXX
perestoronin
29.11.2015, 17:25
Тот не знает Рекс, кому не довелось написать хотя бы один командный файл для больших машин, списанных в 90е.
И для диалоговых панелей очень удобный инструментарий был и тоже опирался на Рекс.
И сейчас развивается Рекс,, хотя всякие поделия, лоббируемые руководствами оазличных ТНК, оттеснили Рекс.
Но в любом случае, Рекс не самый оптимальный выбор для написания транслятора.
Ха ХА ХА, я же говорил. Спасибо Ewgeny7, за такой лютый вин.
Немного объясню, недавно с пол года назад, Sergey, мне заливал что рекскс знает последний ... ну а коли я его не знаю то я вообще пропащий индивид для всего прогрессивного человечества, что как бы не исключает одно другого тем не менее не является показателем.
:v2_laugh: :v2_lol:
Добавил в первый пост новую версию транслятора. Теперь числовые шестнадцатеричные аргументы команд, в т.ч. операторов "DB" и "DW" переводятся из вида "0xxh" в принятый на спектруме "#xx". Исключение составляют аргументы, представляющие собой арифметические выражения, - пока не осилил. :(
Простите, а можно повыпендриваться не совсем по теме?
Ломаю голову над этой записью:
mov ax,020h shl 8
Это что? Догадываюсь что можно было проще 2000h написать, но зачем так людей гнобить?
из контекста неясно где используется.
примитивненький транслятор иcходного текста на ассемблере Intel 8080 в текст для Z80
Интересный транслятор, иногда нужный. Но крови немножко он мне попиль.
'sub e' транслирует в 'sub a,e', возможно в каких то ассемблерах такая запись и правильная, возможно, но ужасм это понимает как две команды ((((((
Ну и немного меньшая головная боль с DB
было _END: DB 0,0,0E6h
стало _END: DB 0,#,0E6
Так то жи правильно??
А так да, спасибо )
Error404
31.03.2016, 22:40
из контекста неясно где используется.
Да ладно, задача то нередкая - какой-нить листинг из ужасных интеловских мнемоник (а листингов немало - разных билиотечек полезных понаписано) перевести в нормальный вид (у Z80 самый красивый ассемблер на мой вкус, в особенности в классических реализациях, например пакете M80 от Microsoft). Эта задачка очень давняя и популярная - от реализаций в CP/M, например XLATE5 (http://www.retroarchive.org/cpm/cdrom/CPM/UTILS/ASMUTL/XLATE5.LBR) (а также XIZ/XZI (http://www.armory.com/~rstevew/Hidden/CPM/xiz.zip) - соответственно в обе стороны, еще ZCON и ITOZ были - тоже аналогичные) в прошлом веке, до сравнительно современных - например в компиляторе Z88dk (https://github.com/dex4er/deb-z88dk/tree/master/support/8080)
Кстати, и обратная задача тоже интересная, в частности для проверки совместим ли бинарно с 8080 код, написанный в мнемониках Z80. Т.е. запустится ли он, собранный ассемблером Z80, на 8080.
Да ладно, задача то нередкая - какой-нить листинг из ужасных интеловских мнемоник (а листингов немало - разных билиотечек полезных понаписано) перевести в нормальный вид (у Z80 самый красивый ассемблер на мой вкус, в особенности в классических реализациях, например пакете M80 от Microsoft). Эта задачка очень давняя и популярная - от реализаций в CP/M, например XLATE5 (http://www.retroarchive.org/cpm/cdrom/CPM/UTILS/ASMUTL/XLATE5.LBR) (а также XIZ/XZI (http://www.armory.com/~rstevew/Hidden/CPM/xiz.zip) - соответственно в обе стороны, еще ZCON и ITOZ были - тоже аналогичные) в прошлом веке, до сравнительно современных - например в компиляторе Z88dk (https://github.com/dex4er/deb-z88dk/tree/master/support/8080)
Кстати, и обратная задача тоже интересная, в частности для проверки совместим ли бинарно с 8080 код, написанный в мнемониках Z80. Т.е. запустится ли он, собранный ассемблером Z80, на 8080.
там creator, в предыдущем сообщении выпендривался. вопрос ему как бы был :)
denpopov
01.04.2016, 20:09
вроде бы есть такой:
http://forum.tslabs.info/viewtopic.php?f=9&t=621
пока в разработке.
пока в разработке.
Проверял твой конвертер на том же самом исходнике, Вычисление числа Пи на ассемблере (http://zx-pk.ru/attachment.php?attachmentid=54829&d=1447445301),
что и транслятор повыше.
Теперь то я знал, что должно получится в итоге, так что было чуточку побыстрее.
Комменты на великом и могучем игнорирует напрочь, ладно.
С комментами совсем бяда. Без зазрения совести вставляет их в аргументы. Например:
Было
ld (NINES),a ;NINES = 0;
cpl
ld (DIGIT),a ;DIGIT = -1;
ld (DOT),a ;DOT = true;
ld bc,N ;for(j=0;j<N;j++) {
стало
ld (NINES ; NINES = 0;),a
cpl
ld (DIGIT ; DIGIT = -1;),a
ld (DOT ; DOT = true;),a
ld bc,N ; for(j=0;j<N;j++) {
было cp h
стало call p,h
И желательно чтобы метки не выравнивал вместе с кодом, хотя это меньшая проблема.
Масштабирование окна тоже желательно включить.
denpopov
02.04.2016, 08:23
спасибо, отправил g0blinish'у. сказал, пофиксит.
'sub e' транслирует в 'sub a,e', возможно в каких то ассемблерах такая запись и правильная, возможно, но ужасм это понимает как две команды ((((((
Ну, тут просто: поправь скрипт в текстовом редакторе, строки 235 и 239:
Так сейчас:
I2Z_13:
if upper(cargs) = "M" then do
cargs = "(hl)"
end
oline = label||" sub a,"||cargs||" "||comment
return
I2Z_14:
oline = label||" sub a,"||cargs||" "||comment
return
будет:
I2Z_13:
if upper(cargs) = "M" then do
cargs = "(hl)"
end
oline = label||" sub "||cargs||" "||comment
return
I2Z_14:
oline = label||" sub "||cargs||" "||comment
return
Ну и немного меньшая головная боль с DB
было _END: DB 0,0,0E6h
стало _END: DB 0,#,0E6
Так то жи правильно??
А так да, спасибо )
А здесь сложнее. Знаю что глючит, пофиксить пока ума не хватает. Придётся ручками дату переносить. Да и в NP++ это достаточно удобно.
Если, действительно, есть спрос на мой скрипт, постараюсь довести до ума.
Если, действительно, есть спрос на мой скрипт, постараюсь довести до ума.
Ну у меня как бы есть, мне Z80 мнемоники понятнее и ужасм привычнее, но комуу-то - наеборот....
Upd
Еще какая-то заморочка с псевдооператорами HIGH\LOW
такой вариант
mvi m,low(SCR_BUF)
mvi m,high(SCR_BUF)
транслирует в
ld (hl),low(SCR_BUF)
ld (hl),high(SCR_BUF)
и получается как метка, а надо с пробелом между
ld (hl),low (SCR_BUF)
ld (hl),high (SCR_BUF)
Или он их вообще чистаа как метки транслирует?
Тут скорее проблемы исходного асма, который допускает слитное написание псевдооператора и аргумента, а ужасм это понимает по своему...тогда только ручками править ((((
Или он их вообще чистаа как метки транслирует?
Естественно, как метки.
тогда только ручками править ((((
Целью написания скрипта было избавиться от рутинной работы по трансляции мнемоник. Можно, конечно, допилить скрипт.
Но, по-моему, для трансляции high/low достаточно двух операций замены в любом текстовом редакторе:
"заменить всё" "high(" на "high (" и "low(" на "low (".
denpopov
17.04.2016, 13:02
Нашелся еще один
Проверял твой конвертер на том же самом исходнике, Вычисление числа Пи на ассемблере (http://zx-pk.ru/attachment.php?attachmentid=54829&d=1447445301),
что и транслятор повыше.
Теперь то я знал, что должно получится в итоге, так что было чуточку побыстрее.
Комменты на великом и могучем игнорирует напрочь, ладно.
С комментами совсем бяда. Без зазрения совести вставляет их в аргументы. Например:
Было
ld (NINES),a ;NINES = 0;
cpl
ld (DIGIT),a ;DIGIT = -1;
ld (DOT),a ;DOT = true;
ld bc,N ;for(j=0;j<N;j++) {
стало
ld (NINES ; NINES = 0;),a
cpl
ld (DIGIT ; DIGIT = -1;),a
ld (DOT ; DOT = true;),a
ld bc,N ; for(j=0;j<N;j++) {
было cp h
стало call p,h
И желательно чтобы метки не выравнивал вместе с кодом, хотя это меньшая проблема.
Масштабирование окна тоже желательно включить.
А ты точно брал последнюю версию?
cp h исправил
было cp h
стало call p,h
Где ты был два дня назад :((
а5 я на эти "ср" напнулся. Посмотрю на исправленной версии как
- - - Добавлено - - -
Неее, пока все плохо
http://s2.micp.ru/SjYih.jpg
Слева код после твоего конвертера, справа - после правильного. Красным соответственно различия.
Ну и табуляцию как бы желательно, после твоего много ручной работы
не знаю, чем поможет исходник, при ошибке в одной и той же инструкции, но - бери
http://zx-pk.ru/threads/23376-igra-2048-dlya-yut-88-rk-apogeya.html
а, понял. нужно быть телепатом, чтобы догадаться, что при конверсии из z80 в 8080 не работает cmp
ровно наеборот. из 8080 в z80
http://i104.fastpic.ru/big/2018/0411/d8/5350818b105b221731eaa4950a00a6d8.png
сегодня не мой день xD
Объясняю в п. раз для особо дневных
http://s1.micp.ru/9t2R4.jpg
справа код 8080 - "CMP C" Слева должОн быть "CP C"/ Впрочем ху дожнику виднее....
я сказал из z80 в 8080, верно? завтра пофиксаю.
Alex Rider
15.04.2018, 02:10
@zebest,
1. Превращать тред в разговор Шынни с самим собой не будем. Восстановил твои сообщения.
2. "наеборот", "ху дожнику"... Я еще помню даже опечатку в слове "пробел" время назад. В общем, внимательнее надо быть при наборе текста.
завтра - это 12 число, а не 15, потому и было удалено, что правилами не возбраняется?...
и в очепятки, Ваши, я то жи мог бы ткнуть. Но это уже тянет на статью об оскорблении лица при исполнении??
Баньте сразу, чего уж.
- - - Добавлено - - -
дорога ложка к обеду
Alex Rider
15.04.2018, 03:20
что правилами не возбраняется?
Нет. Но делать так не надо - ты портишь этим тред.
и в очепятки, Ваши, я то жи мог бы ткнуть
Договорились. Я внимательно послежу за статистикой того, насколько часто твои опечатки похожи на мат.
В общем, 8080 привел в порядок, с соблюдением форматирования оригинального текста.
Затык на:
OPORT: CALL READHL ;PORT
MOV C,L
CALL READHL ;DATA
MVI A,OUTC ;OUT OPCODE
т.е. метка пропускается, иначе может получиться не пойми что. Как определить метку, нет мыслей.
Дело за z80, вышло, что при соблюдении форматирования сам код валится.
Похоже, что библиотека RegExp не поддерживает замену, иначе вышло бы очень просто.
Как бы финал, но боюсь, что я проглядел возможные косяки.
Как бы финал,
Пробую перегнать ZCPR2 (http://dflund.se/~pi/cpm/files/ftp.mayn.de/pub/cpm/archive/zcpr2/) под Z80.
Конкретно - zcpr8080.asm (http://dflund.se/~pi/cpm/files/ftp.mayn.de/pub/cpm/archive/zcpr2/zcpr8080.asm.txt)
Исходник заглавными буквами, на выходе получается мешанина из строчных и заглавных.
Надо всё править руками.
Там как-бы есть версия под Z80 (http://dflund.se/~pi/cpm/files/ftp.mayn.de/pub/cpm/archive/zcpr2/zcpr.asm.txt), но под неизвестный ассемблер и команды Z80 сделаны макросами.
m80 или ma80 не могут это переварить.
Пробую перегнать ZCPR2 (http://dflund.se/~pi/cpm/files/ftp.mayn.de/pub/cpm/archive/zcpr2/) под Z80.
Конкретно - zcpr8080.asm (http://dflund.se/~pi/cpm/files/ftp.mayn.de/pub/cpm/archive/zcpr2/zcpr8080.asm.txt)
Исходник заглавными буквами, на выходе получается мешанина из строчных и заглавных.
Надо всё править руками.
m80 или ma80 не могут это переварить.
Ага, давайте подо все ассемблеры нагнемся и исправим.
Последняя версия была тут:
https://g0blinish.ucoz.ru/pb-dev/z808080_1.0e.zip
подсветка ошибок, исправлены глюки. На этом разработка и поддержка остановлена.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot