nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 23:11



Reply to topic  [ 2 posts ] 
пошаговая симуляция сложных автоматов 
Author Message
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22416
Location: Silicon Valley
Reply with quote
решил я наш гипотетический недосимулятр начать пилить снизу - от программирования, поэтому создал отдельный топик, т.к. тут про таскание блочков мышкой и рисование осцыллограммок небудет ничего - лишь голимое сишное программирование в режиме pedantic, причём с возможностью собирать код старыми-добрыми 16-битными компиляторами...

_________________
:dj: https://mastodon.social/@Shaos


Last edited by Shaos on 01 Sep 2012 07:19, edited 1 time in total.



25 Aug 2012 16:37
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22416
Location: Silicon Valley
Reply with quote
Post 
начну пожалуй с фреймворка для написания микропроцессоров, над которым будет построен 8080 (и 8085), далее 6502, а потом и всякие пики подтянутся

для начала максимально абстрагируемся от конкретных микропроцессоров - представим, что у нас есть некий API по доступу к 8-битной памяти, адресуемой 16-битным адресом, причём у памяти есть "слои" (например для 8080 слой 0 может обозначать память, а слой 1 - порты ввода-вывода)

Code:
typedef char NEDOSIGNAL; /* suggested values 'H','L','Z' */
typedef unsigned char NEDOBYTE;
typedef unsigned short NEDOWORD;
typedef unsigned long NEDODWORD;

typedef NEDOBYTE (*NEDOFUN_RD)(void*,int,NEDOWORD); /* read callback */
typedef void (*NEDOFUN_WR)(void*,int,NEDOWORD,NEDOBYTE); /* write callback */
typedef void (*NEDOFUN_ER)(void*,char*); /* error callback */
typedef int (*NEDOFUN_EX)(void*,NEDOBYTE); /* execution callback returns number of cycles to simulate */

#define NEDOMACHINE_SIGN "NEDOMAC"

typedef struct _NEDOMACHINE
{
  char sign[8]; /* signature "NEDOMAC",\0 */
  NEDOWORD addr; /* current address */
  NEDOFUN_RD rfun; /* pointer to read function */
  NEDOFUN_WR wfun; /* pointer to write function */
  NEDOFUN_ER efun; /* pointer to error function */
  NEDOFUN_EX xfun[256]; /* 256 pointers to execution functions */
  NEDOBYTE data[1]; /* custom data of any size */
} NEDOMACHINE;

NEDOMACHINE* nedomachine_new(int datasz, NEDOFUN_RD rfun, NEDOFUN_WR wfun, NEDOFUN_ER efun);
void nedomachine_operation(NEDOMACHINE *m, NEDOBYTE opcode, NEDOFUN_EX xfun);
void nedomachine_step(NEDOMACHINE *m);
void nedomachine_destroy(NEDOMACHINE *m);


в общем случае "машин" в программе может быть создано много - коллбеки могут их различать по указателю на активную машину

nedomachine_new создаёт новую машину с указанием размера данных, под которые также должна быть аллоцирована память, а также указателей на читающую и пишущую функции для доступа к памяти, позже добавил функцию обработки ошибок (может быть NULL)
nedomachine_operation добавляет функцию-обработчик инструкции процессора с кодом opcode
nedomachine_step производит один шаг симуляции за который будет выполнена одна команда либо один такт процессора (зависит от конкретной реализации исполняющих коллбеков)
nedomachine_destroy освобождает память удаляя ранее созданный объект

в момент когда нужно обработать команду (внутри nedomachine_step), машина увеличит текущий адрес на единицу и вызовет коллбек-функцию с индексом, соответствующим ранее прочитанной команде (функция типа NEDOFUN_EX)

P.S. 26 августа добавил сигнатуру, коллбек для обработки ошибок и переименовал некоторые функции вернув обратно понятие шага эмуляции step

P.P.S. 27 августа понял, что в этом фреймворке можно не только процессоры эмулить, но и произвольные микрокодовые конструкции, причём как с автоматическим инкрементом адреса, так и без...

_________________
:dj: https://mastodon.social/@Shaos


25 Aug 2012 19:20
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 2 posts ] 

Who is online

Users browsing this forum: No registered users and 30 guests


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.