ZX81 escribió:ZX-81 escribió:ZX81 escribió:Hola,
Ahora estoy mirando como hacer el tema de los sonidos (BEEP) en el emulador, la verdad que no tengo ni idea como implemantarlos. Imagino que será ir guardando los todos OUTs en un array y cuando se cumplan los 69888 T-States enviarlos a alguna clase que gestione el tema de los sonidos. No sé si existe alguna clase de java estandard con la que se pueda hacer.
También me queda otra cosa pendiente, es el tema del BORDER, me explico, por ejemplo cuando hago un SAVE no se ven las típicas líneas que salen en la pantalla del Spectrum cuando está grabando, sólo se ven flases. Ni idea como solucionarlo.
Saludos.
Solo te digo que lo del BEEP es una de las cosas más xungas a las que me he enfrentado nunca, y cuando escribí JSpeccy llevaba más de 20 años viviendo de programar. Cada uno se imagina su manera de hacerlo, hay quien cuenta ciclos e intenta saber qué frecuencia debería generar para emularla. La mayor pega es que todo lo demás es emulado y puede pasar, pero el sonido es lo único que es tiempo real y como se te vacíe el buffer de sonido, para lo que Java tiene clases preparadas, enseguida empiezas a escuchar cosas que no deberían estar ahí.
Lo de los flashes del borde es porque estás debiendo actualizar la pantalla una vez por cuadro (error, por ejemplo, en el Arkanoid no verás la bola nunca) y durante la carga se cambia el color del borde múltiples veces. Ejecuta esto y mira qué pasa:
10 BORDER 2: BORDER 5: PAUSE 1: GOTO 10
Deberías ver como un tercio de la pantalla con borde rojo y luego azul, y si pulsas una tecla la frontera entre los colores cambia ligeramente. Si eso no lo emulas bien, no verás correctamente los juegos que hacen efectos con el borde, como Aquaplane o Beach Head II por poner dos ejemplos.
Y todavía te queda meterte con la memoria en contienda, el bus flotante,.... como escarpias se me ponen los pelos, oiga!.
Cuando llegue a casa, probaré lo del borde que comentas. La memoria en contienda puede ser que sea cuando la ULA y el Z80 intentan acceder a la vez a la memoria??? bus flotante, esto qué es???
Saludos.
Sí, la memoria en contienda es cuando la ULA deja tiesecita de los pies a la CPU quitándole el reloj. Y el bus flotante los valores que lees de los puertos pares cuando la ULA va leyendo la pantalla, algunos juegos los necesitan, como Arkanoid, Sidewize, Cobra...