Deja Vu #05: CODIFICACIÓN: Técnicas y Optimización para ZX Spectrum

SoundTrack: DEVOUR OF BRAIN BY DX-69 1998  
__________________________________________

(C) Card!nal/PGC/BD
__________________________________________

¡Hola, queridos lectores de nuestra revista! Daniil me pidió que escribiera un artículo sobre programación, y aquí estoy frente al editor de texto. Este artículo no tiene un objetivo específico, simplemente les contaré sobre la optimización y, en general, lo que he acumulado desde la publicación del cuarto número de Deja Vu.

Para empezar, hablemos de la salida de sprites sin atributos. Aquí está el procedimiento estándar:

LD HL,adr ;dirección del sprite
LD DE,#4000 ;dirección en la pantalla
LD B,192 ;altura en píxeles
LD C,32 ;ancho en caracteres
LOOP2 PUSH DE
PUSH BC
LD B,0
LDIR
POP BC
POP DE
INC D
LD A,D
AND 7
JP NZ,METKA1
LD A,E
ADD A,32
LD E,A
JP C,METKA1
LD A,D
SUB 8
LD D,A
METKA1 DJNZ LOOP2
RET

Ahora contemos cuántos ciclos funciona. Sin profundizar en los detalles de cómo lo calculé, diré que funciona alrededor de 146000 ciclos al mostrar un sprite del tamaño de la pantalla. En promedio, se gastan 23.7 ciclos por byte. En general, es un buen procedimiento para mostrar imágenes estáticas, pero si necesitas un procedimiento rápido y UNIVERSAL, entonces mira el listado siguiente. Con la palabra universal me refería a que se puede establecer libremente la altura, el ancho del sprite y sus coordenadas en la pantalla.

CALL DECRUN ;este programa crea
;una tabla de direcciones
;de la pantalla

LD HL,adr ;dirección del sprite
LD D,3 ;coord. X en caracteres
LD E,8 ;coord. Y en píxeles
LD B,100 ;altura en píxeles
LD C,20 ;ancho en caracteres

WIWOD DI
LD A,D
LD (WIW1+1),A
LD A,C
ADD A,A
SUB 64
NEG
LD C,A
LD A,B
LD B,0
LD IX,WIW2
ADD IX,BC
EX DE,HL
LD H,B
ADD HL,HL
LD BC,BUFER
ADD HL,BC
LD (STACK+1),SP
LD SP,HL
EX DE,HL
LD B,A
LOOP1 POP DE
LD A,E
WIW1 ADD A,0
LD E,A
LD C,D
JP (IX)
WIW2
DUP 32
LDI ;el comando LDI se repite
EDUP ;32 veces

DJNZ LOOP1
STACK LD SP,0
EI
RET

DECRUN LD HL,BUFER
LD DE,#4000
LD B,192
LOOP LD (HL),E
INC HL
LD (HL),D
INC HL
INC D
LD A,D
AND 7
JR NZ,METKA
LD A,E
ADD A,32
LD E,A
JR C,METKA
LD A,D
SUB 8
LD D,A
METKA DJNZ LOOP
RET
BUFER DEFS 384

El procedimiento funciona 108076 ciclos al mostrar un sprite del tamaño de la pantalla, lo que es 1.35 veces más rápido que el anterior. En promedio, se gastan 17.6 ciclos por byte. La subrutina DECRUN se ejecuta solo una vez, y luego se puede usar la subrutina WIWOD tantas veces como se desee. Solo diré que es necesario deshabilitar las interrupciones, ya que se utiliza la pila. Intenta entender cómo funciona todo. Solo te daré una pista sobre por qué se necesita el comando LD C,D antes del comando JP (IX). Como se sabe, LDI reduce el registro par BC durante su funcionamiento, así que, para que el registro B no se dañe, necesitamos mantener en el registro C un número mayor que el ancho máximo del sprite, es decir, mayor que 32, y el registro D siempre contiene un número mayor que 32.

Bien, hemos resuelto el tema de la salida de sprites, hablemos de rotar un sprite en cualquier ángulo (0 - 360). En el cuarto Deja Vu había el código de Kolotov "TURN SPRITES". Honestamente, ya había visto este programa antes y diré que la calidad del trabajo del programa no me alegró mucho :-(. Intenté rotar un cuadrado lleno de 5 por 5 caracteres a 45 grados y vi una imagen desagradable, el cuadrado ya no parecía un cuadrado, sino un cuadrado agujereado, y usar un programa así era problemático. Y todo se debe al algoritmo de rotación y la falta de consideración de la estructura de la pantalla. Implementé un algoritmo diferente y el resultado es simplemente asombroso. La imagen casi (teniendo en cuenta la baja resolución de la pantalla) no se distorsiona. Si, por ejemplo, rotas un círculo lleno de radio 50 a 45 grados alrededor de su centro, obtendrás el mismo círculo. Sin embargo, este algoritmo no lo inventé yo, lo tomé de la revista ZX NEWS 3. Allí había un artículo sobre la rotación de sprites, y se proporcionó un programa en BASIC. Este programa funcionó más de una hora, rotando toda la pantalla. No había un análogo en el código de este programa, y el autor confesó que no se llevaba bien con la calculadora incorporada de BASIC. Honestamente, yo tampoco me llevo bien con la calculadora incorporada, y por eso implementé este algoritmo en código sin usar una calculadora. La primera versión de mi programa funcionó 3.5 minutos, rotando toda la pantalla sin importar el ángulo. Decidí que eso era un completo SUXX y lo optimicé un poco. Al final, tardó alrededor de 40 segundos, lo que es aproximadamente 5 veces más rápido que la versión inicial y 100 veces más rápido que en BASIC, y esto, ten en cuenta, sin pérdida de calidad de imagen. Después, me dio pereza seguir optimizando, aunque había la perspectiva de reducir el tiempo a 10-15 segundos, o incluso más rápido, pero esa alegría puedo dejarte a ti, SERZH, me entiendes :-). En el anexo encontrarás el código fuente en formato ALASM 3.8c. El código fuente contiene comentarios, así que lo entenderás. No mires el código patético, no tuve tiempo para pulirlo. El origen de coordenadas se considera la esquina inferior izquierda de la pantalla, si no me equivoco. El sprite a rotar (¡no dejes que se seque!) ya debe estar en la pantalla. El programa utiliza un volumen considerable de memoria (6144 + aproximadamente 2kg) de bytes para el búfer, allí verás... Casi olvido contar el algoritmo de rotación. Se toma un punto con coordenadas (x0,y0), se rota un ángulo y se obtiene la coordenada (x1,y1), de la coordenada (x1,y1) se toma un punto (si existe) y se traslada a la coordenada (x0,y0), luego se toma el siguiente (x0,y0) y así sucesivamente. Se realizan verificaciones para salir de los límites de la pantalla, OF COZZZ, así que todo está bien :-).

¿Entonces? ¡Sigamos adelante! Aquí un tal CRANK me pidió ayuda para entender los "xor complicados", así que diré lo siguiente. Debes aprender a entender los xor por ti mismo (con la ayuda de STS v6.2, por ejemplo). Intenta entender qué está xorando, traza, observa atentamente los registros, traslada el residente de STS, si es necesario, a un lugar seguro. El xor más simple se ve así:

LD HL,adr
LD BC,lenght
LOOP LD A,(HL)
XOR 23
LD (HL),A
INC HL
DEC BC
LD A,B
OR C
JR NZ,LOOP
RET

Si tienes una PC, puedes escribir el programa en ensamblador o en hiew (si eres un pervertido :-)).

mov dx,adr
mov bx,lenght
loop mov si,dx
mov al,[si]
xor al,23
mov [si],al
inc dx
dec bx
jnz loop
retn

Por supuesto, no me importa dónde codifiques, pero ¡SPECCY, OF COZZZ, RULEZ para siempre!

Parece que hemos aclarado los xor, tanto en Spectrum como en PC, así que sigamos adelante :-). Me gustaría decir unas palabras sobre el cambio de páginas. Aquí, por ejemplo, el programa que vi en SERZH en uno de sus artículos geniales (como siempre):

LD BC,#7FFD
OUT (C),A
LD (BANK),A
RET
BANK DEFB 0

O algo así. ¿Qué vemos? Parece todo correcto... ¡Pero no! Imaginemos una situación en la que llegan interrupciones entre los comandos out (c),a y ld (bank),a. Las interrupciones se ejecutarán y volverán. Pero al salir se restaurará el antiguo valor de BANK y, en última instancia, los cuadros de colores en la pantalla, por lo que es necesario guardar el valor antes de out (c),a.

Dado que Deja Vu ahora se publicará sin protección, quería hablar sobre un gran método de protección contra la copia inventado por mí (el disco no se puede copiar ni en PC ni en Amiga) e incluso quería incluir los códigos fuente en el anexo (formateador y lector de formato), pero luego pensé que sería demasiado. Y renuncié a esa idea. Sin embargo, si me lo piden bien, tal vez lo cuente. Ahora sigamos adelante.

Quiero decir unas palabras sobre el juego "Cuervo Negro", es un juego increíble. Pero algunos niveles son simplemente mortales (me refiero a casi imposibles de pasar), y como no soy un gamer y no me apasionan demasiado los juegos, me facilité la vida, inserté un par de POKES y vi el FINAL CUT. Si anulas tres bytes desde la dirección #D5CE en RAM0, dejarás de quedarte sin dinero. Bueno, y el número del nivel actual se almacena en la dirección #79D8. Por ejemplo, ingresa el número del siguiente nivel allí, haces "intentar de nuevo" y ya estás en otro nivel. Si ingresas #10, verás el FINAL CUT. "Todo esto es genial", dirás - "¿Y qué pasa con la protección?" Aquí tienes razón, incluso un shadow no ayudará. Así que, arréglatelas tú mismo, rompe como quieras. No tengo el derecho moral de enseñarte a romper productos comerciales. Solo diré que me tomó tres días insertar POKES.

Luego hablemos del algoritmo de multiplicación. El procedimiento más simple de multiplicación en SPECCY se ve así: HL = A*E

LD H,A
LD L,0
LD D,L
LD B,8
LOOP ADD HL,HL
JR NC,$+4
ADD HL,DE
DJNZ LOOP
RET

No es difícil contar la cantidad de ciclos: mínimo 310, máximo 358 sin contar el RET. Por supuesto, si desplegamos el ciclo, obtendremos un mínimo de 206 y un máximo de 254 ciclos. ¿Se puede hacer más rápido? ¡Sí, por supuesto! Pero para eso hay que recordar la álgebra inicial. Más precisamente, las fórmulas de multiplicación abreviada:

Cuadrado de la suma: (a+b)^2=a^2+2ab+b^2
Cuadrado de la diferencia: (a-b)^2=a^2-2ab+b^2

Tomemos estas fórmulas como base. Para escribir el procedimiento de multiplicación, es necesario formar una tabla de cuadrados de números del 0 al 255 inclusive. La tabla de cuadrados será la parte principal del programa. La dirección de la tabla debe ser múltiplo de 256, es decir, el byte menos significativo = 0. Esto lo hace el siguiente programa.

SET_TBL LD DE,TABL
LD H,E
LD L,E
LD B,E
LD C,E
SET_T1 LD A,L
LD (DE),A
INC D
LD A,H
LD (DE),A
DEC D
ADD HL,BC
INC C
ADD HL,BC
INC E
JR NZ,SET_T1
RET
TABL DEFS 512

Y aquí está el procedimiento de multiplicación en sí. Los números del 0 al 255 se establecen en los registros L y E. La respuesta está en HL.

MULS LD H,'TABL
LD C,(HL)
INC H
LD B,(HL)
LD A,L
ADD A,E
JP NC,MUL4
JP M,MUL1
SUB E
SUB E
JP NC,MUL2
LD A,E
SUB L
MUL2 LD L,E
LD D,(HL)
DEC H
LD E,(HL)
LD L,A
LD A,(HL)
INC H
LD H,(HL)
LD L,A
SBC HL,BC
OR A
SBC HL,DE
LD A,L
CPL
LD L,A
LD A,H
CPL
LD H,A
INC HL
SRL H
RR L
RET
MUL4 LD L,E
LD D,(HL)
DEC H
LD E,(HL)
LD L,A
LD A,(HL)
INC H
LD H,(HL)
LD L,A
SBC HL,BC
OR A
SBC HL,DE
SRL H
RR L
RET
MUL1 LD A,L
SUB E
JP NC,MUL3
LD A,E
SUB L
MUL3 LD L,E
LD D,(HL)
DEC H
LD E,(HL)
LD L,A
LD A,(HL)
INC H
LD H,(HL)
LD L,A
SBC HL,BC
OR A
SBC HL,DE
SRL H
RR L
LD A,L
CPL
LD L,A
LD A,H
CPL
LD H,A
INC HL
RET

Al final, la cantidad de ciclos es mínimo 141 y máximo 207, lo que, admitámoslo, es un poco. Este algoritmo fue tomado del juego BATTLE COMMAND 128. Además, se mencionó en la revista electrónica "Spectrum Expert 1". Sin embargo, allí se presentó un programa ligeramente diferente que tenía en cuenta los signos al multiplicar, y había una limitación de números de -128 a +127, lo que no siempre es conveniente.

Ahora hablemos del cálculo de la raíz cuadrada. En ZX FORMATE 7 había algún programa para calcular raíces, pero diré directamente que no es muy bueno. Y todo se debe a la velocidad. Intenté calcular con ese programa la raíz de 1024. Lo rastreé con STS y resultó que el programa hace 5 (cinco) divisiones, y al calcular la raíz de 65535 hace 10 (diez) divisiones. Además, el procedimiento de división se ejecuta en aproximadamente 1000 ciclos, o incluso más. Entonces, pensé un poco y escribí el mío. Su listado se da a continuación. Mi programa realiza solo una división, si el número está en el intervalo de 2 a 16383, y realiza dos divisiones si el número está en el intervalo de 16384 - 65535. No se realizan divisiones para los números 0 y 1. El programa funciona según un algoritmo de Newton modificado por mí. Intenta entender cómo funciona todo. Te daré una pista: en la tabla están las llamadas raíces medias de los números de 2^1 a 2^15. Se calculan con la fórmula:

(sqr(2^n)+sqr(2^(n+1)))/2

SQRT LD A,H ;HL = SQR (HL)
OR L
RET Z
LD D,H
LD E,L
LD B,15
ADD HL,HL
JR C,SQRT2
DEC B
ADD HL,HL
JR C,SQRT2
DEC B
SQRTL ADD HL,HL
JR C,SQRT1
DJNZ SQRTL
LD HL,1
RET
SQRT1 LD HL,TABL
LD C,B
LD B,0
ADD HL,BC
LD C,(HL)
SQRT_ PUSH BC
CALL DIV
POP BC
ADD HL,BC
SRL H
RR L
RET
SQRT2 PUSH DE
CALL SQRT1
POP DE
LD B,H
LD C,L
JR SQRT_

DIV PUSH BC ;HL = DE/BC con redondeo
LD A,B ;respuesta
CPL
LD B,A
LD A,C
CPL
LD C,A
INC BC
LD HL,0
LD A,E
ADD A,A
RL D
DUP 16
ADC HL,HL
ADD HL,BC
JR C,$+4
SBC HL,BC
RLA
RL D
EDUP
LD E,A
POP BC
SRL B
RR C
OR A
SBC HL,BC
EX DE,HL
RET C
INC HL
RET
TABL DEFB 1,2,2,3,5,7,10,14,19,27
DEFB 39,55,77,109,155,219

No conté el tiempo de ejecución, pero es de aproximadamente 1500 - 2500 ciclos. Se puede acelerar el programa si se utiliza un procedimiento de división más rápido. Pero se puede evitar completamente las divisiones si se utiliza otro algoritmo. Tengo en mente uno así, pero aún no tengo suficiente tiempo libre para estudiarlo bien y escribir el programa :-(

Con esto concluye mi relato. Solo diré que en los listados se usaron directivas del ensamblador ALASM. Así, por ejemplo:

DUP 16
cuerpo del programa
EDUP

significa que el cuerpo del programa se ensambla 16 veces.

Por último, quiero informar que estoy preparando un largo artículo sobre gráficos 3D en SPECCY para el número 6. En él se abordarán: fórmulas de rotación de puntos en el espacio, algoritmo de dibujo de triángulos llenos, descomposición, algoritmo de ocultación de caras invisibles, algoritmo de construcción de objetos complejos no convexos, algoritmos de relleno de caras según la ubicación de la fuente de luz y algo más. Por supuesto, se proporcionarán ejemplos en ensamblador. Sería deseable y también tener tiempo libre. Por ahora, eso es todo. BYE.

Contenido de la publicación: Deja Vu #05

  • Аперативчик - Max
    Instrucciones detalladas sobre la gestión de la interfaz DEJA VU, destacando diferentes métodos de entrada y comandos de navegación. Explicación de las interfaces nuevas y antiguas para mejorar la experiencia del usuario. Discusión sobre funciones adicionales como el desplazamiento de cuadros y la gestión de música.
  • Аперативчик - Max
    Discusión sobre el soporte de máquinas con más de 128k de memoria, lo que lleva a cascarones separados para sistemas de 128k y 256k. Las pruebas se realizaron principalmente en Scorpion y Profi, con la funcionalidad anticipada en otros modelos. El artículo incluye orientación sobre cómo descomprimir archivos fuente y percepciones sobre el uso de algoritmos mejorados.
  • Тема - M.M.A
    Este artículo explora la teoría detrás de la digitalización del sonido en ZX Spectrum, centrándose en los procesos de muestreo y cuantificación. Proporciona ideas prácticas para convertir archivos de sonido utilizando hardware y software específicos. Además, ofrece métodos para mejorar la calidad del sonido trabajando dentro de las limitaciones del hardware.
  • Tema
    El artículo discute la iniciativa Save Our Scene destinada a unir a los usuarios y desarrolladores de Spectrum para promover la distribución de software y mejorar el desarrollo de la escena.
  • Estatuto de la Asociación Amazing Soft Making
    Discusión sobre el estatuto fundacional de la asociación Amazing Soft Making, detallando sus objetivos, criterios de membresía y principios operativos.
  • Teoría de la Creación de Revistas
    El artículo ofrece una guía detallada para aspirantes a creadores de revistas, centrándose en aspectos técnicos como diseño de interfaz, gestión de memoria, formato de texto e integración de música para publicaciones de ZX Spectrum.
  • Gota de Soldadura
    El artículo ofrece un relato personal sobre la compra y el uso del dispositivo General Sound para ZX Spectrum, detallando la instalación y el rendimiento del sonido. Discute los problemas iniciales encontrados y elogia la experiencia de audio mejorada en juegos compatibles. El autor alienta una mayor adaptación del software para el dispositivo y reflexiona sobre las capacidades multimedia con el uso simultáneo de hardware.
  • Gota de Soldadura
    El artículo discute las capacidades de Sound Forge 4.0c para el procesamiento de audio profesional en PC, destacando sus extensas características como la edición de sonido, efectos y herramientas de restauración.
  • SOFTWARE
    El artículo revisa los últimos desarrollos de software para el ZX Spectrum de Samara, incluyendo actualizaciones de MAXSOFT SCREEN PACKER, File Commander y nuevas aplicaciones como S-Terminal.
  • SOFTWARE - Card!nal
    Reseña y guía del juego de aventura gráfica lógica 'Operación R.R.' con instrucciones detalladas de nivel. Discusión sobre elementos del juego como la elección musical y el diseño gráfico. Menciona la participación del nuevo codificador MAX/CYBERAX/BINARY DIMENSION.
  • SOFTWARE
    Discusión sobre el estado actual y la evolución de la demoscena, destacando el auge de las intros de 4K y las próximas competiciones como FUNTOP'98.
  • CODING
    El artículo discute técnicas de programación en lenguaje ensamblador para optimizar el desplazamiento de pantalla en ZX Spectrum, con ejemplos de código y análisis de rendimiento.
  • CODING - RLA
    El artículo explora técnicas de manipulación de pila durante interrupciones de segundo tipo para efectos gráficos en ZX Spectrum. Se discuten soluciones para preservar la integridad de los datos cuando las interrupciones interrumpen las operaciones gráficas. Se proporcionan ejemplos prácticos para manejar problemas de pila de manera eficiente.
  • CODIFICACIÓN
    El artículo describe el empaquetador MS-PACK y su DEPACKER, detallando escenarios de uso y proporcionando ejemplos de código en BASIC y ensamblador para manejar archivos empaquetados. Se enfatiza la optimización del rendimiento al permitir la descompresión con interrupciones habilitadas y al separar el DEPACKER de los archivos empaquetados. Además, incluye ideas sobre técnicas de programación para cargar y ejecutar archivos BASIC en ZX Spectrum.
  • CODIFICACIÓN
    El artículo discute varias técnicas de codificación para ZX Spectrum, centrándose en el renderizado de sprites, algoritmos de rotación y métodos de optimización para mejorar el rendimiento.
  • OTRO MUNDO
    Discusión sobre la evolución de las tecnologías multimedia y su impacto en diversos campos, incluyendo la educación y el entretenimiento. Cubre los avances en hardware y software de computadoras que han facilitado la integración de audio, video y texto. El artículo reflexiona sobre desarrollos pasados y especula sobre el futuro de los sistemas multimedia.
  • OTRO MUNDO
    Comparación de sistemas PC y Amiga que destaca el rendimiento, costos de software y la experiencia del usuario con capacidades multimedia.
  • Lista de Honor
    Entrevista con PROGRESS que discute su trayectoria creativa en ZX Spectrum y AMIGA, abordando desafíos en la creación de demos y el estado actual de la escena.
  • Lista de Honor
    El artículo detalla las actividades y proyectos futuros del equipo de Eternity Industry, con sede en Kovrov, incluidas lanzamientos exitosos y colaboraciones con otros grupos.
  • Lista de Honor
    Discusión sobre el festival Artcomp'98, centrado en su formato por correo y pautas para varias competiciones, incluyendo categorías de demostración, gráficos y música.
  • Lista de Honor
    El artículo proporciona un glosario de términos utilizados en la escena demo, explicando roles como músico, programador y artista gráfico, así como diferentes tipos de demos y efectos. Sirve como un recurso útil para entender la terminología y la dinámica de la comunidad. Esta es una pieza descriptiva destinada a educar a los lectores sobre el argot de la escena demo.
  • Lista de Honor
    El artículo discute los problemas con el soporte del ratón en varias revistas de ZX Spectrum y las frustraciones de los usuarios al encontrar problemas de compatibilidad. Critica a los desarrolladores por no cumplir con los estándares, lo que lleva a malas experiencias para los usuarios. El autor expresa la importancia de mejoras consistentes en el software para la comunidad de ZX Spectrum.
  • Tablero de Honor
    El artículo discute el proceso de creación de imágenes tricolores para ZX Spectrum utilizando Photoshop y un enfoque simplificado. Describe cómo dividir una imagen en canales RGB y convertirlos para su uso en Spectrum. Además, ofrece consejos sobre cómo gestionar los archivos para obtener resultados óptimos.
  • Lista de Honor
    El artículo discute la comparación y las perspectivas sobre varios sistemas informáticos, enfatizando las fortalezas de AMIGA sobre PC y abogando por la apreciación de todas las máquinas.
  • Siete y media
    El artículo discute las absurdidades humorísticas y peculiaridades del entrenamiento militar y la academia, combinando sátira con anécdotas reales y observaciones ingeniosas.
  • Siete y medio
    El artículo ofrece un manual satírico sobre metodologías de programación, burlándose de la rigidez de las prácticas de programación formales y abogando por un enfoque más creativo en la codificación.
  • Siete y medio
    Instrucciones sobre prácticas de sexo seguro, incluyendo pautas sobre elegibilidad, preparación y acciones durante y después de la sesión sexual, además de cómo manejar situaciones de emergencia.
  • Siete y medio
    El artículo discute un llamado a un artista talentoso en Krasnodar para un grupo de ZX Spectrum, plantea preocupaciones sobre las prácticas poco éticas de Scorpion respecto a los derechos de software y critica un video de revisión de E'97.
  • Siete y medio
    El artículo 'Семь и 1/2' narra una divertida aventura de picnic con el equipo editorial de Deja Vu, destacando su camaradería y contratiempos mientras preparaban una barbacoa.
  • Prueba de la Pluma
    El artículo es una visión humorística de las aventuras ficticias de Winnie the Pooh mientras interactúa con computadoras y amigos, discutiendo las absurdidades de la tecnología y la vida diaria.
  • Primera pluma
    El artículo discute la nueva sección de Deja Vu dedicada a la literatura de fantasía y ciencia ficción, que presenta reseñas de libros y participación de los lectores en la creación de contenido.
  • Publicidad
    El artículo es una sección de anuncios de Deja Vu #05, promoviendo colaboraciones con diseñadores y músicos para futuros números, y ofreciendo varios programas y hardware para ZX Spectrum.
  • Noticias
    El artículo anuncia el lanzamiento de una nueva revista, AMIGA RULES, centrada en la computadora AMIGA, abordando la falta de publicaciones de calidad en ruso. Su objetivo es proporcionar información sobre programación, hardware, software y juegos, al tiempo que fomenta una comunidad entre los entusiastas de AMIGA. La revista incluirá contribuciones de los lectores y actualizaciones regulares sobre la escena AMIGA.