Add new attachment

Only authorized users are allowed to upload new attachments.

List of attachments

Kind Attachment Name Size Version Date Modified Author Change note
png
00.png 4.2 kB 1 29-Jul-2017 00:28 Roland B. Wassenberg 00.png
png
01.png 4.2 kB 1 29-Jul-2017 00:29 Roland B. Wassenberg 01.png
png
02.png 4.9 kB 1 29-Jul-2017 00:29 Roland B. Wassenberg 02.png

This page (revision-14) was last changed on 04-Aug-2017 01:55 by Roland B. Wassenberg  

This page was created on 29-Jul-2017 00:15 by Roland B. Wassenberg

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Difference between version and

At line 5 added 88 lines
OSS Module - 043M, M091 ...
===========================
(Dieser Artikel ist möglich dank vieler ausführlicher Informationen von Hias)
(Falls hier jemand Fehler findet - ich habe kein Problem mit Korrekturen.)
Hallˆle,
auf der Fujiama 2016 und bei einigen anderen Gelegenheiten muflte ich mich mit dem Thema besch‰ftigen. Da ich es nicht mag, im Atari st‰ndig irgendwelche Module umzustecken steckt bei mir nur eines, und das heiflt Freezer 2011. Wenn ich nun ein Modul wie ACTION! oder Mac/65 brauche, lade ich die Daten einfach in den Freeezer. Okay, stabile Originale von ACTION! und Mac/65 hab ich fest im Freezer drin, aber ab und an was ausprobieren, ‰ndern oder man bekommt die Daten von einer angeblich besseren oder neueren Version und schon geht es los.
Das Problem ist, oft laufen die einfach gar nicht und andere schwˆren Stein und Bein, dafl das entsprechende Modul funktioniert.
Ursache ist hier oft der Standard, oder besser gesagt: die Standards - womit man ja eigentlich eher gar nicht von Standard reden kann. Es gibt n‰mlich verschiedene Modulversionen und die nennen sich dann M091, 043M und so weiter.
Technisch unterscheiden sich die Module in den Adressen, die f¸r die Bankumschaltung verwendet werden. F¸r die, die nichts ¸ber Bankumschaltung wissen: der Atari hat ja einen begrenzten Speicherraum von 64 KByte. Um dem Anwender davon mˆglichst viel zu lassen, haben sich die Hersteller einiger Module etwas einfallen lassen. Da der Atari ja ohnehin nur auf eine Adresse gleichzeitig zugreifen kann ist es nicht erforderlich, alles gleichzeitig f¸r den Zugriff bereit zu halten. Also hat man so ein 16K-Modul genommen und es in 4 Teile (B‰nke) unterteilt, wobei nur eine Hauptbank und jeweils einer der anderen 3 B‰nke gleichzeitig im Speicherzugriff bereit gehalten werden. Die "Neben-"b‰nke werden bei Bedarf umgeschaltet. Das nennt sich dann Bankumschaltung oder auf Neudeutsch: bankswitching. Als Adresse f¸r die Umschaltung der Bank wird $D50x verwendet.
In einem Modul sind die Daten der 4 B‰nke (es gibt mittlerweile Module (nicht von OSS) mit sehr viel mehr B‰nken) in einem Festspeicher (ROM, EPROM, FLASH) untergebracht, wobei sich die Abfolge der B‰nke unterscheiden kann. Hier erst einmal ein Beispiel, wie so ein OSS-Modul im Atari Speicher eingeblendet wird:
$B000 - $BFFF: Masterbank
$A000 - $AFFF: Bank x von y
Die Masterbank mufl immer an der Stelle $B000 - $BFFF liegen, weil das Atari Betriebssystem die Adressen $BFFA - $BFFF verwendet um zu entscheiden, wie mit dem Modul verfahren werden mufl. Die genaue Doku hierzu findet sich zum Beispiel im Atari Profibuch.
$BFFE:
$BFFD:
$BFFC:
$BFFA:
Anhand dieser Tatsache kann man auch feststellen, welche der 4 B‰nke die Masterbank ist, denn normalerweise enth‰lt nur die in den letzten 6 Byte Werte, die sinnvolle Start- und Initialisierungsadressen ergeben.
Im weiteren Verlauf betrachten wir den Inhalt eines solchen OSS-Moduls linear, so wie die Daten sich im ROM(...) befinden. Bei einem 16K-ROM geht der Adressbereich von $0000 - $3FFF.
Die 4 B‰nke liegen dann:
$0000 - $0FFF
$1000 - $1FFF
$2000 - $2FFF
$3000 - $3FFF
Gehen wir mal davon aus, das wir die Masterbank im Bereich $3000 - $3FFF gefunden haben, weil nur an den Adressen $3FFA- $3FFF sinvolle Adressen f¸r den Modulstart stehen. Dann m¸ssen zum Identifizieren der restlichen B‰nke und des Modultyps nur die jeweils letzte Adresse des jeweiligen Bankbereichs betrachtet werden. Beispiel:
$0FFF: 00
$1FFF: 04
$2FFF: 03
In Reihe gelesen ergeben die Datenbytes 043 und wenn wir jetzt noch das M von Masterbank dranh‰ngen haben wir 043M. Also handelt es sich augenscheinlich um ein Modul vom Typ 043M.
Was beuten jetzt aber noch die Werte 0,4 und 3? Hierbei handelt es sich um den letzten Wert in der Speicheradresse, die zur Bankumschaltung verwendet wird. Also bei 0 -> $D500, bei 4 -> $D504 und bei 3 -> $D503. Folglich wird bei einem M091 Modul f¸r die Schaltung der Bank 9 -> $D509 verwendet. Bitte nicht verwechseln - das sind keine Banknummern! Bei einem Modul mit 4 B‰nken gibt es ja auch keine 9te Bank.
So, jetzt mal ein bischen weg von der Theorie. Ich habe auf dem Atari mal den ROM-Inhalt eines Moduls in den Arbeitsspeicher ab Adresse $4000 eingelesen. Die 4 B‰nke gehen demzufolge bis $7FFF.
Mit dem Debugger Bug/65 schauen wir uns jetzt mal die Stellen an:
00.png
Es handelt sich also um ein Modul vom Typ M091. Demzufolge m¸flten als Adresen f¸r die Bankumschaltungen $D500, $D501 und $D509 verwendet werden. Hier die Bilder mit dem Suchergebnis:
01.png
Wie man sieht, liegen alle Fundstellen im Bereich $4000 - $4FFF. Das ist die Masterbank. Macht ja auch Sinn, denn diese Bank ist immer an, solange nicht das ganze Modul aus ist, denn das kann man ¸ber die Adresse $D508 ausschalten.
Schauen wir uns mal noch so ein oder zwei Fundstellen an. Bitte beachten, dafl hier das Disassemblieren ein Byte vor der Fundstelle anfangen mufl, damit man den eigentlichen Befehl mitbekommt:
02.png
Hier wird in allen F‰llen STA verwendet (Befehl zum Schreiben des CPU-Registers A)
Was mufl man denn nun tun, um aus einem M091 Modul ein 043M Modul zu machen, zumindest was es die Daten im ROM betrifft?
Nun, erst einmal m¸ssen die 4 B‰nke neu angeordnet werden. Als erstes kˆnnte man die Bank M in unserem Beispiel von $4000 - $4FFF nach $8000 - $8FFF verschieben. Damit ergibt sich dann f¸r den neuen Bereich $5000 - $8FFF die Bankfolge 091M. Ein Problem ist, dafl man jetzt nicht wirklich weifl, ob aus der Bank mit der Bezeichnung 9 die neue Bank 4 oder 3 werden mufl. Im Zweifelsfall hat man dann zwei Versuche nˆtig.
Hier gehen wir davon aus, dafl aus 9 -> 4 werden mufl und aus 1 -> 3. Damit stimmt in unserem Beispiel schon mal die Anordnung im ROM. Als n‰chstes m¸ssen die IDs der B‰nke korrigiert werden und zwar wie folgt:
$5FFF: 00 -> 00
$6FFF: 09 -> 04
$7FFF: 01 -> 03
Als n‰chstes m¸ssen alle Umschaltbefehle angepaflt werden. Aus allen Bytefolgen "01 D5" mufl "03 D5" werden und aus allen "09 D5" "04 D5". Dabei mufl man auch sicherstellen, dafl bei dieser Ersetzerei auch nur Befehle zur Bankumschaltung ge‰ndert werden und nicht etwa Zeichenfolgen wie "TAB invU".
Richtig schwierig kˆnnte es werden, wenn indizierte Adressierung verwedet wird, sowas wie STA $D500,X. Da mufl man in die Anpassung deutlich mehr Energie reinstecken. Gl¸cklicherweise hatte ich bislang einen solchen Fall nicht.
FloppyDoc, im Februar 2017
At line 120 added 7 lines
!!Danksagung
- Dieser Artikel ist möglich dank vieler ausführlicher Informationen von Hias
- Er ist vom [Abbuc|http://www.abbuc.de/] Magazin #128 übernommen und etwas erweitert worden
- Dank an FloppyDoc für den Artikel aus dem [Abbuc|http://www.abbuc.de/] Magazin #128 und die Idee, das mal in ausführlicher Version, verständlich und didaktisch aufzubereiten
- Dank an JAC! von AtariAge für spezifische, zusätzlich Infos zu den OSS Cartridges
- Dank an Wolfgang vom [Abbuc|http://www.abbuc.de/] für die Genehmigung der Übernahme des Artikels aus dem Magazin #128
Version Date Modified Size Author Changes ... Change note
14 04-Aug-2017 01:55 8.838 kB Roland B. Wassenberg to previous
13 02-Aug-2017 14:12 8.838 kB Peter Dell to previous | to last
12 01-Aug-2017 15:23 8.788 kB Roland B. Wassenberg to previous | to last
11 01-Aug-2017 15:12 8.655 kB Roland B. Wassenberg to previous | to last
10 31-Jul-2017 12:38 8.511 kB Roland B. Wassenberg to previous | to last
9 31-Jul-2017 12:26 8.461 kB Roland B. Wassenberg to previous | to last
8 31-Jul-2017 11:43 8.455 kB Roland B. Wassenberg to previous | to last
7 29-Jul-2017 02:43 8.427 kB Roland B. Wassenberg to previous | to last
6 29-Jul-2017 02:43 8.423 kB Roland B. Wassenberg to previous | to last
5 29-Jul-2017 02:20 8.415 kB Roland B. Wassenberg to previous | to last
4 29-Jul-2017 01:22 8.388 kB Roland B. Wassenberg to previous | to last
3 29-Jul-2017 00:41 8.475 kB Roland B. Wassenberg to previous | to last
2 29-Jul-2017 00:28 1.407 kB Roland B. Wassenberg to previous | to last
1 29-Jul-2017 00:15 0.019 kB Roland B. Wassenberg to last
« This page (revision-14) was last changed on 04-Aug-2017 01:55 by Roland B. Wassenberg  
G’day (anonymous guest) My Prefs
© 2010-2021 AtariWiki
All content in the Wiki is licensed under Creative Commons Share Alike License, unless otherwise noted.
JSPWiki v2.8.3