Pantalla Spectrum

Descripción del contenido de esta 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:

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.

Listado


  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 :

Descarga