Transferência de arquivos usando protocolo XMODEM




A transferência de arquivos entre computadores é hoje em dia algo muito comum. Hoje fazemos isso diariamente sem mesmo percebermos ao escutarmos uma música via Internet, assistirmos um filme, ou quando jogamos via web, ou quando enviamos/recebemos um arquivo através de e-mail, WhatsApp,  estamos "transferindo" um arquivo (alguns via streaming) de um servidor para nossos PC's ou celulares, ou vice-versa.

Porém isso nos primórdios da informática não era algo tão comum. Os computadores não eram compatíveis entre si, e a internet sequer existia. Mesmo assim as transferências entre arquivos aconteciam, principalmente usando a porta RS-232 localmente e modem's para transferências a longas distâncias, nesse caso com auxílio de uma linha telefônica.

E foi assim que durante a década de 1970 e 1980, muitos usuários transferiram arquivos das famosas "BBS's" (Buletim Board Service). E eu usei muito esse protocolo ainda durante a década de 1990, quando ainda haviam algumas BBS's tentando sobreviver bravamente após o surgimento da Internet no Brasil.



Motivação

Há um tempo atrás eu desenvolvi um cartucho RS-232 para usar no meu MSX. Na época para testar eu preparei um pequeno programa "Terminal" que me permitia que o MSX "conversasse" com outro MSX, PC ou outro dispositivo com porta RS-232. A aplicação é legal e me lembra dos tempos em que eu usava aplicativos parecidos para acessar as BBS's com auxílio de um modem US Robotics 14400bps.

Mas faltava uma aplicação mais prática e a transferência de arquivos entre máquinas me pareceu algo legal e útil para mim. Agora, após gerar um arquivo compilado via SDCC/Fusion-C (cross compiler) ou mesmo um arquivo BASIC usando o OpenMSX ou um arquivo .BIN através do Pasmo eu não precisaria gravar o resultado num disquete para em seguida usar isso no MSX. Bastaria enviar o arquivo para o MSX usando a RS-232!!! Tá, para muitos algo desnecessário e/ou sem sentido. Mas enquanto uns se divertem criando novos jogos, eu me divirto criando esse tipo de aplicação. Cada um na sua não é mesmo?! Tem espaço para todos!



O Protocolo XMODEM

O protocolo XMODEM foi criado em 1977 por Ward Christensen ainda no período do CPM/80. Ao longo dos anos o protocolo sofreu algumas modificações na tentativa de melhorar sua segurança, principalmente no que diz respeito a verificação da integridade dos dados.

O protocolo funciona dividindo, na origem, o arquivo a ser transmitido em "pacotes" com a remontagem dos mesmos no destino. Para isso alguns bytes de controle são inseridos no pacote. No padrão XMODEM 128 os pacotes têm 128Bytes e no padrão XMODEM 1024 têm 1kByte (o que diminui consideravelmente o número de pacotes finais na transmissão/recepção).

Inicialmente a verificação da integridade do pacote era feita através de um simples checksum (somatória de todos os bytes do pacote, com resultado usado apenas dos 8 bits menos significativos). Esse método não é muito seguro, pois é possível obter o mesmo resultado com combinações diferentes de bytes no pacote. Assim, uma das melhorias propostas e adotadas foi a adoção de um CRC (Cyclic Redundancy Check) tipo CRC CCITT 0x1021, onde através da aplicação de um polinômio (x16 + x12 + x5 + 1) é possível chegar a um valor de 16bits sempre diferente, já que nesse caso a posição dos bytes influência diretamente no cálculo.



Formato do Pacote XMODEM 128 CRC





Exemplo de transmissão/recepção no protocolo XMODEM







Conclusão

O cenário nacional e também internacional para o MSX está em plena "efervescência"! Algumas pessoas/grupos estão desenvolvendo jogos, compiladores, cartuchos com as mais variadas funções e claro, aplicações das mais diversas. O que é muito legal, já que isso garante para nós amantes do MSX novidades com uma constância muito interessante. O MSX vive!!!



Copyright deste conteúdo reservado para Márcio José Soares e protegido pela Lei de Direitos Autorais LEI N° 9.610, de 19 de Fevereiro de 1998. É estritamente proibida a reprodução total ou parcial do conteúdo desta página em outros pontos da internet, livros ou outros tipos de publicações comerciais ou não, sem a prévia autorização por escrito do autor.