Поиск-1, Поиск-2, Парус ВИ-201, Олимпик-С, Электроника МК61
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
ok, а от чего тогда исходники?
---------- Post added at 21:10 ---------- Previous post was at 21:04 ----------
... и наудачу -- более свежие ТО есть? :-)
Кстати, исходников 2 набора и второй, видимо, от П-2 -- PoiskComp/bios2poi.7z
Какие м/с на схеме соответствуют описанным в ТО?
4.5.4. Контроллер ЭЛТ (микросхемы D47, D50, D51, D54, D57, D10.4 и D12.1)
Господа, а можно посмотреть как вы обрабатываете 68h и 6Ah порты? Откуда можно качнуть скелеты poisk1, poisk2 для mess? У меня щаз лично ваще mess.org не открывается...
Качнул отсюда http://www.progettosnaps.net/mess/links.html исходники mess 0.148 и вообще там не увидел обработки вышеуказанных портов... Странно....
А там их и нет, это у меня локально все живет. Текущее состояние -- https://gist.github.com/shattered/5231577 (картинки нет, NMI не вызываются -- похоже, что BIOS отключает их, когда сам рисует текст)
Из-за фокуса с перетасовкой портов придется отказаться от AM_DEVREADWRITE и сделать 'trampoline' -- функции, которые будут обращаться к нужному экземпляру i8255_device
Последний раз редактировалось shattered; 24.03.2013 в 15:51.
Я вот пытаюсь прикрутить по образу и подобию со старого эмулятора SovietPC, там в директории конфигурации скрипт описывающий Poisk-1. В нем такие строки:
Я пишу на сях следующее примерно (прошу прощения за *****код, танцор играет как умеет):PHP код:
//Port values
dim p6Ah as byte=0x00, p68h as byte=0x80
//CGA emulation
property PORT_68(Value as byte)
p68h=Value
//CGA mode value
b=8 : if (Value and 0x80)<>0 then b=b or 1 //resolution
if (Value and 0x40)=0 then b=b or 2 //graph mode
if (p6Ah and 0x40)<>0 then b=b or 4 //disable color
if (Value and 0x80)<>0 then b=b or 0x10 //resolution //??? - such was in SovietPC
CGA.MODE_PORT=b
//CGA color value
b=0 : if (Value and 1)<>0 then b=b or 4 //Red
if (Value and 2)<>0 then b=b or 2 //Green
if (Value and 4)<>0 then b=b or 1 //Blue
if (Value and 0x10)<>0 then b=b or 0x20 //palette index
if (Value and 0x20)<>0 then b=b or 0x10 //intensity
CGA.COLOR_PORT=b
end
function PORT_68 as byte : result=p68h : end
property PORT_6A(Value as byte) : p6Ah=Value : PORT_68=p68h : end
function PORT_6A as byte : result=p6Ah : end
pc.WritePort(0x68)=PORT_68 : pc.ReadPort(0x68)=PORT_68
pc.WritePort(0x6A)=PORT_6A : pc.ReadPort(0x6A)=PORT_6A
Но чего-то мне кажется, что автор SovietPC где-то ошибся маленько, так как не правильно биты выставляются хотя бы у режима.. Буду разбиратьсяPHP код:
void poisk_out(uint16_t addr, uint8_t val)
{
uint8_t b;
switch (addr)
{
case 0x68:
p68h = val;
b = 8;
if (!(val & 0x80)) b = b | 1;
if (val & 0x40) b = b | 2;
if (!(p6Ah & 0x40)) b = b | 4;
if (!(val & 0x80)) b = b | 0x10;
//cga_out(0x3D8,b);
cgamode=b;
b = 0;
if (!(val & 1)) b = b | 4;
if (!(val & 2)) b = b | 2;
if (!(val & 4)) b = b | 1;
if (!(val & 0x10)) b = b | 0x20;
if (!(val & 0x20)) b = b | 0x10;
//cga_out(0x3D9,b);
cgacol=b;
pclog("POISK 68h cgamode: %02X cgacol: %02X\n",cgamode,cgacol);
return;
case 0x6A:
p6Ah = val;
val = p68h;
b = 8;
if (!(val & 0x80)) b = b | 1;
if (val & 0x40) b = b | 2;
if (!(p6Ah & 0x40)) b = b | 4;
if (!(val & 0x80)) b = b | 0x10;
//cga_out(0x3D8,b);
cgamode=b;
b = 0;
if (!(val & 1)) b = b | 4;
if (!(val & 2)) b = b | 2;
if (!(val & 4)) b = b | 1;
if (!(val & 0x10)) b = b | 0x20;
if (!(val & 0x20)) b = b | 0x10;
//cga_out(0x3D9,b);
cgacol=b;
return;
}
}
uint8_t poisk_in(uint16_t addr)
{
switch (addr)
{
case 0x68:
return p68h;
case 0x6A:
return p6Ah;
}
return 0xFF;
}
А что не так?
Много всего не так. Вы хотя-бы скажите, я в си коде ничего не путаю в условиях? Вроде ж по умолчанию там if (a % 255) bla-bla это то же с что я сравниваю результат с нулем, верно? Привык к асму и паскалю етить его в кочерыжку ( Завтра просплюсь с этой адской водки и проведу ряд экспериментов, думаю ситуация прояснится немного..
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)