Программная модель Intel 8080/КР580ВМ80А
Moderator: Shaos
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Shaos но весьма много простых контроллеров так и было сделано!
И я думаю - создатели это предусмотрели: простую систему можно построить
без буферов шин и системного контроллера, лишь с двумя стробами - WR и DBIN.
А хочешь сложную - наворачивай остальное.
Вопрос в том, что для нормальной работы аппаратного эмулятора может и не
надо точное потактовое соблюдение сигналов проца - достаточно соблюсти их
чтобы с ПЗУ, ОЗУ и УВВ можно было корректно обмениваться - вот я о чем...
И я думаю - создатели это предусмотрели: простую систему можно построить
без буферов шин и системного контроллера, лишь с двумя стробами - WR и DBIN.
А хочешь сложную - наворачивай остальное.
Вопрос в том, что для нормальной работы аппаратного эмулятора может и не
надо точное потактовое соблюдение сигналов проца - достаточно соблюсти их
чтобы с ПЗУ, ОЗУ и УВВ можно было корректно обмениваться - вот я о чем...
iLavr
-
- Banned
- Posts: 2139
- Joined: 20 Mar 2005 13:41
- Location: От туда
-
- Admin
- Posts: 24078
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Что-то вспоминается мне, что в Радио писалось, что он толи коротковат толи ещё что...HardWareMan wrote:Как это не подходит? Это нормальный сигнал RD без инверсии.Shaos wrote:Опять же у нас принято использовать в качестве !RD инвертированный сигнал DBIN, но это не везде проходит...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Не, это не про него!... С ним - как раз всё хорошо!Shaos wrote:Что-то вспоминается мне, что в Радио писалось, что он толи коротковат толи ещё что...HardWareMan wrote:Как это не подходит? Это нормальный сигнал RD без инверсии.

И даже я теперь склоняюсь к мысли, что и высокий активный уровень у него нарошно предусмотрен!
PS. Да вот хотя бы простой пример контроллера на i8080...
iLavr
-
- Senior
- Posts: 147
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
И они снова откопали стюардессу...Lavr wrote: PS. Да вот хотя бы простой пример контроллера на i8080...

-
- Banned
- Posts: 2139
- Joined: 20 Mar 2005 13:41
- Location: От туда
Мозги короткие у сказавшего это. А ты бы мог заюзать нашу умную книжку, а не слушать слухи.Lavr wrote:Не, это не про него!... С ним - как раз всё хорошо!Shaos wrote:Что-то вспоминается мне, что в Радио писалось, что он толи коротковат толи ещё что...HardWareMan wrote:Как это не подходит? Это нормальный сигнал RD без инверсии.![]()
И даже я теперь склоняюсь к мысли, что и высокий активный уровень у него нарошно предусмотрен!


-
- Admin
- Posts: 24078
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
-
- Admin
- Posts: 24078
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Вот в этом топике выясняли этот момент:begoon wrote:Надо полагать, что AC = A(3) | Param(3) в операциях AND ты тоже сделал? Остается загадкой, как господа svo и b2m до этого доперли в свое время.Shaos wrote:P.P.S. оказалось, что AC после вычитания должен содержать ИНВЕРТИРОВАННОЕ значение полупереноса (точнее "полузаёма"), кроме того DAA у меня было реализовано не совсем правильно...
viewtopic.php?t=8790
Я его сделал ещё в 2007 году

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
эмуляция 8080
Объясните мне одну вещь, пожалуйста, уважаемые авторы прецизионных эмуляторов.
Известно ведь, что если представить байт кода операции i8080 как
D7 D6 D5 D4 D3 D2 D1 D0, то
в длинном:
Разве не было бы быстрее - выделить два старших бита в опкоде - D7 D6
и по их значению организовать 4 более коротких цикла switch (opcode)
по 4-м группам опкодов?
В этом случае, как мне представляется, опкоды 0FFh и 3Fh, к примеру,
анализировались бы одинаково быстро.
А в одном длинном switch (opcode) до значения 0FFh проверяются 255 других,
в то же время опкод 3Fh анализируется гораздо быстрее!
Или я в чем-то заблуждаюсь?
Известно ведь, что если представить байт кода операции i8080 как
D7 D6 D5 D4 D3 D2 D1 D0, то
Почему тогда в ваших исходниках (и не только в ваших) код операции анализируетсяb2m 18 Янв 2011 wrote:Возможны следующие варианты:
D7 D6 - делят на 4 группы команд (можно сказать однотипных)
в длинном:
Code: Select all
switch (opcode) {
case 0x00: /* nop */
...
case 0xFF: /* rst 7 */
...
}
и по их значению организовать 4 более коротких цикла switch (opcode)
по 4-м группам опкодов?
В этом случае, как мне представляется, опкоды 0FFh и 3Fh, к примеру,
анализировались бы одинаково быстро.
А в одном длинном switch (opcode) до значения 0FFh проверяются 255 других,
в то же время опкод 3Fh анализируется гораздо быстрее!
Или я в чем-то заблуждаюсь?
iLavr
-
- Senior
- Posts: 147
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: эмуляция 8080
Потому что компилятор C развернет этот длинный switch в jump table, который будет работать гораздо быстрее, чем любая логика по разбору опкодов по методу дизассемблера.Lavr wrote:Объясните мне одну вещь, пожалуйста, уважаемые авторы прецизионных эмуляторов.
Известно ведь, что если представить байт кода операции i8080 как
D7 D6 D5 D4 D3 D2 D1 D0, тоПочему тогда в ваших исходниках (и не только в ваших) код операции анализируетсяb2m 18 Янв 2011 wrote:Возможны следующие варианты:
D7 D6 - делят на 4 группы команд (можно сказать однотипных)
в длинном:Разве не было бы быстрее - выделить два старших бита в опкоде - D7 D6Code: Select all
switch (opcode) { case 0x00: /* nop */ ... case 0xFF: /* rst 7 */ ... }
и по их значению организовать 4 более коротких цикла switch (opcode)
по 4-м группам опкодов?
В этом случае, как мне представляется, опкоды 0FFh и 3Fh, к примеру,
анализировались бы одинаково быстро.
А в одном длинном switch (opcode) до значения 0FFh проверяются 255 других,
в то же время опкод 3Fh анализируется гораздо быстрее!
Или я в чем-то заблуждаюсь?
Фактически, этот switch будет реализован одним jmp'ом.
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: эмуляция 8080
Я этого не знал... но как поступят Java, Java Script - там тоже ты применяешьbegoon wrote:Потому что компилятор C развернет этот длинный switch в jump table, который будет работать гораздо быстрее, чем любая логика по разбору опкодов по методу дизассемблера.
Фактически, этот switch будет реализован одним jmp'ом.
этот длинный цикл?
А я пытаюсь на ассемблере PIC это сделать - как будет лучше?
iLavr
-
- Senior
- Posts: 147
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: эмуляция 8080
Для JavaScript вообще нет никакой гарантии. Надо тупо сравнивать реализации. Я этим не занимался, и уверен, что мой код i8080 на JS можно реально ускорить. Но это дело неблагодарное, так как в разных браузерах все будет по-разному.Lavr wrote:Я этого не знал... но как поступят Java, Java Script - там тоже ты применяешьbegoon wrote:Потому что компилятор C развернет этот длинный switch в jump table, который будет работать гораздо быстрее, чем любая логика по разбору опкодов по методу дизассемблера.
Фактически, этот switch будет реализован одним jmp'ом.
этот длинный цикл?
А я пытаюсь на ассемблере PIC это сделать - как лучше?
Для Java всегда можно посмотреть генерируемый байт-код. Предположу, что там будет таблица, как в С, но сам не проверял. До версии эмулятора на JS у меня был попытка написать эмуль в виде Java Applet, но проект умер на стадии отладки, так как у меня аллергия на Java

А для PIC'ов обычно применяются более менее стандартные приемы оптимизации для языка C. Но вы всегда можешь глянуть код, который генерит твой компилятор. Вот, например, что генерит XC32 с -O3 для моего файла i8080.c. 100% это jump table.
Code: Select all
...
jal rk86_memory_read_byte
sh $2,18($16)
sltu $3,$2,256
bne $3,$0,.L286
lui $3,%hi(.L242)
li $2,-1 # 0xffffffffffffffff
.L69:
lw $31,28($sp)
lw $17,24($sp)
lw $16,20($sp)
j $31
addiu $sp,$sp,32
.L286:
sll $2,$2,2
addiu $3,$3,%lo(.L242)
addu $2,$3,$2
lw $2,0($2)
j $2 <-- волшебный jmp
nop
.align 2
.align 2
.L242:
.word .L4
.word .L5
.word .L6
.word .L7
.word .L8
.word .L9
.word .L10
.word .L11
.word .L4
.word .L12
.word .L13
.word .L14
.word .L15
.word .L16
.word .L17
.word .L18
.word .L4
.word .L19
.word .L20
.word .L21
.word .L22
.word .L23
.word .L24
.word .L25
.word .L4
.word .L26
.word .L27
.word .L28
.word .L29
.word .L30
.word .L31
...
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
-
- Senior
- Posts: 147
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
-
- Admin
- Posts: 24078
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley