Replies: 12 comments 2 replies
-
Danke für die Info. Ich werde die Adresssen gleich korrigieren. Für den Bootloader werde ich SD_RD_LBLK = $F462 und SD_WR_LBLK = $F495 benutzen, um den Code direkt an Ort und Stelle zu beamen. Dietrich |
Beta Was this translation helpful? Give feedback.
-
Noch eine Frage: Dietrich |
Beta Was this translation helpful? Give feedback.
-
Hallo Dietrich, in der Zero Page liegen die SD-Karten Parameter Bytes SD_PB3..SD_PB0 an $DF..$E2. Wenn du einen 32 Bit FAT LBA Pointer einlesen möchtest, der üblicherweise im Format LSB..MSB vorliegt, solltest du aber die die Routine LOAD_LBA an Adresse $F462 nehmen. Bsp: LDX #LOW LBA_POINTER danach kannst du mit SD_RD_LBLK_BUF, bzw. SD_WR_LBLK_BUF den gewünschten Block an $600 lesen oder schreiben. |
Beta Was this translation helpful? Give feedback.
-
Ok, alles klar. $EE ist eine Komplikation, da dieses Byte im BDOS verwendet wird. Ich habe das im BIOS gepuffert. Dietrich |
Beta Was this translation helpful? Give feedback.
-
Hallo Dietrich, |
Beta Was this translation helpful? Give feedback.
-
Hallo Jörg, das finde ich natürlich extrem nett, dass du $EE freimachst. Leider ist $1A nur unwesentlich besser. Das ZeroPage- Konzept von CPM-65 sieht vor, dass alle Adressen ab $E0 für das Betriebssystem reserviert sind und alles darunter den Anwendungsprogrammen zur Verfügung steht. Meine Programme fangen dann bei $00 an und arbeiten sich nach oben. Das Speicher-gierigste Programm ist BASIC - es braucht $00 - $7F. Bei den Speicheradressen unterhalb $7F muss ich dann also bei jedem einzelnen Programm prüfen, ob eine Kollision vorliegt. Bei meinem Apple II Port habe ich das kurzerhand so gelöst, dass ich vor jedem Aufruf einer Apple-ROM-Funktion die betroffenen Speicherzellen in einen Puffer swappe und die Werte fürs ROM wiederherstelle. Nach Rückkehr aus dem ROM wird zurückgeswapt - nicht sehr elegant, funktioniert aber. Um zu erreichen, dass die Zeropage möglichst geschont wird, habe ich einen Haufen Systemvariable, die im BIOS gebraucht werden, in ein Scratch-RAM verlegt. Bei mir ist das der 128 Byte-Block des 6532, wie bei dir auch. Weitere lokale Variable sind im Bereich des Codes der Module BIOS, BDOS und CCP untergebracht. Das geht bei ROM-Code natürlich nicht. Ich schlage vor, für solche Daten, z.B. die DEVLIST, Speicher unterhalb des ROMs oder in $200 - $7FF zu reservieren. 1 Page plus Platz für die BLOCK Buffer sollte auch langfristig genügen. Du wirst den für die FAT-Treiber brauchen. Ich hoffe, ich bringe da bei dir nicht alles durcheinander. Aus Erfahrung plädiere ich aber dafür, die Speicherorganisation früh zu regeln und dann einzufrieren. Dann müssen nicht ständig alle möglichen Programme angepasst werden. Aus demselben Grund benutze ich in BIOS , BDOS und CCP zentrale Einsprungpunkte an fixen Adressen. Bei meinem Apple II Port musste ich nur den BOOTcode und das BIOS neu schreiben. Alle anderen Programme einschließlich BDOS und CCP wurden lediglich für die neuen Startadressen aufgrund der geänderten Memory Map neu assembliert. Ausnahme: DEBUG wegen der Nutzung des BRK Befehls und der notwendigen Anpassung an den IRQ-Mechanismus des Apple II. Das alles ist natürlich deine Entscheidung. Was immer du tust - ich werde mich darauf anpassen und nicht nörgeln - versprochen. So und nun brauche ich etwas Zeit, deinen neuen Code zu studieren. Wahrscheinlich muß ich dann doch meinen SD-Card Adapter in Betrieb nehmen, um auf meiner Seite mehr testen zu können. Dein Code sollte da sehr von Nutzen sein. Gruß Dietrich |
Beta Was this translation helpful? Give feedback.
-
Hallo Dietrich, Im RIOT RAM ist bei mir alles belegt und in Stahlbeton gegossen. "Normale" Speicherbereiche zwischen $200..$7FF wollte ich so weit wie möglich für das DOS aufheben und werden zumindest zum Booten auch schon benutzt. $0600..$7FF ist der Standard Block Buffer. Ich werde mich jetzt auch etwas intensiver mit deinem Code beschäftigen und dann mal ausprobieren, wie weit wir schon auf der realen Maschine mit dem Booten kommen. |
Beta Was this translation helpful? Give feedback.
-
Hallo Jörg, Gruß Dietrich ... der diese Woche wenig Zeit haben wird ;-) |
Beta Was this translation helpful? Give feedback.
-
Ich habe jetzt meinen SD Kartenadapter in Betrieb genommen. Da ich deine Zusatzlogik für die SPI-Schnittstelle nicht habe, mußte ich SPI am Port B meines VIA per Bitbanging realisieren. Geht gut mit etwa 60 kHz. Aus deinen ROM-Routinen und einem Diskeditor von CPM-65 (DUTIL.COM) habe ich dann einen Sektoreditor für die SD-Karte gebastelt. Ich kann nun jeden Sektor gezielt lesen. Ob Schreiben auch geht, muß ich noch testen. Dietrich |
Beta Was this translation helpful? Give feedback.
-
Ok, Schreiben geht jetzt auch. War ein Stück Arbeit, weil im Code ein paar Fehler waren - die meisten auf meiner Seite.
Dietrich |
Beta Was this translation helpful? Give feedback.
-
Ich habe jetzt eine Testversion eines Bootloaders fertig, der CPM-65 von einem Disk Image in den Speicher lesen kann, sofern die Position von Block 0 des Images bekannt ist. Endlich Licht am Ende des Tunnels Dietrich |
Beta Was this translation helpful? Give feedback.
-
So, ich kann nun von SD booten und die Speicherbelegung ist schon JC-II konform - hoffe ich... Dietrich |
Beta Was this translation helpful? Give feedback.
-
Du hast in deinem BIOS Code die Routinen SD_RD_LBLK_BUF und SD_WR_LBLK_BUF zum Lesen und Schreiben genommen. Die Adressen hierzu $F458 bzw. $F48B stimmen leider nicht (mehr).
SD_RD_LBLK_BUF = $F45F
SD_WR_LBLK_BUF = $F492
Allerdings lesen, bzw. schreiben diese beiden Routinen vom/zum Standard Buffer an Adresse $0600.
Besser ist es, wenn du die Routinen
SD_RD_LBLK = $F462
und
SD_WR_LBLK = $F495
nimmst. Hier kannst du zuvor über die beiden Zero Page Variablen BLKBUFL, BLKBUFH an $DC, $DD den Ziel Buffer Vektor angeben und somit z.B. gleich in die Adresse $2000 schreiben. Nach dem Schreiben/Lesen eines 512 Bytes Sektors steht dann in BLKBUFL, BLKBUFH gleich der Pointer auf die um 512 Byte folgende Adresse also im Beispiel oben bei $2400. Somit kannst du kontinuierlich den Speicher lesen und schreiben.
Beta Was this translation helpful? Give feedback.
All reactions