Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - josepzin

Páginas: 1 2 3 [4] 5 6 ... 11
46
General / Re:PLA basada en CPLD ATF1502... ¡¡funciona!!
« en: Mayo 13, 2018, 00:24:06 »
Quédate tranquilo porque esa PLA es la que más se parece a la original ahora mismo y además consume 1/5 que la original. Ante una PLA rota, yo JAMÁS la sustituiría por otra PLA original, con el tiempo volverá a fallar.

Si te quieres quedar más tranquilo, los problemas de compatibilidad suelen aparecer con cartuchos tiquis-miquis que usan técnicas especiales para mapearse/esconderse en memoria. Uno bastante problemático es el Fastload de Epyx (y sus derivados modernos), que usa la carga de un condensador como "temporizador" para mantenerse mapeado y requiere histéresis en las entradas y que los niveles lógicos sean lo más parecidos a los originales para mantenerse en memoria el tiempo necesario y no más ni menos.

Los cartuchos que usan biestables para conmutar entre 2 bancos de ROM también pueden dar problemas, por ejemplo el Super Zaxxon. El motivo es que no todas las entradas a la PLA conmutan a la vez, y por tanto la salida puede ser inestable hasta que todas las entradas han terminado de conmutar. Durante ese tiempo de inestabilidad puede presentarse una salida "absurda" que haga conmutar de banco al cartucho y corromper el juego.

La 1541 Ultimate también puede dar problemas, también si no se respetan los voltajes originales, aunque no sé muy bien por qué.

Precisamente esa PLA está diseñada con esos caso concretos en mente, así que no creo que tengas ningún problema con ellos (ni con nada).

Hay una charla interesante de su autor explicando todos los criterios de diseño partir del minuto ~5:

https://www.youtube.com/watch?v=ofg33zk9uCA
Los siguientes usuarios dieron las gracias a este tema: josepzin

47
Creo poder confirmar que son los conectores de la fuente de alimentacion.Ambos.Los estoy probando desoldados de las placas,y , con ambos, hay una holgura que hace que la corriente por el pin de 9v, sea muy inestable.
El conector se compone de una serie de plaquitas planas.He intentado añadir una capa de estaño, sin mucho exito...
Los siguientes usuarios dieron las gracias a este tema: josepzin

48
He visto que el c64 se enciende si aplico una ligera torsion en el cable de alimentacion, a unos 7 cm del conector..
Cable de alimentacion mal? Probado con dos fuentes distintas.
Conector mal? Reemplazado el conector.Mismo problema.
Una mala soldadura? Habiendo reemplazado el conector, ese problema deberia haberse solucionado.

La torsion es tan minima que solo hace girar ligeramente el conector.Muy poca fuerza debe llegar a la placa...

Esto me esta volviendo loco....
Los siguientes usuarios dieron las gracias a este tema: josepzin

49
Problemas Hardware y Software / Estudio disipadores
« en: Mayo 07, 2018, 00:17:21 »
Buenas, estoy restaurando un par de C64s y, como siempre, he llegado al dilema de si poner disipadores, quitar cartón, etc. Ya sabíamos que el cartón es especialmente dañino pero me ha sorprendido comprobar cuánto.

He medido las temperaturas del SID (6581 del 83) aprovechando que estaba montado en zócalo y es uno de los que más se calientan. La placa es una 250407 de las que lleva el VIC enjaulado y un cartón tapando toda la placa.

Para medir la temperatura he usado un termistor de 100 K pegado en la parte de abajo del SID con cinta aislante:





Las temperaturas absolutas no son muy fiables porque no tengo hoja de datos del termistor, pero para comparar temperaturas relativas es adecuado. He tomado temperaturas cada 10 segundos en las siguientes condiciones:

- C64 sin tapa
- Con tapa - cartón
- Con tapa + cartón
- Con tapa - cartón + disipador 1
- Con tapa - cartón + disipador 2

Los disipadores que he usado son:

- Disipador 1: De aliexpress, pero el enlace ya no existe. Era un kit de disipadores para Raspberry Pi, venían 3 tamaños distintos y el que he usado es el de 14x14 mm:





- Disipador 2: https://es.aliexpress.com/item/8PCS-lot-Silver-15-x-15-x-8mm-Aluminum-Heat-sink-Computer-Ram-Memory-Heatsink-Cooler/32255378113.html



Ambos disipadores vienen con cinta auto-adhesiva """3M""" (con muchas comillas). En apariencia los 2 son iguales, pero el disipador 2 tiene más huecos en las aletas, lo que en principio debería aumentar el área de intercambio y mejorar la disipación.

Resultados:



Lo primero que me ha sorprendido es lo dañino que es el cartón. El SID ha alcanzado casi 77ºC con él puesto!!

Con el C64 tapado, la máxima temperatura sin disipador ha sido 66,2ºC.

De los dos disipadores, el primero (sin huecos en las aletas) ha conseguido enfriar el SID a 64,2ºC (2ºC menos que sin disipador), y el de los huecos, a 63,3ºC (2,9ºC) menos que sin disipador.

La curva azul es el C64 destapado y sin disipador. La máxima temperatura han sido 59,9ºC. Si esta misma medida la tomamos con el disipador 2 puesto, la temperatura máxima que alcanza es 57,1ºC (no está en la gráfica).

Conclusiones:

- Lo que ya sabíamos: el cartón es el enviado de satán para destruir vuestros C64. Quitadlo y destruidlo YA.

- El mejor disipador ha enfriado unos discretos ~3ºC. No es para volverse locos pero es mejor que nada.

Me faltaría probar algún disipador con cinta 3M "auténtica" y los que se pegan con pasta adhesiva, pero estos últimos no sé como de reversible es el cambio y tampoco tengo pasta de esa para probar.
Los siguientes usuarios dieron las gracias a este tema: josepzin

50
Programación / Re:Colisiones sprite<>sprite por software
« en: Mayo 06, 2018, 14:07:20 »
Hay que tener en cuenta que en un juego como el que propone Maniako, tipo Arkanoid, si se hace por bounding box, la caja donde se metiera la bola deberia ser tan pequeña como la bola. Lo mismo para el pad. Si se utilizara una caja demasiado grande para cualquiera de los dos, quedaría muy inexacto.

Y, si es así, y simplemente se suman pixeles de movimiento, y se calculan colisiones, el problema es el mismo: la bola puede "saltarse" el pad.Y daría lo mismo que se haga por bounding boxes o por hardware, ya que las bounding boxes son pequeñas.
Por fuerza hay que interpolar la posición de la bola a la altura en la que se encuentra el pad, para ver si colisionaria o no.

En general, una cosa es la trayectoria que siguen los objetos, y otra es lo que se pinta en pantalla.Si cada punto de la trayectoria se va a pintar (cada uno de los pixeles), las interrupciones no deberian fallar nunca (otra cosa es que las bounding boxes deberian seguir usandose para saber qué sprites han colisionado entre si, si son más de dos).
Los siguientes usuarios dieron las gracias a este tema: josepzin

51
Programación / Re:Colisiones sprite<>sprite por software
« en: Mayo 06, 2018, 02:46:59 »
Soy complicado  ;D

Cada vez que me meto en un proyecto, aprovecho para probar cosas nuevas.
No me gusta usar bucles en el programa para hacer de freno, así que pensé en este sistema de control de velocidad por raster.
Está claro que me deja muchisimo tiempo de proceso fuera de las interrupciones para otras faenas como animar chars variables , puntuaciones y otros menesteres.

El sistema de detección por coordenadas es excelente, pero como ayuda a las colisiones multiples ya que si a cada ciclo compruebas las colisiones de 8 sprites a la vez con todas sus posibles combinaciones (creo que 28 posibles), debe de chupar una buena cantidad de recursos. Aunque está claro que nunca se van a utilizar todas, como mucho Bala contra malosos y protagonista contra todo XD.

Consultar las colisiones o hacer que activen una Interrupción hasta la rutina de comprobacion ayudaria a disminuir ese consumo de recursos consultando el valor devuelto, ayudaria a limitar la cantidad de comprobaciones entre coordenadas de sprites. 

Llevo haciendo pruebas de colisiones entre sprites todo el día y nunca me han fallado si los desplazamientos de estos no se sobrepasan, impidiendo que los pixeles que los componen se toquen.

Dejo aqui un programilla que hice para trastear y tratar de sacar en claro como trabajan las interrupciones y los sprites.
Lo he comentado todo lo que he podido pero a estas horas ya no me queda combustible XD.


Código: [Seleccionar]
;CBM PRG STUDIO 3.12.0
;Programa para jugar con el raster y la detección de sprites.
;Main es el código normal que espera por comparación del raster a continuar.
;IRQ1 Se ejecuta por interrupción cuando el raster llega al valor establecido en RAS desde la subrutina IRQRASTER.
;Podeís jugar a variar los valores de ambos puntos raster para ver como afecta.
;Tened en cuenta que a cada lectura de colision de sprites, esta se pone a 0 automáticamente, así que
;si la rutina IRQ acaba de leer las colisiones, MAIN no leerá colisión alguna, pero lo muestro para tratar
;de hacer visible lo que ocurre a cada modificación que se haga en los valores de rasters.
;Al parecer , jugando con la zona a mostar sprites (RAS1=180 y RAS2=240) , la detección de colisiones ignora los sprites superiores y solo detecta los inferiores. 
;Como podéis ver, activo o desactivo las colisiones por sprites mientras está dentro de IRQ1 ya que si estas están activas, al colisionar los sprites volverian
;a llamar a IRQ1 dando "tirones" en su ejecución.
;Espero que saquéis más cosas en claro que yo XD. Lo que si nunca ha fallado es la detección.

; 10 SYS4096
*=$0801
        BYTE    $0B, $08, $0A, $00, $9E, $34, $30, $39, $36, $00, $00, $00
*=$1000
start   lda #00         ;Fondo y marco a negro
        sta $d020
        sta $d021
        jsr putsprites  ;Prepara y coloca los sprites.
        jsr IRQRASTER   ;Activa las interupciones.

MAIN    lda $d012       ;RASTER
RAS1    cmp #100        ;Si no ha legado a la linea deseada, repite lectura.
        bne MAIN
        dec $d020       ;Cámbio de color del marco como pista de lo que está ocurriendo en pantalla.
        inc SP2X        ;Muevo sprite
        lda SPSPCL      ;Leer colisiones sprite sprite.
        sta $0608       ;Muestra el valor de la colisión entre sprites.LInea superior.
        inc $d020       ;Devuelve el color anterior al marco.
        jmp MAIN
       
;-----------------------------------------------------------------------------
IRQ1    lda #04         ;Conectando IRQ por sprites. Evitas doble llamada a irq1
        sta $d01a
        inc $d020       ;Cambia color marco para mostar raster
        asl $D019       ;Necesario para "reset raster"
        inc SP0X        ;Mover sprite.
        lda SPSPCL      ;Leer colision sprite sprite.
        sta $0798       ;Muestra el valor de la colisión entre sprites. Linea inferior
        lda #01         ;Conectando IRQ por RASTER
        sta $d01a
        dec $d020       ;Devuelve el color anterior al marco.
        jmp $EA31       ;Salir de las interrupciones.
;SUBRUTINAS---SUBRUTINAS---SUBRUTINAS---SUBRUTINAS---SUBRUTINAS---
IRQRASTER
        sei                                   
        lda #%00011011  ;27 original. 26 no flickea.Hibyte del raster pero                             
        sta $D011       ;si no es 27 aparecen "pelos" en los bordes pantalla.
        lda #<irq1      ;IRQ1=Raster
        sta $0314                           
        lda #>irq1                           
        sta $0315                           
        lda #%00000001  ;#127 en el ejemplo. Basta con activar el timer A #1     
        sta $DC0D       ;Registro control de la cia                   
        lda #01         ;Conecta IRQ por raster.
        sta $D01A       ;Registro mascara IRQ activada. IRQ ON. Col.Sprite ON
        cli 
RAS2    lda #240        ;linea activar barrido irq en la linea XX
        sta $d012
        rts
;-------------------------------------------------------------
PUTSPRITES              ;Conectar sprites y colocarlos.
        lda #15         ;8+4+2+1
        sta SPENA       ;Conectar sprite 0 , 1 , 2 , 3 y 4 Pad's' y bola
;Punteros de los sprites. 128
        lda #128
        sta POINSP0     
        sta POINSP1
        sta POINSP2
        sta POINSP3
        lda #04
        sta SP0COL
        sta SP1COL
        sta SP2COL
        sta SP3COL
;Coordenadas X e Y sprites.
        lda #140
        sta SP0X
        lda #231
        sta SP0Y
        lda #180
        sta SP1X
        lda #231
        sta SP1Y
        lda #140
        sta SP2X
        lda #150
        sta SP2Y
        lda #190
        sta SP3X
        lda #150
        sta SP3Y
        rts
;---------------------------------------------------------
*=$2000   ;SPRITE puntero 128
          BYTE $3F,$FC,$00,$7F,$FE,$00,$FF,$FF,$00
          BYTE $FF,$FF,$00,$FF,$FF,$00,$FF,$FF,$00
          BYTE $7F,$FE,$00,$3F,$FC,$00,$00,$00,$00
          BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00
          BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00
          BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00
          BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00
          BYTE $05
;***************************************************************************
;Constantes universales
;       $D000-$D010 SPRITE HORIZONTAL AND VERTICAL POSITION REGISTERS
SP0X    =       $D000   ; SPRITE 0 X POSITION
SP0Y    =       $D001   ; SPRITE 0 Y POSITION
SP1X    =       $D002   ; SPRITE 1 X POSITION
SP1Y    =       $D003   ; SPRITE 1 Y POSITION
SP2X    =       $D004   ; SPRITE 2 X POSITION
SP2Y    =       $D005   ; SPRITE 2 Y POSITION
SP3X    =       $D006   ; SPRITE 3 X POSITION 
SP3Y    =       $D007   ; SPRITE 3 Y POSITION
SP4X    =       $D008   ; SPRITE 4 X POSITION
SP4Y     =      $D009   ; SPRITE 4 Y POSITION
SP5X    =       $D00A   ; SPRITE 5 X POSITION
SP5Y    =       $D00B   ; SPRITE 5 Y POSITION
SP6X    =       $D00C   ; SPRITE 6 X POSITION
SP6Y    =       $D00D   ; SPRITE 6 Y POSITION
SP7X    =       $D00E   ; SPRITE 7 X POSITION
SP7Y    =       $D00F   ; SPRITE 7 Y POSITION
MSIGX   =       $D010   ; MSB'S OF SPRITES 0-7 HORIZONTAL POSITIONS
;       POINTER SPRITES
POINSP0 =       $07F8   ; POINTER 2040 SPRITE O
POINSP1 =       $07F9   ; POINTER 2041 SPRITE 1
POINSP2 =       $07FA   ; POINTER 2042 SPRITE 2
POINSP3 =       $07FB   ; POINTER 2043 SPRITE 3
POINSP4 =       $07FC   ; POINTER 2044 SPRITE 4
POINSP5 =       $07FD   ; POINTER 2045 SPRITE 5
POINSP6 =       $07FE   ; POINTER 2046 SPRITE 6
POINSP7 =       $07FF   ; POINTER 2047 SPRITE 7
;       $D011-$D012 SCROLL & RASTER
SCROLY  =       $D011   ; VERTICAL FINE SCROLLING AND CONTROL REGISTER
RASTER  =       $D012   ; READ CURRENT RASTER SCAN LINE/WRITE LINE TO COMPARE
                                        ; FOR RASTER IRQ

SPENA   =       $D015   ; SPRITE ENABLE REGISTER
SCROLX  =       $D016   ; HORIZONTAL FINE SCROLLING AND CONTROL REGISTER
YXPAND  =       $D017   ; SPRITE VERTICAL EXPANSION REGISTER
VMCSB   =       $D018   ; VIC-II CHIP MEMORY CONTROL REGISTER
VICIRQ  =       $D019   ; VIC INTERRUPT FLAG REGISTER
IRQMSK  =       $D01A   ; IRQ MASK REGISTER
SPBGPR  =       $D01B   ; SPRITE TO FOREGROUND DISPLAY PRIORITY REGISTER
SPMC    =       $D01C   ; SPRITE MULTICOLOR REGISTERS
XXPAND  =       $D01D   ; SPRITE HORIZONTAL EXPANSION REGISTER
;       $D01E-$D01F SPRITE COLLISION DETECTION REGISTERS
SPSPCL  =       $D01E   ; SPRITE TO SPRITE COLLISION REGISTER
SPBGCL  =       $D01F   ; SPRITE TO FOREGROUND COLLISION REGISTER
;       $D020-$D026 VIC-II COLOR REGISTER
EXTCOL  =       $D020   ; BORDER COLOR REGISTER
BGCOL0  =       $D021   ; BACKGROUND COLOR 0
SPMC0   =       $D025   ; SPRITE MULTICOLOR 0
SPMC1   =       $D026   ; SPRITE MULTICOLOR 1
;       $D027-$D02E SPRITE COLOR REGISTERS
SP0COL  =       $D027   ; SPRITE 0 COLOR
SP1COL  =       $D028   ; SPRITE 1 COLOR
SP2COL  =       $D029   ; SPRITE 2 COLOR
SP3COL  =       $D02A   ; SPRITE 3 COLOR
SP4COL  =       $D02B   ; SPRITE 4 COLOR
SP5COL  =       $D02C   ; SPRITE 5 COLOR
SP6COL  =       $D02D   ; SPRITE 6 COLOR
SP7COL  =       $D02E   ; SPRITE 7 COLOR
;       $D02F-$D03F NOT CONNECTED
;       $D040-$D3FF VIC-II REGISTER IMAGES
;       $D419-$D41A GAME PADDLE INPUTS
;       $D41D-$D41F NOT CONNECTED
;       $D420-$D7FF SID REGISTER IMAGES
;       $D800-$DBFF COLOR RAM
COLRAM  =       $D800
; $DC00-$DC0F CIA #1
CIAPRA  =       $DC00   ; DATA PORT REGISTER A joy2
CIAPRB  =       $DC01   ; DATA PORT REGISTER B joy1
CIDDRA  =       $DC02   ; DATA DIRECTION REGISTER A
CIDDRB  =       $DC03   ; DATA DIRECTION REGISTER B
CIASDR  =       $DC0C   ; SERIAL DATA PORT
CIAICR  =       $DC0D   ; INTERRUPT CONTROL REGISTER
CIACRA  =       $DC0E   ; CONTROL REGISTER A
CIACRB  =       $DC0F   ; CONTROL REGISTER B
; $DC10-$DCFF CIA #1 REGISTER IMAGES
; $DD00-$DD0F CIA #2
; $DD10-$DDFF CIA #2 REGISTER IMAGES
LECOL   =   $0286   ; LETTER COLOR
GETIN   =   $FFE4
Los siguientes usuarios dieron las gracias a este tema: josepzin

52
Mercadillo / Re:Mini-tirada EasyFlash 3
« en: Abril 13, 2018, 20:51:46 »
Por mi parte creo que tambien tengo buenas noticias, el seguimiento desde la web de correos muere en la aduana argentina, pero poniendo el código en la web del correo argentinian me aparece que ingresó a aduana el 28/03 y luego que desde el 04/04 está en proceso de clasificación, o sea que creo que aduana lo dejó pasar :)

Me alegra oír eso... Espero que lo disfrutes pronto  ;)
Los siguientes usuarios dieron las gracias a este tema: josepzin

53
Me dejo aquí un vídeo tutorial para saber qué tengo que hacer cuando llegue el pedido :)

https://www.youtube.com/watch?v=t2j_8LvpTNk
Los siguientes usuarios dieron las gracias a este tema: josepzin

54
Bueno, continuo con la reparación... ya cambié los condensadores multicapa que puso el anterior propietario por condensadores cerámicos de .1uF En total 31. Segun las especificaciones técnicas tenian que haber sido de 25v pero conseguí de 50v.
Tambien he cambiado el CI 2114L3, la Ram Color porque creo que no funcionaba muy bien, además esos chips son baratos (no llega a 2€ por Ebay).
Y llega el momento de conectarlo a la TV... y no va.  :-\ Sigo pensando que el problema puede estar en el modulador (los condensadores electrolíticos o quizás algún transistor ya no me queda nada más que probar...)
No he leído por ningún sitio si la señal tanto de vídeo-compuesto y de audio pueden salir por el port A/V de 8 pines directa ya que desconozco si primero entra en el modulador para componer la imagen.
Como ayer mismo me construí un cable A/V de prueba pues me decido a conectarlo primero en el C64 que funciona y veo que va perfecto y luego en el C64 que estoy reparando y........ FUNCIONA !!!!!!
Pues ya "respira" este C64! Otro más devuelto a la vida!. Pero falta afinarlo e incluso ver qué le pasa al modulador. Pero eso lo dejo para otro post.
Os dejo unas fotos de la reparación. Saludos!
Los siguientes usuarios dieron las gracias a este tema: josepzin

55
Programación / Re:Making of de juegos
« en: Abril 11, 2018, 05:33:08 »
Que bien pensao... si es que por eso eres el admin!
Los siguientes usuarios dieron las gracias a este tema: josepzin

56
Pero además, si no entiendo mal, la CIA puede estar funcionando mal, verdad? por lo del etclado+joystick + U1

Si lo dices por el error BAD U1, a Naibor también le da. Creo que alguien ha comentado que es normal si no tienes los cables de diagnóstico, ya no sé si en este hilo o el de Jordi porque estáis los dos con lo mismo :D

Pero lo de que fallen U3, U4 y U5 a la vez (las 3 ROMs), sí que es significativo y a mí me hace sospechar de un clásico: la PLA.
Los siguientes usuarios dieron las gracias a este tema: josepzin

57
Adjunto el resultado de mi C64C que funciona perfectamente.

Me da algunos errores también, pero lo que me mosquea de tu test es el resultado de STACKPAGE, que te da un valor muy raro.
Los siguientes usuarios dieron las gracias a este tema: josepzin

58
Me he dado cuenta de que hay muchos componentes doblados. Con mucho cuidado y despacito enderezalos para asegurarte de que no hay un mal contacto o puenteo. Lo mismo con la chapa y el papel plateado. Y por supuesto reasentar los chips con zocalo y mirar por si hubiera algo de oxido en los contactos zocalo-patillas.

Lo de comprobar un transistor lo he intenado pero nunca he conseguido hacerlo ;D
Los siguientes usuarios dieron las gracias a este tema: josepzin

59
Esta es la zona de los chips pequeños, no sé si por ahí cae el de la disketera...

Las fotos no salieron muy bien :S




Y el 7406, abajo a la derecha de las fotos, en la placa tiene escrito al lado U8.
Los siguientes usuarios dieron las gracias a este tema: josepzin

60
Aquí va una foto de la zona del puerto del dataset:


El transistor del motor del Datassete no tiene perdida, en la foto el grande debajo del conector con fecha 8320.
Los siguientes usuarios dieron las gracias a este tema: josepzin

Páginas: 1 2 3 [4] 5 6 ... 11