Помимо GDI и DDraw там ещё варианты были - их попробуй. Или поставь режим Bilinear или как его там - тоже никакого тулбара не будет.
Вид для печати
Помимо GDI и DDraw там ещё варианты были - их попробуй. Или поставь режим Bilinear или как его там - тоже никакого тулбара не будет.
Jeffie, ты слишком уж привередливый. Имхо это мелочь по сравнению с процессом перехода от fullscreen к windowed, когда экран винды не обновляется и приходится тыкаться в minimize/maximize, обновлять экран.Цитата:
Сообщение от Jeffie
но я привык. и, почему-то ни разу не переходил от windowed к fullscreen ;)
:) :) :)
Да я вроде и не ругался нигде.........., sos.l как я понимаю не изменил свой формат и новом релизе унреала(в отличии от ini)?
И еще- очень хотелось бы АТМ-срм дискетки читать, у меня много всякой
бодяги на них все еще валяется в чулане, если кот на них не нагадил........
;)
ладно всем привет и спасибо
в GDI можно пофиксить, если напрягает. а в ddraw не должно быть такогоЦитата:
Сообщение от Jeffie
это вроде исправил несколько версий назад...Цитата:
Сообщение от diver
пока мне больше нравится frame resampler, сейчас занимаюсь увеличением его контрастности. даже не знаю, делать что-ли его и оконным тоже, раз такое дело...Цитата:
Сообщение от diver
он поменяется, только если поменяется пршивка BASIC48, поэтому я его не выкладываю каждый разЦитата:
Сообщение от Goga
дык, какие проблемы? :) нужен копировщик типа AMD или Teledisk, и всё...Цитата:
Сообщение от Goga
Одназначно ;) Реальная штука, огромный thx ;)Цитата:
пока мне больше нравится frame resampler, сейчас занимаюсь увеличением его контрастности. даже не знаю, делать что-ли его и оконным тоже, раз такое дело...
Да, кстати... Эмуляция модема в UnrealSpeccy 0.29b изначально неработоспособна в принципе. Пока делал терминалку, доработал чуть-чуть. Тоже кое-чего не хватает еще, но хотя бы работает.
MODEM.C:
Код:void ISA_MODEM::open(unsigned char port)
{
if (open_port == port) return;
whead = wtail = rhead = rtail = 0;
if (hPort && hPort != INVALID_HANDLE_VALUE) CloseHandle(hPort);
open_port = port;
if (!port) return;
char portName[6] = "COM*"; portName[3] = port + '0';
hPort = CreateFile(portName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
if (hPort == INVALID_HANDLE_VALUE) {
printf("can't open modem on %s (%08X)\n", portName, GetLastError());
conf.modem_port = open_port = 0; return;
}
COMMTIMEOUTS times;
times.ReadIntervalTimeout = MAXDWORD;
times.ReadTotalTimeoutMultiplier = 0;
times.ReadTotalTimeoutConstant = 0;
times.WriteTotalTimeoutMultiplier = 0;
times.WriteTotalTimeoutConstant = 0;
SetCommTimeouts(hPort, ×);
#if 0
DCB dcb;
if (GetCommState(hPort, &dcb)) {
printf(
"modem state:\n"
"rate=%d\n"
"parity=%d, OutxCtsFlow=%d, OutxDsrFlow=%d, DtrControl=%d, DsrSensitivity=%d\n"
"TXContinueOnXoff=%d, OutX=%d, InX=%d, ErrorChar=%d\n"
"Null=%d, RtsControl=%d, AbortOnError=%d, XonLim=%d, XoffLim=%d\n"
"ByteSize=%d, Parity=%d, StopBits=%d\n"
"XonChar=#%02X, XoffChar=#%02X, ErrorChar=#%02X, EofChar=#%02X, EvtChar=#%02X\n\n",
dcb.BaudRate,
dcb.fParity, dcb.fOutxCtsFlow, dcb.fOutxDsrFlow, dcb.fDtrControl, dcb.fDsrSensitivity,
dcb.fTXContinueOnXoff, dcb.fOutX, dcb.fInX, dcb.fErrorChar,
dcb.fNull, dcb.fRtsControl, dcb.fAbortOnError, dcb.XonLim, dcb.XoffLim,
dcb.ByteSize, dcb.Parity, dcb.StopBits,
(BYTE)dcb.XonChar, (BYTE)dcb.XoffChar, (BYTE)dcb.ErrorChar, (BYTE)dcb.EofChar, (BYTE)dcb.EvtChar);
}
#endif
}
void ISA_MODEM::close()
{
if (!hPort || hPort == INVALID_HANDLE_VALUE) return;
CloseHandle(hPort); hPort = INVALID_HANDLE_VALUE;
open_port = 0;
}
void dump1(BYTE *p, unsigned sz)
{
while (sz) {
printf("\t");
unsigned chunk = (sz > 16)? 16 : sz;
for (unsigned i = 0; i < chunk; i++) printf("%02X ", p[i]);
for (; i < 16; i++) printf(" ");
for (i = 0; i < chunk; i++) printf("%c", (p[i] < 0x20)? '.' : p[i]);
printf("\n");
sz -= chunk, p += chunk;
}
printf("\n");
}
void ISA_MODEM::io()
{
if (!hPort || hPort == INVALID_HANDLE_VALUE) return;
unsigned char temp[BSIZE];
int needwrite = whead - wtail; if (needwrite < 0) needwrite += BSIZE;
if (needwrite) {
if (whead > wtail) memcpy(temp, wbuf+wtail, needwrite);
else memcpy(temp, wbuf+wtail, BSIZE-wtail), memcpy(temp+BSIZE-wtail, wbuf, whead);
DWORD written = 0;
if (WriteFile(hPort, temp, needwrite, &written, 0)) {
//printf("\nsend: "); dump1(temp, written);
wtail = (wtail+written) & (BSIZE-1);
}
}
if (((whead+1) & (BSIZE-1)) != wtail) reg[5] |= 0x60;
int canread = rtail - rhead - 1; if (canread < 0) canread += BSIZE;
if (canread) {
DWORD read = 0;
if (ReadFile(hPort, temp, canread, &read, 0) && read) {
for (unsigned i = 0; i < read; i++) rcbuf[rhead++] = temp[i], rhead &= (BSIZE-1);
//printf("\nrecv: "); dump1(temp, read);
}
}
if (rhead != rtail) reg[5] |= 1;
setup_int();
}
void ISA_MODEM::setup_int()
{
reg[6] &= ~0x10;
unsigned char mask = reg[5] & 1;
if (reg[5] & 0x20) mask |= 2, reg[6] |= 0x10;
if (reg[5] & 0x1E) mask |= 4;
// if (mask & reg[1]) cpu.nmi()
if (mask & 4) reg[2] = 6;
else if (mask & 1) reg[2] = 4;
else if (mask & 2) reg[2] = 2;
else if (mask & 8) reg[2] = 0;
else reg[2] = 1;
}
void ISA_MODEM::write(unsigned nreg, unsigned char value)
{
if ((1<<nreg) & ((1<<2)|(1<<5)|(1<<6))) return; // R/O registers
if (nreg < 2 && (reg[3] & 0x80)) {
div[nreg] = value;
DCB dcb;
if (GetCommState(hPort, &dcb)) {
if (divfq == 0) { divfq = 1; }
dcb.BaudRate = 115200 / divfq;
SetCommState(hPort, &dcb);
}
return;
}
if (nreg) {
reg[nreg] = value;
if (nreg == 3) {
// LCR set, renew modem config
DCB dcb;
if (GetCommState(hPort, &dcb)) {
// printf(
"modem state:\n"
"rate=%d\n"
"parity=%d, OutxCtsFlow=%d, OutxDsrFlow=%d, DtrControl=%d, DsrSensitivity=%d\n"
"TXContinueOnXoff=%d, OutX=%d, InX=%d, ErrorChar=%d\n"
"Null=%d, RtsControl=%d, AbortOnError=%d, XonLim=%d, XoffLim=%d\n"
"ByteSize=%d, Parity=%d, StopBits=%d\n"
"XonChar=#%02X, XoffChar=#%02X, ErrorChar=#%02X, EofChar=#%02X, EvtChar=#%02X\n\n",
dcb.BaudRate,
dcb.fParity, dcb.fOutxCtsFlow, dcb.fOutxDsrFlow, dcb.fDtrControl, dcb.fDsrSensitivity,
dcb.fTXContinueOnXoff, dcb.fOutX, dcb.fInX, dcb.fErrorChar,
dcb.fNull, dcb.fRtsControl, dcb.fAbortOnError, dcb.XonLim, dcb.XoffLim,
dcb.ByteSize, dcb.Parity, dcb.StopBits,
(BYTE)dcb.XonChar, (BYTE)dcb.XoffChar, (BYTE)dcb.ErrorChar, (BYTE)dcb.EofChar, (BYTE)dcb.EvtChar);
dcb.fBinary = TRUE;
dcb.fParity = ((reg[3] & 0x8) != 0) ? TRUE : FALSE;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fDsrSensitivity = FALSE;
dcb.fTXContinueOnXoff = FALSE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.fErrorChar = FALSE;
dcb.fNull = FALSE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fAbortOnError = FALSE;
dcb.ByteSize = 6 + (reg[3] & 2) - (reg[3] & 1);
if ((reg[3] & 0x8) == 0) {
dcb.Parity = NOPARITY;
} else if ((reg[3] & 0x30) == 0) {
dcb.Parity = ODDPARITY;
} else if ((reg[3] & 0x30) == 0x10) {
dcb.Parity = EVENPARITY;
} else if ((reg[3] & 0x30) == 0x20) {
dcb.Parity = MARKPARITY;
} else {
dcb.Parity = SPACEPARITY;
}
if ((reg[3] & 0x4) == 0) {
dcb.StopBits = ONESTOPBIT;
} else if ((reg[3] & 3) == 1) {
dcb.StopBits = ONE5STOPBITS;
} else {
dcb.StopBits = TWOSTOPBITS;
}
SetCommState(hPort, &dcb);
}
} else if (nreg == 4) {
// MCR set, renew DTR/CTS
if ((reg[4] & 1) == 0) {
EscapeCommFunction(hPort, CLRDTR);
} else {
EscapeCommFunction(hPort, SETDTR);
}
if ((reg[4] & 2) == 0) {
EscapeCommFunction(hPort, CLRRTS);
} else {
EscapeCommFunction(hPort, SETRTS);
}
}
return;
}
reg[5] &= ~0x60;
if (((whead+1) & (BSIZE-1)) == wtail) {
reg[5] |= 2;
} else {
wbuf[whead++] = value, whead &= (BSIZE-1);
if (((whead+1) & (BSIZE-1)) != wtail) reg[5] |= 0x60;
}
setup_int();
}
unsigned char ISA_MODEM::read(unsigned nreg)
{
unsigned char result = reg[nreg];
if (nreg < 2) {
if (reg[3] & 0x80) result = div[nreg];
else if (!nreg) {
reg[5] &= ~1;
if (rhead != rtail) result = reg[0] = rcbuf[rtail++], rtail &= (BSIZE-1);
if (rhead != rtail) reg[5] |= 1;
setup_int();
}
} else if (nreg == 5) reg[5] &= ~0x0E, setup_int();
return result;
}
ну зачем так сразу "в принципе не способен..." у меня работала программа ping 0.3, другого софта я не видел (терминалки не в счёт - мне некуда коннектиться)
спасибо. как я понял, пофиксен глюк с чтением лишнего символа из буфера чтения и спектрум теперь может выбирать скорость и режим обмена, раньше использовались значения, которые автоматически выбрала windows
теперь новый вопрос. сейчас я думаю, а не поддержать ли CD-ROM? но пока не вижу софта, кроме CD-WALK. нужен софт для audio-cd и data-cd. если нет ничего кроме CD-WALK, то, с одной стороны, может cd-rom нафиг не нужен спектрумистам. а, с другой, мне не на чём будет отлаживать эмулятор :(
думаю стоит!и заодно потерроризировать psb^triumph (psbhlw@mail.ru)Цитата:
Сообщение от SMT
т.к этот мегачел сваял в своё время прогу для просмотра видеофильмов на zx (звук через gs).
Обязательно стОит! И ay-mouse хочу...Цитата:
Сообщение от SMT