# Bally Astrocade

La Bally Astrocade fue una videoconsola de segunda generación y un sencillo sistema de ordenador que se lanzó al mercado en 1978. Fue diseñada por un equipo de la Midway Games, en aquel momento la división de videojuegos de la Bally Manufactoring. Se comercializó por poco tiempo ya que la Bally decidió salir del mercado de las videoconsolas. Los derechos fueron más tarde vendidos a una tercera empresa, que la relanzó y la vendió como la Astrovision hasta cerca de 1984. La Astrocade era particularmente notable por su potente capacidad gráfica (para el momento en que se lanzó), pero también por la dificultad para acceder a dicha capacidad.

## Historia
### Nutting y Midway

A finales de 1970, Midway contrató a Dave Nutting Associates para diseñar un chip de video que pudiera ser usado en todos sus sistemas de videojuegos, desde juegos arcade de recreativas hasta un sistema doméstico. El sistema entregado por Nutting fue utilizado en la mayoría de los juegos arcade clásicos de Midway de la época, incluyendo Gorf y Wizard of Wor.

### Creación de la consola

Originalmente conocido como el Bally Home Library Computer, fue anunciado en 1977 pero solo disponible para su venta por correo, aunque los retrasos en la producción hicieron que las primeras unidades se enviaran en 1978. Luego pasó a venderse principalmente en tiendas de informática con el nombre de Bally Professional Arcade, pero esas tiendas tenían poca introducción en el mercado minorista (a diferencia de la Atari VCS).

### Venta a Astrovision Inc.

En 1979 Bally perdió su interés en el mercado de los arcade y decidió vender su división de productos de consumo, incluyendo el desarrollo y la producción de la consola de juegos. En ese momento una tercera empresa había intentado sin éxito lanzar su propio diseño de consola al mercado como la Astrovision. Un vendedor corporativo de la Montgomery Ward, que estaba a cargo del sistema Bally, puso a los dos grupos en contacto y llegaron finalmente a un acuerdo. En 1981 volvieron a lanzar la unidad con el cartucho del BASIC incluido de forma gratuita bajo el nombre de Bally Computer System, pero en 1982 cambió su nombre de nuevo al definitivo Astrocade. Se vendió bajo este nombre hasta la crisis del videojuego de 1983, y desapareció cerca de 1985.

### ZGRASS y el Datamax UV-1

Midway había planeado durante mucho tiempo lanzar un sistema de expansión de la unidad, conocido como el ZGRASS-100. El sistema estaba siendo desarrollado junto con los programadores de Nutting por un grupo de artistas gráficos para el ordenador de la Universidad de Illinois en Chicago, conocido como el "Circle Graphics Habitat". Midway pensaba que ese sistema en una caja externa haría a la Astrocade más interesante para el mercado, pero todavía no estaba listo para su lanzamiento cuando Bally vendió la división. Finalmente una pequeña cantidad fue producida como el ZGRASS-32 (por disponer de 32Kb de RAM adicionales) después de que la máquina fue relanzada por Astrovision.
El sistema combinado en una sola caja sería lanzado como la Datamax UV-1. Originalmente dirigida al mercado de las computadoras domésticas, durante su diseño la máquina se reorientó hacia un sistema de videojuegos con salida de gráficos de alta calidad conectable a unidades de cinta de video. Estuvo disponible para su venta durante algún tiempo entre 1980 y 1982, pero se desconoce cuántas unidades fueron construidas.

## Descripción del aparato

El sistema estaba basado en una CPU Zilog Z80, que se comunicaba con el chip gráfico usando memoria RAM intermedia entre ambos. El chip gráfico disponía de dos modos, un modo de baja resolución a 160 × 102, y un modo de alta resolución a 320 × 204, ambos con 2 bits por píxel para ofrecer cuatro colores. En estos modos necesitaba 160 × 102 × 2bits / 8bits*byte = 4.080 bytes de memoria, y 320 × 204 × 2bits / 8bits*byte = 16.320 bytes de memoria para mantener la información de pantalla.
Este tipo de color en alta resolución era superior a las capacidades de comunicación de la RAM de la época, que no podía leer los datos lo suficientemente rápido para mantenerse sincronizada con la pantalla de TV, por lo que el sistema original utilizaba el direccionamiento en modo de página, permitiéndoles leer una "línea" a la vez a una velocidad muy alta y ponerla en un buffer dentro del chip de visualización. La línea podría entonces pasarse a la pantalla a una velocidad más lenta, además esto también interfería menos con la CPU cuando ambos chips intentaban utilizar la misma memoria a la vez.
La Astrocade no soportaba el modo de alta resolución, pues la memoria era solo de 4Kb de RAM, lo que además solo dejaba 16 bytes para su uso por el programa para guardar variables de estado, niveles, la puntuación o las opciones del juego, y los pines necesarios para utilizar el "truco" para alta resolución no estaban conectados.
La Astrocade utilizaba registros de color (color indirecto por paletas), por lo que los cuatro colores se podían escoger de una paleta de 256 colores. La animación del color era posible cambiando los valores de los registros, y usando la interrupción del sincronismo de línea se podría cambiar en cada una de las mismas. Un conjunto adicional de cuatro registros de color podrían ser "intercambiados" en cualquier lugar a lo largo de la línea, lo que le permitía crear dos "mitades" de la pantalla y dividirla verticalmente. Originalmente diseñado para permitir crear fácilmente un área de puntuación a un lado de la pantalla, los programadores también utilizaron esta característica para emular 8 colores simultáneos.
A diferencia de la Atari VCS, la Astrocade no incluía soporte para sprites por hardware. Sin embargo incluía un sistema similar al blitter y un software para manejarlo. La memoria por encima de 0x4000 estaba dedicada a la pantalla y la memoria por debajo a la ROM, tanto la del sistema como los cartuchos, lo que le dejaba 8Kb para cada programa. Si un programa escribía en el espacio de la ROM (lo que es imposible por ser de "solo lectura") el chip gráfico tomaba esos datos, les aplicaba una función y copiaba el resultado en la ubicación correspondiente de la RAM. La función a utilizar era almacenada en un registro del chip gráfico e incluía instrucciones comunes como XOR y desplazamientos de bits. Esto permitía al Astrocade manejar objetos de forma semejante a los sprites pero de forma independientemente a hardware, con la desventaja de que era el software el que debía volver a dibujarlos cuando se movían.
La Astrocade fue uno de los primeros sistemas basados en cartuchos, utilizando cartuchos conocidos como Videocades, diseñados para ser semejantes en tamaño y forma a una cinta de casete. La unidad también incluía dos juegos integrados en su ROM, Gunfight y Checkmate, junto con una calculadora simple pero útil y un programa de "dibujo" llamado Scribbling. La mayoría de los cartuchos incluían dos juegos, cuando eran insertados la máquina se reiniciaba y exhibiría un menú que comenzaba con los programas del cartucho y luego enumeraba los cuatro programas incorporados.
La Astrocade disponía de un mando relativamente complejo que incorporaba varios tipos de mecanismos de control: tenía la forma de una empuñadura de pistola, con el interruptor de disparo como el gatillo, y disponía de un pequeño joystick de 4 contactos/8 vías en la parte superior de la empuñadura, con el eje conectado a un potenciómetro, lo que significa que el stick podría girarse como un volante. Se les describía como excelentes por su versatilidad pero tenían la desventaja de romperse con facilidad.
En la parte superior de la unidad había un teclado de 24 teclas tipo calculadora, utilizado para seleccionar juegos y opciones y el manejo de la calculadora integrada, mientras que en la parte posterior había una serie de puertos, incluidos el conector de alimentación, los conectores de los mandos y un puerto de expansión. La parte superior trasera de la unidad estaba vacía y se podría abrir para almacenar hasta 15 cartuchos.
Su capacidad para ser actualizada desde una consola de videojuegos a una computadora personal, junto con su biblioteca de casi 30 juegos, son algunas de las razones que la hacían más versátil que sus principales competidores en 1982, por lo que fue incluida por Jeff Rovin como una de las siete principales máquinas de videojuegos.

## BASIC

La Astrocade también incluyó un cartucho con el lenguaje de programación BASIC, basado en el Tiny BASIC de Li-Chen Wang. El soporte del BASIC en el sistema era difícil, porque la pantalla utilizaba casi toda la RAM disponible. La solución a este problema fue almacenar el código de programa BASIC en la RAM de vídeo. Esto se logró intercalando cada bit del programa con los de la pantalla; el BASIC utilizaba los bits pares y la pantalla los bits impares. El intérprete leía dos bytes seguidos y unía sus bits impares en un solo byte de código. Esto era invisible al establecer que dos de los colores fueran iguales a los otros dos, de modo que los colores 00 y 10 eran negro, y los colores 01 y 11 eran blanco, por lo que la presencia o ausencia de un bit no tenía ningún efecto en el pantalla. Se obtenía memoria adicional usando parte de la zona de memoria usada para almacenar las líneas de la pantalla, de modo que se barrían solo 88 líneas en lugar de las 102 líneas posibles. El resultado final de todo esto fue lograr exprimir 1.760 bytes de RAM para los programas BASIC. La desventaja era que la mayor parte de la potencia del sistema de gráficos no estaba disponible.
Los programas se ingresaron a través del teclado incorporado, con cada una de las teclas asignadas a un único comando, a un número o a varios caracteres alfabéticos. Estos se seleccionaban a través del conjunto de las 4 teclas coloreadas de la derecha del teclado, que hacían la función de cambio. De esta manera se escribía "WORD" (gold), luego una tecla de cambio con la tecla "+", y se obtenía GOTO.

## ZGRASS

La unidad ZGRASS se ubicaba bajo la Astrocade y la convertía en un ordenador "real", incluyendo un teclado completo, un co-procesador matemático (FPU), 32Kb de memoria RAM, además de una nueva ROM de 32Kb que contenía el lenguaje de programación GRASS (a veces denominado GRAFIX en esta máquina), similar al BASIC pero con instrucciones para el manejo de gráficos en 2D. La unidad también añadía puertos de E/S para conectar un casete y una disquetera, permitiendo su uso con una versión del CP/M.

## Especificaciones
### Placa de circuitos y cartuchos

* CPU: Zilog Z80, 1.789 MHz
* RAM: 4 Kb
* Expansión de RAM: Hasta 64 Kb con módulos externos en el puerto de expansión
* ROM: 8 Kb
* Cartuchos: ROM de 8 Kb
* Puertos: 4 para los mandos, 1 de expansión, 1 para lápiz óptico
* Sonido: 3 voces + efectos de ruido/vibrato (reproducidos a través del televisor)

### Video

* Resolución: Normal 160 × 102, con el BASIC 160 × 88, con expansión de RAM 320 × 204
* Tipo de gráficos: Bitmap, 2 planos empaquetados de bits.
* Colores: Normales 8 $^*$, con el BASIC 2

## Biblioteca de juegos
### Videojuegos oficiales

Se lanzaron oficialmente 28 videojuegos para el sistema.
| 280 ZZZAP / Dodgem (1978) Amazing Maze / Tic Tac Toe (1978) Artillery Duel (1982) Astro Battle (1981) (título original Space Invaders) Bally Pin (1981) Biorhythm (1981) Blackjack / Poker / Acey-Deucey (1978) Blast Droids (1981) Clowns / Brickyard (1979) Cosmic Raiders (1978) Dog Patch (1978) Elementary Math and Speed Math (1978) Football (1978) Grand Prix / Demolition Derby (1978) Gun Fight (1977) | The Incredible Wizard (1981) Letter Match / Spell'n Score / Crosswords (1981) Ms. CandyMan (1983) (very rare) Muncher (1981) Panzer Attack / Red Baron (1978) Pirates Chase (1981) Sea Devil (1983) (rare) Seawolf / Missile (1978) Galactic Invasion (1981) (nombre original Galaxian) Galaxian (1981) (luego remarcado como Galactic Invasion) Solar Conqueror (1981) Space Fortress (1981) Space Invaders (1981) (AKA Astro Battle) Star Battle (1978) Tornado Baseball / Tennis / Hockey / Handball (1978) |

### Otros Cartuchos

* BASIC
* Machine Language Manager

### Prototipos

* Mazeman
* Soccer

### Desarrollos Homebrew

* Treasure Cove (1983) (Spectre Systems)
* ICBM Attack (Spectre Systems) con el mando Spectre Systems Handle (muy raro)
* War