Hallo Besucher, der Thread wurde 3,7k mal aufgerufen und enthält 13 Antworten

letzter Beitrag von BlondMammuth am

In BASIC Files zwischen Kassetten und Floppy kopieren

  • Ich finde ein paar Programme, die bequem sämtliche Files im Turbo-Tape-Format auf Diskette kopieren. Ich finde auch Programme, die das langsame Format im Einzelfall kopieren können. Was ich nicht finde, ist ein Programm, das bequem sämtliche langsamen Programme von Kassette liest und automatisch gleichnamig auf die Floppy speichert.


    Ich habe mir daraufhin gedacht, dass ich so eines doch selber schreiben könnte. Mittlerweile habe ich die Manuals sowie Data Becker-Bücher zu Datasette und Floppy durchgelesen, finde aber meine Frage nicht beantwortet:


    Ist es möglich, Programme in Basic byte-weise von Kassette zu lesen und in ein offenes PRG-File auf Floppy zu schreiben?


    Im Grunde müsste es ganz einfach sein: Ich öffne das nächste File, egal, was es ist, hole mir aus dem Kassettenpuffer den Namen, öffne ein PRG-File auf Floppy, und dann folgt eine Schleife von get#T,c$, print#D,c$; so lange bis das File übertragen ist.


    Mir ist schon klar, dass die Methode nicht überaus schnell wäre. Das ist mir auch egal. Der Ceh kann da hinten von mir aus stundenlang an einer Kassette kopieren. Ich weiß auch, dass das Programm zweimal hintereinander auf der Kassette steht. Er könnte also einmal lesen, dann verifizieren. Wäre mir alles recht.


    Aber ich habe keine Ahnung, ob das aus BASIC heraus überhaupt geht. Kennt sich jemand von euch so weit aus, um mir da gleich ja oder nein sagen zu können, bzw. kann mir jemand eine Quelle nennen, in der das beschrieben ist?


    Danke im Voraus!

  • Ich habe das neulich auch gemacht. Mit dem Action Replay Modul ging das ohne Probleme. Unterstützt werden Nova-Load und normal (langsam) gespeicherte Programme.


    Für Turbo Tape nimm am besten Spectacular Copy: http://csdb.dk/release/download.php?id=179032

  • Ich würde gerne bei Gelegenheit mal den umgekehrten Weg gehen.
    Ein paar Singlefiler mit Turbo Tape auf Datasette schreiben.
    Hörtsich albern an aber das habe ich noch nie gemacht.
    Wie gehtman da vor ?
    Turbo Tape starten,PRG von Diskette laden und mit <-S"Filename" speichern ?

  • Vielen Dank für die Antwort! Ich muss dazu sagen, dass ich Spectacular Copy schon habe, und das eben leider nur das Turbo-Format unterstützt. Hätten die auch das langsame Format eingebaut, wäre es genau das gewesen, was ich heute bräuchte, um eben alles zu archivieren, was bei mir noch lesbar ist.


    Das kann ich aber damit nicht. Jetzt hat mich aber schon der Virus gepackt, und ich möchte dieses vermeintlich kleine Problem zu Fuß lösen: Ich versuche grade rauszufinden, ob auf der 1531 und 1541 unter Basic nicht genau dasselbe möglich ist wie in jedem modernen Betriebssystem: Ein File zum Lesen zu öffnen, ein anderes zum Schreiben, und Byte für Byte das eine in das andere rüber zu schaufeln.


    Bis jetzt weiß ich es nicht. Ich versuche im großen Floppy-Buch Anhaltspunkte dafür zu finden, ob man ein PRG-File einfach öffnen und Bytes hineinschaufeln kann. Von Datasette zu lesen will ich natürlich ganz genauso, da habe ich allerdings ein besseres Gefühl. Wissen tue ich beides noch nicht. In Assembler geht das natürlich, aber in Basic?

  • Ich würde gerne bei Gelegenheit mal den umgekehrten Weg gehen.
    Ein paar Singlefiler mit Turbo Tape auf Datasette schreiben.
    Hörtsich albern an aber das habe ich noch nie gemacht.
    Wie gehtman da vor ?
    Turbo Tape starten,PRG von Diskette laden und mit <-S"Filename" speichern ?

    Ich hab dazu grade vor ein paar Tagen zwei Disk-Images runtergeladen, da könnte was drauf sein - aber ich weiß nicht mehr genau, von wo. Aber ich schicks dir im Anhang gleich mit. Wenn du den Namen im Netz suchst, kriegst du sicher die Originalseite raus, und findest vielleicht auch die 1. davon.

  • Giantcopy müsste beides können. D.h. Disc2Tape und Tape2Disc.
    http://csdb.dk/release/download.php?id=62132

    He danke! Ich werd das gleich einmal ausprobieren.


    Update: In Vice funktioniert es perfekt! Jetzt hol ich es mir aufs echte System. Danke noch einmal!

  • Ich versuche grade rauszufinden, ob auf der 1531 und 1541 unter Basic nicht genau dasselbe möglich ist wie in jedem modernen Betriebssystem: Ein File zum Lesen zu öffnen, ein anderes zum Schreiben, und Byte für Byte das eine in das andere rüber zu schaufeln.

    Ja, kann man. Allerdings geht das bei der Datasette nur mit Dateien, die auch passend dafür geschrieben worden sind und nicht mit beliebigen Programmdateien - die müssen an einem Stück gelesen werden, weil es bei denen keine Pausen im gespeicherten Signal gibt, während denen man den Motor ohne Datenverlust anhalten könnte.

  • weil es bei denen keine Pausen im gespeicherten Signal gibt

    In der originalen Tape-Routine passiert mit den gelesenen Daten ja nicht viel:


    Code
    1. BF51C 91 AE STA ($AE),Y ;load byte to memory
    2. BF51E E6 AE INC $AE ;bump load address
    3. D0 02 BNE $F524
    4. E6 AF INC $AF


    im Gegensatz zur PRINT# bzw. der seriellen IEC-Schreibroutine. Die Tape-Routine ist ja schon relativ flexibel auf Gleichlaufschwankungen/Geschwindigkeit. Aber wenn man's übertreibt, komm die Tape-Routine sicher schnell aus dem Tritt. Wär aber mal interessant, ab wann. Ich glaub, ich teste das mal.

  • Ich würde gerne bei Gelegenheit mal den umgekehrten Weg gehen.
    Ein paar Singlefiler mit Turbo Tape auf Datasette schreiben.
    Hörtsich albern an aber das habe ich noch nie gemacht.
    Wie gehtman da vor ?
    Turbo Tape starten,PRG von Diskette laden und mit <-S"Filename" speichern ?

    Keine Ahnung, ob es mittlerweile ein besseres Programm dafür gibt? Damals wurde das ganz komfortabel >Hiermit< gemacht :winke:

  • Ja, kann man. Allerdings geht das bei der Datasette nur mit Dateien, die auch passend dafür geschrieben worden sind und nicht mit beliebigen Programmdateien - die müssen an einem Stück gelesen werden, weil es bei denen keine Pausen im gespeicherten Signal gibt, während denen man den Motor ohne Datenverlust anhalten könnte.

    Genau das ist der Punkt.
    Das Problem ist auch grundsätzlich der Tape-Header und das damit verbundene Tape-Format der aufgezeichneten Blöcke: SAVE/LOAD verwendet einen anderen Typ (1/3) als OPEN (5). Eine mit SAVE abgespeicherte Datei wird von OPEN für ein byte-weises Lesen gar nicht als passend erkannt.
    Bei SAVE hat man die Blöcke HEADER HEADER-KOPIE DATEN DATEN-KOPIE (also 4 Blöcke), wobei die Datenblocklänge im 16-Bit-Bereich liegt.
    Bei OPEN werden stets nur 191-Byte-Blöcke (Tape buffer) abgelegt in einer Abfolge von HEADER HEADER-KOPIE 191-BLOCK 191-BLOCK-KOPIE.


    D.h. man müsste das per SAVE gespeicherte mit LOAD (ev. an eine passende Adresse) laden, ohne per Autostart oder sonstigen Überschreibungen die Kontrolle zu verlieren und dann diesen "Puffer" auf Disk schreiben (wenn da die Daten unter dem Basic-ROM liegen,
    muss man das ev. abteilig machen).

  • Zitat von BlondMammuth

    Was ich nicht finde, ist ein Programm, das bequem sämtliche langsamen Programme von Kassette liest und automatisch gleichnamig auf die Floppy speichert.

    Probier's mal hiermit:

    Code
    1. 1 SYS57812"",1,1:POKE780,0:SYS65493:FORT=15TO0STEP-1
    2. 2 A=PEEK(833+T):IFN$<>""ORA<>32THENN$=CHR$(A)+N$
    3. 3 NEXT:PRINTN$:SYS57812N$,8:POKE193,PEEK(829):POKE194,PEEK(830)
    4. 4 POKE780,193:POKE781,PEEK(831):POKE782,PEEK(832):SYS65496:RUN

    Vor der Eingabe mußt Du den Bereich für BASIC-Programme nach $C000..$CFFF verlagern. Das geht ganz fix mit:

    Code
    1. POKE44,192:POKE56,208:POKE49152,0:NEW
  • Probier's mal hiermit:

    Code
    1. 1 SYS57812"",1,1:POKE780,0:SYS65493:FORT=15TO0STEP-1
    2. 2 A=PEEK(833+T):IFN$<>""ORA<>32THENN$=CHR$(A)+N$
    3. 3 NEXT:PRINTN$:SYS57812N$,8:POKE193,PEEK(829):POKE194,PEEK(830)
    4. 4 POKE780,193:POKE781,PEEK(831):POKE782,PEEK(832):SYS65496:RUN

    Vor der Eingabe mußt Du den Bereich für BASIC-Programme nach $C000..$CFFF verlagern. Das geht ganz fix mit:

    Code
    1. POKE44,192:POKE56,208:POKE49152,0:NEW

    Das sieht grenzgenial aus! Danke! :-)