<?xml version="1.0" encoding="ISO-8859-1" ?><rss version="2.0"><channel>

<title>Habi Hablóg</title>
<link>http://www.habisoft.com/irmia/</link>
<description>Paranoias, chorradas y tecnoesoterismo</description>

<item>
<title>Doble nicho</title>
<guid isPermaLink="true">http://www.habisoft.com/irmia/comentarios.asp?id=372</guid>
<link>http://www.habisoft.com/irmia/comentarios.asp?id=372</link>
<comments>http://www.habisoft.com/irmia/comentarios.asp?id=372#fin</comments>
<category>Paranoias</category>
<author>NoSpam@NoSpam.com (Habi)</author>
<description>&lt;p style=&quot;text-align: justify;&quot;&gt;
	Problema: Los PCW necesitan una se&amp;ntilde;al /READY de verdad para parte de su software, y las Gotek antiguas no traen puente para ello.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Soluci&amp;oacute;n: Hacer el mod correspondiente (&lt;a href=&quot;https://github.com/keirf/flashfloppy/wiki/Hardware-Mods#motor-signal&quot;&gt;https:...flashfloppy...motor-signal&lt;/a&gt;) para conectar /MTRON a PB15.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Problema: Las Gotek SFRKC30.AT2 traen un microcontrolador en encapsulado QFN32; en concreto, sin la patilla PB15.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Soluci&amp;oacute;n: Hacer el mod en PA15 (usado en la enhanced), aprovechando el conector del codificador rotatorio que no uso, y modificar fuentes a lo burro.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
	&lt;img alt=&quot;&quot; src=&quot;http://www.habisoft.com/userfiles/image/04/Z0.jpg&quot; style=&quot;width: 500px; height: 375px;&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
	&lt;img alt=&quot;&quot; src=&quot;http://www.habisoft.com/userfiles/image/04/Z1.jpg&quot; style=&quot;width: 500px; height: 375px;&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
	&lt;img alt=&quot;&quot; src=&quot;http://www.habisoft.com/userfiles/image/04/Z2.png&quot; style=&quot;width: 500px; height: 292px;&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	A ver si no se me vuelve a olvidar.&lt;/p&gt;
</description>
<pubDate>11 Oct 2025 11:43:26 +0100</pubDate>
</item>

<item>
<title>Sublime</title>
<guid isPermaLink="true">http://www.habisoft.com/irmia/comentarios.asp?id=371</guid>
<link>http://www.habisoft.com/irmia/comentarios.asp?id=371</link>
<comments>http://www.habisoft.com/irmia/comentarios.asp?id=371#fin</comments>
<category>Paranoias</category>
<author>NoSpam@NoSpam.com (Habi)</author>
<description>&lt;p style=&quot;text-align: center;&quot;&gt;
	&lt;img alt=&quot;&quot; src=&quot;http://www.habisoft.com/userfiles/image/04/CeCeCe.png&quot; style=&quot;width: 500px; height: 223px;&quot; /&gt;&lt;/p&gt;
</description>
<pubDate>29 Oct 2024 10:15:00 +0100</pubDate>
</item>

<item>
<title>Experimentos… ¿inútiles?</title>
<guid isPermaLink="true">http://www.habisoft.com/irmia/comentarios.asp?id=370</guid>
<link>http://www.habisoft.com/irmia/comentarios.asp?id=370</link>
<comments>http://www.habisoft.com/irmia/comentarios.asp?id=370#fin</comments>
<category>Tecnoesoterismo</category>
<author>NoSpam@NoSpam.com (Habi)</author>
<description>&lt;p style=&quot;text-align: justify;&quot;&gt;
	Hace no mucho estuve hablando con alguien sobre la cantidad de cosas que hago y no publico. As&amp;iacute; que ah&amp;iacute; van un par de ellas de las comentadas, con Dandanators de por medio y con m&amp;aacute;s de dos a&amp;ntilde;os.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
	&lt;strong&gt;Puertos serie:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Habiendo emulado varias interfaces MIDI, incluyendo la EMR de PCW (sin probar, porque la &amp;uacute;nica persona conocida con su software no quiere enviar ni el volcado ni el disco), costaba poco a&amp;ntilde;adir puertos serie.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	No es algo que me parezca especialmente &amp;uacute;til, pero me dio algunos momentos divertidos cuando lo un&amp;iacute; a un emulador de puertos serie.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Por ejemplo, puedo enviar binarios y flashear su E2PROM directamente con su aplicaci&amp;oacute;n Java tanto desde CPC:&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
	&lt;iframe height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/ngg-kJqx4F8?si=0Gz2hylO7MS3JAPN&quot; width=&quot;500&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
	&lt;a href=&quot;/userfiles/image/04/DanImg1g.jpg&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.habisoft.com/userfiles/image/04/DanImg1p.jpg&quot; style=&quot;width: 500px; height: 453px;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Como de Spectrum, v&amp;iacute;a Multiply:&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
	&lt;a href=&quot;/userfiles/image/04/DanImg2g.jpg&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.habisoft.com/userfiles/image/04/DanImg2p.jpg&quot; style=&quot;width: 500px; height: 281px;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Junto con lo del PDS, parece que tengo alg&amp;uacute;n tipo de parafilia con vincular los emuladores con algo externo.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
	&lt;strong&gt;Dan256:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Creo que nunca he hablado en este blog de Spec256, un antiguo emulador de Spectrum que nos propon&amp;iacute;a una idea bastante interesante: emular una arquitectura Harvard paralela de 64 bits, e interpretar cada p&amp;iacute;xel (cada bit en la zona de bitmap, que ahora es un byte) como un color de una paleta de 256, con algunas matizaciones. Ah&amp;iacute; van un par de diapositivas de una charla que di sobre emulaci&amp;oacute;n, Z80 y Spectrum:&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
	&lt;a href=&quot;/userfiles/image/04/DanImg5g.jpg&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.habisoft.com/userfiles/image/04/DanImg5p.jpg&quot; style=&quot;width: 500px; height: 564px;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Superada esa parte, nos surgir&amp;iacute;a un problema si quisi&amp;eacute;semos distribuir software de alguna forma en una m&amp;aacute;quina &amp;quot;real&amp;quot; que no fuesen snapshots (+extras externos), especialmente si queremos conservar la separaci&amp;oacute;n entre ambas arquitecturas.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	As&amp;iacute; que pens&amp;eacute;: si tenemos una RAM paralela de 64b, &amp;iquest;por qu&amp;eacute; no un Dandanator con memoria paralela de 64b tambi&amp;eacute;n? As&amp;iacute; que prob&amp;eacute; a crear el Dan256:&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Fue relativamente f&amp;aacute;cil crear un romset con todos los juegos &amp;quot;originales&amp;quot; del Spec256 (sin fondos, l&amp;oacute;gicamente):&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
	&lt;iframe height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/YiXn0QWM8Y0?si=bxZejw8Ff4I76GG0&quot; width=&quot;500&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	E incluso me permit&amp;iacute; el experimento de cacharrear con el Ianna de Spectrum y los gr&amp;aacute;ficos (protagonista) de MSX2:&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
	&lt;iframe height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/GlSchIvhMDU?si=l1Hd6xeY7T289KL3&quot; width=&quot;500&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	La reflexi&amp;oacute;n y transparencia ser&amp;iacute;an sencillos de apa&amp;ntilde;ar. El problema es que tiene gr&amp;aacute;ficos de nivel comprimidos, habr&amp;iacute;a que desempaquetar, cambiar referencias, etc. Mucho curro para un experimento tonto (como si todo lo anterior no lo fuese).&lt;/p&gt;
</description>
<pubDate>27 Oct 2024 18:06:05 +0100</pubDate>
</item>

<item>
<title>El expediente X que nadie pidió</title>
<guid isPermaLink="true">http://www.habisoft.com/irmia/comentarios.asp?id=369</guid>
<link>http://www.habisoft.com/irmia/comentarios.asp?id=369</link>
<comments>http://www.habisoft.com/irmia/comentarios.asp?id=369#fin</comments>
<category>Paranoias</category>
<author>NoSpam@NoSpam.com (Habi)</author>
<description>&lt;p style=&quot;text-align: justify;&quot;&gt;
	Creo que ya he contado alguna que otra vez mi gusto por el software independiente; puede ser un soplo de aire fresco en el mejor de los casos, y pura ponzo&amp;ntilde;a en el peor (lo cual tambi&amp;eacute;n es disfrutable a su manera). Esto viene de lejos, en la &amp;eacute;poca ya disfrutaba de publicaciones como VideoSpectrum o de los programas enviados por lectores en revistas como MicroHobby.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Y de uno de &amp;eacute;stos &amp;uacute;ltimos voy a hablar hoy; en su tercera &amp;eacute;poca dicha revista empez&amp;oacute; a distribuirse mensualmente y a incluir cintas (MicroHobby Selecci&amp;oacute;n) con demos, juegos completos, cargadores y los programas y ejemplos publicados, incluyendo los juegos de lectores, para no tener que teclearlos.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	A muchos de ellos jugu&amp;eacute; m&amp;aacute;s horas de las que quisiera admitir. Algunos estaban inspirados en juegos comerciales, como Silver Gun (aunque en el men&amp;uacute; pone The Bang Bank), similar a West Bank; ambos claramente inspirados en la recreativa Bank Panic!. Zhak, con una est&amp;eacute;tica muy a lo Camelot Warriors. Yucan, de disparos con aviones, con buen nivel t&amp;eacute;cnico...&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Otros eran m&amp;aacute;s personales, como Gnoni (aventura plataformera muy simp&amp;aacute;tica a la par que recomendable) o ParapShock (otra videoaventura, con un mapeado enorme). Y otros eran extravagantes como el que hoy os traigo. Y es que hace poco, leyendo los t&amp;iacute;tulos de las cosas publicadas no me sonaba para nada un tal &amp;quot;Rio Blanco&amp;quot;, pero en cuanto fui a mirar una captura lo record&amp;eacute; de golpe: &amp;quot;&amp;iexcl;es el juego del ni&amp;ntilde;o gamba!&amp;quot;, pens&amp;eacute;, pues as&amp;iacute; le llamaba yo; y quiz&amp;aacute;s por no recordar su nombre real no lo hab&amp;iacute;a vuelto a tocar desde entonces.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	El juego est&amp;aacute; rodeado de un cierto halo de misterio. Unas instrucciones escuetas por parte de MH, sin portada, un juego que no tiene men&amp;uacute; (pero s&amp;iacute; un flasheo negro / magenta desagradable y un zumbido m&amp;aacute;s desagradable a&amp;uacute;n), y del cual no existe RZX o siquiera un mapa completo (en el que hay, se pide ayuda para poder terminarlo) pese a existir pokes.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
	&lt;img alt=&quot;&quot; src=&quot;http://www.habisoft.com/userfiles/image/04/RB_Inst.jpg&quot; style=&quot;width: 427px; height: 405px;&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	He dejado lo mejor para el final: el indescriptible protagonista (al que yo bautic&amp;eacute; como ni&amp;ntilde;o gamba), supuestamente un &amp;quot;sistema rob&amp;oacute;tico&amp;quot; (?) llamado Hunter MKII, pero que yo veo como una especie de h&amp;iacute;brido humano / crust&amp;aacute;ceo con lanzallamas montado en monociclo. Saquen sus conclusiones (del personaje y de m&amp;iacute;), y de regalo marav&amp;iacute;llense con las posibilidades de la IA generativa.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
	&lt;img alt=&quot;&quot; src=&quot;http://www.habisoft.com/userfiles/image/04/RB_NG.png&quot; style=&quot;width: 500px; height: 1000px;&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	En fin, que demasiados misterios. As&amp;iacute; que tuve que desensamblarlo y mirar por dentro, descubriendo varias cosas:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		&amp;iexcl;El juego soporta joysticks! Aunque no lo pone en las instrucciones, cuando est&amp;aacute; ese flasheo / zumbido si se pulsa el disparo de teclado (cualquier tecla de la fila inferior) se selecciona teclado, con 5 (disparo Sinclair 2) se selecciona dicho joystick y con 6 se utiliza Kempston.&lt;/li&gt;
	&lt;li&gt;
		El mapa publicado es casi completo. Manipulando las habitaciones a mano a la entrada de la pantalla y montando seg&amp;uacute;n las tablas internas tenemos el mapa completo, incluyendo una habitaci&amp;oacute;n inaccesible (tiene pinta de que se le fue la mano al escribir la de al lado) y otra que parece estar a medio hacer y que al final no se us&amp;oacute;. Curiosamente utiliza la entrada 0, por lo que cualquier habitaci&amp;oacute;n inexistente en el mapa es la primera de la fila superior (da un poco igual al no existir entradas a la misma, pero es raro existiendo no definidas).&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
	&lt;a href=&quot;/userfiles/image/04/RB_Mapa.png&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.habisoft.com/userfiles/image/04/RB_MapaRed.png&quot; style=&quot;width: 500px; height: 134px;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		Salvo los bidones que dan vida (no confundir con las bombonas), hay varios tipos de objetos (que no se dibujan en la esquina inferior derecha al coger, como cabr&amp;iacute;a esperar al haber un hueco) y que son necesarios para avanzar. Nada de spoilers, aunque no creo que vaya a jugarlo ni el Tato; es bastante dif&amp;iacute;cil, entre saltos ajustados y controles ortop&amp;eacute;dicos para subir por cuerdas (o lo que yo interpreto como cuerdas). A cambio, el personaje se puede controlar durante ca&amp;iacute;das y saltos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
	&lt;img alt=&quot;&quot; src=&quot;http://www.habisoft.com/userfiles/image/04/RB_Juego.png&quot; style=&quot;width: 500px; height: 375px;&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		El final est&amp;aacute; en el lugar marcado como 2 en el mapa publicado. Desgraciadamente, el juego salta a una rutina que carga algo menos de 3KB y las ejecuta, pero dicho bloque no est&amp;aacute; en ninguno de los TAP o TZX que he encontrado por Internet.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Se nos acumulan los misterios.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	&amp;iquest;Lleg&amp;oacute; el creador del mapa hasta la rutina de carga y pens&amp;oacute; que se hab&amp;iacute;a colgado?&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Y con respecto al bloque excluido, no es una omisi&amp;oacute;n por parte de los preservadores. No estaba en la cinta de MH, he hecho la prueba; no hay final feliz salvo que alguien localice al autor.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
	&lt;img alt=&quot;&quot; src=&quot;http://www.habisoft.com/userfiles/image/04/RB_Cas.jpg&quot; style=&quot;width: 500px; height: 375px;&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Es probable que estuviese en la cinta original y que en la redacci&amp;oacute;n de MH lo omitiesen por pensar que se trataba de otra cosa (el juego ya hab&amp;iacute;a cargado), m&amp;aacute;xime si vino con instrucciones m&amp;iacute;nimas. Me resultar&amp;iacute;a raro que faltase de origen, pues el resto es perfectamente funcional.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Por lo menos ahora tengo el mapa e instrucciones, y s&amp;eacute; que es jugable y terminable, pese a no tener un men&amp;uacute; o cierre.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Otro final agridulce.&lt;/p&gt;
</description>
<pubDate>13 Jan 2024 04:38:25 +0100</pubDate>
</item>

<item>
<title>eNigma</title>
<guid isPermaLink="true">http://www.habisoft.com/irmia/comentarios.asp?id=368</guid>
<link>http://www.habisoft.com/irmia/comentarios.asp?id=368</link>
<comments>http://www.habisoft.com/irmia/comentarios.asp?id=368#fin</comments>
<category>Yuyus</category>
<author>NoSpam@NoSpam.com (Habi)</author>
<description>&lt;p style=&quot;text-align: center;&quot;&gt;
	&lt;img alt=&quot;&quot; src=&quot;http://www.habisoft.com/userfiles/image/04/Im.png&quot; style=&quot;width: 300px; height: 199px;&quot; /&gt;&lt;/p&gt;
</description>
<pubDate>23 Mar 2023 00:03:18 +0100</pubDate>
</item>

<item>
<title>La cuadratura del píxel</title>
<guid isPermaLink="true">http://www.habisoft.com/irmia/comentarios.asp?id=367</guid>
<link>http://www.habisoft.com/irmia/comentarios.asp?id=367</link>
<comments>http://www.habisoft.com/irmia/comentarios.asp?id=367#fin</comments>
<category>Tecnoesoterismo</category>
<author>NoSpam@NoSpam.com (Habi)</author>
<description>&lt;p style=&quot;text-align: justify;&quot;&gt;
	Los p&amp;iacute;xeles cuadrados son un lujo moderno. Los microordenadores antiguos sacaban una imagen anal&amp;oacute;gica como buenamente pod&amp;iacute;an, y el resultado eran p&amp;iacute;xeles no del todo cuadrados.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Empecemos por analizar la se&amp;ntilde;al de v&amp;iacute;deo PAL.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	En vertical tenemos 625 filas, es decir, 312,5 por campo o 312 a secas si usamos un modo progresivo que es el caso que nos interesa, con lo que pasamos de 50 Hz a 50,08. En cualquier caso, tenemos 576 filas visibles (18,4 ms), unas 288 por campo y ese es el valor que nos interesa.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	En horizontal tenemos una zona de sincronismos de 12,05 us (1,65 porche A, 4,7 sincronismo y 5,7 porche B) y una zona visible de 51,95 us. De nuevo, ese es el valor que nos interesa.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Los ordenadores de los que hablamos no aprovechan al completo la zona visible, sino que ocupan una zona activa centrada y dejan una el resto como overscan (borde) por seguridad y por simplificar hasta rellenar la visible. Esto no nos va a afectar pues vamos a analizar las frecuencias del reloj de p&amp;iacute;xeles, pero bueno es saberlo.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Sabiendo que la pantalla CRT cl&amp;aacute;sica tiene una relaci&amp;oacute;n 4:3, entonces las cuentas son f&amp;aacute;ciles. Asumimos cada fila de igual alto con lo que tenemos 4/3*288=384 p&amp;iacute;xeles visibles en horizontal en cada una. Si ahora dividimos por el tiempo que pasamos en su zona visible (los 51,95 us) nos salen unos 7,3917&amp;hellip; Mhz en nuestra zona visible.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Comparemos ahora algunos ordenadores y sus relojes:&lt;/p&gt;
&lt;ul&gt;
	&lt;li style=&quot;text-align: justify;&quot;&gt;
		Spectrum 16/48: A partir de un cristal de 14 Mhz deriva un reloj de 7 Mhz para dibujar la pantalla. Al ir por debajo nos hace unos p&amp;iacute;xeles ligeramente m&amp;aacute;s anchos (5,3%) en una pantalla real. Si asumimos que son cuadrados en un emulador, la imagen estar&amp;aacute; un poco achatada horizontalmente (lo contrario) con respecto al caso real, o alternativamente alargada verticalmente.&lt;/li&gt;
	&lt;li style=&quot;text-align: justify;&quot;&gt;
		C64 PAL: Funciona con reloj de 0,98525 Mhz y en cada ciclo saca 8 p&amp;iacute;xeles, luego 7,882 Mhz. Al ir por encima, los p&amp;iacute;xeles son ligeramente m&amp;aacute;s altos (6,22%). Caso contrario al anterior, si asumimos que son cuadrados la imagen ser&amp;aacute; m&amp;aacute;s ancha de lo normal, o alternativamente menos alta.&lt;/li&gt;
	&lt;li style=&quot;text-align: justify;&quot;&gt;
		Reloj de 8 Mhz (CPC modo 1, ULA T34VG1, etc.) el caso es como el del C64 pero con un error algo m&amp;aacute;s grande de un 7,6%.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Un caso interesante es el de los Spectrum 128: tienen un reloj de 2*3,5469=7,0938, con lo que tenemos un error del 4,03%. Aunque no nos influye para esto, el tiempo horizontal total son 456 px totales en vez de los 454 te&amp;oacute;ricos (228 ciclos del Z80 vs 227) que debieran ser; a cambio, sacan una fila menos (311 totales vs 312) para compensar.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Todos estos errores son relativamente peque&amp;ntilde;os, y en los emuladores se suele &amp;quot;arreglar&amp;quot; el tama&amp;ntilde;o final escogiendo la zona visible que convenga (bordes distintos a los originales para encajar en el aspecto deseado).&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Menci&amp;oacute;n especial a la burrada de hacer p&amp;iacute;xeles cuadrados en el modo VGA 320x200 (400 doblados vs 480 doblados nativos) que comete un error de 16,7%, claramente visible. &amp;iquest;Por qu&amp;eacute; DOSBox o ScummVM no aplican el reescalado por defecto y hay que modificar la configuraci&amp;oacute;n? Todos los juegos se ven terribles por defecto, causando sangrado de ojos.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Y hablando de burradas, otra es ajustar el aspecto de la imagen a la del monitor en vez de mantenerlo (4:3 en 16:9 se ve un 25% m&amp;aacute;s ancho, causando ya da&amp;ntilde;os cerebrales).&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	En conclusi&amp;oacute;n: aparte de haber compartido este TOC m&amp;iacute;o, si todo el mundo tuviese pantallas con muchos DPI se podr&amp;iacute;a hacer un buen reescalado (y buenos efectos CRT) que mantenga el aspecto sin perder definici&amp;oacute;n, pero supongo que de momento no es el caso.&lt;/p&gt;
</description>
<pubDate>05 Mar 2023 21:59:19 +0100</pubDate>
</item>

<item>
<title>Portando desde Spectrum</title>
<guid isPermaLink="true">http://www.habisoft.com/irmia/comentarios.asp?id=366</guid>
<link>http://www.habisoft.com/irmia/comentarios.asp?id=366</link>
<comments>http://www.habisoft.com/irmia/comentarios.asp?id=366#fin</comments>
<category>Tecnoesoterismo</category>
<author>NoSpam@NoSpam.com (Habi)</author>
<description>&lt;p style=&quot;text-align: justify;&quot;&gt;
	Alg&amp;uacute;n d&amp;iacute;a ten&amp;iacute;a que llegar este momento; por fin me he decidido a portar un juego desde Spectrum al PCW, con lo que ahora debiera resultarme m&amp;aacute;s f&amp;aacute;cil el volver a hacerlo.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Las diferencias entre sus arquitecturas son m&amp;uacute;ltiples: diferente velocidad, sistema de contenci&amp;oacute;n, v&amp;iacute;deo, matriz de teclado, mapa de memoria, frecuencia de interrupciones, altavoz en vez de zumbador, etc. Y todo eso son inconvenientes.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Pero tambi&amp;eacute;n hay ventajas si nos lo trabajamos: partimos de pixeles cuadrados siempre (no tengo por qu&amp;eacute; buscar juegos en modo 1), modo fijo 256x192 (con lo que podemos usar siempre el modo reducido), ROM en el marco inferior (16KB de gratis para mis cosas), memoria de v&amp;iacute;deo en posici&amp;oacute;n fija (de nuevo, espacio gratis), se puede reproducir el audio por el zumbador interno del PCW (con alguna restricci&amp;oacute;n), mucho monocromo gracias a los atributos (sprites o directamente la pantalla), su cat&amp;aacute;logo de exclusivos, etc.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	As&amp;iacute; que all&amp;aacute; vamos.&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;An&amp;aacute;lisis:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Mirando juegos, me decido por el Movie. Ya hab&amp;iacute;a estudiado su versi&amp;oacute;n de CPC para portarla, pero comparando con la original para localizar ciertas rutinas me decido a portar la de Spectrum como experimento.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Es una aventura isom&amp;eacute;trica interesante, con objetos, personajes, iconos de acciones y elementos conversacionales. En su d&amp;iacute;a no lo tuve, pero fue uno de los primeros juegos en probar en cuanto tuve acceso a internet.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Crea en general una atm&amp;oacute;sfera bastante inmersiva. La programaci&amp;oacute;n es buena, la isom&amp;eacute;trica bien resuelta, el volcado de los sprites es similar a como lo hace la Abad&amp;iacute;a.&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;Infraestructura:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	La mayor parte de mi infraestructura habitual se conserva, el mayor cambio es que utilizo mi emulador de Spectrum en vez del de CPC. Al estar mucho m&amp;aacute;s pulido, puedo poner puntos de ruptura en accesos a la ULA o la memoria de v&amp;iacute;deo, y localizar as&amp;iacute; las rutinas que necesitan parche de forma autom&amp;aacute;tica, medir ciclos de rutinas, veces ejecutadas, desde d&amp;oacute;nde, ...&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	El resto sigue siendo lo mismo, quiz&amp;aacute;s mencionar que desde hace varios ports utilizo la habilidad del emulador de cargar binarios en memoria y ejecutar arbitrariamente desde l&amp;iacute;nea de comandos. Con eso y mis ficheros BAT puedo probar las cosas inmediatamente sin tener que crear im&amp;aacute;genes de disco ni cargadores.&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;Cargador:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	No hay mucho que contar por aqu&amp;iacute;, utilizo mi cargador t&amp;iacute;pico. Por cacharrear, le meto un par de efectos b&amp;aacute;sicos basados en la Roller RAM con la pantalla de carga, la cual tengo comprimida dentro del propio cargador.&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;Frecuencia / contenci&amp;oacute;n:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	En un Spectrum el Z80 va a unos 3,5 Mhz (3,5469 en los modelos de 128 KB), con ciclos de espera en la RAM controlada por la ULA (dos ciclos seguidos libres de cada 8, pero s&amp;oacute;lo cuando est&amp;aacute; pintando la pantalla, si no nada). La contenci&amp;oacute;n es por CLOCK en vez de WAIT en los modelos cl&amp;aacute;sicos.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	El PCW lo hace a 4 Mhz, con ciclos de espera (WAIT) en cualquier acceso a memoria (uno libre de cada cuatro); esto tiende a alinear los ciclos m&amp;aacute;quina a m&amp;uacute;ltiplos de 4 ciclos de reloj.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Es dif&amp;iacute;cil evaluar cu&amp;aacute;nto se pierde exactamente al desdoblar gr&amp;aacute;ficos (el resto son m&amp;aacute;s o menos los mismos ciclos) porque son sistemas muy distintos. No queda mal, es muy jugable, pero hago alg&amp;uacute;n retoque menor para compensar.&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;Memoria:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Afortunadamente el PCW tiene un sistema de paginado muy potente, y nos permite comportarse casi como cualquier ordenador de la &amp;eacute;poca basado en Z80. Podemos poner cualquier p&amp;aacute;gina de RAM en cualquier marco, as&amp;iacute; como escoger de forma separada las p&amp;aacute;ginas en las que se lee y escribe en cada marco. Con esto podemos tener rutinas sobre memoria de v&amp;iacute;deo o cosas igual de bizarras.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Originalmente ten&amp;iacute;a en escritura la VRAM del PCW y mis rutinas y teclado en lectura en la zona de la ROM ($83/$34, $80, $81, $82), pero una vez se parchearon todas las rutinas necesarias las nuevas se movieron a la zona de VRAM del ZX. De esa forma tenemos VRAM + teclado en la zona de ROM ($83, $80, $81, $82) y nos simplifica la l&amp;oacute;gica para tener c&amp;oacute;digo automodificable. Nos entra el juego entero + parches en 48 KB.&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;Acceso a ROM / FW:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Ya que la ROM del Spectrum est&amp;aacute; siempre paginada algunos juegos hacen uso de esta; y en este caso es as&amp;iacute;, aunque muy ligero.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	B&amp;aacute;sicamente se usa para la lectura del teclado (escribir texto en los bocadillos y las teclas del &amp;ldquo;men&amp;uacute;&amp;rdquo;) y c&amp;aacute;lculo de direcciones de v&amp;iacute;deo. En ambos casos, basta con redireccionar a mis propias rutinas.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Por otro lado, hay un acceso insistente (y un tanto camuflado) al punto de entrada de la rutina de carga, entiendo que como medida de protecci&amp;oacute;n contra alg&amp;uacute;n tipo de transfer. De nuevo, f&amp;aacute;cil arreglo.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Finalmente, se usa de nuevo en una rutina para generar aleatorios que se usan para el efecto de los pasos, por ejemplo. Al no ser aleatorios cr&amp;iacute;ticos (eso se hace en otra rutina), hago que mire en las 16KB superiores, donde hay m&amp;aacute;s variedad de valores y el efecto es pr&amp;aacute;cticamente el mismo.&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;Interrupciones:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Otro punto en el que se difiere; el Spectrum genera una interrupci&amp;oacute;n al inicio del v&amp;iacute;deo, mientras que el PCW tiene 6 a lo largo de cada frame PAL. Un arreglo simple ser&amp;iacute;a comprobar VSYNC y si es el caso continuar el c&amp;oacute;digo.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Aunque en este juego no hace falta nada de esto; curiosamente, no usa las interrupciones para nada. Esto tiene sus cosas malas, como veremos cuando hablemos del teclado; por el lado positivo, tiene rutinas optimizadas que usan los registros SP e I a pelo.&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;Sonido:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Aunque pueda parecer que ambas m&amp;aacute;quinas son similares en este aspecto (&amp;ldquo;1b de audio&amp;rdquo;), eso no es del todo as&amp;iacute;. El Spectrum controla directamente un altavoz, mientras que el PCW tiene un zumbador (suena autom&amp;aacute;ticamente a una cierta frecuencia).&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Se puede encender y apagar el zumbador y el resultado es casi el mismo mientras que las frecuencias sean mayores que la del zumbador; si son menores se nos apagar&amp;aacute; y encender&amp;aacute; entre medias, causando una distorsi&amp;oacute;n claramente audible (los que hayan escuchado la melod&amp;iacute;a del Bat-Man saben de lo que hablo).&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Otro problema es que el o&amp;iacute;do detecta &amp;uacute;nicamente cambios de presi&amp;oacute;n, le da igual el estado de la membrana del altavoz (encendido o apagado). Sin embargo, no puedo dejar encendido el zumbador pues seguir&amp;iacute;a sonando, algo que pasa en este juego.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Finalmente hay que aclarar que, aunque no es el caso de este juego, en un Spectrum normalmente se usa EAR para reproducir audio, pero tambi&amp;eacute;n puede usarse MIC&amp;hellip; &amp;iexcl;y ambos a la vez! Lo cual nos da una especie de 2 bits de audio, pues MIC suena m&amp;aacute;s bajo que EAR.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	En algunos modelos / clones esto no se lleva muy bien. Por ejemplo, en un Inves+ que los combina con XOR no hay audio en la carga, o en un Leningrad que no tiene audio por MIC se pierde la voz sintetizada del Cobra&amp;rsquo;s Arc, por ejemplo.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	En cuanto a las temporizaciones, al no usar m&amp;uacute;sica no son cr&amp;iacute;ticas, as&amp;iacute; que las dejo tal cual. Si el juego hiciese uso del AY, algo que de nuevo no es el caso, hubiese sido necesario convertir las frecuencias de los osciladores (1,7735 -&amp;gt; 1,0 Mhz).&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;V&amp;iacute;deo:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	En esta secci&amp;oacute;n tampoco hay mucho que contar; uso el t&amp;iacute;pico modo solapado 512x192 + fila en blanco en la p&amp;aacute;gina 3 para tener adem&amp;aacute;s el teclado, y ajuste vertical por Roller. Lo mapeo en la zona de ROM donde no estorba.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Las rutinas que acceden a la pantalla son pocas en este caso, afortunadamente. Anulo todo lo que tenga que ver con los atributos y desdoblo los gr&amp;aacute;ficos al vuelo con mis rutinas. Para indicar que ocurre algo en los modos de pausa y abortar (que requieren otra pulsaci&amp;oacute;n para volver al juego o confirmar la salida) invierto el v&amp;iacute;deo en el PCW.&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;Teclado / entradas:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Ambas matrices de teclas son completamente distintas, as&amp;iacute; que b&amp;aacute;sicamente uso mis rutinas y luego tablas para convertir.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Aprovecho y le cambio las teclas raras que tiene por defecto a un cl&amp;aacute;sico Q-A-O-P-Espacio, con opci&amp;oacute;n de cursores. Tambi&amp;eacute;n se puede utilizar el joystick Kempston y el DkTronics.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Internamente, los controles se codifican en un byte, as&amp;iacute; que una tabla para cada caso menos el base (Kempston) y listo.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	El teclado se lee en varios puntos dentro del bucle principal del juego, no por interrupciones, ya que no se usan. Esto hace que en ocasiones los controles no vayan muy finos cuando hay bastante carga de CPU. Es algo que ocurre en todas las versiones.&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;Fin:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Con esto llegamos al final; tenemos una versi&amp;oacute;n para PCW cl&amp;aacute;sico y la experiencia de portar juegos directamente desde Spectrum.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Como corolario de todo lo anterior: en este caso nos funcionan los POKEs de Spectrum en vez de los de CPC.&lt;/p&gt;
</description>
<pubDate>24 Dec 2022 13:09:39 +0100</pubDate>
</item>

<item>
<title>Inexorable</title>
<guid isPermaLink="true">http://www.habisoft.com/irmia/comentarios.asp?id=365</guid>
<link>http://www.habisoft.com/irmia/comentarios.asp?id=365</link>
<comments>http://www.habisoft.com/irmia/comentarios.asp?id=365#fin</comments>
<category>Yuyus</category>
<author>NoSpam@NoSpam.com (Habi)</author>
<description>&lt;p style=&quot;text-align: center;&quot;&gt;
	&lt;img alt=&quot;&quot; src=&quot;http://www.habisoft.com/userfiles/image/04/NoHayPistasEnElNombre.png&quot; style=&quot;width: 500px; height: 474px;&quot; /&gt;&lt;/p&gt;
</description>
<pubDate>26 Feb 2022 20:00:00 +0100</pubDate>
</item>

<item>
<title>Y... ¿otra review?</title>
<guid isPermaLink="true">http://www.habisoft.com/irmia/comentarios.asp?id=364</guid>
<link>http://www.habisoft.com/irmia/comentarios.asp?id=364</link>
<comments>http://www.habisoft.com/irmia/comentarios.asp?id=364#fin</comments>
<category>Paranoias</category>
<author>NoSpam@NoSpam.com (Habi)</author>
<description>&lt;div style=&quot;text-align: justify;&quot;&gt;
	Todav&amp;iacute;a recuerdo un estuche grande con 6 cintas de Spectrum que tuve de peque&amp;ntilde;o; se llamaba &amp;quot;Software Magazine Serie Oro N&amp;ordm; 1&amp;quot; y tra&amp;iacute;a 5 juegos y un programa de quinielas. Y si no recuerdo mal, debo seguir teni&amp;eacute;ndolo en alguna caja perdida.&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
	&lt;img alt=&quot;&quot; src=&quot;http://www.habisoft.com/userfiles/image/04/X1.jpg&quot; style=&quot;width: 500px; height: 243px;&quot; /&gt;&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	M&amp;aacute;s tarde me enter&amp;eacute; que era un recopilatorio de las primeras Software Magazine de Monser y que los juegos, aunque disponibles en tiendas, eran pirateos descarados con traducci&amp;oacute;n chusquera y autor&amp;iacute;a cambiada a Hipocrates (m&amp;aacute;s bien hip&amp;oacute;crita) Soft, por IDT y compa&amp;ntilde;&amp;iacute;a. As&amp;iacute; eran los 80...&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	Entre ellos estaban los pirateos de: Pssst (Fumigator), Ant Attack (Anttown-3D), Chess (Ajedrez para Maestros), Panic (Borer Deep) y finalmente del que hablar&amp;eacute; hoy: Xadom (Galax).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	Tambi&amp;eacute;n fue publicado bajo el nombre de Wander X. En Espa&amp;ntilde;a fue publicado (y traducido chusqueramente tambi&amp;eacute;n) de forma legal por Investronica.&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
	&lt;img alt=&quot;&quot; src=&quot;http://www.habisoft.com/userfiles/image/04/X2.jpg&quot; style=&quot;width: 500px; height: 238px;&quot; /&gt;&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	Siendo de 1983 es de los primeritos de Spectrum, y est&amp;aacute; hecho mayormente en BASIC. No hace falta consultar bases de datos o webs especializadas para saber esto, basta con pulsar BREAK y hacer LIST para leer &amp;quot;1 REM XADOM988 6/83 M.Moscoff&amp;quot;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	El juego en s&amp;iacute; mismo es un cruce entre arcade y puzle (laberinto) con algunos toques de rol. El argumento nos pone en el papel de un agente futurista infiltrado con la misi&amp;oacute;n de recuperar cierto objeto y volver sano y salvo, con la ayuda de su traje biotr&amp;oacute;nico (?).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	Mec&amp;aacute;nicamente consiste en deambular por unas habitaciones conectadas entre s&amp;iacute; por teletransportadores, habiendo 3 en cada una. Este mapa se genera de forma aleatoria cada vez, teniendo en cuenta la dificultad escogida.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	Siempre sabremos el n&amp;uacute;mero de la habitaci&amp;oacute;n en la que estamos, y una vez usado un teletransporte &amp;eacute;ste ser&amp;aacute; marcado con dicho n&amp;uacute;mero por comodidad. A veces hay algunos que no llevan a ninguna parte (y se marcan con 0).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	Las habitaciones se dibujan en un intento de perspectiva c&amp;oacute;nica. Pueden contener obst&amp;aacute;culos, trampas, enemigos y objetos, siendo estos &amp;uacute;ltimos esenciales para completar la misi&amp;oacute;n. Suelen ser m&amp;aacute;s dif&amp;iacute;ciles cuanto mayor es su n&amp;uacute;mero.&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
	&lt;img alt=&quot;&quot; src=&quot;http://www.habisoft.com/userfiles/image/04/X3.png&quot; style=&quot;width: 500px; height: 170px;&quot; /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
	&lt;em&gt;(Pregunta: &amp;iquest;A alguien m&amp;aacute;s le parecen esos obst&amp;aacute;culos champi&amp;ntilde;ones invertidos y cabezas de jabal&amp;iacute; respectivamente?)&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	La mayor&amp;iacute;a de &amp;eacute;stos permiten ignorar ciertos efectos negativos, aunque con usos limitados. Especial menci&amp;oacute;n al mapa, que permite listar las habitaciones descubiertas y sus conexiones. Otros interesantes son la espada laser con la que podremos atacar a los enemigos, o las m&amp;uacute;ltiples c&amp;eacute;lulas de energ&amp;iacute;a que nos permiten recargar el traje.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
	&lt;img alt=&quot;&quot; src=&quot;http://www.habisoft.com/userfiles/image/04/X4.png&quot; style=&quot;width: 500px; height: 180px;&quot; /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	Si nos quedamos sin energ&amp;iacute;a moriremos, perdiendo una vida mientras vemos una peque&amp;ntilde;a escena en la que un mago nos cuenta que nos va a reencarnar, y m&amp;aacute;s mosqueado en cada muerte.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	El protagonista gasta energ&amp;iacute;a del traje cada vez que se mueve, as&amp;iacute; como cuando es atacado o activa una trampa. Algunos enemigos aplican efectos como veneno o &amp;aacute;cido e incluso los hay que roban objetos (&amp;iexcl;cuidado!).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	Xadom contiene men&amp;uacute;s muy completos con varias p&amp;aacute;ginas de instrucciones, se pueden usar dentro del juego y permite cargar y guardar partida; tambi&amp;eacute;n tiene una especie de modo demo si no interact&amp;uacute;as con el mismo. Todo ello cosas para nada frecuentes en su &amp;eacute;poca.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	Resumiendo: &amp;eacute;ste es un ejemplo perfecto de que no hacen falta buenos gr&amp;aacute;ficos, m&amp;uacute;sica, movimientos suaves o scroll para hacer un juego entretenido. A pesar de sus carencias (que las tiene), es uno de esos juegos a los que acabo volviendo cuando tengo 20 minutillos que es lo que suele durar una partida de 20 habitaciones.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
	&lt;img alt=&quot;&quot; src=&quot;http://www.habisoft.com/userfiles/image/04/X5.png&quot; style=&quot;width: 500px; height: 180px;&quot; /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
	Quiz&amp;aacute;s no de los mejores, pero s&amp;iacute; de mis preferidos.&lt;/div&gt;
</description>
<pubDate>02 Feb 2022 19:40:48 +0100</pubDate>
</item>

<item>
<title>Cosas para PcW16</title>
<guid isPermaLink="true">http://www.habisoft.com/irmia/comentarios.asp?id=363</guid>
<link>http://www.habisoft.com/irmia/comentarios.asp?id=363</link>
<comments>http://www.habisoft.com/irmia/comentarios.asp?id=363#fin</comments>
<category>Tecnoesoterismo</category>
<author>NoSpam@NoSpam.com (Habi)</author>
<description>&lt;p style=&quot;text-align: justify;&quot;&gt;
	En alg&amp;uacute;n momento ten&amp;iacute;a que dar el paso y hacer algo de software para PcW16; aprovechando las vacaciones y que ten&amp;iacute;a relativamente fresco el port del Knight Lore a PCW me pareci&amp;oacute; el momento adecuado. Es una m&amp;aacute;quina bastante m&amp;aacute;s pu&amp;ntilde;etera, pero bastante m&amp;aacute;s potente.&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;An&amp;aacute;lisis:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Utilizando de nuevo como base la versi&amp;oacute;n de CPC, el Knight Lore entra en 48 KB + 16 KB de memoria de v&amp;iacute;deo, mucho m&amp;aacute;s f&amp;aacute;cil para empezar que la Abad&amp;iacute;a o el Hero Quest.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Desgraciadamente, el PcW16 no tiene un modo de paginado que separe lecturas de escrituras (modo ANT), lo cual complica el parcheo: en el caso de PCW pongo en lectura una p&amp;aacute;gina sobre la de escritura de v&amp;iacute;deo, d&amp;aacute;ndome 16 KB extras para mis parches y tablas para acelerar, cargador, roller, etc.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Otra complicaci&amp;oacute;n es el teclado; al contrario que la mayor&amp;iacute;a de ordenadores de 8 bits no se leen las filas / semifilas en ciertos puertos / rangos de memoria, sino que funciona como un PC (una especie de puerto serie e interrupciones).&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Por el lado positivo, el v&amp;iacute;deo es m&amp;aacute;s normal. De hecho, puedo colocarlo de la misma forma que en un CPC, con entrelazado y desperdicio de memoria incluido. Sin embargo, manteni&amp;eacute;ndolo sin entrelazar y seguido me simplifica las rutinas de volcado y me deja espacio para meter algunas de mis cosas al final.&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;Entorno:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Para hacer pruebas r&amp;aacute;pidas es muy c&amp;oacute;modo usar las opciones -Y y -@ del emulador, para colocar los datos / c&amp;oacute;digo que quiera en la memoria y definir el mapeo y punto de entrada respectivamente. De esta forma puedo probar sin tener que hacer im&amp;aacute;genes de disco ni crear un cargador, y puenteo completamente el sistema operativo (no hay que esperar que arranque, seleccionar la opci&amp;oacute;n de ejecutar programa externo, etc.).&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	El resto sigue siendo similar a mi entorno de desarrollo habitual para PCW: Notepad++, Pasmo y ficheros .bat para automatizar todo. Al tener que trabajar con discos con sistema FAT a&amp;ntilde;ado mtools a la lista de aplicaciones.&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;Memoria:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Primero vamos a reservamos las 64 KB que necesitamos. No es necesario que sean contiguas, y s&amp;oacute;lo es necesario que la de v&amp;iacute;deo est&amp;eacute; por debajo de las primeras 256 KB. Aun as&amp;iacute;, las elijo consecutivas 4-5-6-7, y uso la 3 para el cargador, la roller (no puede estar en otro sitio en el PcW16) y los parches que no me entren en la zona principal.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Al igual que el port de PCW, la sit&amp;uacute;o en el marco $C000-$FFFF, en el mismo sitio que la memoria de v&amp;iacute;deo. Afortunadamente, las rutinas de v&amp;iacute;deo parcheadas nos entran en la memoria principal en este caso, con lo que no hay problema. Al contrario que en PCW, nos toca paginar y despaginar cada vez que se llame a una de dichas rutinas, con especial cuidado de las interrupciones (que a su vez llaman a rutinas de esa &amp;aacute;rea).&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;Video:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Lo m&amp;aacute;s f&amp;aacute;cil de todo, al contrario que en PCW: en la roller podemos escoger d&amp;oacute;nde comienza cada fila de v&amp;iacute;deo, con una granularidad de 16 bytes. Y en cada palabra de la misma tenemos adem&amp;aacute;s 2 bits para indicar el modo de v&amp;iacute;deo de dicha fila.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Una curiosidad del PcW16 es que tiene los modos de video del CPC. Normalmente est&amp;aacute; en &amp;ldquo;modo 2&amp;rdquo;, pero con m&amp;aacute;s del doble de filas (imagen &amp;ldquo;casi&amp;rdquo; VGA progresiva, 640x480). En este caso, usamos el modo 1 para tener 320 en horizontal con 4 colores.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Como ya he contado, la memoria va seguida y sin entrelazar. Adem&amp;aacute;s, las filas est&amp;aacute;n dobladas (tenemos 480 en vez de 192) y con la misma vac&amp;iacute;a arriba y abajo repetida para hacer de borde en las 80 restantes.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	El formato de pixeles no es el mismo que en el caso del CPC, pero es el mismo que en el caso del PCW y PCW en color, as&amp;iacute; que trabajo de conversi&amp;oacute;n ahorrado.&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;Paleta:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Adem&amp;aacute;s de los modos de v&amp;iacute;deo, tambi&amp;eacute;n tiene el mismo sistema de paleta triestado, para un total de 27 colores distintos (aunque con diferentes valores). Sin embargo, en un PcW16 sin modear conecta s&amp;oacute;lo la componente verde al monitor monocromo, con lo cual s&amp;oacute;lo tenemos 3 tonos de gris.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	No es un problema, pues en el port de PCW ya lo tuve en cuenta para el parcheo en modo mono; al fin y al cabo, un patr&amp;oacute;n %10101010 se ve igual que uno %01010101 en el monitor monocromo, pese a ser &amp;ldquo;4 pixeles de colores distintos&amp;rdquo;. Aprovechamos esa parte y es a&amp;uacute;n m&amp;aacute;s sencillo, pues no hay que modificar tablas y se puede hacer directamente con la paleta, haciendo que el color 2 sea igual al 3 para que tenga m&amp;aacute;s contraste en el &amp;aacute;rea de juego.&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;Sonido:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	En este caso, aprovecho la interfaz AY por el puerto paralelo para PcW16 que hice y que adem&amp;aacute;s tengo implementada en el emulador. A ver si saco un rato para hacer placas como Dios manda de la misma. Hereda la interfaz de joystick y DAC de la versi&amp;oacute;n para PCW.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	B&amp;aacute;sicamente, se usan los 8 bits de datos del puerto de forma bidireccional junto con otras 3 se&amp;ntilde;ales para control (lectura / escritura, datos / latch, acceso). Pero las rutinas son pr&amp;aacute;cticamente las mismas.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Aprovechando que tengo que regular la velocidad del juego hago que suene el tempo de la m&amp;uacute;sica como en el Spectrum, un poco m&amp;aacute;s despacio que en CPC (la cual me parece bastante atropellada).&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;Velocidad:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	El PcW16 tiene un n&amp;uacute;cleo Z80 de NEC integrado en su ASIC, funcionando a unos 16 Mhz y con una contenci&amp;oacute;n m&amp;aacute;s relajada que el CPC, lo que hace que sea aproximadamente unas 4 veces m&amp;aacute;s r&amp;aacute;pido. Esto significa que el juego sin compensar es demasiado r&amp;aacute;pido.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	En vez de compensar con una pausa fija en cada &amp;ldquo;fotograma&amp;rdquo; del juego, aprovechamos el sistema de compensaci&amp;oacute;n de velocidad por sprites no dibujados del propio juego, calibr&amp;aacute;ndolo. De esta forma, logramos una velocidad casi constante independientemente de la carga gr&amp;aacute;fica. Es algo muy sencillo de implementar en este caso, pero requiere conocer el funcionamiento interno del juego.&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;Interrupciones:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Aqu&amp;iacute; empezamos a meternos en temas escabrosos. El PcW16 tiene en parte una arquitectura de PC; en concreto, tiene un SuperIO como los que se pon&amp;iacute;an en placas de la &amp;eacute;poca. Todos sus IRQs se enrutan al ASIC, el cual genera una interrupci&amp;oacute;n del Z80 en el momento que exista alguna, sea interna (video, teclado) o externa (serie 1 y 2, paralelo, disco, IDE / externo).&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Afortunadamente, las externas pueden deshabilitarse (mayormente) en el SuperIO por separado, pero la existencia de la interrupci&amp;oacute;n de teclado nos obliga a cambiar la l&amp;oacute;gica del gestor del juego. Adem&amp;aacute;s, la frecuencia de las de v&amp;iacute;deo es de 3 por fotograma (60 Hz) en vez de 6 por fotograma (50 Hz).&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Ya que comprobamos m&amp;aacute;s de una cosa en el gestor, comprobamos adem&amp;aacute;s el bot&amp;oacute;n de encendido del PcW16; si se pulsa, hacemos un warm start (adem&amp;aacute;s hemos conservado la p&amp;aacute;gina 0 de RAM), volviendo al SO.&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;Teclado:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Cada vez que hay al menos una tecla en el buffer del teclado, &amp;eacute;sta se env&amp;iacute;a v&amp;iacute;a protocolo PS/2 al ASIC, dentro del cual hay un registro de desplazamiento. Cuando se recibe un byte, se genera la interrupci&amp;oacute;n correspondiente y debe ser le&amp;iacute;do. Para perder la menor cantidad de tiempo, se almacena en una tabla de pulsaciones por c&amp;oacute;digo de tecla.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Una vez se llama a la rutina que lee las semifilas, se llama a un parche que traduce a scancodes set 2 de PC, lee las teclas correspondientes y conforma el byte. Adem&amp;aacute;s, si la semifila corresponde al joystick hace la lectura correspondiente del AY (a trav&amp;eacute;s del puerto paralelo como vimos).&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Mandar de vuelta datos al teclado es un jaleo importante en el caso del PcW16, pero afortunadamente no es algo que vayamos a hacer en este juego.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Por &amp;uacute;ltimo, y al igual que en la versi&amp;oacute;n de PCW, le a&amp;ntilde;ado los cursores (es c&amp;oacute;modo jugar con ellos) y el espacio como teclas de control.&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;Cargador:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Finalmente, con todo funcionando, hay que hacer un cargador para que el juego cargue de forma externa desde un disco. En contra de lo que alguna gente piensa, el PcW16 es capaz de ejecutar programas de forma externa.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Basta crear un fichero de hasta 16KB con extensi&amp;oacute;n PRG que se carga en $4000 y ejecuta en $4100. Esos primeros bytes pueden contener lo que se quiera, pero ser&amp;aacute;n machacados en memoria en el caso de la carga desde disco.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	B&amp;aacute;sicamente, se reserva memoria, se cargan los datos y se muestra un di&amp;aacute;logo para escoger monocromo o color (con el mod correspondiente, y apagando la pantalla integrada). A partir de ah&amp;iacute; se toma el control, anula las interrupciones que genera el rat&amp;oacute;n, se pone todo en su sitio, y lanza el juego.&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
	&lt;strong&gt;Fin:&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Quedan cosas menores que no merece la pena casi ni mencionar, como la anulaci&amp;oacute;n del flag de interrupciones, saltar la inicializaci&amp;oacute;n de las tablas (las pongo directamente y no cambian; adem&amp;aacute;s, as&amp;iacute; ganamos el espacio de esa rutina para parches), las optimizaciones que hice para PCW (como la reflexi&amp;oacute;n con tablas), etc.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	Otra cosa que he tenido en cuenta a la hora de generar el fichero .dsk ha sido el crearle un interleave 2:1, que acelera la carga casi 10 veces. No entiendo como los discos formateados en la propia m&amp;aacute;quina no tienen esto en cuenta.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
	En cualquier caso, espero que disfrut&amp;eacute;is este juego, posiblemente el primero nativo para PcW16.&lt;/p&gt;
</description>
<pubDate>19 Aug 2021 17:50:05 +0100</pubDate>
</item>

</channel></rss>