La idea me surgió en estas news comentando con Black Hole su sistema de
carga basado en la codificación manchester y teniendo presente las
ultracargas de Antonio Villena que habían puesto el listón muy alto.
Básicamente el cargador Throwings Milks funciona así:
1º supone que la fuente de audio es una fuente perfectamente sincrona (44100
Hz del sistema CD audio)
2º utiliza el valle de la onda para sincronizarse y la cresta para trasmitir
la información.
3º la información que se trasmite en cada ciclo no es un uno o un cero sino
un símbolo de dos bits (00, 01, 10 , 11) La duración de la cresta determina
qué símbolo se está transmitiendo
Además de la velocidad Throwing Milks tiene otras caracteriscas:
-Cada bloque de carga lleva incluida una cabecera con información de inicio
y longitud así como su control de checksum de tal forma que funciona como un
LOAD "" CODE con lo que convertir archivos .TAP a Throwings Milks es casi
trivial.
- El algoritmo es multi velocidad. También admite velocidades de 12.600 y
16.030 bps, que son más seguras. He de reconocer que sobre un Spectrum real
es muy dificil que no haya errores a 19.600 (mis pruebas ha sido sobre un +)
Todavía queda por ajustar finamente, esperemos que sea físicamente posible.
Aqui está para quien quiera hacer pruebas.
http://personal.auna.com/casariche/throwingmilks.zip
En particular sería interesante hacer pruebas sobre +2, +3 y el antiguo 48k
issue 2. Los primeros tiene un reloj diferente y el segundo un hardware de
la entrada ear diferente al +. Y me temo que estas velociades las
diferencias de hardaware podrían influir demasiado.
notas prácticas:
El cargador empieza la carga detectando la frecuencia y la fase del tono
guia mostrando lineas muy finas en el BORDER de color blanco y negro. Si
esas rayas no se ven hay que ejecutar el .wav con el mismo nombre pero con
una letra i (invertido) (o tener pulsada una tecla mientras se hace la carga
del wav primero).
Cuando el cargador empieza a recibir bytes tras el tono guia el BORDER se
pone rojo fijo. Y cuando acaba se pone verde.
Mi más sincera enhorabuena, todavía tengo la mandíbula desencajada.
> La idea me surgió en estas news comentando con Black Hole su sistema de
> carga basado en la codificación manchester y teniendo presente las
> ultracargas de Antonio Villena que habían puesto el listón muy alto.
Las mías estaban muy por debajo, pues intentaba seguir recreando la forma
clásica (una subrutina que lee 1 bit y es llamada 8 veces por otra rutina
que lee un byte, dentro de un bucle más general), aunque con los timings
apretados. Las rutinas de Antonio nunca las llegué a entender y la tuya
todavía no me he puesto a mirarla.
> [...]
> El cargador empieza la carga detectando la frecuencia y la fase del tono
> guia mostrando lineas muy finas en el BORDER de color blanco y negro.
Increible que con la misma rutina se vaya autoadaptando a frecuencias
diferentes !!
> Cuando el cargador empieza a recibir bytes tras el tono guia el BORDER se
> pone rojo fijo. Y cuando acaba se pone verde.
¿Queda tiempo físico para que cambie el color? O ni siquiera ... ;-)
Chapeau!
:-D, muchas gracias.
> > La idea me surgió en estas news comentando con Black Hole su sistema de
> > carga basado en la codificación manchester y teniendo presente las
> > ultracargas de Antonio Villena que habían puesto el listón muy alto.
>
> Las mías estaban muy por debajo, pues intentaba seguir recreando la forma
> clásica (una subrutina que lee 1 bit y es llamada 8 veces por otra rutina
> que lee un byte, dentro de un bucle más general), aunque con los timings
> apretados.
No descartes del todo ese método de los 8 bits. Con Throwingmilks el maximo
teórico son 25.200 bps. Estoy pensando en hacerlo pero para una direccion y
longitud fijas (sería útil para cargar snapshots).
Pero a bit por muestra se podría estar próximo a 44.100 bps o con más
seguridad a 22.050 bps. El truco podria estar en eliminar la rutina que es
llamada 8 veces y repetir el codigo 8 veces.
>Las rutinas de Antonio nunca las llegué a entender y la tuya
> todavía no me he puesto a mirarla.
>
En el fichero .pdf he puesto unos breves comentarios al codigo fuente. Si
tienes alguna duda puedes preguntar.
> > [...]
> > El cargador empieza la carga detectando la frecuencia y la fase del tono
> > guia mostrando lineas muy finas en el BORDER de color blanco y negro.
>
> Increible que con la misma rutina se vaya autoadaptando a frecuencias
> diferentes !!
>
> > Cuando el cargador empieza a recibir bytes tras el tono guia el BORDER
se
> > pone rojo fijo. Y cuando acaba se pone verde.
>
> ¿Queda tiempo físico para que cambie el color? O ni siquiera ... ;-)
>
Ahí me has pillao. Efectivamente no hay tiempo para hacer un out (). Es una
desventaja.
> Chapeau!
>
>
> Básicamente el cargador Throwings Milks funciona así:
Lo de "Throwing milks" es por "echando leches" no?
XD
Hernán.
<recortado>
> En particular sería interesante hacer pruebas sobre +2, +3 y el antiguo 48k
> issue 2. Los primeros tiene un reloj diferente y el segundo un hardware de
> la entrada ear diferente al +. Y me temo que estas velociades las
> diferencias de hardware podrían influir demasiado.
En mi gomas (que ahora que lo pienso no estoy seguro de si es isssue 2
o 3... tendre que esperar a llegar a casa, que no puedo hacer VNC al
Spectrum todavia), pero es que no he probado con EAR sino con MIC y con
la salida de audio de mi tarjeta de sonido integrada en placa. Tendria
que probar a grabar un CD, pero no tengo acceso a grabadora por el
momento.
La tarjeta de sonido integrada en placa es una SiS (o sea que reproduce
sonido de milagro). Aun asi a 16000 bps carga el 100% de las veces con
el volumen al 75%. A 12000 no hay problema.
A 19600 fallan los dos waves de demo. Sospecho que con CD no pasaria.
Invertir la forma de onda no me cambia el resultado.
Ahora queda saber, ¿alguien ha pensado ya en un conversor automatico
de .z80 a .wav con este sistema de carga y compresion? ¿Se puede
implementar esto aunque sea a menos velocidad en memoria compartida con
la ULA? -por meter la rutina en algun hueco de la ROM y quemarlo a
EPROM-
...not the Hunter S. Thompson
Inapetente ha escrit:
<recortado>
> En particular sería interesante hacer pruebas sobre +2, +3 y el antiguo
48k
> issue 2. Los primeros tiene un reloj diferente y el segundo un hardware de
> la entrada ear diferente al +. Y me temo que estas velociades las
> diferencias de hardware podrían influir demasiado.
En mi gomas (que ahora que lo pienso no estoy seguro de si es isssue 2
o 3... tendre que esperar a llegar a casa, que no puedo hacer VNC al
Spectrum todavia),
---------------------------------------------
Puedes salir de dudas con este truco:
Bit 6 of IN-Port FE is the EAR input bit. The value read from this port is
not trivial, as can be seen from the following program:
10 OUT 254,BIN 11101111
20 PRINT IN 254
30 OUT 254,BIN 11111111
40 PRINT IN 254
50 GOTO 10
For a correct test do not press any key while running, and have no EAR
input.
If the output is 191,255,191,255 etc, you are on real Spectrum Issue 3.
If output is always 191 or always 255, change the value in line 10 to BIN
11100111.
If output is then 191,255,191,255 etc, then you are on Spectrum Issue 2.
If output is still always 191 or always 255 you are on Spectrum emulator.
..................................................................
pero es que no he probado con EAR sino con MIC
----------------------------------
Vaya, esa prueba no se me ocurrió
......................................................
y con
la salida de audio de mi tarjeta de sonido integrada en placa. Tendria
que probar a grabar un CD, pero no tengo acceso a grabadora por el
momento.
------------------------------------------
Sí grabé un cd con la demo y fue bien. Al menos haciendo play desde la
unidad de CD.ROM (tanto saliendo por la tarjeta como por la toma de
auriculales de la propia unidad de CD).
En cinta cassette no he probado. Pero si grbando el sonido en un cinta de
video. Y algo funciona :-)
........................................................
La tarjeta de sonido integrada en placa es una SiS (o sea que reproduce
sonido de milagro). Aun asi a 16000 bps carga el 100% de las veces con
el volumen al 75%. A 12000 no hay problema.
-------------------------
Que alegría!!!
................................
A 19600 fallan los dos waves de demo. Sospecho que con CD no pasaria.
Invertir la forma de onda no me cambia el resultado.
-------------------------------------------
¿Tampoco llegas a cargar la pantalla de presentación de los Space Intruders?
¿Y los patrones de la carpeta test?
Las demos utilizan TM 1.0.
Si en el test compruebas que el cargador TM 2,0 te va mejor que el 1.0 ,
podrías probar esto ( si te da rabia no cargar el MM a 19.600)
Empieza con el load"". Cuando acabe la parte basic de paras el wav. Te vas a
tester y haces play al wav tm_2.0.tapsen.wav, Una vez cargado esta versión
del cargador haces play del manic19kbps. Si hubiese loading error en la
pantalla de presentación teclas GOTO 62 y la das a ENTER justo cuanto oigas
el tono guia del segunda bloque. Si vuelve a haber loading error haces un
GOTO 300 y a ver si suena la flauta por casualidad
............................................................................
........
Ahora queda saber, ¿alguien ha pensado ya en un conversor automatico
de .z80 a .wav con este sistema de carga y compresion?
---------------------------------
Las ultracargas de Antonio ya lo hacen. tiene la utilidad sna2wav.
En throwing milks ese trabajdo está pendiente. Y tambien meter el codigo
auto arrancable en la parte basic
...............................................
¿Se puede
implementar esto aunque sea a menos velocidad en memoria compartida con
la ULA? -por meter la rutina en algun hueco de la ROM y quemarlo a
EPROM-
------------------------------
Por tamaño no hay problema. Y por la ula tampoco, es apartir de la dirección
$4000 donde se comparte.
Ahora, la rutina no es directamente reubicable. Hay que recompilarla con
algún cuidado:
-Las direciones de t0 a t6 deben tener todas el byte más significativo
identico.
-La rutina utiliza la pila. Si vas a cargar 48k macharás la pila en algun
momento. La solución es variar la rutna para que SP apunte a la rom libre y
ahí meter las direccion sigueA sigueB y sigueC como constantes.
.........................................
XD
---------------------------------
Festivamente, XD