Pantalla Spectrum

Priskribo de la ĉi-paĝa enhavo

Programo verkita en SuperBASIC por Sinclair QL; ĝi traudukas ekranbildon de ZX Spectrum al la QL-formato.

Etikedoj:

Ĉi malgranda programo, kies hispanlingva titolo signifas Ekrano Spectrum, tre interesas; ĝi tradukas ekranbildon de ZX Spectrum en la formaton de QL. La dosieron oni sendu antaŭe al la QL per seria kablo aŭ loka reto, kiel estas priskribite en lo fontkodaj notoj (en la hispana).

Ekranbildo de Spectrum enhavas 6 912 bitokojn: 6 144 bitokojn reprezentas 256x192 pikselojn; kaj 768 bitokojn reprezentas la koloron de ĉiu signo-loko 8x8 pikselojn granda (fona kaj malfona koloroj el inter 8 koloroj, plus brilo kaj blinko).

Ekranbildo de QL havas du eblajn modalojn: kaj ambaj bezonas 32 768 bitokojn por konservi la necesan informon:

Evidentas ke modalo 8 estas pli taŭga ĉi-kaze. La rezulto estis senmanka kaj la bildo vidiĝis per la QLa modalo 8 samkiel ĉe originala Spectrum (krom la informo pri brilo kaj blinko, kiujn ne eblas traduki).

Tiuepoke mi verkis similan programon por traduki ekranbildon de MSX2 en QL-formaton, pli simplo tasko ol ĉi tiu.

Fontkodo

  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 :

Deŝutoj