Pantalla Spectrum
Descripción del contenido de la página
Programa escrito en SuperBASIC para la Sinclair QL; adapta una pantalla de la ZX Spectrum a la QL.
Este pequeño programa es muy interesante; convierte un fichero de pantalla de la ZX Spectrum en el formato de la QL. El fichero debe haber sido pasado previamente a la QL por cable serial o red local, como se explica en los comentarios de cabecera del programa.
Una pantalla de la Spectrum ocupa 6 912 octetos: 6 144 octetos para representar los 256x192 pixeles; y 768 octetos para guardar la información de color de cada bloque de 8x8 pixeles (fondo y primer plano a elegir entre 8 colores, más brillo y parpadeo).
La pantalla de la QL tiene dos modos a elegir, y ambos necesitan 32 768 octetos para guardar toda la información:
- modo 8: 256x256 pixeles con 8 colores por pixel
- modo 4: 256x512 pixeles con 4 colores por pixel
Lógicamente el modo 8 es el adecuado para este caso. El resultado era impecable y la imagen se veía en el modo 8 de la QL igual que en la Spectrum original (salvo la información de brillo y parpadeo, que no se puede conservar).
Por las mismas fechas escribí otro programa similar para convertir una pantalla de MSX2 a la QL, tarea más sencilla que esta.
Código fuente
100 REMark Pantalla Spectrum
110 REMark Programa para adaptar una pantalla de ZX Spectrum a QL
120 :
130 REMark Copyright (C) 1989,2011 Marcos Cruz (programandala.net)
140 REMark Licencia/Permesilo/License: http://programandala.net/licencia
150 :
160 REMark La pantalla debe pasarse del ZX Spectrum al QL mediante RS232:
170 REMark en el QL... COPY SER2,FLPn_fichero
180 REMark en la Interface 1... SAVE *"B"SCREEN$
190 REMark O bien puede hacerse el envío mediante la red local:
200 REMark en el QL... NET 1:COPY NETI_2,FLPn_fichero
210 REMark en la Interface 1... FORMAT "N";2:SAVE*;"N";1SCREEN$
220 REMark o en el Disciple... FORMAT N2:SAVE N1SCREEN$
230 :
240 REMark Historial de cambios
250 REMark 1989-02-18: v0.00
260 REMark 1989-03-26: v0.01
270 REMark 1989-10-14: v1.00
280 REMark 1989-10-21: v1.01
290 REMark 2011-03-16: v1.02: retoques en los textos.
300 :
310 REMark Toolkit II
320 REMark Turbo Toolkit
330 :
340 IMPLICIT% tercios,scans_caracteres,filas_caracteres,n_byte,bit
350 :
360 long_fichero%=32
370 long_cabecera%=9
380 :
390 DIM fichero_zx$(long_fichero%)
400 DIM fichero_ql$(long_fichero%)
410 DIM tecla$(1)
420 :
430 MODE 8
440 OPEN#3,con_512x256a0x0
450 PAPER#3,0
460 INK#3,5
470 CLS#3
480 CSIZE#3,0,1
490 AT#3,1,6
500 PRINT#3,"ADAPTADOR DE PANTALLAS DE ZX SPECTRUM"
510 AT#3,2,8
520 PRINT#3,"Por: Marcos Cruz (programandala.net), 1989"
530 :
540 AT#3,4,4
550 PRINT#3,"Fichero de la pantalla de ZX Spectrum:"
560 AT#3,5,4
570 fichero_zx$=EDIT$(#3,"",long_fichero%)
580 AT#3,7,4
590 PRINT#3,"Fichero para la pantalla de QL:"
600 AT#3,8,4
610 fichero_ql$=EDIT$(#3,"",long_fichero%)
620 IF fichero_ql$="":STOP
630 dir_carga_pant=ALCHP(long_cabecera%+6912)
640 LBYTES fichero_zx$,dir_carga_pant
650 dir_ini_pant=dir_carga_pant+long_cabecera%
660 :
670 AT#3,10,6
680 PRINT#3,"¿Color de los márgenes? (0-7)"
690 REPeat color
700 tecla$=INKEY$(#3,-1)
710 IF tecla$ INSTR "01234567":EXIT color
720 END REPeat color
730 PAPER#3,tecla$
740 CLS#3
750 :
760 dir_byte=dir_ini_pant
770 x%=0
780 y_ini%=32:REMark así queda centrada la pantalla verticalmente
790 y%=y_ini%
800 FOR tercios=0 TO 2
810 FOR scans_caracteres=0 TO 7
820 y_scan_anterior%=y%
830 FOR filas_caracteres=0 TO 7
840 FOR n_byte=0 TO 31
850 octeto%=PEEK(dir_byte)
860 atrib%=PEEK(dir_ini_pant+6144+32*((y%-y_ini%)DIV 8)+(x% DIV 8))
870 papel%=(atrib%&&56)/8
880 tinta%=atrib%&&7
890 FOR bit=7 TO 0 STEP -1
900 IF octeto%&&(2^bit)
910 BLOCK#3,2,1,x%*2,y%,tinta%
920 ELSE
930 BLOCK#3,2,1,x%*2,y%,papel%
940 END IF
950 x%=x%+1
960 END FOR bit
970 dir_byte=dir_byte+1
980 END FOR n_byte
990 última_y%=y%
1000 y%=y%+8
1010 x%=0
1020 END FOR filas_caracteres
1030 última_y%=y%-8
1040 y%=y_scan_anterior%+1
1050 END FOR scans_caracteres
1060 y%=última_y%
1070 END FOR tercios
1080 :
1090 RECHP dir_carga_pant
1100 SBYTES fichero_ql$,131072,32768
1110 :
1120 CLOSE#3
1130 STOP
1140 :