Beim TV-Werbung überbrücken noch ein Buch zum Thema gefunden.
http://www.cpcwiki.eu/index.ph…M_2.2_auf_dem_CPC_464/664
bzw.
Du bist in Begriff, Forum64 zu verlassen, um auf die folgende Adresse weitergeleitet zu werden:
Bitte beachte, dass wir für den Inhalt der Zielseite nicht verantwortlich sind und unsere Datenschutzbestimmungen dort keine Anwendung finden.
letzter Beitrag von oobdoo am
Beim TV-Werbung überbrücken noch ein Buch zum Thema gefunden.
http://www.cpcwiki.eu/index.ph…M_2.2_auf_dem_CPC_464/664
bzw.
Naja, ich hab auch erst rätseln müssen.
Bei den Systemdisketten muss man zwei Tracks abziehen.
Diese Lösung klappt so zumindest bei mir.
Bin allerdings auch noch ständig was am optimieren.
Ich hab heute angefangen den ganzen Code für das DSK von Grund auf neu zu schreiben.
Ich hoffe dadurch einen besseren Überblick zu bekommen, um damit auch die Bugs zu finden
die bis zuletzt im alten Code vorhanden waren.
Ich hab heute angefangen den ganzen Code für das DSK von Grund auf neu zu schreiben.
Ich hoffe dadurch einen besseren Überblick zu bekommen, um damit auch die Bugs zu finden
die bis zuletzt im alten Code vorhanden waren.
Ja, manchmal kommt man nicht drum rum alles neu zu machen um einen besseren Überblick zu bekommen
Ja, manchmal kommt man nicht drum rum alles neu zu machen um einen besseren Überblick zu bekommen
Zum Glück muss ich nicht alles neu schreiben, sondern kann mit Copy/Paste das eine oder andere rüberholen.
Hauptsächlich will die den Aufbau der Klassen etwas anders und hoffentlich besser gestalten. OOP läßt grüßen.
Nachdem ist feststellen musste das mein letzter Beitrag bei "Heute so gecodet" doch nicht funktioniert bin ich weiter auf der Suche nach einer Lösung für das Denkproblem, Programmierproblem oder Matheproblem.
Seite 135 im Buch CPC-464_664 Praxis II - Datenverwaltung (Hüthig)
spur = int((blocknummer*2+18)/9)
sektor = (blocknummer*2+18) mod 9
Seite 147
spur = int(blocknummer/9)
sektor = blocknummer mod 9
Welche Formel stimmt denn nun?
Ich geb mir noch bis zum Ende des Monats Zeit das DSK vernünftig auszulesen.
Damit nicht das passiert...
...
Wenn ich das dann immer noch nicht auf die Reihe bekommen habe, dann fliegt der ganze DSK Kram wieder raus aus dem Disassembler.
Wenns nicht mit formel geht, mach ein array mit der startpos des blocks, beginnend beim 1. Sektor auf spur 1 in array element 0 (=block nr 0).
Und dann nimmst du eine leere disk mit einem textfile drauf, dessen text du kennst und liest das einfach aus.
Das klappt schon.
Also z.b.
Structure blockpos
Dim track as byte
Dim sektor as byte
End structure
Public block(anz blocks) as blockpos
Das kannst du ja beim start via for...next bequem füllen. Scheiss auf Formel
Sec=1:spur=1
For n = 1 to xxx
Block(n).track=spur
Block(n).sektor=sec
Sec=sec+2:if sec>9 then sec=sec-9:spur=spur+1
Next
So in etwa ohne groß zu überlegen jetzt.
spur = int((blocknummer*2+18)/9)
sektor = (blocknummer*2+18) mod 9
Also bei mir hat diese Formel funktioniert.
Wobei man bei einer SystemDisk noch 2 vom Track/Spur Count subtrahieren muss.
Ehrlich gesagt habe ich aber auch nicht so viele verschiedene DSK's getestet. Bin halt nicht so der CPC'ler.
Eben entdeckt das ich das so ähnlich weiter oben im Thread schonmal beantwortet hatte.
So in etwa ohne groß zu überlegen jetzt.
Hab ich jetzt nicht verstanden. Aber trotzdem Danke für Deine Hilfe.
Eben entdeckt das ich das so ähnlich weiter oben im Thread schonmal beantwortet hatte.
Ja und die Formel hat bei mir teilweise auch funktioniert. Aber eben nicht über die ganze Disk.
Und heute war mir halt noch die andere Formel aufgefallen. Beide berechnen Track/Sektor und
sehen total anders aus, was ich halt überhaupt nicht verstehen kann.
Verschiedene DSK wollte ich erst später ausprobieren. Ich habe trotzdem schon eine CP/M DSK
gefunden, wo mein Programm aussteigt. 464DDI1_1.DSK Die habe ich auf CPC Wiki runter
geladen.
Einziger Lichtblick ist momentan das Ermitteln vom TrackInformationsBlock und vom SectorInfo.
Mit einer anderen CP/M Disk und einen Hexeditor konnte ich die einzelnen Werte stichprobenartig
prüfen.
Naja, mein Gedanke war, statt einer Formel nimmt man eine Tabelle. So hat man den Start aller Blocks im Speicher und muss nur den Sektor um eins erhöhen für die 2. Hälfte vom Block.
In BASIC könnte man z.b.
Dim Spur(180), Sektor (180) schreiben und hätte so für 180 Blocks jeweils Spur und Sektor des Beginns des Blocks:
BlockNr = 100
Trk= Spur(BlockNr)
Sec=Sektor(BlockNr)
Trk ist also die Spur des ersten Sektors vin Block 100, Sec der Sektor.
Soweit verständlich?
Die Tabelle kannst Du je nach Format vorher via For...Next füllen.
Also zum Beispiel:
10 sp=0
20 se=1
30 for blk=0 to 180
40 spur(blk)=sp
50 sektor(blk)=se+&c0
60 se=se+2
70 if se >9 then sp=sp+1:se=se-9
80 next
Dann hast du für 180 blocks die start Position für Data Format, also 40 spuren, sektor C1 bis C9 - oder wie das Format ist...
Oder du füllst die Tabelle gleich mit den Offsets der Datei, also statt Spur und Sektor den Zeiger auf die jeweiligen Daten.
Irgendwie so (ist 10 Jahre her) konnte ich mal am CPC auf meiner Platte ein DSK als Laufwerk einbinden, zumindest Read Only. Und wenn das in ASM bequem geht, schafft man das in VB / .net locker
Ich glaube ich weiß was Du meinst. Und ich hatte sowas ähnliches auch schonmal versucht, das war vor dem Neustart der DSK Programmierung.
Aktuell weiß ich nicht welches der drei Möglichkeiten zutrifft, ein Denkproblem, Programmierproblem oder Matheproblem oder alles gleichzeitig.
Mal schauen wie weit ich heute Nacht noch kommen werde...
Ich könnte mir vorstellen das es bei Dir aber noch an was anderem liegt.
Der Punkt ist nämlich das im SeltorInfoBlock die Reihenfolge einmal 1,2,3,4,5,6,7,8,9 anderseits aber auch mal 1,6,2,7,3,8,4,9,5 ist.
Damit hatte ich auch mal Probleme.
Also am besten, du machst erst mal n nickerchen und gehst morgen mit einer tasse kaffee frisch ans Werk <was macht der eigentlich..
Ich könnte mir vorstellen das es bei Dir aber noch an was anderem liegt.
Gut möglich.
Hast Du Dir das DSK aus Beschreibung des CPC - DSK DiskImage Formats gesucht mal angeschaut?
ManageDSK kann das lesen, zeigt aber zwei Einträge in roter Farbe an (siehe Bild).
Mein Tool kommt da ins Stolpern. Deins auch?
Also am besten, du machst erst mal n nickerchen und gehst morgen mit einer tasse kaffee frisch ans Werk <was macht der eigentlich..
Der denkt mit, hat aber noch nicht zur Lösung beigetragen.
Hm, mein Tool zeigt die beiden Datein gar nicht erst an.
Kann aber auch daran liegen das ich nur files auf userebene 0 anzeige.
CPC DiskXp allerdings auch nicht.
Die files die ich sehen kann,kann ich aber einwandfrei exportieren.
Ich habe meinen Code eben mal angepasst.
Das Verzeichnis listet nun alle Files sauber auf.
Lesen kann ich LOGO40.COM aber nur bedingt. Das exportierte Ergebnis ist zu klein.
Nachtrag, ich weiss jetzt warum ich die Datei nicht sauber lesen kann.
Diese ist scheinbar eine ASCII Datei. Bei ASCII Files ist das Dateiende bei byte 0x1A.
Das ist aber keine reine ASCII Datei. Sie beginnt nur wie eine.
Nachtrag2: Nochmal nachgeschaut. Bei den beiden Datein steht als UserFlag 0xE5 drin.
Das bedeutet das die Dateien gelöscht sind.