Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Эмуляторы отечественных компьютеров (http://zx-pk.ru/forumdisplay.php?f=61)
-   -   Эмулятор УКНЦ (http://zx-pk.ru/showthread.php?t=6257)

Vamos 2nd February 2013 18:17

1 Attachment(s)
Пока только код от Patron
http://zx-pk.ru/attachment.php?attac...1&d=1359811007

Patron 2nd February 2013 19:17

Quote:

Originally Posted by nzeemin (Post 572559)
я пробовал запускать загрузку по сети когда оба эмулятора работают на полной скорости (без звука) -- загрузка тоже падает с ошибкой.

Сначала лучше загрузку с эмулятора TU58 по С2 наладить - для неё я (в принципе) могу сделать лог всех выполняемых процессором команд.

---------- Post added at 17:09 ---------- Previous post was at 17:01 ----------

Quote:

Originally Posted by Vamos (Post 572563)
Пока только

А если не грузиться сразу при помощи TU58.SAV, а сначала загрузиться как обычно и дать команду:
DIR/FU/BL/VOL DD:

А потом:
BOOT DD:

---------- Post added at 17:17 ---------- Previous post was at 17:09 ----------

Вообще, насколько я понимаю - разница в работе с последовательным портом между эмуляторами ДВК и УКНЦ в настоящий момент только в том, что в эмуляторе ДВК в принципе невозможен оверран.

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

nzeemin 3rd February 2013 00:00

Quote:

Originally Posted by Vamos (Post 426380)
На реальной машине вот так

На текущем коде эмулятора (ревизия 482), палитра GRB.
Думаю, этот тест можно считать пройденным.

http://img-fotki.yandex.ru/get/6424/..._7834a066_orig

nzeemin 3rd February 2013 17:15

beta 38
 
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.

Patron 3rd February 2013 17:46

У меня сложилось впечатление, что в коде посылки BREAK можно обойтись вообще без Sleep(15)
Code:

                if (!(m_Port176574 & 01))
                { // BREAK
                    SetCommBreak( m_hEmulatorComPort );
                    Sleep(15);
                }


nzeemin 3rd February 2013 21:06

UkncComSender 1.2
 
Поскольку утилита оказалась востребованной, сделал небольшое улучшение.
Теперь в командной строке можно задать опцию -dcb и указать к ней параметры структуры DCB, например:
UkncComSender.exe COM8 VERT.SAV -dcb "rts=on"
Code:

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}

Реализация использует функцию Win32 BuildCommDCB(), которая парсит строку параметров и заполняет DCB: http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

http://ukncbtl.googlecode.com/files/UkncComSender.zip

NovaStorm 3rd February 2013 22:24

nzeemin, вот с таким ini крашится, не знаю, нужно ли что-то поправлять, без него-то работает =)

Скрытый текст

Code:

[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

[свернуть]

nzeemin 3rd February 2013 22:54

Quote:

Originally Posted by NovaStorm (Post 572910)
nzeemin, вот с таким ini крашится, не знаю, нужно ли что-то поправлять, без него-то работает =)

Спасибо за баг-репорт.
В коде подключения картриджа у меня ошибка -- проверяет на INVALID_HANDLE_VALUE, а должно проверять на 0.

Vamos 5th February 2013 21:06

2 Attachment(s)
Помучал еще код эмулятора, добился стабильной загрузки TU58, теперь загрузка из сети проходит до стадии загрузки системы а дальше опять облом с переполнением :( .

http://zx-pk.ru/attachment.php?attac...1&d=1360080317

http://zx-pk.ru/attachment.php?attac...1&d=1360080317

Patron 5th February 2013 21:38

Quote:

Originally Posted by Vamos (Post 573445)
опять облом с переполнением

Вот код, эмулирующий работу по кабелю с квитированием и полностью исключающий переполнения:

Code:

#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);
    }
}


Кстати - при переполнении в регистре данных остаётся старый байт, а не появляется новый.


All times are GMT +4. The time now is 02:52.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.