> 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.If so, XCASM can already do thisCode: 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
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
Z80 -> PIC
Moderator: Shaos
-
Shaos
- Admin
- Posts: 24381
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Z80 -> PIC
Вот наткнулся тут в рассылке одной 
-
Shaos
- Admin
- Posts: 24381
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Можно поразмышлять на эту тему. Итак, порт D будет шиной данных, 1 бит порта E будет !WR, 1 бит порта E будет !RD, порт B будет младшими 8 битами адреса, порт C будет старшими 8 битами адреса. Чтобы взять 80-ю команду из внешней памяти, надо:Shaos wrote:А вот что если на основе 40-ногова пика сделать программно-аппаратный эмулятор какого-нибудь 80-го проца, например 8085?
Интересно 20-мегагерцовый пик со скольки мегагерцами на 8085 сравнится
- установить нужный адрес (как минимум инкрементировать порт 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-ый.
-
Shaos
- Admin
- Posts: 24381
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
А вот если взять и сделать что-нибудь типа клона Радио-86РК на PICеShaos wrote:Можно поразмышлять на эту тему. Итак, порт D будет шиной данных, 1 бит порта E будет !WR, 1 бит порта E будет !RD, порт B будет младшими 8 битами адреса, порт C будет старшими 8 битами адреса. Чтобы взять 80-ю команду из внешней памяти, надо:Shaos wrote:А вот что если на основе 40-ногова пика сделать программно-аппаратный эмулятор какого-нибудь 80-го проца, например 8085?
Интересно 20-мегагерцовый пик со скольки мегагерцами на 8085 сравнится
- установить нужный адрес (как минимум инкрементировать порт 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-ый.
-
acidrain
- Senior
- Posts: 159
- Joined: 28 Feb 2005 02:31
- Location: Krasnodar, Russia
-
Shaos
- Admin
- Posts: 24381
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Ну как для чего? Сделать классический компьютер из современных дешевых компонентов (8080/8085 давно не выпускаются).acidrain wrote:Интересно, а для чего это? =)Shaos wrote:А вот что если на основе 40-ногова пика сделать программно-аппаратный эмулятор какого-нибудь 80-го проца, например 8085?
Интересно 20-мегагерцовый пик со скольки мегагерцами на 8085 сравнится
-
Ronin
- Maniac
- Posts: 304
- Joined: 29 Mar 2005 06:06
- Location: Krasnodar
-
Shaos
- Admin
- Posts: 24381
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
А если вместо пика взять 75-мегагерцовый SX28, то его еще можно заставить и на экране телевизора что-то рисовать одновременно с эмуляцией системы команд 8080Shaos wrote:А вот если взять и сделать что-нибудь типа клона Радио-86РК на PICеShaos wrote:Можно поразмышлять на эту тему. Итак, порт D будет шиной данных, 1 бит порта E будет !WR, 1 бит порта E будет !RD, порт B будет младшими 8 битами адреса, порт C будет старшими 8 битами адреса. Чтобы взять 80-ю команду из внешней памяти, надо:Shaos wrote:А вот что если на основе 40-ногова пика сделать программно-аппаратный эмулятор какого-нибудь 80-го проца, например 8085?
Интересно 20-мегагерцовый пик со скольки мегагерцами на 8085 сравнится
- установить нужный адрес (как минимум инкрементировать порт 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-ый.
По идее и ZX-Spectrum с Z80 можно сэмулировать с минимальными внешними довесками как память и т.д. - но это дольше
-
acidrain
- Senior
- Posts: 159
- Joined: 28 Feb 2005 02:31
- Location: Krasnodar, Russia
О, как раз я делаю на аврке эмуль 68к, но думаю 68к тяжковато будет, а вот з80 можно попробовать %)Shaos wrote:А вот что если на основе 40-ногова пика сделать программно-аппаратный эмулятор какого-нибудь 80-го проца, например 8085?
Интересно 20-мегагерцовый пик со скольки мегагерцами на 8085 сравнится
Правда, не планировал точной эмуляции 68к, а простой асм из внешней sram интерпритировать так сказать виртуальная машина
-
Shaos
- Admin
- Posts: 24381
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
AVR будет медленноватый я думаюacidrain wrote:О, как раз я делаю на аврке эмуль 68к, но думаю 68к тяжковато будет, а вот з80 можно попробовать %)Shaos wrote:А вот что если на основе 40-ногова пика сделать программно-аппаратный эмулятор какого-нибудь 80-го проца, например 8085?
Интересно 20-мегагерцовый пик со скольки мегагерцами на 8085 сравнится
Правда, не планировал точной эмуляции 68к, а простой асм из внешней sram интерпритировать так сказать виртуальная машина
-
acidrain
- Senior
- Posts: 159
- Joined: 28 Feb 2005 02:31
- Location: Krasnodar, Russia
Так он же риск и делает оп за 1 такт (правда только во внутренней сраме и не все операнды).Shaos wrote:AVR будет медленноватый я думаюacidrain wrote:О, как раз я делаю на аврке эмуль 68к, но думаю 68к тяжковато будет, а вот з80 можно попробовать %)Shaos wrote:А вот что если на основе 40-ногова пика сделать программно-аппаратный эмулятор какого-нибудь 80-го проца, например 8085?
Интересно 20-мегагерцовый пик со скольки мегагерцами на 8085 сравнится
Правда, не планировал точной эмуляции 68к, а простой асм из внешней sram интерпритировать так сказать виртуальная машина
Вот ссылк по теме: http://akps.ssau.ru/hardw/hobbit/Fcomp/index.html
-
Shaos
- Admin
- Posts: 24381
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
За один такт или за один цикл (который 4 такта скорее всего)? К тому же не забывай что тебе придется эмулировать 16-битные операции с 32-битными регистрами на 8-битке - что выльется в невообразимые тормоза.acidrain wrote:Так он же риск и делает оп за 1 такт (правда только во внутренней сраме и не все операнды).Shaos wrote:AVR будет медленноватый я думаюacidrain wrote:О, как раз я делаю на аврке эмуль 68к, но думаю 68к тяжковато будет, а вот з80 можно попробовать %)Shaos wrote:А вот что если на основе 40-ногова пика сделать программно-аппаратный эмулятор какого-нибудь 80-го проца, например 8085?
Интересно 20-мегагерцовый пик со скольки мегагерцами на 8085 сравнится
Правда, не планировал точной эмуляции 68к, а простой асм из внешней sram интерпритировать так сказать виртуальная машина
Вот ссылк по теме: http://akps.ssau.ru/hardw/hobbit/Fcomp/index.html
-
acidrain
- Senior
- Posts: 159
- Joined: 28 Feb 2005 02:31
- Location: Krasnodar, Russia
Вот я и говорю - буду для начала асм z80 мулировать =) мож правда деление и умножение добавлю... но пока все довольно смутно представляю, мыслю так сказатьShaos wrote:
За один такт или за один цикл (который 4 такта скорее всего)? К тому же не забывай что тебе придется эмулировать 16-битные операции с 32-битными регистрами на 8-битке - что выльется в невообразимые тормоза.
-
Shaos
- Admin
- Posts: 24381
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Z80 тоже нелегко сэмулить - из-за неимоверного количества команд, то ли дело 8080/8085 - один человек вполне справится за разумное времяacidrain wrote:Вот я и говорю - буду для начала асм z80 мулировать =) мож правда деление и умножение добавлю... но пока все довольно смутно представляю, мыслю так сказатьShaos wrote:
За один такт или за один цикл (который 4 такта скорее всего)? К тому же не забывай что тебе придется эмулировать 16-битные операции с 32-битными регистрами на 8-битке - что выльется в невообразимые тормоза.
-
Ronin
- Maniac
- Posts: 304
- Joined: 29 Mar 2005 06:06
- Location: Krasnodar
командный цикл у АВР - 3 такта, но есть конвейер, поэтому линейные программы выполняются 1 инструкция/1 такт, да и асм не такой тяжелый "чиста риск", так что АВР одназначно пошустрее будетShaos wrote:За один такт или за один цикл (который 4 такта скорее всего)? К тому же не забывай что тебе придется эмулировать 16-битные операции с 32-битными регистрами на 8-битке - что выльется в невообразимые тормоза.
