Amstrad Eterno 2018: el balance 20180424-1400

El viaje a Barcelona fue breve pero intenso: casi todo salió según el plan. Solamente faltó Juan Giménez (que no pudo asistir, a diferencia de años pasados) y quiso la casualidad que por tener que marcharme el sábado al atardecer me perdí la entrega de los galardones del certamen... y mi propio "Basket Cases" resultó ser el mejor videojuego deportivo del año 2017.



"Chain Reaction" (1987 Durell), Rob Hubbard



"Meltdown" (1987 Alligata), We M.U.S.I.C.

Podré recoger el premio dentro de cuatro días en Madrid, pero antes debo hacer unas cuantas cosas, desde algunos deberes de la UNED hasta la preparación del viaje propiamente dicho y de los pocos materiales que llevaré a RetroMadrid. Mientras tanto, aquí tenéis un poco de música adaptada a ratos perdidos de un par de juegos que comparten perspectiva tridimensional isomética y tema de ciencia ficción radiactiva.


Hasta siempre, AS80 20180417-1255

Con los problemas inmediatos en la universidad a distancia y en el viaje a Barcelona resueltos (en el caso del viaje, con soluciones no del todo óptimas, pero soluciones al fin y al cabo) por fin tengo la serenidad necesaria para tomar una decisión drástica: romper definitivamente la compatibilidad de UZ80 (e indirectamente de CHIPNSFX) con el ensamblador AS80. Si al crear UZ80 decidí no respetar el comportamiento de AS80 que le hacía creer que (IX-1-1) es igual a (IX-0) porque 1-1=0, ¿por qué sí respeté el otro fenómeno inesperado por el cual el valor del símbolo "$" no era el de la dirección actual sino la del principio de la línea actual?



"1942" (1986 Elite), Mark Cooksey



"1943" (1988 U.S. Gold), Jas C. Brooke

Así que ya he editado UZ80, CHIPNSFX y mis otros proyectos para que empleen "$" con el valor típico en todos los demás ensambladores (y no solamente de Z80): Beb y Roudoudou ya pueden dejar de parchear a mano el player de CHIPNSFX. De propina aquí tenéis un poco de música proveniente de la última versión de CHIPNSFX: las canciones de "1942" y "1943".


12^2 20180415-1325

Hace un tiempo celebré la centésima entrada del diario; la que hoy toca es la "gruesa", las doce docenas. Pero por lo demás no hay mucho para celebrar. Ahora mismo estoy muy cerca de resolver los problemas del alojamiento para Amstrad Eterno pero ya he perdido los descuentos que se conceden a las reservas.



De momento estoy aligerando lastre y quitándome de encima cosas pendientes. Algunas son materiales (libros, revistas, papeles... ¡y eso que apenas he ido a la feria del libro de ocasión!) y otras no tanto, lo que incluye los deberes de la UNED por un lado y optimizaciones menores para CHIPNSFX y UZ80 por el otro.


Barcelona y Madrid, ¿sí o no? 20180411-1430

Un cambio repentino en mis circunstancias pone en peligro mis precarias posibilidades de ir a Amstrad Eterno dentro de semana y media y a RetroMadrid una semana después. Incluso aunque este asunto inesperado se resuelva a satisfacción de todos habré perdido algo del dinero de las reservas de los billetes de autocar. Espero poder salvar algo en vez de perderlo todo.



1/2



2/2

Mientras veo si puedo hallarle una solución os pondré un par de grabaciones más de CHIPNFSX: las dos canciones de "Chimera" (C64, 1985 Firebird) escritas originalmente por Rob Hubbard y adaptadas por un servidor con el tracker casero durante algunos ratos libres. "Chimera" era por lo demás un caso típico en el C64: qué música tan buena para un juego tan malo.


Revision 2018, part deux 20180408-2040

Sigo atando cabos, y ya estoy en el ecuador del segundo trimestre, así que iré al grano:




Condense, el grupo autor de la demo "Phx" de la que hablaba hace unos días, ha publicado el código fuente de la misma. Echadle un vistazo, es una lectura interesante, aunque bastante desordenada.



"I-Ball 2" (1987 Firebird) for Atari ST by Wally Beben

He publicado las versiones nuevas de UZ80 y CHIPNFSX tras hacer algunas pruebas y decidir que los problemas que me preocupaban ya están resueltos. De propina, una adaptación más; algunos la reconoceréis de haberla oído en la parte secreta de la demo "École Buissonière".


Revision 2018 20180406-1848

Se me plantean problemas de cara al futuro inmediato: la UNED por un lado, en la que tengo muchas cosas que hacer (algunas inmediatas, para el postgrado en curso; otras, relativas a asuntos pasados, pero que permanecen abiertos), la búsqueda de trabajo, donde aun con mis pobres expectativas no puedo dejar de moverme, y los dos eventos de finales de abril: Amstrad Eterno Barcelona y Retro Madrid. ¿Tendré tiempo para todo? ¿Se perderá algo por el camino?


"Isometrikum", Vanity; 1st oldschool intro


"Phx", Condense; 2nd oldschool demo


"Onescreen Colonies", Vanity; 4th oldschool demo

Mientras tanto se ha celebrado una nueva edición del certamen Revision, y el Amstrad CPC ha estado representado con una fuerza sorprendente: ahora mismo aún es posible ir a Pouet.net y ver que la lista de las diez demos más notables del momento ("Top of the Month") todavía contiene las tres producciones para CPC mostradas en el certamen: "Phx" (quinto puesto), "Isometrikum" (octavo) y "Onescreen Colonies" (décimo). Curiosamente, la demo para C64 "We Come in Peace" de Fairlight y Censor Design, a pesar de haber ganado el primer premio en la categoría oldschool demo, es menos popular en Pouet.net: es solamente la novena en la lista.



"Pacmania" (Amstrad CPC, Spectrum 128, Atari ST): Pacman's Park

Finalmente, tras descubrir que compilar BOSCONIA.CHP provocaba errores, he reescrito por completo las rutinas de exportación de datos de CHIPNSFX y también he añadido a UZ80 la capacidad de reservar memoria sobre la marcha en lugar de trabajar con búferes de tamaño constante. No obstante, no sé si debería publicar ya estas nuevas versiones o si tendría que hacer más experimentos para evitar la desagradable sorpresa descubierta gracias a la canción de "Bosconian" y "Raster Runner".


Otros dos parches más 20180327-1320

A raíz de la corrección anterior que añadía algo de control a la expansión de macros, he retocado el análisis de secuencias de escape de UZ80 para que provoque errores fatales cuando se le dan combinaciones que se salen del estándar: por ejemplo "\N", que es rechazado, a diferencia de "\n", que genera el carácter LF, de valor 10.

load = $170
type = 0
exec = 0

; AMSDOS
 org load-$80
 ds 18
 dw type
 ds 1
 dw load
 ds 1
 dw last-load,exec
 ds 36
 dw last-load
 ds 1
 dw type+(load>>8)+(load&255)+2*((last-load)>>8)+2*((last-load)&255)+(exec>>8)+(exec&255)
 ds 59
; BASIC
 dw boot-$-2,1,$1C83,boot,$C001
filename db "2H"
filename_ db ": run to toggle 208K mode, push Shift and Control to format disc."
 ds 3

boot ld a,($BC9B)
 cp $DF
 ret nz ; DISC INSTEAD OF TAPE?
 ld hl,($BC9B+1)
 inc hl
 inc hl
 ld a,(hl) ; AMSDOS' ROM NUMBER
 ld (select03+2),a
 ld (format06+2),a
 ld hl,($BE7D)
 ld a,h
 or l
 ret z ; AMSDOS COMPATIBLE ROM?

 ld e,(hl) ; CURRENT DISC DRIVE
 push de
 ld a,$C1 ; DEFAULT DATA FORMAT
 db $DF
 dw select03
 ld hl,5 ; A=0,BC=0,DE=^XDPB+19
 add hl,de
 pop de
 cp (hl)
 jr z,main
 ld (hl),a ; SET DYNAMIC FORMAT
quit ld de,last
 jp $BC9B ; CAT
main dec (hl) ; SET 208K FORMAT
 push hl
 pop ix
 ld (ix-24),40  ; RECORDS/TRACK (36)
 ld (ix-19),209 ; ++KBYTES/SIDE (179)
; ld (ix-11),b;0 ; CATALOG TRACK
; ld (ix-9),$C1  ; 1ST SECTOR ID
 inc (ix-8);,10 ; SECTORS/TRACK (9)
; 20130830: GAP#3 7/22 FAIL!!!
 ld (ix-7),1    ; GAP#3 RD/WRT (42)
 ld (ix-6),37-1 ; GAP#3 FORMAT (82)
; 20140708: http://demoniak-contrib.forumactif.com\
; /n62-la-structure-des-pistes-d-une-disquette-sur-cpc
 ld a,21 ; PRESS SHIFT...
 call $BB1E
 ld a,c
 sub 160 ; ...AND CONTROL!
 jr nz,quit

 ld d,a
 ld a,"["
 call $BB5A
doatrack ld hl,last
 push hl
 ld c,2
 ld a,$C1
dosector ; CHRNCHRN...
 ld (hl),d
 inc hl
 ld (hl),b
 inc hl
 ld (hl),a
 inc hl
 ld (hl),c
 inc hl
 add 5 ; C1C6...
 ld (hl),d
 inc hl
 ld (hl),b
 inc hl
 ld (hl),a
 inc hl
 ld (hl),c
 inc hl
 sub 4 ; C6C2...
 cp $C6
 jr nz,dosector ; 16,27,38,49,5A*6B
 pop hl
 db $DF
 dw format06
 ret nc
 ld a,"#"
 bit 0,d
 call nz,$BB5A
 inc d
 ld a,d
 cp 42
 jr c,doatrack
 ld hl,filename
 ld de,last
 ld b,filename_-filename
 call $BC8C
 ld hl,load
 ld de,last-load
 xor a
 call $BC98
 call $BC8F
 ld a,"]"
 call c,$BB5A; OK
filedone jp $BC92
select03 dw $C039
 db 7
format06 dw $C042
 db 7

 ds $270-$
last
 end

Es buen momento para incluir las fuentes corregidas de 2H.BAS, programa que escribí en su momento para crear y utilizar disquetes con un formato DATA aumentado de 178k a 208k a base de usar 42 pistas de 10 sectores en vez de 40 de 9, que publiqué en cpcwiki.eu/forum y que UZ80 compila a la perfección, cabecera de AMSDOS incluida.



"Pacmania" (Amstrad CPC, Spectrum 128, Atari ST): Block Town

También he aprovechado para simplificar una de las condiciones del "player" de CHIPNSFX y para añadir cinco canciones, de las que cuatro son la banda sonora de Ben Daglish para la conversión de "Pacmania" a cargo de Teque Software y publicada por Grandslam. Es interesante: ninguna de las conversiones de "Pacmania" incluye el tema de "Sandbox Land"; todas se limitan a repetir el de "Block Town".


Dos parches 20180324-1330

Por un lado he publicado una segunda versión de UZ80 para corregir un par de fallos: no reconocer las instrucciones OUTD y OUTI (sus sinónimos OTD y OTI sí estaban bien) y reaccionar erróneamente al utilizar una macro con menos parámetros de los que originalmente habían sido definidos en la cabecera de la misma.



"Rasterscan" (Amstrad CPC) 1987 Mastertronic

Por el otro he presentado una versión menor de CHIPNSFX para corregir un error que ocurría en ocasiones muy raras al utilizar XX80 en la sección de ruido de un instrumento. Además, como de costumbre, he añadido más canciones, de las que la más nueva es una adaptación de la extravagante banda sonora de Jas C. Brooke para "Rasterscan", juego que además acabo de añadir a la lista de "compactajes".


Ganas de morir... de nervios 20180321-2100

Es oficial, acabo de publicar la primera versión de UZ80, que espero que sea de vuesto agrado. Probadlo, maltratadlo, queredlo, odiadlo, alabadlo, insultadlo... al ritmo de una cancioncilla de Ben Daglish pasada por el tamiz de CHIPNSFX.



"Death Wish 3" (Amstrad CPC, Spectrum 128) 1987 Gremlin Graphics

Vale la pena comentar que la canción de la versión de Commodore 64 es ligeramente distinta, y no solamente por las razones obvias de usar un chip de sonido que no es el que el CPC y el 128 tienen en su interior. Debe de pertenecer a la época en la que Daglish ya tenía mucha soltura pero aún no hacía canciones que podían ser tocadas sin cambios en todos los 8 bits.

P.S.: Anoche cambié sin querer el nombre del archivo de UZ80 y el resultado fue que dejó de poder ser descargado. Ya está corregido.


"LED Storm" y UZ80 20180317-0150

El clima ha sido tormentoso y me he pasado mucho más tiempo del previsto en casa. No me falta quehacer pero agradecería poder salir a la calle con ciertas garantías de sol y calma, o al menos con poca lluvia y menos viento. Al menos esto significa más tiempo para labores musicales que tanto os gustan, así que aquí tenéis un poco de Tim Follin: sus tres pistas para "LED Storm" en Spectrum, de las que dos también sonaron en C64.



Main theme



Introduction



High scores

Por lo demás UZ80 ya funciona perfectamente, detecta más errores que AS80 (algunos de ellos escondidos en las profundidades de "Justin" desde hace doce años) y encima corre más deprisa: UZ80 tarda entre la mitad ("Frogalot") y la quinta parte ("Hire Hare") de lo que consume AS80 para compilar mis juegos para los concursos de CPC RetroDev.


MinGW GCC 4.9.2-tdm-1 (-O2)
'as80 -inqx3 frogalot.s80 -onul': 5.008000/130= 0.038523 seconds
'as80 -inqx3 hirehare.s80 -onul': 5.070000/ 47= 0.107872 seconds
'as80 -inqx3 basketcs.s80 -onul': 5.007000/146= 0.034295 seconds
'uz80 -q frogalot.s80 -onul': 5.008000/286= 0.017510 seconds
'uz80 -q hirehare.s80 -onul': 5.007000/238= 0.021038 seconds
'uz80 -q basketcs.s80 -onul': 5.008000/276= 0.018145 seconds
'as80 -inqx3 frogalot.s80 -onul': 8.034000/213= 0.037718 seconds
'as80 -inqx3 hirehare.s80 -onul': 8.018000/ 75= 0.106907 seconds
'as80 -inqx3 basketcs.s80 -onul': 8.018000/238= 0.033689 seconds
'uz80 -q frogalot.s80 -onul': 8.003000/459= 0.017436 seconds
'uz80 -q hirehare.s80 -onul': 8.019000/387= 0.020721 seconds
'uz80 -q basketcs.s80 -onul': 8.003000/454= 0.017628 seconds
'as80 -inqx3 frogalot.s80 -onul': 10.015000/262= 0.038225 seconds
'as80 -inqx3 hirehare.s80 -onul': 10.047000/ 93= 0.108032 seconds
'as80 -inqx3 basketcs.s80 -onul': 10.030000/294= 0.034116 seconds
'uz80 -q frogalot.s80 -onul': 10.000000/568= 0.017606 seconds
'uz80 -q hirehare.s80 -onul': 10.015000/479= 0.020908 seconds
'uz80 -q basketcs.s80 -onul': 10.000000/559= 0.017889 seconds
'as80 -inqx3 frogalot.s80 -onul': 16.022000/416= 0.038514 seconds
'as80 -inqx3 hirehare.s80 -onul': 16.099000/149= 0.108047 seconds
'as80 -inqx3 basketcs.s80 -onul': 16.021000/466= 0.034380 seconds
'uz80 -q frogalot.s80 -onul': 16.006000/906= 0.017667 seconds
'uz80 -q hirehare.s80 -onul': 16.005000/765= 0.020922 seconds
'uz80 -q basketcs.s80 -onul': 16.022000/891= 0.017982 seconds
TinyCC TCC 0.9.27 (x86)
'as80 -inqx3 frogalot.s80 -onul': 5.024000/131= 0.038351 seconds
'as80 -inqx3 hirehare.s80 -onul': 5.070000/ 47= 0.107872 seconds
'as80 -inqx3 basketcs.s80 -onul': 5.023000/147= 0.034170 seconds
'uz80 -q frogalot.s80 -onul': 5.008000/257= 0.019486 seconds
'uz80 -q hirehare.s80 -onul': 5.007000/201= 0.024910 seconds
'uz80 -q basketcs.s80 -onul': 5.008000/255= 0.019639 seconds
'as80 -inqx3 frogalot.s80 -onul': 8.018000/207= 0.038734 seconds
'as80 -inqx3 hirehare.s80 -onul': 8.065000/ 74= 0.108986 seconds
'as80 -inqx3 basketcs.s80 -onul': 8.019000/233= 0.034416 seconds
'uz80 -q frogalot.s80 -onul': 8.003000/416= 0.019238 seconds
'uz80 -q hirehare.s80 -onul': 8.018000/320= 0.025056 seconds
'uz80 -q basketcs.s80 -onul': 8.003000/401= 0.019958 seconds
'as80 -inqx3 frogalot.s80 -onul': 10.000000/258= 0.038760 seconds
'as80 -inqx3 hirehare.s80 -onul': 10.093000/ 93= 0.108527 seconds
'as80 -inqx3 basketcs.s80 -onul': 10.015000/291= 0.034416 seconds
'uz80 -q frogalot.s80 -onul': 10.000000/513= 0.019493 seconds
'uz80 -q hirehare.s80 -onul': 10.015000/400= 0.025038 seconds
'uz80 -q basketcs.s80 -onul': 10.000000/503= 0.019881 seconds
'as80 -inqx3 frogalot.s80 -onul': 16.037000/412= 0.038925 seconds
'as80 -inqx3 hirehare.s80 -onul': 16.037000/148= 0.108358 seconds
'as80 -inqx3 basketcs.s80 -onul': 16.005000/463= 0.034568 seconds
'uz80 -q frogalot.s80 -onul': 16.006000/825= 0.019401 seconds
'uz80 -q hirehare.s80 -onul': 16.021000/642= 0.024955 seconds
'uz80 -q basketcs.s80 -onul': 16.006000/806= 0.019859 seconds

Cuando haya escrito la documentación lo publicaré, y además es muy posible que incluya las fuentes, que para variar me parecen suficientemente limpias y ordenadas, además de comentadas para que cualquiera pueda leerlas. Pero primero terminaré los deberes de la UNED.


[ ◀ MODERNOS ] [ ▲ ] [ ▶ ANTIGUOS ]