Mostrando entradas con la etiqueta VGA. Mostrar todas las entradas
Mostrando entradas con la etiqueta VGA. Mostrar todas las entradas

jueves, 23 de febrero de 2023

Raspberry Pi Pico Interprete BASIC con VGA

  Página principal

Raspberry Pi Pico
Interprete BASIC
 con VGA



Buscando montaje curiosos con la Raspberry Pi Pico encontré la página https://geoffg.net/picomitevga.html.
En esta página habían instalado un interprete de Basic, mmBasic, en la Raspberry Pi Pico, y además habían programado una salida de VGA.
El MMBasic es un intérprete Basic libre para microcontroladores de 32 bits. https://mmbasic.com/
Existen intérpretes MMBasic  para DOS, Linux y PIC32.


En el montaje original tiene una SD para almacenar diferentes programas, en mi caso solo quiero que exista un programa, por lo que se la he quitado.

Para la conexión del teclado el montaje original coloca una serie de transistores, yo los he eliminado conectando 4 resistencias.
Como dice el montaje original se puede eliminar la conexión del teclado a 5V y conectarlo a los 3.3V, la mayoría de los teclados funciona lo he probado personalmente.

En el montaje original de la segunda línea del color verde se conectan varias resistencias junto con una resistencia variable.
En mi montaje coloco 2 resistencias junto con un diodo. El ajuste fino del color blanco se ha eliminado.

He añadido dos diodos led, el primero a modo de test de alimentación, y otro de test colocado a GP5.

También he colocado un pulsador para la programación inicial de la Raspberry pi pico.

Se puede añadir una salida de audio, podéis ver la forma en la buena documentación proporcionada en la página web.


Esquema modificado.




Primer montaje.


Circuito montado.

' Colour Bars

Mode 2
CLS
Font 7
For y = 0 To 240 - 240/15 Step 240/16
  Read s$, c
  Text 0, y + 4, s$ + " = RGB(" + Str$(c>>16) + "," + Str$((c>>8) And &B11111111) + "," + Str$(c And &B11111111) + ")"
  Box 155, y, 320 - 155, 240/16, 1, c, c
Next y

Data "white", RGB(white)
Data "yellow", RGB(yellow)
Data "lilac", RGB(lilac)
Data "brown", RGB(brown)
Data "fuchsia", RGB(fuchsia)
Data "rust", RGB(rust)
Data "magenta", RGB(magenta)
Data "red", RGB(red)
Data "cyan", RGB(cyan)
Data "green", RGB(green)
Data "cerulean", RGB(cerulean)
Data "midgreen", RGB(midgreen)
Data "cobalt", RGB(cobalt)
Data "myrtle", RGB(myrtle)
Data "blue", RGB(blue)
Print @(0,y);

PLAY TONE 500, 500
PAUSE 2000
PLAY TONE 300, 300
PAUSE 5000
PLAY STOP



Visión en un televisor con entrada VGA.

Para subir los programas desde el PC a la placa Raspberry pi pico utilizo un par de programas: MMCC y MMEdit.

Terminal serie de programación y ejecución.


Programa de edición y subida a la placa.

El numero de colores máximos representados en la resolución de 320x240 es de 16 colores. En modo de 640x480 es monocromo.
En una de las pruebas he añadido un sensor de temperatura 18B20, para representar en pantalla la temperatura.
Recomiendo este montaje por su sencillez, y por la sensación de estar en los ordenadores de los años 80.

VIDEO

________________________________________________________




16/03/2023
Después de unos días probando la placa, descubrí que los módulos clónicos de esta tarjeta, no son iguales que la original.
Para que funcionase debía cambiar la toma de 5V para el teclado, desde el pin VSYS al pin VBUS.
También decidí colocar una tarjeta SD y el conector de audio.



Para configurar los pins donde esta conectada la tarjeta SD debemos ejecutar la siguiente orden:
     OPTION SDCARD GP13, GP10, GP11, GP12
La tarjeta SD esta en el disco B: por lo que si queremos trabajar en este disco deberemos ejecutar la orden:
     DRIVE "B:"
Para ver los fichero de este disco se teclea :
     FILES
Si queremos cargar un programa tecleamos:
     LOAD programa.bas
Si queremos cargar el programa tecleamos:
    LOAD programa.bas
    o
    RUN programa.bas
Existen muchas mas ordenes que vienen muy bien documentadas en el manual como:

 MKDIR dname$
Creates a sub directory in the current directory on the current drive.
 CHDIR dname$
Change into to the directory $dname. $dname can also be "." (dot dot) for up one directory or "\" for the
root directory. The starting point is the current directory on the current drive.
RMDIR dir$
Remove, or delete, the directory ‘dir$’ in the current directory on the current drive.
 SEEK #fnbr, pos
Will position the read/write pointer in a file that has been opened for RANDOM access to the 'pos' byte.
 RENAME fromname$ AS toname$
Will rename the file fromname$ to have the name toname$ in the current directory on the current drive
 COPY [mode] fromname$ TO toname$
Will copy the file fromname$ to have the file toname$. See the command reference for more details on the
optional mode.



En cuando a reproducir sonidos, lo primero es configurar los pin de salida:
    OPTION AUDIO GP6, GP7
y luego reproducir un fichero WAV con la orden.
    PLAY WAV demo.wav
Me sorprendió para bien la calidad del sonido reproducido, y probé con diferente tipos de muestreo.
Además se puede generar tonos con la orden:
    PLAY TONE left, right, duration, interrupt
    PLAY TONE 500, 500, 2000

 

Saludos.
Juan Galaz



Bibliografía:

https://geoffg.net/picomitevga.html
https://mmbasic.com/

jueves, 16 de julio de 2020

SDL - Tetris - Puzzle - Antiguos programas


SDL
Tetris - Puzzle
Antiguos programas

He estado revisando mis antiguos programas, y entre los más programados por mi, está el tetris.
Cuando salió en las máquinas recreativas el tetris,  comprobé  que la mecánica del juego era muy sencilla y fácil de programar. 
El juego era sencillo pero muy adictivo, y eso me cautivó.
Era finales de los años 80, y el lenguaje predominante era el Basic, por lo que la primera versión de realizó con GWBasic.
Los gráficos no eran demasiado vistosos, el standard CGA no daba para mucho en modo gráfico, pero se hacía lo que se podía.


Tetris realizado con GWBasic, y en modo CGA (DOS).
Para probarlo recomiendo dosBox, y rebajar la velocidad con CRT+F11 .

Cuando ya dispuse de una tarjeta VGA, volví a realizar el tetris en Turbo C con el modo 13 , 320x240 y 256 colores.
Era bastante vistoso y mucho más portable debido a realizarlo en C.

Tetris realizado en Turbo C en modo 13 (DOS)
El modo 13 fue el modo de video más utilizado en la creación de juegos, era muy fácil de programar y solo ocupaba 64K.

Los programas para DOS se quedan un poco muertos en el tiempo, y para reanimarlos algo, debemos emplear una librería que consiga hacerlos perdurar en el tiempo. Para este fin, la mejor librería es SDL, está en la mayoría de plataformas, Windows, Linux, Mac, etc...
Con esta librería conseguimos que los programas sobrevivan eternamente.

Tetris realizado con la librería SDL formato 320x240.

Está programado en Linux y con la librería SDL. Si pulsamos F1 pasamos a pantalla completa, pero perdemos detalle, por lo que programé otro tetris con resolución de 640x480.

Tetris programado en C y con la librería SDL resolución 640x480. Linux

Y para terminar este puzzle que había realizado en Linux y con la librería SVGA, una librería que se quedo anticuada y necesitaba permisos root.
Vuelvo a realizar el puzzle, pero en este caso utilizo SDL que es actual y funciona bien.

Puzzle con SDL resolución 640x480. (Linux)


PROGRAMAS

Este es un retorno al pasado, es un modo de revivir programas antiguos realizados por mi.
No descarto hacer nuevas revisiones de otros programas, hay muchos en discos viejos. ;)


Saludos.
Juan Galaz