SoundTrack: SECTOR/SERIOUS SPECCY GROUP'98
__________________________________________
(C) Kolotov Sergey, SerzhSoft, may, 1998.
__________________________________________
Nuevamente OPTIMIZACIÓN
Al Gran y Terrible Líder de los Hackers Samara M.M.A aka UnBeliever, con una sonrisa.
En el cuarto número de Deja Vu, los lectores pudieron familiarizarse con el artículo de M.M.A, dedicado a la optimización. Sin duda, Maxim tocó un tema muy bueno y lo describió de manera bastante interesante. Recuerdo que se trataba de crear un procedimiento para el desplazamiento rápido de toda la pantalla hacia arriba. Se adjuntó el código fuente del programa en el formato del nuevo y genial ensamblador STORM. De hecho, es un ASM bastante conveniente y, lo más importante, _muy_ rápido. Pero... Personalmente, no me gustó. Aunque esta es una opinión puramente subjetiva. Simplemente no estoy acostumbrado a los mnemónicos "pegados", donde los comandos y operandos están separados solo por un espacio... Pero, así, ¡los chicos de X-TRADE son simplemente geniales! ¡Recomiendo a todos que intenten programar en STORM, es genial! Si DARK y LD también hicieran mnemónicos normales, ¡ya habría estado storm'il sin pensarlo!
Dado que este ensamblador aún no ha tenido una difusión suficientemente amplia, seguramente no todos han tenido la oportunidad de familiarizarse con el código fuente del procedimiento de M.M.A. Por lo tanto, sería bueno imprimirlo en un formato "normal", de texto, lo que haremos ahora...
;-------------------------------------; ABSOLUTAMENTE GENIAL LDI SCROLL
; COMPLETAMENTE CODIFICADO POR M.M.A
;-------------------------------------
ORG #8000
CALL INSTAL; Construcción de la tabla de direcciones de pantalla
LD HL,#C000,DE,#4000,BC,6144
LDIR ; Transferencia a la pantalla
; cargada desde la dirección #C000
; imagen
;-------------------------------------; 192 veces llamamos al procedimiento de desplazamiento
; de la pantalla hacia arriba en una línea
;------------------------------------;
LD B,192
LOO PUSH BC
DI
CALL ONELINE
EI:HALT ;se puede quitar para obtener un "tirón" uniforme de las líneas.
POP BC
DJNZ LOO
RET ; /
;------------------------------------
INSTAL LD HL,#4000; Este instalador
LD B,192; de direcciones se puede
LOOP2 CALL DOWNHL; hacer más rápido,
PUSH HL; pero ¿por qué?
METK3 LD (TABL),HL;
LD HL,(METK3+1)
INC HL
INC HL
LD (METK3+1),HL
POP HL
DJNZ LOOP2
RET
;-------------------------------------; LA PROPIA PROCEDIMIENTO DE DESPLAZAMIENTO HACIA ARRIBA EN UNA LÍNEA
;-------------------------------------
ONELINE
LD (METK2+1),SP; 20
LD BC,6144-#20; 10
LD HL,#4000; 10
LD (METK1+1),HL; 16
LD HL,TABL; 10
LD (METK4+1),HL; 16
METK4 LD SP,0; 10 (En )
POP HL; 11 ( De )
LD (METK4+1),SP; 20 ( E )
METK1 LD DE,0; 10 ( G )
LD (METK1+1),HL; 16 ( O)
.32 LDI ; 16*32 ( )
JP PE,METK4; 10 ( 578 )
LD SP,#5800; 10
.16 PUSH BC; 11*16
METK2 LD SP,0; 10
RET ; TOTAL 110682 CICLOS
; ++++++++++++++++++++++++++++++++++++
; + +
; + "DOWN HL" SUBROUTINES FROM MASM1.1 +
; + +
; ++++++++++++++++++++++++++++++++++++
;
;Para rapidez, todos los saltos JR al comando
;RET se reemplazaron por RET NZ,RET C
DOWNHL INC H; 4
LD A,H; 4
AND 7; 7
RET NZ; 5/11
LD A,L; 4
ADD A,32;7
LD L,A; 4
RET C; 5/11
LD A,H; 4
SUB 8; 7
LD H,A; 4
RET ; 10 TOTAL 55
TABL
Y ahora un poco de comentarios... Al observar detenidamente, se puede notar que los ciclos están contados incorrectamente en algunos lugares... En primer lugar, el comando POP HL no ocupa 11, sino 10 ciclos. Y en segundo lugar, ¡este comando parece no estar contabilizado en absoluto! De hecho, en el ciclo (donde aún se indica "TOTAL - 578") el tiempo total de ejecución de los comandos no ocupa 578 ciclos, como se indica, ¡sino 588! Y el tiempo total de ejecución resulta ser significativamente mayor que el marcado: 82+112308+196=112586 ciclos! ¡Hasta 2 mil ciclos de más!
Así que, habiendo revisado el programa, intentemos optimizarlo, ¡o mejor aún, escribamos uno "desde cero"! No los torturaré con mis disertaciones, miren y entiendan:
;--------------------------------------;
; DESPLAZAMIENTO DE PANTALLA COMPLETA HACIA ARRIBA ;
; codificado por Kolotov Sergey ;
; (c) SerzhSoft, Shadrinsk, may, 1998 ;
;--------------------------------------;
_NULL EQU 0
;--------------------------------------;
_DATA EQU #6000
SCR_TBL EQU _DATA ;,#0300
DATAEND EQU SCR_TBL+#0300
;--------------------------------------;
ORG #8000
;--------------------------------------;
MAINPRG
EI
;
CALL MK_STBL
; CALL MKSRLUP
;
LD HL,#0000
LD DE,#4000
LD BC,#1800
LDIR
;
LD B,#C0
LP_MAIN PUSH BC
HALT
DI
CALL SRL_UP
EI
POP BC
DJNZ LP_MAIN
;
RET
;--------------------------------------;
MK_STBL
LD HL,SCR_TBL
LD DE,#4000
LD B,#C0
LP_MSTB LD (HL),E
INC HL
LD (HL),D
INC HL
;
INC D
LD A,D
AND #07
JR NZ,$+12
LD A,E
ADD A,#20
LD E,A
JR C,$+6
LD A,D
SUB #08
LD D,A
;
LD (HL),E
INC HL
LD (HL),D
INC HL
DJNZ LP_MSTB
; RET
;--------------------------------------;
MKSRLUP
LD HL,SRL_UP
LD (HL),#ED ;ld (...),sp
INC HL
LD (HL),#73
INC HL
PUSH HL
INC HL
INC HL
LD (HL),#01 ;ld bc,...
INC HL
LD (HL),#E0
INC HL
LD (HL),#17 ;ld bc,#17E0
INC HL
LD (HL),#31 ;ld sp,...
INC HL
LD DE,SCR_TBL
LD (HL),E
INC HL
LD (HL),D ;ld sp,SCR_TBL
INC HL
PUSH HL ;lp_srup
LD (HL),#D1 ;pop de
INC HL
LD (HL),#E1 ;pop hl
INC HL
LD B,#20
LP_MSU1 LD (HL),#ED ;ldi
INC HL
LD (HL),#A0
INC HL
DJNZ LP_MSU1
LD (HL),#EA ;jp pe,...
INC HL
POP DE
LD (HL),E
INC HL
LD (HL),D ;jp pe,lp_srup
INC HL
LD (HL),#31 ;ld sp,...
INC HL
LD (HL),B ;#00
INC HL
LD (HL),#58 ;ld sp,#5800
INC HL
LD B,#10
LP_MSU2 LD (HL),#C5 ;push bc
INC HL
DJNZ LP_MSU2
LD (HL),#31 ;ld sp,_NULL
INC HL
EX DE,HL
POP HL ;ld (...),sp
LD (HL),E ; ^^^
INC HL
LD (HL),D
EX DE,HL
INC HL
INC HL
LD (HL),#C9 ;ret
RET
;--------------------------------------;
_CODE EQU $
SRL_UP EQU _CODE ;,#0066
CODEEND EQU SRL_UP+#0066
;--------------------------------------;
Unas palabras sobre el programa... Como pueden ver, todo está escrito en el estilo tradicional de "programación en tiempo real", cuya característica es la creación en tiempo real de procedimientos de gran escala que funcionan rápidamente. En este caso, se genera un procedimiento rápido para desplazar toda la pantalla una línea hacia arriba (SRL_UP). Para ello se llama al procedimiento MKSRLUP, al pasar el control en el "segmento de códigos adicionales" obtenemos algo parecido a:
SRL_UP
LD (SP_SRUP+1),SP ;20
LD BC,#17E0 ;10
LD SP,SCR_TBL ;10
;
LP_SRUP POP DE ;10 (TOTAL)
POP HL ;10 ( 542 )
.32 LDI ;16*32 ( * )
JP PE,LP_SRUP ;10 ( 191 )
;
LD SP,#5800 ;10
.16 PUSH BC ;11*16
;
SP_SRUP LD SP,_NULL ;10
RET
;
TOTAL: 40 + 103522 + 196 = 103758 ciclos!
El procedimiento MK_STBL crea en el segmento de datos una tabla de direcciones de pantalla SCR_TBL, que ocupa 768 bytes. Dado que cargar cualquier pantalla no es del todo conveniente (y, además, ¡hay que encontrar una adecuada! :-)), se decidió copiar en la pantalla la imagen estándar, presente en todas las computadoras, que está en ROM desde la dirección #0000. :-) Se llama "CHAOS", aunque algunas autoridades insisten en otro nombre, a saber, "Televisor Roto". Pero no importa. Lo principal es que el efecto del desplazamiento se puede observar muy bien y se puede ver claramente dónde el haz de exploración de la pantalla "supera" nuestro procedimiento...
¡El programa ocupa solo 147 bytes!
Sin embargo, si está dispuesto a sacrificar más memoria, la velocidad se puede aumentar aún más... Entonces el programa cambiará un poco:
...
;--------------------------------------;
LNS_NUM EQU #40
;--------------------------------------;
...
;--------------------------------------;
MKSRLUP
LD HL,SRL_UP
LD (HL),#ED ;ld (...),sp
INC HL
LD (HL),#73
INC HL
PUSH HL
INC HL
INC HL
LD (HL),#01 ;ld bc,...
INC HL
LD (HL),#E0
INC HL
LD (HL),#17 ;ld bc,#17E0
INC HL
LD (HL),#31 ;ld sp,...
INC HL
LD DE,SCR_TBL
LD (HL),E
INC HL
LD (HL),D ;ld sp,SCR_TBL
INC HL
LD (HL),#C3 ;jp ...
INC HL
LD D,H
LD E,L
LD BC,#0042+2
ADD HL,BC
EX DE,HL
LD (HL),E
INC HL
LD (HL),D ;jp lp_srup+#0042
INC HL
PUSH HL ;lp_srup
LD C,LNS_NUM
LP_MSU0 LD (HL),#D1 ;pop de
INC HL
LD (HL),#E1 ;pop hl
INC HL
LD B,#20
LP_MSU1 LD (HL),#ED ;ldi
INC HL
LD (HL),#A0
INC HL
DJNZ LP_MSU1
DEC C
JR NZ,LP_MSU0
LD (HL),#EA ;jp pe,...
INC HL
POP DE
LD (HL),E
INC HL
LD (HL),D ;jp pe,lp_srup
INC HL
LD (HL),#31 ;ld sp,...
INC HL
LD (HL),B ;#00
INC HL
LD (HL),#58 ;ld sp,#5800
INC HL
LD B,#10
LP_MSU2 LD (HL),#C5 ;push bc
INC HL
DJNZ LP_MSU2
LD (HL),#31 ;ld sp,_NULL
INC HL
EX DE,HL
POP HL ;ld (...),sp
LD (HL),E ; ^^^
INC HL
LD (HL),D
EX DE,HL
INC HL
INC HL
LD (HL),#C9 ;ret
RET
;--------------------------------------;
LN_SRUP EQU LNS_NUM*#0042+#0027
;--------------------------------------;
_CODE EQU $
SRL_UP EQU _CODE ;,LN_SRUP
CODEEND EQU SRL_UP+LN_SRUP
;--------------------------------------;
Como pueden ver, ha cambiado el procedimiento MKSRLUP, que ahora genera un procedimiento SRL_UP mucho más voluminoso:
SRL_UP
LD (SP_SRUP+1),SP ;20
LD BC,#17E0 ;10
LD SP,SCR_TBL ;10
JP LP_SRUP+#0042 ;10
;
LP_SRUP POP DE ;10
POP HL ;10
.32 LDI ;16*32
...
POP DE ;10 TOTAL
POP HL ;10 LNS_NUM
.32 LDI ;16*32 VECES
... /
POP DE ;10 /
POP HL ;10 /
.32 LDI ;16*32 /
;
JP PE,LP_SRUP ;10
;
LD SP,#5800 ;10
.16 PUSH BC ;11*16
;
SP_SRUP LD SP,_NULL ;10
RET
La constante LNS_NUM determina la cantidad de líneas de la pantalla que se copian en una iteración del ciclo. Así, con LNS_NUM = 64(#40) el tiempo total de ejecución del procedimiento se calcula así:
50 + ((532*64+10)*(192/64)-532) + 196 =
= 246 + 101642 = 101888 ciclos.
Por lo tanto, la ganancia fue de 1870 ciclos, lo cual, por supuesto, no es tanto. Más bien, de esto deben entender los propios principios de optimización del programa en cuanto al tiempo de ejecución y utilizarlos donde sea necesario y donde no lo sea.
Por último, quiero señalar que, en cualquier caso, para transferir grandes volúmenes de datos, los programas que funcionan con la pila se ejecutan más rápido. Quizás en el próximo artículo hablemos precisamente de esto. Pero por ahora, intenten entenderlo ustedes mismos... ¡Les deseo buena suerte!
Con los mejores deseos
Serzh.
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.