<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2888451791099256794</id><updated>2012-02-16T00:30:58.683-08:00</updated><category term='video'/><category term='Miscelanea'/><category term='Diseño'/><category term='programación'/><category term='version'/><category term='Información'/><category term='&quot;Prueba de sonido&quot;'/><category term='hardware'/><category term='GUI'/><title type='text'>Proyecto PSGed (MSX)</title><subtitle type='html'>Aplicación para la edición de los registros del PSG (AY-3-8910)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://psged.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>44</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-6305189985543754575</id><published>2012-01-26T11:15:00.000-08:00</published><updated>2012-01-26T11:15:51.575-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='version'/><title type='text'>Versión 0.82b disponible!</title><content type='html'>He publicado la versión 0.82b del PSGed, con algunas correcciones relacionadas con la modificación en tiempo real de los registros del AY. La tenia olvidada en mi disco duro, y hoy me he acordado gracias a los foros de Karoshi.&lt;br /&gt;Aunque últimamente estoy con otros proyectos, me gustaría mejorar algunos cosas de esta versión y añadirle el acceso a disco. &lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;a href="http://code.google.com/p/psged/downloads/detail?name=PSGed_v0.82b%28ROM%29.zip&amp;amp;can=2&amp;amp;q="&gt;Enlace a la ROM&lt;/a&gt;.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-6305189985543754575?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/6305189985543754575/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2012/01/he-publicado-la-version-0.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/6305189985543754575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/6305189985543754575'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2012/01/he-publicado-la-version-0.html' title='Versión 0.82b disponible!'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-3995357304099849293</id><published>2011-09-17T10:06:00.000-07:00</published><updated>2011-09-17T12:13:14.730-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><title type='text'>Programando con SDCC. Funciones y retornos.</title><content type='html'>A la hora de programar con SDCC me he encontrado con algunos problemas, que francamente no se si están descritos en alguna parte, pero quiero compartirlos por si alguien se anima a programar con este compilador cruzado y se encuentra que no le funcionan sus programas.&lt;br /&gt;&lt;br /&gt;En este post, voy ha hablar de dos casos relacionados con la creación de funciones.&lt;br /&gt;&lt;br /&gt;El primero se da en funciones que no devuelven datos (&lt;i&gt;void&lt;/i&gt;). Lo normal es que no se incluya la sentencia &lt;i&gt;"RETURN"&lt;/i&gt; y por lo general funcionara correctamente, pero me he encontrado con casos en los que me ha dado un error al compilar (cuando compila el  código ensamblador que genera a partir del fuente C). La causa la desconozco pero si no recuerdo mal en todos los casos finalizaba la función con una condición de tipo &lt;i&gt;"IF"&lt;/i&gt; o &lt;i&gt;"SWITCH CASE"&lt;/i&gt;. Se soluciona incorporando siempre un retorno.&lt;br /&gt;&lt;br /&gt;El segundo caso, es cuando realizamos una función en ensamblador dentro de nuestro fuente en C, y queremos que en un determinado momento salga con un &lt;i&gt;"ret"&lt;/i&gt;. Las funciones en ensamblador cuando se compilan, añade un retorno automáticamente al final de esta, pero en el caso de que la función le pasemos datos, el compilador añade un &lt;i&gt;"push IX"&lt;/i&gt; al inicio y por consiguiente al final añade un &lt;i&gt;"pop IX"&lt;/i&gt;. En estos casos si ponemos un retorno se colgará nuestro programa al ejecutarlo. Para solucionarlo, antes tendremos que añadir un &lt;i&gt;"pop IX"&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Ejemplo:&lt;br /&gt;&lt;div style="background-color: paleturquoise; display: block; font-family: 'Courier New',Courier,monospace; margin: 10px; padding: 10px;"&gt;void IniciaDatos(char valor)&lt;br /&gt;{&lt;br /&gt;valor;&lt;br /&gt;__asm&lt;br /&gt;ld HL,#DATA&lt;br /&gt;&lt;br /&gt;ld A,4(IX)&lt;br /&gt;cp #0&lt;br /&gt;jr Z,COPY&lt;br /&gt;&lt;br /&gt;ld B,#0&lt;br /&gt;ld C,A&lt;br /&gt;&lt;br /&gt;sla C ; multiplico por 8&lt;br /&gt;sla C&lt;br /&gt;sla C      &lt;br /&gt;&lt;br /&gt;ADD HL,BC&lt;br /&gt;&lt;br /&gt;COPY:&lt;br /&gt;ld DE,#BUFFER&lt;br /&gt;ld BC,#8 &lt;br /&gt;&lt;br /&gt;ldir&lt;br /&gt;&lt;br /&gt;&lt;b&gt;pop IX&lt;/b&gt; &lt;span class="Apple-style-span" style="color: blue;"&gt;; IMPORTANTE! solo en funciones con entrada de datos&lt;/span&gt; &lt;br /&gt;ret&lt;br /&gt;&lt;br /&gt;DATA:&lt;br /&gt;.db 0x00,0x02,0x06,0x0E,0x1E,0x3E,0x7E,0x00 &lt;br /&gt;.db 0x38,0x44,0x82,0x82,0x82,0x44,0x38,0x00  &lt;br /&gt;.db 0xFF,0xE7,0xC3,0x81,0x00,0x18,0x3C,0x7E&lt;br /&gt;.db 0xF0,0xF0,0xF0,0xF0,0x0F,0x0F,0x0F,0x0F&lt;br /&gt;&lt;br /&gt;__endasm;    &lt;br /&gt;}&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-3995357304099849293?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/3995357304099849293/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2011/09/programando-con-sdcc-funciones-y.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/3995357304099849293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/3995357304099849293'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2011/09/programando-con-sdcc-funciones-y.html' title='Programando con SDCC. Funciones y retornos.'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-727813600549556518</id><published>2011-07-13T05:59:00.000-07:00</published><updated>2011-07-13T05:59:39.701-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Información'/><title type='text'>Nace el proyecto grooveSX live</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Vix-j53KOtQ/Th2RsmrLTpI/AAAAAAAABak/DQursoUjGS4/s1600/GrooveSXlive_v003bios_0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-Vix-j53KOtQ/Th2RsmrLTpI/AAAAAAAABak/DQursoUjGS4/s1600/GrooveSXlive_v003bios_0000.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Como avanzaba en el anterior post, he iniciado un nuevo proyecto de una aplicación musical. Estará orientada a la creación de temás y la reproducción en vivo, con funciones para el lanzamiento independiente de patrones y la posibilidad de jugar con la activación/desactivación de los canales.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Para esta nueva aplicación he querido centrarme en la funcionalidad y la interfaz gráfica, que es mi fuerte, mientras que para el player he buscado uno de los que podemos encontrar para MSX. He de ser realista, programar uno de cero me llevaría mucho tiempo, no me motiva y no creo que pudiera conseguir el nivel de los ya existentes.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Para el &lt;a href="http://es.wikipedia.org/wiki/General_Instrument_AY-3-8910"&gt;chip AY&lt;/a&gt;, conozco los players:&amp;nbsp;&lt;a href="http://bulba.untergrund.net/vortex_e.htm"&gt;Vortex&lt;/a&gt;, el &lt;a href="http://arkos.cpcscene.com/"&gt;Arkos&lt;/a&gt;, el &lt;a href="http://www.thepetsmode.com/producciones-thepetsmode-msxjuegos-demoscene.html#playerzma"&gt;ZMA&lt;/a&gt; y el &lt;a href="https://sites.google.com/site/wyzplayer/"&gt;WYZ&lt;/a&gt; y el que más se ajusta a las necesidades del proyecto es el WYZ. He escuchado la música del autor, en muchos sitios pero no conocía las posibilidades del player, hasta que hace poco probé el tracker para PC y me gusto por que tiene muchas de las&amp;nbsp;características&amp;nbsp;que busco, como el uso del efecto de la envolvente (utilizado como un instrumento de bajo) y el canal de FX que permite realizar sonidos para percusión. Además esta preparado para aprovechar el &lt;a href="http://www.msxcartridgeshop.com/"&gt;MegaFlashROM SCC+&lt;/a&gt;, obteniendo 2 AY + 1 SCC.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Así que me puse en contacto con WYZ. Le ha gustado la idea y ya nos hemos puesto a trabajar en la aplicación.&lt;br /&gt;En la pasada chiptune stage 3 organizada por el &lt;a href="http://www.clubsprite.net/"&gt;ClubSprite&lt;/a&gt;, mostré una demo de la parte de reproducción (modo live), que utiliza solo un AY pero suena increíble!&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-K_p1l6dpqoY/ThbmB7HPDOI/AAAAAAAABZM/sLfOXRF6Azc/s1600/GrooveSXlive_v003b_play.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-K_p1l6dpqoY/ThbmB7HPDOI/AAAAAAAABZM/sLfOXRF6Azc/s1600/GrooveSXlive_v003b_play.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;Podéis seguir la evolución del proyecto en este mismo blog.&lt;br /&gt;&lt;br /&gt;Más información sobre el &lt;a href="https://sites.google.com/site/wyzplayer/"&gt;WYZ player&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-727813600549556518?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/727813600549556518/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2011/07/nace-el-proyecto-groovesx-live.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/727813600549556518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/727813600549556518'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2011/07/nace-el-proyecto-groovesx-live.html' title='Nace el proyecto grooveSX live'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-Vix-j53KOtQ/Th2RsmrLTpI/AAAAAAAABak/DQursoUjGS4/s72-c/GrooveSXlive_v003bios_0000.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-2107170061473474925</id><published>2011-07-13T04:20:00.000-07:00</published><updated>2011-07-13T04:20:13.539-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Información'/><title type='text'>PSGed V2 parado!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/--6roTJ1x7gc/TZzHzQjvZzI/AAAAAAAABKM/U0T6_ho-BPg/s1600/PSGed_v204b_minipianowin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/--6roTJ1x7gc/TZzHzQjvZzI/AAAAAAAABKM/U0T6_ho-BPg/s320/PSGed_v204b_minipianowin.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;He parado el proyecto del PSGed V2.&lt;br /&gt;La idea era de hacer una aplicación musical, evolucionando la primera versión del PSGed. Aunque mi propósito inicial siempre ha sido el de meterme en algo más complejo como un tracker, he querido probar en un proyecto intermedio para ir aprendiendo y por esa razón programé un player en assembler basado en estados de los registros del AY por pasos de la secuencia, pero sin soporte de instrumentos. El problema lo encontré una vez creada la interfaz gráfica, ya que esta forma de trabajar se convertía en una tarea incomoda y compleja, a pesar de mis esfuerzos añadiendo funcionalidades para agilizar su uso.&lt;br /&gt;Por esta razón he decidido iniciar un nuevo proyecto utilizando un player que cumpla con los requisitos que necesito para hacer la aplicación que busco.&lt;br /&gt;De todas formas, la experiencia ha sido muy positiva. He aprendido bastante de C, Asm y del hardware del MSX. Internamente el código es mucho más optimo que la primera versión del PSGed.&lt;br /&gt;Es posible que arregle algunos temas y la publique para que podáis probarla.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-2107170061473474925?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/2107170061473474925/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2011/07/psged-v2-parado.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/2107170061473474925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/2107170061473474925'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2011/07/psged-v2-parado.html' title='PSGed V2 parado!'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/--6roTJ1x7gc/TZzHzQjvZzI/AAAAAAAABKM/U0T6_ho-BPg/s72-c/PSGed_v204b_minipianowin.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-1366735132713943583</id><published>2011-03-07T04:30:00.000-08:00</published><updated>2011-03-07T04:30:43.107-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Información'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Tablas de registros del AY-3-8910</title><content type='html'>He añadido un enlace a la lista de "Documentación" a una página donde muestran varias tablas, con los &lt;a href="http://www.vdsteenoven.com/aquarius/psgprog.html"&gt;registros del AY-3-8910&lt;/a&gt; y de las envolventes. Me ha gustado mucho por lo compactas y completas que son estas tablas. La parte de programación especifica, no hacer caso, ya que esta relacionada al ordenador Mattel Aquarius.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-1366735132713943583?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/1366735132713943583/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2011/03/tablas-de-registros-del-ay-3-8910.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/1366735132713943583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/1366735132713943583'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2011/03/tablas-de-registros-del-ay-3-8910.html' title='Tablas de registros del AY-3-8910'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-4655933783136474549</id><published>2011-03-04T11:54:00.000-08:00</published><updated>2011-03-04T11:54:44.915-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='&quot;Prueba de sonido&quot;'/><title type='text'>PSGed v2.01alfa Prueba de sonido</title><content type='html'>Prueba con una versión alfa del PSGed V2. Usa dos canales. El canal A, utiliza una envolvente cíclica y solo varia la frecuencia de esta, generando un tono (sin usar frecuencia de tono!!). En el canal B, utiliza una nota como bassdrum y ruido como hi-hat.&lt;br /&gt;&lt;i&gt;Test with an alpha version of PSGed V2. Uses two channels. The channel A, using a cyclic envelope and only varies the frequency of generating a tone (tone frequency unused!). On channel B, using a tone as bassdrum and noise for hi-hat.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-LOE76u8Eerg/TXFCI7pWJwI/AAAAAAAABH4/42eQZwWARjY/s1600/AY38910_onda_freqEnv.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="104" src="https://lh3.googleusercontent.com/-LOE76u8Eerg/TXFCI7pWJwI/AAAAAAAABH4/42eQZwWARjY/s320/AY38910_onda_freqEnv.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;Forma de onda, obtenida con la envolvente, sin tono.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;Waveform obtained with the envelope, without tone.&lt;/span&gt;&lt;/div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;object height="81" width="100%"&gt; &lt;param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F11462167&amp;amp;show_comments=true&amp;amp;auto_play=false&amp;amp;color=2809ff"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F11462167&amp;amp;show_comments=true&amp;amp;auto_play=false&amp;amp;color=2809ff" type="application/x-shockwave-flash" width="100%"&gt;&lt;/embed&gt; &lt;/object&gt;   &lt;a href="http://soundcloud.com/aorante/psged-v2-01alfa-test00"&gt;PSGed v2.01alfa test00&lt;/a&gt; by &lt;a href="http://soundcloud.com/aorante"&gt;aorante&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;NOTA:&lt;/b&gt; Test realizado en el emulador BlueMSX. Pendiente de probar en un MSX real.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-4655933783136474549?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/4655933783136474549/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2011/03/psged-v201alfa-prueba-de-sonido.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/4655933783136474549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/4655933783136474549'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2011/03/psged-v201alfa-prueba-de-sonido.html' title='PSGed v2.01alfa Prueba de sonido'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh3.googleusercontent.com/-LOE76u8Eerg/TXFCI7pWJwI/AAAAAAAABH4/42eQZwWARjY/s72-c/AY38910_onda_freqEnv.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-8906015689338151278</id><published>2011-02-05T04:56:00.000-08:00</published><updated>2011-02-05T05:11:30.622-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Información'/><title type='text'>PSGed V2, programando!</title><content type='html'>Después de parar unas semanas para dedicarme a otro proyecto, he reanudado esta nueva versión del PSGed. Ya tengo prácticamente acabado la gestión del interfaz y el acceso a los datos. He podido trabajar de una forma diferente con los datos, optimizando bastante el código, gracias a la ayuda que he recibido de &lt;a href="http://msx.atlantes.org/index_es.html"&gt;Avelino Herrera&lt;/a&gt;. Esto me puede ayudar mucho en próximos proyectos, donde el volumen de datos puede crecer (ejem. &lt;a href="http://en.wikipedia.org/wiki/Konami_SCC"&gt;SCC&lt;/a&gt;). La próxima semana me dedicaré a terminar lo que me falta y ya podré empezar a programar el player utilizando assembler.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;After stopping a few weeks to devote to another project, I restarted this new version of PSGed. Since I have almost finished the interface management and access to data. I could work differently with the data, optimizing the code pretty, thanks to the help I received from &lt;a href="http://msx.atlantes.org/index_en.html"&gt;Avelino Herrera&lt;/a&gt;. This can help me a lot in future projects where it can grow the volume of data (eg &lt;a href="http://en.wikipedia.org/wiki/Konami_SCC"&gt;SCC&lt;/a&gt;). Next week I will dedicate myself to finish some functionality and I want to program the player using assembler.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-8906015689338151278?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/8906015689338151278/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2011/02/psged-v2-programando.html#comment-form' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/8906015689338151278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/8906015689338151278'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2011/02/psged-v2-programando.html' title='PSGed V2, programando!'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-5233364406068820210</id><published>2011-01-05T02:40:00.000-08:00</published><updated>2011-01-05T02:52:54.763-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Diseño'/><category scheme='http://www.blogger.com/atom/ns#' term='GUI'/><title type='text'>Trabajando en la v2</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_82S9Tngrad8/TSN4-8btHOI/AAAAAAAABFo/vYBYxAcUwIA/PSGed_v201bios.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_82S9Tngrad8/TSN4-8btHOI/AAAAAAAABFo/vYBYxAcUwIA/PSGed_v201bios.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Mientras me ayudan en el desarrollo del controlador de pots, he empezado bastante ilusionado una nueva versión del PSGed, con más posibilidades para la elaboración musical. En estos momentos estoy trabajando en el diseño y funcionamiento de la interfaz.&lt;br /&gt;&lt;br /&gt;While helping me with the pots driver development, I have started a new version of PSGed. This will have more features for music creation. I am currently working on the design and operation of the interface.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-5233364406068820210?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/5233364406068820210/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2011/01/trabajando-en-la-v2.html#comment-form' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/5233364406068820210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/5233364406068820210'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2011/01/trabajando-en-la-v2.html' title='Trabajando en la v2'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_82S9Tngrad8/TSN4-8btHOI/AAAAAAAABFo/vYBYxAcUwIA/s72-c/PSGed_v201bios.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-1815438122203126014</id><published>2010-12-13T04:00:00.000-08:00</published><updated>2010-12-13T04:00:00.934-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='Información'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><title type='text'>Test 1 con potenciometros</title><content type='html'>Ha llegado la hora de probar el tema de los potenciometros con el MSX. &lt;br /&gt;Para ello he utilizado el &lt;a href="http://hotbit.blogspot.com/search/label/Paddle"&gt;circuito del blog HotBit&lt;/a&gt;, con el que se puede construir un controlador tipo &lt;a href="http://es.wikipedia.org/wiki/Paddle_%28controlador_de_videojuegos%29"&gt;paddle&lt;/a&gt;. Estos se utilizaron en consolas antiguas en juegos tipo Pong, y para el MSX (que yo sepa), solo se uso en el juego Arkanoid 2 que se incluía junto al cartucho . Pero el caso es que los MSX tiene una ventaja ante otros ordenadores, ya que en un solo puerto de joystick permite conectar hasta 6 paddles!!&lt;br /&gt;&lt;br /&gt;También podéis encontrar más información sobre el funcionamiento, en el documento "MSX Technical Data Book" en el punto 1.4.7 (pag.28).&lt;br /&gt;&lt;br /&gt;Para este test he comprado los componentes para montar un solo paddle, sobre una protoboard. Una vez montado lo he conectado a un MSX y he creado un pequeño programa en basic, utilizando la&amp;nbsp; instrucción PDL.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;v = PDL(n)&lt;/div&gt;&lt;br /&gt;Donde n es un valor del 1 al 12 y el resultado un numérico de 0 a 255. Cuando n sea un número impar, se corresponderán a los que se encuentren conectados en el puerto A y los pares en el B.&lt;br /&gt;&lt;br /&gt;También hay una función equivalente en la BIOS, la GTPDL (h00DE), donde en el acumulador se le proporciona el número de paddle y en este mismo se obtiene el resultado.&lt;br /&gt;&lt;br /&gt;El programa usado para el test es el siguiente:&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: paleturquoise; display: block; font-family: 'Courier New',Courier,monospace; margin: 10px; padding: 10px;"&gt;10 CLS&lt;br /&gt;20 SOUND 0,0:SOUND 1,1&lt;br /&gt;30 SOUND 7,&amp;amp;B00001000:SOUND 8,15&lt;br /&gt;40 A=PDL(2) ' primer paddle port 2&lt;br /&gt;50 LOCATE 19,10:PRINT A&lt;br /&gt;60 SOUND 0,A&lt;br /&gt;70 GOTO 40&lt;/div&gt;&lt;br /&gt;&lt;object height="266" width="430"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vgzBJUzbb84?fs=1&amp;amp;hl=es_ES&amp;amp;color1=0x3a3a3a&amp;amp;color2=0x999999"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/vgzBJUzbb84?fs=1&amp;amp;hl=es_ES&amp;amp;color1=0x3a3a3a&amp;amp;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="430" height="266"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-1815438122203126014?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/1815438122203126014/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/12/test-1-con-potenciometros.html#comment-form' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/1815438122203126014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/1815438122203126014'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/12/test-1-con-potenciometros.html' title='Test 1 con potenciometros'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-2476359759245121102</id><published>2010-11-23T06:43:00.000-08:00</published><updated>2010-11-23T06:43:34.590-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='Información'/><title type='text'>Demo con el PSGed v0.8b</title><content type='html'>Ayer me puse un rato a probar con el PSGed, de conseguir un efecto de sonido característico del &lt;a href="http://es.wikipedia.org/wiki/General_Instrument_AY-3-8910"&gt;AY-3-8910&lt;/a&gt;, que se produce al aplicar una envolvente cíclica sobre determinadas frecuencias del tono de onda cuadrada. EL resultado es el que aparece en el vídeo. &lt;br /&gt;A demás, esta prueba me ha permitido detectar algunos puntos deficientes del software, que afectan a la modificación en tiempo real de algunos registros.  Quiero mejorarlo y crear una versión, antes de ponerme con las funcionalidades que me faltan.&lt;br /&gt;También espero vuestras opiniones para ayudarme a mejorarlo. :)&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/n2-w72PIM-c?fs=1&amp;amp;hl=es_ES&amp;amp;color1=0x3a3a3a&amp;amp;color2=0x999999"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/n2-w72PIM-c?fs=1&amp;amp;hl=es_ES&amp;amp;color1=0x3a3a3a&amp;amp;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Yesterday I got a while to try the PSGed in getting a sound effect characteristic of &lt;a href="http://en.wikipedia.org/wiki/General_Instrument_AY-3-8910"&gt;AY-3-8910&lt;/a&gt; which is produced by applying a cyclic envelope on certain frequency square wave tone. The result is what appears in the video.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;In addition, this test has allowed me to detect some weak points in the software that affect real-time modification of some registers. I want to improve and create a version before starting to work with missing features.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;I also hope your opinions to help improve it.&lt;/i&gt; :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-2476359759245121102?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/2476359759245121102/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/11/demo-con-el-psged-v08b.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/2476359759245121102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/2476359759245121102'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/11/demo-con-el-psged-v08b.html' title='Demo con el PSGed v0.8b'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-785920612892389299</id><published>2010-11-20T14:38:00.000-08:00</published><updated>2010-11-20T14:38:22.209-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='version'/><title type='text'>Versión 0.8b disponible!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_82S9Tngrad8/TMLfBha0McI/AAAAAAAAA98/V4IN4ooxEUk/s1600/PSGed_22_v074b_MSX2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_82S9Tngrad8/TMLfBha0McI/AAAAAAAAA98/V4IN4ooxEUk/s1600/PSGed_22_v074b_MSX2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Ya podéis descargar la versión 0.8b del PSGed.&lt;br /&gt;En los últimos meses, he mejorado la funcionalidad del secuenciador junto con otros temas que tenia pendientes, pero sobretodo, he trabajado la parte de la información, abriendo un proyecto en Google Code y añadiendole a la wiki, el &lt;a href="http://code.google.com/p/psged/wiki/ES_Indice"&gt;manual de uso&lt;/a&gt; y la &lt;a href="http://code.google.com/p/psged/wiki/ES_tasklist"&gt;lista de tareas&lt;/a&gt;.&lt;br /&gt;También, he reestructurado el código para hacerlo más reutilizable.&lt;br /&gt;Esta versión no permite guardar el trabajo realizado a un fichero, aunque le he añadido el volcado de valores de los registros, por si queréis utilizarlo para desarrollar efectos con el PSG para usarlos en vuestros programas.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/psged/"&gt;PSGed&lt;/a&gt;&amp;nbsp;en GoogleCode!&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;i&gt;Now you can download the version 0.8b of PSGed.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;In recent months, I have improved the functionality of the sequencer along with other outstanding issues had, but I've also worked on the piece of information, opening a project on Google Code and adding to the wiki, the &lt;a href="http://code.google.com/p/psged/wiki/Index"&gt;user manual&lt;/a&gt; and the &lt;a href="http://code.google.com/p/psged/wiki/EN_tasklist"&gt;task list&lt;/a&gt;.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Also, I restructured the code to make it reusable.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;This version can not save the work done to a file, but I've added the dump register values, if you want to use it to develop effects with the PSG for use in your programs.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/psged/"&gt;&lt;i&gt;PSGed&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&amp;nbsp;in GoogleCode!&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-785920612892389299?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/785920612892389299/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/11/version-08b-disponible.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/785920612892389299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/785920612892389299'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/11/version-08b-disponible.html' title='Versión 0.8b disponible!'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_82S9Tngrad8/TMLfBha0McI/AAAAAAAAA98/V4IN4ooxEUk/s72-c/PSGed_22_v074b_MSX2.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-3933441003168898262</id><published>2010-11-19T03:17:00.000-08:00</published><updated>2010-11-19T03:17:52.471-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Miscelanea'/><title type='text'>Presentación del PSGed v08b</title><content type='html'>Mañana se realizará el chiptune stage v2 organizado por el club sprite, donde se charlará sobre la subcultura del &lt;a href="http://en.wikipedia.org/wiki/Chiptune"&gt;chiptune&lt;/a&gt;/música&amp;nbsp;8bits y se mostrarán novedades hardware y software. Aprovecharé la ocasión para publicar y presentar la versión 0.8b del PSGed.&lt;br /&gt;&lt;br /&gt;Para más info del evento consultar la web del &lt;a href="http://www.clubsprite.net/noticias/49/NUEVO-Chiptune-Stage-V2-8bits-music.html"&gt;club-sprite&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-3933441003168898262?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/3933441003168898262/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/11/presentacion-del-psged-v08b.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/3933441003168898262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/3933441003168898262'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/11/presentacion-del-psged-v08b.html' title='Presentación del PSGed v08b'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-396203795763979167</id><published>2010-11-12T12:25:00.000-08:00</published><updated>2010-11-13T07:33:18.162-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='&quot;Prueba de sonido&quot;'/><title type='text'>neuroflip - minimalTech</title><content type='html'>Aquí está el primer tema elaborado, creado por &lt;a href="http://a1200.wordpress.com/"&gt;neuroflip&lt;/a&gt;, que será la segunda demo incluida en el PSGed. Es de estilo Techno minimalista y podemos observar que sigue un patrón rítmico &lt;a href="http://es.wikipedia.org/wiki/Four-on-the-floor"&gt;&lt;i&gt;Four on the floor&lt;/i&gt;&lt;/a&gt; (4/4), a 126 BPMs, que a partir de la intro va evolucionando hasta que hace un cambio a la melodía principal del tema y finaliza de forma que pueda enlazar con el inicio. Utiliza un canal para el bombo, otro para el charles usando el canal de ruido y el último para un bajo muy bien conseguido, que fluctúa (&lt;a href="http://en.wikipedia.org/wiki/Wah-wah_(music)"&gt;efecto &lt;i&gt;wah-wah&lt;/i&gt;&lt;/a&gt;), gracias a que usa una envolvente tipo triangular.&lt;br /&gt;&lt;br /&gt;Me ha sorprendido mucho, ya que mi intención inicial con el PSGed era solo la de poder jugar con los registros del AY-3-8910 y aunque le he ido añadiendo funcionalidad, este tema supera mis expectativas. Queda demostrado que la imaginación junto con la experiencia del usuario, es lo que le da vida a una herramienta...&lt;br /&gt;&lt;br /&gt;&lt;object height="81" width="100%"&gt; &lt;param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F6925984&amp;amp;show_comments=true&amp;amp;auto_play=false&amp;amp;color=2809ff"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F6925984&amp;amp;show_comments=true&amp;amp;auto_play=false&amp;amp;color=2809ff" type="application/x-shockwave-flash" width="100%"&gt;&lt;/embed&gt; &lt;/object&gt;   &lt;a href="http://soundcloud.com/aorante/neuroflip-minimal-tech-psged"&gt;neuroflip - minimalTech&lt;/a&gt; by &lt;a href="http://soundcloud.com/aorante"&gt;aorante&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Here is the first full track, created by neuroflip, which will be the second demo, which includes the PSGed. The song is Techno minimalist style can be seen that follows a rhythmic pattern Four on the floor (4 / 4), at 126 BPM, which from the intro evolves until it makes a change to the main melody the topic and ends so that it can bind to boot. Uses a channel for the bassdrum, one for the hi-hat, using the noise channel and the last achieved a very good bass with a wah-wah efect, by using a triangular envelope.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;I was very surprised, because my initial intention was only the PSGed you can play with the registers of AY-3-8910 and although I have been added functionality, this issue is beyond my expectations. We demonstrate that imagination along with the user experience is what gives life to a tool ...&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-396203795763979167?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/396203795763979167/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/11/neuroflip-minimaltech.html#comment-form' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/396203795763979167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/396203795763979167'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/11/neuroflip-minimaltech.html' title='neuroflip - minimalTech'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-3577083901676276951</id><published>2010-09-06T07:00:00.000-07:00</published><updated>2010-09-06T07:00:40.940-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Diseño'/><title type='text'>Nuevo logo del PSGed!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;background-color:#ffffff"&gt;&lt;a href="http://lh5.ggpht.com/_82S9Tngrad8/TITYV309PuI/AAAAAAAAA6I/H-0EtCwz4uw/PSGed_logo02_400x128x16_tra.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="128" src="http://lh5.ggpht.com/_82S9Tngrad8/TITYV309PuI/AAAAAAAAA6I/H-0EtCwz4uw/PSGed_logo02_400x128x16_tra.png" width="420" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Aprovechando que estoy poniendo apunto la web del proyecto, he realizado el logo en mayor resolución y le he añadido algunos cambios:&lt;br /&gt;&lt;br /&gt;Las 3 formas rectangulares de color magenta, representan los tres canales del PSG, pero le faltaba algo: el generador de ruido blanco... Al nuevo recuadro le he aplicado un efecto de ruido, para que se entienda mejor el simbolismo que le quiero dar al logo.&lt;br /&gt;&lt;br /&gt;También le he añadido el texto "AY-3-8910 Sound Editor" para reforzar el significado, y el símbolo del copyleft... (da un toque más serio ;) ).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-3577083901676276951?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/3577083901676276951/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/09/nuevo-logo-del-psged.html#comment-form' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/3577083901676276951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/3577083901676276951'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/09/nuevo-logo-del-psged.html' title='Nuevo logo del PSGed!'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_82S9Tngrad8/TITYV309PuI/AAAAAAAAA6I/H-0EtCwz4uw/s72-c/PSGed_logo02_400x128x16_tra.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-8749195995402678003</id><published>2010-07-13T07:00:00.000-07:00</published><updated>2010-07-13T07:00:49.579-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Miscelanea'/><category scheme='http://www.blogger.com/atom/ns#' term='&quot;Prueba de sonido&quot;'/><title type='text'>Primera demo de una canción</title><content type='html'>En la primera versión que haré publica, tendrá 3 demos, que sirve para poder ver las posibilidades y como ayuda para el aprendizaje.&lt;br /&gt;La primera demo, que he realizado la podéis escuchar en el player incluido en este post. La he pasado a formato digital (wav), mediante la opción de "Captuta Audio" del blueMSX. No se por que, pero al comprimirse, se produce una distorsión, que provoca que no suene del todo bien. De todas formas, ya sirve para que os hagáis una idea.&lt;br /&gt;&lt;br /&gt;&lt;object height="81" width="100%"&gt; &lt;param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Faorante%2Fpsged-v07b-demo001-song&amp;amp;show_comments=true&amp;amp;auto_play=false&amp;amp;color=ff7700"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Faorante%2Fpsged-v07b-demo001-song&amp;amp;show_comments=true&amp;amp;auto_play=false&amp;amp;color=ff7700" type="application/x-shockwave-flash" width="100%"&gt;&lt;/embed&gt; &lt;/object&gt;   &lt;a href="http://soundcloud.com/aorante/psged-v07b-demo001-song"&gt;PSGed v07b demo001 song&lt;/a&gt; by &lt;a href="http://soundcloud.com/aorante"&gt;aorante&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-8749195995402678003?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/8749195995402678003/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/07/primera-demo-de-una-cancion.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/8749195995402678003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/8749195995402678003'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/07/primera-demo-de-una-cancion.html' title='Primera demo de una canción'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-4363777363453963844</id><published>2010-07-02T03:39:00.000-07:00</published><updated>2010-07-02T03:39:19.299-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GUI'/><title type='text'>Añadiendo un control tipo ComboBox</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_82S9Tngrad8/TC3BjkARkgI/AAAAAAAAA3I/yj8nBdwrMTU/s1600/PSGed_v07a_combobox.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_82S9Tngrad8/TC3BjkARkgI/AAAAAAAAA3I/yj8nBdwrMTU/s320/PSGed_v07a_combobox.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Para mejorar la elección del tipo de envolvente, he cambiado el control basado en dos botones de incremento/decremento, por un &lt;a href="http://en.wikipedia.org/wiki/Combo_box"&gt;Combo box&lt;/a&gt;. En realidad el termino correcto seria "drop-down list", ya que en este caso no dispone de un campo de entrada, pero uso "combobox", ya que es la forma más común de denominarlo.&lt;br /&gt;&lt;br /&gt;El control no es más que una función que muestra la lista de las envolventes, con su valor correspondiente al del registro 13 y su forma. Muestra todos los valores y no tiene barra de scroll. Se queda esperando a que pulsemos el primer botón sobre una de las opciones o a la tecla [Esc] para dejar el valor actual.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-4363777363453963844?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/4363777363453963844/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/07/anadiendo-un-control-tipo-combobox.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/4363777363453963844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/4363777363453963844'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/07/anadiendo-un-control-tipo-combobox.html' title='Añadiendo un control tipo ComboBox'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_82S9Tngrad8/TC3BjkARkgI/AAAAAAAAA3I/yj8nBdwrMTU/s72-c/PSGed_v07a_combobox.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-4933686862069519769</id><published>2010-07-01T04:11:00.000-07:00</published><updated>2010-07-01T04:11:23.794-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Información'/><title type='text'>Configurando el PSGed!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_82S9Tngrad8/TCx2jsUuoCI/AAAAAAAAA3A/Rzm_oadWevA/s1600/PSGed_v062a_0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_82S9Tngrad8/TCx2jsUuoCI/AAAAAAAAA3A/Rzm_oadWevA/s320/PSGed_v062a_0.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Lo último que le he añadido es una mejora en la presentación, la posibilidad de poder usar el PSG del MegaFlashROM SCC+ y una ventana de configuración (F2), para tocar todo esto a demás de permitirnos &amp;nbsp;cambiar el dispositivo de control (ver captura de pantalla).&lt;br /&gt;&lt;br /&gt;Ahora cuando se ejecuta el PSGed, una de las primeras cosas que hace es detectar si se esta utilizando un modelo superior al MSX1. Si es afirmativo aprovecha el VDP V9938 (o superiores), cambiando la paleta de colores en screen 2, por una mejor (o al menos eso creo yo &lt;b&gt;;)&lt;/b&gt; ). &lt;br /&gt;&lt;br /&gt;De todas formas, si tenemos un MSX1 con el V9938, como el Yamaha CX5MII o el Spectravideo SVI-738, podemos utilizarlo accediendo a la ventana de configuración. &lt;br /&gt;&lt;br /&gt;Nota: El cambiar el tipo de VDP o de PSG, sin disponer de estos, puede provocar comportamientos imprevisibles. &lt;b&gt;XP&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-4933686862069519769?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/4933686862069519769/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/07/configurando-el-psged.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/4933686862069519769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/4933686862069519769'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/07/configurando-el-psged.html' title='Configurando el PSGed!'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_82S9Tngrad8/TCx2jsUuoCI/AAAAAAAAA3A/Rzm_oadWevA/s72-c/PSGed_v062a_0.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-4424242723833109076</id><published>2010-06-28T09:34:00.000-07:00</published><updated>2010-06-28T09:34:28.149-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Información'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Music Module (MSX AUDIO)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_82S9Tngrad8/TCjGeY9Vj0I/AAAAAAAAA24/5KDxK_TdGUw/s1600/DSCN1018_400p.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="321" src="http://1.bp.blogspot.com/_82S9Tngrad8/TCjGeY9Vj0I/AAAAAAAAA24/5KDxK_TdGUw/s400/DSCN1018_400p.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Después de investigar durante un tiempo los diferentes chips de audio de MSX, me acabo de convencer la demo que hizo &lt;a href="http://paxblog.blogcindario.com/"&gt;MsxKun&lt;/a&gt; del Music Module, en el &lt;a href="http://psged.blogspot.com/2010/05/club-sprite-chiptune-stage.html"&gt;club sprite&lt;/a&gt;. Así que uno de los propósitos que tenia para la pasada RU era de conseguir uno de segunda mano y hubo suerte!  :D&lt;br /&gt;También tuve la suerte de contar con &lt;a href="http://www.xenonsoft.es/"&gt;Xenon&lt;/a&gt; para enseñarme algunas cosas que desconocía, sobre este hardware. Muchas gracias a los dos por su ayuda!&lt;br /&gt;&lt;br /&gt;El Music Module utiliza el chip de audio yamaha &lt;a href="http://en.wikipedia.org/wiki/Yamaha_Y8950"&gt;Y8950&lt;/a&gt;, también denominado &lt;a href="http://www.faq.msxnet.org/msxaudio.html"&gt;MSX Audio&lt;/a&gt;. Básicamente es un OPL compatible (&lt;a href="http://en.wikipedia.org/wiki/YM3526"&gt;YM3526&lt;/a&gt;), que añade un capturador/generador de sonido digital &lt;a href="http://es.wikipedia.org/wiki/Modulaci%C3%B3n_por_impulsos_codificados"&gt;PCM&lt;/a&gt; de 8 bits pero con unas características peculiares. Se creo&amp;nbsp;como un estándar&amp;nbsp;específico para los MSX, pero fuera de los cartuchos, ninguna marca lo incluyo en sus ordenadores. Es similar, aunque no compatible, con el &lt;a href="http://es.wikipedia.org/wiki/Yamaha_YM2413"&gt;YM2413&lt;/a&gt;&amp;nbsp;(&lt;a href="http://www.faq.msxnet.org/fmpac.html"&gt;MSX Music, OPLL, FM-pac&lt;/a&gt;), que es una versión bastante recortada del OPL, que supuestamente se adapto al sistema por ser más económico.&lt;br /&gt;&lt;br /&gt;El&amp;nbsp;Y8950&amp;nbsp;fue utilizado en 3 cartuchos:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Philips NMS-1205 Music Module&lt;/li&gt;&lt;li&gt;Toshiba HX-MU900 MSX Music System&lt;/li&gt;&lt;li&gt;Panasonic FS-CA1 MSX-Audio&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_82S9Tngrad8/TCjGVvKWmEI/AAAAAAAAA2w/HWsM8zS78p4/s1600/chipY8950.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="118" src="http://3.bp.blogspot.com/_82S9Tngrad8/TCjGVvKWmEI/AAAAAAAAA2w/HWsM8zS78p4/s320/chipY8950.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: small;"&gt;Algunas de las características del&amp;nbsp;Y8950&amp;nbsp;son:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: arial; font-size: small;"&gt;&lt;ul&gt;&lt;li&gt;Dos modos de funcionamiento (compatible con el OPL):&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;blockquote class="webkit-indent-blockquote" style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; font-family: arial; font-size: small; margin-bottom: 0px; margin-left: 40px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div&gt;a) 9 canales de sonido FM&amp;nbsp;&lt;/div&gt;&lt;div&gt;b) 6&amp;nbsp;canales de sonido FM + 5 de&amp;nbsp;percusión&amp;nbsp;FM.&lt;/div&gt;&lt;/blockquote&gt;&lt;div style="font-family: arial; font-size: small;"&gt;&lt;ul&gt;&lt;li&gt;Un canal de 4-bit ADPCM (Advanced&amp;nbsp;Differential&amp;nbsp;Pulse&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;Code&amp;nbsp;Modulation) con un sampling rate de 1,8kHz a 16kHz de captura, que se convierten en 1,8kHz a 50kHz en reproducción. Soporta hasta 256kB de RAM externa para samples. Funciona como un canal de 8bits PCM ya que utiliza un sistema de codificación para que las muestras ocupen menos memoria.&lt;/li&gt;&lt;li&gt;Conversores AD/DA.&lt;/li&gt;&lt;li&gt;Puertos de I/O de 8bits para control de teclados.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;El Music Module además dispone de las siguientes características:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;32kB de RAM para muestras ADPCM.&lt;/li&gt;&lt;li&gt;Interfaz MIDI (in/out/thru).&lt;/li&gt;&lt;li&gt;conector para el teclado musical NMS-1160.&lt;/li&gt;&lt;li&gt;2 conectores RCA de salida de audio mono.&lt;/li&gt;&lt;li&gt;1 conector RCA de entrada de linea.&lt;/li&gt;&lt;li&gt;1 conector RCA para micrófono.&lt;/li&gt;&lt;li&gt;Micrófono interno.&lt;/li&gt;&lt;li&gt;Dispone del soft&amp;nbsp;Music-Box&amp;nbsp;en ROM.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Aunque disponga de salida de audio, también se mezcla internamente con el PSG y se puede escuchar por la salida del ordenador.&lt;br /&gt;&lt;br /&gt;Mi intención es aprender a programarlo y hacer un software tipo groovebox (caja de ritmos + línea de bajos), que utilice el Y8950 con una interfaz gráfica basada en la del PSGed.&lt;br /&gt;&lt;br /&gt;Más info:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Yamaha&amp;nbsp;Y8950 &lt;a href="http://msxinfo.msxblue.com/msxdocs/Y8950.pdf"&gt;Datasheet&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Yamaha&amp;nbsp;Y8950 &lt;a href="http://msxinfo.msxblue.com/msxdocs/chipsy8950am.pdf"&gt;Manual de aplicación&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Yamaha &lt;a href="http://en.wikipedia.org/wiki/Yamaha_Y8950"&gt;Y8950&lt;/a&gt;&amp;nbsp;MSX Audio&lt;/li&gt;&lt;li&gt;Yamaha &lt;a href="http://es.wikipedia.org/wiki/Yamaha_YM2413"&gt;YM2413&lt;/a&gt;&amp;nbsp;OPLL&lt;/li&gt;&lt;li&gt;Yamaha &lt;a href="http://en.wikipedia.org/wiki/YM3526"&gt;YM3526&lt;/a&gt;&amp;nbsp;OPL&lt;/li&gt;&lt;li&gt;Yamaha &lt;a href="http://es.wikipedia.org/wiki/Yamaha_YM3812"&gt;YM3812&lt;/a&gt; OPL2&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-4424242723833109076?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/4424242723833109076/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/06/music-module-msx-audio.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/4424242723833109076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/4424242723833109076'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/06/music-module-msx-audio.html' title='Music Module (MSX AUDIO)'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_82S9Tngrad8/TCjGeY9Vj0I/AAAAAAAAA24/5KDxK_TdGUw/s72-c/DSCN1018_400p.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-7719032186580311599</id><published>2010-06-05T12:42:00.000-07:00</published><updated>2010-06-05T12:42:35.791-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GUI'/><title type='text'>Mejorando el secuenciador</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_82S9Tngrad8/TAqMrlL04NI/AAAAAAAAA1w/-Kacrpjssu0/s1600/aorante+PSG+ed+v061a.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_82S9Tngrad8/TAqMrlL04NI/AAAAAAAAA1w/-Kacrpjssu0/s320/aorante+PSG+ed+v061a.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Siguiendo el consejo de &lt;a href="http://a1200.wordpress.com/"&gt;neuroflip&lt;/a&gt;, me he dedicado a mejorar el secuenciador, durante las últimas semanas. Ahora permite editar hasta 16 patrones diferentes y secuenciarlos con un máximo de 32 pasos. Esto nos permite la construcción de temas. También he añadido herramientas para copiar y borrar patrones, que se muestran en ventanas modales sobre la pantalla principal.&lt;br /&gt;Una vez terminada esta funcionalidad, pensé en añadir alguna nota para dar más juego, pero de una forma que no complicase en exceso la edición del patrón. Esta nueva funcionalidad se consigue pulsando varias veces sobre una posición, con lo que se añade una nota y dos variaciones de esta.&lt;br /&gt;Por último, por sugerencia de JamQue, he añadido una nota de silencio. Esta nos sera muy útil cuando no usemos los envolventes, ya que al quedarse la nota sonando infinitamente, podremos interrumpirla.&lt;br /&gt;Todo esto me ha obligado hacer cambios en la interfaz gráfica (lo que más me gusta :D ). &lt;br /&gt;Primero he modificado la distribución de la frecuencia de ruido y los datos de la envolvente, para ganar una linea de tiles (8 pixeles).&lt;br /&gt;Debajo he creado una nueva subdivisión para separar la información de la secuencia en la parte izquierda, del editor de patrón y he colocado los botones para la reproducción del tema, a la derecha de la última línea.&lt;br /&gt;Ya de paso, he cambiado los botones de incremento y decremento de valores, ya que al estar distanciados, eran incómodos. También han mejorado su comprensión, ya que ahora se muestran con los símbolos de más y menos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-7719032186580311599?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/7719032186580311599/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/06/mejorando-el-secuenciador.html#comment-form' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/7719032186580311599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/7719032186580311599'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/06/mejorando-el-secuenciador.html' title='Mejorando el secuenciador'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_82S9Tngrad8/TAqMrlL04NI/AAAAAAAAA1w/-Kacrpjssu0/s72-c/aorante+PSG+ed+v061a.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-1513569231918941788</id><published>2010-06-03T04:42:00.000-07:00</published><updated>2010-06-28T13:05:44.183-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Información'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>MegaFlashROM SCC+ 1024K</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_82S9Tngrad8/TAeSusYvHmI/AAAAAAAAA1o/gbq4P_sHmg4/s1600/MEGAFLASHROM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_82S9Tngrad8/TAeSusYvHmI/AAAAAAAAA1o/gbq4P_sHmg4/s320/MEGAFLASHROM.png" /&gt;&lt;/a&gt;&lt;/div&gt;He adquirido este cartucho, pensando en el PSGed y en futuras aplicaciones.&lt;br /&gt;Hoy me ha llegado y lo he probado con mi Yamaha MSX1 CX5MII/128, junto con una LPE-MMC-V7 y me ha funcionado perfectamente!!! Lo único que hay que tener en cuenta, es que la tecla que utilizan ambos cartuchos para inhabilitarse, es la [Esc]. Para solventar este problema, el MegaFlashROM permite configurar la tecla cuando se guarda una ROM. Yo he usado la tecla [Ins].&lt;br /&gt;El sonido del SCC+ suena muy bien. No he apreciado ninguna diferencia con el original. &lt;br /&gt;Le he instalado el PSGed y lo he podido probar, pero con el PSG del MSX. Quiero añadir un menú de configuración para poder elegir entre los dos procesadores de sonido.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Más info en &lt;a href="http://www.msxcartridgeshop.com/"&gt;MSX Cartridge Shop&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-1513569231918941788?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/1513569231918941788/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/06/megaflashrom-scc-1024k.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/1513569231918941788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/1513569231918941788'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/06/megaflashrom-scc-1024k.html' title='MegaFlashROM SCC+ 1024K'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_82S9Tngrad8/TAeSusYvHmI/AAAAAAAAA1o/gbq4P_sHmg4/s72-c/MEGAFLASHROM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-1213555223811612474</id><published>2010-05-30T11:55:00.000-07:00</published><updated>2010-05-30T11:55:59.879-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><title type='text'>Sincronizando!</title><content type='html'>Un punto importante un cualquier programa donde se reproduzca música, es que esta se escuche siguiendo sus tiempos, si no el resultado podría ser algo desagradable... :P&lt;br /&gt;&lt;br /&gt;Para conseguir esto, necesitamos sincronizar la ejecución de nuestro programa y en MSX se utilizan las interrupciones del Z80.&lt;br /&gt;&lt;br /&gt;He investigado un poco el tema, y he encontrado unas funciones en la web de Avelino (&lt;a href="http://msx.atlantes.org/index_es.html#sdccmsxdos"&gt;interrupt.s&lt;/a&gt;), pensadas para cuando se trabaja en MSX-DOS. Estas se puede adaptar para el caso de trabajar en formato ROM, con la solución dada por SapphiRe (&lt;a href="http://karoshi.auic.es/index.php?topic=212.0"&gt;FD9APATCH.ASM&lt;/a&gt;), en los foros de desarrollo de Karoshi. Todavía no lo he probado, ya que he dado con una solución más propicia para la forma en la que esta programado el PSGed. &lt;br /&gt;&lt;br /&gt;Al principio utilicé una función de Andrear llamada wait_retrace:&lt;br /&gt;&lt;div style="background-color: paleturquoise; display: block; font-family: 'Courier New',Courier,monospace; margin: 10px; padding: 10px;"&gt;&amp;nbsp;&amp;nbsp; di&lt;br /&gt;$3:&lt;br /&gt;&amp;nbsp;&amp;nbsp; in a,(0x99)&lt;br /&gt;&amp;nbsp;&amp;nbsp; and #0x80&lt;br /&gt;&amp;nbsp;&amp;nbsp; cp #0x00&lt;br /&gt;&amp;nbsp;&amp;nbsp; jr z, $3&lt;br /&gt;&amp;nbsp;&amp;nbsp; ei&lt;/div&gt;Esta espera a que finalice el redibujado de la pantalla, para dejar continuar el flujo de ejecución. Haciendo pruebas, vi que en los emuladores y en el onechip, funcionaba perfectamente, pero al probarlo en un MSX real, al reproducir una secuencia, no se escuchaba correctamente. &lt;br /&gt;&lt;br /&gt;Estudiando el articulo de SapphiRe, descubrí una instrucción del z80 (no se mucho de assembler), que podía servirme en sustitución de la función wait_retrace, me refiero a la instrucción "halt". Esta pone en espera la ejecución hasta que se dispara una interrupción. Así que me puse manos a la obra. Primero definí una función en assembler con esta instrucción:&lt;br /&gt;&lt;div style="background-color: paleturquoise; display: block; font-family: 'Courier New',Courier,monospace; margin: 10px; padding: 10px;"&gt;#define  HALT __asm halt __endasm&lt;/div&gt;y luego lo coloqué en el inicio del bucle que controla el play y la interfaz gráfica de la pantalla principal.&lt;br /&gt;&lt;div style="background-color: paleturquoise; display: block; font-family: 'Courier New',Courier,monospace; margin: 10px; padding: 10px;"&gt;while(1)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; HALT;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; //resto del codigo&lt;br /&gt;}&lt;/div&gt;Lo he probado en un MSX y ha funcionado perfectamente! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-1213555223811612474?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/1213555223811612474/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/05/sincronizando.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/1213555223811612474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/1213555223811612474'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/05/sincronizando.html' title='Sincronizando!'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-3274711002733586215</id><published>2010-05-28T12:10:00.000-07:00</published><updated>2010-05-28T12:12:30.944-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><title type='text'>Acceso a funciones Asm desde C</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_82S9Tngrad8/TAAUzj-3M_I/AAAAAAAAA1c/2eF0hGGmCFc/s1600/MSX_MOUSE_SBC3810.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="282" src="http://4.bp.blogspot.com/_82S9Tngrad8/TAAUzj-3M_I/AAAAAAAAA1c/2eF0hGGmCFc/s400/MSX_MOUSE_SBC3810.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Además del "assembler in line" que permite añadir directamente código ensamblador de Z80 en nuestras funciones en C, podemos acceder a funciones incluidas en fuentes totalmente en assembler. Si este código esta creado para compiladores como el asMSX, antes tendremos que adaptarlo para que lo acepte el compilador de SDCC. Algunos de estos cambios son:&lt;br /&gt;Los valores deberán de preceder del caracter almohadilla.&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;0ffh --&amp;gt; #0xFF&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Los corchetes de las instrucciones que apuntan a direcciones de memoria, habrá que cambiarlo por paréntesis.&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ld  a,[#FAFE]  --&amp;gt; ld  a,(#0xFAFE)&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Las variables con la instrucción "equ" por un igual. &lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;initmem equ 0E000h  --&amp;gt; initmem = #0xE000&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;En mi caso, lo he necesitado para utilizar las rutinas de Ramones para el control de ratón.&lt;br /&gt;&lt;br /&gt;Una vez adaptado el código, el siguiente paso, sera marcar de alguna forma, que funciones son a las que queremos acceder desde C. Para ello tendremos que poner al inicio de la etiqueta usada, un subrayado y al final dos veces el caracter de dos puntos.&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;_checkmouse::&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Una vez hecho todo esto compilaremos el fuente, obteniendo un fichero object (".rel"):&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;sdasz80 -o mouse.asm&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Luego desde nuestro editor, crearemos un fichero "header" donde definiremos las funciones que acceden a las de assembler. Utilizaremos la instrucción "extern" y pondremos el nombre de la etiqueta sin los caracteres añadidos (el tema parámetros, en estos momentos desconozco como funciona).&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;extern void checkmouse(void);&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Incluiremos el include en nuestro fuente y llamaremos a la función utilizando el nombre dado en la definición.&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;checkmouse();&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Para finalizar, compilaremos nuestro proyecto incluyendo el objet:&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;sdcc -mz80 -o --no-std-crt0 --code-loc 0x4010 --data-loc 0xC000 mouse.rel  PSGed_v06a.c&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Para conseguir este "item", quiero agradecer la ayuda de Andrear, Ramones y &lt;a href="http://msx.atlantes.org/index_es.html"&gt;Avelino&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-3274711002733586215?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/3274711002733586215/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/05/acceso-funciones-asm-desde-c.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/3274711002733586215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/3274711002733586215'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/05/acceso-funciones-asm-desde-c.html' title='Acceso a funciones Asm desde C'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_82S9Tngrad8/TAAUzj-3M_I/AAAAAAAAA1c/2eF0hGGmCFc/s72-c/MSX_MOUSE_SBC3810.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-4315217024437518681</id><published>2010-05-23T11:11:00.000-07:00</published><updated>2010-05-23T11:15:41.780-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><title type='text'>Utilizar datos en assembler</title><content type='html'>Este caso específico, lo comento, ya que me encontré con un problema con la forma de trabajar con las etiquetas en el "assembler in line", que no estaba descrito (o no lo localicé) , en la documentación del SDCC (manual + ASxxxx Cross Assembler Documentation). &lt;br /&gt;&lt;br /&gt;En mi caso, para mostrar el texto de ayuda, necesito que se aloje en un área de la memoria, que luego voy copiando a la VRAM, creando un efecto de scroll. Lo que estaba haciendo, hasta el momento, era utilizar un array de char, que luego volcaba en la RAM. Mi intención es situarlo en la ROM y acceder directamente a la dirección donde se aloje. Para ello he utilizado el "assembler in line", añadiendo los datos con la instrucción "db".&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;Nota: &lt;/b&gt;Esta técnica nos sirve para añadir cualquier tipo de dato, como por ejemplo gráficos, con lo que conseguiríamos mucha más velocidad al volcarlos a la VRAM, utilizando directamente una rutina en ensamblador.&lt;/blockquote&gt;&lt;br /&gt;Para conseguir esto, necesitaríamos averiguar en que dirección apuntan nuestros datos. En assembler utilizaremos una etiqueta, pero nos encontramos con el problema de que en C no podemos acceder a esta. Para solucionarlo, tendremos que usar un puente: escribiremos la dirección en la RAM. Para ello, ejecutaremos un programita en ensamblador. Fijaos que al hacer el "load" de la etiqueta al registro HL, hay que añadirle el caracter de la almohadilla "#" (este es el problema que comentaba al inicio).&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: paleturquoise; display: block; font-family: 'Courier New',Courier,monospace; height: 200px; margin: 10px; overflow: scroll; padding: 10px;"&gt;void setData()&lt;br /&gt;{&lt;br /&gt;__asm&lt;br /&gt;&lt;br /&gt;ld hl,#ALABEL&lt;br /&gt;ld (#0xE007),hl&lt;br /&gt;ret&lt;br /&gt;&lt;br /&gt;ALABEL:&lt;br /&gt;.db 0x50,0x53,0x47,0x65,0x64,0x20,0x56,0x30&lt;br /&gt;.db 0x2E,0x34,0x42,0x20,0x20,0x20,0x20,0x20&lt;br /&gt;.db 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20&lt;br /&gt;.db 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20&lt;br /&gt;__endasm;&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;Nota:&lt;/b&gt; En el ejemplo se puede observar que los datos utilizan el  formato típico de SDCC ("0xFF"), ya que no acepta el común en algunos  compiladores de asm ("0FFh").&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-4315217024437518681?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/4315217024437518681/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/05/utilizar-datos-en-assembler.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/4315217024437518681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/4315217024437518681'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/05/utilizar-datos-en-assembler.html' title='Utilizar datos en assembler'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-3783626463669850947</id><published>2010-05-23T02:19:00.000-07:00</published><updated>2010-05-23T02:19:04.082-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Miscelanea'/><title type='text'>Club Sprite Chiptune Stage</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://farm4.static.flickr.com/3398/4631449720_c8e5cddcc8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://farm4.static.flickr.com/3398/4631449720_c8e5cddcc8.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;Ayer pase la tarde con el &lt;a href="http://www.clubsprite.net/"&gt;Club Sprite&lt;/a&gt;, en uno de sus stages, esta vez  dedicado al &lt;a href="http://es.wikipedia.org/wiki/Chiptunes"&gt;chiptune&lt;/a&gt;.&lt;br /&gt;Había un MSX &lt;a href="http://en.wikipedia.org/wiki/1chipMSX"&gt;onechip&lt;/a&gt;, un Amiga 1200 y un  portátil, donde escuchamos un buen puñado de módulos de los trackers más  variados. &lt;br /&gt;&lt;a href="http://paxblog.blogcindario.com/"&gt;MsxKun&lt;/a&gt;&amp;nbsp;trajo un Music Module (&lt;a href="http://www.faq.msxnet.org/msxaudio.html"&gt;MSX Audio&lt;/a&gt;), y pudimos apreciar la calidad de sus 9  canales FM + su canal PCM de 8 bits.&lt;br /&gt;&lt;a href="http://a1200.wordpress.com/"&gt;Neuroflip&lt;/a&gt;, mostró algunos de sus  trabajos (tanto soft como temas musicales), junto al &lt;a href="http://303bcn.wordpress.com/2010/04/02/nst0002/"&gt;nst0002&lt;/a&gt; (el player  de SIDs). &lt;a href="http://www.thepetsmode.com/"&gt;TPM&lt;/a&gt; mostró unos nuevos temas en el ZMA player y yo pude hacer  la primera demo al publico del PSGed (la v0.5b), en un MSX onechip!!!&lt;br /&gt;También pudimos ver el nuevo Mega&amp;nbsp;Flash&amp;nbsp;ROM&amp;nbsp;SCC+ pero no lo llegamos a  probar...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-3783626463669850947?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/3783626463669850947/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/05/club-sprite-chiptune-stage.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/3783626463669850947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/3783626463669850947'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/05/club-sprite-chiptune-stage.html' title='Club Sprite Chiptune Stage'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3398/4631449720_c8e5cddcc8_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-571435031636787793</id><published>2010-05-16T13:07:00.000-07:00</published><updated>2010-05-16T13:16:42.069-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GUI'/><title type='text'>Control con ratón</title><content type='html'>&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Rfhh0QG_HgE&amp;hl=es_ES&amp;fs=1&amp;color1=0x3a3a3a&amp;color2=0x999999"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Rfhh0QG_HgE&amp;hl=es_ES&amp;fs=1&amp;color1=0x3a3a3a&amp;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Ya he añadido el control de ratón. Para ello he utilizado las funciones de Ramones, para identificar y leer los datos del ratón. Primero he compilado con asMSX  las funciones y el binario resultante lo he&amp;nbsp;incrustado&amp;nbsp;en el ROM que creado con SDCC. Por otro lado, he programado unas funciones en C, que llaman a las rutinas de Ramones. Es verdad que no es una solución elegante, pero he tenido que optar por esta, ya que no sabia como resolverlo totalmente con SDCC. Afortunadamente, Andrear, me ha facilitado una forma de hacerlo, que seguramente lo pondré en practica la semana que viene.&lt;br /&gt;&lt;br /&gt;He creado un vídeo de demo con blueMSX, para que podáis ver el funcionamiento del PSGed con el ratón. Como observaréis, he cambiado algunos elementos de la interfaz. Esto ha sido debido a que al probar el ratón, he visto algunos puntos a mejorar para aprovechar el manejo con este.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Tutorial ensamblador de Ramones (IV) – &lt;a href="http://www.konamito.com/tutorial-ensamblador-iv-%E2%80%93-manejo-del-raton/"&gt;Manejo del ratón&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://karoshi.auic.es/index.php?topic=834.0"&gt;asMSX &lt;/a&gt;(MSX Cross Assembler) de Karoshi&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-571435031636787793?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/571435031636787793/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/05/control-con-raton.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/571435031636787793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/571435031636787793'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/05/control-con-raton.html' title='Control con ratón'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-363696833591501757</id><published>2010-05-07T12:26:00.000-07:00</published><updated>2010-05-07T23:41:42.064-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Información'/><title type='text'>El registro 13</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_82S9Tngrad8/S-RhtrvOkOI/AAAAAAAAA0M/JdyYmnWgQ9w/s1600/envolvente.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="143" src="http://3.bp.blogspot.com/_82S9Tngrad8/S-RhtrvOkOI/AAAAAAAAA0M/JdyYmnWgQ9w/s400/envolvente.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Programando la función del player del PSGed, me he dado cuenta de una peculiaridad del AY-3-8910 que desconocía, que repercute en el funcionamiento del secuenciador. &lt;br /&gt;&lt;br /&gt;El PSG tiene dos formas de operar. Si no utilizamos la envolvente, lo que determina que suene el PSG, es principalmente el valor del volumen y del mixer, pero si la utilizamos la cosa cambia. Lo que provoca que se disparen los sonidos, es cuando damos un valor al registro 13 (la forma de envolvente).&amp;nbsp;Eso quiere decir que si queremos disparar sonidos independientes en cada canal, con el mismo envolvente, no lo podremos hacer, ya que al tocar este registro, nos sonarán los tres a la vez.&lt;br /&gt;&lt;br /&gt;Una posible solución es apagar el sonido del resto de canales, poniendo el valor 0 en los registros de amplitud (con el mixer suena un beep extraño). Como deduciréis, dependiendo del periodo y el tipo de envolvente que usemos, nos cortará el sonido de los otros canales.&lt;br /&gt;&lt;br /&gt;La mejor solución seria crear envolventes modificando los valores del volumen mediante programación. Esto nos permitiría utilizar diferentes envolventes en cada canal, o asignarlas a instrumentos. En el caso del PSGed, como la intención es usar directamente los registros del PSG, he utilizado la primera solución.&lt;br /&gt;&lt;br /&gt;A continuación un ejemplo para probar lo explicado en este post:&lt;br /&gt;&lt;b&gt;Nota:&lt;/b&gt; Suena el tono de los canales A y C, y el ruido del canal B.&lt;br /&gt;&lt;div style="background-color: paleturquoise; display: block; font-family: 'Courier New',Courier,monospace; height: 200px; margin: 10px; overflow: scroll; padding: 10px;"&gt;100 ' frecuencias de los 3 canales&lt;br /&gt;110 '&lt;br /&gt;120 SOUND 0,100&lt;br /&gt;130 SOUND 1,10&lt;br /&gt;140 SOUND 2,200&lt;br /&gt;150 SOUND 3,100&lt;br /&gt;160 SOUND 4,200&lt;br /&gt;170 SOUND 5,20&lt;br /&gt;180 ' frecuencia de ruido&lt;br /&gt;190 SOUND 6,10&lt;br /&gt;200 ' registros de amplitud&lt;br /&gt;210 ' activamos la envolvente&lt;br /&gt;220 SOUND 8,16&lt;br /&gt;230 SOUND 9,16&lt;br /&gt;240 SOUND10,16&lt;br /&gt;250 ' mixer&lt;br /&gt;260 SOUND 7,&amp;amp;B00101010&lt;br /&gt;270 ' periodo de la envolvente&lt;br /&gt;280 SOUND 11,100&lt;br /&gt;290 SOUND 12,10&lt;br /&gt;300 '&lt;br /&gt;310 IF INKEY$="" THEN 310&lt;br /&gt;320 ' forma de la envolvente&lt;br /&gt;330 ' y dispara el sonido&lt;br /&gt;340 SOUND 13,1&lt;br /&gt;350 GOTO 310&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-363696833591501757?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/363696833591501757/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/05/el-registro-13.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/363696833591501757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/363696833591501757'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/05/el-registro-13.html' title='El registro 13'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_82S9Tngrad8/S-RhtrvOkOI/AAAAAAAAA0M/JdyYmnWgQ9w/s72-c/envolvente.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-1423742855339949468</id><published>2010-05-02T02:38:00.000-07:00</published><updated>2010-05-02T02:38:34.639-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GUI'/><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><title type='text'>Pantalla de ayuda</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_82S9Tngrad8/S91GysBBHYI/AAAAAAAAA0E/EzSAcIwZIyQ/s1600/PSGed_v032b_help.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_82S9Tngrad8/S91GysBBHYI/AAAAAAAAA0E/EzSAcIwZIyQ/s320/PSGed_v032b_help.png" /&gt;&lt;/a&gt;&lt;/div&gt;Ya he terminado la pantalla de ayuda!&lt;br /&gt;&lt;br /&gt;Para mostrarla antes guardo la pantalla anterior (tabla de nombre de patrones), en un buffer de memoria para luego recuperarla al salir. Utilizo dos funciones de la BIOS (LDIRVM y LDIRMV), para copiar de VRAM a RAM y viceversa. Se nota la velocidad, comparado cuando utilizo un bucle y vpoke desde C.&lt;br /&gt;&lt;br /&gt;Luego muestro el texto que lo he alojado en una zona de la memoria y que se desplaza pulsando en los botones correspondientes. He programado la funcionalidad para mostrar la posición de la barra de scroll. Se ajusta automáticamente, por lo que es totalmente reutilizable. Lo que no tiene es la función de arrastrarla con el puntero.&lt;br /&gt;&lt;br /&gt;He modificado el diseño de la barra de scroll original, haciéndola más fina (2 columnas en vez de 3). He utilizado dos sprites para las flechas para que se muestren con el color azul, utilizado en todos los botones de las pantallas.&lt;br /&gt;&lt;br /&gt;He tenido que cambiar el tileset, y también le he añadido más caracteres que faltaban en la fuente de color negro, necesario para que se mostrará correctamente los textos.&lt;br /&gt;&lt;br /&gt;Si os fijáis en la imagen, vereis que no hay minúsculas. Estas se corresponden a la fuente de color magenta, y la utilizo para poder resaltar títulos y otras palabras. Pensé en cambiar el tileset en esta pantalla y añadirle las minúsculas y una fuente completa en otro color para resaltar las teclas, pero no he querido complicarlo hasta ver si tendré suficiente memoria (se trata de una ROM de 32k).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-1423742855339949468?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/1423742855339949468/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/05/pantalla-de-ayuda.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/1423742855339949468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/1423742855339949468'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/05/pantalla-de-ayuda.html' title='Pantalla de ayuda'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_82S9Tngrad8/S91GysBBHYI/AAAAAAAAA0E/EzSAcIwZIyQ/s72-c/PSGed_v032b_help.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-7860378768899257874</id><published>2010-04-30T03:33:00.000-07:00</published><updated>2010-04-30T03:37:17.723-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Información'/><title type='text'>Estado del proyecto</title><content type='html'>Quiero hacer una pausa para poneros al día de la situación del proyecto.  En la actualidad ya dispongo de una versión operativa. La interfaz esta bastante evolucionada. Se puede controlar con teclado y joystick, y le he añadido funcionalidades que no tenia pensadas.&lt;br /&gt;&lt;br /&gt;Sobre el problema en el ajuste de los campos con valores grandes, he seguido la idea que me dio Andrear de utilizar aceleración. Quiero puntualizar, que para resolver este problema he conseguido 4 posibles soluciones: el numpad modal de JamQue, el segundo botón de Neuroflip, la aceleración de Andrear y el slider por mi. Al final he optado por la que he encontrado más óptima para esta aplicación, aunque es muy probable que implemente alguna en futuras aplicaciones.&lt;br /&gt;&lt;br /&gt;También he añadido aceleración en el control del puntero, para agilizar el movimiento por la pantalla. Otros novedades seria la sustitución del&amp;nbsp;campo que controla el tempo, por el valor de las pulsaciones por minuto (BPM), y la función de "mute"&amp;nbsp;independiente para cada canal, accionable desde el teclado.&lt;br /&gt;&lt;br /&gt;El control por potenciometros lo he dejado parado hasta que termine una primera versión.&amp;nbsp;Ahora quiero centrarme en el acceso a disco y el control por ratón.&amp;nbsp;He encontrado unos tutoriales de Ramones en la página de Konamito que me pueden ayudar en la tarea:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Tutorial ensamblador (IV) – &lt;a href="http://www.konamito.com/tutorial-ensamblador-iv-%E2%80%93-manejo-del-raton/"&gt;Manejo del ratón&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Tutorial ensamblador (II) – &lt;a href="http://www.konamito.com/tutorial-ensamblador-ii-%E2%80%93-acceso-al-disco-desde-la-rom/"&gt;Acceso al disco desde la ROM&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Os dejo una demo de un patrón, para que os hagáis una idea de como suena.&lt;br /&gt;&lt;object height="81" width="100%"&gt; &lt;param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Faorante%2Fpsged-demo001&amp;amp;show_comments=false&amp;amp;auto_play=false&amp;amp;color=ff7700"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Faorante%2Fpsged-demo001&amp;amp;show_comments=false&amp;amp;auto_play=false&amp;amp;color=ff7700" type="application/x-shockwave-flash" width="100%"&gt;&lt;/embed&gt; &lt;/object&gt;   &lt;a href="http://soundcloud.com/aorante/psged-demo001"&gt;PSGed demo001&lt;/a&gt; by &lt;a href="http://soundcloud.com/aorante"&gt;aorante&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-7860378768899257874?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/7860378768899257874/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/04/estado-del-proyecto.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/7860378768899257874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/7860378768899257874'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/04/estado-del-proyecto.html' title='Estado del proyecto'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-1229015323657273356</id><published>2010-04-25T02:00:00.000-07:00</published><updated>2010-04-25T02:00:44.336-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><title type='text'>Mostrar números en Screen 2</title><content type='html'>Para resolver esta tarea, tendremos que convertir el valor de nuestra variable a una cadena de caracteres y luego mostrarlo en la pantalla de forma similar a como lo hicimos con la función vprint del post anterior. Para la conversión he adaptado una función en assembler de baze (&lt;a href="http://baze.au.com/misc/z80bits.html"&gt;Z80bits Collection of Z80 routines&lt;/a&gt;). La he llamado Num2Dec16 y como parámetros se le pasa un valor de tipo entero y la cadena donde se ha de escribir el resultado.&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: paleturquoise; display: block; font-family: 'Courier New',Courier,monospace; height: 200px; margin: 10px; overflow: scroll; padding: 10px;"&gt;/*&lt;br /&gt;16-bit Integer to ASCII (decimal)&lt;br /&gt;by baze &lt;br /&gt;Input: HL = number to convert, DE = location of ASCII string&lt;br /&gt;Output: ASCII string at (DE)&lt;br /&gt;*/&lt;br /&gt;void Num2Dec16(unsigned int aNumber, char *address)&lt;br /&gt;{&lt;br /&gt;aNumber;&lt;br /&gt;address;&lt;br /&gt;__asm&lt;br /&gt;ld l,4(ix)&lt;br /&gt;ld h,5(ix)&lt;br /&gt;&lt;br /&gt;ld e,6(ix)&lt;br /&gt;ld d,7(ix)&lt;br /&gt;&lt;br /&gt;ld bc,#-10000&lt;br /&gt;call $Num1&lt;br /&gt;ld bc,#-1000&lt;br /&gt;call $Num1&lt;br /&gt;ld bc,#-100&lt;br /&gt;call $Num1&lt;br /&gt;ld c,#-10&lt;br /&gt;call $Num1&lt;br /&gt;ld c,b&lt;br /&gt;call $Num1&lt;br /&gt;jr  $Num3  &lt;br /&gt;$Num1:&lt;br /&gt;ld a,#47 &lt;br /&gt;$Num2:&lt;br /&gt;inc a&lt;br /&gt;add hl,bc&lt;br /&gt;jr c,$Num2&lt;br /&gt;sbc hl,bc&lt;br /&gt;ld (de),a&lt;br /&gt;inc de&lt;br /&gt;ret&lt;br /&gt;$Num3:&lt;br /&gt;&lt;br /&gt;__endasm;&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;La función que tenemos que utilizar se llama vprintNumber y le pasaremos como parámetros la posición de la pantalla, el valor y el número de cifras a mostrar (máximo 5). Para desempeñar su tarea, llama a la función de conversión y luego utiliza getAddress para obtener la dirección VRAM correspondiente a la posición que le hemos dado. Seguidamente, realizará un bucle para mostrar con vpoke la cadena que contiene el valor.&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: paleturquoise; display: block; font-family: 'Courier New',Courier,monospace; height: 200px; margin: 10px; overflow: scroll; padding: 10px;"&gt;// vprintNumber: muestra un numero en la pantalla&lt;br /&gt;// column = numero de columna (0 a 31)&lt;br /&gt;// line = numero de fila (0 a 23)&lt;br /&gt;// aNumber = valor a mostrar&lt;br /&gt;// aLength = numero de cifras a mostrar&lt;br /&gt;void vprintNumber(char column, char line, unsigned int aNumber, char aLength)&lt;br /&gt;{&lt;br /&gt;char pos=5;&lt;br /&gt;unsigned int tiladdre=0;&lt;br /&gt;char strBuff[5];    &lt;br /&gt;&lt;br /&gt;Num2Dec16(aNumber, strBuff);&lt;br /&gt;&lt;br /&gt;// proporciona la direccion de la VRAM a partir de una posicion&lt;br /&gt;tiladdre = getAddress(column, line);&lt;br /&gt;&lt;br /&gt;//coloca el contador en la posicion donde se ha de empezar a mostrar &lt;br /&gt;pos = 5-aLength;&lt;br /&gt;&lt;br /&gt;// muestra el numero en la pantalla&lt;br /&gt;while (aLength--&amp;gt;0){ vpoke(tiladdre++,strBuff[pos++]);}&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;Ejemplo de uso:&lt;br /&gt;&lt;div style="background-color: paleturquoise; display: block; font-family: 'Courier New',Courier,monospace; margin: 10px; padding: 10px;"&gt;unsigned int valor=1024;&lt;br /&gt;vprintNumber(9, 14, valor, 4);&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-1229015323657273356?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/1229015323657273356/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/04/mostrar-numeros-en-screen-2.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/1229015323657273356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/1229015323657273356'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/04/mostrar-numeros-en-screen-2.html' title='Mostrar números en Screen 2'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-1520069528683296639</id><published>2010-04-23T04:16:00.000-07:00</published><updated>2010-04-23T04:16:32.077-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><title type='text'>Mostrar textos en Screen 2</title><content type='html'>Para facilitar la tarea de mostrar textos en el modo gráfico Screen 2, he programado una serie de funciones. Si quieres conocer como se programa el VDP de los MSX (&lt;a href="http://en.wikipedia.org/wiki/Texas_Instruments_TMS9918"&gt;TMS9918&lt;/a&gt;), podéis encontrar el &lt;a href="http://emudocs.org/?page=VDP%20TMS9918"&gt;datasheet&lt;/a&gt; en EmuDocs.&lt;br /&gt;&lt;br /&gt;La primera función necesaria, es una que nos permita escribir en la VRAM (igual que la instrucción de basic VPOKE). Está programada en assembler y es muy sencilla, ya que utiliza la función WRTVRM de la BIOS. En el registro HL se le pasa la dirección, y en el registro A el valor a escribir.&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: paleturquoise; display: block; font-family: 'Courier New',Courier,monospace; height: 170px; margin: 10px; overflow: scroll; padding: 10px;"&gt;// address = direccion de memoria VRAM&lt;br /&gt;// value = valor a escribir&lt;br /&gt;void vpoke(unsigned int address, unsigned char value)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;address;&lt;br /&gt;&amp;nbsp;&amp;nbsp;value;&lt;br /&gt;__asm&lt;br /&gt;&amp;nbsp;&amp;nbsp;ld l,4(ix)&lt;br /&gt;&amp;nbsp;&amp;nbsp;ld h,5(ix)&lt;br /&gt;&amp;nbsp;&amp;nbsp;ld a,6(ix)&lt;br /&gt;&amp;nbsp;&amp;nbsp;call 0x004d&lt;br /&gt;__endasm;&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;La siguiente función es la que nos mostrará el texto en la pantalla.&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: paleturquoise; display: block; font-family: 'Courier New',Courier,monospace; height: 170px; margin: 10px; overflow: scroll; padding: 10px;"&gt;// posx = numero de columna (0 a 31)&lt;br /&gt;// posy = numero de fila (0 a 23)&lt;br /&gt;// text = cadena de caracteres&lt;br /&gt;void vprint(unsigned char posx, unsigned char posy, char* text)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;int longi = strLength(text); // tamaño de la cadena&lt;br /&gt;&amp;nbsp;&amp;nbsp;unsigned int address = 6144 + (posy * 32) + posx; // calcula la posicion en la VRAM&lt;br /&gt;&amp;nbsp;&amp;nbsp;while (longi--&amp;gt;0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;vpoke(address++,*(text++)); // escribe en la VRAM&lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;Veréis que lo primero que se hace, es identificar el tamaño de la cadena. En vez de utilizar la función de la librería del SDCC, he creado una que la he llamado strLength:&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: paleturquoise; display: block; font-family: 'Courier New',Courier,monospace; margin: 10px; padding: 10px;"&gt;int strLength(char *str)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int i = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;while(*(str++)) &amp;nbsp;i++;  &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return i;&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;Luego se calcula la posición en la memoria de vídeo donde se ha de escribir la cadena, en base a la posición dada. El valor 6144 se refiere a la posición de la tabla de nombre de patrones, en la VRAM. Por último se hace un bucle que escribe los caracteres utilizando la función vpoke.&lt;br /&gt;&lt;br /&gt;Para finalizar un ejemplo de uso:&lt;br /&gt;&lt;div style="background-color: paleturquoise; display: block; font-family: 'Courier New',Courier,monospace; margin: 10px; padding: 10px;"&gt;vprint(9, 14, "VERSION 0.21B");&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-1520069528683296639?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/1520069528683296639/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/04/mostrar-textos-en-screen-2.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/1520069528683296639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/1520069528683296639'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/04/mostrar-textos-en-screen-2.html' title='Mostrar textos en Screen 2'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-1110038188239395599</id><published>2010-04-20T12:24:00.000-07:00</published><updated>2010-04-20T12:24:57.574-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GUI'/><title type='text'>Cambios en la GUI</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_82S9Tngrad8/S838Vr-ppxI/AAAAAAAAAzU/clh-zsANG6I/s1600/aorante_PSGed_edit_modal_numpad.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_82S9Tngrad8/S838Vr-ppxI/AAAAAAAAAzU/clh-zsANG6I/s320/aorante_PSGed_edit_modal_numpad.png" /&gt;&lt;/a&gt;&lt;/div&gt;He empezado a programar la interfaz y al probarla me he encontrado con un problema. Al modificar valores grandes como la frecuencia de tono o la frecuencia de la envolvente, los botones para incrementar y reducir, resultan muy lentos. Es necesario añadir un sistema que permita modificar el valor de forma más rápida. &lt;br /&gt;&lt;br /&gt;JamQue me ha dado la idea de mostrar a través de un botón, una &lt;a href="http://es.wikipedia.org/wiki/Ventana_(inform%C3%A1tica)#Ventana_modal_respecto_a_una_aplicaci.C3.B3n"&gt;ventana modal&lt;/a&gt; con un teclado numérico que permita introducir el valor. A raíz de esta idea se me ha ocurrido mostrar una modal con un control tipo deslizador. Así que me he puesto con el &lt;a href="http://pentacour.com/blog/category/nmsxtiles"&gt;nMSXtiles&lt;/a&gt; y he creado el botón y he diseñado las dos posibles ventanas. Cuando lo implemente veré cual de las dos soluciones es la más ágil.&lt;br /&gt;&lt;br /&gt;Tendré que hacer una función que gestione las ventanas modales, para que antes de mostrarse guarde los tiles que se ocultan para luego recuperarlos. Para el caso del "&lt;a href="http://en.wikipedia.org/wiki/Slider_(computing)"&gt;slider&lt;/a&gt;", sera necesario utilizar un sprite para el cursor.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_82S9Tngrad8/S838buEflrI/AAAAAAAAAzc/xiGtO6QC1Kc/s1600/aorante_PSGed_checkbox.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_82S9Tngrad8/S838buEflrI/AAAAAAAAAzc/xiGtO6QC1Kc/s320/aorante_PSGed_checkbox.png" /&gt;&lt;/a&gt;&lt;/div&gt;También he modificado el control del conmutador (&lt;a href="http://es.wikipedia.org/wiki/Check_box"&gt;checkbox&lt;/a&gt;), ya que no quedaba muy claro cuando estaba activo o inactivo. Para ello he añadido una simulación de un led, que se muestra de color verde cuando esta activo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-1110038188239395599?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/1110038188239395599/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/04/cambios-en-la-gui.html#comment-form' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/1110038188239395599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/1110038188239395599'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/04/cambios-en-la-gui.html' title='Cambios en la GUI'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_82S9Tngrad8/S838Vr-ppxI/AAAAAAAAAzU/clh-zsANG6I/s72-c/aorante_PSGed_edit_modal_numpad.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-2690098326595324140</id><published>2010-04-19T12:13:00.000-07:00</published><updated>2010-04-19T12:13:50.923-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GUI'/><title type='text'>Pantalla de presentación</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_82S9Tngrad8/S8yofPfHskI/AAAAAAAAAzM/TpV6DhaaXUs/s1600/aorante_PSGed_v02b_logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_82S9Tngrad8/S8yofPfHskI/AAAAAAAAAzM/TpV6DhaaXUs/s320/aorante_PSGed_v02b_logo.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Me he entretenido haciendo la pantalla de presentación, que incluye el logo, mi nombre, la versión y un menú donde se podrá seleccionar el dispositivo de control (teclas de cursor, joystick o mouse).&lt;br /&gt;&lt;br /&gt;Para el logo me basado en una fuente TrueType, que he adaptado para que se mostrará con la forma adecuada. Para diferenciar las dos partes que se compone el nombre, he utilizado dos colores. Para acabar, lo he adornado con tres líneas de diferentes grosores, que simbolizan los tres canales con tonos de forma cuadrada del PSG. Esta dibujado con Gimp, y he necesitado utilizar tres sprites de 8x8, para que se mostraran correctamente el color de algunas partes del logo.&lt;br /&gt;&lt;br /&gt;También he utilizado un sprite, para la flecha usada como cursor en el menú.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-2690098326595324140?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/2690098326595324140/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/04/pantalla-de-presentacion.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/2690098326595324140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/2690098326595324140'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/04/pantalla-de-presentacion.html' title='Pantalla de presentación'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_82S9Tngrad8/S8yofPfHskI/AAAAAAAAAzM/TpV6DhaaXUs/s72-c/aorante_PSGed_v02b_logo.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-679449437942716402</id><published>2010-04-13T09:29:00.000-07:00</published><updated>2010-04-18T10:12:49.249-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><title type='text'>Hello World</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_82S9Tngrad8/S8SQHkGzqaI/AAAAAAAAAzE/zXz3F-b-slI/s1600/HelloSC2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_82S9Tngrad8/S8SQHkGzqaI/AAAAAAAAAzE/zXz3F-b-slI/s320/HelloSC2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Para mi primer programa con SDCC, me he propuesto hacer el clásico "Hello World" en una ROM. Primeramente he de agradecer el tutorial de &lt;a href="http://www.nerlaska.com/msx/"&gt;Nerlaska&lt;/a&gt; para la creación de ROMs y la información de &lt;a href="http://andrear.altervista.org/home/msxsoftware.php"&gt;Andrear&lt;/a&gt;. En el código podéis encontrar funciones de acceso al VDP, de ambos. También he usado el &lt;a href="http://pentacour.com/blog/category/nmsxtiles"&gt;nMSXtiles de Pentacour&lt;/a&gt;, para crear el tileset de la fuente, que para su conversión a código C, me he apoyado de una utilidad que he creado. Para simplificar la compilación y del proceso de creación de la ROM, también he desarrollado una utilidad con una interfaz gráfica. Cuando estén más estables las compartiré con vosotros.&lt;br /&gt;&lt;br /&gt;En el desarrollo me encontré con problemas al insertar los datos de la fuente utilizando muchos arrays de chars. El fichero resultante era muy grande y además al ejecutarlo daba errores. He aprendido que cuando se trabaja con bloques muy grandes de datos, como es el caso de los gráficos, es mejor añadirlo en un único array de char (uno para los patrones, otro para los colores y otro para los nombres de patrones). Además para mi sorpresa, el compilador SDCC comprime los datos repetidos, que para este caso se aprovecha bastante. Es un sistema similar al &lt;a href="http://es.wikipedia.org/wiki/Run-length_encoding"&gt;RLE&lt;/a&gt;, pero que afecta únicamente a series de valores repetidos.&lt;br /&gt;&lt;br /&gt;El programa es muy simple. Primero llena la pantalla del tile 32, para que no se vea como se escriben los gráficos en la VRAM, que aunque es rápido no es tanto como en assembler. Luego lleno la tabla de colores con el color que uso para la fuente (blanco con fondo azul). Para estas dos tareas utilizo una sencilla función en assembler de Nerlaska que es muy rápida (&lt;i&gt;VDP_FillVRAM&lt;/i&gt;). Después copio los datos gráficos (del tileset), a los tres bancos de la pantalla (con &lt;i&gt;vpoke_block&lt;/i&gt;). En el siguiente paso pongo los textos en la pantalla con una función a la cual indico la posición de la pantalla y el texto (&lt;i&gt;vprint&lt;/i&gt;, esta es&amp;nbsp;mía&amp;nbsp;;D ). Para finalizar espero la pulsación de una tecla (llamada a la bios&amp;nbsp;&lt;i&gt;CHGET-h009F&lt;/i&gt;), y después reinicio el ordenador.&lt;br /&gt;&lt;br /&gt;Para compilar, he utilizado la siguiente sentencia (al resultado&amp;nbsp;faltaría&amp;nbsp;aplicarle el hex2bin y convertirlo en una ROM de 16k):&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #d9ead3; font-family: 'Courier New', Courier, monospace; font-size: small;"&gt;sdcc -mz80 --no-std-crt0 --code-loc 0x4010 --data-loc 0xC000 HelloSC2.c&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Descargar &lt;a href="http://webs.ono.com/aorante/HelloWorldSC2ROM.zip"&gt;fuentes y ROM&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-679449437942716402?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/679449437942716402/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/04/hello-world.html#comment-form' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/679449437942716402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/679449437942716402'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/04/hello-world.html' title='Hello World'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_82S9Tngrad8/S8SQHkGzqaI/AAAAAAAAAzE/zXz3F-b-slI/s72-c/HelloSC2.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-2497734828360257803</id><published>2010-04-09T03:44:00.000-07:00</published><updated>2010-04-09T03:49:37.495-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><title type='text'>Elección de lenguaje y herramientas de desarrollo</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://es.wikipedia.org/wiki/Archivo:Ic-photo-zilog-Z0840008PSC-Z80-CPU.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" title="IC photo file created by User:ZyMOS, liceses GNU FDL"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_82S9Tngrad8/S78Bfitn28I/AAAAAAAAAy0/tWASsk9uaEQ/s320/Z80-CPU.png" /&gt;&lt;/a&gt;&lt;/div&gt;He investigando como programar la aplicación y he llegado a las siguientes conclusiones:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;La opción más optima es el Assembler. Es el más utilizado por que permite ante una CPU de 3,58 MHz, aprovechar los recursos al máximo. Encontraremos mucha información y es el que dispone más herramientas y soporte de usuarios expertos. Lo malo es que es mucho más complicado programar y mantener el código.&lt;/li&gt;&lt;li&gt;Otra opción interesante es el C. Este lenguaje es menos complicado y más legible. Al compilarse se obtiene una velocidad de ejecución aceptable para determinadas tareas. Como punto negativo, nos encontramos que el fichero compilado puede ser muy grande.&lt;/li&gt;&lt;/ul&gt;Por los pros y contras de estos lenguajes, he decidido combinar los dos. Dependiendo de como evolucione, continuaré con este sistema o trabajaré únicamente con Assembler.&lt;br /&gt;&lt;br /&gt;Como entorno de desarrollo he decidido utilizar el &lt;a href="http://sdcc.sourceforge.net/"&gt;SDCC&lt;/a&gt; (Small Device C Compiler), sobre Windows. Se trata de un &lt;a href="http://es.wikipedia.org/wiki/Compilador_cruzado"&gt;compilador cruzado&lt;/a&gt; de Z80 (y otros microprocesadores), open source, para windows y Linux. Para la edición utilizo &lt;a href="http://www.pspad.com/es/"&gt;PSpad &lt;/a&gt;y para completar el kit, estoy creando herramientas para facilitar la compilación y transformación de datos gráficos. &lt;br /&gt;Como comentaba, con el uso de algunas de sus librerias, podemos obtener ficheros excesivamente grandes, por lo que es mejor evitarlas. Se puede compensar, gracias a que permite introducir código assembler, con el que podemos crear librerías para acceso al hardware de los MSX (VDP, PSG, etc...), o con funciones más optimas.&lt;br /&gt;&lt;br /&gt;Más info:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;WEB oficial del proyecto &lt;a href="http://sdcc.sourceforge.net/"&gt;SDCC&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://msx.atlantes.org/index_es.html"&gt;Web MSX de Avelino&lt;/a&gt;.&amp;nbsp;Soporte para compilar con SDCC ficheros .com (MSXDOS), PSG, Moonsound y Compresión Huffman.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.nerlaska.com/msx/"&gt;Web MSX de Nerlaska&lt;/a&gt;.&amp;nbsp;Soporte para compilar con SDCC ficheros ROM, MuSICA replayer y SDK para SymbOS.&lt;/li&gt;&lt;li&gt;&lt;a href="http://andrear.altervista.org/contents/msx/inertia/howto/"&gt;Proyecto I.N.E.R.T.I.A&lt;/a&gt; de Andrear. Howto y fuentes de un juego desarrollado en SDCC.&lt;/li&gt;&lt;li&gt;&lt;a href="http://jannone.org/gfxlib/"&gt;GFX lib&lt;/a&gt; de jannone. Libreria de gráficos para MSX en Hitech-C&lt;/li&gt;&lt;li&gt;&lt;a href="http://map.grauw.nl/"&gt;MSX Assembly Page&lt;/a&gt;. Documentación, tutoriales y ejemplos de programación en ensamblador.&lt;/li&gt;&lt;li&gt;&lt;a href="http://konamiman.com/msx/msx-s.html"&gt;Web MSX de Konamiman&lt;/a&gt;. Easymbler (curso de ensamblador de Z80) y MSX2 Technical Handbook.&lt;/li&gt;&lt;li&gt;&lt;a href="http://karoshi.auic.es/"&gt;Karoshi MSX Community&lt;/a&gt;. Foros de desarrollo.&lt;/li&gt;&lt;li&gt;&lt;a href="http://nocash.emubase.de/portar.htm"&gt;Portar Doc&lt;/a&gt; by Martin Korth.&amp;nbsp;Información del hardware de los MSX..&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-2497734828360257803?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/2497734828360257803/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/04/eleccion-de-lenguaje-y-herramientas-de.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/2497734828360257803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/2497734828360257803'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/04/eleccion-de-lenguaje-y-herramientas-de.html' title='Elección de lenguaje y herramientas de desarrollo'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_82S9Tngrad8/S78Bfitn28I/AAAAAAAAAy0/tWASsk9uaEQ/s72-c/Z80-CPU.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-9040210916999136699</id><published>2010-02-20T05:04:00.000-08:00</published><updated>2010-02-20T05:48:10.963-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GUI'/><title type='text'>Diseño de la GUI (6). Los sprites.</title><content type='html'>En el anterior post me centré en las herramientas pero no mostré el diseño final de los sprites. Y aquí los tenéis:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_82S9Tngrad8/S3_bUOZwx7I/AAAAAAAAAq8/y2dEJPsknyo/s1600-h/PSGed_sprite1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_82S9Tngrad8/S3_bUOZwx7I/AAAAAAAAAq8/y2dEJPsknyo/s320/PSGed_sprite1.png" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-size: small;"&gt;Cursor. Se ha reducido el tamaño con relación al diseño inicial. &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_82S9Tngrad8/S3_blTmkwGI/AAAAAAAAArE/0TqFQJSQsxk/s1600-h/PSGed_sprite2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_82S9Tngrad8/S3_blTmkwGI/AAAAAAAAArE/0TqFQJSQsxk/s320/PSGed_sprite2.png" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Indicador izquierdo del campo de foco.&lt;/i&gt;&lt;/span&gt; &lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_82S9Tngrad8/S3_b5B7ffmI/AAAAAAAAArM/zPugLO_4Qvg/s1600-h/PSGed_sprite3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_82S9Tngrad8/S3_b5B7ffmI/AAAAAAAAArM/zPugLO_4Qvg/s320/PSGed_sprite3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Indicador derecho del campo de foco.&lt;/i&gt;&lt;/span&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Datos de los sprites para Basic y Assembler:&lt;br /&gt;&lt;div style="background-color: paleturquoise; font-family: 'Courier New',Courier,monospace; margin: 10px; padding: 10px; overflow: scroll; display: block; height:220px;"&gt;cursor ---------------&lt;br /&gt;1000 REM --- sprites data&lt;br /&gt;1001 DATA 192, 160, 144, 136, 132, 130, 129, 128&lt;br /&gt;1002 DATA 143, 144, 160, 192, 0, 0, 0, 0&lt;br /&gt;1003 DATA 0, 0, 0, 0, 0, 0, 0, 128&lt;br /&gt;1004 DATA 128, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;1005 DATA 0, 64, 96, 112, 120, 124, 126, 127&lt;br /&gt;1006 DATA 112, 96, 64, 0, 0, 0, 0, 0&lt;br /&gt;1007 DATA 0, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;1008 DATA 0, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;&lt;br /&gt;; --- sprites data&lt;br /&gt;DB 192, 160, 144, 136, 132, 130, 129, 128&lt;br /&gt;DB 143, 144, 160, 192, 0, 0, 0, 0&lt;br /&gt;DB 0, 0, 0, 0, 0, 0, 0, 128&lt;br /&gt;DB 128, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;DB 0, 64, 96, 112, 120, 124, 126, 127&lt;br /&gt;DB 112, 96, 64, 0, 0, 0, 0, 0&lt;br /&gt;DB 0, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;DB 0, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;&lt;br /&gt;foco izq. -------------------&lt;br /&gt;1000 REM --- sprites data&lt;br /&gt;1001 DATA 255, 128, 128, 128, 128, 128, 128, 128&lt;br /&gt;1002 DATA 255, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;1003 DATA 128, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;1004 DATA 128, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;&lt;br /&gt;; --- sprites data&lt;br /&gt;DB 255, 128, 128, 128, 128, 128, 128, 128&lt;br /&gt;DB 255, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;DB 128, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;DB 128, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;&lt;br /&gt;foco der. -------------------&lt;br /&gt;1000 REM --- sprites data&lt;br /&gt;1001 DATA 255, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;1002 DATA 255, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;1003 DATA 128, 128, 128, 128, 128, 128, 128, 128&lt;br /&gt;1004 DATA 128, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;&lt;br /&gt;; --- sprites data&lt;br /&gt;DB 255, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;DB 255, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;DB 128, 128, 128, 128, 128, 128, 128, 128&lt;br /&gt;DB 128, 0, 0, 0, 0, 0, 0, 0&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-9040210916999136699?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/9040210916999136699/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/02/diseno-de-la-gui-6-los-sprites.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/9040210916999136699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/9040210916999136699'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/02/diseno-de-la-gui-6-los-sprites.html' title='Diseño de la GUI (6). Los sprites.'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_82S9Tngrad8/S3_bUOZwx7I/AAAAAAAAAq8/y2dEJPsknyo/s72-c/PSGed_sprite1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-4659060697467452442</id><published>2010-02-09T08:50:00.000-08:00</published><updated>2010-02-20T05:40:11.598-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GUI'/><title type='text'>Diseño de la GUI (5). Editando los sprites.</title><content type='html'>Después de dibujarlos, me decidí a pasarlos por un editor de sprites, pero primero voy a comentar las aplicaciones no-nativas que conozco.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_82S9Tngrad8/S3GQyRW7aKI/AAAAAAAAApw/PZfhI02Fzeo/s1600-h/andrear_spriteDraw.png" imageanchor="1" style="clear: right; display: inline ! important; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_82S9Tngrad8/S3GQyRW7aKI/AAAAAAAAApw/PZfhI02Fzeo/s320/andrear_spriteDraw.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-size: 18px;"&gt;&lt;a href="http://andrear.altervista.org/home/msxsoftware.php"&gt;img2spr&lt;/a&gt; de Andrea (MS-DOS)&lt;/span&gt;&lt;br /&gt;Utilizando la consola de sistema, a partir de una imagen (PNG, BMP y TIFF, entre otros), a la salida te proporciona los datos para Basic, Asm y C.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 18px;"&gt;&lt;a href="http://andrear.altervista.org/contents/msx/msxsprites/16x16/MsxSprites16x16.html"&gt;MSX Sprite Draw&lt;/a&gt; de Andrea (WEB)&lt;/span&gt;&lt;br /&gt;Se trata de una aplicación WEB, desde donde se puede dibujar un sprite con varios colores. Pulsando el botón "Get Sprite" te muestra el código en Basic o Asm, en un recuadro que podremos copiar a un editor de texto. A diferencia de otros editores permite crear sprites de 8x8. &lt;a href="http://andrear.altervista.org/contents/msx/msxsprites/8x8/MsxSprites8x8.html"&gt;Ir a la versión&amp;nbsp;8x8&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 18px;"&gt;&lt;a href="http://msx.jannone.org/tinysprite/tinysprite.html"&gt;TinySprite&lt;/a&gt; de Jannone (WEB)&lt;/span&gt;&lt;br /&gt;Es otro editor de sprites de 16x16 desde WEB, pero tiene algunas ventajas sobre el anterior. Tiene bastantes opciones para la edición y permite la creación de mas de un sprites ("slots"). Utiliza el botón derecho del ratón para borrar pixels. Genera código para sprites de MSX1 y 2, en diferentes lenguajes de programación (Basic, Asm, C y Pascal). Tiene un sistema para guardar y leer el set de sprites.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_82S9Tngrad8/S3GR9PkDCfI/AAAAAAAAAp4/_KmqtJ4k-O8/s1600-h/msx_tinysprite2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_82S9Tngrad8/S3GR9PkDCfI/AAAAAAAAAp4/_KmqtJ4k-O8/s320/msx_tinysprite2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 18px;"&gt;&lt;a href="http://pentacour.com/blog/category/nmsxsprites"&gt;nMSXsprites&lt;/a&gt; de Pentacour (MS-DOS)&lt;/span&gt;&lt;br /&gt;Con esta utilidad se puede extraer de una imagen en formato PNG, el código assembler de sprites de 16 pixels de ancho. Genera un sprite por cada color y acepta varias figuras separadas por una linea transparente. Proporciona los fuentes para compilarse en otras plataformas como MAC y LINUX.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 18px;"&gt;&lt;a href="http://pentacour.com/blog/category/nmsxtiles"&gt;nMSXtiles&lt;/a&gt; de Pentacour (Windows)&lt;/span&gt;&lt;br /&gt;Además del editor de tiles, incluye una herramienta para crear sprites de MSX1. Permite la creación de cuatro sets de cuatro sprites de hasta cuatro planos de colores (444! ;D ). Exporta a código Asm.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_82S9Tngrad8/S3GSInLU84I/AAAAAAAAAqA/LRs6bUFZLas/s1600-h/msx_nMSXtiles_spritesEd.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_82S9Tngrad8/S3GSInLU84I/AAAAAAAAAqA/LRs6bUFZLas/s320/msx_nMSXtiles_spritesEd.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Para los sprites del PSGed, he utilizado el MSX Sprite Draw de Andrea.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-4659060697467452442?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/4659060697467452442/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/02/diseno-de-la-gui-4-editando-los-sprites.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/4659060697467452442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/4659060697467452442'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/02/diseno-de-la-gui-4-editando-los-sprites.html' title='Diseño de la GUI (5). Editando los sprites.'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_82S9Tngrad8/S3GQyRW7aKI/AAAAAAAAApw/PZfhI02Fzeo/s72-c/andrear_spriteDraw.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-2691498227765217036</id><published>2010-02-04T11:16:00.000-08:00</published><updated>2010-02-04T12:29:13.787-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GUI'/><title type='text'>Diseño de la GUI (4). Tiles y Sprites.</title><content type='html'>Después de escribir la información sobre el PSG, me he dado cuenta de que hay una carencia en la pantalla del editor. Falta un conmutador para elegir entre un valor fijo de amplitud o variable (envolvente). &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_82S9Tngrad8/S2sb_k_AUXI/AAAAAAAAAos/WvwiOTRJrh8/s320/PSGed_scr_edit2new.png" /&gt;&lt;/div&gt;&lt;br /&gt;Hoy me he dedicado a modificar la pantalla y de paso la he analizado para ver si necesitaba algún cambio más.&lt;br /&gt;Pensando en la forma de señalizar el foco (con sprites), me he percatado de que los colores usados en la pantalla podrían hacer que estos no resaltaran correctamente. Por ese motivo, he cambiado el color de todos los tiles que representan botones, de rojo a magenta y así los sprites se mostrarán en color rojo. Y para finalizar las modificaciones al tileset, distinguiremos los nuevos botones, de los números de las teclas de función, cambiando el color de estos a cían.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_82S9Tngrad8/S2scR6KXePI/AAAAAAAAAo0/aKk5YMZJSBU/s320/tileset.png" /&gt;&lt;/div&gt;&lt;br /&gt;Aprovechando que tenia en mente los sprites, los he dibujado. Serán de 16x16 pixels y en el caso del cursor del ratón, utilizaré dos: uno para el fondo y otro para el contorno de color negro.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_82S9Tngrad8/S2sc09ZFirI/AAAAAAAAApE/RUYxl1at53M/s320/PSGed_sprites.png" /&gt;&lt;/div&gt;&lt;br /&gt;Para la señalización del foco en modo teclado, utilizaré dos recuadros abiertos por uno de los extremos, para situarlos en los lados del campo.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_82S9Tngrad8/S2stAkIhXLI/AAAAAAAAApM/R1nonG5FXPc/s1600-h/PSGed_scr_edit_sprites_x2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_82S9Tngrad8/S2scZ1M9E2I/AAAAAAAAAo8/LEd8zq_QrVg/s320/PSGed_scr_edit_sprites.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: x-small;"&gt;(clicar para zoom X2)&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;En la imagen podemos ver señalizados dos campos (a modo prueba), el conmutador de tono del canal B y el registro de la frecuencia de ruido. Por otro lado se puede observar el sprite del cursor en la barra de la secuencia del canal A.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-2691498227765217036?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/2691498227765217036/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/02/diseno-de-la-gui-4-tiles-y-sprites.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/2691498227765217036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/2691498227765217036'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/02/diseno-de-la-gui-4-tiles-y-sprites.html' title='Diseño de la GUI (4). Tiles y Sprites.'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_82S9Tngrad8/S2sb_k_AUXI/AAAAAAAAAos/WvwiOTRJrh8/s72-c/PSGed_scr_edit2new.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-7672508248599464500</id><published>2010-02-03T06:34:00.000-08:00</published><updated>2010-02-12T07:58:18.182-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Información'/><title type='text'>Instrucción SOUND</title><content type='html'>Empecé a experimentar con el PSG desde un programa BASIC, con la instrucción SOUND. Esta permite escribir directamente a los registros. Es una buena manera de aprender su funcionamiento. &lt;br /&gt;&lt;br /&gt;Su formato es el siguiente:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SOUND número de registro, expresión&lt;/span&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;número de registro = Enteros de 0 a 13&lt;/li&gt;&lt;li&gt;expresión = Constantes, variables o expresiones dentro del margen determinado para cada registro.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;En los registros del 8, 9 y 10, hay que tener en cuenta que para ajustar el volumen tendremos que utilizar un valor del 0 al 15 y para activar la envolvente le aplicaremos el valor 16.&lt;br /&gt;&lt;br /&gt;En el registro 7, la mejor manera de tocarlo, es utilizando una expresión binaria:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SOUND 7,&amp;amp;B00110110&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Su funcionamiento es: 0 es activar y 1 es desactivar. En el ejemplo anterior estaríamos activando el tono del canal A y la mezcla con este del canal de ruido. &lt;br /&gt;&lt;br /&gt;En el ejemplo activaríamos el tono de los tres canales (los tres primeros bits) y el ruido se mezclaría con el tercer canal (bit 5).&lt;br /&gt;&lt;br /&gt;En el siguiente ejemplo podemos probar de hacer un sonido similar al de un bassdrum, utilizando un tono grave junto a la señal de ruido y aplicándole la envolvente numero 1 (la que empieza en su amplitud máxima y se reduce a cero).&lt;br /&gt;Si utilizamos envolventes infinitas, podemos parar el sonido, aplicando el valor 63 al registro 7 o ejecutando la instrucción beep. &lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: paleturquoise; font-family: 'Courier New',Courier,monospace; margin: 10px; padding: 10px;"&gt;110 ' frecuencia canal A&lt;br /&gt;120 SOUND 0,10&lt;br /&gt;130 SOUND 1,15&lt;br /&gt;140 ' frecuencia ruido&lt;br /&gt;150 SOUND 6,31&lt;br /&gt;160 ' activacion de canales&lt;br /&gt;170 SOUND 7,&amp;amp;B00110110&lt;br /&gt;180 ' amplitud canal A&lt;br /&gt;190 SOUND 8,16&lt;br /&gt;200 ' periodo de la envolvente&lt;br /&gt;210 SOUND 11,0&lt;br /&gt;220 SOUND 12,15&lt;br /&gt;230 ' tipo de envolvente&lt;br /&gt;240 SOUND 13,1&lt;/div&gt;&lt;object height="81" width="100%"&gt; &lt;param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Faorante%2Fcomando-sound-psg-msx-tono-ruido&amp;amp;show_comments=false&amp;amp;auto_play=false&amp;amp;color=108546"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Faorante%2Fcomando-sound-psg-msx-tono-ruido&amp;amp;show_comments=false&amp;amp;auto_play=false&amp;amp;color=108546" type="application/x-shockwave-flash" width="100%"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;br /&gt;&lt;span&gt;&lt;a href="http://soundcloud.com/aorante/comando-sound-psg-msx-tono-ruido"&gt;comando sound PSG MSX, tono+ruido&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;object height="81" width="100%"&gt; &lt;param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Faorante%2Fcomando-sound-psg-msx-tono&amp;amp;show_comments=false&amp;amp;auto_play=false&amp;amp;color=108546"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Faorante%2Fcomando-sound-psg-msx-tono&amp;amp;show_comments=false&amp;amp;auto_play=false&amp;amp;color=108546" type="application/x-shockwave-flash" width="100%"&gt;&lt;/embed&gt; &lt;/object&gt;   &lt;span&gt;&lt;a href="http://soundcloud.com/aorante/comando-sound-psg-msx-tono"&gt;comando sound PSG MSX, tono&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-7672508248599464500?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/7672508248599464500/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/02/instruccion-sound.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/7672508248599464500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/7672508248599464500'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/02/instruccion-sound.html' title='Instrucción SOUND'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-2603076486970167679</id><published>2010-02-02T12:32:00.000-08:00</published><updated>2010-06-28T13:05:44.183-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Información'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Sobre el AY-3-8910 (PSG)</title><content type='html'>El &lt;a href="http://es.wikipedia.org/wiki/General_Instrument_AY-3-8910"&gt;AY-3-8910&lt;/a&gt; es un chip de sonido diseñado por General Instrument, que proporciona 3 canales generadores de tonos de onda cuadrada, más un generador pseudo-aleatorio de &lt;a href="http://es.wikipedia.org/wiki/Ruido_blanco"&gt;ruido blanco&lt;/a&gt; que se puede mezclar independientemente con cada canal.&lt;br /&gt;Tiene control de amplitud de 16 niveles por canal que se puede sustituir por una envolvente común para todos los canales.&lt;br /&gt;&lt;br /&gt;Yamaha fabricó un clon totalmente compatible llamado YM-2149, que fue utilizado en ordenadores como los Atari-ST.&lt;br /&gt;&lt;br /&gt;Dispone de 16 registros, dos de los cuales son para puertos de entrada/salida que se utilizan para los joysticks.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;table border="1" cellpadding="3" cellspacing="0" height="431" id="yrwh" style="border: medium solid;"&gt;&lt;tbody class="mytable"&gt;&lt;tr&gt; &lt;td&gt;Nº registro&lt;/td&gt; &lt;td&gt;Función&lt;/td&gt; &lt;td width="20%"&gt;Valor&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td width="20%"&gt;0&lt;/td&gt; &lt;td rowspan="2"&gt;Frecuencia del canal A (12 bits)&lt;br /&gt;(0 a 4095)&lt;/td&gt; &lt;td width="20%"&gt;8 bits&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td width="20%"&gt;1&lt;/td&gt; &lt;td&gt;4 bits&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td width="20%"&gt;2&lt;/td&gt; &lt;td rowspan="2"&gt;Frecuencia del canal B (12 bits) &lt;br /&gt;(0 a 4095)&lt;/td&gt; &lt;td width="20%"&gt;8 bit &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td width="20%"&gt;3&lt;/td&gt; &lt;td width="20%"&gt;4 bit &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td width="20%"&gt;4&lt;/td&gt; &lt;td rowspan="2"&gt;Frecuencia del canal C (12 bits)&lt;br /&gt;(0 a 4095)&lt;/td&gt; &lt;td width="20%"&gt;8 bit &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td width="20%"&gt;5&lt;/td&gt; &lt;td width="20%"&gt;4 bit &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td width="20%"&gt;6&lt;/td&gt; &lt;td&gt;Frecuencia de ruido.&amp;nbsp;(0-31)&lt;/td&gt; &lt;td width="20%"&gt;5 bits&amp;nbsp;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td width="20%"&gt;7&lt;/td&gt; &lt;td&gt;Activación de tono y ruido por canal&lt;br /&gt;&lt;div&gt;&lt;table border="1" bordercolor="#000000" cellpadding="3" cellspacing="0" class="" id="xt6w"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td bgcolor="#eeeeee"&gt;B7&lt;/td&gt; &lt;td bgcolor="#eeeeee"&gt;B6&lt;/td&gt; &lt;td bgcolor="#cfe2f3"&gt;B5&lt;/td&gt; &lt;td bgcolor="#cfe2f3"&gt;B4&lt;/td&gt; &lt;td bgcolor="#cfe2f3"&gt;B3&lt;/td&gt; &lt;td bgcolor="#f9cb9c"&gt;B2&lt;/td&gt; &lt;td bgcolor="#f9cb9c"&gt;B1&lt;/td&gt; &lt;td bgcolor="#f9cb9c"&gt;B0&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td bgcolor="#eeeeee"&gt;B&lt;/td&gt; &lt;td bgcolor="#eeeeee"&gt;A&lt;/td&gt; &lt;td bgcolor="#cfe2f3"&gt;C&lt;/td&gt; &lt;td bgcolor="#cfe2f3"&gt;B&lt;/td&gt; &lt;td bgcolor="#cfe2f3"&gt;A&lt;/td&gt; &lt;td bgcolor="#f9cb9c"&gt;C&lt;/td&gt; &lt;td bgcolor="#f9cb9c"&gt;B&lt;/td&gt; &lt;td bgcolor="#f9cb9c"&gt;A&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td bgcolor="#eeeeee" colspan="2"&gt;I/O Port&lt;/td&gt; &lt;td bgcolor="#cfe2f3" colspan="3"&gt;Activación ruido&lt;/td&gt; &lt;td bgcolor="#f9cb9c" colspan="3"&gt;Activación tono&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;/td&gt; &lt;td width="20%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td width="20%"&gt;8&lt;/td&gt; &lt;td&gt;Amplitud del canal A.&lt;br /&gt;&lt;div&gt;&lt;table border="1" bordercolor="#000000" cellpadding="3" cellspacing="0" class="" id="ojow"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td bgcolor="#cccccc" style="background-color: #cccccc; color: #666666;"&gt;B7&lt;/td&gt; &lt;td bgcolor="#cccccc" style="background-color: #cccccc; color: #666666;"&gt;B6&lt;/td&gt; &lt;td bgcolor="#cccccc" style="background-color: #cccccc; color: #666666;"&gt;B5&lt;/td&gt; &lt;td bgcolor="#cfe2f3"&gt;B4&lt;/td&gt; &lt;td bgcolor="#b6d7a8"&gt;B3&lt;/td&gt; &lt;td bgcolor="#b6d7a8"&gt;B2&lt;/td&gt; &lt;td bgcolor="#b6d7a8"&gt;B1&lt;/td&gt; &lt;td bgcolor="#b6d7a8"&gt;B0&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td bgcolor="#cccccc" style="background-color: #cccccc; color: #666666;"&gt;X&lt;/td&gt; &lt;td bgcolor="#cccccc" style="background-color: #cccccc; color: #666666;"&gt;X&lt;/td&gt; &lt;td bgcolor="#cccccc" style="background-color: #cccccc; color: #666666;"&gt;X&lt;/td&gt; &lt;td bgcolor="#cfe2f3"&gt;Env.&lt;/td&gt; &lt;td bgcolor="#b6d7a8" colspan="4"&gt;Volumen (0-15)&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt;&lt;/div&gt;El bit 4 se utiliza para activar la envolvente.&lt;/td&gt; &lt;td width="20%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td width="20%"&gt;9&lt;/td&gt; &lt;td&gt;Amplitud del canal B&lt;br /&gt;Idem que el registro 8.&lt;/td&gt; &lt;td width="20%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td width="20%"&gt;10&lt;/td&gt; &lt;td&gt;Amplitud del canal C&lt;br /&gt;Idem que el registro 8.&lt;/td&gt; &lt;td width="20%"&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td width="20%"&gt;11&lt;/td&gt; &lt;td rowspan="2"&gt;Periodo de la envolvente (16 bits)&lt;br /&gt;(0 a 65535)&lt;/td&gt; &lt;td width="20%"&gt;8 bits&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td width="20%"&gt;12&lt;/td&gt; &lt;td width="20%"&gt;8 bits&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td width="20%"&gt;13&lt;/td&gt; &lt;td&gt;Tipo de envolvente.&lt;br /&gt;(El periodo se encuentra marcado en gris)&lt;br /&gt;&lt;div id="g8n." style="text-align: left;"&gt;&lt;img src="http://4.bp.blogspot.com/_82S9Tngrad8/S2iFoSnw5MI/AAAAAAAAAoE/2irnPKsDlGI/s320/AY38910_envelopes.png" style="height: 320px; width: 140px;" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td width="20%"&gt;4 bits&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Más información: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;s&gt;&lt;a href="http://www.blogger.com/goog_568808192"&gt;Datasheet del AY-3-8910&lt;/a&gt;&lt;/s&gt;&lt;u&gt;&lt;s&gt;&lt;a href="http://www.blogger.com/goog_568808192"&gt; (&lt;/a&gt;&lt;/s&gt;&lt;/u&gt;&lt;s&gt;&lt;a href="http://www.blogger.com/goog_568808192"&gt;MSX Info Pages&lt;/a&gt;&lt;/s&gt;&lt;u&gt;&lt;s&gt;&lt;a href="http://www.blogger.com/goog_568808192"&gt;)&lt;/a&gt;&lt;/s&gt;&lt;/u&gt;&lt;/li&gt;&lt;li&gt;&lt;s&gt;&lt;a href="http://www.blogger.com/goog_568808192"&gt;Datasheet del YM-2149&lt;/a&gt;&lt;/s&gt;&lt;u&gt;&lt;s&gt;&lt;a href="http://www.blogger.com/goog_568808192"&gt; (&lt;/a&gt;&lt;/s&gt;&lt;/u&gt;&lt;s&gt;&lt;a href="http://www.blogger.com/goog_568808192"&gt;MSX Info Pages&lt;/a&gt;&lt;/s&gt;&lt;u&gt;&lt;s&gt;)&lt;/s&gt;&lt;/u&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ionpool.net/arcade/gottlieb/technical/datasheets/AY_3_8913_datasheet.pdf"&gt;Datasheet del AY-3-8910&lt;/a&gt;&amp;nbsp;(PDF)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-2603076486970167679?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/2603076486970167679/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/02/sobre-el-ay-3-8910-psg.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/2603076486970167679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/2603076486970167679'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/02/sobre-el-ay-3-8910-psg.html' title='Sobre el AY-3-8910 (PSG)'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_82S9Tngrad8/S2iFoSnw5MI/AAAAAAAAAoE/2irnPKsDlGI/s72-c/AY38910_envelopes.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-1150582921186648358</id><published>2010-02-01T08:30:00.000-08:00</published><updated>2010-02-01T08:30:36.217-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GUI'/><title type='text'>Diseño de la GUI (3). Las pantallas.</title><content type='html'>&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: small;"&gt;Esta mañana me la he pasado acabando las pantallas con la herramienta nMSXtiles de Pentacour. He retocado un poco la de edición y la he traducido al ingles. Mi&amp;nbsp;intención&amp;nbsp;es la de hacerlo multiidioma, pero de momento lo dejo para mas adelante, hasta ver como me desenvuelvo con la&amp;nbsp;programación.&amp;nbsp;También&amp;nbsp;he terminado la de leer y guardar ficheros, la de ayuda y la ventana modal. He tenido que modificar el tileset, para&amp;nbsp;reestructurarlo&amp;nbsp;y añadir nuevos tiles que son necesarios.&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;Aquí&amp;nbsp;podéis&amp;nbsp;verlas. Espero vuestras opiniones para poderlas mejorar (si esta dentro de mis&amp;nbsp;posibilidades).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_82S9Tngrad8/S2b-teqlq8I/AAAAAAAAAnc/xnT6D3beELc/s1600-h/PSGed_scr_Edit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_82S9Tngrad8/S2b-teqlq8I/AAAAAAAAAnc/xnT6D3beELc/s320/PSGed_scr_Edit.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Pantalla principal de la&amp;nbsp;aplicación.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_82S9Tngrad8/S2b-xj8N3XI/AAAAAAAAAnk/YbVQXkOFLBw/s1600-h/PSGed_scr_Load.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_82S9Tngrad8/S2b-xj8N3XI/AAAAAAAAAnk/YbVQXkOFLBw/s320/PSGed_scr_Load.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Pantalla de carga de ficheros. Contiene una serie de botones para seleccionar la unidad y mostrar el directorio. El uso de carpetas (MSXDOS2), no es seguro que lo soporte.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_82S9Tngrad8/S2b-zqGEHlI/AAAAAAAAAns/6Vm1tt60qzQ/s1600-h/PSGed_scr_save.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_82S9Tngrad8/S2b-zqGEHlI/AAAAAAAAAns/6Vm1tt60qzQ/s320/PSGed_scr_save.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Pantalla para guardar ficheros. Similar a la de lectura, pero con un campo de entrada para el nombre del fichero.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_82S9Tngrad8/S2b-1Vi7n9I/AAAAAAAAAn0/KZdVO7qpCkE/s1600-h/PSGed_scr_HELP.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_82S9Tngrad8/S2b-1Vi7n9I/AAAAAAAAAn0/KZdVO7qpCkE/s320/PSGed_scr_HELP.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Pantalla de ayuda. Es una&amp;nbsp;área&amp;nbsp;donde se mostrará&amp;nbsp;un texto que se controlará&amp;nbsp;mediante una barra de scroll.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_82S9Tngrad8/S2b-3NVAF9I/AAAAAAAAAn8/V9dEWpl83Jk/s1600-h/PSGed_scr_winmodal.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_82S9Tngrad8/S2b-3NVAF9I/AAAAAAAAAn8/V9dEWpl83Jk/s320/PSGed_scr_winmodal.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ventana Modal. He tenido que crear unos tiles para el contorno y la sombra.&amp;nbsp;Aprovecho&amp;nbsp;la fuente con fondo negro de la barra de&amp;nbsp;menú,&amp;nbsp;para hacer los botones.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-1150582921186648358?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/1150582921186648358/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/02/diseno-de-la-gui-3-las-pantallas.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/1150582921186648358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/1150582921186648358'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/02/diseno-de-la-gui-3-las-pantallas.html' title='Diseño de la GUI (3). Las pantallas.'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_82S9Tngrad8/S2b-teqlq8I/AAAAAAAAAnc/xnT6D3beELc/s72-c/PSGed_scr_Edit.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-7372019435255310198</id><published>2010-01-31T10:53:00.000-08:00</published><updated>2010-01-31T10:56:40.767-08:00</updated><title type='text'>Funcionalidad</title><content type='html'>He creado una lista de la funcionalidad, desglosada por categorías.&lt;br /&gt;Algunas ya están resueltas ;D&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Proyecto y código&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Crear blog como canal de información.&lt;/li&gt;&lt;li&gt;Dar de alta proyecto en &lt;a href="http://code.google.com/hosting/"&gt;Google Code&lt;/a&gt; o&amp;nbsp;&lt;a href="http://sourceforge.net/"&gt;sourceforge&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Recolección de documentación técnica para el desarrollo.&lt;/li&gt;&lt;li&gt;Elección de la tecnologia a usar (lenguaje/s de programación), y herramientas de desarrollo.&lt;/li&gt;&lt;li&gt;Buscar librerías y código de apoyo para MSX.&lt;/li&gt;&lt;li&gt;Crear "Hello World".&lt;/li&gt;&lt;li&gt;Decidir lenguajes soportados: (monoidioma/multiidioma)? (Español/Ingles)?&lt;/li&gt;&lt;li&gt;La aplicación ha de ser de tipo ROM de 32k.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Diseño de la interfaz gráfica&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Tileset&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Pantalla de presentación.&lt;/li&gt;&lt;li&gt;Pantalla del editor.&lt;/li&gt;&lt;li&gt;Pantalla de ayuda&lt;/li&gt;&lt;li&gt;Pantalla de carga de ficheros.&lt;/li&gt;&lt;li&gt;Pantalla para guardar ficheros.&lt;/li&gt;&lt;li&gt;Ventana modal de salida de mensajes (alerta, aviso y error).&lt;/li&gt;&lt;li&gt;Sprite cursor para ratón.&lt;/li&gt;&lt;li&gt;Sprite cursor para teclado.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;I/O&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Acceso a los controles por teclado.&lt;/li&gt;&lt;li&gt;Acceso a los controles con ratón.&lt;/li&gt;&lt;li&gt;Acceso a los controles mediante potenciometros.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Acceso a disco. Leer y guardar ficheros binarios de un área de memoria (datos del PSGed)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt; Controles de pantalla&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Selector de valor simple. Izquierda decrementa y derecha incrementa el valor.&lt;/li&gt;&lt;li&gt;Selector de valor de envolvente. Igual que el simple, pero muestra una imagen correspondiente a la forma del envolvente.&lt;/li&gt;&lt;li&gt;  CheckBox: Conmutador con dos estados (Off/On).&lt;/li&gt;&lt;li&gt;Tira de conmutadores de los patrones. &lt;/li&gt;&lt;li&gt;Botón de salida de la aplicación (solo desde ratón).&lt;/li&gt;&lt;li&gt;Control de flujo de tabulación (con cursores arriba y abajo)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Funcionalidades por teclas&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;[F1] Muestra la pantalla de Ayuda.&lt;/li&gt;&lt;li&gt;[F2] Player del secuencia (3 canales un solo patrón).&lt;/li&gt;&lt;li&gt;[F3] Acceso al Editor.&lt;/li&gt;&lt;li&gt;[F4] Acceso a la ventana de carga de ficheros.&lt;/li&gt;&lt;li&gt;[F5] Acceso a la ventana para guardar ficheros.&lt;/li&gt;&lt;li&gt;[Stop]. Detiene el secuenciador y reset de los tres canales. &lt;/li&gt;&lt;li&gt;Cursores Arriba y abajo. Cambia el foco del control de la pantalla.&lt;/li&gt;&lt;li&gt;Cursores Izquierda y derecha. Cambia el valor del control.&lt;/li&gt;&lt;li&gt;[Enter] Ok.&lt;/li&gt;&lt;li&gt;[Esc] Cancelar/Salir (Ventanas modales, Help, Load y Save).&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-7372019435255310198?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/7372019435255310198/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/01/funcionalidad.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/7372019435255310198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/7372019435255310198'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/01/funcionalidad.html' title='Funcionalidad'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-2918447105934096869</id><published>2010-01-28T09:13:00.000-08:00</published><updated>2010-02-04T11:27:29.928-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GUI'/><title type='text'>Diseño de la GUI (2). Las herramientas.</title><content type='html'>Primeramente, me olvide decir de que la pantalla esta realizada para el modo screen 2 de los MSX. Aprovecho para presentaros un tutotial de &lt;a href="http://aorante.blogspot.com/2010/01/como-pintar-pantallas-sc2-de-msx-con.html"&gt;como dibujar imágenes para screen2 con Photoshop&lt;/a&gt;, que he alojado recientemente en mi blog.&lt;br /&gt;&lt;br /&gt;La imagen final que vimos en el post anterior, es un boceto desde donde saque el tileset para crear las pantallas con un programa editor de mapas de caracteres (&lt;a href="http://es.wikipedia.org/wiki/Tile"&gt;tiles&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_82S9Tngrad8/S2G_GfRYH7I/AAAAAAAAAm4/Z7MduldyzKY/s1600-h/PSGed_tileset_SC2_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_82S9Tngrad8/S2G_GfRYH7I/AAAAAAAAAm4/Z7MduldyzKY/s320/PSGed_tileset_SC2_01.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;El sofware que he utilizado es &lt;a href="http://pentacour.com/blog/category/nmsxtiles"&gt;nMSXtiles v0.4.2 de Pentacour&lt;/a&gt; para Windows. Es una aplicación especifica para crear pantallas en modo screen 2, a partir de una imagen con los tiles. Simplifica enormemente el desarrollo de las pantallas, comparado con otros medios y nos proporciona un fichero con los datos preparados para utilizarlos en nuestros programas en assembler.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_82S9Tngrad8/S2G_NIHjs5I/AAAAAAAAAnA/G6f7ZCxIp0o/s1600-h/nMSXtiles_PSGed01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_82S9Tngrad8/S2G_NIHjs5I/AAAAAAAAAnA/G6f7ZCxIp0o/s320/nMSXtiles_PSGed01.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;De momento he realizado la ventana de Edición y he empezado a trabajar las ventanas de leer y guardar ficheros. Haciendo estas últimas, me he dado cuenta de que tendré que añadir nuevos tiles.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Nota:&lt;/b&gt; Si alguien quiere utilizar estos tiles, autorizo a usarlos y modificarlos sin ningún tipo de requisito, aunque agradecería que me lo comunicarais.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-2918447105934096869?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/2918447105934096869/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/01/diseno-de-la-gui-2.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/2918447105934096869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/2918447105934096869'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/01/diseno-de-la-gui-2.html' title='Diseño de la GUI (2). Las herramientas.'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_82S9Tngrad8/S2G_GfRYH7I/AAAAAAAAAm4/Z7MduldyzKY/s72-c/PSGed_tileset_SC2_01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-2186145757081397417</id><published>2010-01-26T03:33:00.000-08:00</published><updated>2010-02-04T11:36:16.565-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GUI'/><title type='text'>Diseño de la GUI (1). Diseño y Bocetos.</title><content type='html'>Antes de entrar en detalle de como se elaboró, quiero mostrar varios de los pasos de la evolución de la Interfaz Gráfica de Usuario (GUI), hasta llegar a la definitiva.&lt;br /&gt;Aunque lo mejor es empezar dibujándola en papel, yo muchas veces empiezo a plasmar mis ideas directamente desde Photoshop. Quizás no sea lo mejor para pantallas de poca resolución, siendo aconsejado un programa tipo Paint, como los existentes para Amiga como el Deluxe Paint o Personal Paint. También existen programas de este tipo para PC, creo que son freeware. Habría que probarlos para ver que tal funcionan. Para MAC existe el &lt;a href="http://opensword.org/Pixen/"&gt;Pixen&lt;/a&gt;, pero me es un poco incomodo, seguramente por que no estoy acostumbrado a él. Para MSX también hay bastantes programas tipo Paint. Lo recomendable es utilizar la herramienta con la que uno trabaje más a gusto.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_82S9Tngrad8/S17I71fmdVI/AAAAAAAAAlc/zEd_9VZS5mM/s1600-h/PSGed_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_82S9Tngrad8/S17I71fmdVI/AAAAAAAAAlc/zEd_9VZS5mM/s320/PSGed_01.png" /&gt;&lt;/a&gt;&lt;/div&gt;En el primer boceto, podemos ver que empecé a desarrollar varias partes. Una de ellas es un control tipo potenciometro. Probé con dos tamaños, pero me decidí por el pequeño, con un tamaño de 16x16 puntos. También creé la fuente, unos marcos, un controlador tipo checkbox, un selector de envolvente y un deslizador para el control de volumen.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_82S9Tngrad8/S17JpsejDqI/AAAAAAAAAlk/uNcz1jOxMCA/s1600-h/PSGed_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_82S9Tngrad8/S17JpsejDqI/AAAAAAAAAlk/uNcz1jOxMCA/s320/PSGed_02.png" /&gt;&lt;/a&gt;&lt;/div&gt;En la siguiente pantalla, podemos ver que comencé a darle forma. Desestime el control tipo potenciometro y lo sustituí por un selector donde se muestra el valor decimal de los registros. Mi intención era de poner un controlador del volumen general, pero como veremos más adelante, lo eliminé, para simplificar.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_82S9Tngrad8/S17K-a9xYeI/AAAAAAAAAls/X_G3cbG74bk/s1600-h/PSGed_05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_82S9Tngrad8/S17K-a9xYeI/AAAAAAAAAls/X_G3cbG74bk/s320/PSGed_05.png" /&gt;&lt;/a&gt;&lt;/div&gt;En esta pantalla, amplié la zona del envolvente y el ruido para que abarcara el ancho de la pantalla para indicar que afectan a los tres canales. También compacté los controles para ganar espacio en la zona de abajo y utilicé colores para mejorar el aspecto y diferenciar la información. Aunque no se vea, en una capa iva trabajando en el set de caracteres.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_82S9Tngrad8/S17NcHhbiSI/AAAAAAAAAl0/9RZNjUaJvOs/s1600-h/PSGed_06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_82S9Tngrad8/S17NcHhbiSI/AAAAAAAAAl0/9RZNjUaJvOs/s320/PSGed_06.png" /&gt;&lt;/a&gt;&lt;/div&gt;En el siguiente paso cambié el dibujo de los marcos por unos en relieve.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_82S9Tngrad8/S17Nz_XBk8I/AAAAAAAAAl8/EbIlFAF6vuw/s1600-h/PSGed_15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_82S9Tngrad8/S17Nz_XBk8I/AAAAAAAAAl8/EbIlFAF6vuw/s320/PSGed_15.png" /&gt;&lt;/a&gt;&lt;/div&gt;En este último paso, como podéis observar, hay bastantes cambios. El logo lo he modificado por una barra horizontal con el nombre de aplicación y la versión más un botón de salida. Uno de los motivos, es el de ganar espacio para poder incorporar todas las funcionalidades necesarias. He añadido un título de la pantalla, que en este caso seria la de Edición, ya que habrá una de ayuda, y las de acceso a disco para leer y grabar la información. Abajo he añadido un pequeño secuenciador de 16 pasos (tipo TR 909), pero de un solo patrón. y una barra con un menú de opciones, que se lanzan con las teclas de función.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-2186145757081397417?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/2186145757081397417/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/01/diseno-de-la-gui-1.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/2186145757081397417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/2186145757081397417'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/01/diseno-de-la-gui-1.html' title='Diseño de la GUI (1). Diseño y Bocetos.'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_82S9Tngrad8/S17I71fmdVI/AAAAAAAAAlc/zEd_9VZS5mM/s72-c/PSGed_01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2888451791099256794.post-322796676476490060</id><published>2010-01-25T13:17:00.000-08:00</published><updated>2010-01-26T02:28:19.949-08:00</updated><title type='text'>Comienza un nuevo proyecto</title><content type='html'>&lt;div&gt;PSGed pretende ser un programa para los ordenadores MSX de primera generación, para edición de los registros del chip de sonido &lt;a href="http://es.wikipedia.org/wiki/General_Instrument_AY-3-8910"&gt;AY-3-8910&lt;/a&gt;.&lt;/div&gt;La idea nació el año pasado, inspirado en el &lt;a href="http://a1200.wordpress.com/2008/10/15/npot-v10-para-prophet64/"&gt;post del blog de Neuroflip&lt;/a&gt; del controlador basado en potenciometros para el &lt;a href="http://www.8bitventures.com/"&gt;Prophet64&lt;/a&gt; de Commodore 64. Mi intención es conseguir una utilidad para jugar con el PSG, con una interfaz atractiva y fácil de usar, con la posibilidad de usar ratón y potenciometros.&lt;div&gt;El objetivo es adquirir experiencia para abordar un proyecto mas complejo, como es el desarrollo de un secuenciador musical tipo &lt;a href="http://es.wikipedia.org/wiki/Tracker"&gt;tracker&lt;/a&gt; para el modulo de sonido SFG-01/05 de Yamaha (incluido en los ordenadores CX5M). &lt;/div&gt;&lt;div&gt;Con este blog quiero compartir la experiencia por si puede servir de ayuda a alguien y aprovechar para invitaros a participar con vuestros comentarios e ideas.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2888451791099256794-322796676476490060?l=psged.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psged.blogspot.com/feeds/322796676476490060/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://psged.blogspot.com/2010/01/comienza-un-nuevo-proyecto.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/322796676476490060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2888451791099256794/posts/default/322796676476490060'/><link rel='alternate' type='text/html' href='http://psged.blogspot.com/2010/01/comienza-un-nuevo-proyecto.html' title='Comienza un nuevo proyecto'/><author><name>aorante</name><uri>http://www.blogger.com/profile/17213728023644740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_82S9Tngrad8/TLWam7mDMMI/AAAAAAAAA7s/8mGMFAAWJR8/S220/aorante_pixel_178x178.png'/></author><thr:total>0</thr:total></entry></feed>
