Я добавил эмулятор связывания в эмулятор геймбоя: https://github.com/maxbit89/GBEmulator
Кабель связи реализован в https://github.com/maxbit89/GBEmulator/blob/master/serial2sock.c
Главное, что я не сдвигаю SB (0xff01)я просто меняю его местами, и когда передача завершена, я очищаю флаги SC (0xff02) и запускаю последовательное прерывание 0x58. (Технически я думаю, что это должно быть равно shift и запускать прерывание.)
Я использовал пример comm.c из gbdev. (https://github.com/maxbit89/GBEmulator/blob/master/test/roms/free/linkcable.gb) Пример работает нормально. Но когда я запускаю Tetris с моей реализацией, меню игры работает нормально (выборы показаны в обоих случаях) Но когда игра запускается, игра зависает и зависает в цикле.
Эмулятор можно запустить для тестирования следующим образом:
Экземпляр GBemulator 1:
./GBemulator Tetris.gb -l 8008
Экземпляр GBemulator 2:
./GBemulator Tetris.gb -c 127.0.0.1 8008
Примечание:Текущий источник не компилируется в Windows (MinGW), потому что я не реализовал winsock (код - Testet с Debian Buster)
Может кто-нибудь сказать мне, почему Тетрис ведет себя так?