C vs Rust

Após algum tempo sem posts aqui no blog, deixo esse post sobre um novo projeto que deixei público no GitHub, onde demonstro como integrar projetos escritos em C com bibliotecas escritas em Rust (o inverso também é possível), utilizando CMake e todo ferramental disponível no ecossistema do Rust.

O projeto em questão é o weather-bot que já está disponível no meu perfil no GitHub, prontinho para uso nas plataformas Linux e MacOSX, até a data desse artigo.

Conforme explico no vídeo sobre o weather-bot em meu canal no Youtube, o projeto ainda não foi testado no Windows, portanto possíveis ajustes talvez sejam necessários para compatibilizar o mesmo nessa plataforma e caso seja necessário alguma compatibilização, a mesma deva afetar apenas na camada do CMake, uma vez que o projeto foi desenvolvido com o máximo de código multi-plataforma em mente, tanto na parte C quanto na parte Rust.

Abaixo segue o vídeo sobre a “saga” do desenvolvimento desse projeto.

[]’s
PopolonY2k

Do It Yourself (ou não)

Há algum tempo tenho feito alguns “experimentos” no meu canal do YouTube, afim de aprimorar também essa plataforma para que se torne um complemento desse blog.

Algumas lives sobre programação e principalmente, alguns mini projetos relacionados ao MSX e computação em geral, tem sido feitos nesse interim, como a live onde demonstrei o código da engine 3D portado a partir do vídeo e código apresentados em “Code it yourself – First person shooter” do excelente canal do Javidx9.

Pop!Live Stream Code It yourself-First person shooter on MSX-TR (Quick and simple Turbo Pascal 3.3F)
Pop! Live Stream – Code It yourself – First person shooter (Quick and simple Free Pascal)

Hoje finalmente liberei mais um formato, que acredito ainda precisar de aprimoramentos de maneira geral.

É o quadro “Faça você mesmo (ou não)”, para isso já até criei a playlist só para facilitar a busca nos vídeos dessa série em meu canal.

Entretanto podemos dizer que esse formato ainda é WIP (Work In Progress) e que estaremos ajustando nos próximos vídeos.

Toda sugestão é bem vinda.

MSX 1.1 Expert XP800 Capacitor Recap e CPU upgrade (Z80 6Mhz)

[]’s
PopolonY2k

Hungarian rapsody

A computação é uma ciência “recente”, que se move quase que na velocidade da luz em comparação com as demais ciências.

Em pouco tempo diversas mudanças ocorrem e tecnologias dominantes são praticamente varridas quase que para baixo do tapete em “segundos”.

É uma área em constante mudança que acontecem desde a concepção da tecnologia em seus mínimos detalhes, mesmo os invisíveis a olho nú, até aqueles estruturais e que abalam o ecossistema todo, ecoando através dos tempos deixando sua marca nos mais diversos meios de comunicação.

Nesse cenário a indústria de desenvolvimento de software moderna tem aprendido muito através do desenvolvimento de novas ferramentas que auxiliam a construção de tecnologias e produtos, entretanto nem sempre existiram IDE’s poderosas capazes de integrar com debuggers e analisadores estáticos, dentre outros ferramentais disponíveis na atualidade.

Borland Turbo C 2.0

No inicio dos anos 90, IDE’s como Turbo Pascal 5.0 e Turbo C 2.0, da Borland, começavam a revolucionar a forma como softwares eram desenvolvidos, com seus debuggers integrados, excelentes editores de código com seus syntax highlighting.

Entretanto nessa época os desenvolvedores, em sua grande maioria, não terceirizavam sua confiança e competência nas IDE’s e na maioria das vezes utilizavam ou desenvolviam técnicas para auxiliar a organização, compreensão e depuração do código.

Charles Simonyi

Nessa mesma época, Charles Simonyi, um jovem engenheiro de software nascido na Hungria e que havia sido recrutado por Bill Gates para trabalhar no desenvolvimento da suite Microsoft Office na Microsoft, começou a popularizar uma técnica que já havia sido criada por ele em seu antigo emprego na Xerox PARC.

Essa técnica consiste em uma notação de código, independente de plataforma e linguagem, que tenta padronizar prefixo de nomes de variáveis de acordo com seus tipos e comportamento, bem como estilo de nomes de funções (se estendendo a classes) de forma a deixar o desenvolvimento uniforme e com um padrão conhecido e documentado, auxiliando a compreensão principalmente em grandes projetos e por pessoas diferentes.

Esse padrão é conhecido como notação húngara (hungarian notation) e foi popularizada pela Microsoft em suas literaturas oficiais, principalmente nos anos 90, sendo ainda um padrão forte dentro da empresa até os dias atuais.

Programming Windows 3.1

Eu mesmo conheci essa notação em 1993, quando adquiri a terceira edição de Programming Windows 3.1, de Charles Petzold – Microsoft Press, esse também um dos melhores escritores de livros técnicos que eu já li (menção honrosa também a Peter Norton), me apresentando assim essa notação.
Me rendendo ao entusiasmo de Petzold, decidi tentar escrever todo software que eu pudesse, utilizando notação hungara para saber se traria algum benefício, não só por isso mas também porque meus softwares começavam a se tornar cada vez maiores e complexos, portanto eu deveria tornar as coisas mais compreensíveis para o EU do futuro.

Apesar de ser alguém, corportivamente falando, com raízes fortíssimas no UNIX, tendo iniciado no XENIX, passado por SCO UNIX, IBM-AIX e Sun Solaris, confesso que era bastante influenciado pelo estilo Microsoft, antes dela se tornar esse elefante branco que é hoje, pois ela era a Google da época e portanto uma forte influenciadora dentre os jovens programadores, algo em proporções muito maiores do que ela mesmo representa nos dias atuais junto aos programadores mais jovens.
Pessoalmente, a Microsoft foi um dos pais do padrão MSX, portanto era “alguém” por quem eu tinha um certo carinho até então e por isso usar uma notação difundida pela Microsoft e não pela galera do UNIX, a qual eu estava mais corporativamente inserido, não foi nada estranho.

Sobre a notação húngara, abaixo vou deixar alguns exemplos retirados desse documento, que é bem simples e direto e que faço questão de deixar aqui em meu site, mas também fazer referência ao link original onde ele originalmente está hospedado aqui e que me pareceu ser uma plataforma de ensino inglesa bem interessante.

[]’s
PopolonY2k

No principio era o binário.

No livro de Bytesis capitulo 1 está escrito.

Versículo 1
E no principio era o binário e o binário era de difícil compreensão.
Então se criou os mnemônicos para facilitar a montagem de programas em binário e chamou isso de assembly.

Versiculo 2
E viu que assembly era bom, era rápido e enxuto mas ainda assim era difícil e causava muitos travamentos por ter acesso direto ao hardware.

Versiculo 3
Então chamou o profeta Denis Ritchie e disse, “Ide e desenvolvei uma linguagem abstrata que facilite a integração entre alto nível e baixo nível. E sendo essa linguagem de médio nível, a chamarás linguagem C”

Versículo 4
E o profeta Ritchie assim o fez e C era rápida e tão boa quanto o assembly e viu que era bom.

Versículo 5
Então chamou o profeta Bjarne Stroustrup e ordenou, “Ide e desenvolvei uma linguagem igualmente abstrata com possibilidade de encapsulamento e polimorfismo infinitos, tendo as mesmas especificações básicas de C, conforme eu ordenara anteriormente, e que seja igualmente rápida como as antecessoras.”

Versículo 6
E assim o profeta Stroustrup o fez conforme ordenado.
E vendo o criador seu feito disse, “Bendito sejas entre os povos e que seus feitos sejam conhecidos perpetuamente até o final dos tempos”.
E chamou essa linguagem de C++.

Versículo 7
E vendo que os feitos dos profetas eram bons e que davam bons frutos, o criador lhes deu uma última ordenança.
“Ide e divulgai todo o seu conhecimento ao redor do planeta, para que as futuras gerações saibam que eu estive contigo desde a criação, porém não crieis linguagens baseadas em máquinas virtuais e bytecodes, pois se assim tu o fizeres, certamente morrereis”.

[]’s
PopolonY2k

Desenvolvendo com OpenMSX

Acredito que toda, ou grande parte da comunidade MSX conheça o excelente emulador OpenMSX, principalmente os usuários de Linux e MacOSX.

Bom, confesso que depois de voltar a ativa no mundo MSX, eu utilizo uma máquina real em 100% do meu tempo desenvolvendo coisas, até porque não jogo no MSX há anos. Entretanto desde o último ano, não tenho conseguido tempo para estar à frente da minha máquina de desenvolvimento preferida, que é o meu MSX TurboR A1ST com 1MB de RAM, IDE Tecnobytes com 8GB de Compact Flash, Expansor de slots ACVS, placa de rede Obsonet Tecnobytes, dentre outras coisas que estão conectadas nessa máquina.

Desde o início dos anos 2000, senão me engano lá por 2002 ou 2003, quando a “batalha de emuladores” era mais intensa entre os RuMSX, ParaMSX, fMSX e seus mais diversos sabores, duas opções “definitivas” começaram a se fundamentar no meio da comunidade MSX mundial e hoje reinam absolutas em sua preferência.

Estou falando do BlueMSX e do OpenMSX.

BlueMSX LogoBlueMSX logo

Usei muito o BlueMSX, principalmente quando jogava no emulador, mas como desenvolvedor, percebi desde cedo que o OpenMSX se tratava de um projeto mais aberto e poderoso no que diz respeito a sua utilização no desenvolvimento de novos projetos, sejam de hardware ou de software, além do fato de seu projeto ser extremamente bem feito, com um código muito bem escrito e documentado, além de ser multiplataforma.

openmsxOpenMSX logo

OpenMSX como plataforma de desenvolvimento.

Além de já ter sido vastamente utilizado como plataforma para desenvolvimento de hardware, em projetos como o MSXARM, o OpenMSX é uma excelente plataforma de desenvolvimento de software, principalmente pelo fato do mesmo emular quase todos (ou todos) os dispositivos que podem ser conectados a um MSX real, como os famosos LaserDiscs, por exemplo.

Por esse motivo e também incentivado pela série que vem sendo escrita no site de Javier Lavanderia, sobre programação para MSX utilizando MSX C, eu decidi que era hora de testar o nível de compatibilidade do OpenMSX, bem como todas as capacidades desse emulador, no desenvolvimento de novos projetos para MSX.

OpenMSX console

O OpenMSX possui um console embutido, que você ativa toda vez que pressiona F10 e a partir daí, em paralelo com a emulação, é possível interagir com a máquina utilizando um conjunto extenso de comandos disponíveis no emulador, conforme pode ser visto nesse link aqui.

Inclusive, via comandos Tcl, você pode controlar o emulador utilizando uma interface através de alguns meios de comunicação disponíveis no emulador, como pipes, named pipes, a saída padrão (stdio), TCP Sockets e UNIX domain sockets, ou seja, é um emulador modular ao extremo, permitindo até que você escreva seu próprio launcher, caso não esteja satisfeito com o OpenMSX Catapult, que para mim poderia ter sua interface tão poderosa e até mais do que a do emulador BlueMSX por exemplo.

Abaixo segue um excelente vídeo demonstrando essa integração do OpenMSX com Tcl/Tk, através do console de Tcl embutido nesse emulador.

Integrando OpenMSX com Tcl

Preparando seu disco.

Apresentado o console do OpenMSX, agora vale a pena citar um comando muito especial e poderoso, o diskmanipulator.

Resumidamente, o diskmanipulator é capaz de criar imagens de disco bem como gerenciar seu conteúdo. As imagens criadas são compatíveis com FAT12 e FAT16 e poderão ser utilizadas no OpenMSX como floppy disks comuns e também como hard disks  IDE.

OpenMSXOpenMSX console

A página de instruções do diskmanipulator contém diversas explicações de como criar imagens para discos flexíveis de 720Kb, discos rígidos com partições de FAT12 e FAT16, bem como instruções de como importar dados para esses discos a partir do disco local da máquina host em que o OpenMSX está sendo executado.

Como o objetivo desse post é justamente apresentar o OpenMSX como uma plataforma real para desenvolvimento de softwares para MSX, então preparei um disco com duas partições, sendo a primeira FAT12 e outra FAT16, com diversos softwares específicos para o desenvolvimento de software no MSX. Segue abaixo a lista do que atualmente está contido no disco criado e pronto para usar:

DRIVE A: (FAT12)

MSXDOS2 operating system compatible

[DEV]     (Editors, compilers, assemblers and general purpose development tools)
—|———[M80] (Microsoft/ASCII – Z80 Assembler)
—|———[DEVPAC80] (HiSoft Z80 Assembler)
—|———[TP33] (MSX Computer club Turbo Pascal 3.3 compiler)
—|———[TP3] (Borland Turbo Pascal 3.00A compiler)
—|———[TED] (MSX2.0 and higher Text Editor)
—|———[APED] (MSX2.0 and higher Text Editor)
—|———[TOR] (MSX1&2 text editor)

DRIVE B: (FAT16)

[PROJECTS]   (Projects source code)
——-|—-[PASCAL] (Turbo Pascal compatible source code)
——-|———|
——-|———|——[PCX]  (Source code for PCX file format handling)
——-|———|——[INLASS] (Turbo Pascal Inline assembler)
——-|———|——[MKINL] (Another Turbo Pascal Inline assembler)
——-|———|——[PMLINK] (Another Turbo Pascal Inline assembler)
——-|———|——[INLINE] (Another Turbo Pascal Inline assembler)
——-|———|——GRAPH.INC (Graphical library for MSX)
——-|———|——PARSE.INC (Command line parameter parser)

Lembrando que essa é apenas uma configuração de disco inicial em que ainda estou trabalhando, portanto no futuro certamente serão adicionados a esse hard disk, os pacotes do MSXC (1 e 2), HiSoftC, dentre outras excelentes ferramentas destinadas ao desenvolvimento de software para o MSX.

Baixando e usando o hard disk

O harddisk citado acima, pode ser encontrado nessa URL aqui, e de fato é um compartilhamento de minha pasta do DropBox que deixo disponível à comunidade. Os arquivos dessa URL serão atualizados com o tempo, visando a adição de novos compiladores e ferramentas de desenvolvimento para a plataforma MSX.

Nesse mesmo link você encontrará dois arquivos, os quais descrevo abaixo:

dev_hd.dsk -A imagem de 64MB com as duas partições (A: FAT12 e B: FAT16) pronta para uso no OpenMSX;
dev_hd.tcl  – Script Tcl utilizado para dar boot no OpenMSX, usando a imagem de disco acima;
Passos para utilização do disco no OpenMSX:
    1. Baixe esses dois arquivos em qualquer diretório de sua máquina. O único ponto de atenção a ser tomado é que esses dois arquivos devem estar no mesmo diretório pois o script TCL <dev_hd.tcl>, busca pela imagem do hard disk no mesmo diretório em que o script está sendo executado;
    1. Abra o OpenMSX utilizando a sua configuração de máquina preferida;
    1. Com o OpenMSX rodando, pressione a tecla F10, para invocar o console Tcl do OpenMSX;
    1. Já na tela do console, digite o comando abaixo:
      source <caminho_onde_você_baixou_a_imagem_de_disco_e_o_arquivo_tcl/dev_hd.tcl>
    1. Pressione <ENTER>
  1. Divirta-se 🙂

Pronto, o seu OpenMSX irá reiniciar já fazendo boot com a imagem de hard disk que você baixou no link acima.

Isso é apenas uma pequenina amostra do potencial desse que, para mim, é o melhor e mais completo emulador da plataforma MSX, na atualidade.

Fiquem antenados nos novos updates da imagem de disco, que disponibilizei no link do Dropbox.

[]’s
PopolonY2k

Referência na internet

OpenMSX home
http://openmsx.org/

Linux (Wikipedia)
https://en.wikipedia.org/wiki/Linux

MacOSX (Wikipedia)
https://en.wikipedia.org/wiki/OS_X

RuMSX home
http://www.lexlechz.at/en/software/RuMSX.html

ParaMSX (MSX.org)
http://www.msx.org/news/emulation/en/paramsx-048b

fMSX home
http://fms.komkon.org/fMSX/

BlueMSX home
http://www.bluemsx.com/

MSXARM primeiro teste de hardware (PopolonY2k Rulezz)
http://www.popolony2k.com.br/?p=2074

LaserDisc (Wikipedia)
https://en.wikipedia.org/wiki/LaserDisc

Relearning MSX (Lavanderia.net)
http://www.lavandeira.net/relearning-msx/

OpenMSX console commands.
http://openmsx.org/manual/commands.html

Tcl Tk home
https://www.tcl.tk/

Controlling OpenMSX
http://openmsx.org/manual/openmsx-control.html

Pipe communication
http://www2.cs.uregina.ca/~hamilton/courses/330/notes/unix/pipes/pipes.html

Named Pipes (Wikipedia)
https://en.wikipedia.org/wiki/Named_pipe

Network socket (Wikipedia)
https://en.wikipedia.org/wiki/Network_socket

UNIX domain sockets
https://en.wikipedia.org/wiki/Unix_domain_socket

DiskManipulator (OpenMSX)
http://openmsx.org/manual/diskmanipulator.html

PopolonY2k’s OpenMSX development hard disk (DropBox sharing)
https://www.dropbox.com/sh/smo2dz1kwl6wvfm/AAAYfFbZGjoksmoIRE4TlwPGa?dl=0

DropBox website
http://www.dropbox.com