Eu só encontrei um motivo para seu problema estar acontecendo, se não for na enumeração.
Todos os exemplos que encontrei de como se abre uma porta serial são mais ou menos assim (exemplos simplificados):
CreateFile(Portname,...
Já a rotina que utilizo abre a porta assim:
CreateFile('\\.\'+Portname...
E eu não consigo encontrar a razão para esse '\\.\' antes do nome da porta. Se você não conseguir fazer funcionar corrigindo a enumeração eu vou remover isso do programa para você testar.
Lembrando que para o DOS/Windows portas seriais são como arquivos.
Bom, depois que eu incluí as chaves das seriais no registro (realmente, no wiki do wine o pessoal relatou que isso é necessário para que alguns programas funcionem), o programa passou a listar as COMs. O estranho é que independente do valor que estiver no INI, quando eu clico em configurar, sempre aparece pré-selecionada a COM2. Mas como você falou que se não clicar em configurar, vale o que está no INI, pois isso é carregado inicialmente, acho que já está no ponto, mas ainda não funciona.
Então, fui fazer o teste completo no windows. Antes havia feito o teste só com o cabo, sem o player, só para ver as portas seriais (pois teria que levar o player e a tv para o outro cômodo). Mas no windows ele não consegue fazer a comunicação também. Eu acho que talvez seja o meu chip! Por exemplo, o MTKTool só consegue realizar 3 operações: extrair o firmware, gravar o firmware e enviar bytes para endereços de memória, tipo XRAM DATA. Mas o resto, não faz nada. Não consigo ler a memória (apesar de poder gravar nela), nem ler ou gravar registradores, nem EEPROM e nem nada mais. Sempre achei que poderia ser devido a incompatibilidade. Pode ser o caso?