Территория 3DOшников > Инженерная

XBUS

(1/5) > >>

Altmer:
Немного незакончена со стороны эмулятора система плагинов для XBUS, но законченая со стороны самих плагинов. Это шина на которой висит CD-ROM и к которой подключались внешние устройства. Видели наверное IsoXBUS.dll - это как раз реализация привода, вот интерфейс данной библиотеки:


--- Код: C++ ---#ifndef ISO_3DO_HEADER#define ISO_3DO_HEADER #define XBP_INIT 0 //инициализация плагина#define XBP_RESET 1 //сброс с параметром (например путь к образу)#define XBP_SET_COMMAND 2 //XBUS#define XBP_FIQ 3 //проверка прерывания от устройства#define XBP_SET_DATA 4 //XBUS#define XBP_GET_DATA 5 //XBUS#define XBP_GET_STATUS 6 //XBUS#define XBP_SET_POLL 7 //XBUS#define XBP_GET_POLL 8 //XBUS#define XBP_SELECT 9 //информирует о том что устройство выбрано оперой - не обязательно к реализации#define XBP_RESERV 10 //резервный порт (чтение из устройства)#define XBP_DESTROY 11 //деинициализация плагина  #define XBP_GET_SAVESIZE 19 //для сэйвов#define XBP_GET_SAVEDATA 20#define XBP_SET_SAVEDATA 21 #ifdef XBUS_EXPORTS#define XBUS_API __declspec(dllexport)#else#define XBUS_API __declspec(dllimport)#endif extern "C"{XBUS_API void* _xbplug_MainDevice(int proc, void* data); #ifdef XBUS_EXPORTSBOOL APIENTRY DllMain( HMODULE hModule,                       DWORD  ul_reason_for_call,                       LPVOID lpReserved                                         );#endif }; #ifndef XBUS_EXPORTS#pragma comment(lib, "IsoXBUS.lib")#endif #endif  
Если кто хочет сделать поддержку фото и аудио дисков - вперед! :)
Патенты описывающие шину тут: http://altmer.arts-union.ru/3DO/docs.htm, еще советую заглянуть в SDK.

Altmer:
Все процедуры типа XBP_SET_ - передают 8-битные данные, поскольку шина 8-битная, аналогично для XBP_GET_.

Вот пример функции _xbplug_MainDevice:


--- Код: ---cdrom_Device isodrive;

void* _xbplug_MainDevice(int proc, void* data)
{
 uint32 tmp;
 void* xfisonew;
 switch(proc)
 {
case XBP_INIT:
isodrive.Init();
return (void*)true;
case XBP_RESET:
if(!data)
{
isodrive.Destroy();
isodrive.Init();
}
else if(((char*)data)[0])isodrive.InitISO((char*)data);
else isodrive.InitCD();
break;
case XBP_SET_COMMAND:
isodrive.SendCommand((unsigned char)data);
break;
case XBP_FIQ:
return (void*)isodrive.TestFIQ();  //фактически - возвращается булева переменная: 0 - нет прерывания, 1 - есть
case XBP_GET_DATA:
return (void*)isodrive.GetDataFifo();
case XBP_GET_STATUS:
return (void*)isodrive.GetStatusFifo();
case XBP_SET_POLL:
isodrive.SetPoll((unsigned int)data);
break;
case XBP_GET_POLL:
return (void*)isodrive.GetPoll();
case XBP_DESTROY:
isodrive.Destroy();
break;
case XBP_GET_SAVESIZE:
tmp=sizeof(cdrom_Device)+12;
return (void*)tmp;
case XBP_GET_SAVEDATA:
tmp=12;
((uint32*)data)[0]=0xfefefe01;
((uint32*)data)[1]=fs3do_SecPosition(isodrive.fisonew);
((uint32*)data)[2]=fs3do_SubPosition(isodrive.fisonew);
memcpy(&(((uint8*)data)[tmp]),&isodrive,sizeof(cdrom_Device));
break;
case XBP_SET_SAVEDATA:
if(((uint32*)data)[0]!=0xfefefe01)return NULL;
xfisonew=isodrive.fisonew;
memcpy(&isodrive,&(((uint8*)data)[12]),sizeof(cdrom_Device));
isodrive.fisonew=xfisonew;
fs3do_DirectSeek(xfisonew, ((uint32*)data)[1], ((uint32*)data)[2]);
return (void*)1;
 };

 return NULL;
}



--- Конец кода ---

Altmer:
Вот некоторая инфа по протоколу сидюка:
http://www.chiark.greenend.org.uk/~theom/electronics/panasoniccd.html

Black Jack:
хочу уточнить
1)там описывается распиновка sanyo , а fz и goldstar биосы не будут глючить на эмуляторе или все сд по распиновке одинаковые у 3do?просто на моем fz от силы 20-22 вывода но не как не 40!!!

2)а как прозванивают и узнают распиновку?

3)и раз ты уже в курсе распиновки что означают выводы:
6 operation Mode bit 0
14 CD-Status bit 0
20 CD-Status bit 1
26 CD-Status / Data enable
28 CD-Status bit 3

вот еще вариант распиновки http://pinouts.ru/Storage/CdRomPanasonic.shtml

Altmer:
1) Распиновка не имеет отношения к эмуляции, и насколько мне известно эта распиновка соответствует разъему для 3DO-Blaster'а. На FZ-1 например на раяъем выведен сам XBUS, т.е. там можно раскопать дорожки интерфейса и определить какие ножки нужно оторвать на остальных приставках, что бы сделать внешний привод или флешь, но у меня нет такой консоли, так что если решил ковырять это дело - рекомендую начать с нее, а лучше с 3DO-Blaster'а.

2) Строго говоря - распиновку прозвонить нельзя, но можно попытаться вычислить какой контакт для чего с помощью анализа соединений дорожки с элементами платы, тестера и асциллографа.

3) Читай доки, тут вроде табличка приведена с назначениями в скобках: http://www.chiark.greenend.org.uk/~theom/electronics/panasoniccd.html

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии