Programaciรณn de Videojuegos para
SEGA Saturn
ROLANDO FERNANDEZ BENAVIDEZ
Programación de Videojuegos para SEGA Saturn (c) Rolando Fernández Benavidez
Edición original publicada por NOVA32, Ciudad de México. Derechos reservados (c) NOVA32 2019.
MARCAS COMERCIALES: NOVA32 ha intentado a lo largo de este libro distinguir las marcas registradas de los términos descriptivos, siguiendo el estilo de mayúsculas que utiliza el fabricante, sin intención de infringir la marca y sólo en beneficio del propietario de la misma.
ISBN 9801509687
NOVA32 DEVELOPMENT SOFTWARE © Rolando Fernández Benavidez 2019 Derechos Reservados.
Esta obra es propiedad intelectual de su autor y los derechos de publicación en lengua española han sido legalmente transferidos al editor. Prohibida su reproducción parcial o total por cualquier medio sin permiso por escrito del propietario de los derechos del copyright.
NOTA IMPORTANTE CONTACTO La información contenida en esta obra tiene un fin exclusivamente didáctico y, por lo tanto, no está previsto su aprovechamiento a nivel profesional industrial. Las indicaciones técnicas incluidos, su objetivo, facilitar el Estimado olector(a) espero que el presente libroy programas cubra por completo han sido elaborados con gran cuidado por el autor y reproducidos bajo aprendizaje de programar en un sistema SEGA Saturn. Es imposible cubrir en un solo libro estrictas normas de control. NOVA32 Development Software no será todos los aspectos técnicos de esa consola. Los ejemplos de código fueron cuidadosamente jurídicamente responsable por: en errores u omisiones; dañoso yejecución. perjuiciosSi tienes alguna duda o revisados para evitar errores tiempo de compilación que se pudieran atribuir al usoenviando de la información en este comentario, puedes hacerlo un correocomprendida a: libro, ni por la utilización indebida que pudiera dársele. rolandobooks@hotmail.com Edición autorizada para México y su distribución mundial. Impreso en México – Printed in Mexico.
Sobre Mí Desde pequeño sentí una atracción por los videojuegos, los cuales representan uno de mis mejores pasatiempos. Después de mis actividades como padre de familia, reverendo luterano, informático y escritor independiente, los videojuegos ocupan un lugar importante en mi vida; sin lugar
Programador de VideoJuegos
a dudas.
Experiencia Con una trayectoria de 18 años en el área de software lúdico, desarrollando aplicaciones multimedia para diversas organizaciones del sector privado.
Programación en lenguajes de alto y bajo nivel como C++, C# y Ensamblador. Para diferentes arquitecturas como Sony PlayStation 2, PSP, Sega Dreamcast, 32X, Sega Saturn, Nintendo64, Atari, software para Windows, Mac OSX y plataformas Android.
Dedicatoria
Dedico esta obra a la memoria de mi padre, la mayoría de mis conocimientos en electrónica se los debo al brillante ingeniero electrónico que era él. Descansa en paz amado padre.
“Donde la realidad termina, la verdadera vida inicia”
Rolando Fernández Benavidez
INDICE
PROLOGO La consola Saturn de SEGA tiene más de 25 años de haber aparecido en el mercado, hace bastante tiempo que los desarrollos y lanzamientos para dicho sistema han dejado de existir, sin embargo, alrededor de todo el mundo existen miles de aficionados a esta maravillosa consola. El presente libro intenta mostrar de una manera clara y amena, la programación de videojuegos para este sistema utilizando el Lenguaje C y un api llamado JoEngine. Durante el presente texto también podrá encontrar alguna referencia al api original de SEGA (SGL), en la medida en que sea requerido, sin la necesidad de exponerlo por completo, para evitar infringir los derechos reservados de SEGA Enterprise. Iniciaremos con un breve recorrido para sentar las bases del sistema SEGA Saturn, posteriormente realizaremos una revisión a detalle del Hardware, la implementación del api Jo-Engine y finalmente, se presentarán dos proyectos que he programado para la SEGA Saturn (Asteroids y Mazinger Z). Para leer este libro se requieren conocimientos previos del lenguaje Ensamblador y programación en C, en ningún momento me detendré a realizar alguna enseñanza de dichos lenguajes; el libro da por entendido que usted ya los conoce y domina. Respecto a la parte electrónica posiblemente incluya algunas explicaciones detalladas, pero no serán requisito para poder programar un sistema SEGA Saturn, únicamente permitirán tener una visión completa de dicha plataforma. Aun cuando el libro está escrito en lengua castellana, será requisito el idioma inglés, debido a que mucha de la documentación oficial de SEGA y HITACHI se encuentra en ese idioma, se presentará integra sin traducción en algunas secciones de esta obra. Algunas secciones también incluyen japonés, pero el conocimiento de ese idioma no será limitante para la comprensión del texto.
Rolando Fernández Benavidez Ciudad de México, marzo de 2019.
Programaciรณn de Videojuegos para SEGA Saturn
I. LA SEGA SATURN
8
Programación de Videojuegos para SEGA Saturn
Un poco de historia Sega Saturn (セガサターン) es la quinta videoconsola de sobremesa producida por Sega. Fue desarrollada para suceder a la Mega Drive/Genesis y competir contra la 3DO Interactive Multiplayer, Atari Jaguar, Neo Geo CD, PlayStation, y más adelante Nintendo 64, entre otras. En 2009, el sitio web de videojuegos IGN calificó a Saturn como la 18ª mejor videoconsola de todos los tiempos. Fue lanzada al mercado el 22 de noviembre de 1994 en Japón, y en mayo de 1995 en Norteamérica. Se vendieron 170,000 máquinas el primer día de venta en Japón, siendo sacada anticipadamente para intentar imponerse a la PlayStation de Sony. Esto propició que hubiese muy pocos juegos desarrollados para el día de su estreno, y que las calidades de éstos no reflejaran las verdaderas capacidades de la máquina.
Sega Saturn llegó a obtener en sus primeros días un valioso segundo puesto en la lucha por el mercado de los videojuegos, pero fue perdiendo terreno con la aparición de la PlayStation, que tenía un amplio catálogo de juegos y era mucho más fácil de programar a la hora de crear juegos, dado que la Sega Saturn, al tener dos procesadores de 32 bits en paralelo (Hitachi SH2) y un tercero de apoyo (Hitachi SH1) añadía una dificultad muy fuerte a los programadores que no estaban habituados a este tipo de arquitecturas. 9
Programación de Videojuegos para SEGA Saturn
Más tarde, con la llegada de la Nintendo 64 quedó relegada a un tercer plano en la lucha por el mercado de los videojuegos del que no pudo levantar cabeza. De esta manera, en América y Europa prácticamente desapareció hacia el año 1998 aguantando solamente en Japón con algún que otro juego, hasta la llegada, hacia finales de ese mismo año, de su sucesora: la Dreamcast. A pesar de la llegada de la nueva máquina de Sega, siguieron publicándose algunos juegos más en Japón hasta bien entrado el año 2000. Su cese de producción en América y Europa se produjo en 1999, en Japón fue en el 2000.
Debido a la política de Sega Europe por aquel entonces, acompañada por las escasas ventas de la consola, los jugadores europeos se quedaron sin poder disfrutar de juegos como Grandia, Street Fighter Zero 3, Metal Slug o Vampire Savior.
Cabe destacar que ya en esa época, Sega utilizaba un concepto similar al "Doble Núcleo" de los procesadores Intel o AMD actuales, uniendo los procesadores SH2 en paralelo.
Como dato curioso, mencionar que con el módem Netlink, sólo disponible oficialmente en EEUU y Japón (utililizable en Europa), se podía jugar en línea a los juegos que lo permitían. A pesar de que se anunciaba la Dreamcast como la primera consola con juego en línea, esto resultaba ser falso al poseer Sega Saturn posibilidad de juego en línea (al igual que Mega Drive). Lo correcto es que Dreamcast era la primera consola con capacidades en línea de serie, al traer un módem integrado en la consola, así como poseer desde prácticamente su lanzamiento una plataforma en línea específica. Hoy día, todavía se juegan partidas mediante llamadas directas entre módems a juegos como Duke Nukem 3D mediante la Sega Saturn. En Brasil la consola fue distribuida por la compañía TecToy.
10
Programación de Videojuegos para SEGA Saturn
Ficha técnica:
Modelos de la Sega Saturn:
Modelos de Norteamérica
MK-80000: Fabricada del 8/95 hasta el 3/96. MK-80000A: Fabricada del 3/96 hasta el 7/96. MK-80001: Fabricada del 7/96 hasta el 96.
Modelos japoneses
Hubo multitud de modelos, aproximadamente diez, entre ellos cabe destacar el último modelo de SATURN fabricado en el mundo: Skeleton Saturn: una
11
Programación de Videojuegos para SEGA Saturn
saturn de color gris transparente que en la tapa del cd tenía impresa la frase "This is Cool" se fabricaron solamente 50,000 unidades.
Hitachi HiSaturn. Hitachi HiSaturn Navi. Jap New. JVC V-Saturn. Saturn Old.
Modelos europeos y australianos
MK-08200-03. MK-80200-50: botones ovales y luces de acceso a CD. MK-80200A: negra con botones redondos, una sola luz al lado del botón 'Power', botón de "Eject" en forma trapezoidal y sin ranuras de ventilación.
12
Programaciรณn de Videojuegos para SEGA Saturn
13
Programaciรณn de Videojuegos para SEGA Saturn
14
Programación de Videojuegos para SEGA Saturn
Diferentes logotipos para cada país
Línea del tiempo de la SEGA Saturn
15
Programaciรณn de Videojuegos para SEGA Saturn
II. HARDWARE DE SEGA SATURN
16
Programación de Videojuegos para SEGA Saturn
El Hardware de la consola La SEGA Saturn tiene dos procesadores RISC, los cuales trabajan en una configuración de MASTER – SLAVE:
17
Programación de Videojuegos para SEGA Saturn
Podemos resumir las principales características de hardware: Processors
Main CPU: 2× Hitachi SH-2 @ 28.63636 MHz Configuration: Master/Slave 2x CPU cores: 32-bit RISC instructions/registers, 74.454536 MIPS (37.227268 MIPS each, 1.3 MIPS per MHz), up to 4 instructions/cycle (2 instructions/cycle per SH-2) 2x DMA units: 2x DMAC (Direct Memory Access Controller), parallel processing 4x internal fixed-point math processors: 2x MULT multiplier DSP, 2x DIVU division units, parallel processing 2x MULT multiplier DSP: 57.27272 MOPS fixed-point math (28.63636 MOPS per SH-2) 2x DIVU division units: 16/32/64-bit division, 1,468,531 divides/sec Bus width: 64-bit (2× 32-bit) internal, 32-bit external Word length: 32-bit System coprocessor: Custom Saturn Control Unit (SCU), with DSP for geometry processing and DMA controller for system control System control processor: 32-bit fixed-point registers/instructions, interrupt controller, DMA controller, 3 DMA channels Math coprocessor: Geometry DSP @ 14.31818 MHz, 32-bit fixed-point instructions, 6 parallel instructions per cycle, 85.90908 MIPS (6 MIPS per MHz) CD-ROM CPU: Hitachi SH-1 32-bit RISC processor @ 20 MHz (20 MIPS) (controlling the CD-ROM) Contains internal DAC and internal math processor Bus width: 32-bit internal, 16-bit external Microcontroller: Hitachi HD404920 (4-bit MCU) "System Manager & Peripheral Control" (SMPC) @ 4 MHz RTC: 1 MHz (real-time clock) Instruction set: 4-bit instructions, 890 ns per instruction, 1.123595 MIPS Bus width: 10-bit internal, 8-bit external Optional MPEG Video CD Card: MPEG Video decoder: Sega P/N 315-5765 (Hitachi HD814101FE) MPEG Audio decoder: Hitachi HD814102F
Audio
Sound processor: Yamaha SCSP (Saturn Custom Sound Processor) YMF292 Sound DSP: Yamaha FH1 DSP (Digital Signal Processor) @ 22.58 MHz (24-bit, 128-step, 4 parallel instructions) Bus width: 24-bit internal, 16-bit external Sound CPU: Motorola 68EC000 (16/32-bit CISC) sound processor @ 11.29 MHz (1.97575 MIPS) Bus width: 16-bit internal, 16-bit external
18
Programación de Videojuegos para SEGA Saturn
Video
Sega/Hitachi VDP1 @ 28.63636 MHz: Handles sprite/texture and polygon drawing Bus width: 48-bit (3x 16-bit) Word length: 16-bit Sega/Yamaha VDP2 @ 28.63636 MHz: Backgrounds, scrolling, handles background, scroll and 3D rotation planes Bus width: 32-bit Word length: 32-bit Sony CXA1645M RGB-Composite Video Encoder
19
Programación de Videojuegos para SEGA Saturn
El microprocesador SuperH SúperH (o SH) es el nombre de una arquitectura de microcontroladores y microprocesadores de Hitachi. Es fundamentalmente una arquitectura RISC de 32 bits de carga y almacenamiento encontrada en un gran número de sistemas embebidos.
20
Programación de Videojuegos para SEGA Saturn
El núcleo de la familia de procesadores SúperH fue desarrollado inicialmente por Hitachi a principios de los 90. Muchos microcontroladores y microprocesadores se basaron en esta arquitectura. Tal vez, el más famoso es el SH 7709, usado en los PDA HP (PDA) ejecutando Windows CE.
Hitachi desarrolló un juego completo de CPU compatible en instrucciones con versiones superiores. Originalmente, el SH-1 y el SH-2 fueron usados en la Sega Saturn y en la Sega 32X y posteriormente en muchos otros microcontroladores usados en aplicaciones integradas. Estos núcleos usan un conjunto de instrucciones de 16 bits, aunque la longitud de los registros y de los buses de datos son de 32 bits, lo que da una excelente densidad de código. Durante su desarrollo, la memoria era bastante cara.
Años después, el núcleo SH-3 fue añadido a esta familia de CPU, extendiendo a los originales principalmente con otro concepto de interrupciones, una MMU y un concepto modificado de caché. El núcleo SH-3 también tuvo una extensión DSP, llamada SH-3-DSP. Con los buses de datos extendidos para una mayor eficacia en el DSP, los acumuladores especiales y un motor DSP tipo dedicado, este núcleo fue unificando el mundo de los DSP y el de los procesadores RISC. Una derivación fue también usada en el núcleo SH-2 original, llamada SH-DSP.
Para la Sega Dreamcast, Hitachi desarrolló la arquitectura SH-4. Esta fue una extensión masiva de los anteriores núcleos. La ejecución superescalar de instrucciones y una FPU procesador vectorial procesamiento paralelo fueron los puntos más resaltados de esta arquitectura. Este núcleo también se usó en muchos chipsets para aplicaciones integradas que requerían unas prestaciones muy altas. Los chips estándar basados en el SH-4 fueron presentados sobre 1998.
Un poco más tarde, Hitachi y STMicroelectronics formaron la compañía de patentes SúperH Inc., que licencia el núcleo SH-4 a otras compañías y 21
Programación de Videojuegos para SEGA Saturn
desarrolla la arquitectura SH-5, el primer movimiento de SúperH en el área de los 64 bits. SúperH vendió la propiedad intelectual de estos núcleos.
El diseño SH-5 soporta dos modos de operación. El modo SH compact es equivalente al modo usuario del juego de instrucciones SH-4. El modo SH media es muy diferente, usando instrucciones de 32 bits con registros de enteros de 64 bits e instrucciones SIMD. En modo SH media, el destino de un salto (jump) se carga en un registro de salto de manera separada a la propia instrucción de salto. Esto permite al procesador obtener por adelantado instrucciones para una rama sin tener que mirar en el flujo de instrucciones. La combinación de una codificación de instrucciones compactas de 16 bits con una codificación de instrucciones de 32 bits más potente no es exclusiva del SH-5; recientes procesadores ARM tienen un modo thumb de 16 bits y los procesadores MIPS tienen un modo MIPS-16. Aun así, el SH-5 difiere porque su modo de compatibilidad hacia atrás es de codificación en 16 bits en lugar de 32 bits.
Después de último paso SH-4 fueron conjunto de
esto, la evolución de la arquitectura SúperH aún continúa. El evolucionario sucedió sobre 2003, cuando los núcleos SH-2 y unificados en el núcleo superescalar SH-X, que forma un super los juegos de instrucciones de las arquitecturas previas.
Actualmente, los núcleos de CPU Súper H, la arquitectura y los productos son de Renesas Technology, formada por una fusión de los grupos de semiconductores de Hitachi y Mitsubishi
22
Programación de Videojuegos para SEGA Saturn
Modelos La familia de núcleos SúperH está formada por:
SH-1 - usado en microcontroladores para aplicación profundamente integrada (unidades CD-ROM, electrodoméstico s, etc.) SH-2 - usado en micro controladores con requerimientos mayores de prestaciones, también usado en automóviles como unidad de control del motor o en aplicaciones de red. SH-DSP - inicialmente desarrollado para el mercado de telefonía móvil y usado más adelante en muchas aplicaciones de consumo que requieres prestaciones de DSP para compresión JPEG, etc. SH-3 - usado para aplicaciones móviles y de mano, fuerte en las aplicaciones Windows CE y el mercado durante años en sistemas de navegación para coche. SH-3-DSP - usado principalmente en terminales multimedia y en aplicaciones de red, al igual que en impresoras y en fax es SH-4 - usado cuando se necesitan altas prestaciones, como en los terminales multimedia en los coches, en videoconsolas o en set-topbox es. SH-5 - usado en aplicaciones multimedia de gama alta. SH-X - núcleo principal usado de varias maneras (con o sin DSP o FPU) en unidades de control de motores, equipos multimedia para coches, set-top boxes o teléfonos móviles.
Los núcleos SúperH son soportados mundialmente por muchos sistemas operativos de tiempo real.
Distinciones
Escalabilidad Costo eficiente Optimizado para aplicaciones integradas Altas prestaciones
23
Programación de Videojuegos para SEGA Saturn
FIN DE MUESTRA GRATUITA Espero que esta publicación sea de tu interés, si deseas obtener el libro completo lo puedes adquirir en alguno de los siguientes sitios, a un precio bastante accesible:
24