Пока только код от Patron
Пока только код от Patron
Сначала лучше загрузку с эмулятора TU58 по С2 наладить - для неё я (в принципе) могу сделать лог всех выполняемых процессором команд.
---------- Post added at 17:09 ---------- Previous post was at 17:01 ----------
А если не грузиться сразу при помощи TU58.SAV, а сначала загрузиться как обычно и дать команду:
DIR/FU/BL/VOL DD:
А потом:
BOOT DD:
---------- Post added at 17:17 ---------- Previous post was at 17:09 ----------
Вообще, насколько я понимаю - разница в работе с последовательным портом между эмуляторами ДВК и УКНЦ в настоящий момент только в том, что в эмуляторе ДВК в принципе невозможен оверран.
Я давал уже раньше здесь код, позволяющий имитировать работу С2 по кабелю с квитированием ( т.е. в принципе без потери байтов ) - пора этот код испытать.
Beta 38
- Палитра в 128 цветов, из-за этого размер файла скриншота увеличился в два раза
- Интегрирован код работы с COM-портом и код реализации сети через COM-порт от Vamos; работа Стык С2 явно улучшилась; но сеть пока практически не работает
- Для настройки COM-портов сделан диалог редактирования структуры DCB
- Исправление ошибок
http://ukncbtl.googlecode.com/files/...beta38-exe.zip
Благодаря лучшей реализации Стык С2 появилась возможность загрузки и работы с HX Server, связь двух программ на одном PC выполняется через виртуальные порты com0com.
Последняя версия HX Server by Patron: http://zx.pk.ru/showthread.php?p=569515#post569515
Инструкции по настройке: http://zx-pk.ru/showpost.php?p=564797&postcount=160
Запускаем HX Server. После этого запускаем эмулятор, в Settings указываем правильное название и настройки порта. В главном меню УКНЦ выбираем загрузку со Стык С2. Ожидаем загрузки системы.
Выражаю особую благодарность тем, кто активно помогал и содействовал появлению этой версии: Vamos, Patron, Titus и конечно hobot.
Последний раз редактировалось nzeemin; 03.02.2013 в 16:54.
У меня сложилось впечатление, что в коде посылки BREAK можно обойтись вообще без Sleep(15)
Код:if (!(m_Port176574 & 01)) { // BREAK SetCommBreak( m_hEmulatorComPort ); Sleep(15); }
Поскольку утилита оказалась востребованной, сделал небольшое улучшение.
Теперь в командной строке можно задать опцию -dcb и указать к ней параметры структуры DCB, например:
UkncComSender.exe COM8 VERT.SAV -dcb "rts=on"
Реализация использует функцию Win32 BuildCommDCB(), которая парсит строку параметров и заполняет DCB: http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspxКод:UkncComSender Utility v1.2 by Nikita Zimin [Feb 3 2013 19:57:55] Serial port name is not specified. Usage: UkncComSender [<Options>] <PortName> <FileToSendName> Options: -dcb "<DcbParams>" <DcbParams>: baud=b parity={n|e|o|m|s} data={5|6|7|8} stop={1|1.5|2} to={on|off} xon={on|off} odsr={on|off} octs={on|off} dtr={on|off|hs} rts={on|off|hs|tg} idsr={on|off}
http://ukncbtl.googlecode.com/files/UkncComSender.zip
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
nzeemin, вот с таким ini крашится, не знаю, нужно ли что-то поправлять, без него-то работает =)
Скрытый текст
Код:[UKNCBTL] Toolbar=1 Keyboard=1 Tape=0 ScreenHeightMode=4 Debug=0 Cartridge1=C:\Documents and Settings\User\Мои документы\Dropbox\УКНЦ\UKNCBTL\roms\ide_wdromv0110.bin Sound=1 Hard2=C:\hdd.img Parallel=0 Autostart=0 SerialPort= SoundVolume=27531[свернуть]
Помучал еще код эмулятора, добился стабильной загрузки TU58, теперь загрузка из сети проходит до стадии загрузки системы а дальше опять облом с переполнением .
Вот код, эмулирующий работу по кабелю с квитированием и полностью исключающий переполнения:
Код:#include <deque> std::deque<BYTE> CA_OverrunBuf; BOOL CFirstMemoryController::NetworkInput(BYTE inputByte) { if (m_Port176560 & 0200) // Ready? { if( bEmulate_CA_Overrun ) { m_Port176560 |= 010000; // Set Overflow flag } else { CA_OverrunBuf.push_back( inputByte ); // Store byte.. } } else { m_Port176562 = (WORD)inputByte; m_Port176560 |= 0200; // Set Ready flag if (m_Port176560 & 0100) // Interrupt? return TRUE; } return FALSE; } WORD CFirstMemoryController::GetPortWord(WORD address) { switch (address) { case 0176562: // СА: Регистр данных приемника case 0176563: // нижние 8 бит доступны по чтению m_Port176560 &= ~010200; // Reset bit 12 and bit 7 if( CA_OverrunBuf.size() ) { WORD uPrev = m_Port176562; m_Port176562 = (WORD)CA_OverrunBuf.front(); CA_OverrunBuf.pop_front(); m_Port176560 |= 0200; // Set Ready flag if( m_Port176560 & 0100 ) m_pCPU->InterruptVIRQ(9, 0360); return (uPrev + m_NetStation); } return (m_Port176562 + m_NetStation); } }
Кстати - при переполнении в регистре данных остаётся старый байт, а не появляется новый.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)