Tag Archives: C64

Flashback: Sprite BASIC

En Flashback les presento posts seleccionados reciclados desde la primer encarnación del blog SolidState.
Sprite BASIC es una expansión de 47 nuevos comandos para el BASIC de la C64, escrito por Andreas Schulteiß y originalmente publicado como un listado para tipear en la revista española Commodore World Nro 33 de Enero de 1987 (y posiblemente también en la revista RUN en otros lugares de Europa y EEUU).

Sprite BASIC usa interrupciones para manejar los sprites y sus colisiones, y también el sonido, de manera de poder tener sprites moviendose por la pantalla y sonido mientras el programa BASIC se sigue ejecutando.

Comandos para sprites y caracteres personalizados

SHOW número de sprite (1-8 ), indicador multicolor (0-1), prioridad (0-1) Sirve para hacer visible un sprite. Ejemplo:

SHOW1,1,0 conecta el sprite 1 en multicolor y sin  prioridad sobre el fondo

HIDE número de sprite (1-8 ) Desconecta un sprite. Ejemplo:

HIDE 1 desconecta el sprite 1.

SET número de sprite (1-8 ), coordenada X (0-511), coordenada Y (0-255). Coloca un sprite en una posición de la pantalla. Ejemplo:

SET3,160,130 coloca el sprite 3 en el centro de la pantalla

BLOCK número de sprite (1-8 ), número de bloque (0-63). Determina la zona de almacenamiento de datos para el sprite. Ejemplo:

BLOCK1,10 selecciona el bloque 10 para el sprite 1.

COLOR número de sprite (1-8 ), color (0-15). Selecciona el color del sprite. Ejemplo:

COLOR7,1 selecciona el color blanco para el sprite 1.

MULTI color1 (0-15), color2 (0-15). Define los multi-colores para todos los sprites. Ejemplo:

MULTI6,2 selecciona los colores azul y rojo

SIZE número de sprite (1-8 ), ampliación X (0-1), ampliación Y (0-1). Determina la expansión X e Y del sprite. Ejemplo:

SIZE4,1,0 hace que el sprite 4 se expanda en horizontal.

SPREDIT número de bloque (0-63). Determina el número de bloque o banco de datos del sprite que se va a editar con el comando PAT (ver más adelante). Ejemplo:

SPREDIT12 selecciona el bloque 12

CHREDIT número de carácter (0-511). Determina el carácter que va a ser editado con PAT. Ejemplo:

CHREDIT1 la "A" va a ser el cáracter editado.
CHREDIT257 la "A" del segundo juego de caracteres es la que se va a editar.

PAT“cadena de definición”. Sirve para definir un sprite o un carácter. Si la cadena es de 8 caracteres, se define un carácter (ver CHREDIT) y hacen falta 8 definiciones. Si es de 24, se crea un sprite (ver SPREDIT) y hacen falta 24 definiciones. Un carácter “.” significa pixel apagado, y cualquier otro carácter, pixel encendido. Ejemplo:

PAT"...***..."

MPAT“cadena de definición” (12 caracteres). Sirve para definir sprites multicolores: “.” es un pixel apagado, “A” pixel del color del sprite, “B” pixel con multicolor1 y “C” pixel con multicolor2. Ejemplo:

MPAT"AA...BB...CC"

OLD copia los dos juegos de caracteres ROM del C-64, con lo que los caracteres definidos con CHREDIT y PAT quedan sustituidos por caracteres normales.
COPY bloque1 (0-63), bloque2 (0-63). Copia un bloque de un lugar a otro. Ejemplo:

COPY1,2 copia el bloque 1 sobre el 2.

Comandos de movimiento

Move número de sprite (1-8 ), ángulo (0-360, sentido antihorario según la horizontal), extensión de los pasos, velocidad (0-127, 1 la máxima), número de pasos (0-65535, 0 es movimiento continuo), flag BASIC (0 seguir el programa, 1 esperar a que el sprite termine de moverse). Usado para mover un sprite por la pantalla. Ejemplo:

MOVE1,90,1,1,10,1 el sprite 1 se mueve en vertical hacia arriba con la maxima velocidad en pasos de 1 pixel. En total da diez pasos y luego sigue el programa BASIC.            

MOVE8,77,4,4,20,0,0 el sprite 8 se mueve de forma continua en un angulo de 77 grados a velocidad 20, con pasos de 4 pixeles. El programa BASIC continua por su cuenta.

NOMOVE número de sprite (1-8 ). Detener un sprite. Ejemplo:

NOMOVE3 detiene el movimiento del sprite 3.

TURN número de sprite (1-8 ), ángulo (0-360), número de pasos (0-65535), número de repeticiones (0-255, siendo 0 ininterrumpido). Indica a un sprite que cambie su direccián de movimiento tras un número determinado de pasos. Ejemplo:

TURN1,90,10,20 el sprite 1 girara 90 grados tras dar 10 pasos, repitiendose esto 20 veces.

NOTURN número de sprite (1-8 ). Detiene el cambio de dirección y el sprite vuelve a moverse normalente. Ejemplo:

NOTURN2

ANIMATE número de sprite (1-8 ), primer bloque (0-63), número de bloques (0-63), número de pasos. Un sprite cambia de forma alternativamente. Ejemplo:

ANIMATE1,13,3,10 el sprite 1 cambia de forma (banco de lectura de datos) cada 10 pasos, comenzando en el  13 y siguiendo en 14-15.

NOANIMATE número de sprite (1-8 ). Detiene la animación. Ejemplo:

NOANIMATE4 detiene la animación del sprite 4

Comandos de manejo de colisiones

SPCOL número de sprite (1-8 ), número de linea (0-63999). Hace que el programa se ramifique a la línea especificada cuando se detecta una colisión del sprite con otro sprite. Ejemplo:

SPCOL1,1000 hace que si el sprite 1 colisiona con otro sprite el programa se ramifique a la linea 1000.

NOSPCOL número de sprite. Anula la orden anterior. Ejemplo:

 NOSPCOL1

CHCOL número de sprite (1-8 ), número de linea (0-63999). Es como SPCOL pero para colisiones entre el sprite y los caracteres.
NOCHCOL número de sprite (1-8 ). Anula CHCOL.
BACK Después de SPCOL o CHCOL, el programa dará un salto atrás al encontrar esta orden, exactamente al lugar del que partió. El resultado es como GOSUB/RETURN.
POP Hace desaparecer la dirección para BACK. De este modo puede volver a cualquier parte del programa con GOTO en vez de con BACK.
CLFLAG El flag de colisión se queda activado cuando se ejecuta CHCOL o SPCOL por lo que si se produce otra colisión no podra ser detectada, por lo que es recomendable poner este comando al final de la subrutina de colisión, o inmediatamente despues de haber resuelto la condición que produjo la colisión en primer lugar.
(Nota: La revista recomienda colocar este comando al principio de la subrutina, pero de esa manera, al no haberse resuelto la condición que produjo la llamada a la subrutina, solo se logra que se llame a la subrutina una y otra vez, produciendo al final un desbordamiento de pila y la finalización del programa.)

Comandos de sonido

VOL intensidad (0-15). Regula el volumen. Ejemplo:

VOL15

ADSR voz (1-3), ataque (0-15), decaimiento (0-15), sostenimiento (0-15), relajación (0-15). Determina la envolvente del sonido. Ejemplo:

ADSR1,1,9,0,0 produce sonido de piano.

WAVE voz (1-3), tipo de onda (0-3). Fija la forma de onda. Puede ser: 0=triangular, 1=diente de sierra, 2=cuadrada, 3=ruido blanco. Ejemplo:

WAVE1,3 la voz 1 produce ruido

PULSE voz (1-3), ancho del pulso (0-65535). Determina la relación en una oscilación cuadrada. Ejemplo:

PULSE2,2000 la voz 2 tiene una relación de 1:2000.

PLAY voz (1-3), frecuencia en Hz, duración en segundos, flag (0=el programa continúa. 1=el programa se detiene hasta que termina el sonido). Sirve para tocar una nota. Ejemplo:

PLAY1,400,1,0 toca el diapason A durante 1 segundo mientras el programa BASIC se ejecuta. 


Otros comandos

CURSOR columna (0-39), línea (0-24). Pone el cursor en una posición de la pantalla. Ejemplo:

CURSOR20,12 coloca el cursor en el centro de la pantalla

PLOTcolumna (0-39), línea (0-24), código (0-255), color (0-15). Coloca un carácter en la pantalla con color incluido. Ejemplo:

PLOT20,12,1,0 pone una A en negro en el centro de la pantalla.

BORDER color (0-15). Cambia el color del borde de la pantalla.
PAPER color (0-15). Cambia el color del fondo de la pantalla.
INK color (0-15). Cambia el color de los caracteres para las sentencias PRINT que sigan.
NOBREAK Desconecta la tecla STOP
RENEW Recupera un programa BASIC borrado con NEW o con reset.
KILL Desconecta Sprite BASIC.

Funciones

SPX(S). Contiene la coordenada X del sprite S. Ejemplo:

A=SPX(1)

SPY(S). Contiene la coordenada Y del sprite S. Ejemplo:

PRINT SPY(7)

ANG(S) Indica el ángulo con que se mueve el sprite S.
SCOL(S) Indica si el sprite S ha chocado (1) o no (0) con otro sprite. Ejemplo:

IF SCOL(2) THEN PRINT"CHOCASTE"

CCOL(S) Si el sprite S ha chocado con un carácter de la pantalla indica 1, si no, 0.
CHAR(X,Y) Indica el carácter que esta en la columna X, línea Y de la pantalla (en codigo de pantalla).
FIRE(P) Indica el estado del botón de disparo del joystick en el puerto P. Ejemplo:

X=FIRE(1)

JOY(N) Esta función permite la utilización en todo momento del joystick: N=1 “pregunta” al joystick 2 en todas las direcciones. N=2 joystick 2 solo en sentido horizontal (180 y 360 grados). N=3 solo en sentido vertical (90 y 270 grados). N=4 solo vertical y horizontal sin las diagonales. N=5 a 8 son los equivalentes para el puerto 1.

Descargar imagen D64 comprimida: spritebasic.zip
La imagen contiene:

  • SBASICGEN: El generador BASIC del Sprite BASIC tecleado desde la revista.
  • SPRITE BASIC: El ejecutable del Sprite BASIC, carga este programa para empezar a usarlo.
  • CARS: Pequeño juego de demostracion del Sprite BASIC, cargarlo despues de inicializar el Sprite BASIC.

Descifrando el cartucho HAL M-128

HAL Sociedad Anonima fue uno de los tantos fabricantes de cartuchos para Commodore 64 y 128 en la Argentina de la década de los 80.

El HAL M-128 es un cartucho con 2 modos: 128 y 64, seleccionables mediante un interruptor. El cartucho contiene ademas un botón de Reset.

Las funciones en ambos modos son prácticamente identicas:

  • Acelera la carga de programas en diskette (600% más veloz)
  • Evita el golpeteo de la cabeza del drive.
  • Hace volcados de pantalla por impresora.
  • Formateo de diskettes en 10 segundos.
  • Conversor númerico decimal, hexagecimal y binario.
  • Aumenta la RAM libre en 4K.
  • etc.

Como no poseo una Commodore 128 me voy a centrar en el modo 64 del cartucho.

Al encender la computadora pantalla inicial es la siguiente:

Ingresando <-M (Flecha izquierda M) muestra una ‘página de ayuda’:

Antes de seguir, una breve explicación del funcionamiento de los cartuchos en la Commodore 64.

Continue reading Descifrando el cartucho HAL M-128

Dumping the HAL M-128 cartridge

HAL Sociedad Anonima was one of many Argentine Commodore 64 y 128 cartridge manufacturers during the ’80s.

The HAL M-128 is a dual mode cartridge: 128 and 64, selectables by means of a switch. It also includes a reset button.

Both modes share almost the same functions:

  • Disk turbo (600% faster)
  • Head Rattle disabler
  • Printed screen dumps.
  • 10 seconds disk format.
  • Numer base conversor: decimal, hexa and binary.
  • 4KB extra under BASIC.
  • etc.

I dont own a C128 therefore I’ll talk about the 64 mode.

This is the startup screen with the cartridge plugged and set to 64 mode:

There’s a help screen by typing <-M (Left arrow M):

Now a brief explanation of the way cartridges work on the Commodore 64.

Continue reading Dumping the HAL M-128 cartridge

Flashback: Tu Micro Commodore Semanal

In Flashback I present selected posts recycled from the first iteration of SolidState blog.

 

Tu Micro Commodore Semanal was a Spanish magazine devoted to Commodore computers, the weekly edition ran for 18 issues and then switched to monthly format.

 

Number 1

Contents:

  • Review: Booga-Boo
  • Review: Ganimedian Rescue
  • Hardware: The Commodore 128

Download (62.9MB)

 

Number 2

Contents:

  • Review: Baloncesto
  • Type-in: Memorizaje
  • Hardware: Koala Pad Touch Tablet
  • The Commodore 16’s colours

Download (63.9MB)

 

Number 3

Contents:

  • Review: Frankie goes to Hollywood
  • Type-in: Tiro
  • Sprites management in the 128
  • Hardware: Star SG-10

Download (60.7MB)

 

Number 4

Contents:

  • Review: Theatre Europe
  • Using Sprites in the 128
  • Type-in: Ensamblador
  • Hardware: The 1702 video monitor

Download (67.4MB)

 

Number 5

Contents:

  • Review: Ghostbusters
  • Type-in: Fronton
  • Hardware: The Commodore 1541 disk drive
  • Graphic creation in the C128

Download (65.3MB)

 

Number 6

Contents:

  • Review: Solo Flight
  • Type-in: Peso Ideal
  • Hardware: The GP-700-VC color printer
  • Graphics in the Commodore 128

Download (62.8MB)

 

Number 7

Contents:

  • Review: Archon
  • Type-in: Copión 64
  • Hardware: Joysticks
  • ¡Música Maestro!

Download (62.5MB)

 

Number 8

Contents:

  • Review: Impossible Mission
  • Type-in: Spritemon
  • Review: Winter Games

Download (57.7MB)

Continue reading Flashback: Tu Micro Commodore Semanal

Flashback: Tu Micro Commodore Semanal

En Flashback les presento posts seleccionados reciclados desde la primer encarnación del blog SolidState.

 

Tu Micro Commodore Semanal fue una revista española dedicada a computadoras Commodore, la edición semanal se publicó durante 18 números y luego paso a una ‘segunda epoca’ de publicación mensual.

Número 1

Contenido:

  • Review: Booga-Boo
  • Review: Ganimedian Rescue
  • Hardware: El Commodore 128

Descargar (62.9MB)

 

Número 2

Contenido:

  • Review: Baloncesto
  • Tecla a Tecla: Memorizaje
  • Hardware: Koala Pad Touch Tablet
  • Los colores del Commodore 16

Descargar (63.9MB)

 

Número 3

Contenido:

  • Review: Frankie goes to Hollywood
  • Tecla a Tecla: Tiro
  • El manejo de Sprites en el 128
  • Hardware: Star SG-10

Descargar (60.7MB)

 

Número 4

Contenido:

  • Review: Theatre Europe
  • Manejando Sprites con el 128
  • Tecla a Tecla: Ensamblador
  • Hardware: El monitor 1702

Descargar (67.4MB)

 

Número 5

Contenido:

  • Review: Ghostbusters
  • Tecla a Tecla: Fronton
  • Hardware: Unidad de disco Commodore 1541
  • Creación de gráficos en el C128

Descargar (65.3MB)

 

Número 6

Contenido:

  • Review: Solo Flight
  • Tecla a Tecla: Peso Ideal
  • Hardware: La impresora a color GP-700-VC
  • Gráficos en el Commodore 128

Descargar (62.8MB)

 

Número 7

Contenido:

  • Review: Archon
  • Tecla a Tecla: Copión 64
  • Hardware: Joysticks
  • ¡Música Maestro!

Descargar (62.5MB)

 

Número 8

Contenido:

  • Review: Impossible Mission
  • Tecla a Tecla: Spritemon
  • Review: Winter Games

Descargar (57.7MB)

Continue reading Flashback: Tu Micro Commodore Semanal

Flashback: Temporización del MOS6572 VIC-II

En Flashback les presento posts seleccionados reciclados desde la primer encarnación del blog SolidState.

 

Argentina fue el único lugar del mundo donde Commodore permitió que sus computadoras fueran fabricadas bajo licencia y fueran vendidas bajo la marca del fabricante local, en este caso Drean.

Los modelos de Commodore ensamblados por Drean fueron la Commodore 16, la C64 y la C64C. También vendieron la C128 pero era una C128 NTSC con la etiqueta cambiada.

La otra caracterisca única acerca de las computadoras Drean Commodore era el uso de la norma de video PAL-N.

La nomra PAL-N usa practicamente la misma portadora de audio que NTSC, esto evito el uso de las versiones PAL-B de los chips TED y VIC-II.

Por lo tanto, Commodore fabricó versiones especiales PAL-N de tanto el TED como del VIC-II, este articulo es sobre éste último.

MOS6572

La versión PAL-N del VIC-II es denominada MOS6572 y hasta el momento se conocen solo dos revisiones:

  • R0 – Encapsulado ceramico
  • R1 – Encapsulado plastico

Como todas las señales de reloj se derivan de un solo cristal en la C64 y son generadas casi en su totalidad por el VIC-II, la frequencia de la portadora de audio diferente del PAL-B requirió no solo un nuevo chip de video, sino también de un nuevo cristal.

Como aprenderemos más adelante el cristal en la Drean C64 es de 14.328224 MHz.

 

Continue reading Flashback: Temporización del MOS6572 VIC-II

Flashback: MOS6572 VIC-II Timings

In Flashback I present selected posts recycled from the first iteration of SolidState blog.

 

Argentina was the only place in the world where Commodore allowed it’s computers to be license built and co-branded with the local manufacturer, that manufacturer being Drean.

Commodore models assembled by Drean were the Commodore 16, the C64 and the C64C. They also sold the C128 but it was only a rebadged NTSC C128.

The other thing unique about the Drean Commodore computers was the use PAL-N as video standard.

The PAL-N standard uses almost the same audio carrier that the NTSC standard, this prevented the use of the PAL-B versions of the TED and VIC-II chips.

Therefore, Commodore manufactured special PAL-N versions of both TED and VIC-II chips, this article is about the later.

 

MOS6572

The PAL-N version of the VIC-II is denominated MOS6572 and to this day there’s only two revisions known of:

  • R0 – Ceramic package
  • R1 – Plastic package

As all the C64 clocks are derived from the same single crystal and generated mostly by the VIC-II, the different audio carrier frequency called not only for a new video chip, but also a new crystal.

As we will find later, the crystal used on the Drean C64 is of 14.328224 MHz.

 

Continue reading Flashback: MOS6572 VIC-II Timings