Программная модель Intel 8080/КР580ВМ80А

8-битные микроконтроллеры и микропроцессоры от Intel и их клоны, а также компьютеры на них построенные

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos но весьма много простых контроллеров так и было сделано!
И я думаю - создатели это предусмотрели: простую систему можно построить
без буферов шин и системного контроллера, лишь с двумя стробами - WR и DBIN.
А хочешь сложную - наворачивай остальное.

Вопрос в том, что для нормальной работы аппаратного эмулятора может и не
надо точное потактовое соблюдение сигналов проца - достаточно соблюсти их
чтобы с ПЗУ, ОЗУ и УВВ можно было корректно обмениваться - вот я о чем...
iLavr
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Shaos wrote:Опять же у нас принято использовать в качестве !RD инвертированный сигнал DBIN, но это не везде проходит...
Как это не подходит? Это нормальный сигнал RD без инверсии.
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

HardWareMan wrote:
Shaos wrote:Опять же у нас принято использовать в качестве !RD инвертированный сигнал DBIN, но это не везде проходит...
Как это не подходит? Это нормальный сигнал RD без инверсии.
Что-то вспоминается мне, что в Радио писалось, что он толи коротковат толи ещё что...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:
HardWareMan wrote:Как это не подходит? Это нормальный сигнал RD без инверсии.
Что-то вспоминается мне, что в Радио писалось, что он толи коротковат толи ещё что...
Не, это не про него!... С ним - как раз всё хорошо! :wink:
И даже я теперь склоняюсь к мысли, что и высокий активный уровень у него нарошно предусмотрен!


PS. Да вот хотя бы простой пример контроллера на i8080...
iLavr
begoon
Senior
Posts: 147
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

Post by begoon »

Lavr wrote: PS. Да вот хотя бы простой пример контроллера на i8080...
И они снова откопали стюардессу... ;-) Отличный проект, спасибо за ссылку.
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Lavr wrote:
Shaos wrote:
HardWareMan wrote:Как это не подходит? Это нормальный сигнал RD без инверсии.
Что-то вспоминается мне, что в Радио писалось, что он толи коротковат толи ещё что...
Не, это не про него!... С ним - как раз всё хорошо! :wink:
И даже я теперь склоняюсь к мысли, что и высокий активный уровень у него нарошно предусмотрен!
Мозги короткие у сказавшего это. А ты бы мог заюзать нашу умную книжку, а не слушать слухи.
ImageImage
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

ага и точно - всё красиво :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

begoon wrote:
Shaos wrote:P.P.S. оказалось, что AC после вычитания должен содержать ИНВЕРТИРОВАННОЕ значение полупереноса (точнее "полузаёма"), кроме того DAA у меня было реализовано не совсем правильно...
Надо полагать, что AC = A(3) | Param(3) в операциях AND ты тоже сделал? Остается загадкой, как господа svo и b2m до этого доперли в свое время.
Вот в этом топике выясняли этот момент:

viewtopic.php?t=8790

Я его сделал ещё в 2007 году ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

эмуляция 8080

Post by Lavr »

Объясните мне одну вещь, пожалуйста, уважаемые авторы прецизионных эмуляторов.

Известно ведь, что если представить байт кода операции 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 */
         ...
        }
Разве не было бы быстрее - выделить два старших бита в опкоде - D7 D6
и по их значению организовать 4 более коротких цикла switch (opcode)
по 4-м группам опкодов?

В этом случае, как мне представляется, опкоды 0FFh и 3Fh, к примеру,
анализировались бы одинаково быстро.

А в одном длинном switch (opcode) до значения 0FFh проверяются 255 других,
в то же время опкод 3Fh анализируется гораздо быстрее!

Или я в чем-то заблуждаюсь?
iLavr
begoon
Senior
Posts: 147
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

Re: эмуляция 8080

Post by begoon »

Lavr wrote:Объясните мне одну вещь, пожалуйста, уважаемые авторы прецизионных эмуляторов.

Известно ведь, что если представить байт кода операции 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 */
         ...
        }
Разве не было бы быстрее - выделить два старших бита в опкоде - D7 D6
и по их значению организовать 4 более коротких цикла switch (opcode)
по 4-м группам опкодов?

В этом случае, как мне представляется, опкоды 0FFh и 3Fh, к примеру,
анализировались бы одинаково быстро.

А в одном длинном switch (opcode) до значения 0FFh проверяются 255 других,
в то же время опкод 3Fh анализируется гораздо быстрее!

Или я в чем-то заблуждаюсь?
Потому что компилятор C развернет этот длинный switch в jump table, который будет работать гораздо быстрее, чем любая логика по разбору опкодов по методу дизассемблера.

Фактически, этот switch будет реализован одним jmp'ом.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: эмуляция 8080

Post by Lavr »

begoon wrote:Потому что компилятор C развернет этот длинный switch в jump table, который будет работать гораздо быстрее, чем любая логика по разбору опкодов по методу дизассемблера.
Фактически, этот switch будет реализован одним jmp'ом.
Я этого не знал... но как поступят Java, Java Script - там тоже ты применяешь
этот длинный цикл?

А я пытаюсь на ассемблере PIC это сделать - как будет лучше?
iLavr
begoon
Senior
Posts: 147
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

Re: эмуляция 8080

Post by begoon »

Lavr wrote:
begoon wrote:Потому что компилятор C развернет этот длинный switch в jump table, который будет работать гораздо быстрее, чем любая логика по разбору опкодов по методу дизассемблера.
Фактически, этот switch будет реализован одним jmp'ом.
Я этого не знал... но как поступят Java, Java Script - там тоже ты применяешь
этот длинный цикл?
А я пытаюсь на ассемблере PIC это сделать - как лучше?
Для JavaScript вообще нет никакой гарантии. Надо тупо сравнивать реализации. Я этим не занимался, и уверен, что мой код i8080 на JS можно реально ускорить. Но это дело неблагодарное, так как в разных браузерах все будет по-разному.

Для 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
        ...
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Ну - проще говоря, это загрузка программного счётчика значением адреса перехода по таблице... так?
iLavr
begoon
Senior
Posts: 147
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

Post by begoon »

Lavr wrote:Ну - проще говоря, это загрузка программного счётчика значением адреса перехода по таблице... так?
Да.
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

в джаве тоже таблица - там спец-команда есть если я не ошибаюсь для реализации свича
Я тут за главного - если что шлите мыло на me собака shaos точка net