tag:blogger.com,1999:blog-343148592024-03-14T06:44:18.164-03:00HotBitProjetos para computadores MSXDanjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.comBlogger211125tag:blogger.com,1999:blog-34314859.post-87779005385628746132023-04-05T23:39:00.002-03:002023-04-05T23:39:32.353-03:00Adaptador isolado para backup de fitas cassete no PC<p> Segue o circuito que montei, usando um transformador 1:1 </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDxvYtJnuOBTtHHv19L6sP9slV4ihJe44zhk0LxuVUFP3D-PsCYuLqNnlgYepSMZd5KTLh0Fcli4xYJR0HDo6U1we9uPSoTQW2uIymxCiQMMpPElR6HUfUhpis1VhIxGxhPJyI26v-57X4cnEy98fZ_0A-8Q_N_c5s9ZAPGKfD8dkgO6u_0w/s617/Adaptador.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="138" data-original-width="617" height="90" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDxvYtJnuOBTtHHv19L6sP9slV4ihJe44zhk0LxuVUFP3D-PsCYuLqNnlgYepSMZd5KTLh0Fcli4xYJR0HDo6U1we9uPSoTQW2uIymxCiQMMpPElR6HUfUhpis1VhIxGxhPJyI26v-57X4cnEy98fZ_0A-8Q_N_c5s9ZAPGKfD8dkgO6u_0w/w400-h90/Adaptador.png" width="400" /></a></div><br /><p></p><p>E uma foto do adaptador montado. Os jumpers foram mais pra teste mesmo. Numa próxima montagem vou deixar apenas o transformador e os cabos.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB865sM9Q-3dUg30lFuMY4_q8-LEv15N9Fh-405a8aX7OcUpIm3Py_nv0RqpZRGluyRFsxGn_XcvNVxKSbbidhfAZRhXEbpgOiNkTzxtby1SXONoqFoixhAc0TFEpqlCT0bCyiXxx_ocHJD-oRUp7pZZVCwMXdUBQpMfagpuotkWNn9gl-Mg/s800/adaptador.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="369" data-original-width="800" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB865sM9Q-3dUg30lFuMY4_q8-LEv15N9Fh-405a8aX7OcUpIm3Py_nv0RqpZRGluyRFsxGn_XcvNVxKSbbidhfAZRhXEbpgOiNkTzxtby1SXONoqFoixhAc0TFEpqlCT0bCyiXxx_ocHJD-oRUp7pZZVCwMXdUBQpMfagpuotkWNn9gl-Mg/w400-h185/adaptador.jpg" width="400" /></a></div><br /><p><br /></p>Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com0tag:blogger.com,1999:blog-34314859.post-35105963417680207992021-11-06T16:44:00.004-03:002021-11-06T16:44:28.566-03:00Recriação da interface FA-32<p>E segue a montagem da alternativa à interface FA-32. A placa foi fabricada pelo método da transferência de Toner.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-PcqcpsMCAVc/YYbad5SxRzI/AAAAAAAAG7w/9Zea5HaUbQUeFrfA-pm2Y7_PeRwb7h3FQCLcBGAsYHQ/s1024/IMG_20211030_181255157.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="300" src="https://1.bp.blogspot.com/-PcqcpsMCAVc/YYbad5SxRzI/AAAAAAAAG7w/9Zea5HaUbQUeFrfA-pm2Y7_PeRwb7h3FQCLcBGAsYHQ/w400-h300/IMG_20211030_181255157.jpg" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-rxiBRBZ9muY/YYbahsYKvGI/AAAAAAAAG70/P_ey16ZAh7kcfHj3BTSrFnJ2DM5Em_0VgCLcBGAsYHQ/s1024/IMG_20211101_131045603.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="300" src="https://1.bp.blogspot.com/-rxiBRBZ9muY/YYbahsYKvGI/AAAAAAAAG70/P_ey16ZAh7kcfHj3BTSrFnJ2DM5Em_0VgCLcBGAsYHQ/w400-h300/IMG_20211101_131045603.png" width="400" /></a></div><br />E iniciei a montagem. Ainda estou esperando alguns componentes chegarem.<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-n3PP0EvRoyU/YYba6k6WelI/AAAAAAAAG8Q/SJB9157fAhAmvWIU2VmAu42JFsDl6IaVgCLcBGAsYHQ/s1024/IMG_20211106_132849872_HDR.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="300" src="https://1.bp.blogspot.com/-n3PP0EvRoyU/YYba6k6WelI/AAAAAAAAG8Q/SJB9157fAhAmvWIU2VmAu42JFsDl6IaVgCLcBGAsYHQ/w400-h300/IMG_20211106_132849872_HDR.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-gzJGFIbEPpU/YYba8rqpIbI/AAAAAAAAG8U/FJ6uNTccW_EFcqMiZRJUllBlvezMW_k0ACLcBGAsYHQ/s1024/IMG_20211106_132907252.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="300" src="https://1.bp.blogspot.com/-gzJGFIbEPpU/YYba8rqpIbI/AAAAAAAAG8U/FJ6uNTccW_EFcqMiZRJUllBlvezMW_k0ACLcBGAsYHQ/w400-h300/IMG_20211106_132907252.png" width="400" /></a></div><br /><p><br /></p><p> <br /></p>Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com1tag:blogger.com,1999:blog-34314859.post-26184675015236354542021-10-19T23:57:00.003-03:002021-11-06T16:02:55.761-03:00Esquema do adaptador FA-32<p> A partir das fotos encontradas no site do <a href="http://basshp.blogspot.com/2015/03/casio-fa-32-clone-interface-de-cassete.html">B@ss</a> foi possível levantar o esquema do adaptador de cassete <a href="https://www.msx.org/wiki/Casio_FA-32">FA-32</a> usado nos micros da Casio MX-10, MX-101 e PV-7.</p><p>O primeiro passo foi sobrepor a imagem das trilhas sobre a foto da placa.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-OYk1u34WKfY/YW-EqdlSIQI/AAAAAAAAG3M/fH56G7HHNFUU4_ADOh2aIgOodXO1WqEqwCLcBGAsYHQ/s800/BOARD.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="613" data-original-width="800" height="490" src="https://1.bp.blogspot.com/-OYk1u34WKfY/YW-EqdlSIQI/AAAAAAAAG3M/fH56G7HHNFUU4_ADOh2aIgOodXO1WqEqwCLcBGAsYHQ/w640-h490/BOARD.jpg" width="640" /></a></div><br /><p>Em seguida foi criado um projeto no Eagle, e todos os componentes foram dispostos nas posições semelhantes às da foto da placa.</p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-kZpSer66SQU/YW-E7in4_HI/AAAAAAAAG3U/AFp_d3lFXpU8SjsixXiY24ryjLPbiR9mwCLcBGAsYHQ/s902/placa.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="662" data-original-width="902" height="470" src="https://1.bp.blogspot.com/-kZpSer66SQU/YW-E7in4_HI/AAAAAAAAG3U/AFp_d3lFXpU8SjsixXiY24ryjLPbiR9mwCLcBGAsYHQ/w640-h470/placa.png" width="640" /></a></div><br /><p></p><p>Comparando as imagens foi possível estabelecer as ligações dos diversos componentes e assim levantar o circuito.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-XlR7GPFk0os/YW-FK_4YdiI/AAAAAAAAG3c/rOCj1jSzTwsIaIThn2ayN0glBra7cPHRwCLcBGAsYHQ/s1545/FA32.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1065" data-original-width="1545" height="442" src="https://1.bp.blogspot.com/-XlR7GPFk0os/YW-FK_4YdiI/AAAAAAAAG3c/rOCj1jSzTwsIaIThn2ayN0glBra7cPHRwCLcBGAsYHQ/w640-h442/FA32.png" width="640" /></a></div><p></p><p>O diagrama está disponível em formato Eagle e <a href="https://raw.githubusercontent.com/Danjovic/MSX/master/FA-32/C3427-1.pdf">PDF</a> no meu repositório do <a href="https://github.com/Danjovic/MSX/tree/master/FA-32">GitHub</a></p><p> </p><p>Sugestão de Layout em face simples com conector DIN e Jacks P2:</p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-KnmOlvvWx0c/YYbRRynjzyI/AAAAAAAAG7k/wvvOw-lFED8xdLzEssLrLa5_Qwk5K-tNgCLcBGAsYHQ/s856/FA-32BR_board_view.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="784" data-original-width="856" height="586" src="https://1.bp.blogspot.com/-KnmOlvvWx0c/YYbRRynjzyI/AAAAAAAAG7k/wvvOw-lFED8xdLzEssLrLa5_Qwk5K-tNgCLcBGAsYHQ/w640-h586/FA-32BR_board_view.png" width="640" /></a></div><br /><br /><p></p><br />A placa é para montagem em caixas<a href="http://www.hammondmfg.com/pdf/1593J.pdf"> Hammond 1593J</a> que mede aproximadamente 66 x 66 x 24mm<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-fPAg7TXrqcY/YXH929XsjpI/AAAAAAAAG4I/9owqHtB7u78_7qPpUxp7h410V8dw6zFlgCLcBGAsYHQ/s640/1593j.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="640" data-original-width="640" height="640" src="https://1.bp.blogspot.com/-fPAg7TXrqcY/YXH929XsjpI/AAAAAAAAG4I/9owqHtB7u78_7qPpUxp7h410V8dw6zFlgCLcBGAsYHQ/w640-h640/1593j.jpg" width="640" /></a></div><br /><p><br /></p><p><br /></p><p><br /></p>Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com0tag:blogger.com,1999:blog-34314859.post-68779073628784847182021-07-09T12:36:00.002-03:002021-07-09T12:36:37.459-03:00Adaptador de Teclado para o Expert.Embora o Gradiente Expert ainda seja relativamente fácil de encontrar, é raro achar um com o teclado, e mais raro ainda encontrar o conjunto com um bom preço.<br>
Para resolver essa situação e ajudar trazer essas máquinas de volta à vida eu criei um adaptador de teclados PS/2 que também funciona com teclados USB que possuam o modo de compatibilidade com PS/2. <br>
<div class="separator" style="clear: both;"><a href="https://cdn.hackaday.io/images/9778761625840388990.jpg" style="display: block; padding: 1em 0; text-align: center; "><img alt="" border="0" width="320" data-original-height="600" data-original-width="800" src="https://cdn.hackaday.io/images/9778761625840388990.jpg"/></a></div>
O projeto é completamente aberto e está hospedado no <a href="https://github.com/Danjovic/MSX/tree/master/EXPS2">Github</a>.
<br>
Mais informações estão disponíveis na minha página do <a href="https://hackaday.io/project/178358-exps2">hackaday.io</a>
Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com0tag:blogger.com,1999:blog-34314859.post-38001312589219909912020-12-07T19:56:00.002-03:002020-12-07T20:11:12.717-03:00Manual do Hot Asm<p> Digitalização de uma cópia da cópia do manual do Hot Asm (Hot Assembler). </p><p>A data que tenho anotada no rodapé da encadernação improvisada é de 9/11/1987!</p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-pGWM0eDZVQ0/X862fwgS8zI/AAAAAAAAGpw/eMkWugYRWrcPaBf74aKiA-vruMotLLnBACLcBGAsYHQ/s408/coverSimple.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="408" data-original-width="320" height="320" src="https://1.bp.blogspot.com/-pGWM0eDZVQ0/X862fwgS8zI/AAAAAAAAGpw/eMkWugYRWrcPaBf74aKiA-vruMotLLnBACLcBGAsYHQ/s320/coverSimple.jpg" /></a></div>Arquivo em PDF disponível no <a href="https://www.dropbox.com/sh/vjutv2mguqdy1sy/AAAdlxQZxyg_6szGsxLCj5SHa?dl=0">Dropbox </a><br /><p></p><br />Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com0tag:blogger.com,1999:blog-34314859.post-25812097386684300152019-06-14T00:44:00.000-03:002019-06-14T00:44:39.933-03:00Atualizando um post antigo sobre o Paddle VausQuando analisei há um tempo atrás a rotina de leitura do Paddle Vaus pelo jogo Arkanoid deixei passar batido um detalhe: O bit mais significativo da leitura já está na entrada "up" assim que a termina a conversão/contagem do circuito do paddle <br />
<br />
Os 9 bits são lidos da seguinte maneira:<br />
<br />
<ul>
<li>Lê registro 14 do PSG e salva em H </li>
</ul>
<br />
<ul>
<li>Repete 8 vezes:</li>
<ul>
<li>gera um pulso de clock para deslocar 1 bit</li>
<li>lê o bit e salva em C</li>
</ul>
</ul>
<ul>
<li>Salva o conteúdo de C para o endereço 0xEOC1</li>
<li>Isola o bit 0 de H, que é o bit mais significativo da leitura e salva em 0xE0C2</li>
</ul>
<span style="font-family: "Courier New", Courier, monospace;">...</span><br />
<span style="font-family: "Courier New", Courier, monospace;">42fc 3e0e ld a,0eh ; seleciona registro 14 do PSG<br />42fe d3a0 out (0a0h),a<br />4300 dba2 in a,(0a2h) ; realiza primeira leitura<br />4302 67 ld h,a ; bit mais significativo já esta na saida<br />4303 0608 ld b,08h ; 8 bits<br />4305 0e00 ld c,00h<br />4307 1e00 ld e,00h<br />4309 3e0f ld a,0fh<br />430b d3a0 out (0a0h),a<br />430d 3e1e ld a,1eh<br />430f d3a1 out (0a1h),a ; clock low<br />4311 3e1f ld a,1fh<br />4313 d3a1 out (0a1h),a ; clock high<br />4315 3e0e ld a,0eh<br />4317 d3a0 out (0a0h),a<br />4319 dba2 in a,(0a2h)<br />431b 5f ld e,a<br />431c cb3f srl a ; lê bit<br />431e cb11 rl c ; armazena em C<br />4320 10e7 djnz 4309h ; próximo bit<br />4322 79 ld a,c<br />4323 32c1e0 ld (0e0c1h),a ; armazena bits menos significativos<br />4326 7c ld a,h ; pega primeira leitura<br />4327 e601 and 01h ; isola bit 0 (up)<br />4329 32c2e0 ld (0e0c2h),a ; armazena bit mais significativo<br /> </span><br />
<span style="font-family: "Courier New", Courier, monospace;">432c 3e0f ld a,0fh ; gera um pulso para iniciar<br />432e d3a0 out (0a0h),a ; a próxima conversão/contagem<br />4330 3e1f ld a,1fh<br />4332 d3a1 out (0a1h),a ; pino8 high<br />4334 3e0f ld a,0fh<br />4336 d3a1 out (0a1h),a ; pino8 low<br />4338 3e1f ld a,1fh<br />433a d3a1 out (0a1h),a ; pino8 high<br />433c 3e0e ld a,0eh<br />433e d3a0 out (0a0h),a<br />4340 dba2 in a,(0a2h)<br />4342 5f ld e,a<br />4343 21c4e0 ld hl,0e0c4h<br />4346 7e ld a,(hl)<br />4347 73 ld (hl),e<br />4348 e60f and 0fh<br />434a a3 and e<br />434b ab xor e<br />434c 32c5e0 ld (0e0c5h),a<br />434f 47 ld b,a<br />4350 3a0be0 ld a,(0e00bh)<br />4353 b7 or a<br />4354 c0 ret nz<br /><br />4355 cb48 bit 1,b ; Testa botão de tiro<br />4357 c8 ret z ; bit 1 -> DOWN do reg 14<br /><br />4358 3a0ae0 ld a,(0e00ah)<br />435b b7 or a<br />435c ca7043 jp z,4370h<br />435f af xor a<br />4360 320ae0 ld (0e00ah),a<br />4363 213ce5 ld hl,0e53ch<br />4366 113de5 ld de,0e53dh<br />4369 3600 ld (hl),00h<br />436b 010700 ld bc,0007h<br />436e edb0 ldir <br />4370 3e01 ld a,01h<br />4372 320ce0 ld (0e00ch),a<br />4375 c9 ret </span><br />
<span style="font-family: "Courier New", Courier, monospace;">... </span><br />
<br />
<br />
<br />
<br />
<br />
<br />Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com0tag:blogger.com,1999:blog-34314859.post-16041960682732933882019-06-13T01:46:00.001-03:002019-06-13T01:46:26.039-03:00Diferentes versões de ArkanoidEu montei um clone do controle de Arkanoid e ao testar notei que o jogo não reconhecia o controle. Achei estranho pois me lembrava de ter visto o código e até "desassemblado" um trecho de uma ROM que gerava os sinais para ler o controle da Taito.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-YhDZOujLXpU/XQHUsbneoMI/AAAAAAAAGXw/8hTgI5Fbb2IBgN8b7wm87F1VN6eFy23iQCLcBGAs/s1600/pad.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="728" data-original-width="1296" height="223" src="https://1.bp.blogspot.com/-YhDZOujLXpU/XQHUsbneoMI/AAAAAAAAGXw/8hTgI5Fbb2IBgN8b7wm87F1VN6eFy23iQCLcBGAs/s400/pad.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-family: "Courier New", Courier, monospace;"><b><span style="font-family: inherit;">Clone do Paddle Arkanoid da TAITO</span></b></span></td></tr>
</tbody></table>
<br />Pesquisando em alguns sites achei uma versão cujo binário era realmente era diferente, e que funcionou com o Paddle que montei.<br />
<br />
<b><span style="font-family: "Courier New", Courier, monospace;">Arkanoid 1 (1986) (Taito) (J).rom</span></b><br /><br />Comparando com mais detalhes as duas versões dá pra ver que a ROM em que o Paddle não funciona chama apenas a rotina de leitura de teclado (0x425b - CD 0141H) ao passo em que a outra ROM chama uma função no endereço 0x42FD que é justamente responsável por gerar os sinais e ler os dados vindos do paddle (vide <a href="http://hotbit.blogspot.com/2007/10/paddle-do-nes-no-arkanoid-do-msx.html">artigo anterior</a>)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-jrZsBQI6FXA/XQHN0uaC92I/AAAAAAAAGWw/5yQIldVeT-kwTALpEjQOmkkv7KrEPARGQCLcBGAs/s1600/CD0141xCD42fd.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="408" data-original-width="579" height="225" src="https://1.bp.blogspot.com/-jrZsBQI6FXA/XQHN0uaC92I/AAAAAAAAGWw/5yQIldVeT-kwTALpEjQOmkkv7KrEPARGQCLcBGAs/s320/CD0141xCD42fd.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-M3-zwV1t_LE/XQHN2fnpYhI/AAAAAAAAGXE/cUBerCtLLlI_J_j-O-wogDXYXp-d4sUuwCLcBGAs/s1600/rotina%2Bleitura%2Bpaddle.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="408" data-original-width="579" height="225" src="https://1.bp.blogspot.com/-M3-zwV1t_LE/XQHN2fnpYhI/AAAAAAAAGXE/cUBerCtLLlI_J_j-O-wogDXYXp-d4sUuwCLcBGAs/s320/rotina%2Bleitura%2Bpaddle.png" width="320" /></a></div>
<br /><br />Além disso existe uma diferença "visual" entre as ROMS. A que lê o Paddle coloca na tela a mensagem TAITO CORPORATION. Já a ROM que não lê o paddle escreve TAITO IMAGINE LTD.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-8FVi3xElGtQ/XQHN1r1N04I/AAAAAAAAGW8/ZuHqNK2afXgJVeTX5iiASmbN6kVUcj0QACLcBGAs/s1600/TaitoCorpxImagine.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="408" data-original-width="579" height="225" src="https://1.bp.blogspot.com/-8FVi3xElGtQ/XQHN1r1N04I/AAAAAAAAGW8/ZuHqNK2afXgJVeTX5iiASmbN6kVUcj0QACLcBGAs/s320/TaitoCorpxImagine.png" width="320" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-tCilBcQ9JFo/XQHP9Kr_DlI/AAAAAAAAGXc/zKNUPeyjV-gRY957XKaYDA8k6TSRw53ewCLcBGAs/s1600/out.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="505" data-original-width="1284" height="156" src="https://1.bp.blogspot.com/-tCilBcQ9JFo/XQHP9Kr_DlI/AAAAAAAAGXc/zKNUPeyjV-gRY957XKaYDA8k6TSRw53ewCLcBGAs/s400/out.png" width="400" /></a></div>
<br />
A última difereça é o último byte do arquivo, que em uma versão tem o valor 0x00 e na outra 0x3F<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/--ubaiJ6Q37g/XQHQE-oQ63I/AAAAAAAAGXg/3iLJTwf7UlIemfzoaNuaWgJUf2ZKK_sUgCLcBGAs/s1600/Ultimo%2Bbyte.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="408" data-original-width="579" height="225" src="https://1.bp.blogspot.com/--ubaiJ6Q37g/XQHQE-oQ63I/AAAAAAAAGXg/3iLJTwf7UlIemfzoaNuaWgJUf2ZKK_sUgCLcBGAs/s320/Ultimo%2Bbyte.png" width="320" /></a></div>
Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com2tag:blogger.com,1999:blog-34314859.post-51223256216318670792019-06-08T20:00:00.001-03:002019-06-08T20:00:31.908-03:00Diagrama redesenhado do Modulador de RF do HotbitRedesenhei o diagrama do modulador de RF do Hotbit. Aproveitei o corrigi o diagrama da placa principal pois a alimentação que vai para o conector do modulador de RF é de 12Volts em vez de 5 Volts. <br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-uLdNACICjIE/XPw9-Qg7KLI/AAAAAAAAGWk/btmQ9fFXcIgUcvl77F962E6VsmzVamP-gCLcBGAs/s1600/esquema%2Brf%2Bhotbit.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="538" data-original-width="800" height="268" src="https://1.bp.blogspot.com/-uLdNACICjIE/XPw9-Qg7KLI/AAAAAAAAGWk/btmQ9fFXcIgUcvl77F962E6VsmzVamP-gCLcBGAs/s400/esquema%2Brf%2Bhotbit.jpg" width="400" /></a></div>
<br />
Arquivos disponíveis no <a href="https://github.com/Danjovic/MSX/tree/master/Schematics/HOTBIT%20HB8000">github</a><br />
<br />Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com0tag:blogger.com,1999:blog-34314859.post-51988245905880489422018-06-06T21:08:00.002-03:002018-06-06T21:08:52.418-03:00BGM player Subrotina em assembler para ser usada em jogos ou demos. Permite tocar uma trilha sonora de tons simples que pode ser gerada a partir de arquivos padrão RTTL.<br /><br />A subrotina utiliza formato próprio, composto de 3 bytes, contendo duração da nota (1byte) e sua "frequência" (2 bytes).<br /><br /><span style="color: cyan;"><span style="font-family: "Courier New", Courier, monospace;">duração : [ 1 byte ] 1..255 <br />"frequencia" : [---lsb--][0000-msb] 0..4095 </span></span><br /><br /><br />A subrotina não é blocante e deve ser chamada a cada interrupção do VDP. Por isso a duração corresponde a intervalos de tempo múltiplos de 16.67ms (1/60Hz) ou de 20ms (1/50Hz) conforme o padrão da máquina. <br /><br />A "frequência" corresponde ao divisor de clock que deve ser carregado nos registros de divisão do PSG (12 bits). <br /><br />Uma nota com duração igual a 0 (zero) corresponde a um comando, dessa forma <br /><br /><span style="color: cyan;"><span style="font-family: "Courier New", Courier, monospace;">duração: [ 0 ] Comando <br /> [ccccrrrr][dddddddd] </span></span><br />
<span style="color: cyan;"><span style="font-family: "Courier New", Courier, monospace;"> cccc comando 0..15 </span></span><br />
<span style="color: cyan;"><span style="font-family: "Courier New", Courier, monospace;"> rrrr argumento 0..15</span></span><br />
<span style="color: cyan;"><span style="font-family: "Courier New", Courier, monospace;"> dddddddd dado 0..255</span></span><br /><br />Até o momento três comandos estão definidos:<br />
<span style="color: cyan;"><br /><span style="font-family: "Courier New", Courier, monospace;">cccc = 0, : Reinicializa música<br />rrrr, dddddddd sem uso<br /> <br />cccc = 1, : Escreve num registro do PSG<br />rrrr = registro [0..15] <br />dddddddd = dado [0..255] valor a ser escrito.</span></span><br />
<br />
<span style="color: cyan;"><span style="font-family: "Courier New", Courier, monospace;"><span style="font-family: "Courier New", Courier, monospace;">cccc = 2, : Escreve num registro do PSG </span></span></span><br />
<span style="color: cyan;"><span style="font-family: "Courier New", Courier, monospace;"><span style="font-family: "Courier New", Courier, monospace;"> e interpreta proximo comando ainda no mesm </span></span></span><br />
<span style="font-family: "Courier New", Courier, monospace;"><span style="color: cyan;"><span style="font-family: "Courier New", Courier, monospace;"> intervalo de tmepo<br />rrrr = registro [0..15] <br />dddddddd = dado [0..255] valor a ser escrito.</span></span> </span><br /> <br />A geração das músicas a partir de "Ringtones" no formato RTTL pode ser feita utilizando um script python que permite inclusive que as músicas sejam ouvidas (pelo menos na versão windows)<br /><br /><b>Alguns detalhes: </b><br />Um valor de divisor para geração da frequência igual a 0 faz com que o canal do PSG fique mudo e isso é usado para gerar a pausa. Em nenhuma das referências que consultei havia essa informação.<br /><br />O valor máximo de duração de uma nota é por volta de 4.3 segundos. Para gerar notas de maior duração o script gera uma segunda nota de mesma frequencia com o valor de duração excedente. <br />
<br />
Códigos fonte e demais arquivos disponíveis no <a href="https://github.com/Danjovic/MSX/tree/master/BGMPlayer" target="_blank">repositório do GitHub</a> mas também tem uma <a href="https://cdn.hackaday.io/files/1586816789007904/BGMPlayer.dsk" target="_blank">imagem de disco</a> na<a href="https://hackaday.io/project/158681-msx-bgm-player" target="_blank"> página do projeto</a> no Hackaday.io que dá pra testar no WebMSX<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-J_2DQo1HBnA/Wxh3QFpG-UI/AAAAAAAAGN8/3v4hGN8sq9MbgNe-XMDyr1Z7nxRkfsPuwCLcBGAs/s1600/running%2Bon%2Bwebmsx.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="621" data-original-width="695" height="356" src="https://4.bp.blogspot.com/-J_2DQo1HBnA/Wxh3QFpG-UI/AAAAAAAAGN8/3v4hGN8sq9MbgNe-XMDyr1Z7nxRkfsPuwCLcBGAs/s400/running%2Bon%2Bwebmsx.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com0tag:blogger.com,1999:blog-34314859.post-76923201493959697622018-05-21T22:53:00.004-03:002018-05-21T22:57:01.732-03:00Diagrama redesenhado da placa CPU do HOTBITDesenhei este diagrama nas férias do início do ano, mas só agora me lembrei de postar. Ele foi baseado num diagrama que achei no site do Luciano (<a href="http://msxpro.com/esquemas.html" target="_blank">MSXPRO</a>).<br />
<br />
A título de curiosidade este diagrama foi editado num netbook Asus EEE 1005HA com tela de 1024x600<br />
<br />
O circuito está <a href="https://github.com/Danjovic/MSX/tree/master/Schematics/HOTBIT%20HB8000" target="_blank">disponível</a> nos formatos <a href="https://github.com/Danjovic/MSX/raw/master/Schematics/HOTBIT%20HB8000/HotBit.pdf" target="_blank">PDF</a> e <a href="https://github.com/Danjovic/MSX/raw/master/Schematics/HOTBIT%20HB8000/HotBit.sch" target="_blank">Eagle</a> (versão >=6.0) em meu repositório de MSX do Github<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://github.com/Danjovic/MSX/raw/master/Schematics/HOTBIT%20HB8000/HotBit.pdf" target="_blank"><img alt="https://github.com/Danjovic/MSX/raw/master/Schematics/HOTBIT%20HB8000/HotBit.pdf" border="0" data-original-height="674" data-original-width="953" height="449" src="https://4.bp.blogspot.com/-UPYLwf7Y-98/WwN3z3tkXXI/AAAAAAAAGNY/uHTJMfmxA20t8dSdFT2PuVyEw1keDyZfACLcBGAs/s640/HOTBIT_Sch_icon.png" width="640" /></a></div>
<br />Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com0tag:blogger.com,1999:blog-34314859.post-48773631888216019602016-12-19T23:01:00.001-02:002016-12-19T23:01:38.246-02:00Nova versão do Joy232Nova versão do Joy232, que é um programa que intercepta os caraceteres enviados para a impressora e os transmite serialmente pela porta de joystick.<br />
<br />
<u>Novidades desta versão (1.3):</u><br />
<ul>
<li>Código reescrito e otimizado de forma a caber 64 bytes da fila da RS232 que não é usada no MSX, e portanto não vai ser sobrescrito por outro programa</li>
<li>Suporta 14400 bauds (além de 1200,2400,4800,9600 e 19200 bauds)</li>
<li>Permite transmitir sem paridade (N) ou com paridade par (E) e ímpar (O) </li>
</ul>
Mais detalhes na página do projeto no <a href="http://hackaday.io/">https://hackaday.io/project/18552-joy232</a> <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/X41iR9mw4xw/0.jpg" src="https://www.youtube.com/embed/X41iR9mw4xw?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/y5-FM5Xrtfw/0.jpg" src="https://www.youtube.com/embed/y5-FM5Xrtfw?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<br />
Meus agradecimentos ao Fábio Belavenuto pela SD Mapper! Tem me ajudado pra caramba!!!<br />
<br />
E para os apressados:<br />
<span style="font-family: "Courier New",Courier,monospace;">10 REM<br />20 REM Joy232 hook code<br />30 REM danjovic 2016<br />40 REM version 1.31 19/12/2016<br />50 REM<br />60 EI=&HFAF5:SIZE=63<br />70 FOR A = EI TO EI+SIZE<br />80 READ B$: POKE A,VAL("&H"+B$)<br />90 NEXT A<br />100 REM<br />110 POKE &HFFB8,&HFA<br />120 POKE &HFFB7,&HF5<br />130 POKE &HFFB6,&HC3<br />140 REM<br />150 DATA F3,F5,C5,E5,6F,3E,0F,D3<br />160 DATA A0,26,FF,A7,CB,15,CB,14<br />170 DATA 06,0B,DB,A2,CB,87,CB,1C<br />180 DATA CB,1D,CE,00,D3,A1,0E,11<br />190 DATA 0D,20,FD,10,ED,E1,C1,F1<br />200 DATA A7,FB,33,33,C9,CE,00,D3<br />210 DATA A1,0E,06,0D,20,FD,10,ED<br />220 DATA E1,C1,F1,FB,33,33,C9,00<br />230 REM<br />240 REM To change baudrate<br />250 REM<br />260 REM POKE &HFB27,value<br />270 REM<br />280 REM Baudrate value<br />290 REM 1200 170<br />300 REM 2400 83<br />310 REM 4800 39<br />320 REM 9600 17<br />330 REM 14400 10<br />340 REM 19200 6<br />350 REM<br />360 REM ----------------------<br />370 REM To use parity<br />380 REM<br />390 REM POKE &HF96D,value<br />400 REM<br />410 REM Parity value<br />420 REM NONE 0 (or 1)<br />430 REM EVEN 2<br />440 REM ODD 3</span><br />
<br />
A conexão ao PC é feito na porta A de Joystick usando-se um adaptador ("<i>dongle</i>") USB-Serial.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-ZAvhpzbVBQ0/WFiCooYX79I/AAAAAAAAGFU/rhcYmmK0jhImq-EkBO1CqtQjUl8JwyKBACLcB/s1600/conexoes.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="324" src="https://1.bp.blogspot.com/-ZAvhpzbVBQ0/WFiCooYX79I/AAAAAAAAGFU/rhcYmmK0jhImq-EkBO1CqtQjUl8JwyKBACLcB/s640/conexoes.png" width="640" /></a></div>
Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com2tag:blogger.com,1999:blog-34314859.post-35690487069126979142016-12-05T00:17:00.000-02:002016-12-05T00:23:29.364-02:00Cartucho Caps Lock para Expert - Rev AAdicionei um botão de RESET no <a href="http://danjovic.blogspot.com.br/2016/10/cartucho-caps-lock-para-expert.html">cartucho de Caps Lock para o Expert</a>.<br />
Arquivos Eagle no <a href="https://github.com/Danjovic/MSX">Github...</a> <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-qp0FtSmTzZI/WETN9NDIcWI/AAAAAAAAGE4/Zg_d1zFvS5Y2H8zufXzC1vEBARpIIbkDACLcB/s1600/caps%2Block%2BExpert%2B-%2BPlaca%2BRevA.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="402" src="https://4.bp.blogspot.com/-qp0FtSmTzZI/WETN9NDIcWI/AAAAAAAAGE4/Zg_d1zFvS5Y2H8zufXzC1vEBARpIIbkDACLcB/s640/caps%2Block%2BExpert%2B-%2BPlaca%2BRevA.png" width="640" /></a></div>
<br />Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com1tag:blogger.com,1999:blog-34314859.post-29987143074231324532016-03-13T23:19:00.000-03:002016-03-13T23:19:05.605-03:00MSX IncludesArquivos para incluir em projetos de programas em assembly retirados do RED BOOK contendo:<br />
<br />
<ul>
<li>Chamadas da Bios</li>
<li>Variáveis de Sistema</li>
<li>Hooks</li>
</ul>
Os arquivos estão disponíveis no meu <a href="https://github.com/Danjovic/MSX_Includes">GitHub</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-hR6IZMUy31A/VuYfeey4QsI/AAAAAAAAF7A/QIgzzvkqwPYxpaE6_evJwQu8CsvJe8OIA/s1600/includes%2Bmsx.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://2.bp.blogspot.com/-hR6IZMUy31A/VuYfeey4QsI/AAAAAAAAF7A/QIgzzvkqwPYxpaE6_evJwQu8CsvJe8OIA/s640/includes%2Bmsx.png" width="632" /></a></div>
Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com0tag:blogger.com,1999:blog-34314859.post-31551925449235688892015-11-29T15:17:00.001-02:002015-11-29T15:17:26.574-02:00Convertendo jogos para uso com Paddles (5)<h3>
Pesquisa do(s) endereço(s) de memória que armazenam as coordenadas do personagem na tela</h3>
Recapitulando do artigo anterior, descobrimos que a função localizada no endereço 0x4f1c é responsável pela leitura dos comandos do jogador, seja via teclado ou via joystick. Também descobirmos que esta função recebe um parâmetro contido no registrador A.<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">Endereço: 0x4f1c</span><br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">Função: Le_controles</span><br />
<span style="font-family: "Courier New",Courier,monospace;"><br /></span>
<span style="font-family: "Courier New",Courier,monospace;">Entrada: A = 0xff -> Lê joystick 2 ou teclas 'Z' e 'C'</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> A<> 0xff -> Lê joystick 1 ou setas direcionais</span><br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">Retorno: A = Direção</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> A = </span><br />
<span style="font-family: "Courier New",Courier,monospace;"> 7 1 3</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> \ | /</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> (Z) 7 -- 0 -- 3 (C) </span><br />
<span style="font-family: "Courier New",Courier,monospace;"> / | \ </span><br />
<span style="font-family: "Courier New",Courier,monospace;"> 7 5 3</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> </span><br />
Agora precisamos rastrear os trechos do jogo que chamam e função 0x4f1c e ver o que acontece quando os valores 7 e 3 são retornados, o que corresponde aos comandos de 'esquerda' e 'direita' respectivamente.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-Bk3zMB80N8c/VlpK4G6BsEI/AAAAAAAAF38/L9u-sot8bV4/s1600/achou%2B4f1c.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="146" src="http://3.bp.blogspot.com/-Bk3zMB80N8c/VlpK4G6BsEI/AAAAAAAAF38/L9u-sot8bV4/s400/achou%2B4f1c.png" width="400" /></a></div>
<br />
<br />
Analisando a primeira chamada, a partir de 0x4cc3 temos que quando a chamada a 0x4f1c retorna 3, o endereço 0x4f03 é chamado<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-1bEZesP1BF8/Vlss_9H_tNI/AAAAAAAAF4I/SRsck3Gefv4/s1600/quandoretorna3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="261" src="http://2.bp.blogspot.com/-1bEZesP1BF8/Vlss_9H_tNI/AAAAAAAAF4I/SRsck3Gefv4/s400/quandoretorna3.png" width="400" /></a></div>
<br />
E quando a chamada a 0x4f1c retorna 7 o endereço 0x4f10 é chamado<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-3-bqKdoNclA/VlstEAAWITI/AAAAAAAAF4Q/b8xsZutyESM/s1600/quandoretorna7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="261" src="http://2.bp.blogspot.com/-3-bqKdoNclA/VlstEAAWITI/AAAAAAAAF4Q/b8xsZutyESM/s400/quandoretorna7.png" width="400" /></a></div>
<br />
Vamos então analisar estes dois endereços:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-CSnsbCUxXWI/VlsuN46H10I/AAAAAAAAF4Y/HL53qgv7XSE/s1600/limita.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="195" src="http://2.bp.blogspot.com/-CSnsbCUxXWI/VlsuN46H10I/AAAAAAAAF4Y/HL53qgv7XSE/s400/limita.png" width="400" /></a></div>
<br />
O que encontramos nesta chamada é um bom indício de que estamos perto, pois ambas as chamadas limitam o valor da variável contida em 0xd010. Para a direita o valor é limitado a 100 (0x64 em hexadecimal). Se o valor for menor do que 100 então o conteúdo da posição de memória em 0xd010 é incrementado. Já para a esquerda o valor é limitado a 10 (0x0A).<br />
<br />
Em ambos os casos, caso a posição em oxd010 seja alterada a função salta para 0x4ddc. Vamos ver o que tem lá:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-pFEPy5coovw/VlswMcGmWBI/AAAAAAAAF4k/usby3Ek8zoU/s1600/em%2B4ddc.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-pFEPy5coovw/VlswMcGmWBI/AAAAAAAAF4k/usby3Ek8zoU/s1600/em%2B4ddc.png" /></a></div>
<br />
Em 0x4ddc acontece o seguinte:<br />
- A posição em 0xd012 é incrementada com módulo 2. Isso talvez sirva para comandar o sprite do personagem conforme ele se movimenta, mas por enquanto não importa.<br />
- A posição de memória em 0xd015 é zerada. Isso pode ser um flag ou algo assim.<br />
<br />
Vamos voltar um pouco e retomar a pista do endereço de memória 0xd010 e ver onde este endereço é usado e como é usado:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-aMxlwhB1XPg/Vlsx1a8nZaI/AAAAAAAAF4w/Ti792PiHWcM/s1600/achou%2Bd010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="370" src="http://1.bp.blogspot.com/-aMxlwhB1XPg/Vlsx1a8nZaI/AAAAAAAAF4w/Ti792PiHWcM/s400/achou%2Bd010.png" width="400" /></a></div>
Bom, este endereço é utilizado em 18 lugares! São dezesseis lugares a mais para pesquisar (dois nós já vimos). Isso fica para o próximo artigo.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com0tag:blogger.com,1999:blog-34314859.post-18344712174808960292015-11-28T23:29:00.003-02:002015-11-29T14:26:42.730-02:00Convertendo jogos para uso com Paddles (4)<h3>
Pesquisa das funções que fazem a leitura do teclado / joysticks (continuação) </h3>
Começamos nossa análise ao redor dos endereços onde a função GTSTK (Get Stick) é chamada. <br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;"> Line 2043: <span style="color: red;">4f37</span> cdd500 call 00d5h<br /> Line 2058: <span style="color: red;">4f49</span> cdd500 call 00d5h<br /> Line 2061: <span style="color: red;">4f4f</span> cdd500 call 00d5h<br /> Line 4602: <span style="color: red;">6214</span> cdd500 call 00d5h</span><br />
<br />
O objetivo é rastrear as referências a esta chamada. Queremos saber se a leitura do Joystick é feita no meio do loop do jogo, ou se é chamada a partir dele. Devemos seguir o código para trás e para a frente até chegar a um bloco estanque. No caso temos todo o bloco compreendido entre os endereços 0x4f1c e 0x4f5e.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-JSfcf9BlxfE/VlpKhKYwtXI/AAAAAAAAF3w/Dx_daTeGxZ0/s1600/rastreando.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="http://1.bp.blogspot.com/-JSfcf9BlxfE/VlpKhKYwtXI/AAAAAAAAF3w/Dx_daTeGxZ0/s640/rastreando.png" width="406" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<br />
Pesquisando então pelo endereço 0x4f10 achamos quatro chamadas:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-Bk3zMB80N8c/VlpK4G6BsEI/AAAAAAAAF34/G1FbyPVvdao/s1600/achou%2B4f1c.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="146" src="http://1.bp.blogspot.com/-Bk3zMB80N8c/VlpK4G6BsEI/AAAAAAAAF34/G1FbyPVvdao/s400/achou%2B4f1c.png" width="400" /></a></div>
<br />
Precisamos analisar esta função e ver o que ela recebe de entrada e o que retorna de saída. As primeiras instruções mostram que se o registrador A for igual a 0xFF na entrada, a função desvia para 0x4f48.<br />
<br />
Analisando a primeira parte da função (chamada com A!=255), vemos que a matriz de teclado também é lida (função SNSMAT - 0141h) pesquisando-se as teclas 'C' (row 3 bit 0) e 'Z' (row 5 bit 7) <br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">4f1f 3e05 ld a,05h<br />4f21 cd4101 call 0141h<br />4f24 1607 ld d,07h<br />4f26 cb7f bit 7,a <span style="color: lime;">Testa 'Z'</span><br />4f28 3e07 ld a,07h <span style="color: lime;"> Retorna 7 (esquerda)</span><br />4f2a c8 ret z<br /><br />4f2b 3e03 ld a,03h<br />4f2d cd4101 call 0141h<br />4f30 cb47 bit 0,a <span style="color: lime;">Testa 'C'</span> <br />4f32 3e03 ld a,03h <span style="color: lime;">Retorna 3 (direita)</span><br />4f34 c8 ret z</span><br />
<br />
Caso nenhuma destas teclas esteja pressionada, a rotina lê o Joystick 2. Caso o joystick 2 esteja em repouso, ou na posição 1 (cima) ou na posição 5 (baixo) a função retorna. Por outro lado, se o joystick estiver nas posições 2,3,4 (direita e diagonais) a função retorna o valor '3' (direita). Analogamente, se a posição for superior a 5 (6,7,8 - esquerda e diagonais) a função retorna o valor '7' (esquerda). <br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">4f35 3e02 ld a,02h<br />4f37 cdd500 call 00d5h<br />4f3a fe02 cp 02h <span style="color: lime;">retorna se menor que 2</span><br />4f3c d8 ret c<br /><br />4f3d fe05 cp 05h <span style="color: lime;">retorna se igual a 5</span><br />4f3f c8 ret z<br /><br />4f40 3803 jr c,4f45h ; (+03h)<br />4f42 3e07 ld a,07h <span style="color: lime;">retorna 7 (esquerda)</span><br />4f44 c9 ret<br /><br />4f45 3e03 ld a,03h <span style="color: lime;"> retorna 3 (direita)</span><br />4f47 c9 ret</span> <br />
<br />
Os valores 3 e 7 correspondem às posições direita e esquerda, respectivamente que são os mesmos que a função GTSTK retorna quando o joystick é acionado para a esquerda ou a direita.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-bh7v98s728A/VlpBPVY8b8I/AAAAAAAAF3M/ZSJJIuSKzco/s1600/gtstk.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="281" src="http://4.bp.blogspot.com/-bh7v98s728A/VlpBPVY8b8I/AAAAAAAAF3M/ZSJJIuSKzco/s400/gtstk.png" width="400" /></a></div>
<br />
Já o outro trecho de código lê o teclado e o joystick 1 e também retorna 3 ou 7 caso um destes dois dispositivos esteja nas posições direita/diagonais-direita ou esquerda/diagonais-esquerda.<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">4f45 3e03 ld a,03h <span style="color: lime;"> Retorna 3 (direita)</span><br />4f47 c9 ret<br /><br /><span style="color: red;">4f48 </span>af xor a <span style="color: lime;">A=0, Direcionais teclado</span><br />4f49 cdd500 call 00d5h<br />4f4c f5 push af<br />4f4d 3e01 ld a,01h <span style="color: lime;">A=1, Joystick 1</span><br />4f4f cdd500 call 00d5h<br />4f52 c1 pop bc<br />4f53 b0 or b<br />4f54 fe02 cp 02h<br />4f56 d8 ret c<br /><br />4f57 fe05 cp 05h<br />4f59 c8 ret z<br /><br />4f5a 38e9 jr c,4f45h ; (-17h)<br />4f5c 3e07 ld a,07h <span style="color: lime;">Retorna 7 (esquerda)</span><br />4f5e c9 ret</span><br />
<br />
<br />
Este trecho inteiro é candidato a local para se instalar os patches, mas agora é preciso descobrir como o jogo transforma o resultado dos controles direcionais em coordenadas da personagem, que é o tema do próximo artigo. <br />
<br />
<br />Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com0tag:blogger.com,1999:blog-34314859.post-45761840099979988002015-11-28T21:53:00.000-02:002015-11-28T21:53:13.110-02:00Convertendo jogos para uso com Paddles (3)<h3>
Pesquisa das funções que fazem leitura do teclado / joysticks</h3>
O MSX só tem duas vias para comandos do usuário: O Teclado e as Portas de Joystick. Sendo assim todos os jogos necessariamente têm que acessar estas vias. Para isso o jogo pode usar as rotinas da BIOS (recomendado) ou ler diretamente as portas de I/O. Para cada jogo precisamos descobrir o método ou os métodos utilizados.<br />
<br />
Comecemos pelas rotinas da BIOS. Segundo o Livro Vermelho, temos:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">ADDR. NAME TO FUNCTION<br />------------------------------------------------ </span><br />
<span style="font-family: "Courier New",Courier,monospace;">00D5H GTSTCK 11EEH Get joystick status<br />00D8H GTTRIG 1253H Get trigger status</span><br />
<span style="font-family: "Courier New",Courier,monospace;">00DEH GTPDL 1273H Get paddle status</span><br />
<span style="font-family: "Courier New",Courier,monospace;">0141H SNSMAT 1452H Read row of keyboard matrix</span><br />
<br />
A primeira rotina a ser procurada é a GTPDL (00DEH). Se o jogo a utiliza nosso trabalho está concluído. Mas infelizmente para o Penguin Wars ainda não foi dessa vez.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-TFGthoBCCPk/Vlo23z7P-6I/AAAAAAAAF2g/rxwBh3zXOnU/s1600/deh%2Bnot%2Bfound.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="111" src="http://4.bp.blogspot.com/-TFGthoBCCPk/Vlo23z7P-6I/AAAAAAAAF2g/rxwBh3zXOnU/s320/deh%2Bnot%2Bfound.png" width="320" /></a></div>
<br />
A próxima é a GTSTK (00d5h). Esta retornou em 4 endereços.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-iqnRuE0-Ic8/Vlo4jJ8uTII/AAAAAAAAF2s/4b7V_c_AJcI/s1600/achou%2B00d5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="246" src="http://4.bp.blogspot.com/-iqnRuE0-Ic8/Vlo4jJ8uTII/AAAAAAAAF2s/4b7V_c_AJcI/s400/achou%2B00d5.png" width="400" /></a></div>
<br />
Em seguida leremos GTTRIG (00d8h). Também é chamada em 4 locais.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-d1QeycJIp_I/Vlo4mc0OOZI/AAAAAAAAF20/dAkthgVf37M/s1600/achou%2B00d8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="251" src="http://2.bp.blogspot.com/-d1QeycJIp_I/Vlo4mc0OOZI/AAAAAAAAF20/dAkthgVf37M/s400/achou%2B00d8.png" width="400" /></a></div>
<br />
Por último SNSMAT (0141h). Novamente, a função é chamada 4 vezes <br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-rxsb-zeR820/Vlo4r9dxOwI/AAAAAAAAF28/Xc9VfJZ7MBQ/s1600/achout%2B0141h.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="215" src="http://3.bp.blogspot.com/-rxsb-zeR820/Vlo4r9dxOwI/AAAAAAAAF28/Xc9VfJZ7MBQ/s400/achout%2B0141h.png" width="400" /></a></div>
Estes endereços serão o ponto de partida para a pesquisa das funções que guardam a posição da personagem na tela. Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com0tag:blogger.com,1999:blog-34314859.post-21464842847919316182015-11-25T23:47:00.001-02:002015-11-25T23:47:24.877-02:00Convertendo jogos para uso com Paddles (2)<h3>
Disassembly do Jogo</h3>
Existem várias ferramentas para desassemblar código de Z80, mas eu gosto de usar o <a href="http://www.inkland.org.uk/dz80/">DZ80</a>. O jogo que eu escolhi para adaptar foi o <a href="https://en.wikipedia.org/wiki/Penguin_Wars">Penguin Wars</a>. A ROM de MSX deste jogo tem 32Kbytes e as configurações para o disassembly ficam como na figura abaixo:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-3c5SeDUYRkw/VlZjNahU7zI/AAAAAAAAF18/uqhCavWLOZ4/s1600/dz80%2Bdisassembly.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="390" src="http://2.bp.blogspot.com/-3c5SeDUYRkw/VlZjNahU7zI/AAAAAAAAF18/uqhCavWLOZ4/s400/dz80%2Bdisassembly.png" width="400" /></a></div>
<br />
Se tudo estiver certo, a listagem em assembly gerada deve começar no endereço 0x4000 e os dois primeiros caracteres devem ser 0x41 e 0x42<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-K4In54MqLuU/VlZkWBpP-gI/AAAAAAAAF2E/B1aXXv9tPU4/s1600/disassembly.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="544" src="http://2.bp.blogspot.com/-K4In54MqLuU/VlZkWBpP-gI/AAAAAAAAF2E/B1aXXv9tPU4/s640/disassembly.png" width="640" /></a></div>
<br />
<br />
<br />
<br />
<br />Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com0tag:blogger.com,1999:blog-34314859.post-14192085776162295632015-11-25T00:21:00.000-02:002015-11-28T21:53:37.097-02:00Convertendo jogos para uso com PaddlesApesar do padrão MSX estabelecer um padrão para Paddles e tanto a BIOS quanto o BASIC terem suporte a eles, nenhum jogo que eu tenha notícia os utiliza. O único jogo que utiliza Paddles é o Arkanoid, porém este utiliza um padrão próprio, em vez de usar o padrão nativo.<br />
<br />
Pois bem, a mecânica de jogo de alguns títulos utiliza somente movimentos laterais e são ótimos candidatos a adaptações para uso de Paddles. Um exemplo é o Galaga. <br />
<br />
Lá pelos idos de 1990 eu construí um Paddle para o MSX seguindo as especificações do Livro Vermelho do MSX. Na falta de jogos que o utilizassem eu consegui desassemblar justamente o Galaga de forma a convertê-lo para o uso de Paddles. Naquela época eu ainda usava fitas cassete e tinha que me utilizar de programas que eu mesmo escrevia de forma a poder fazer a adaptação. Como todo o processo era muito trabalhoso eu nunca me aventurei a converter nenhum outro jogo. Hoje em dia com emuladores, desassembladores, etc esta tarefa é um pouco mais facilitada mas mesmo assim não é trivial, uma vez que cada jogo, mesmo da mesma desenvolvedora, funciona de maneira diferente na hora de ler as interfaces com o usuário (teclado, joysticks).<br />
<br />
Mas de uma maneira geral a adaptação segue os seguintes passos:<br />
<br />
- <span style="color: lime;">Disassembly do jogo</span><br />
- <span style="color: lime;">pesquisa das funções que fazem leitura do teclado / joysticks</span><br />
- pesquisa do(s) endereço(s) de memória que armazenam as coordenadas do personagem na tela<br />
- Inclusão das chamadas de leitura do paddle em substituição às funções de tratamento de teclado e mouse.<br />
- criação de um arquivo de 'patch' para carregamento do jogo com ou sem a modificação.<br />
<br />
<br />
<br />Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com1tag:blogger.com,1999:blog-34314859.post-41214554830685968582015-07-20T00:33:00.000-03:002015-07-20T00:33:52.497-03:00Paddle 2 botõesPara complementar um<a href="http://hotbit.blogspot.com.br/2006/11/paddle-revisitado.html"> antigo post</a>, segue abaixo link para uma placa de circuito impresso para um Paddle padrão MSX com 2 botões, projetado especificamente para a caixa CR-096. O projeto dessa placa com dois botões era de 2007, mas ainda baseado no circuito de 1992, que não tinha o resistor em série com o potenciômetro.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-ebggzOhJ_Hk/VawljIX5sFI/AAAAAAAAFWg/sipJpSvpO3o/s1600/Paddle%2B2%2B-%2Bplaca.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="272" src="http://4.bp.blogspot.com/-ebggzOhJ_Hk/VawljIX5sFI/AAAAAAAAFWg/sipJpSvpO3o/s400/Paddle%2B2%2B-%2Bplaca.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Layout da placa feito em 2007</td></tr>
</tbody></table>
<br />
Dei uma incrementada no circuito, adicionando o resistor em série com o potenciômetro, um resistor de base para assegurar o corte do transistor e um LED para indicar o funcionamento.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-7nPP4Kub-oM/VaxoOt6FhFI/AAAAAAAAFWw/EWi5QsFDZ5o/s1600/Paddle%2B2%2B-%2Bplaca-NOVA-diagrama.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="464" src="http://2.bp.blogspot.com/-7nPP4Kub-oM/VaxoOt6FhFI/AAAAAAAAFWw/EWi5QsFDZ5o/s640/Paddle%2B2%2B-%2Bplaca-NOVA-diagrama.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Novo diagrama do "Paddle" de 2 botões.</td></tr>
</tbody></table>
<br />
<br />
Por causa das mudanças dei uma melhorada no layout da placa.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-su01Njr6GmY/VaxoOzWeiEI/AAAAAAAAFW8/_fxPXHsmT5Q/s1600/Paddle%2B2%2B-%2Bplaca-NOVA-componentes.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="444" src="http://3.bp.blogspot.com/-su01Njr6GmY/VaxoOzWeiEI/AAAAAAAAFW8/_fxPXHsmT5Q/s640/Paddle%2B2%2B-%2Bplaca-NOVA-componentes.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Novo "layout" da placa.</td></tr>
</tbody></table>
Cabe notar que os 2 "microswitches" bem como o potenciômetro e o LED devem ser montados na face da solda.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-3ztCCELVITw/VaxrXW3mwFI/AAAAAAAAFXE/cTqGVn7Fn1o/s1600/montagem.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="187" src="http://2.bp.blogspot.com/-3ztCCELVITw/VaxrXW3mwFI/AAAAAAAAFXE/cTqGVn7Fn1o/s400/montagem.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Led, Botões e potenciômetro montados do lado das soldas.</td></tr>
</tbody></table>
<br />
<a href="https://www.dropbox.com/s/zy4dn8dpkphgh06/paddle-MSX.zip?dl=0">Link</a> do dropbox contendo os arquivos. <br />
<br />
<br />Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com1tag:blogger.com,1999:blog-34314859.post-84415670939236784012015-06-23T21:39:00.000-03:002015-06-23T21:39:12.813-03:00Cartão MSX Add-on para placa DE-1MSX DE-1add on card baseada no projeto do <a href="http://caro.su/msx/ocm_de1.htm">Caro</a>, cujo layout já estava pronto há algum tempo porém estava faltando oportunidade de construir a placa. <br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-Qd6sgRb4bHQ/VYn4mxNHf8I/AAAAAAAAFSQ/0IPnOur4zeo/s1600/DSCN5695.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="http://2.bp.blogspot.com/-Qd6sgRb4bHQ/VYn4mxNHf8I/AAAAAAAAFSQ/0IPnOur4zeo/s400/DSCN5695.JPG" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-484F1d1w8ac/VYn4nF8ZpHI/AAAAAAAAFSU/yltmDCLaiDM/s1600/DSCN5705.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="http://1.bp.blogspot.com/-484F1d1w8ac/VYn4nF8ZpHI/AAAAAAAAFSU/yltmDCLaiDM/s400/DSCN5705.JPG" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-SVhXkBAiGhM/VYn4nwoo1VI/AAAAAAAAFSg/OwP50YgrHCE/s1600/DSCN5706.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="http://2.bp.blogspot.com/-SVhXkBAiGhM/VYn4nwoo1VI/AAAAAAAAFSg/OwP50YgrHCE/s400/DSCN5706.JPG" width="400" /></a></div>
<br />
Diagrama:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-GZdj-7UpzZg/VYn65FuMf8I/AAAAAAAAFTE/lWL-fGTc--4/s1600/Diagrama.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="440" src="http://2.bp.blogspot.com/-GZdj-7UpzZg/VYn65FuMf8I/AAAAAAAAFTE/lWL-fGTc--4/s640/Diagrama.png" width="640" /></a></div>
<br />
<br />
Placa de circuito impresso em face simples:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-_8eyrUVADQs/VYn7Hpnu0BI/AAAAAAAAFTM/Wb0t8QoRsz0/s1600/Placa%2BDE1-addon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="524" src="http://2.bp.blogspot.com/-_8eyrUVADQs/VYn7Hpnu0BI/AAAAAAAAFTM/Wb0t8QoRsz0/s640/Placa%2BDE1-addon.png" width="640" /></a></div>
<br />
Placa em ação:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-_nibs1M_j9I/VYn7TvZzExI/AAAAAAAAFTU/KF35ykYAsnI/s1600/de-1%2Bstick%2Bem%2Bacao.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="http://3.bp.blogspot.com/-_nibs1M_j9I/VYn7TvZzExI/AAAAAAAAFTU/KF35ykYAsnI/s640/de-1%2Bstick%2Bem%2Bacao.jpg" width="360" /></a></div>
<br />Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com0tag:blogger.com,1999:blog-34314859.post-13814029435048867872015-04-28T23:15:00.000-03:002015-04-28T23:15:23.467-03:00Teclas do PV-16 - Versão finalAs teclas do PV-16 na sua versão definitiva foram impressos usando plástico verde-limão com as inscrições em baixo relevo. <br />
<br />
Seguem abaixo as fotos:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-2sRti0BI4IU/VUA-FNuNsQI/AAAAAAAAE4A/EMWjspK-MPk/s1600/teclas1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-2sRti0BI4IU/VUA-FNuNsQI/AAAAAAAAE4A/EMWjspK-MPk/s1600/teclas1.jpg" height="480" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-h6NxEukicxw/VUA-E_ku_qI/AAAAAAAAE30/T6Tg4JtSDD4/s1600/teclas2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-h6NxEukicxw/VUA-E_ku_qI/AAAAAAAAE30/T6Tg4JtSDD4/s1600/teclas2.jpg" height="480" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-PDsZaltyRBY/VUA-EqtxFjI/AAAAAAAAE3w/NkU6gK2iVI8/s1600/teclas-geral.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-PDsZaltyRBY/VUA-EqtxFjI/AAAAAAAAE3w/NkU6gK2iVI8/s1600/teclas-geral.jpg" height="480" width="640" /></a></div>
<br />
<br />
<br />Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com2tag:blogger.com,1999:blog-34314859.post-34272564852709123132015-04-18T14:40:00.000-03:002015-04-18T14:40:49.607-03:00Mais ensaisos para as Teclas do PV-16Agora está bem próximo! Faltam poucos ajustes e já dá para imprimir na cor final.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-_4_9Ckt46NI/VTKWfhoPZpI/AAAAAAAAExg/rg2aquENFQo/s1600/teclas.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-_4_9Ckt46NI/VTKWfhoPZpI/AAAAAAAAExg/rg2aquENFQo/s1600/teclas.jpg" height="242" width="640" /></a></div>
<br />Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com0tag:blogger.com,1999:blog-34314859.post-19823124028714870622015-04-14T22:20:00.000-03:002015-04-14T22:20:14.376-03:00Teclas impressas para o PV-16Um amigo meu está me ajudando a substituir as teclas que vieram faltando no PV-16 por peças impressas em 3d.<br />
<br />
Os primeiros ensaios já foram promissores: <br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-QOKOuCaoOwc/VS27MNU88wI/AAAAAAAAEws/CbFSTox7vCw/s1600/teclas2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-QOKOuCaoOwc/VS27MNU88wI/AAAAAAAAEws/CbFSTox7vCw/s1600/teclas2.jpg" height="480" width="640" /></a></div>
<br />
Funcionalmente o teclado já poderia ficar com as duas teclas protótipo, porém vamos tentar imprimir as peças com um pouco de sobra de material para poder lixar e melhorar o acabamento, bem como colocar alguns detalhes em baixo relevo.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-RJE-S92wfVk/VS28mxYLduI/AAAAAAAAEw8/8Z66lNsyfg8/s1600/Tecla%2BTR.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-RJE-S92wfVk/VS28mxYLduI/AAAAAAAAEw8/8Z66lNsyfg8/s1600/Tecla%2BTR.png" height="370" width="640" /></a></div>
<br />Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com0tag:blogger.com,1999:blog-34314859.post-13258117886969503742015-04-11T09:13:00.000-03:002015-04-12T12:43:50.696-03:00Logotipo 3D do MSXFiz um logotipo 3D do MSX no sketchup e estou disponibilizando no meu <a href="https://www.dropbox.com/s/u1c8qwdzjxy9mgc/MSX-Logo-3D.skp?dl=0">dropbox</a>. Eu ia colocar no 3D warehouse mas desisti devido à atual política xereta da Trimble (que comprou o sketchup)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-toFelp_T9_g/VSqSpYD9o3I/AAAAAAAAEwQ/uWz8cDAVII8/s1600/logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-toFelp_T9_g/VSqSpYD9o3I/AAAAAAAAEwQ/uWz8cDAVII8/s1600/logo.png" height="406" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=34314859" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div>
<br />
Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com0tag:blogger.com,1999:blog-34314859.post-18010199241843701942015-04-09T21:28:00.000-03:002015-04-09T21:28:11.894-03:00MSX novo em casaAdquiri no ML um MSX da Casio modelo PV-16.<br />
<br />
O micro é bem compacto, e o 'design' lembra um Hotbit miniatura. As teclas são do tipo chiclete, como as do CP400. Em resumo, uma belezinha de micro! <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-S0ItjqSL4ic/VScYPBS3zMI/AAAAAAAAEwA/HRWOBN57y9E/s1600/casio%2Bpv-16.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-S0ItjqSL4ic/VScYPBS3zMI/AAAAAAAAEwA/HRWOBN57y9E/s1600/casio%2Bpv-16.jpg" height="480" width="640" /></a></div>
<br />
As duas teclas faltantes eu pretendo substituir por peças impressas. Vamos ver se dá certo.Danjovichttp://www.blogger.com/profile/15384835800874451538noreply@blogger.com0