Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Gerhard Stoll Newsgroups: de.comp.sys.atari Subject: PC Carddrive HPC301 am Milan (war: Massenspeicher und GEMDOS) Date: Mon, 16 Oct 2017 19:10:31 +0200 Lines: 55 Message-ID: References: <1mt4fd9.s0v28g1hnsmxgN%usenet@hoffart.de> <1mtepqb.1nf9oe5lsy7ujN%usenet@hoffart.de> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 8bit X-Trace: individual.net Al/2kIehNaAicF5XwqZ8GAauuEyPqDFy3TyVPY1pNi+Y3HNQ2i Cancel-Lock: sha1:zb8qVh1i7mvwEpnH0UdIQOD0f2g= User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 In-Reply-To: Xref: csiph.com de.comp.sys.atari:779 Am 13.09.16 um 20:27 schrieb Gerhard Stoll: > Das PC Carddrive HPC301. Ist zwar schon ein paar Tage her aber trotzdem zur Rückmeldung. Ich hatte mich entschlossen keinen Gerätetreiber zuschreiben. Einmal habe ich trotz dem Beispiel aus Scheibenkleister II da nix zustande gebracht, zum anderem sind die Daten einer MemoryCard doch ziemlich unterschiedlich das ich denke das das TOS damit nicht zurecht kommt. Die Karten haben grundsätzlich eine FAT und einen Cluster pro Sektor. Ein Sektor kann 128, 256 oder 512 Bytes besitzen. Da ich eine Lib gefunden habe welche damit zurecht kommt habe ich diese genommen. Für den Milan gibt das Ergebins als Programm hier: Schreiben geht auch, allerdings nur eine Datei auf einmal und nur ins Wurzelverzeichnis. Zur Technik des PC Carddrive HPC301: Da ich keine Doku finden konnte habe ich den MS-DOS Treiber disassembliert. Dabei hat sich heraus gestellt, das die Karte vier Adressen im ISA Bus belegt. Adr1 ist zum lesen und schreiben von Bytes Adr2 und Adr3 zum setzen der Adresse auf der Speicherkarte. Adr4 ist eine Status- und Steuerregister Interessant bei der Sache ist das man an Adr2 und Adr3 nur einmal die Adresse angeben muss. Greift man mit Adr1 auf ein Byte zu wird auf der Karte weitergezählt und man bekommt mit dem nächsten Zugriff das nächste Byte. Das Lesen eine Sektors sieht dann in meinem Programm so aus: --------------- cut ------------------ SetzeSektor ( sector ); /* Setzen der Adresse */ for ( i = 0; i < BPB.recsiz; i++) { *Buf = inb ( Adr1 ); Buf++; } --------------- cut ------------------ Angeregt durch einen Nutzer habe ich mal probiert ob es auch mit der EtherNEC funkrioniert, was der Fall ist. Zumindest an meinem MegaST kann ich das Inhaltsverzeichnis auslesen und den Status des Schreibschutzschalter ermitteln. Letztes bedeutet das auch das Schreiben geht. Das obige Programm läuft nur auf dem Milan. Gerhard