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.


Temas - riq

Páginas: [1] 2
1
Ensamblador / Cursito de Assembler para la c64 (nivel intermedio)
« en: Marzo 09, 2017, 01:09:29 »
¿Recuerdan el "Cancionero Argentino" que hicimos con los Pungas?
este:
http://csdb.dk/release/?id=153497

Bueno, el código fuente del cancionero esta aca:
https://github.com/c64scene-ar/chipdisk-nac-vol.1


Y no solo eso, sino que hicimos un "cursito" de assembler donde explica como de hace un Chipdisk, contanto todos los truquitos que usamos, y demás.

Esta acá:
http://pungas.space/blog/index.php/tutoriales-tutorials/7-cursito-intermedio-de-asm-para-la-c64-haciendo-un-chipdisk

Si ven algún error, o quieren agregar algo, se puede enviar un "pull request" acá:
https://github.com/c64scene-ar/chipdisk-nac-vol.1/blob/master/chipdisk_internals.es.rst

Preguntas/comentarios más que bienvenidos.

2
Desarrollo / UniJoystiCle + mouse/paddles
« en: Diciembre 26, 2016, 07:26:44 »
Voy poniendo aca info que fuimos discutiendo con @Maniako

- Descripción de como funciona el mouse 1351:
http://www.zimmers.net/anonftp/pub/cbm/documents/projects/interfaces/mouse/Mouse.html
(similar a los que sugirió @pastbytes en el otro hilo)

- Emulador de paddles de Leif Loomquist:
https://github.com/LeifBloomquist/JoystickEmulator/blob/master/Arduino/PaddleEmulator/PaddleEmulator.ino

(ya me dió el Ok para que usemos su código en caso que lo necesitemos... lo vi y creo que es lo que necesitamos más/menos algunas cosillas).


Y aca, estuvo haciendo pruebas con el osciloscopio con los pot-x / pot-y del joy#1 de una C128D NTSC:



Tiene un período de 500ms. La documentación dice que el período es de "512 CPU cycles" lo cual es coherente ya que en NTSC un CPU cycle es 1.022727hz


512 /  1.02272 = 500.625... lo cual es muy parecido a 500us.

Debería hacer la prueba en un PAL, pero en teoría el período debería de ser de:
512 / 0.985248 =  519.666 us... o sea unos 20 ms más lento, y es algo a tener en cuenta cuando se emula el mouse... pero según lo leido no debería afectar mucho.

Lo bueno, también, es que ambos POTs (pox y poty) estan sincronizados, y no me extrañaría que los 4 pots (x,y del joy#1 y #2) este también sincronizados. y eso simplificaría el código y circuito un poco.


Bueno, esto es solo el comienzo, invito al que quiera a contribuir/participar/probar/etc...

La idea es hacer que el unijoysticle soporte mouse/paddles/etc.

3
Commodore 128 / The Race (c128) - fuentes "recuperados"
« en: Diciembre 07, 2016, 08:31:39 »
Finalmente pude "recuperar" los fuentes del jueguito que hice para la c128 allá por el '92.

Lo que hice fue pasarle el regenerator:
http://csdb.dk/release/?id=149429

y comentar, ordenar el código un poco. Por ahora lo quiero dejar lo más intacto posible para poder ver de que manera codeaba en el '92. No lo pude dejar intacto ya que tuve que ordenarlo un poco para entender de que se trataba.

Lo que hice también fue generar el mapa con el vchar64 (hice un import de la imagen de VICE + algunos otros dumps) y recuperé bien ese.

Arreglé algunos bugs y lo hice "single load" (todo en un archivo, antes eran 4).

El original se puede bajar de aca: https://github.com/ricardoquesada/c128-the-race/raw/master/bin/therace.d71
El "nuevo" de aca: https://github.com/ricardoquesada/c128-the-race/raw/master/orig/therace.d71
Y los fuentes, para los curiosos, estan aca: https://github.com/ricardoquesada/c128-the-race/tree/master/src


Mis primeras observaciones son:

* El jueguito tiene su complejidad para haberlo hecho solo con el "monitor". La verdad que podría tener muchos más bugs. Y si bien el código es desordenado, no es terrible. Para los que no usaron un "monitor" antes, es un garrón.
* El código se puede optimizar mucho, aunque el jueguito parece no necesitarlo
* Aún no entiendo bien como armé el mapa. Supongo que habré copiado / pegado pedazos de a poco. Usaba mi propio editor allá entonces pero lo único que se podia hacer era mapas de 40x25. Y el jueguito usa un mapa de 512x8

Quizás en el futuro le agregue más niveles, guardar los records y algunas pavadas más.
Así como esta, portarlo para la c64 debería ser trivial ya que no usa nada especifico de la c128.


4
Problemas Hardware y Software / adaptador de EPROM 2732 a 2532
« en: Noviembre 20, 2016, 04:34:21 »
La hago corta:
Dejo aca el esquema/placa del adaptador de EPROM  2732 <--> 2532
https://github.com/ricardoquesada/2732-to-2532

La hago larga:

Estoy arreglando una PET que tiene uno de las de ROMS de 4k mal. Asi que con una EPROM 2732 sería suficiente, salvo que el pinout es diferente. La PET usa las ROM 2332 (o EPROM 2532).

Estos adaptadores no son tan raros ya que se usan mucho también en los pinballs, pero tampoco son tan comunes. encontré unos en tindie que estaban a $20. me pareció una locura el precio asi que iba a ser unos yo cuando encontré estos en formato Eagle:

https://github.com/ricardoquesada/2732-to-2532

Los subí a mi github ya que estaban medios perdidos en un ftp. el autor dice que se pueden usar sin problema.
Los subí a OSHPark, que con envio incluido dentro de EE.UU, tres placas cuestan menos de $6 (comparados con las dos placas a $20 de tindie + envio).

https://oshpark.com/shared_projects/NYiRoon3

Aclaro: Yo no vendo los adaptadores. OSHPark NO es una tienda tipo Tindie. Ellos solo fabrican PCBs y te permiten que subas tus archivos gerber/eagle/kicad y los compartas.


5
Off-topic / Llamado a la solidaridad: alguien con un gamepad xbox...
« en: Noviembre 15, 2016, 00:35:01 »
La hago corta:
¿Alguien con un gamepad Xbox 360 puede probar si se prenden de rojo las flechas?

Bajarse esta aplicación:
http://ricardoquesada.github.io/unijoysticle/bin/unijoysticle_controller-v0.4.1.win32.zip

Poner en "Address": 1.1.1.1 y ir al "Commando mode" y mover el joystick Xbox.

La hago larga

Le agregué soporte al UniJoystiCle para poder jugar a juegos de la C64 usando un joystick de Xbox.
La cosa es que no tengo ningún controlador de Xbox. Ayer me compré un contralador para windows bien bien pedorro, y resulta que es "DirectInput" y que esta deprecado (no tenía ni la más p*** idea que había dos APIs para los joysticks). Pero estoy usando Qt y solo soporta Xinput, que es lo nuevo desde hace algunos años y no es compatible con DirectInput.

Asi que si alguien con un controlador Xbox 360 (o cualquier otro que sea Xinput) puede probar esta aplicación y decirme si las flechas se ponen rojas, le agradeceré!

* Bajar la aplicación de acá: http://ricardoquesada.github.io/unijoysticle/bin/unijoysticle_controller-v0.4.1.win32.zip
* Poner en "Address": 1.1.1.1
* Ir al "Commando Mode" y mover el joystick.

Aclaro: No hace falta tener el unijoysticle. Las flechas se van prender de rojo con o sin unijoysticle.

gracias!!!

6
eso... automatización para las masas y no las clases.
lo puse en ingles, porque esa era la frase the Tramiel: "computers for the masses, not the classes".

Basicamente es un sistema para automatizar tu casa usando tu Commodore 64, la impresora de la Commodore 64 y tu celular.

El sistema te permite automatizar:

* musica
* alarma
* luces.

Por ahora la documentación del proyecto la puse aca:
https://retro.moe/2016/10/31/retro-challenge-commodore-home/

Este gráfico resume de que se trata:


Y aca hay dos videos que muestran como funciona el bicho este:

Alarma:
https://www.youtube.com/watch?v=wH3g09zsTdY

Alarma (no terminada) + Música + impresora:
https://www.youtube.com/watch?v=dEgbWc3G7pQ


Si alguién quiera amarse uno, avise que lo ayudo!

Hice este proyecto para el concurso "Retro Challenge". Basicamente hace lo que quieras durante Octubre pero que tenga que ver con Retro.

7
Mercadillo / Placas UniJoystiCle
« en: Agosto 17, 2016, 19:59:16 »
Amiguitos,

Tengo algunas placas para regalar / vender el UniJoystiCle.

Antes que nada, todo lo del UniJoystiCle es open source / open hardware asi que cualquiera se puede hacer una.


Para regalar:
 - PCB del unijoysticle solo para aquellos que lo usen con un monociclo.
   A cambio pido que se saquen una foto usandolo.

Para vender:
 - PCB del unijoysticle a $5
 - o la placa armada: PCB + componentes + todo soldado: a $25 c/u
 (baratito baratito para los amiguitos de C.Mania)

El shipping a España no se cuanto cuesta, pero a Holanda me costó $14.50. Supongo que será similar a España.

Que se puede hacer con un UniJoystiCle? Tantas cosas :)
- Jugar al "The Uni Games" con un monociclo de verdad
- Jugar al Gyruss en modo "Gyruss"
- Jugar al cualquier jueguito en modo D-Pad
- O controlar los dimmer de tu casa en modo Linear

Las placas armadas que ofrezco son estas:



y los PCBs, son eso, pero sin los componentes.


Instrucciones: https://retro.moe/unijoysticle/docs/

Demo usandolo en "UniJoystiCle" mode:
https://www.youtube.com/watch?v=LDTGW7ZXje8

Demo usandolo en "Gyruss" mode:
https://www.youtube.com/watch?v=n2YHoj1pXB8

Demo usandolo en "D-Pad" mode:
https://www.youtube.com/watch?v=RhEGogreM0E

Solo tengo algunas placas disponibles. Si alguien quiere alguna avise rápido. Gracias!

8
General / The Uni Games
« en: Julio 29, 2016, 17:57:47 »
Aca va la primer versión jugable de mi video jueguito The Uni Games. (version 0.3)







Los fuentes estan aca: https://github.com/ricardoquesada/c64-the-uni-games
pregunten si tienen alguna duda de algo.

Obviamente, mejor si se usa con un UniJoystiCle... se puede usar con joystick, pero les aseguro que no es lo mismo.


9
Tengo una c64 que apriori funciona todo bien:
  - puede cargar juegos con la disketera, y funcionan bien
  - sonido y video Ok
  - teclado Ok
  - Joystick Ok (probe uno solo puerto)

Pero cuando enchufo el cartucho de Fast Load, no aparece la pantalla azul/celeste con la leyenda "*** commodore ....".
En vez, aparece una pantalla vacia. No funciona ninguna tecla. Si apreto RunStop + Restore, aparece "READY", pero no puedo hacer nada.

El cartucho de Fast Load parece funcionar bien en otras c64.
Además probé con el 1541U2 (que se que funciona bien), y tiene un problema similar.

Lo curioso es que cartuchos de jueguitos (ej: Centipede) funcionan bien.

Alguna idea donde mirar? que puede se que este roto?
Gracias!

10
Desarrollo / Controlador inalámbrico para c64
« en: Marzo 22, 2016, 15:19:49 »
¿Vas a conectar un monociclo real al commodore? :o

si. estoy pensado en algunas posibles maneras:

a)
me armo un "joystick" para el monociclo con una suerte de las alfombras de dance-dance-revolution, y con el monociclo tenes que pisar "arriba" y "abajo" para avanzar. claro que la alfombra no puede ser "alfombra" porque sino uno se patina con el monociclo.
Ya existen adaptadores de alfombra DDR para la c64: http://www.oursyntheticdreams.com/products/psx64-interface
http://kipper2k.com/psx.html
http://www.ebay.com/itm/NEW-Cyclone-RX-Playstation-Joystick-Gamepad-Adapter-for-Commodore-Amiga-/111338931916

el problema de esto, es que hay que tener:
  - una alfombra DDR
  - el conversor de la DDR para la c64

b)
"pegar" un smartphone al pedal (la parte de abajo) del monociclo, y usar el acelerómetro para detectar el movimiento. y luego enviar por wifi (o bluetooth) los movimientos.

el problema aca es que tengo que armar yo el receptor de wifi (o bluetooth) (y de esto se muy poco, asi que me a llevar varios meses en tratar de hacer algo).

c)
alguien ya hizo un joystick remoto usando RF: http://akikorhonen.org/projects/wireless-tac-2/
y ver  de adaptar eso

d)
alguna otra idea?



Esta claro que al público al que apunto es muy limitado:
- le tienen que gustar los jueguitos (mucha gente)
- tiene que saber andar en monociclo (muy poca gente)
- y además tener una commodore 64 (seguimos reduciendo la audiencia)
- y querer armar (o comprar) el adaptador para para enchufarlo al monociclo (probablemente la audiencia sean 1 o 2 personas en el mundo: yo y quizas alguien más).



 

11
Commodore 128 / Como grabar una imagen .d71
« en: Enero 07, 2016, 20:56:01 »
Buenas,

se como grabar una image .d64 a un disquette en una 1541.
pero todavía no encontré como hacer lo mismo con los .d71 + una 1571.

¿alguna idea?
1541-ultimate-II parece que no soporta montar imagenes d71.
TC64 no lo soporta tampoco, y tampoco funciona en la C128.
EasyFlash + EasyTransfer parece que no lo soporta...

gracias!

12
El otro día, luego de mudarme decidí prender la sx-64, y para mi sorpresa, el teclado no respondía... para peor... el cursor no parpadeaba.
¡Horror! ¿y ahora que hago?
Busqué online y encontré que lo más probable era que el CIA que controla el teclado este fallado... así que lo que hice fue eso: reemplazarle el CIA del teclado, y volvió todo a funcionar normalmente.

Cambiar el CIA en una C64 normal es bastante sencillo... pero en una SX-64, si bien no es complejo, tiene un poco más de dificultad ya que hay que sacar varios tornillos, y sacar la placa de IO... y esta todo menos documentado.

Por suerte fue un final feliz.

Como nota adicional, antes la compu se me colgaba seguido... ahora ya no más, funciona como un violin :) Supongo que el CIA ya estaba jodido de antes, y lo que pasó fue que se siguió jodiendo.

Puse detalles de como reemplazar el CIA aca (en inglés): http://retro.moe/2015/12/13/fixing-the-commodore-sx-64-replacing-the-mos-6526/

13
Ensamblador / Desensamblando código 6502 con Radare
« en: Diciembre 10, 2015, 18:34:11 »
Radare es un desensamblador, que entre otras cosas soporta asembler del 6502 y también puede leer archivos VSF (los snapshots del VICE).

Escribí 2 articulitos que explican como usarlo (estan en inglés, pero si alguien quiere que traduzca algo al castellano, avise).

* Parte I: introducción: http://retro.moe/2015/11/18/disassembling-6502-code-with-radare-part-i/
* Parte II: VICE snapshots: http://retro.moe/2015/12/09/disassembling-6502-core-with-radare-part-ii/

14
Desarrollo / Detectando PAL/PAL-N/NTSC/NTSC-Old
« en: Agosto 16, 2015, 04:12:20 »
Hice una mini función para detectar PAL/PAL-N/NTSC/NTSC-old...

La lógica es sencilla. Dispara un timer y luego lee cuantos rasterlines se dibujaron.

¿Lo podrían probar en sus máquinas y me dicen que les devuelve? Debería devolver "PAL" para todas la c64 de españa.

El código esta aca:
https://github.com/ricardoquesada/c64-tests/blob/cc65/misc/vic_detect.s

La explicación de como funciona esta en el .s, pero si alguien necesita más detalles, con gusto se la explico.

Y el .prg lo adjunté.

Gracias!

15
Ensamblador / Assembler - Cosas que voy aprediendo
« en: Julio 07, 2015, 23:14:51 »
¡Hola programadores!

Esto no pretende ser un curso de assembler, ni nada parecido.
Solo quiero compartir con Uds. las cosas que voy aprendiendo mientras desarrollo un jueguito. Nada de lo que les voy a contar es nuevo... todo respecto a la c64 ya esta descubierto y bien detallado en codebase64 y otros sitios. De hecho, es de ahí de donde yo aprendo casi todo de la c64.

¿Entonces por qué hago esto si ya esta todo descubierto? Bueno, porque no todo lo que esta en codebase64 se entiende facilmente. Creo que varios artículos presuponen que uno sabe ciertas cosas, y cuesta bastante seguirlos. Y además porque tengo ganas de hacerlo :)

Yendo al grano, mi primer aprendizaje es...

Cómo hacer un IRQ estable

Si alguna vez trataron de hacer un "raster bar", o un simple scroll fino usando IRQ, habrán notado que la primer linea del raster hace "flicker"... es como que se corre a veces un poco hacia la derecha, o la izquierda y no se sabe bien porque.

Lo que aprendí estos días, es saber porqué pasa eso, y como prevenirlo y de esa manera lograr efectos que se vean bien.

Así es como se ve la intro del jueguito que estoy haciendo:


Basicamente tiene 4 IRQs (Código https://github.com/ricardoquesada/c64-the-race/blob/ec5f2f6b6ec8e1b4c4ad32ca95834af1398aead2/src/intro.s#L108 )

irq1: Pone una barrita violeta. Pone color gris de fondo. Comienza el scroll fino de arriba.
irq2: Pone una barrita violeta. Cambia los colores a negro. Termina el scroll fino.
irq3: Comienza el scroll fino de abajo y pone color gris de fondo.
irq4: Termina con el scroll fino y pone los colores a negro nuevamente.

Parece sencillo, pero para poner las barritas violetas me costó una eternidad.

El tema es que cuando uno esta dentro de una IRQ, el "raster beam" (o haz de luz... no se como se traduce) se sigue moviendo, entonces hay que cambiar los colores en los momentos justos.



( Para saber bien qué es el raster y demás recomiendo leer este articulo: http://dustlayer.com/vic-ii/2013/4/25/vic-ii-for-beginners-beyond-the-screen-rasters-cycle )

Para simplificar las cosas, vamos a asumir que tenemos una c64 PAL (no NTSC).
Del gráfico se puede ver que el raster para hacer una linea entera tarda 63 ciclos de CPU. Y lo más interesante de todo que hay momentos en los que el raster no es visible.
Y es justamente en esos momentos cuando uno tiene que cambiar el color del fondo de pantalla... porque sino el color aparece cortado.

Ejemplo: Aca la barra violeta aparece "cortada"...y es que cambié el color mientras el "raster beam" estaba por la mitad.


Entonces la teoría es sencilla: cambiar el color cuando el "raster beam" esta invisible.

Ciclos, interrupciones y demás:

Cuando uno instala una interrupción raster, uno no puede saber con exactitud cuantos ciclos fueron ejecutados por la siguiente razón:
Supongamos que tengo mi IRQ instalado, y en estoy ejecutando en mi ciclo principal un código que hace algo.
Justo en ese momento se prende mi IRQ ("raster beam" esta en la posición deseada).
El tema es que como la CPU puede estar ejecutando una instrucción, hay que dejar que se termine de ejecutar esa instrucción para que se llama a mi IRQ. Y eso consume ciclos.
Y como hay instrucciones de hasta 7 ciclos, cuando se llama a mi IRQ yo no se cuantos ciclos entre 0 y 7 se ejecutaron de más.

Y es exactamente por este motivo que a veces los raster bars o efectos hacen "flicker"... ya que a veces estan corridos 0, 1, ... y hasta 7 ciclos hacia la "derecha".

Lo que aprendí es que hay varias técnicas para hacer el raster estable: http://codebase64.org/doku.php?id=base:making_stable_raster_routines
Pero la que yo estoy usando en la intro es la "doble IRQ": Basicamente uso una IRQ para lograr que la CPU esta ejecutando un NOP cuando se produzca la siguiente IRQ. Eso se logra poniendo varios NOPs dentro de la primera IRQ, y luego nunca volver (no usar "rti"). De esa manera me garantizo que solo va a haber entre 0 y 1 ciclos de diferencia (y no hasta 7 como antes)... y luego ese ciclo de "sobra" se arregla con una comparación.
Los detalles están aca: http://codebase64.org/doku.php?id=base:stable_raster_routine Si alguien no entiende algo de la técnica "Doble IRQ" con gusto lo explico.

Y eso... basicamente para poner esas 2 barras violetas, tuve que aprender a usar la "doble IRQ" y contar ciclos :)

Páginas: [1] 2