Z80 -> PIC

8-битные микроконтроллеры PICmicro (ПИКи) от Microchip и совместимые, а также 16-битные PIC24 и 32-битные PIC32

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24021
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Z80 -> PIC

Post by Shaos »

Вот наткнулся тут в рассылке одной :)

> I've occasionally wished for a compiler that would recognize the
> assembly languages from obsolete architectures, as an alternative
> to the the object-code emulators that seem to be popular. I guess
> it's a bit tricky, though...

Do you mean convert the assembler source for architectures A to machine code for architectures B?

e.g.

Code: Select all

    Z80 input
        ld    A,(HL)
        ld    B,C

    PIC output
        movf    z80_reg_L,w
        movwf    FSR
        bsf    STATUS,IRP
        btfsc    z80_reg_H,0
        bsf    STATUS,IRP
        movf    INDF,w
        movwf    z80_reg_A

        movf    z80_reg_C,w
        movwf    z80_reg_B
If so, XCASM can already do this :-)

XCASM is the meta assembler used by the XCSB compiler and the PIC edition of ZMech.

http://www.xcprod.com/titan/XCSB - optimising PIC compiler LITE edition free for personal non-commercial use
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24021
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

А вот что если на основе 40-ногова пика сделать программно-аппаратный эмулятор какого-нибудь 80-го проца, например 8085? ;)
Интересно 20-мегагерцовый пик со скольки мегагерцами на 8085 сравнится :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24021
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:А вот что если на основе 40-ногова пика сделать программно-аппаратный эмулятор какого-нибудь 80-го проца, например 8085? ;)
Интересно 20-мегагерцовый пик со скольки мегагерцами на 8085 сравнится :)
Можно поразмышлять на эту тему. Итак, порт D будет шиной данных, 1 бит порта E будет !WR, 1 бит порта E будет !RD, порт B будет младшими 8 битами адреса, порт C будет старшими 8 битами адреса. Чтобы взять 80-ю команду из внешней памяти, надо:
- установить нужный адрес (как минимум инкрементировать порт B) - это может занять как минимум 2 цикла (увеличить, проверить что не переполнение)
- затем выставляем 0 в !RD - еще один цикл (всего 3)
- читаем с порта D байт - еще 1 цикл ( 4 )
- устанавливаем 1 в !RD ( 5 )
- переход по таблице для выполнения команды - 2 цикла ( 7 )
Если это была пересылка из регистра в регистр, то:
- скопировать данные из регистра в W - 1 ( 8 )
- скопировать данные из W в регистр - 1 ( 9 )
- вернутся к началу - 2 такта ( 11 )
Т.е. команда пересылки регистр-регистр (например MOV A,B) на пике сымитируется как минимум за 11 циклов (44 такта генератора). На реальных процах она занимает 5 тактов на 8080 и 4 такта на 8085. Получается что в этом смысле 20 МГц пик в качестве симулятора 80-го проца будет работать как 1.8 МГц 85-ый или 2.3 МГц 80-ый.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24021
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:
Shaos wrote:А вот что если на основе 40-ногова пика сделать программно-аппаратный эмулятор какого-нибудь 80-го проца, например 8085? ;)
Интересно 20-мегагерцовый пик со скольки мегагерцами на 8085 сравнится :)
Можно поразмышлять на эту тему. Итак, порт D будет шиной данных, 1 бит порта E будет !WR, 1 бит порта E будет !RD, порт B будет младшими 8 битами адреса, порт C будет старшими 8 битами адреса. Чтобы взять 80-ю команду из внешней памяти, надо:
- установить нужный адрес (как минимум инкрементировать порт B) - это может занять как минимум 2 цикла (увеличить, проверить что не переполнение)
- затем выставляем 0 в !RD - еще один цикл (всего 3)
- читаем с порта D байт - еще 1 цикл ( 4 )
- устанавливаем 1 в !RD ( 5 )
- переход по таблице для выполнения команды - 2 цикла ( 7 )
Если это была пересылка из регистра в регистр, то:
- скопировать данные из регистра в W - 1 ( 8 )
- скопировать данные из W в регистр - 1 ( 9 )
- вернутся к началу - 2 такта ( 11 )
Т.е. команда пересылки регистр-регистр (например MOV A,B) на пике сымитируется как минимум за 11 циклов (44 такта генератора). На реальных процах она занимает 5 тактов на 8080 и 4 такта на 8085. Получается что в этом смысле 20 МГц пик в качестве симулятора 80-го проца будет работать как 1.8 МГц 85-ый или 2.3 МГц 80-ый.
А вот если взять и сделать что-нибудь типа клона Радио-86РК на PICе ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
acidrain
Senior
Posts: 159
Joined: 28 Feb 2005 02:31
Location: Krasnodar, Russia

Post by acidrain »

Shaos wrote:А вот что если на основе 40-ногова пика сделать программно-аппаратный эмулятор какого-нибудь 80-го проца, например 8085? ;)
Интересно 20-мегагерцовый пик со скольки мегагерцами на 8085 сравнится :)
Интересно, а для чего это? =)
User avatar
Shaos
Admin
Posts: 24021
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

acidrain wrote:
Shaos wrote:А вот что если на основе 40-ногова пика сделать программно-аппаратный эмулятор какого-нибудь 80-го проца, например 8085? ;)
Интересно 20-мегагерцовый пик со скольки мегагерцами на 8085 сравнится :)
Интересно, а для чего это? =)
Ну как для чего? Сделать классический компьютер из современных дешевых компонентов (8080/8085 давно не выпускаются).
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Ronin
Maniac
Posts: 304
Joined: 29 Mar 2005 06:06
Location: Krasnodar

Post by Ronin »

Shaos wrote: Ну как для чего? Сделать классический компьютер из современных дешевых компонентов (8080/8085 давно не выпускаются).
ну конечно, эт у вас там не выпускаюца, а у нас все есть :) у нас даже военные этот 1821ВМ85 юзают, гы!
User avatar
Shaos
Admin
Posts: 24021
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:
Shaos wrote:
Shaos wrote:А вот что если на основе 40-ногова пика сделать программно-аппаратный эмулятор какого-нибудь 80-го проца, например 8085? ;)
Интересно 20-мегагерцовый пик со скольки мегагерцами на 8085 сравнится :)
Можно поразмышлять на эту тему. Итак, порт D будет шиной данных, 1 бит порта E будет !WR, 1 бит порта E будет !RD, порт B будет младшими 8 битами адреса, порт C будет старшими 8 битами адреса. Чтобы взять 80-ю команду из внешней памяти, надо:
- установить нужный адрес (как минимум инкрементировать порт B) - это может занять как минимум 2 цикла (увеличить, проверить что не переполнение)
- затем выставляем 0 в !RD - еще один цикл (всего 3)
- читаем с порта D байт - еще 1 цикл ( 4 )
- устанавливаем 1 в !RD ( 5 )
- переход по таблице для выполнения команды - 2 цикла ( 7 )
Если это была пересылка из регистра в регистр, то:
- скопировать данные из регистра в W - 1 ( 8 )
- скопировать данные из W в регистр - 1 ( 9 )
- вернутся к началу - 2 такта ( 11 )
Т.е. команда пересылки регистр-регистр (например MOV A,B) на пике сымитируется как минимум за 11 циклов (44 такта генератора). На реальных процах она занимает 5 тактов на 8080 и 4 такта на 8085. Получается что в этом смысле 20 МГц пик в качестве симулятора 80-го проца будет работать как 1.8 МГц 85-ый или 2.3 МГц 80-ый.
А вот если взять и сделать что-нибудь типа клона Радио-86РК на PICе ;)
А если вместо пика взять 75-мегагерцовый SX28, то его еще можно заставить и на экране телевизора что-то рисовать одновременно с эмуляцией системы команд 8080 ;)

По идее и ZX-Spectrum с Z80 можно сэмулировать с минимальными внешними довесками как память и т.д. - но это дольше
Я тут за главного - если что шлите мыло на me собака shaos точка net
acidrain
Senior
Posts: 159
Joined: 28 Feb 2005 02:31
Location: Krasnodar, Russia

Post by acidrain »

Shaos wrote:А вот что если на основе 40-ногова пика сделать программно-аппаратный эмулятор какого-нибудь 80-го проца, например 8085? ;)
Интересно 20-мегагерцовый пик со скольки мегагерцами на 8085 сравнится :)
О, как раз я делаю на аврке эмуль 68к, но думаю 68к тяжковато будет, а вот з80 можно попробовать %)
Правда, не планировал точной эмуляции 68к, а простой асм из внешней sram интерпритировать так сказать виртуальная машина :)
User avatar
Shaos
Admin
Posts: 24021
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

acidrain wrote:
Shaos wrote:А вот что если на основе 40-ногова пика сделать программно-аппаратный эмулятор какого-нибудь 80-го проца, например 8085? ;)
Интересно 20-мегагерцовый пик со скольки мегагерцами на 8085 сравнится :)
О, как раз я делаю на аврке эмуль 68к, но думаю 68к тяжковато будет, а вот з80 можно попробовать %)
Правда, не планировал точной эмуляции 68к, а простой асм из внешней sram интерпритировать так сказать виртуальная машина :)
AVR будет медленноватый я думаю
Я тут за главного - если что шлите мыло на me собака shaos точка net
acidrain
Senior
Posts: 159
Joined: 28 Feb 2005 02:31
Location: Krasnodar, Russia

Post by acidrain »

Shaos wrote:
acidrain wrote:
Shaos wrote:А вот что если на основе 40-ногова пика сделать программно-аппаратный эмулятор какого-нибудь 80-го проца, например 8085? ;)
Интересно 20-мегагерцовый пик со скольки мегагерцами на 8085 сравнится :)
О, как раз я делаю на аврке эмуль 68к, но думаю 68к тяжковато будет, а вот з80 можно попробовать %)
Правда, не планировал точной эмуляции 68к, а простой асм из внешней sram интерпритировать так сказать виртуальная машина :)
AVR будет медленноватый я думаю
Так он же риск и делает оп за 1 такт (правда только во внутренней сраме и не все операнды).
Вот ссылк по теме: http://akps.ssau.ru/hardw/hobbit/Fcomp/index.html
User avatar
Shaos
Admin
Posts: 24021
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

acidrain wrote:
Shaos wrote:
acidrain wrote:
Shaos wrote:А вот что если на основе 40-ногова пика сделать программно-аппаратный эмулятор какого-нибудь 80-го проца, например 8085? ;)
Интересно 20-мегагерцовый пик со скольки мегагерцами на 8085 сравнится :)
О, как раз я делаю на аврке эмуль 68к, но думаю 68к тяжковато будет, а вот з80 можно попробовать %)
Правда, не планировал точной эмуляции 68к, а простой асм из внешней sram интерпритировать так сказать виртуальная машина :)
AVR будет медленноватый я думаю
Так он же риск и делает оп за 1 такт (правда только во внутренней сраме и не все операнды).
Вот ссылк по теме: http://akps.ssau.ru/hardw/hobbit/Fcomp/index.html
За один такт или за один цикл (который 4 такта скорее всего)? К тому же не забывай что тебе придется эмулировать 16-битные операции с 32-битными регистрами на 8-битке - что выльется в невообразимые тормоза.
Я тут за главного - если что шлите мыло на me собака shaos точка net
acidrain
Senior
Posts: 159
Joined: 28 Feb 2005 02:31
Location: Krasnodar, Russia

Post by acidrain »

Shaos wrote:
За один такт или за один цикл (который 4 такта скорее всего)? К тому же не забывай что тебе придется эмулировать 16-битные операции с 32-битными регистрами на 8-битке - что выльется в невообразимые тормоза.
Вот я и говорю - буду для начала асм z80 мулировать =) мож правда деление и умножение добавлю... но пока все довольно смутно представляю, мыслю так сказать :)
User avatar
Shaos
Admin
Posts: 24021
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

acidrain wrote:
Shaos wrote:
За один такт или за один цикл (который 4 такта скорее всего)? К тому же не забывай что тебе придется эмулировать 16-битные операции с 32-битными регистрами на 8-битке - что выльется в невообразимые тормоза.
Вот я и говорю - буду для начала асм z80 мулировать =) мож правда деление и умножение добавлю... но пока все довольно смутно представляю, мыслю так сказать :)
Z80 тоже нелегко сэмулить - из-за неимоверного количества команд, то ли дело 8080/8085 - один человек вполне справится за разумное время
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Ronin
Maniac
Posts: 304
Joined: 29 Mar 2005 06:06
Location: Krasnodar

Post by Ronin »

Shaos wrote:За один такт или за один цикл (который 4 такта скорее всего)? К тому же не забывай что тебе придется эмулировать 16-битные операции с 32-битными регистрами на 8-битке - что выльется в невообразимые тормоза.
командный цикл у АВР - 3 такта, но есть конвейер, поэтому линейные программы выполняются 1 инструкция/1 такт, да и асм не такой тяжелый "чиста риск", так что АВР одназначно пошустрее будет :D