nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 19 Oct 2018 00:37



Reply to topic  [ 35 posts ]  Go to page Previous  1, 2, 3  Next
программа в озу 
Author Message
Maniac

Joined: 14 Jul 2011 03:18
Posts: 255
Location: Гомель
Reply with quote
Post 
думаю если по битам то код гораздо быстрее получится (или кейс ему перебирать 300 значений либо всего лиш несколько битов проверить)

только все команды из 16 в двоичную нужно будет переводить и находить закономерность :cry: (в книге все машинные команды в 16 ричной системе ) но это в ринципе не беда главное до 255 уметь считать
:)

а вот еще вопросик ну допустим команда AND
код команды может быть 24 25 80 81 83 20 21 23 (это 1 байт команды)
а потом адреса приемника и источника идут? где можно найти адреса всех (ну или хотябы основных) регистров?

и еще для справки
получается для нормальной работы придется еще эмулировать сопроцессор и биос?


09 Mar 2012 14:41
Profile
Retired
User avatar

Joined: 25 Jul 2011 01:14
Posts: 1337
Location: WWW
Reply with quote
Post 
время курить мануалы, ибо одну и ту же задачу можно решить несколькими способами

да, а что мешает использовать 8080 или что там надо? или хочется ололо атмега? :lol:


09 Mar 2012 19:59
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
7400 wrote:
а вот еще вопросик ну допустим команда AND
код команды может быть 24 25 80 81 83 20 21 23 (это 1 байт команды)
а потом адреса приемника и источника идут? где можно найти адреса всех (ну или хотябы основных) регистров?

и еще для справки
получается для нормальной работы придется еще эмулировать сопроцессор и биос?

Ты б всё же пояснил, что хочешь сделать? А то мы уже кучу ссылок разных понакидали
и всё дальше и дальше от темы программа в озу. :wink:

...ну допустим для команды AND всё обстоит вот так:

Image

но тебе же Хардыч выложил эти справочники.

А дальше - трудно сказать, что тебе надо "для нормальной работы чего-то",
может статься, что и все порты ввода-вывода... :D

А регистры в кодах процессора имеют свои номера. Для 8080 я их знаю, а для
8086 - не интересовался никогда. Но их можно узнать через тот-же DEBUG.
Заодно и нам расскажешь. Или прочитай вот здесь.


09 Mar 2012 22:21
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Lavr wrote:
7400 wrote:
где можно найти адреса всех (ну или хотябы основных) регистров?

А регистры в кодах процессора имеют свои номера. Для 8080 я их знаю, а для
8086 - не интересовался никогда.

Сугубо из-за тебя и собственного любопытства вот поинтересовался:

Image


09 Mar 2012 23:35
Profile
Maniac

Joined: 14 Jul 2011 03:18
Posts: 255
Location: Гомель
Reply with quote
Post 
изначально подумал что можно в озу записывать программы и их выполнять но из-за невозможности этого сделать пришел к выводу что придется писать эмулятор
дак почему же не системы команд 486???)))

там кстати для удобства даже придумал схемку) только нужно найти мк подходящий) кстати микроконтроллер в принципе не решил пока какой либо пик18 либо мегу а можно на пике написать эмулятор меги)))) хотя для меги писать эмулятор пика полегче будет команд поменьше но это так к слову

собственно схемка представляет собой микроконтроллер подключенный к пзу и озу причем пзу можно будет шить через юарт а в памяти мк собственно эмулятор мк а в памяти пзу внешней эмулятор интела + биос + сопроцессор + некая видюха + собственно программа для 486
можно допустим проги писать на турбо си иль подобном
кстати для доса 4 метра оперативы нужно было?))


10 Mar 2012 05:39
Profile
Maniac

Joined: 14 Jul 2011 03:18
Posts: 255
Location: Гомель
Reply with quote
Post 
кстати у пик 18 есть режим эмуляции может даже удобнее будет


10 Mar 2012 05:42
Profile
Banned
User avatar

Joined: 20 Mar 2005 14:41
Posts: 2150
Location: От туда
Reply with quote
Post 
7400 wrote:
думаю если по битам то код гораздо быстрее получится (или кейс ему перебирать 300 значений либо всего лиш несколько битов проверить)

Табличный переход решает. Пример для AVR:
Code:
ld   temp1,Y+          ; Читаем байт команды
cpi  temp1,DevCmdCnt   ; Такая команда существует? (номер за пределами таблицы или нет)
brsh ErrorByte         ; Команда не существует - выходим с ошибкой
ldi  ZL,low(ByteCmd)   ; Загрузим младший адрес на таблицу команд
ldi  ZH,high(ByteCmd)  ; Загрузим старший адрес на таблицу команд
clr  temp2             ; Подготовим регистр для переноса
add  ZL,temp1          ;
adc  ZH,temp2          ; Вычислим адрес
lsl  ZL                ; Умножим на 2 (байты вместо слов)
rol  ZH                ;
rol  temp1             ; Бит переноса в temp1
andi temp1,$01         ; Выделим младший бит в старшей странице
out  RAMPZ,temp1       ; Выкинем в поинтер, теперь полный адрес сформирован: RAMPZ:Z
elpm temp1,Z+          ; Берём в переменные по адресу в Z адрес подпрограммы
elpm temp2,Z           ; По номеру переданному в команде и вычисленному по таблице
movw ZH:ZL,temp2:temp1 ; Копируем в Z взятый адрес из таблицы
ijmp                   ; Вызываем целевую подпрограмму действий
// Таблички меток подпрограмм
.equ DevCmdCnt = 7     ; Всего 7 команд, к примеру
ByteCmd: .dw ByteNOP,ByteMOV,ByteCALL,ByteRET,ByteJMP,ByteOR,ByteAND

Пример для i8080:
Code:
ldax b         ; Считаем байт
mov  l,a       ; В [L]
mvi  h,0       ; [H] = 0
lxi  d,ByteCMD ; Начало таблицы в [DE]
dad  h         ; [HL]*2 (слова)
dad  d         ; [HL]=[HL]+Адрес таблицы
mov  e,m       ; Младший байт в [E]
inx  h         ; Следующий байт
mov  d,m       ; Старший байт в [D]
xchg           ; Обмен [HL] и [DE]
pchl           ; Переход
//
ByteCMD: dw Cmd1,Cmd2,Cmd3...

Или можно так:
Code:
push d
ret

И никаких 300 проверок. Если байт цельный (таблица на весь байт - 256 адресов перехода), то проверку на количество делать сесьно не нужно. Ну и сам алго можно немного твикануть, в зависимости от задачи. Но в общем, думаю идея понятна и она не нова.


10 Mar 2012 06:20
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
7400 wrote:
изначально подумал что можно в озу записывать программы и их выполнять но из-за невозможности этого сделать пришел к выводу что придется писать эмулятор...

Зря только в курилку топик запрятал. Надо бы где-нибуть в открытых форумах.
Тема парсинга команд интересна многим, как и организация эмуляторов...


10 Mar 2012 06:54
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17014
Location: Colorado
Reply with quote
Post 
Lavr wrote:
7400 wrote:
изначально подумал что можно в озу записывать программы и их выполнять но из-за невозможности этого сделать пришел к выводу что придется писать эмулятор...

Зря только в курилку топик запрятал. Надо бы где-нибуть в открытых форумах.
Тема парсинга команд интересна многим, как и организация эмуляторов...


перенёс топик в авр

_________________
:eugeek: https://twitter.com/Shaos1973


10 Mar 2012 10:14
Profile WWW
Maniac

Joined: 14 Jul 2011 03:18
Posts: 255
Location: Гомель
Reply with quote
Post 
мысли вслух)
собственно не имеет смысла писать эмулятор меги для меги который бутед тянуть эмулятор i486 т.к придется писать очень много мутерного кода(но ко внешней озу придется обращатся так сказать влоб а это несовсем удобно)
эмулятор пика рассмотрел как вариант (всеж команд поменьше да и легкие все) но опять же нет привязки ко внешней озу
собственно и решил я написать собственную систему команд для 'среднего' эмулятора у которой будет доступ к озу пзу портам мк а потом уже писать в бойткодах эмулятор i486
тобиж хочу сделать примерно такое
все команды будут состоять из 6 байт не больше и не меньше (в пике16 12 бит пришлось бы проверять четная либо нечетная команда да еще плюс к тому перескакивать на адреса неочень удобно с 12битными словами черт его знает в какой участок кода оно может занести)
на саму команду будет отводится 16 бит и на данные/адрес tot 32 бита
ну ронов думаю взть по
8 однобойтовых
8 2байтовых
8 4байтовых
8 8байтовых
8 16байтовых
8 32байтовых
+
4байта на всякие флаги
а то что останется на адреса перехода(допустим чтобы можно было из call вызвать еще 1 call а потом из него еще 1 call и так пока не надоест :) ) +буферы для прошивки пзушки ну и всякую мелочевку
ну команды которые сразу стоит добавить это наверное
AND OR XOR NOT NAND NOR + - * /
sin cos tan ctg - через ряды с большой степенью погрешности либо по таблице
ну и еще для возведения в степени и всякого такого нужны
exp ln log
ну и еще sqrt(x*x+y*y)
так же операции сдвига ,сравнения, перестановки (для 1 бойтовой - перестановка тетрад , для 2 байтовой - перестановка байтов и так далее до 32байтовых) присвоения(причем если однобайтовой присвоить 2байтовую то в 1 байтовой окажется младший байт 2байтовой) , подпрограммы , переходы , нупы , слипы , ну и собственно 1 из главных задач - доступ к озу
ну и адресация для внешней памяти примерн такая : сначала будут ити примерно 64 кб пзу а потом после этой области будет ити озу

как пример команды приведу несколько команд
0000000000000000 00000000000000000000000000000000- нуп)
0000000000000001 00000000000000000000000000000000 - допустим в 32 битный регистр А32 назовем его так) занести значение 00000000000000000000000000000000
0000000000000010 0000000000000000dddddddddddddddd - выгрузить регистр A32 в озу по адресу dddddddddddddddd
ну и таких команд можно напридумывать 65 536 но думаю можно будет обойтись и 256 и уменьшить общую команду на 1 байт
какие команды еще необходимо добавить к вышеописанным или их хватит для описания тогоже i486?


10 Mar 2012 15:17
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
7400 wrote:
...какие команды еще необходимо добавить к вышеописанным или их хватит для описания тогоже i486?

А для меги не через край эмулировать i486 ?
Что-то мне подсказывает, что там и регистры "шире", чем я тебе на картинке привёл...
И других проблем наличие подозреваю.
Дело, конечно, хозяйское... только на мой взгляд, 8086 - это ещё куда ни шло,
хотя тоже не мёд... но вот i486... :-?


10 Mar 2012 16:08
Profile
Retired
User avatar

Joined: 25 Jul 2011 01:14
Posts: 1337
Location: WWW
Reply with quote
Post 
Lavr wrote:
7400 wrote:
...какие команды еще необходимо добавить к вышеописанным или их хватит для описания тогоже i486?

А для меги не через край эмулировать i486 ?
Что-то мне подсказывает, что там и регистры "шире", чем я тебе на картинке привёл...
И других проблем наличие подозреваю.
Дело, конечно, хозяйское... только на мой взгляд, 8086 - это ещё куда ни шло,
хотя тоже не мёд... но вот i486... :-?
там еще защищенный режим и прочие плюшки.
вам что железа мало? эту энергию да в мирное русло, вот был бы профит


10 Mar 2012 16:58
Profile
Banned
User avatar

Joined: 20 Mar 2005 14:41
Posts: 2150
Location: От туда
Reply with quote
Post 
Только, моя не понимать, зачем нам нужен онанизм (т.е. эмулятор), когда есть девки, (т.е. 486)?


10 Mar 2012 21:19
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17014
Location: Colorado
Reply with quote
Post 
HardWareMan wrote:
Lavr wrote:
Ну тогда сам ищи в Инете электронный справочник TECH Help.

В течхелпе мало асма. Нужен Хелппц. Энивей, доставлено!


А чего там стока EXE-шников внутри? :roll:
Можно я это снесу от греха подальше?...

_________________
:eugeek: https://twitter.com/Shaos1973


11 Mar 2012 00:14
Profile WWW
Banned
User avatar

Joined: 20 Mar 2005 14:41
Posts: 2150
Location: От туда
Reply with quote
Post 
Shaos wrote:
А чего там стока EXE-шников внутри? :roll:
Можно я это снесу от греха подальше?...

На каждый хелп по конфигуратору же. А че сносить то, платное чтоли?!


11 Mar 2012 01:48
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 35 posts ]  Go to page Previous  1, 2, 3  Next

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.