Шедевр портирования на УКНЦ - игра Highway Encounter
Эмуляторы: UKNCBTL, EmuStudio (респект авторам)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Добраться до УК-НЦ сейчас мне тяжело, так что пока про УК-НЦ ничего не скажу.
В других же случаях ещё на было случая, что бы эта буферизация (и не в Windows, а в железе, скажем, у моих FTDI стоит умолчание - 4096 байт) как-то мешала.
В настройках COM порта
Я так понимаю, что что-то самописное используется для общения с УК-НЦ через COM порт?
Со стороны УКНЦ стандартный загрузчик из ПЗУ. Он банально грузит 512 байт по адресам 0-777 и если первый код = nop - то запускает прямо с адреса 0.
Со стороны ПК юзается софт Никиты (https://github.com/nzeemin/ukncbtl-u...cComSender.cpp, понятно с некими уже моими модификациями ибо мне не надо грузить .sav, а только загрузить 512 байт)
Шедевр портирования на УКНЦ - игра Highway Encounter
Эмуляторы: UKNCBTL, EmuStudio (респект авторам)
BlaireCas, а учитывая, что у вас COM через USB, можете опробовать мою утилитку загрузки? Это тот же UkncComSender, только с другим загрузчиком и параметром для скорости. Мой загрузчик учитывает тайм-аут и считает контрольную сумму. Если что не так, то на экране будет вывод, что произошла ошибка. На железном порту всё прекрасно, но учитывая, что USB плюётся пакетами, не будет ли ошибки тайм-аута.
Вызов: UkncComSender COM-порт FileName [BaudRate]. Третий параметр необязательный, по умолчания 9600. В вашем случае надо 57600.
Актуальная версия дальше по теме.
Последний раз редактировалось Alex_K; 26.06.2023 в 15:30.
Ваша версия "почти прокатила"Выдало
Loading...
?UKNCMSN-F-Timeout
(я так понимаю просто после загрузчика шел payload и поэтому загрузчик-то полностью забросился, а вот сам файл уже недошел, тут похоже правда какая-то проблема с буферизацией и последние сколько-то байт у меня из винды недоходят)
Последний раз редактировалось BlaireCas; 26.06.2023 в 13:19.
Шедевр портирования на УКНЦ - игра Highway Encounter
Эмуляторы: UKNCBTL, EmuStudio (респект авторам)
Файлик довольно простенький, 1024 байта (впрочем я разные пробовал).
TSTCLR.ZIP
Шедевр портирования на УКНЦ - игра Highway Encounter
Эмуляторы: UKNCBTL, EmuStudio (респект авторам)
Похоже помогла вот такая шляпа под конец программки!
Внимание! Sleep - важен перед flush. Точного значения сколько "спать" я не определил. Поставил на глаз.Код:::Sleep(2000); ::FlushFileBuffers(hComPort); ::PurgeComm(hComPort, PURGE_RXCLEAR); ::PurgeComm(hComPort, PURGE_TXCLEAR);
(откуда узнал про sleep - нууу.. гуглением)
Кусок кода для линукса из stackoverflow
I think I figured it out. For some reason, I need to add a delay before flushing. These two lines added before returning fd seem to have done the trick:
sleep(2); //required to make flush work, for some reason
tcflush(fd,TCIOFLUSH);
--- оттуда-же ---
The cause of this problem lies in using a USB serial port. If you use a regular serial port, you will not have this problem.
Most USB serial port drivers don't support flushing properly, probably because there's no way of knowing if there's still data in the internal shift register, FIFO or in the USB subsystem.
See also Greg's reply to a similar problem reported earlier here.
Your sleep may cure the problem, but it's only a work-around. Unfortunately there is no solution other than using a regular serial port.
[свернуть]
Последний раз редактировалось BlaireCas; 26.06.2023 в 14:12.
Шедевр портирования на УКНЦ - игра Highway Encounter
Эмуляторы: UKNCBTL, EmuStudio (респект авторам)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)