PDA

Просмотр полной версии : I8080 TO Z80 SOURCE TRANSLATOR



Sergey
29.11.2015, 13:14
Борясь на работе со стрессом, набросал примитивненький транслятор и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

Ewgeny7
29.11.2015, 17:14
Прошу прощения, но на REXX
Кто такой Рекс?

perestoronin
29.11.2015, 17:21
https://ru.wikipedia.org/wiki/REXX

perestoronin
29.11.2015, 17:25
Тот не знает Рекс, кому не довелось написать хотя бы один командный файл для больших машин, списанных в 90е.
И для диалоговых панелей очень удобный инструментарий был и тоже опирался на Рекс.

И сейчас развивается Рекс,, хотя всякие поделия, лоббируемые руководствами оазличных ТНК, оттеснили Рекс.

Но в любом случае, Рекс не самый оптимальный выбор для написания транслятора.

Sergey
30.11.2015, 00:37
Ха ХА ХА, я же говорил. Спасибо Ewgeny7, за такой лютый вин.
Немного объясню, недавно с пол года назад, Sergey, мне заливал что рекскс знает последний ... ну а коли я его не знаю то я вообще пропащий индивид для всего прогрессивного человечества, что как бы не исключает одно другого тем не менее не является показателем.
:v2_laugh: :v2_lol:

Sergey
09.01.2016, 23:59
Добавил в первый пост новую версию транслятора. Теперь числовые шестнадцатеричные аргументы команд, в т.ч. операторов "DB" и "DW" переводятся из вида "0xxh" в принятый на спектруме "#xx". Исключение составляют аргументы, представляющие собой арифметические выражения, - пока не осилил. :(

creator
10.01.2016, 09:22
Простите, а можно повыпендриваться не совсем по теме?

Ломаю голову над этой записью:
mov ax,020h shl 8
Это что? Догадываюсь что можно было проще 2000h написать, но зачем так людей гнобить?

jerri
10.01.2016, 23:30
из контекста неясно где используется.

zebest
30.03.2016, 23:27
примитивненький транслятор и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.

jerri
01.04.2016, 17:56
Да ладно, задача то нередкая - какой-нить листинг из ужасных интеловских мнемоник (а листингов немало - разных билиотечек полезных понаписано) перевести в нормальный вид (у 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

пока в разработке.

zebest
01.04.2016, 22:52
пока в разработке.
Проверял твой конвертер на том же самом исходнике, Вычисление числа Пи на ассемблере (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'у. сказал, пофиксит.

Sergey
07.04.2016, 21:53
'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++ это достаточно удобно.
Если, действительно, есть спрос на мой скрипт, постараюсь довести до ума.

zebest
07.04.2016, 23:24
Если, действительно, есть спрос на мой скрипт, постараюсь довести до ума.
Ну у меня как бы есть, мне 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)

Или он их вообще чистаа как метки транслирует?
Тут скорее проблемы исходного асма, который допускает слитное написание псевдооператора и аргумента, а ужасм это понимает по своему...тогда только ручками править ((((

Sergey
11.04.2016, 01:33
Или он их вообще чистаа как метки транслирует?
Естественно, как метки.

тогда только ручками править ((((
Целью написания скрипта было избавиться от рутинной работы по трансляции мнемоник. Можно, конечно, допилить скрипт.
Но, по-моему, для трансляции high/low достаточно двух операций замены в любом текстовом редакторе:
"заменить всё" "high(" на "high (" и "low(" на "low (".

denpopov
17.04.2016, 13:02
Нашелся еще один

Shiny
11.04.2018, 15:26
Проверял твой конвертер на том же самом исходнике, Вычисление числа Пи на ассемблере (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 исправил

zebest
11.04.2018, 16:52
было cp h
стало call p,h
Где ты был два дня назад :((
а5 я на эти "ср" напнулся. Посмотрю на исправленной версии как

- - - Добавлено - - -

Неее, пока все плохо
http://s2.micp.ru/SjYih.jpg
Слева код после твоего конвертера, справа - после правильного. Красным соответственно различия.
Ну и табуляцию как бы желательно, после твоего много ручной работы

Shiny
11.04.2018, 16:53
Давай исходник тогда.

zebest
11.04.2018, 17:52
не знаю, чем поможет исходник, при ошибке в одной и той же инструкции, но - бери
http://zx-pk.ru/threads/23376-igra-2048-dlya-yut-88-rk-apogeya.html

Shiny
11.04.2018, 17:59
а, понял. нужно быть телепатом, чтобы догадаться, что при конверсии из z80 в 8080 не работает cmp

zebest
11.04.2018, 18:01
ровно наеборот. из 8080 в z80

Shiny
11.04.2018, 18:08
http://i104.fastpic.ru/big/2018/0411/d8/5350818b105b221731eaa4950a00a6d8.png

сегодня не мой день xD

zebest
11.04.2018, 18:31
Объясняю в п. раз для особо дневных
http://s1.micp.ru/9t2R4.jpg
справа код 8080 - "CMP C" Слева должОн быть "CP C"/ Впрочем ху дожнику виднее....

Shiny
11.04.2018, 18:33
я сказал из z80 в 8080, верно? завтра пофиксаю.

Alex Rider
15.04.2018, 02:10
@zebest,
1. Превращать тред в разговор Шынни с самим собой не будем. Восстановил твои сообщения.
2. "наеборот", "ху дожнику"... Я еще помню даже опечатку в слове "пробел" время назад. В общем, внимательнее надо быть при наборе текста.

zebest
15.04.2018, 02:56
завтра - это 12 число, а не 15, потому и было удалено, что правилами не возбраняется?...
и в очепятки, Ваши, я то жи мог бы ткнуть. Но это уже тянет на статью об оскорблении лица при исполнении??
Баньте сразу, чего уж.

- - - Добавлено - - -

дорога ложка к обеду

Alex Rider
15.04.2018, 03:20
что правилами не возбраняется?
Нет. Но делать так не надо - ты портишь этим тред.


и в очепятки, Ваши, я то жи мог бы ткнуть
Договорились. Я внимательно послежу за статистикой того, насколько часто твои опечатки похожи на мат.

Shiny
15.04.2018, 08:54
В общем, 8080 привел в порядок, с соблюдением форматирования оригинального текста.
Затык на:


OPORT: CALL READHL ;PORT
MOV C,L
CALL READHL ;DATA
MVI A,OUTC ;OUT OPCODE


т.е. метка пропускается, иначе может получиться не пойми что. Как определить метку, нет мыслей.

Дело за z80, вышло, что при соблюдении форматирования сам код валится.

Похоже, что библиотека RegExp не поддерживает замену, иначе вышло бы очень просто.

Shiny
22.04.2018, 07:52
Как бы финал, но боюсь, что я проглядел возможные косяки.

Jason
19.05.2025, 14:35
Как бы финал,
Пробую перегнать 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 не могут это переварить.

Shiny
25.05.2025, 15:08
Пробую перегнать 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
подсветка ошибок, исправлены глюки. На этом разработка и поддержка остановлена.