SCRLD (TSB)

Aus C64-Wiki
Zur Navigation springenZur Suche springen
SCRLD (TSB)
Syntax: SCRLD <fn>,<dr>,<sa>,<name> [+",<ft>,R"]
Parameter
fn: Dateinummer
dr: Laufwerk
sa: Sekundäradresse (2, 3 oder 5)
name: Dateiname
ft: Dateityp (U, S, P)
Einordnung
Typ: Anweisung
Kontext: Ein- / Ausgabe
Aufgabe: lädt einen Textbildschirm oder eine Grafik
Abkürzung: keine
Token: $64 $6e (100 110)
Verwandte Befehle
SCRSV - MERGE - LIN - LOAD - SAVE


Dieser Artikel beschreibt das TSB-Schlüsselwort SCRLD (TSB).
Das entsprechende Simons'-Basic-Schlüsselwort lautet ebenfalls SCRLD.

Typ: Anweisung
Syntax: SCRLD <fn>,<dr>,<sa>,<name> [+",<ft>,R"]

Beschreibung[Bearbeiten | Quelltext bearbeiten]

1. Alternative

Siehe den gleichlautenden Simons'-Basic-Befehl SCRLD, allerdings sollte dann die Sekundäradresse 0 oder 2 (oder eine beliebige gerade Zahl) sein. Diese Alternative lädt einen mit dem TSB-Befehl SCRSV gespeicherten Textbildschirm inklusive seiner Farben.

SCRSV von Simons' Basic erzeugt ein anderes Dateiformat als der TSB-Befehl. Ein so gespeicherter Bildschirm kann deshalb mit SCRLD (TSB) nicht erfolgreich geladen werden. Siehe dazu das Beispiel Simons' Basic Bildschirm in TSB.

2. Alternative

Der TSB-Befehl SCRLD ist zusätzlich in der Lage, ein Grafikbild zu laden. Dazu muss die Sekundäradresse ungerade sein. Es gibt zwei Versionen:

  1. Nur die Bitmap lädt man mit der Sekundäradresse <sa> "3". TSB lädt 8192 Bytes, d.h. den kompletten Grafikpuffer (unter TSB ab $E000), erwartet also eine 33 Blöcke große Datei. Siehe dazu das Beispiel Bitmap laden.
  2. Bitmap und Farben lädt man mit der Sekundäradresse <sa> "5". Zusätzlich zu den 8192 Bytes der Bitmap werden hierbei auch die Farbinformationen aus dem Farb-RAM und dem Video-RAM geladen, weshalb TSB hier eine 41 Blöcke große Datei erwartet. Siehe dazu das Beispiel Grafik mit Farben laden.
Diese Option steht seit TSB 2.20220 zur Verfügung.

Beachten:

  • Entgegen der TSB-Eigenschaft, bei Befehlen, die die Floppy-Laufwerke ansprechen, die Gerätenummer wegfallen lassen zu können, muss sie bei SCRLD (genau wie bei OPEN) ausdrücklich mit angegeben werden. Intern greift TSB jedoch immer auf die mit USE eingestellte Diskette zu. Ist deren Laufwerk nicht vorhanden, produziert dieser Zugriff einen Floppy-Error.
  • Ein Bandlaufwerk wird mit USE 1 unterstützt, wenn man unmittelbar vor dem LOAD-Befehl in den Speicherstellen $B2 und $B3 den Zeiger $033C auf den Kassettenpuffer, den TSB intern für andere Zwecke verwendet, rekonstruiert. Ein Ladebefehl für ein Programm von Band würde also USE 1: POKE $B2,$3C: POKE $B3,3: LOAD Return  lauten.
  • Der Befehl wird auch dann ausgeführt (allerdings nicht mit dem gewünschten Ergebnis), wenn die angegebene Datei auf der Diskette nicht gefunden wurde. Um dies anzuzeigen, muss man den Fehlerkanal auslesen. Siehe dazu die Beispiele.

Erweiterte Nutzung[Bearbeiten | Quelltext bearbeiten]

Die beiden zusätzlichen (ab TSB v2.20515 verfügbaren) Befehle

erweitern die Möglichkeiten von SCRLD (TSB). Sie funktionieren durch Selbstmodifikation der SCRLD/SCRSV-Routine und machen damit die bisher nötigen POKEs überflüssig.

Mit SCRLD DEF kann man Modifikationen mit den folgenden Wirkungen erstellen:

  • Die Anzahl der 256KB Blöcke für die Bitmap-Größe wird von 32 auf einen vorgegebenen Wert gesetzt
  • Die Anzahl der 256KB Blöcke für Video-RAM bzw. Farb-RAM wird von 4 auf einen vorgegebenen Wert gesetzt
  • Die Verarbeitung des Farb-RAMs wird unterdrückt
  • Das High-Byte der Speicheranfangsadresse vom Video-RAM wird von $04 auf einen vorgegebenen Byte-Wert gesetzt
  • Das High-Byte der Speicheranfangsadresse der Bitmap wird von $E0 auf einen vorgegebenen Byte-Wert gesetzt

Wie das im Einzelnen geht, ist bei der Beschreibung der Parameter in SCRSV-LD DEF erklärt.

Mit SCRLD RESTORE werden die Werte wieder zurückgesetzt.

Eine typische erweiterte Nutzung hat dann die folgende Form:

SCRLD DEF hi,bl,m,sa
SCRLD 2,8,2,"dateiname"
SCRSV RESTORE
  • Es ist wie bisher möglich, eine Grafik zu laden, die mit SCRSV in zwei Dateien - einer mit der Bitmap, einer anderen mit den Farben - gespeichert wurde. Siehe dazu das Beispiel Grafik laden aus zwei Dateien.
  • Ein Textbildschirm kann auch in den alternativen Bildschirmspeicher bei $CC00, der nach MEM aktiv ist, geladen werden: SCRLD DEF $CC,4,0,2: SCRLD 2,8,2,"dateiname": SCRLD RESTORE.
  • Wenn man in SCRLD DEF mit dem Modus 1 die Verarbeitung des Farbbereichs 1 (Farb-RAM) unterdrückt, kann man ein Bild im Format von Hi-Eddi+ laden. Siehe dazu das Beispiel Hi-Eddi+ Grafik in TSB laden.
  • Mit Hilfe von SCRLD DEF ist es möglich, einen Speicherbereich von wählbarer Grö0e (in 256-Byte-Blöcken) - z.B. ein Zeichensatz - an einen beliebigen frei zugänglichen Speicherplatz zu laden. Ein 2K großer Zeichensatz wird an die Adresse $3000 geladen mit SCRLD DEF $30,8,1,3: SCRLD 3,8,3,"zeichensatz": SCRLD RESTORE.

Beispiele[Bearbeiten | Quelltext bearbeiten]

Textbildschirm laden[Bearbeiten | Quelltext bearbeiten]

100 PRINT CHR$(147)
110 SCRLD 2,8,2,"TRICOLOR-TSB.SRC,P,R"
120 FEHLER
130 IF FF>0 THEN PRINT FF;FB$:END
140 WAIT 198,1:END
150 PROC FEHLER
160 OPEN 1,8,15
170 INPUT#1,FF,FB$,SP,SE
180 CLOSE 1
190 END PROC

Lädt einen mit SCRSV (TSB) gespeicherten Textbildschirm. Eine Unterroutine zum Auslesen des Fehlerkanals ist eingefügt.

Bitmap laden[Bearbeiten | Quelltext bearbeiten]

100 HIRES 15,0
110 SCRLD 3,8,3,"BITMAP3,P,R"
120 FEHLER
130 IF FF>0 THEN NRM:PRINT FF;FB$:END
140 COLOUR 12,12: WAIT 198,1
145 COLOUR 11,12: NRM: END
150 PROC FEHLER
160 OPEN 1,8,15
170 INPUT#1,FF,FB$,SP,SE
180 CLOSE 1
190 END PROC

Grafik mit Farben laden[Bearbeiten | Quelltext bearbeiten]

100 HIRES 15,0
110 SCRLD 3,8,5,"HIRES5,P,R"
120 FEHLER
130 IF FF>0 THEN NRM:PRINT FF;FB$:END
140 COLOUR 12,12: WAIT 198,1
145 COLOUR 11,12: NRM: END
150 PROC FEHLER
160 OPEN 1,8,15
170 INPUT#1,FF,FB$,SP,SE
180 CLOSE 1
190 END PROC

Grafik laden aus zwei Dateien[Bearbeiten | Quelltext bearbeiten]

1550 PROC TSBLOAD
1560 CSET 2: MULTI ON
1565 SCRLD 1,I8,3,"IMAGE *"
1570 SCRLD DEF $C0,4,0,2 
1575 SCRLD 1,I8,2,"IMAGETOOLS"
1580 SCRLD RESTORE
1585 COLOUR BG
1590 END PROC

Lädt eine mit SCRSV (TSB) gespeicherte Multicolor-Grafik samt Farben unter dem angegebenen Namen in zwei Dateien von Diskette. Die Variable BG enthält die Nummer der Hintergrundfarbe aus dem Dateinamen "IMAGE"+STR$(BG).

Hi-Eddi+ Grafik in TSB laden[Bearbeiten | Quelltext bearbeiten]

100 HIRES 15,0
110 SCRLD DEF $04,4,1,2: REM MODUS 1 = KEIN FARB-RAM
120 SCRLD 3,8,5,"HIRES5,P,R"
130 SCRLD RESTORE
135 POKE $FFFA,$18:POKE $FFFB,$81: REM NMI RESTORE
140 FEHLER
150 IF FF>0 THEN NRM:PRINT FF;FB$:END
160 COLOUR12,12:WAIT 198,1
170 COLOUR11,12:NRM:END
180 PROC FEHLER
190 OPEN 1,8,15
200 INPUT#1,FF,FB$,SP,SE
210 CLOSE 1
220 END PROC

Simons' Basic Bildschirm in TSB[Bearbeiten | Quelltext bearbeiten]

10 IF A=0 THEN A=1:LOAD "SCRLD-SB",8,1
20 PRINT CHR$(147)
30 OPEN 2,8,2,"TRICOLOR.SCR,S,R"
40 SYS $C000
50 WAIT 198,1
60 SCRSV 2,8,2,"TRICOLOR-TSB.SCR,P,W"

Lädt mit Hilfe der Maschinenspracheroutine "SCRLD-SB" einen mit Simons-Basic-SCRSV gespeicherten Textschirm und speichert ihn im TSB-Format.

ACME-Quellcode von SCRLD-SB:

;SCRLD-SB in TSB    
   !ct pet
   !to "scrld-sb.prg", cbm
   *= $c000
;OPEN 2,8,2,"filename,s,r" muss vorher ausgeführt sein
   ldx   $b8               
   jsr $ffc6               
   ldx #00                
loop
   jsr $ffcf               
   sta $0400,x             
   jsr $ffcf               
   sta $d800,x             
   jsr $ffcf               
   sta $04fa,x             
   jsr $ffcf               
   sta $d8fa,x             
   jsr $ffcf               
   sta $05f4,x             
   jsr $ffcf               
   sta $d9f4,x             
   jsr $ffcf               
   sta $06ee,x             
   jsr $ffcf               
   sta $daee,x             
   inx                    
   cpx #$fa                
   bne loop               
   jsr $ffcc               
   lda   $b8               
   jsr $ffc3               
   rts