<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PopolonY2k rulezz</title>
	<atom:link href="http://www.popolony2k.com.br/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.popolony2k.com.br</link>
	<description>Hacking, tecnologias, velharias e etc....</description>
	<lastBuildDate>Fri, 29 Mar 2013 16:49:54 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>MSXDUMP v0.2 (final) liberado no SourceForge.net</title>
		<link>http://www.popolony2k.com.br/?p=2125</link>
		<comments>http://www.popolony2k.com.br/?p=2125#comments</comments>
		<pubDate>Sun, 24 Mar 2013 06:01:10 +0000</pubDate>
		<dc:creator>@popolony2k</dc:creator>
				<category><![CDATA[New old software]]></category>
		<category><![CDATA[New software]]></category>
		<category><![CDATA[Utilities]]></category>
		<category><![CDATA[void pointer]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[MSX]]></category>
		<category><![CDATA[MSX Disk Doctor]]></category>
		<category><![CDATA[MSXDD]]></category>
		<category><![CDATA[MSXDOS]]></category>
		<category><![CDATA[MSXDOS2]]></category>
		<category><![CDATA[MSXDUMP]]></category>
		<category><![CDATA[Turbo Pascal]]></category>

		<guid isPermaLink="false">http://www.popolony2k.com.br/?p=2125</guid>
		<description><![CDATA[Finalmente após as previsões extremamente otimistas feitas no final do ano passado quando lancei a primeira versão do primeiro utilitário da suite MSX Disk Doctor (MSXDD), denominado MSXDUMP e que finalizaria o mesmo em dezembro de 2012, posso dizer que esse software está completamente pronto e funcional, incluindo o suporte a dispositivos de armazenamento em massa de [...]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">Finalmente após as previsões extremamente otimistas feitas no final do ano passado quando lancei a primeira versão do primeiro utilitário da <a href="http://www.popolony2k.com.br/?p=377" target="_blank">suite MSX Disk Doctor</a> (<strong>MSXDD</strong>), denominado <a href="http://www.popolony2k.com.br/?p=2045" target="_blank">MSXDUMP</a> e que finalizaria o mesmo em dezembro de 2012, posso dizer que esse software está completamente pronto e funcional, incluindo o suporte a <a href="http://en.wikipedia.org/wiki/Mass_storage_devices" target="_blank">dispositivos de armazenamento em massa</a> de grande capacidade (<a href="http://en.wikipedia.org/wiki/Parallel_ATA" target="_blank">IDE</a>) que eu havia prometido.</p>
<div id="attachment_2052" class="wp-caption aligncenter" style="width: 658px"><a href="http://www.popolony2k.com.br/wp-content/uploads/2012/10/msxdump.jpg"><img class=" wp-image-2052 " alt="MSXDUMP 0.0 Main screen" src="http://www.popolony2k.com.br/wp-content/uploads/2012/10/msxdump.jpg" width="648" height="432" /></a><p class="wp-caption-text">MSXDUMP 0.2 Main screen</p></div>
<p style="text-align: justify;">Com isso, o <strong>MSXDUMP v0.2</strong> pode editar setores em dispositivos conectados à interfaces <a href="http://www.popolony2k.com.br/?p=409" target="_blank">IDE Sunrise-like</a>, de fabricantes como <a href="http://www.carchano.com.br/" target="_blank">ACVS</a>, <a href="http://www.tecnobytes.com.br/" target="_blank">Tecnobytes</a> e lógicamente <a href="http://www.msx.ch/sunformsx/" target="_blank">Sunrise</a>.</p>
<p style="text-align: justify;">Abaixo vou fazer uma compilação de algumas informações que já foram descritas nos <em>posts</em> anteriores sobre o <strong>MSXDUMP</strong> e que fazem mais sentido que estejam centralizadas nesse <em>post</em> final, uma vez que se trata da versão final estável do <em>software </em>e também porque existem modificações no comportamento de alguns parâmetros que foram redefinidos e não serão mais modificados a partir dessa versão.</p>
<p><strong>Operação através do teclado</strong></p>
<p style="text-align: justify;">Com uma <em>interface</em> tradicional característica da maioria dos editores de setores, o <strong>MSXDUMP</strong> tem alguns poucos <em>shortcuts</em> que permitem ao usuário um completo controle sobre a edição de arquivos e setores.</p>
<p style="text-align: justify;">Os <em>shortcuts</em> estão descritos logo abaixo:</p>
<ul>
<li style="text-align: justify;"><strong>SELECT</strong> – Alterna o modo de operação das setas direcionais. Quando em modo <strong>DISK</strong>, as setas direcionais podem avançar ou retroceder o ponteiro de setor/arquivo que está sendo editado. No modo<strong>EDIT</strong>, as setas direcionais podem se movimentar pelos dados exibidos na tela, permitindo assim a edição do <em>buffer</em> de memória que está sendo visualizado;</li>
<li style="text-align: justify;"><strong>CTRL+S</strong> – Quando em modo <strong>DISK</strong>, essa combinação de teclas salva o conteúdo do <em>buffer</em> carregado;</li>
<li style="text-align: justify;"><strong>CTRL+A</strong> – Quando em modo <strong>DISK</strong>, avança o ponteiro de setor/arquivo, carregando e exibindo os dados do setor lido. As direcionais <strong>UP</strong> e <strong>RIGHT</strong>, quando em modo <strong>DISK</strong>, tem a mesma função de <strong>CTRL+A</strong>;</li>
<li style="text-align: justify;"><strong>CTRL+R</strong> - Quando em modo <strong>DISK</strong>, retrocede o ponteiro de setor/arquivo, carregando e exibindo os dados do setor lido. As direcionais <strong>DOWN</strong> e <strong>LEFT</strong>, quando em modo <strong>DISK</strong>, tem a mesma função de <strong>CTRL+R</strong>;</li>
<li style="text-align: justify;"><strong>Direcionais UP, DOWN, LEFT, RIGHT</strong> – Quando em modo <strong>EDIT</strong>, podem ser utilizadas livremente para posicionar o cursor no dado a ser modificado;</li>
</ul>
<blockquote>
<p style="text-align: justify;"><strong>ATENÇÃO</strong>:<br />
O <strong>MSXDUMP</strong> não salva o conteúdo editado pelo usuário &#8220;<em>automagicamente</em>&#8220;, por isso, sempre que se editar dado, deve-se sair do modo de edição (através de <strong>SELECT</strong>) e salvar o <em>buffer</em> atual, antes de navegar para o próximo setor, senão a alteração será perdida ao se mudar de setor.</p>
</blockquote>
<p style="text-align: justify;"><strong>Parâmetros de startup por linha de comando.</strong></p>
<p style="text-align: justify;">O <strong>MSXDUMP</strong> pode ser iniciado com as seguintes opções de linha de comando.</p>
<blockquote>
<p style="text-align: justify;"><strong>-h</strong> Mostra a tela de <em>help</em> do <strong>MSXDUMP. </strong>Chamar o software com uma opção inválida ou sem parâmetros, também ativa a tela de <em>help</em>;</p>
<p style="text-align: justify;"><strong>-f &lt;filename&gt;</strong> Essa opção especifica o nome do arquivo que se deseja editar, onde <strong>&lt;filename&gt;</strong> pode conter uma especificação completa da origem do arquivo, no formato <strong>drive:\path\filename</strong>, aceito pelo <a href="http://en.wikipedia.org/wiki/MSX-DOS" target="_blank">MSXDOS</a> 2;</p>
<p style="text-align: justify;"><strong>Ex (MSXDOS2): msxdump -f a:\MSXDD\MSXDUMP.PAS<br />
Ex (MSXDOS): msxdump -f MSXDUMP.PAS</strong></p>
<p style="text-align: justify;"><strong>-d &lt;drive&gt;</strong> Essa opção especifica a unidade de disco dos setores a serem editados. Pode ser qualquer unidade de disco (<strong>A:, B:, C:, &#8230;., H:</strong>) aceita pelo <strong>MSX</strong>, incluindo dispositivos <strong>FLOPPY</strong>, <strong>IDE</strong> e <strong>RAMDISK</strong>;</p>
<p style="text-align: justify;"><strong>Ex: msxdump -d a:</strong></p>
<p style="text-align: justify;"><strong>-s &lt;sector_number&gt;</strong> Essa opção especifica onde o ponteiro de setores será posicionado inicialmente para edição através do <strong>MSXDUMP. </strong>Um detalhe importante para o parâmetro <strong>-s &lt;sector_number&gt;,</strong> a partir dessa versão, é que número do setor especificado no parâmetro pode ser qualquer valor de <strong>zero</strong> até o limte máximo de um inteiro sem sinal (<em>unsigned</em>) de <strong>24bits</strong>, nesse caso, <strong>16777215.<br />
</strong>Outro detalhe importante sobre o valor de <strong>&lt;sector_number&gt;</strong> é que o mesmo descreve o numero do setor de <strong>maneira relativa</strong> à partição apontada pela unidade especificada no parâmetro <strong>-d &lt;drive&gt;</strong>. Para discos conectados a uma <strong>IDE</strong>, onde geralmente existe mais de uma unidade mapeada a um unico dispositivo <strong>IDE</strong>, cada unidade inicia em um setor físico diferente de <strong>1</strong>.</p>
<p style="text-align: justify;">Considere um disco <strong>IDE</strong> com duas partições <a href="http://en.wikipedia.org/wiki/FAT12#FAT12" target="_blank">FAT12</a>. A primeira partição (<strong>drive A:</strong>) inicia em <strong>1</strong> e a segunda partição (<strong>drive B:</strong>), digamos que por exemplo inicie em <strong>65000.</strong></p>
<p style="text-align: justify;">Com base nesse cenário, caso o <strong>MSXDUMP</strong> seja chamado conforme exemplo abaixo:</p>
<p style="text-align: justify;"><strong>Ex: msxdump -d b: -s 1</strong></p>
<p style="text-align: justify;">O <strong>MSXDUMP</strong> irá posicionar o ponteiro do disco no setor físico relativo à posição inicial da unidade <strong>B:</strong>, ou seja, <strong>65001</strong>.</p>
<p style="text-align: justify;"><strong>-a </strong>Essa opção especifica que o valor apontado por <strong>&lt;sector_number&gt;</strong> será sempre <strong>absoluto</strong>, ou seja, se o parâmetro <strong>-a</strong> for chamado no <em>startup</em>, o valor de <strong>&lt;sector_number&gt;</strong> será interpretado como a posição absoluta no disco, independente da posição física do primeiro setor da unidade de disco especificada em <strong>-d &lt;drive&gt;</strong>;</p>
<p style="text-align: justify;">Considerando o mesmo exemplo anterior, onde temos um disco <strong>IDE</strong> com duas partições <a href="http://en.wikipedia.org/wiki/FAT12#FAT12" target="_blank">FAT12</a>. A primeira partição (<strong>drive A:</strong>) inicia em <strong>1</strong> e a segunda partição (<strong>drive B:</strong>), digamos que, por exemplo, inicie em <strong>65000.</strong></p>
<p style="text-align: justify;"> Com base nesse cenário, caso o <strong>MSXDUMP</strong> seja chamado conforme descrito abaixo:</p>
<p style="text-align: justify;"><strong>Ex: msxdump -d B: -s 1 -a</strong></p>
<p style="text-align: justify;">Na verdade o setor físico do disco será posicionado no primeiro setor do dispositivo <strong>IDE</strong>, ou seja, no setor <strong>1</strong> do <strong>drive A:</strong>, uma vez que estamos trabalhando no modo de apontamento <strong>absoluto</strong>.</p>
<p style="text-align: justify;"><strong>OBS:</strong> O modo padrão de apontamento de setores do <strong>MSXDUMP</strong> é sempre <strong>relativo</strong> à posição fisica inicial do setor da unidade de disco selecionada, caso queira mudar para o modo <strong>absoluto</strong>, especificar a opção <strong>-a</strong> no <em>startup</em> da aplicação.</p>
</blockquote>
<p style="text-align: justify;"><strong>Código fonte</strong></p>
<p style="text-align: justify;">Juntamente com o <strong>MSXDUMP</strong> foi desenvolvido um <a href="http://en.wikipedia.org/wiki/Software_framework" target="_blank">Framework</a> com funções que possibilitam acesso em alto nível a funcionalidades internas do <strong>MSX</strong>, como chamadas a funções da <strong>BIOS</strong>, funções do sistema operacional <strong>MSXDOS</strong>, <strong>MSXDOS2</strong>, chamadas à funções de baixo nível da <strong>IDE</strong> <em>Sunrise-like</em>, funções de matemáticas para manipulação de <a href="http://en.wikipedia.org/wiki/Bigint" target="_blank">BigInt</a>, o que possibilitou a manipulação de setores em <strong>24Bits</strong> presente nas <strong>IDE</strong> <em>Sunrise-like, </em>dentre outras possibilidades que já estão disponíveis e outras que estão planejadas para futuros desenvolvimentos.</p>
<p style="text-align: justify;">Os fontes foram desenvolvidos em <strong>Turbo Pascal 3</strong> e <strong>Assembly Z80</strong>, estão completamente comentados e disponíveis no repositorio do projeto, o <a href="http://sourceforge.net/projects/oldskooltech/" target="_blank">Old Skool Tech</a>, sob licença <a href="http://www.gnu.org/licenses/gpl-3.0.html" target="_blank">GPLv3</a>.</p>
<p style="text-align: justify;">Apesar de ter otimizado o código visando um melhor aproveitamento de memória e velocidade, infelizmente não foi possível gerar um binário único, uma vez que o software foi pensado para funcionar em qualquer <strong>MSX</strong> com no mínimo <strong>64Kb</strong> e <strong>MSXDOS</strong>.</p>
<p style="text-align: justify;">No futuro pretendo otimizar mais o <em>Framework</em> e adicionar a possibilidade de trabalhar com <a href="http://en.wikipedia.org/wiki/Dynamic_loading" target="_blank">módulos carregáveis</a>, como nos sistemas operacionais modernos como <a href="http://en.wikipedia.org/wiki/Microsoft_Windows" target="_blank">Windows</a> (<strong>.DLL</strong>) e <a href="http://en.wikipedia.org/wiki/Linux" target="_blank">Linux</a> (<strong>.SO</strong>) e também adicionar suporte a detecção e uso de <strong>todas</strong> as memórias existentes no <strong>MSX</strong>, como <em>Memory Mapper</em> e <em>Megaram</em>.</p>
<p style="text-align: justify;">Mas enquanto isso não acontece, precisei deixar o <strong>MSXDUMP</strong> em <strong>3 binários separados</strong>, conforme descrevo abaixo:</p>
<blockquote>
<p style="text-align: justify;"><strong>MSXDUMP</strong> &#8211; Módulo base para edição de arquivos (<strong>MSXDOS</strong> e <strong>MSXDOS2</strong>);</p>
<p style="text-align: justify;"><strong>MSXDUMPD</strong> &#8211; Módulo base para edição de setores (<strong>FLOPPY</strong>, <strong>IDE</strong>, &#8230;);</p>
<p style="text-align: justify;"><strong>MSXDUMPH</strong> &#8211; <em>Help</em> do sistema;</p>
</blockquote>
<p style="text-align: justify;">Todos os módulos binários estão interconectados, ou seja, se por exemplo o módulo <strong>MSXDUMP</strong> for chamado com opções suportadas apenas pelo  <strong>MSXDUMPD</strong>, o primeiro chama o segundo repassando para esse o controle da operação.</p>
<p style="text-align: justify;"><strong>Instalação</strong></p>
<p style="text-align: justify;">A instalação do <strong>MSXDUMP</strong> é simples, basta copiar todos os binários para uma pasta (no caso do <strong>MSXDOS2</strong>) e adicionar essa caminho na variável de ambiente <strong>PATH</strong> do <strong>MSXDOS2</strong>, conforme exemplo abaixo:</p>
<p style="text-align: justify;"><strong>SET PATH=&lt;suas definições de PATH aqui&gt; B:\MSXDD </strong></p>
<p style="text-align: justify;">Outro detalhe muito importante é definir uma variável de ambiente no <strong>AUTOEXEC.BAT</strong> do <strong>MSXDOS2</strong>, chamada <strong>MSXDD</strong> e setar essa variável com o caminho de onde está instalado o <strong>MSXDUMP</strong> e também onde estarão os futuros utilitários do <strong>MSX Disk doctor</strong>, conforme exemplo abaixo:</p>
<p style="text-align: justify;"><strong>SET MSXDD=B:\MSXDD</strong></p>
<p style="text-align: justify;">Com isso os binários estarão interconectados e um poderá chamar o outro, conforme expliquei anteriormente.</p>
<p style="text-align: justify;"><strong>Considerações finais e download.</strong></p>
<p style="text-align: justify;">Bom, realmente no ano passado e inicio desse ano dediquei bastante tempo nesse <em>software</em> e toda a base do <em>Framework</em> desenvolvido, entretanto agora é hora de colher os frutos desse trabalho pois daqui para frente os novos projetos serão cada vez mais fáceis de desenvolver, uma vez que a base já está criada e estará com novas <em>features</em> a cada novo lançamento.</p>
<p style="text-align: justify;">Se tudo der certo, em breve teremos um <a href="http://en.wikipedia.org/wiki/Dd_(Unix)" target="_blank">dd</a>, <a href="http://en.wikipedia.org/wiki/Scandisk" target="_blank">ScanDisk</a> e um <a href="http://en.wikipedia.org/wiki/Defrag" target="_blank">Defrag</a>, para compor e ampliar a <em>suite</em> <strong>MSX Disk Doctor</strong>.</p>
<p style="text-align: justify;">Segue abaixo os <em>links</em> para <em>download</em> do código fonte e binários do <strong>MSXDUMP v0.2.</strong></p>
<p style="text-align: justify;"><strong>MSXDUMP v0.2 &#8211; Código Fonte (Old Skool Tech &#8211; SourceForge.net)</strong></p>
<p style="text-align: justify;"><a href="http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.2/msxdd-src.zip/download" target="_blank">http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.2/msxdd-src.zip/download</a>  <strong>(Zip)</strong><br />
<a href="http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.2/msxdd-src.lzh/download" target="_blank">http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.2/msxdd-src.lzh/download</a>  (<strong>Lzh)</strong></p>
<p style="text-align: justify;"><strong>MSXDUMP v0.2 &#8211; Binários (Old Skool Tech &#8211; SourceForge.net)</strong></p>
<p style="text-align: justify;"><a href="http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.2/msxdd-bin.zip/download" target="_blank">http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.2/msxdd-bin.zip/download</a>  <strong>(Zip)</strong><br />
<a href="http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.2/msxdd-bin.lzh/download" target="_blank">http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.2/msxdd-bin.lzh/download</a>  <strong>(Lzh)</strong></p>
<p><strong>[]&#8216;s</strong><br />
<strong>PopolonY2k</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.popolony2k.com.br/?feed=rss2&#038;p=2125</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Teste da TV/Monitor SAMSUNG T22B300</title>
		<link>http://www.popolony2k.com.br/?p=2111</link>
		<comments>http://www.popolony2k.com.br/?p=2111#comments</comments>
		<pubDate>Wed, 13 Mar 2013 03:07:26 +0000</pubDate>
		<dc:creator>@popolony2k</dc:creator>
				<category><![CDATA[New hardware]]></category>
		<category><![CDATA[New old hardware]]></category>
		<category><![CDATA[void pointer]]></category>
		<category><![CDATA[Amiga]]></category>
		<category><![CDATA[MSX]]></category>
		<category><![CDATA[MSX Expert]]></category>
		<category><![CDATA[MSX HitBit]]></category>
		<category><![CDATA[MSX Hotbit]]></category>
		<category><![CDATA[MSX TurboR]]></category>
		<category><![CDATA[Roland]]></category>

		<guid isPermaLink="false">http://www.popolony2k.com.br/?p=2111</guid>
		<description><![CDATA[Desde que a tecnologia de TV&#8217;s e monitores expandiu de maneira quase que ilimitada nos ultimos 10 anos, os usuários e saudosistas de retrocomputação em geral (isso envolve os video-games também) tem buscado alternativas de vídeo que sejam pelo menos razoáveis para a utilização nos antigos consoles. Quem vive no mundo de computadores antigos sabe [...]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">Desde que a tecnologia de TV&#8217;s e monitores expandiu de maneira quase que ilimitada nos ultimos 10 anos, os usuários e saudosistas de <em>retrocomputação</em> em geral (isso envolve os <em>video-games</em> também) tem buscado alternativas de vídeo que sejam pelo menos razoáveis para a utilização nos antigos consoles.</p>
<p style="text-align: justify;">Quem vive no mundo de computadores antigos sabe da dificuldade de adaptar monitores para uso em saídas <a href="http://pt.wikipedia.org/wiki/V%C3%ADdeo_componente#Conex.C3.B5es_anal.C3.B3gica_RGB" target="_blank">RGB</a>, ou até mesmo <a href="http://pt.wikipedia.org/wiki/VGA" target="_blank">VGA</a>, devido a diversas limitações tanto do hardware antigo, quanto do hardware moderno em se compatibilizar com o hardware antigo, o que por vezes acaba nos obrigando a fazer algumas adaptações nos equipamentos mais antigos, ou até nos mais novos, para que possamos ter algo aceitável para uso diário.</p>
<p style="text-align: justify;">Como eu sou extremamente purista, eu evito sempre alterar os meus computadores antigos, <a href="http://www.popolony2k.com.br/?s=retr0bright&amp;x=0&amp;y=0" target="_blank">exceto no caso de alguns que não tem jeito mesmo</a>, ou que eu vou utilizar como laboratório para criação de novos projetos.</p>
<p style="text-align: justify;">Voltando ao assunto, nos ultimos 5 anos eu tenho sentido cada vez mais a dificuldade de conseguir utilizar o <a href="http://pt.wikipedia.org/wiki/MSX" target="_blank">MSX</a> e também o <a href="http://pt.wikipedia.org/wiki/Amiga" target="_blank">AMIGA</a> em monitores modernos e sempre nesses casos acabo apelando para os famosos adaptadores de <strong>video componente</strong>/<strong>S-VIDEO</strong> para <strong>VGA</strong>, como o que foi analisado pelo site parceiro, <a href="http://www.casadosnerds.com.br/" target="_blank">Casa dos Nerds </a>e que pode ser lido <a href="http://www.casadosnerds.com.br/?p=822" target="_blank">aqui, nesse link</a>.</p>
<p style="text-align: justify;">Se você ler o <em>post</em> do <em>Casa dos Nerd</em>s saberá que para máquinas <a href="http://pt.wikipedia.org/wiki/PAL-M" target="_blank">PAL-M</a>, através da saída de vídeo componente, a imagem fica inaceitável portanto os felizes possuidores de  máquinas como o <a href="http://pt.wikipedia.org/wiki/MSX#Sharp_HotBit_HB-8000" target="_blank">HotBit HB8000</a>, que só possui uma saída de vídeo que é justamente a mesma do caso citado,  terão problemas com esse e outros adaptadores similares.</p>
<p style="text-align: justify;">Uma solução, para quem não quer modificar seu computador, é utilizar esse adaptador com computadores que tenham saída <a href="http://pt.wikipedia.org/wiki/S-video" target="_blank">S-VIDEO</a>, como os <a href="http://www.old-computers.com/museum/computer.asp?c=621&amp;st=1" target="_blank">Panasonic WSX</a> e os <a href="http://www.old-computers.com/museum/computer.asp?st=1&amp;c=290" target="_blank">MSX TurboR</a>, entretanto não é todo mundo que tem a sorte de ter esses computadores, que diga-se de passagem estão dificeis de encontrar no mercado, então fica uma segunda alternativa que é utilizar computadores com saída <a href="http://pt.wikipedia.org/wiki/V%C3%ADdeo_componente#Conex.C3.B5es_anal.C3.B3gica_RGB" target="_blank">RGB</a>, como os <a href="http://pt.wikipedia.org/wiki/MSX#Gradiente_Expert_XP-800" target="_blank">MSX Expert</a>, tendo o trabalho extra de construir um cabo para utiliza-los em monitores tão raros ou até mais do que qualquer micro <strong>MSX</strong> com saída <strong>S-VIDEO</strong> <img src='http://www.popolony2k.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p style="text-align: justify;">Para mim a solução mais rápida e acessível está nos novos monitores que existem no mercado, e que ainda tem entrada de vídeo componente (algumas compartilhadas com de vídeo composto), além das entradas de <a href="http://pt.wikipedia.org/wiki/Hdmi" target="_blank">HDMI</a> e <strong>VGA</strong>. E é com base nessa solução que montei um vídeo demonstrando uma feliz surpresa que descobri meses depois que já havia comprado para uso doméstico diário.</p>
<p style="text-align: justify;">Estou falando da <strong>TV/MONITOR SAMSUNG T22B30</strong>, que além de ser uma excelente <a href="http://pt.wikipedia.org/wiki/TV_LED" target="_blank">TV de LED</a> com entrada <strong>VGA</strong>, <em>Video Composto</em> (compartilhado com <em>video componente</em>), <strong>HDMI</strong>, excelente qualidade de imagem (<a href="http://pt.wikipedia.org/wiki/Televis%C3%A3o_de_alta_defini%C3%A7%C3%A3o" target="_blank">Full HD</a>) e som, descobri ser excelente alternativa para nossos <em>vídeo-games</em> e computadores <em>old skool</em>, uma vez que a imagem no vídeo composto é excelente, tanto que para confirmar fiz um vídeo com a maioria das máquinas que tenho aqui, que vão desde um <strong>MSX1</strong> (<em>HotBit</em>), passando pelo <strong>HitBit HB-T7</strong> (<strong>MSX2</strong>), <strong>MSX TurboR A1ST</strong> (<strong>A1GT</strong> só tem <strong>S-VIDEO</strong>, além de <strong>RGB</strong>) e finalizando no <strong>AMIGA A600</strong>.</p>
<p style="text-align: justify;">Eu também cheguei a testá-lo no meu <a href="http://pt.wikipedia.org/wiki/Commodore_64" target="_blank">Commodore 64</a> com o mesmo sucesso dos demais micros, entretanto a qualidade da gravação ficou tão ruim que me impossibilitou adicionar esse teste no video montado, mas pode acreditar que funcionou <img src='http://www.popolony2k.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p><center><iframe src="http://www.youtube.com/v/HHJpOp1Wifo?version=3&amp;hl=pt_BR" height="315" width="420" frameborder="0"></iframe></center></p>
<p style="text-align: center;"><strong>TV/Monitor Test (SAMSUNG T22B300)</strong></p>
<blockquote>
<p style="text-align: justify;"><strong>UPDATE:</strong> Apenas o cartão <strong>Gradiente 80 colunas+RS232C</strong> apresentou imagem instável quando utilizado na <strong>SAMSUNG T22B300</strong>.</p>
<p style="text-align: justify;"><strong>UPDATE2:</strong> Todos os testes foram realizados utilizando apenas as saídas de vídeo componente dos computadores;</p>
</blockquote>
<p style="text-align: justify;">Por ultimo, para alegrar o ambiente ainda mais, deixo um segundo vídeo com o tema da abertura de <a href="http://en.wikipedia.org/wiki/Aleste_2" target="_blank">Aleste 2</a> sendo tocada em um teclado sintetizador <strong>Roland E-09</strong> através da <strong>MIDI Pac</strong>, rodando em um <strong>MSX 2 HitBit HB-T7</strong>.</p>
<p><center><iframe src="http://www.youtube.com/v/0uDepfjzWkE?hl=pt_BR&amp;version=3" height="315" width="420" frameborder="0"></iframe></center></p>
<p style="text-align: center;"><strong>Aleste 2 on MIDI Pac+Roland E-09 Keyboard</strong></p>
<p style="text-align: justify;"><strong>[]&#8216;s</strong><br />
<strong>PopolonY2k</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.popolony2k.com.br/?feed=rss2&#038;p=2111</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>MSXDUMP v0.1 liberado no Sourceforge.net</title>
		<link>http://www.popolony2k.com.br/?p=2097</link>
		<comments>http://www.popolony2k.com.br/?p=2097#comments</comments>
		<pubDate>Thu, 03 Jan 2013 23:33:02 +0000</pubDate>
		<dc:creator>@popolony2k</dc:creator>
				<category><![CDATA[New old software]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[void pointer]]></category>
		<category><![CDATA[MSX]]></category>
		<category><![CDATA[MSX Disk Doctor]]></category>
		<category><![CDATA[MSXDD]]></category>
		<category><![CDATA[MSXDOS]]></category>
		<category><![CDATA[MSXDOS2]]></category>
		<category><![CDATA[MSXDUMP]]></category>

		<guid isPermaLink="false">http://www.popolony2k.com.br/?p=2097</guid>
		<description><![CDATA[Após um pequeno período de silêncio tanto nos projetos relacionados a retrocomputing quanto nos posts aqui no blog, volto com uma &#8220;novidade&#8221; que na verdade eu já deveria ter lançado no final do ano passado mas que infelizmente devido a diversos problemas e também pela &#8220;correria&#8221; de fim de ano, não pude fazê-lo. É a [...]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">Após um pequeno período de silêncio tanto nos projetos relacionados a <em>retrocomputing</em> quanto nos <em>posts</em> aqui no <em>blog</em>, volto com uma &#8220;novidade&#8221; que na verdade eu já deveria ter lançado no final do ano passado mas que infelizmente devido a diversos problemas e também pela &#8220;correria&#8221; de fim de ano, não pude fazê-lo.</p>
<p style="text-align: justify;">É a segunda versão do editor de discos <strong>MSXDUMP, </strong>que, conforme expliquei no <a href="http://www.popolony2k.com.br/?p=2045" target="_blank">primeiro post</a> sobre o <em>software</em>, é parte de uma suite maior, denominada <strong>MSXDD</strong> ou <a href="http://www.popolony2k.com.br/?p=377" target="_blank">MSX Disk Doctor</a>.</p>
<div id="attachment_2052" class="wp-caption aligncenter" style="width: 514px"><a href="http://www.popolony2k.com.br/?attachment_id=2052" rel="attachment wp-att-2052"><img class=" wp-image-2052 " alt="MSXDUMP 0.1 Main screen" src="http://www.popolony2k.com.br/wp-content/uploads/2012/10/msxdump.jpg" width="504" height="336" /></a><p class="wp-caption-text">MSXDUMP 0.1 Main screen</p></div>
<p style="text-align: justify;">Pois bem, a principal característica da versão <strong>0.1</strong> do <strong>MSXDUMP</strong> é a capacidade de edição de setores de discos (<em>floppy</em>), com isso as opções de linha de comando, <strong>-d</strong> e <strong>-s</strong>, agora estão completamente funcionais, conforme descrevo abaixo.</p>
<blockquote>
<p style="text-align: justify;"><strong>-d &lt;drive&gt;</strong> Essa opção especifica a unidade de disco cujo os setores serão editados;</p>
<p style="text-align: justify;"><strong>Ex: msxdump -d a:</strong></p>
<p style="text-align: justify;"><strong>-s &lt;sector_number&gt;</strong> Essa opção especifica onde o ponteiro de setores será posicionado inicialmente para edição através do <strong>MSXDUMP</strong>;</p>
<p style="text-align: justify;"><strong>Ex: msxdump -d a: -s 100</strong></p>
</blockquote>
<p style="text-align: justify;">Lembrando que ainda pretendo lançar uma ultima versão que adiciona a capacidade do <strong>MSXDUMP</strong> gerenciar setores em dispositivos <strong>IDE</strong> <em>Sunrise-like</em>, ou seja, <strong>Sunrise</strong>, <strong>Tecnobytes</strong> e <strong>ACVS</strong>.</p>
<blockquote>
<p style="text-align: justify;"><strong>WARNING</strong>:</p>
<p style="text-align: justify;">Como a versão <strong>0.1</strong> do <strong>MSXDUMP</strong> passou por poucos testes, eu a considero mais instável em relação à versão <strong>0.0</strong>, portanto muita cautela em sua utilização.</p>
</blockquote>
<p style="text-align: justify;"><em>Enjoy the silence</em>. <img src='http://www.popolony2k.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: justify;"><strong>[]&#8216;s</strong><br />
<strong>PopolonY2k</strong></p>
<p style="text-align: justify;"><strong>Referência na internet</strong></p>
<p style="text-align: justify;"><em>MSXDUMP v0.1 no OldSkoolTech (Sourceforge.net)</em><br />
<a href="http://sourceforge.net/projects/oldskooltech/" target="_blank">http://sourceforge.net/projects/oldskooltech/</a></p>
<p style="text-align: justify;"><em>MSXDUMP no OldSkoolTech (Download binário compactado &#8211; zip)</em><br />
<a href="http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.1/msxdd-bin.zip/download" target="_blank">http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.1/msxdd-bin.zip/download</a></p>
<p style="text-align: justify;"><em>MSXDUMP no OldSkoolTech (Download binário compactado &#8211; lzh)<br />
</em><a href="http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.1/msxdd-bin.lzh/download" target="_blank">http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.1/msxdd-bin.lzh/download<em><br />
</em></a></p>
<p style="text-align: justify;"><em>MSXDUMP no OldSkoolTech (Download fontes compactado &#8211; zip)<br />
</em><a href="http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.1/msxdd-src.zip/download" target="_blank">http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.1/msxdd-src.zip/download</a></p>
<p style="text-align: justify;"><em>MSXDUMP no OldSkoolTech (Download fontes compactado &#8211; lzh)<br />
</em><a href="http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.1/msxdd-src.lzh/download" target="_blank">http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.1/msxdd-src.lzh/download<em><br />
</em></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.popolony2k.com.br/?feed=rss2&#038;p=2097</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MSX Jaú 2012</title>
		<link>http://www.popolony2k.com.br/?p=2082</link>
		<comments>http://www.popolony2k.com.br/?p=2082#comments</comments>
		<pubDate>Sun, 11 Nov 2012 13:22:06 +0000</pubDate>
		<dc:creator>@popolony2k</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[void pointer]]></category>
		<category><![CDATA[Fair]]></category>
		<category><![CDATA[Meetings]]></category>
		<category><![CDATA[MSX]]></category>
		<category><![CDATA[MSX Jaú]]></category>

		<guid isPermaLink="false">http://www.popolony2k.com.br/?p=2082</guid>
		<description><![CDATA[Acontece nos dias 15, 16, 17 e 18 de novembro, o 15º encontro de usuários da plataforma MSX em Jaú, interior de São Paulo. MSX Jaú, como é conhecida, é o mais antigo e tradicional encontro de usuários da plataforma MSX, realizado no Brasil e sempre conta com novidades principalmente na área de hardware para [...]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://www.popolony2k.com.br/wp-content/uploads/2012/11/msxlogo.jpg"><img class="aligncenter size-full wp-image-2084" title="MSX Red Logo" src="http://www.popolony2k.com.br/wp-content/uploads/2012/11/msxlogo.jpg" alt="MSX Red Logo" width="423" height="160" /></a></p>
<p style="text-align: justify;">Acontece nos dias 15, 16, 17 e 18 de novembro, o <strong>15º</strong> encontro de usuários da plataforma <strong>MSX</strong> em <strong>Jaú</strong>, interior de São Paulo.</p>
<p style="text-align: justify;"><strong>MSX Jaú</strong>, como é conhecida, é o mais antigo e tradicional encontro de usuários da plataforma <strong>MSX</strong>, realizado no Brasil e sempre conta com novidades principalmente na área de hardware para <strong>MSX</strong>.</p>
<p> Abaixo reproduzo o anuncio do site do encontro.</p>
<p>&nbsp;</p>
<h2 style="text-align: center;"><span style="font-size: xx-large;"><strong>MSX JAÚ 2012</strong></span></h2>
<div style="text-align: center;"><span style="font-family: arial, sans-serif;"><span style="font-family: arial, sans-serif;"><span style="font-size: large;"><span style="text-decoration: underline;"><span style="font-size: x-large;">15º Encontro de Usuários de MSX no Interior Paulista</span></span></span></span></span></div>
<div style="text-align: center;"><span style="font-size: large;">ETE Joaquim Ferreira do Amaral<br />
(Escola Industrial)</span><br />
<span style="font-size: small;">Rua Humaitá, 1090 &#8211; esquina com Rua Dr. João Leite</span></div>
<div><span style="font-family: arial, sans-serif;"><span style="font-size: large;"> </span></span></div>
<div style="text-align: center;"><span style="font-family: arial, sans-serif;"><span style="font-size: large;">Dias 15, 16, 17 e 18 de novembro de 2012</span></span></div>
<div style="text-align: center;"><span style="color: #000000; font-size: small;">(quinta, sexta, sábado e domingo)</span></div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><span style="color: #000000; font-size: large;">das 09h00 às 18h00</span></div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><span style="color: #000000; font-size: large;">Compareça ! Participe !</span></div>
<div style="text-align: center;"><span style="color: #000000; font-size: large;">Entrada Franca</span></div>
<div style="text-align: justify;"></div>
<div style="text-align: justify;"><strong>Links relacionados.</strong></div>
<div style="text-align: justify;"></div>
<div style="text-align: justify;"><em>Site oficial do encontro</em><br />
<a href="https://sites.google.com/site/msxjau/" target="_blank">https://sites.google.com/site/msxjau/</a></div>
<div style="text-align: justify;"></div>
<div style="text-align: justify;"><strong><em>[]&#8216;s</em></strong></div>
<div style="text-align: justify;"><strong><em>PopolonY2k</em></strong></div>
]]></content:encoded>
			<wfw:commentRss>http://www.popolony2k.com.br/?feed=rss2&#038;p=2082</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>MSX ARM &#8211; Primeiro teste de hardware.</title>
		<link>http://www.popolony2k.com.br/?p=2074</link>
		<comments>http://www.popolony2k.com.br/?p=2074#comments</comments>
		<pubDate>Sun, 21 Oct 2012 14:40:48 +0000</pubDate>
		<dc:creator>@popolony2k</dc:creator>
				<category><![CDATA[Embedded systems]]></category>
		<category><![CDATA[FPGA]]></category>
		<category><![CDATA[MSX ARM]]></category>
		<category><![CDATA[Reprogrammable hardware]]></category>
		<category><![CDATA[void pointer]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[ARM Cortex]]></category>
		<category><![CDATA[MSX]]></category>

		<guid isPermaLink="false">http://www.popolony2k.com.br/?p=2074</guid>
		<description><![CDATA[Muitos já devem saber, através das listas GDMSX, MSXBR-L e MSX-All, além do blog do Retrocomputaria Plus e das comunidades MSX Brasil no FaceBook e no Orkut, que o primeiro vídeo de testes do MSX ARM foi liberado. Nesse vídeo eu e Rogério Matte Machado, testamos o hardware e sua integração com  um MSX Real, [...]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">Muitos já devem saber, através das listas <a href="http://groups.google.com/group/gdmsx" target="_blank">GDMSX</a>, <a href="http://listas.amplus.com.br/mailman/listinfo/msxbr-l" target="_blank">MSXBR-L</a> e <a href="http://br.groups.yahoo.com/group/MSX-All/" target="_blank">MSX-All</a>, além do <a href="http://www.cupulablogs.com/retrocomputaria/?p=2038" target="_blank">blog do Retrocomputaria Plus</a> e das comunidades <strong>MSX Brasil</strong> no <a href="http://www.facebook.com/home.php?sk=group_182223775136806#!/home.php?sk=group_182223775136806" target="_blank">FaceBook</a> e no <a href="http://www.orkut.com.br/Main#Community?cmm=98375914" target="_blank">Orkut</a>, que o primeiro vídeo de testes do <strong>MSX ARM</strong> foi liberado.</p>
<p style="text-align: justify;">Nesse vídeo eu e Rogério Matte Machado, testamos o <em>hardware</em> e sua integração com  um <strong>MSX</strong> Real, no caso um <a href="http://www.1000bit.it/scheda.asp?id=1682" target="_blank">MSX2+ Sony HitBit F1 XDJ</a>.</p>
<p style="text-align: justify;">Alguns <em>&#8220;testes básicos&#8221;</em> foram feitos e apesar de chamá-los de <em>&#8220;testes básicos&#8221;, </em>posso garantir que o esforço e a quantidade de horas de pesquisa e desenvolvimento já utilizados até agora, nos deixam com um produto próximo a estabilidade de um hardware <strong>MSX</strong> convencional com um <strong>SD</strong> embutido e <strong>RS232</strong>, faltando ainda a camada de <strong>ethernet</strong>, portas <strong>USB</strong>, <strong>MIDI In/OUT</strong> além de uma nova capacidade inserida no <em>hardware</em> desde o dia em que o vídeo foi feito, que é uma saída <a href="http://en.wikipedia.org/wiki/S/PDIF" target="_blank">S/PDIF</a> para <strong>áudio digital 5.1</strong>.</p>
<p style="text-align: justify;">Com isso estamos próximos de um passo importante, que é o desenvolvimento de todo o software embarcado necessário para a integração dos periféricos extras, como <em>ethernet</em>, <em>USB</em>, <em>MIDI IN/OUT</em>, dentre outros.</p>
<p style="text-align: justify;">Teremos um grande trabalho pela frente no próximo ano.</p>
<p style="text-align: justify;">Segue o demo abaixo.</p>
<p><center><iframe src="http://www.youtube.com/embed/MUvQb8imbGE" frameborder="0" width="420" height="315"></iframe></center></p>
<p style="text-align: center;"><strong>MSX ARM primeiro vídeo &#8211; Teste de hardware</strong></p>
<p style="text-align: justify;"><strong>[]&#8216;s</strong><br />
<strong> PopolonY2k</strong></p>
<p style="text-align: justify;">Referência na internet</p>
<p style="text-align: justify;"><em>Retrocomputaria Plus (anúncio do primeiro vídeo do MSX ARM)</em><br />
<a href="http://www.cupulablogs.com/retrocomputaria/?p=2038" target="_blank">http://www.cupulablogs.com/retrocomputaria/?p=2038</a></p>
<p style="text-align: justify;"><em> GDMSX (Grupo de desenvolvimento de software e coisas legais para MSX)</em><br />
<a href="http://groups.google.com/group/gdmsx" target="_blank"> http://groups.google.com/group/gdmsx</a></p>
<p style="text-align: justify;"><em>MSXBR-L (Lista de usuários de MSX)</em><br />
<a href="http://listas.amplus.com.br/mailman/listinfo/msxbr-l">http://listas.amplus.com.br/mailman/listinfo/msxbr-l</a></p>
<p style="text-align: justify;"><em>MSX-All</em><br />
<a href="http://br.groups.yahoo.com/group/MSX-All/">http://br.groups.yahoo.com/group/MSX-All/</a></p>
<p style="text-align: justify;"><em>MSX Brasil (Orkut)</em><br />
<a href="http://www.orkut.com.br/Main#Community?cmm=98375914" target="_blank">http://www.orkut.com.br/Main#Community?cmm=98375914 </a></p>
<p style="text-align: justify;"><em>MSX Brasil (FaceBook)</em><br />
<a href="http://www.facebook.com/home.php?sk=group_182223775136806#!/home.php?sk=group_182223775136806" target="_blank">http://www.facebook.com/home.php?sk=group_182223775136806#!/home.php?sk=group_182223775136806</a></p>
<p style="text-align: justify;"><em>MSX2+ Sony HitBit F1 XDJ</em><br />
<a href="http://www.1000bit.it/scheda.asp?id=1682 " target="_blank">http://www.1000bit.it/scheda.asp?id=1682 </a></p>
<p style="text-align: justify;"><em>S/PDIF (Wikipedia)</em><br />
<a href="http://en.wikipedia.org/wiki/S/PDIF">http://en.wikipedia.org/wiki/S/PDIF</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.popolony2k.com.br/?feed=rss2&#038;p=2074</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>MSXRio &#8211; Attention Please !!!!</title>
		<link>http://www.popolony2k.com.br/?p=2067</link>
		<comments>http://www.popolony2k.com.br/?p=2067#comments</comments>
		<pubDate>Fri, 12 Oct 2012 02:28:27 +0000</pubDate>
		<dc:creator>@popolony2k</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[void pointer]]></category>
		<category><![CDATA[MSX]]></category>
		<category><![CDATA[MSX Rio]]></category>

		<guid isPermaLink="false">http://www.popolony2k.com.br/?p=2067</guid>
		<description><![CDATA[Após o ultimo post sobre a realização da MSXRio aqui no blog, recebi através das principais listas de MSX nacionais, uma informação de um dos organizadores do evento, Ricardo Jurczyk Pinheiro, sobre a mudança da data de início do evento, que repasso abaixo:  &#8221;Pessoal, tivemos um contratempo no SESC, e amanhã, dia 12/10, NÃO TERÁ COMO FAZERMOS O [...]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">Após o <a href="http://www.popolony2k.com.br/?p=2061" target="_blank">ultimo post sobre a realização</a> da <a href="http://www.msxrio.com.br/" target="_blank">MSXRio</a> aqui no blog, recebi através das principais listas de <strong>MSX</strong> nacionais, uma informação de um dos organizadores do evento, <strong>Ricardo Jurczyk Pinheiro</strong>, sobre a mudança da data de início do evento, que repasso abaixo:</p>
<blockquote>
<p style="text-align: justify;"> &#8221;Pessoal, tivemos um contratempo no SESC, e amanhã, <strong>dia 12/10</strong>, NÃO TERÁ COMO FAZERMOS O ENCONTRO NO SESC ENGENHO DE DENTRO.</p>
<p>Repetindo: Amanhã, dia 12/10, NÃO TERÁ COMO FAZERMOS O ENCONTRO NO SESC ENGENHO DE DENTRO.</p>
<p>O encontro ocorrerá normalmente no dia 13/10, sábado. Mas amanhã, feriado, não poderá acontecer no SESC. No way, gente.</p>
<p>Repassem isso a todos que puderem, e aceito sugestões p/ o dia de amanhã.</p>
<p>[]s,&#8221;</p></blockquote>
<p style="text-align: justify;">Portanto peço aos amigos que acompanham o blog, que repassem ao maior número de conhecidos que demonstraram interesse em participar do evento.</p>
<p style="text-align: justify;"><strong>[]&#8216;s</strong><br />
<strong>PopolonY2k </strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.popolony2k.com.br/?feed=rss2&#038;p=2067</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A terceira (e última) MSXRio de 2012 será no Dia das Crianças (e no sábado também)!</title>
		<link>http://www.popolony2k.com.br/?p=2061</link>
		<comments>http://www.popolony2k.com.br/?p=2061#comments</comments>
		<pubDate>Wed, 10 Oct 2012 04:21:34 +0000</pubDate>
		<dc:creator>@popolony2k</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[void pointer]]></category>
		<category><![CDATA[MSX]]></category>
		<category><![CDATA[MSX Rio]]></category>

		<guid isPermaLink="false">http://www.popolony2k.com.br/?p=2061</guid>
		<description><![CDATA[A terceira MSXRio do ano de 2012 será realizada nos dias 12 e 13 de outubro de 2012, ou seja, no fim dessa semana. Todos os cariocas, fluminenses (e porque não, brasileiros e estrangeiros) fãs do “mais mágico dos microcomputadores” estão convidados pelo grupo MSXRio a comparecer no local de sempre: No SESC Engenho de [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.popolony2k.com.br/wp-content/uploads/2012/07/MSX_logo.png"><img class="aligncenter size-full wp-image-2019" title="MSX trademark" src="http://www.popolony2k.com.br/wp-content/uploads/2012/07/MSX_logo.png" alt="MSX trademark" width="512" height="212" /></a></p>
<p style="text-align: justify;">A terceira MSXRio do ano de 2012 será realizada nos dias 12 e 13 de outubro de 2012, ou seja, no fim dessa semana. Todos os cariocas, fluminenses (e porque não, brasileiros e estrangeiros) fãs do “mais mágico dos microcomputadores” estão convidados pelo grupo MSXRio a comparecer no local de sempre: No SESC Engenho de Dentro, que fica na Avenida Amaro Cavalcanti, 1661 – Engenho de Dentro (próximo à estação de trem e ao Engenhão). Começa às 10 e vai até as 18 horas. A entrada é franca, não dá para deixar de ir!</p>
<p style="text-align: justify;">Como chegar? Clique nesse link <a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=pt-BR&amp;geocode=&amp;q=Avenida+Amaro+Cavalcanti,+1661&amp;sll=-22.895755,-43.292339&amp;sspn=0.012177,0.015857&amp;ie=UTF8&amp;hq=&amp;hnear=Av.+Amaro+Cavalc%C3%A2nti,+1661+-+Engenho+de+Dentro,+Rio+de+Janeiro,+20735-041,+Brasil&amp;z=16&amp;iwloc=A" target="_blank">aqui</a> e vá para o Google Maps, e veja como chegar, aproveite que o Google Maps também indica a opção de transporte de massa, logo você não precisa ir de carro, pode ir de ônibus ou trem até o SESC. Quanto à hospedagem, sugerimos uma busca no site <a href="http://pt.otel.com/hotels/rio_de_janeiro_rj.htm?b2b=tripadvisor&amp;sort=price">Otel.com</a>, que já é uma grande ajuda. Mas os hotéis da rede <a href="http://www.accorhotels.com/pt/hotel-5534-ibis-rio-de-janeiro-centro/index.shtml">Accor</a> e da rede <a href="http://www.formule1.com.br/">Formule-1</a> também são opções baratas e convidativas. As melhores opções são o trem e o ônibus:</p>
<ul style="text-align: justify;">
<li>De trem: Desça na Estação de Engenho de Dentro.</li>
<li>De ônibus: A partir do centro, pegue o 383 – Tiradentes-Realengo. A partir da Rodoviária Novo Rio, pegue o 353 – Rodoviária – Cidade de Deus.</li>
</ul>
<p style="text-align: justify;">Esperamos vocês lá!</p>
<p style="text-align: left;"><strong>Fonte:</strong> <a href="http://www.msxrio.com.br/" target="_blank">http://www.msxrio.com.br/</a><br />
<strong>Anuncio original:</strong> <a href="http://www.msxrio.com.br/2012/10/08/a-terceira-e-ultima-msxrio-de-2012-sera-no-dia-das-criancas-e-no-sabado-tambem/" target="_blank">http://www.msxrio.com.br/2012/10/08/a-terceira-e-ultima-msxrio-de-2012-sera-no-dia-das-criancas-e-no-sabado-tambem/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.popolony2k.com.br/?feed=rss2&#038;p=2061</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>MSXDUMP vrs 0.0, liberado no SourceForge.net</title>
		<link>http://www.popolony2k.com.br/?p=2045</link>
		<comments>http://www.popolony2k.com.br/?p=2045#comments</comments>
		<pubDate>Tue, 02 Oct 2012 01:48:05 +0000</pubDate>
		<dc:creator>@popolony2k</dc:creator>
				<category><![CDATA[New old software]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[void pointer]]></category>
		<category><![CDATA[MSX]]></category>
		<category><![CDATA[MSX Disk Doctor]]></category>
		<category><![CDATA[MSXDD]]></category>
		<category><![CDATA[MSXDOS]]></category>
		<category><![CDATA[MSXDOS2]]></category>
		<category><![CDATA[Turbo Pascal]]></category>

		<guid isPermaLink="false">http://www.popolony2k.com.br/?p=2045</guid>
		<description><![CDATA[Amigos, após um bom tempo sem nenhum post no blog, finalmente retorno com novidades na área de software para o MSX. Como muitos aqui já devem saber através do post feito no MSX.ORG, na semana passada liberei extra-oficialmente a primeira ferramenta do MSX Disk Doctor (MSXDD), suite essa que eu mesmo já havia citado aqui no [...]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">Amigos, após um bom tempo sem nenhum <em>post</em> no blog, finalmente retorno com novidades na área de software para o <strong>MSX</strong>.</p>
<p style="text-align: justify;">Como muitos aqui já devem saber através do <a href="http://www.msx.org/news/en/msxdump-0" target="_blank">post feito no MSX.ORG</a>, na semana passada liberei extra-oficialmente a primeira ferramenta do <em>MSX Disk Doctor</em> (<strong>MSXDD</strong>), <a href="http://en.wikipedia.org/wiki/Software_suite" target="_blank">suite</a> essa que eu mesmo já havia citado <a href="http://www.popolony2k.com.br/?p=377" target="_blank">aqui no inicio de 2011</a>.</p>
<p style="text-align: justify;">O <strong>MSXDD</strong> está sendo desenvolvido como uma <em>suite</em> de utilitários de gerenciamento de discos para <strong>MSX</strong>, compatível com diversos tipos de formatação, como <a href="http://en.wikipedia.org/wiki/Fat12" target="_blank">FAT12</a>, <a href="http://en.wikipedia.org/wiki/Fat12#FAT16" target="_blank">FAT16</a> e até <a href="http://en.wikipedia.org/wiki/Fat12#FAT32" target="_blank">FAT32</a>, caso algum dia o <strong>MSXDOS</strong> seja capaz de manipular esse tipo de formatação. Isso é possível devido ao mesmo ser construido sob a base de um <em>framework</em> escalável, , escrito em <a href="http://pt.wikipedia.org/wiki/Turbo_Pascal" target="_blank">Pascal</a> e <a href="http://codeworld.wikidot.com/asm:z80" target="_blank">ASM</a>, desenvolvido paralelamente ao desenvolvimento das ferramentas do <strong>MSXDD</strong>.</p>
<p style="text-align: justify;">Na primeira versão do <strong>MSXDD</strong>, está disponível o <strong>MSXDUMP (vrs 0.0)</strong>, que é um editor de arquivos e setores, compatível com os sistemas operacionais <a href="http://en.wikipedia.org/wiki/MSX-DOS" target="_blank">MSXDOS e MSXDOS2</a> e capaz de operar com <a href="http://en.wikipedia.org/wiki/Floppy_disk" target="_blank">floppy disks</a>, bem como com dispositivos conectados a uma <a href="http://www.popolony2k.com.br/?p=409" target="_blank">IDE </a><em><a href="http://www.popolony2k.com.br/?p=409" target="_blank">Sunrise-like</a>, </em>sendo que nessa <strong>versão 0.0</strong> inicial<strong style="text-align: justify;"></strong>, apenas o suporte a edição de arquivos está presente.</p>
<div id="attachment_2052" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.popolony2k.com.br/wp-content/uploads/2012/10/msxdump.jpg"><img class="size-medium wp-image-2052" title="MSXDUMP 0.0 Main screen" src="http://www.popolony2k.com.br/wp-content/uploads/2012/10/msxdump-300x200.jpg" alt="MSXDUMP 0.0 Main screen" width="300" height="200" /></a><p class="wp-caption-text">MSXDUMP 0.0 Main screen</p></div>
<p style="text-align: justify;"><strong>Operação</strong></p>
<p style="text-align: justify;">Com uma <em>interface</em> tradicional característica da maioria dos editores de setores, o <strong>MSXDUMP</strong> tem alguns poucos (por enquanto) <em>shortcuts</em> que permitem ao usuário um completo controle sobre a edição de arquivos e setores.</p>
<p style="text-align: justify;">Os <em>shortcuts</em> estão descritos logo abaixo:</p>
<ul>
<li style="text-align: justify;"><strong>SELECT</strong> &#8211; Alterna o modo de operação das setas direcionais. Quando em modo <strong>DISK</strong>, as setas direcionais podem avançar ou retroceder o ponteiro de setor/arquivo que está sendo editado. No modo <strong>EDIT</strong>, as setas direcionais podem se movimentar pelos dados exibidos na tela, permitindo assim a edição do <em>buffer</em> de memória que está sendo visualizado;</li>
<li style="text-align: justify;"><strong>CTRL+S</strong> &#8211; Quando em modo <strong>DISK</strong>, essa combinação de teclas salva o conteúdo do <em>buffer</em> carregado;</li>
<li style="text-align: justify;"><strong>CTRL+A</strong> &#8211; Quando em modo <strong>DISK</strong>, avança o ponteiro de setor/arquivo, carregando e exibindo os dados do setor lido. As direcionais <strong>UP</strong> e <strong>RIGHT</strong>, quando em modo <strong>DISK</strong>, tem a mesma função de <strong>CTRL+A</strong>;</li>
<li style="text-align: justify;"><strong>CTRL+R</strong> - Quando em modo <strong>DISK</strong>, retrocede o ponteiro de setor/arquivo, carregando e exibindo os dados do setor lido. As direcionais <strong>DOWN</strong> e <strong>LEFT</strong>, quando em modo <strong>DISK</strong>, tem a mesma função de <strong>CTRL+R</strong>;</li>
<li style="text-align: justify;"><strong>Direcionais UP, DOWN, LEFT, RIGHT</strong> &#8211; Quando em modo <strong>EDIT</strong>, podem ser utilizadas livremente para posicionar o cursor no dado a ser modificado;</li>
</ul>
<div id="attachment_2051" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.popolony2k.com.br/wp-content/uploads/2012/10/msxdump-help.jpg"><img class="size-medium wp-image-2051" title="MSXDUMP 0.0 help screen" src="http://www.popolony2k.com.br/wp-content/uploads/2012/10/msxdump-help-300x200.jpg" alt="MSXDUMP 0.0 help screen" width="300" height="200" /></a><p class="wp-caption-text">MSXDUMP 0.0 help screen</p></div>
<p style="text-align: justify;">Até o final desse ano pretendo lançar mais duas versões do <strong>MSXDUMP</strong>, adicionando o suporte a edição de setores para <em>floppy disks</em> e por ultimo adicionar suporte a dispositivos  com capacidade suficiente para suportar <strong>FAT16</strong>, nesse caso dispositivos compatíveis com <strong>IDE</strong> <em>Sunrise-Like</em>.</p>
<p style="text-align: justify;">Por enquanto deixo abaixo os arquivos, já devidamente liberados no repositório do projeto <a href="http://sourceforge.net/projects/oldskooltech/" target="_blank">Old Skool Tech</a>, que está hospedado no <a href="http://sourceforge.net/" target="_blank">SourceForge.net</a>.</p>
<p style="text-align: justify;"><strong>Binários (LZH)</strong><br />
<a href="http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.0/msxdd-bin.lzh/download" target="_blank">http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.0/msxdd-bin.lzh/download</a></p>
<p style="text-align: justify;"><strong>Binários (ZIP)</strong><br />
<a href="http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.0/msxdd-bin.zip/download" target="_blank">http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.0/msxdd-bin.zip/download</a></p>
<p style="text-align: justify;"><strong>Fontes (LZH)</strong><br />
<a href="http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.0/msxdd-src.lzh/download" target="_blank">http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.0/msxdd-src.lzh/download</a></p>
<p style="text-align: justify;"><strong>Fontes (ZIP)</strong><br />
<a href="http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.0/msxdd-src.zip/download" target="_blank">http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.0/msxdd-src.zip/download</a></p>
<p style="text-align: justify;">Até lá, outras ferramentas poderão ser adicionadas à <em>suite</em> do <strong>MSXDD</strong>, talvez um <a href="http://en.wikipedia.org/wiki/Dd_(Unix)" target="_blank">DD</a>.</p>
<p><strong><span style="text-align: justify;">[]&#8216;s<br />
</span><span style="text-align: justify;">PopolonY2k</span></strong></p>
<p>Referência na internet</p>
<p><em>Anuncio do MSXDUMPP 0.0 (MSX.ORG)</em><br />
<a href="http://www.msx.org/news/en/msxdump-0" target="_blank">http://www.msx.org/news/en/msxdump-0 </a></p>
<p><em>Software Suite (Wikipedia)</em><br />
<a href="http://en.wikipedia.org/wiki/Software_suite" target="_blank">http://en.wikipedia.org/wiki/Software_suite</a></p>
<p><em>Anuncio do Old Skool Tech &amp; MSXDD (PopolonY2k Rulezz)</em><br />
<a href="http://www.popolony2k.com.br/?p=377" target="_blank">http://www.popolony2k.com.br/?p=377</a></p>
<p><em>FAT12 (Wikipedia)</em><br />
<a href="http://en.wikipedia.org/wiki/Fat12" target="_blank">http://en.wikipedia.org/wiki/Fat12</a></p>
<p><em> FAT16 (Wikipedia)</em><br />
<a href="http://en.wikipedia.org/wiki/Fat12#FAT16" target="_blank">http://en.wikipedia.org/wiki/Fat12#FAT16</a></p>
<p><em>FAT32 (Wikipedia)</em><br />
<a href="http://en.wikipedia.org/wiki/Fat12#FAT32" target="_blank">http://en.wikipedia.org/wiki/Fat12#FAT32</a></p>
<p><em>Turbo Pascal (Wikipedia)</em><br />
<a href="http://pt.wikipedia.org/wiki/Turbo_Pascal" target="_blank">http://pt.wikipedia.org/wiki/Turbo_Pascal</a></p>
<p><em>ASM Z80 (CodeWorld)</em><br />
<a href="http://codeworld.wikidot.com/asm:z80" target="_blank">http://codeworld.wikidot.com/asm:z80</a></p>
<p><em>MSXDOS (Wikipedia)</em><br />
<a href="http://en.wikipedia.org/wiki/MSX-DOS" target="_blank">http://en.wikipedia.org/wiki/MSX-DOS</a></p>
<p><em>Floppy Disk (Wikipedia)</em><br />
<a href="http://en.wikipedia.org/wiki/Floppy_disk" target="_blank">http://en.wikipedia.org/wiki/Floppy_disk</a></p>
<p><em>Análise da Interface ATA-IDE &#8211; Tecnobytes</em><br />
<a href="http://www.popolony2k.com.br/?p=409" target="_blank">http://www.popolony2k.com.br/?p=409</a></p>
<p><em>Old Skool Tech (SourceForge.net)</em><br />
<a href="http://sourceforge.net/projects/oldskooltech/" target="_blank">http://sourceforge.net/projects/oldskooltech/</a></p>
<p><em>SourceForge.net</em><br />
<a href="http://sourceforge.net/" target="_blank">http://sourceforge.net/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.popolony2k.com.br/?feed=rss2&#038;p=2045</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Turbo Pascal Forever &#8211; Input/Output</title>
		<link>http://www.popolony2k.com.br/?p=1921</link>
		<comments>http://www.popolony2k.com.br/?p=1921#comments</comments>
		<pubDate>Wed, 01 Aug 2012 03:00:36 +0000</pubDate>
		<dc:creator>@popolony2k</dc:creator>
				<category><![CDATA[Online Courses]]></category>
		<category><![CDATA[void pointer]]></category>
		<category><![CDATA[MSX]]></category>
		<category><![CDATA[Turbo Pascal]]></category>

		<guid isPermaLink="false">http://www.popolony2k.com.br/?p=1921</guid>
		<description><![CDATA[Amigos, após um tempo sem posts, volto ao nosso curso de Pascal certo de que a fase inicial de fundamentação na linguagem já passou e que agora estamos aptos a avançar para tópicos de complexidade intermediária, ficando cada vez mais avançados. Com base nisso vamos a uma das fundações mais importantes de qualquer linguagem  computacional [...]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">Amigos, após um tempo sem <em>posts</em>, volto ao nosso curso de <strong>Pascal</strong> certo de que a fase inicial de fundamentação na linguagem já passou e que agora estamos aptos a avançar para tópicos de complexidade intermediária, ficando cada vez mais avançados.</p>
<p style="text-align: justify;">Com base nisso vamos a uma das fundações mais importantes de qualquer linguagem  computacional e um dos pilares  da computação, que é a camada de <strong>I/O</strong> (<strong>Input/Output</strong>), ou em português, <strong>E/S</strong> (<strong>Entrada/Saída</strong>) de dados.</p>
<p style="text-align: justify;">Tudo na computação envolve entrada e saída de dados, desde uma simples tecla digitada no teclado do computador, leitura/gravação de arquivos em um disco rígido, até a transferência de dados em grande escala através de dispositivos mais complexos de comunicação, como as placas de redes, seja com fio (<a href="http://en.wikipedia.org/wiki/Ethernet" target="_blank">Ethernet</a>) ou sem fio (<a href="http://en.wikipedia.org/wiki/Wireless_network" target="_blank">Wireless</a>).</p>
<p style="text-align: justify;">Por ser uma das principais fundações da computação, as linguagens computacionais implementam o conceito de <strong>E/S</strong> de forma bem abstrata na maioria dos casos, e principalmente contam com a possibilidade de futuras extensões a seu mecanismo de <strong>E/S</strong> padrão, visando o operações de <strong>E/S</strong> em novos dispositivos.</p>
<p style="text-align: justify;">Feita a devida introdução, como de costume, vamos a&#8230;.</p>
<p style="text-align: justify;"><strong> &#8230;E/S no Turbo Pascal. </strong></p>
<p style="text-align: justify;">Os dispositivos de <strong>E/S</strong> mais comuns que utilizamos em  um computador, principalmente nos computadores antigos, é o teclado e o monitor de vídeo, sendo o teclado reconhecido com um dispositivo apenas de entrada de dados e o vídeo um dispositivo apenas de saída.</p>
<p style="text-align: justify;">Os dispositivos de armazenamento (disquetes, <em>hard disks</em>, &#8230;) por sua vez, são dispositivos tanto de entrada quanto de saída, uma vez que é possível ler e escrever dados nos mesmos.</p>
<p style="text-align: justify;">Como podemos ver, existem diversos dispositivos e se para cada um desses dispositivos padrão existisse uma forma proprietária para acessá-lo, teríamos uma verdadeira <a href="http://pt.wikipedia.org/wiki/Torre_de_Babel" target="_blank">Torre de Babel</a> na programação de novos dispositivos.</p>
<p style="text-align: justify;">Felizmente os sistemas operacionais existem para abstrair uma série de dispositivos de tal forma que os mesmos sejam reconhecidos e acessados de maneira uniforme e transparente para o desenvolvedor, que por sua vez não precisa se preocupar com os detalhes internos do dispositivo em uso.</p>
<p style="text-align: justify;">Felizmente tanto o <a href="http://en.wikipedia.org/wiki/MSX-DOS" target="_blank">MSX-DOS</a> quanto o seu pai, o <a href="http://en.wikipedia.org/wiki/CP/M" target="_blank">CP/M80</a>, padronizaram alguns dispositivos de <strong>E/S</strong>, conhecidos como <em>dispositivos lógicos</em>. Abaixo segue a lista de <em>dispositivos lógicos</em> padronizados pelo <strong>CP/M</strong> e consequentemente o <strong>MSX-DOS</strong>:</p>
<blockquote>
<p style="text-align: justify;"><strong>CON:</strong> Console, ou a tela de texto do computador;<br />
<strong>TRM:</strong> Terminal. Geralmente é redirecionado para o console ou <strong>CON</strong>;<br />
<strong>LST:</strong> Dispositivo de listagem ou impressora;<br />
<strong>AUX:</strong> Dispositivo de comunicação auxiliar. Também conhecido como <strong>COM:;</strong><br />
<strong>COM:</strong> Dispositivo de comunicação externo, comumente conhecido como <strong>COM1</strong>, ou dispositivo de comunicação externo, como uma porta serial <a href="http://en.wikipedia.org/wiki/Rs232" target="_blank">RS-232</a>;<br />
<strong>USR:</strong> Dispositivo do usuário. Geralmente uma peça de <em>software</em>, conhecida como <a href="http://en.wikipedia.org/wiki/Device_driver" target="_blank">device driver</a>, carregada pelo sistema operacional para responder às chamados ao dispositivo de <em>hardware</em> e/ou <em>software</em> a ser controlado. Podemos associa-lo aos modernos  <em>device drivers</em>, encontrados nos sistemas operacionais modernos, só que aqui em seu estado mais primitivo;<br />
<strong>KBD:</strong> Dispositivo de teclado;</p>
</blockquote>
<p style="text-align: justify;">Cada um desses <em>dispositivos lógicos</em> está mapeado no <strong>Turbo Pascal</strong> a arquivos  pré-definidos, conforme descrito abaixo:</p>
<blockquote>
<p style="text-align: justify;"><strong>Input</strong>, associado ao dispositivo <strong>CON:</strong><br />
<strong>Output</strong>, associado ao dispositivo <strong>CON:</strong><br />
<strong>Con</strong>, associado ao dispositivo <strong>CON:<br />
</strong><strong>Trm</strong>, associado ao dispositivo <strong>TRM:<br />
</strong><strong>Kbd</strong>, associado ao dispositivo <strong>KBD:<br />
</strong><strong>Lst</strong>, associado ao dispositivo <strong>LST:<br />
</strong><strong>Aux</strong>, associado ao dispositivo <strong>AUX:<br />
</strong><strong>Usr</strong>, associado ao dispositivo<strong> USR:</strong></p>
</blockquote>
<p style="text-align: justify;">Conhecendo agora os dispositivos padrão suportados pelo <strong>Turbo Pascal</strong>, vamos verificar a seguir como interagir com esses dispositivos, lendo ou escrevendo informações para os mesmos.</p>
<p style="text-align: justify;"><strong>Rotinas padrão de E/S.</strong></p>
<p style="text-align: justify;">Como se trata de <em>Entrada</em> e <em>Saída</em>, o procedimento padrão implícito nessas operações é ler no caso de requisição de entrada de dados e escrever no caso de requisição de saída de dados. No <strong>Turbo Pascal</strong> essas operações são feitas ou para arquivos no <em>FileSystem</em> do sistema operacional, ou para qualquer um dos arquivos mapeados, conhecidos como <em>file handlers,</em> para os dispositivos, conforme descrito anteriormente.</p>
<p style="text-align: justify;"><strong>Procedure Write e WriteLn</strong></p>
<p style="text-align: justify;">Para escrever uma informação em um determinado arquivo, ou dispositivo, utilizamos o comando <strong>Write</strong> e <strong>WriteLn</strong>, que já utilizamos bastante durante o tutorial. Segue abaixo a definição do mesmo:</p>
<pre class="brush: pascal">Write( Var1, Var2, Var3, ...VarN );</pre>
<p style="text-align: justify;">Onde <strong>Var1, Var2, Var3, &#8230;VarN</strong>, são variáveis e/ou constantes a serem escritas no dispositivo padrão do <strong>Turbo Pascal</strong>, que no caso é o arquivo pré-definido, <strong>Con</strong>, conforme pode ser visto no código exemplo abaixo.</p>
<pre class="brush: pascal">Program TestWrite;
Var     strText : String[50];

Begin
  strText := 'And this is a variable.';
  Write( 'This a constant for Write Procedure.', strText );
End.</pre>
<p style="text-align: justify;">Entretanto, como citamos anteriormente, é possível escrever em outros dispositivos diferentes do padrão (<strong>Con</strong>)  do comando <strong>Write</strong>, e para isso você deve especificar a variável do arquivo associada ao dispositivo desejado, como pode ser visto na definição abaixo:</p>
<pre class="brush: pascal">Write( VarFile, Var1, Var2, Var3, ...VarN );</pre>
<p style="text-align: justify;">Onde <strong>VarFile</strong> é a variável associada ao arquivo/dispositivo em que se deseja escrever. Segue abaixo um exemplo onde ao invés de ter a saída direcionada para o dispositivo <strong>Con</strong> (<em>Console</em>), o mesmo é direcionado para a impressora conectada ao micro, lógicamente que só funcionará em computadores com a impressora conectada e senão estiver conectada, o seu programa ficará travado até que se pressione <strong>CTRL+STOP</strong>.</p>
<pre class="brush: pascal">Program TestPrinter;
Var     strText : String[50];

Begin
  strText := 'And this is a variable.';
  Write( Lst, 'This a constant for Write Procedure.', strText );
End.</pre>
<p style="text-align: justify;">No caso acima, utilizamos o arquivo/dispositivo pré-mapeado do <strong>Turbo Pascal</strong>, <strong>Lst</strong>, que já está devidamente associada ao dispositivo <strong>LST:</strong> do sistema operacional <strong>MSX-DOS</strong>.</p>
<p style="text-align: justify;">A <strong>procedure</strong> <strong>WriteLn </strong>tem sua sintaxe e uso idêntico a de <strong>Write</strong>, entretanto <strong>WriteLn</strong>, salta uma linha, inserindo um <em>Carriage Return/LineFeed</em> no final do dado escrito.</p>
<p style="text-align: justify;"><strong>A procedure Read e ReadLn</strong></p>
<p style="text-align: justify;">Para ler dados de um <em>arquivo/dispositivo</em> temos os comandos <strong>Read</strong> e <strong>ReadLn</strong>, que utilizaremos bastante durante todo o tempo em que estivermos programando em <strong>Pascal</strong> e seus filhotes, como o <strong>Delphi</strong>. Segue abaixo a sintaxe do comando <strong>Read</strong>:</p>
<pre class="brush: pascal">Read( Var1, Var2, ..., VarN );</pre>
<p style="text-align: justify;">Onde <strong>Var1</strong>, <strong>Var2</strong>, &#8230; <strong>VarN</strong>, são as variáveis que receberão os dados de entrada do <em>arquivo/dispositivo</em> em que se está fazendo a operação de leitura, no caso de <strong>Read</strong>, o dispositivo padrão é o <strong>Kdb</strong>, ou teclado (<em>Keyboard</em>).</p>
<p style="text-align: justify;">O modo mais comum é utilizar <strong>Read/ReadLn</strong> para transferir dados do teclado, para uma variável em memória, como podemos ver no exemplo a seguir.</p>
<pre class="brush: pascal">Program TestRead;
Var
      strData : String[255];

Begin
  Write( 'Please type a word' );
  Read( strData );
End;</pre>
<p style="text-align: justify;">No exemplo acima o programa aguarda uma entrada de uma <strong>string</strong> através do teclado, até que o usuário digite a tecla <strong>enter</strong> para finalizar a entrada.</p>
<p style="text-align: justify;">Da mesma forma como nos comandos de escrita <strong>Write/WriteLn</strong>, os comandos <strong>Read/ReadLn</strong> aceitam uma entrada de um <em>arquivo/dispositivo</em> diferente do padrão estabelecido para o comando, conforme pode ser visto na definição abaixo:</p>
<pre class="brush: pascal">Read( VarFile, Var1, Var2, Var3, ...VarN );</pre>
<p style="text-align: justify;">Onde <strong>VarFile</strong> é a variável associada ao <em>arquivo/dispositivo</em> em que se deseja realizar a leitura. Um <em>arquivo/dispositivo</em> padrão que pode ser utilizado para captura de dados é a porta <strong>AUX:</strong>, geralmente conhecida <strong>COM1:</strong> nos <strong>PC&#8217;s</strong>. Entretanto esse comando só retornará uma informação com sucesso, caso exista algum dispositivo conectado à porta auxiliar (<strong>COM</strong>) do computador.</p>
<p style="text-align: justify;">Abaixo segue um exemplo utilizando o <em>arquivo/dispositivo</em> padrão, <strong>Kbd</strong>, que é o teclado, utilizado por padrão em <strong>Read/ReadLn</strong>, caso não seja especificado o <em>arquivo/dispositivo</em> a utilizar.</p>
<pre class="brush: pascal">Program TestReadKbd;
Var
      strData : String[255];

Begin
  Write( 'Please type a word' );
  Read( Kbd, strData );
End;</pre>
<p style="text-align: justify;"><strong>Arquivos</strong></p>
<p style="text-align: justify;">Já que estamos falando de <strong>E/S</strong> e dispositivos, não podemos deixar de falar sobre <strong>E/S</strong> em  disco utilizando arquivos e as operações em arquivos consistem em 2 formas básicas. A primeira são os <em>arquivos tipados</em> e a segunda os <em>arquivos sem tipo definido</em>.</p>
<p style="text-align: justify;">Para trabalhar com arquivos em <strong>Turbo Pascal</strong>, basta seguir a sequencia abaixo:</p>
<ol>
<li>Criar uma variável do tipo arquivo (<em>file handle</em>);</li>
<li>Associar um  nome de arquivo a uma variável do tipo arquivo;</li>
<li>Abrir o arquivo para escrita, leitura ou escrita/leitura;</li>
<li>Ler dados do arquivo ou escrever dados para o arquivo, na sequencia desejada;</li>
<li>Fechar o arquivo após o uso;</li>
</ol>
<p style="text-align: justify;">Primeiro de tudo devemos conhecer um tipo de dados importante na manipulação e gerenciamento de arquivos em <strong>Pascal</strong>, é o tipo <strong>File</strong>. Nos casos de <em>arquivos tipados</em>, podemos também definir um arquivo juntamente com o tipo de dados a ser manipulado nesse arquivo, conforme descrito abaixo:</p>
<pre class="brush: pascal">Var
       fpIntegerFile : File Of Integer;
       fpRealFile    : File Of Real;
       fpStringFile  : File Of String[100];
       fpFileRecord  : File Of Record 
                                 strAddress : String[50];
                                 nNumber    : Integer;
                                 fSalary    : Real;
                               End;</pre>
<p style="text-align: justify;">Ao definir uma variável do tipo <strong>File</strong>, você está criando um <em>file handle</em> que será utilizado em todas as operações envolvendo arquivos e a primeira dessas operações é associar esse <em>file handle</em> a um arquivo no <em>filesystem</em> do sistema operacional, para isso utilizamos o comando <strong>Assign</strong>, cujo formato está descrito logo abaixo:</p>
<pre class="brush: pascal">Assign( FileVar : File, strFileName : String );</pre>
<p style="text-align: justify;">Onde <em>FileVar</em> é uma variável do tipo File, podendo ser de qualquer um dos tipos especificados, conforme o exemplo anterior. <em>strFileName</em> é uma variável, ou constante do tipo <strong>String</strong>, que contém o nome do arquivo a ser aberto/criado para leitura/escrita;</p>
<p style="text-align: justify;">Após associar o nome do arquivo à variável do tipo <strong>File</strong>, essa variável estará pronta para toda e qualquer operação subsequente a ser realizada com arquivos.</p>
<p style="text-align: justify;"><strong>Abrindo arquivo para E/S.</strong></p>
<p style="text-align: justify;">A primeira operação que devemos fazer após associar um <em>file handle</em> a um arquivo no <em>filesystem</em> é abrir o arquivo para que possamos realizar qualquer operação de <strong>E/S</strong> no mesmo. Para isso <strong>Turbo Pascal</strong> conta com duas <strong>procedures</strong> que podem ser utilizadas para abrir um arquivo, que serão descritas a seguir.</p>
<p style="text-align: justify;"><strong>Reset</strong></p>
<p style="text-align: justify;">A <strong>procedure Reset</strong> é utilizada para abrir um arquivo existente no <em>filesystem</em> e sua sintaxe é descrita abaixo:</p>
<pre class="brush: pascal">Reset( FileVar : File );</pre>
<p style="text-align: justify;">Onde <strong>FileVar</strong> é a variável do tipo <strong>File</strong>, associada anteriormente a um arquivo através da <strong>procedure Assign</strong>, descrita anteriormente.</p>
<p style="text-align: justify;"><strong>Rewrite</strong></p>
<p style="text-align: justify;">A <strong>procedure Rewrite</strong> é utilizada para abrir um arquivo independente se o mesmo existe no <em>filesystem</em> ou não. Caso o arquivo não exista o mesmo será criado.</p>
<pre class="brush: pascal">Rewrite( FileVar : File );</pre>
<p style="text-align: justify;">Onde <strong>FileVar</strong> é a variável do tipo <strong>File</strong>, associada anteriormente a um arquivo através da <strong>procedure Assign</strong>, descrita anteriormente.</p>
<div> <strong style="text-align: justify;">Fechando arquivos</strong></div>
<p style="text-align: justify;">Bom, após todo esse processo de abertura de arquivos existe um processo importantíssimo a ser realizado ao final do uso do mesmo, que é o fechamento do arquivo previamente aberto, uma vez que as funções de <strong>E/S</strong> de <strong>Turbo Pascal</strong>, assim como as funções de <strong>E/S</strong> de <a href="http://en.wikipedia.org/wiki/ANSI_C" target="_blank">ANSI C</a>, são <em>bufferizadas</em>, ou seja, elas utilizam um <em>buffer</em> interno para cada leitura/escrita feita em um dispositivo, visando assim otimizar as operações de <strong>E/S</strong>, principalmente em dispositivos lentos.</p>
<p style="text-align: justify;">Apesar do <em>buffer</em> interno proporcionar um ganho de performance nas operações de <strong>E/S</strong>, existe um problema, pois como tanto as operações de leitura quanto as de escrita são feitas em memória antes do <em>buffer</em> ser completado e despejado no dispositivo de armazenamento, no caso o disco rígido ou até mesmo um disquete.</p>
<p style="text-align: justify;">Caso o desenvolvedor não instrua o programa a despejar esse <em>buffer</em> no disco, o <strong>Turbo Pascal</strong> irá fazê-lo &#8220;<em>automagicamente</em>&#8220;, quando o <em>buffer</em> for completado ou quando o arquivo for fechado.</p>
<p style="text-align: justify;"><strong>Close</strong></p>
<p style="text-align: justify;">Fecha um arquivo especificado, despejando o <em>buffer</em> de<strong> E/S</strong> no dispositivo anteriormente aberto e invalidando o <em>file handle</em> para uso. Sua sintaxe é descrita abaixo:</p>
<pre class="brush: pascal">Close( FileVar : File );</pre>
<p style="text-align: justify;">Onde <strong>FileVar</strong> é a variável do tipo <strong>File</strong>, associada anteriormente a um arquivo através da <strong>procedure Assign</strong>, descrita anteriormente.</p>
<p style="text-align: justify;"><strong>Despejando o buffer de E/S.</strong></p>
<p style="text-align: justify;">Conforme descrito na <strong>procedure Close</strong>, as operações de<strong> E/S</strong> em arquivos de <strong>Turbo Pascal</strong> são <em>bufferizadas</em> e esse <em>buffer</em> é gerenciado &#8220;<em>automagicamente</em>&#8221; por <strong>Turbo Pascal</strong>.</p>
<p style="text-align: justify;">Entretanto podemos forçar que o mesmo seja liberado no disco a qualquer momento e podemos fazer isso através da <strong>procedure Flush</strong>, cuja sintaxe está descrita abaixo:</p>
<pre class="brush: pascal">Flush( FileVar : File );</pre>
<p style="text-align: justify;">Onde <strong>FileVar</strong> é a variável do tipo <strong>File</strong>, associada anteriormente a um arquivo através da <strong>procedure Assign</strong>, descrita anteriormente.</p>
<p style="text-align: justify;">Abaixo um exemplo que demonstra o uso de todas as funções descritas acima:</p>
<pre class="brush: pascal">(** Sample program to show the power 
  * of Turbo Pascal I/O procedures 
  * by PopolonY2k 2012.
  *)
Program Test_IO;
Var
       fpFile : File Of String[100];

Begin
  Assign( fpFile, 'temp.txt' ); { Assign  the file name to file variable }
  Rewrite( fpFile ); { Create a new file }
  WriteLn( fpFile, 'This is a Test' ); { Write text to file }
  Flush( fpFile ); { Force the buffer dump to disk }
  WriteLn( fpFile, 'Another text to file' );
  Close( fpFile ); { Close the file }
End.</pre>
<p style="text-align: justify;"><strong>Acesso aleatório ao arquivo.</strong></p>
<p style="text-align: justify;">Devemos conhecer que existe um ponteiro lógico que indica a posição de onde a próxima operação de leitura ou gravação será realizada, sendo que em cada operação de <strong>E/S</strong> realizada no arquivo, esse ponteiro lógico é movido &#8216;<strong>n&#8217;</strong> <em>bytes</em> para frente, principalmente nos exemplos descritos até aqui, onde trabalhamos com arquivos sequenciais.</p>
<p style="text-align: justify;">Sabendo disso, devemos conhecer também que existe uma forma, em <strong>Turbo Pascal</strong>, para manipulação desse ponteiro lógico, o que nos permite navegar pelo arquivo de maneira aleatória, não necessitando assim varrer um arquivo inteiro em busca de uma informação, e assim podemos trabalhar de maneira mais eficiente e veloz para os casos onde sabemos a posição do registro a ser lido ou escrito.</p>
<p style="text-align: justify;">Para manipular a posição do ponteiro do arquivo, Turbo Pascal possui a <strong>procedure</strong> descrita abaixo.</p>
<pre class="brush: pascal">Procedure Seek( fpFile : File; nRec : Integer );</pre>
<p style="text-align: justify;">A <strong>procedure Seek</strong> recebe um parâmetro do tipo <strong>File</strong>, que contém o <em>file handle</em> para o arquivo aberto através de <strong>Reset</strong> ou <strong>Rewrite</strong> e também aceita um valor inteiro que descreve  a nova posição do ponteiro no arquivo. Lembrando que a posição inicial do ponteiro no arquivo é sempre zero.</p>
<p style="text-align: justify;">Essa posição não é o número de <em>bytes</em> a mover no arquivo e sim o número de registros do arquivo e sua posição em bytes varia de acordo com o tipo do arquivo. Abaixo um exemplo do uso de <strong>Seek</strong>.</p>
<pre class="brush: pascal">(** This is a sample to show how to make a random access
  * to file, using Seek.
  * by PopolonY2k 2012.
  *)
Program Test_Seek;
Type TMyData = Record
  strName : String[50];
  nAge    : Integer;
End;

Var
       fpFile : File Of TMyData;
       rec    : TMyData;

Begin
  { The first step is write some data to file }
  Assign( fpFile, 'Data.dat' );  { Create the data file }
  Rewrite( fpFile );

  rec.strName := 'PopolonY2k';
  rec.nAge    := 60;
  Write( fpFile, rec );          { Write the first record }
  rec.strName := 'AphroditeY2k';
  rec.nAge    := 40;
  Write( fpFile, rec );          { Write the second record }
  rec.strName := 'HudnosY2k';
  rec.nAge    := 1000;
  Write( fpFile, rec );          { Write the third record }
  Close( fpFile );               { Close the file }

  { Now we start to read the file written previously }

  Assign( fpFile, 'Data.dat' );  { Open the data file }
  Reset( fpFile );

  { Our file has 3 record and the first record is in position 0 zero }
  { Then we start to read the mid record }
  Seek( fpFile, 1 );
  Read( fpFile, rec );
  WriteLn( 'Name -&gt; ', rec.strName );
  WriteLn( 'Age  -&gt; ', rec.nAge );

  { Now reading the last record }
  Seek( fpFile, 2 );
  Read( fpFile, rec );
  WriteLn( 'Name -&gt; ', rec.strName );
  WriteLn( 'Age  -&gt; ', rec.nAge );

  { Now reading the first record }
  Seek( fpFile, 0 );
  Read( fpFile, rec );
  WriteLn( 'Name -&gt; ', rec.strName );
  WriteLn( 'Age  -&gt; ', rec.nAge );
  Close( fpFile );
End.</pre>
<p style="text-align: justify;"><strong>Aquivos Texto.</strong></p>
<p style="text-align: justify;">Arquivos texto são arquivos cujo conteúdo é formado basicamente por <a href="http://pt.wikipedia.org/wiki/ASCII#Caracteres_imprim.C3.ADveis" target="_blank">caracteres imprimíveis</a>, sendo compostos por diversas linhas de caracteres imprimíveis separados por um terminador de linha, que no caso do <strong>MSX-DOS</strong> é o <a href="http://pt.wikipedia.org/wiki/ASCII#Caracteres_n.C3.A3o_imprim.C3.ADveis" target="_blank">caractere de controle</a> <em>carriage-return</em> seguido de <em>line-feed</em>, sendo o final de arquivo delimitado por um caractere especial representado pelo código <strong>ASCII</strong> de número <strong>26 </strong>(<strong>1A</strong> em hexadecimal), também representado pela combinação de teclas <strong>CTRL+Z</strong>.</p>
<p style="text-align: justify;">Abaixo segue a descrição de alguns comandos importantes para a manipulação de arquivos em modo texto:</p>
<pre class="brush: pascal">Function EOF( fpFile : File) : Boolean.</pre>
<p style="text-align: justify;">Essa função é especifica para o uso em arquivos no modo texto e sua finalidade é reconhecer se o final de arquivo foi alcançado ou não. O nome dessa função vem da abreviação de <em>End Of File</em>.</p>
<p style="text-align: justify;">Conforme pode ser visto no <a href="http://pt.wikipedia.org/wiki/Prot%C3%B3tipo_de_fun%C3%A7%C3%A3o" target="_blank">protótipo da função</a> acima, <strong>EOF</strong> recebe um parâmetro que é um <em>file handle</em> para um arquivo texto anteriormente aberto por <strong>Reset</strong> ou <strong>Rewrite</strong>. A função testa se arquivo chegou ao seu fim e retorna <strong>True</strong> caso o teste seja satisfeito e <strong>Falso</strong> caso contrário.</p>
<pre class="brush: pascal">Function EOLn( fpFile : File ) : Boolean;</pre>
<p style="text-align: justify;">Assim como <strong>EOF</strong>, <strong>EOLn</strong> aceita um <em>file handle</em>, previamente aberto através de Reset ou <strong>Rewrite</strong>. A função testa se a ultima operação de leitura feita através da <strong>procedure Read</strong>, atingiu o final da linha delimitado por <em>Carriage-return/Line-feed</em>. O nome da função vem da abreviação de <em>End Of Line</em>.</p>
<p style="text-align: justify;">Abaixo temos um exemplo demonstrando o uso das funções de manipulação de arquivo texto.</p>
<pre class="brush: pascal">(** Sample code to show the Turbo Pascal text files related
  * procedures and functions;
  * This sample copy a complete input file to an output file specified
  * by the user;
  * by PopolonY2k 2012;
  *) 
Program Test_TextFiles;

Type TString = String[255];

Var
      fpFileIn,
      fpFileOut  : File Of TString;
      strLine,
      strFileIn,
      strFileOut : TString;

Begin
  WriteLn( 'Please type the input file name' );
  ReadLn( strFileIn );
  WriteLn( 'Please type the output file name' );
  ReadLn( strFileOut );

  Assign( fpFileIn, strFileIn );   { Assign the input and output   }
  Assign( fpFileOut, strFileOut ); { file names to the File handle }
  Reset( fpFileIn );               { variables                     }
  Rewrite( fpFileOut );

  {
    Now the we enter in loop reading the input file until reach the
    end of input file and writing the output to the output file
    previously opened for writing.
  }
  While( Not EOF( fpFileIn ) )  Do  { EOF function sample }
  Begin
    { 
      Here another loop to read the content for each line of input
      file, until the end of line.
    }
    While( Not EOLn( fpFileIn ) ) Do
    Begin
      Read( fpFileIn, strLine );    { Read content from input file }
      Write( fpFileOut, strLine );  { Write content to output file }
    End;
    WriteLn( fpFileOut ); { After read a complete line. We must to }
                          { add a CR/LF at the end of line for the }
                          { output file                            }
  End;
  Close( fpFileIn );      { Close the input and }
  Close( fpFileOut );     { the output files    }
End.</pre>
<p style="text-align: justify;"><strong>Arquivos sem tipo definido.</strong></p>
<p style="text-align: justify;">Já passeamos pelas funções de <strong>E/S</strong> de <strong>Turbo Pascal</strong>, para manipulação de arquivos tipados incluindo arquivos texto, entretanto não podemos deixar de citar que <strong>Turbo Pascal</strong> é uma linguagem poderosa no nível de que você tenha pleno controle da máquinam o que possibilita a criação de programas e bibliotecas de uso geral, incluindo a capacidadede manipulação de arquivos independente do tipo, ou seja, podemos manipular e gerenciar arquivos binários diversos com extrema facilidade devido a esse conjunto de funções  que veremos à seguir.</p>
<p style="text-align: justify;">As <strong>procedures</strong> padrão para manipulação de arquivos não tipados são canais de <strong>E/S</strong> de baixo nível que usam acesso direto a arquivos no disco. Esse acesso é feito através de um registro, ou <em>buffer</em>, que tem um tamanho lógico de <strong>128 bytes</strong>.</p>
<p style="text-align: justify;">Esse tamanho virtual pode ser comparado aos setores de um arquivo de um sistema operacional, como no <strong>MSX-DOS</strong> que é de <strong>512 bytes</strong>.</p>
<p style="text-align: justify;">Vamos ao que interessa que são as rotinas de baixo nível para acesso direto a arquivos do <strong>Turbo Pascal</strong>, que descrevo abaixo.</p>
<pre class="brush: pascal">Procedure BlockRead( fpFile : File; 
                     Var Buffer; 
                     nBytes : Integer );
{ Variation of the same procedure }
Procedure BlockRead( fpFile : File; 
                     Var Buffer; 
                     nBytes : Integer; 
                     Var nResult : Integer );</pre>
<p style="text-align: justify;">A <strong>procedure BlockRead</strong> é uma poderosa rotina para leitura de grandes blocos de dados de qualquer arquivo em qualquer formato. Como podemos ver, a rotina aceita um <em>file handle</em> que especifica o arquivo aberto anteriormente através de <strong>Reset</strong> ou <strong>Rewrite</strong>, uma variável <em>buffer</em> que irá receber o conteúdo da leitura feita por <strong>BlockRead</strong>, uma variável que especifica o número de bytes a ler do arquivo e também uma variável referência (vide passagem por referência no <a href="http://www.popolony2k.com.br/?p=1694" target="_blank">segundo post</a>), que irá receber o número de registros lidos na ultima operação.</p>
<p style="text-align: justify;">O <em>buffer</em> pode ter qualquer tamanho e apontar para qualquer área de memória que esteja disponível no computador. O parâmetro inteiro representado por <em>nBytes</em>, deve especificar o tamanho, em <strong>bytes</strong>, do <em>buffer</em> a ser carregado na operação de leitura e <em>nResult</em> irá retornar o número de registros de <strong>128 bytes</strong> realmente lidos, ou seja se o seu <em>buffer</em> for de <strong>256 bytes</strong>, <em>nResult</em> terá o valor <strong>2</strong> após a leitura de <strong>BlockRead</strong>.</p>
<p style="text-align: justify;">Após a ultima operação de <strong>BlockRead</strong>, a posição do ponteiro do arquivo será  movida <em>nBytes</em> para frente no arquivo, ou até a posição final do arquivo, caso a mesma seja atingida.</p>
<pre class="brush: pascal">Procedure BlockWrite( fpFile : File;
                      Var Buffer; 
                      nRecs : Integer );
{ Variation of the same procedure }
Procedure BlockWrite( fpFile : File;
                      Var Buffer; 
                      nRecs : Integer; 
                      Var nResult : Integer );</pre>
<p style="text-align: justify;">A <strong>procedure BlockWrite</strong> tem basicamente a mesma estrutura de <strong>BlockRead</strong> porém com função inversa, ou seja, ao invés de ler, a mesma grava dados de um <em>buffer</em> em memória para o disco. Da mesma forma que <strong>BlockRead</strong>, a rotina aceita um <em>file handle</em> que especifica o arquivo aberto anteriormente através de <strong>Reset</strong> ou <strong>Rewrite</strong>, uma variável <em>buffer</em> que contém a informação a ser escrita por <strong>BlockWrite</strong>, uma variável que especifica o número de registros a ser escrito e também uma variável referência, que irá receber o número de registros gravados na ultima operação de escrita.</p>
<p style="text-align: justify;">O <em>buffer</em> pode ter qualquer tamanho, ou apontar para qualquer área de memória, desde que estejam disponíveis para o computador. O parâmetro inteiro representado por <em>nRecs</em>, deve especificar o tamanho, em registros de <strong>128 bytes</strong>, do <em>buffer</em> a ser gravado na operação de escrita e <em>nResult</em> irá retornar o número de registros de <strong>128 bytes</strong> realmente escritos, ou seja se o seu <em>buffer</em> for de <strong>256 bytes</strong>, <em>nResult</em> terá o valor <strong>2</strong> após a operação de escrita feita por <strong>BlockWrite</strong>.</p>
<p style="text-align: justify;">Após a ultima operação de <strong>BlockWrite</strong>, a posição do ponteiro do arquivo será  movida <em>nBytes</em> para frente no arquivo.</p>
<p style="text-align: justify;">Abaixo segue um exemplo que demonstra o uso das rotinas de baixo nível, não tipadas, de <strong>Turbo Pascal</strong>.</p>
<pre class="brush: pascal">(** Sample code to show the Turbo Pascal direct access low level
  * related procedures and functions;
  * This sample copy a complete input file to an output file specified
  * by the user;
  * by PopolonY2k 2012;
  *) 
Program Test_DirectIO;

Type TString = String[255];
Const ctMaxBuffer : Integer = 1024; { Uses 1024 bytes copy buffer }

Var
      fpFileIn,
      fpFileOut  : File;
      strLine,
      strFileIn,
      strFileOut : TString;
      nRecs     : Integer;
      aBuffer   : Array[0..ctMaxBuffer] Of Byte;

Begin
  WriteLn( 'Please type the input file name' );
  ReadLn( strFileIn );
  WriteLn( 'Please type the output file name' );
  ReadLn( strFileOut );

  Assign( fpFileIn, strFileIn );   { Assign the input and output   }
  Assign( fpFileOut, strFileOut ); { file names to the File handle }
  Reset( fpFileIn );               { variables                     }
  Rewrite( fpFileOut );

  { 
    Start reading the input file until reach the end of file, when
    the BlockRead return zero for the number of records loaded.
  }
  Repeat
    BlockRead( fpFileIn, aBuffer, SizeOf( aBuffer ), nRecs );
    BlockWrite( fpFileOut, aBuffer, nRecs );
  Until( nRecs = 0 );

  Close( fpFileIn );
  Close( fpFileOut );
End.</pre>
<p style="text-align: justify;"><strong>Error handling</strong></p>
<p style="text-align: justify;">Bom, até agora fizemos o caminho perfeito onde problemas não acontecem, discos não tem sua capacidade máxima atingida, erros de escrita e leitura não existem, proteção contra gravação é lenda, enfim, tudo é maravilhoso no mundo de <a href="http://pt.wikipedia.org/wiki/Pok%C3%A9mon" target="_blank">Pokémon</a>.</p>
<p style="text-align: justify;">Porém no mundo real, todos os problemas acima e muitos outros mais, podem acontecer e irão acontecer pois <a href="http://pt.wikipedia.org/wiki/Lei_de_Murphy" target="_blank">Murphy</a> nos acompanha a cada segundo e fará com que cada um dos problemas possíveis aconteça. Por isso devemos trabalhar nossos <em>softwares</em> buscando prever a maioria dos problemas ou pelo menos tratar a maioria das excessões possíveis de acontecer durante o ciclo de execução do <em>software</em>.</p>
<p style="text-align: justify;">O <strong>Turbo Pascal</strong> possui um mecanismo de controle do comportamento de <em>run-time</em> conhecida como <a href="http://blogs.embarcadero.com/davidi/2008/11/16/39118/" target="_blank">Diretivas de Compilação</a>, que falaremos em outra oportunidade dedicada exclusivamente a <em>Diretivas de Compilação</em>. Entre os exemplos de diretivas de compilação está a que controla a checagem de acesso indevido a um índice de um <em>array</em>, outra que controla a checagem de compatibilidade entre parâmetros <strong>String</strong>, e entre as diversas diretivas existentes temos uma em especial para controle da checagem de erro de <strong>E/S</strong> que possibilita ao programador desabilitar a checagem automática de erros de <strong>E/S</strong> pelo <strong>Turbo Pascal,</strong> transferindo assim a responsabilidade para o programador sobre o tratamento de erros de <strong>E/S</strong>.</p>
<p style="text-align: justify;">As diretivas de compilação são ativadas através de comentários <span style="color: #339966;"><strong>(*$ *)</strong></span> ou <span style="color: #339966;"><strong>{$ }</strong> </span>sendo que a diretiva inicia com o caractere <strong>$</strong> seguida pela representação da diretiva desejada. Algumas diretivas podem ser ativadas ou desativadas através do <strong>+ (ativa)</strong> ou<strong> &#8211; (desativa)</strong> e tem escopo local ou global.</p>
<p style="text-align: justify;">No caso da diretiva de checagem e erro de <strong>E/S</strong>, a diretiva é a <strong>{$I} </strong>(<strong>I/O</strong> c<em>hecking</em>) que tem seu estado <em>default</em> ativado <strong>{$I+},</strong> ou seja, qualquer erro de <strong>E/S</strong> que aconteça em seu programa, o <strong>Turbo Pascal</strong> <em>automagicamente</em> irá adicionar um código de checagem de erro para cada operação de <strong>E/S</strong> e caso ocorra um erro de <strong>E/S</strong>, o sistema operacional será acionado informando o erro ocorrido, o que muitas vezes chega a ser um inconveniente pois as mensagens apresentadas pelo sistema operacional nem sempre são &#8220;esteticamente&#8221; conveninentes ao usuário final. Quem não se lembra das mensagens do <strong>MSDOS/MSX-DOS</strong>, <strong>(A)bort, (R)etry, (I)gnore</strong> ????</p>
<p style="text-align: justify;">Pois bem, para contornar inconvenientes como esse e dar maior poder ao desenvolvedor para controlar as excessões de <strong>E/S</strong>, utilizamos a diretiva <strong>{$I}</strong>, que é uma diretiva local, ou seja, podemos ativar e desativá-la a qualquer momento durante o fluxo de execução do software, conforme pode ser visto no programa abaixo.</p>
<pre class="brush: pascal">(** Sample code to show the Turbo Pascal directive for I/O control
  * by the programmer;
  * This sample copy a complete input file to an output file specified
  * by the user;
  * by PopolonY2k 2012;
  *) 
Program Test_IO_Compiler_Directive;

Type TString = String[255];
Const ctMaxBuffer : Integer = 1024; { Uses 1024 bytes copy buffer }

Var
      fpFileIn,
      fpFileOut  : File;
      strLine,
      strFileIn,
      strFileOut : TString;
      nRecs     : Integer;
      aBuffer   : Array[0..ctMaxBuffer] Of Byte;

Begin
  WriteLn( 'Please type the input file name' );
  ReadLn( strFileIn );
  WriteLn( 'Please type the output file name' );
  ReadLn( strFileOut );

  Assign( fpFileIn, strFileIn );   { Assign the input and output   }
  Assign( fpFileOut, strFileOut ); { file names to the File handle }
  {$I-}
  Reset( fpFileIn );               { variables                     }
  {$I+}

  If( IOResult &lt;&gt; 0 )  Then
  Begin
    WriteLn( 'Error to open the input file' );
    Halt;
  End
  Else
  Begin
    {$I-}
    Rewrite( fpFileOut );
    {$I+}
    If( IOResult &lt;&gt; 0 )  Then
    Begin
      WriteLn( 'Error to open the output file' );
      Halt;
    End;
  End;

  { 
    Start reading the input file until reach the end of file, when
    the BlockRead return zero for the number of records loaded.
  }
  Repeat
    BlockRead( fpFileIn, aBuffer, SizeOf( aBuffer ), nRecs );
    BlockWrite( fpFileOut, aBuffer, nRecs );
  Until( nRecs = 0 );

  Close( fpFileIn );
  Close( fpFileOut );
End.</pre>
<p style="text-align: justify;">No código acima podemos ver que <strong><span style="color: #339966;">{$I-}</span></strong> e <strong><span style="color: #339966;">{$I+}</span></strong> delimitam o escopo de onde inicia e onde termina a checagem de erro de <strong>E/S</strong>, sendo que após isso chamamos a função <strong>IOResult</strong> que nos retorna o ultimo erro ocorrido na ultima operação de <strong>E/S</strong>, sendo que qualquer valor diferente de zero sinaliza o código do ultimo erro ocorrido na ultima operação de <strong>E/S.</strong></p>
<p style="text-align: justify;">Dessa forma podemos fazer um controle minucioso sobre cada operação de <strong>E/S</strong>, retornando erros mais detalhados ou até permitindo que o software tome decisões sobre a melhor ação de contorno a ser executada para se resolver a excessão.</p>
<p style="text-align: justify;">Finalizando o esse <em>post</em> percebemos que <strong>Turbo Pascal</strong> possui um rico conjunto de rotinas para manipulação de <strong>E/S</strong>, permitindo assim que <em>softwares</em> modernos e com alto grau de controle sejam construídos para plataformas que suportam esse poderoso compilador, o que é verdadeiro para a plataformas baseadas em <strong>CP/M80</strong>, como o caso do <strong>MSX</strong>.</p>
<p style="text-align: justify;"><strong>Agradecimento</strong></p>
<p style="text-align: justify;">Aproveito para deixar aqui meu agradecimento a <strong>Nirvardo Cavalcante</strong>, membro atuante na comunidade de <strong>MSX</strong> nacional, pelo farto material sobre <strong>Turbo Pascal</strong> enviado a mim, incluindo código fonte.</p>
<p style="text-align: justify;">Obrigado e, sim, em breve faremos aquele <strong>universal music player</strong> em <strong>Pascal</strong>. <img src='http://www.popolony2k.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: justify;"><strong>[]&#8216;s</strong><br />
<strong>PopolonY2k</strong></p>
<p style="text-align: justify;"><strong>Referência na internet</strong></p>
<p style="text-align: justify;"><em>Wireless network (Wikipedia)</em><br />
<a href="http://en.wikipedia.org/wiki/Wireless_network">http://en.wikipedia.org/wiki/Wireless_network</a></p>
<p style="text-align: justify;"><em>Ethernet (Wikipedia)</em><br />
<a href="http://en.wikipedia.org/wiki/Ethernet">http://en.wikipedia.org/wiki/Ethernet</a></p>
<p style="text-align: justify;"><em>MSX-DOS (Wikipedia)</em><br />
<a href="http://en.wikipedia.org/wiki/MSX-DOS">http://en.wikipedia.org/wiki/MSX-DOS</a></p>
<p style="text-align: justify;"><em>RS-232 (Wikipedia)</em><br />
<a href="http://en.wikipedia.org/wiki/Rs232">http://en.wikipedia.org/wiki/Rs232</a></p>
<p style="text-align: justify;"><em>Device Driver (Wikipedia)</em><br />
<a href="http://en.wikipedia.org/wiki/Device_driver">http://en.wikipedia.org/wiki/Device_driver</a></p>
<p style="text-align: justify;"><em>Torre de Babel (Wikipedia)</em><br />
<a href="http://pt.wikipedia.org/wiki/Torre_de_Babel">http://pt.wikipedia.org/wiki/Torre_de_Babel</a></p>
<p style="text-align: justify;"><em>Caracteres imprimíveis (Wikipedia)</em><br />
<a href="http://pt.wikipedia.org/wiki/ASCII#Caracteres_imprim.C3.ADveis">http://pt.wikipedia.org/wiki/ASCII#Caracteres_imprim.C3.ADveis</a></p>
<p style="text-align: justify;"><em>Caracteres não imprimíveis, ou caracteres de controle (Wikipedia)</em><br />
<a href="http://pt.wikipedia.org/wiki/ASCII#Caracteres_n.C3.A3o_imprim.C3.ADveis">http://pt.wikipedia.org/wiki/ASCII#Caracteres_n.C3.A3o_imprim.C3.ADveis</a></p>
<p style="text-align: justify;"><em>ANSI C (Wikipedia)</em><br />
<a href="http://en.wikipedia.org/wiki/ANSI_C">http://en.wikipedia.org/wiki/ANSI_C</a></p>
<p style="text-align: justify;"><em>Protótipo de função (Wikipedia)</em><br />
<a href="http://pt.wikipedia.org/wiki/Prot%C3%B3tipo_de_fun%C3%A7%C3%A3o">http://pt.wikipedia.org/wiki/Prot%C3%B3tipo_de_fun%C3%A7%C3%A3o</a></p>
<p style="text-align: justify;"><em>Turbo Pascal Forever &#8211; Begin (PopolonY2k Rulezz)</em><br />
<a href="http://www.popolony2k.com.br/?p=1694">http://www.popolony2k.com.br/?p=1694</a></p>
<p style="text-align: justify;"><em>Pokemón ( Wikipedia)</em><br />
<a href="http://pt.wikipedia.org/wiki/Pok%C3%A9mon">http://pt.wikipedia.org/wiki/Pok%C3%A9mon</a></p>
<p style="text-align: justify;"><em>Lei de Murphy (Wikipedia)</em><br />
<a href="http://pt.wikipedia.org/wiki/Lei_de_Murphy">http://pt.wikipedia.org/wiki/Lei_de_Murphy</a></p>
<p style="text-align: justify;"><em>Turbo Pascal compiler directives (David I Embarcadero Blog)</em><br />
<a href="http://blogs.embarcadero.com/davidi/2008/11/16/39118/">http://blogs.embarcadero.com/davidi/2008/11/16/39118/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.popolony2k.com.br/?feed=rss2&#038;p=1921</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grupo de desenvolvimento de software e coisas legais para MSX</title>
		<link>http://www.popolony2k.com.br/?p=2017</link>
		<comments>http://www.popolony2k.com.br/?p=2017#comments</comments>
		<pubDate>Sun, 08 Jul 2012 21:13:31 +0000</pubDate>
		<dc:creator>@popolony2k</dc:creator>
				<category><![CDATA[New old software]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[void pointer]]></category>

		<guid isPermaLink="false">http://www.popolony2k.com.br/?p=2017</guid>
		<description><![CDATA[Após um bom tempo conversando com diversos amigos de listas de discussão para MSX, principalmente na MSX-All e MSXBR-L, finalmente coloquei em prática a idéia de criar uma lista específica para o desenvolvimento de software para MSX e outras plataformas old skool. Em conversa com o amigo Nivardo Cavalcanti, principal incentivador da nova lista, chegamos [...]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">Após um bom tempo conversando com diversos amigos de listas de discussão para <strong>MSX</strong>, principalmente na <a href="http://br.groups.yahoo.com/group/MSX-All/" target="_blank">MSX-All</a> e <a href="http://listas.amplus.com.br/mailman/listinfo/msxbr-l" target="_blank">MSXBR-L</a>, finalmente coloquei em prática a idéia de criar uma lista específica para o desenvolvimento de <em>software</em> para <strong>MSX</strong> e outras plataformas <em>old skool</em>.</p>
<p style="text-align: justify;"><a href="http://www.popolony2k.com.br/wp-content/uploads/2012/07/MSX_logo.png"><img class="aligncenter size-medium wp-image-2019" title="MSX trademark" src="http://www.popolony2k.com.br/wp-content/uploads/2012/07/MSX_logo-300x124.png" alt="MSX trademark" width="300" height="124" /></a></p>
<p style="text-align: justify;">Em conversa com o amigo Nivardo Cavalcanti, principal incentivador da nova lista, chegamos a uma idéia de que a mesma deveria tratar basicamente de desenvolvimento de novos projetos de software para o <strong>MSX</strong>, principalmente porque hoje temos, finalmente no Brasil, muita coisa legal em hardware, como placas de rede baseadas em <a href="http://www.msx.org/articles/obsonet" target="_blank">Obsonet</a>, placas de som baseadas em <a href="http://en.wikipedia.org/wiki/Moonsound" target="_blank">Moonsound</a>, placas gráficas baseadas na <a href="http://msxbanzai.tni.nl/v9990/manual.html" target="_blank">V9990</a>, <a href="http://www.msx.ch/sunformsx/" target="_blank">IDE Sunrise-like</a> e apesar de tudo isso, a quantidade de software para todas essas tecnologias é quase nula.</p>
<p style="text-align: justify;">Então a idéia da lista é estudar toda a camada de software embutida em cada uma dessas tecnologias, documentar e difundir o conhecimento sobre esses e outros novos hardwares e por ultimo criar peças de software, ou bibliotecas, para controlar cada um desses dispositivos, possibilitando assim a criação de novos softwares, do mesmo nível dos existentes em outras plataformas mais modernas.</p>
<p style="text-align: justify;">Com isso, na data de hoje, estou anunciando a criação do <strong>Grupo de desenvolvimento de software e coisas legais para MSX e afins</strong>, que está no <a href="http://groups.google.com/" target="_blank">Google Groups</a> no endereço abaixo:</p>
<p style="text-align: justify;"><a href="http://groups.google.com/group/gdmsx" target="_blank">http://groups.google.com/group/gdmsx</a></p>
<p style="text-align: justify;">Espero a visita e inscrição de todos os que são entusiastas da tecnologia <strong>MSX</strong> ou qualquer outra plataforma retrô, ou até mesmo aqueles que gostam de <em>hacking</em>, <a href="http://pt.wikipedia.org/wiki/Arduino" target="_blank">arduino</a> ou aos que são simples entusiastas de tecnologia em geral, sintam-se em casa.</p>
<p style="text-align: justify;"><a href="http://www.popolony2k.com.br/wp-content/uploads/2012/07/Arduino_Uno_logo.png"><img class="aligncenter size-full wp-image-2021" title="Arduino Uno logo" src="http://www.popolony2k.com.br/wp-content/uploads/2012/07/Arduino_Uno_logo.png" alt="Arduino Uno logo" width="170" height="116" /></a></p>
<p style="text-align: justify;">
<p style="text-align: justify;">Qualquer discussão sobre tecnologias, impossíveis ou não, podem e devem ser fomentadas no grupo. Em nosso grupo, nunca peça desculpas por alguma pergunta que você acredita ser simples ou idiota demais, pois certamente não é simples nem idiota, ou seja, toda pergunta é válida e importante, pois muitas vezes perdemos a oportunidade de desenvolver excelentes idéias por medo de expô-las.</p>
<p style="text-align: justify;">Bom, é isso, vida longa ao novo <strong>Grupo de desenvolvimento de software e coisas  legais para MSX e afins</strong>.</p>
<p style="text-align: justify;"><strong>[]&#8216;s</strong><br />
<strong>PopolonY2k </strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.popolony2k.com.br/?feed=rss2&#038;p=2017</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
