CP/M-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Memberlist || Home || Statistik || Kalender || Staff Willkommen Gast!
[ Unofficial CP/M Website ] [ Z80 Family Support Page ] [ Forum-Regeln ] [ Impressum/Kontakt ]

CP/M-Forum » Tips und Links » Sepia » Threadansicht

Autor Thread - Seiten: [ 1 ] -2- [ 3 ] [ 4 ] [ 5 ]
025
19.12.2012, 07:15 Uhr
hschuetz

Avatar von hschuetz

Hallo,
also... mein MC Computer ist mit Floppycontroller und CF-Card ausgestattet.
Nun habe ich eine IOE vom NKC genommen (mit ECB Adapter) und dort ein Eprom angeschlossen. Nun habe ich 2 X 8bit Ausgang (Latch) und 1X 8bit Eingang der Karte benutzt. Die Pin's für CS/ und RD sind fest angeschlossen. Somit kann ich über 2 Ports 16 bit Adressen generieren und anschließend die Daten lesen. Soweit so gut... nun habe ich BIOS CCP und BDOS aufs Eprom gebrannt und lade von dort aus dem Monitor die Daten ins RAM...soweit so gut
oder auch nicht. Zu Fuss scheint alles zu funktionieren nun bekomme ich die Epromdaten irgendwie nicht so ins Ram wie ich möchte, bzw. startet CPM nicht. Sinn der Sache ist vom Eprom booten und auf die Floppy verzichten um nur die CF -Card zu nutzen. Nun könnte ja jemand auf die Idee kommen "boote doch von der CF", wäre mir auch recht...nur traue ich mir das nicht zu, die Software dafür zu entwickeln...
@Heinrich
Die Daten kann ich im Debugger transferieren... also die Steuerung und die Schaltung sollte so laufen. Was ich allerdings nochmal checken sollte ist ob ich das Eprom nicht zu schnell auslese.... Wie gesagt ich bin nicht der Software Mensch.
@Rolf
Wie läuft das denn bei deiner SBC? CPM aus dem Monitoreprom oder aus einem Extra Eprom mit Epromfloppy?
Gruß
Hans-Werner
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
026
19.12.2012, 08:33 Uhr
m.haardt



Beim N8VEM SBC wird das EPROM vom BIOS als Laufwerk angesprochen. Das reduziert den Aufwand in der Software, dafür muss man ein Disk Image generieren und brennen.

Ich habe über die Sache nochmal nachgedacht: Du musst nicht nur den Bootloader modifizieren, sondern auch das BIOS. Ansonsten wird der Bootloader das System in den Speicher bringen, aber es versucht dann, den CCP von der Floppy zu laden.

Hast Du die Kopierschleife inzwischen korrigiert?

Michael
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
027
19.12.2012, 08:49 Uhr
hschuetz

Avatar von hschuetz

Hallo Michael,
ja, die Kopierschleife ist korrigiert... du hattest recht, aber meine Version kam sehr weit...
Wo zum Teufel finde ich denn das im Bios? Allerdings hätte das Bios auch auf die Diskette zugreifen können!

Ich hatte auch schon überlegt von einer Ramfloppy zu booten...
Eprom in Ramfloppy kopieren und dann davon starten... hätte den Vorteil, das Laufwerk a: nach dem Start immer gleich ist und dabei entsprechend schnell.

Nur da ist nochmehr Aufwand an Software, System generieren, Systemspuren reservieren (Ramfloppy) Bios anpassen (wohl noch das einfachste) Bootloader schreiben. Und ich tue mich damit entsprechend schwer...
Gruß
Hans-Werner
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
028
19.12.2012, 10:23 Uhr
m.haardt



Die Version mit der Ramfloppy wäre schon sehr schön, aber auch da musst Du natürlich den Bootloader haben, der die "Systemspuren" ausliest. Der jetzige Ansatz ist also eine nötige Vorarbeit.

Wie läuft das Booten eigentlich beim mc CP/M Computer? Lädt der Monitor von der Floppy einen Bootsektor und startet den, oder lädt er gleich das ganze System und startet das BDOS?

Michael
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
029
26.12.2012, 15:52 Uhr
Hein_Ko

Avatar von Hein_Ko

Hallo Hans-Werner, Hallo Michael

Soweit ich weiß, muss das BIOS relocated (also gesamte Adresslage mit .phase verschoben) werden damit BIOS und CP/M sich nicht gegenseitig behindern. Dazu wird nach dem BIOS-upload das EPROM über einen Trick abgeschaltet und im nun freien RAM (oben) gestartet. Von da aus sollte dann das CP/M "nachgeladen" werden. An welche Adresse genau, und wie da der CCP rein passt weiß ich auch noch nicht. Daran "backe" ich gerade.

Viele Grüße & frohe Festtage
Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
030
26.12.2012, 18:58 Uhr
hschuetz

Avatar von hschuetz

Hallo Heinrich,
dein Z80 will immer von Adresse 0000 starten, deshalb muss dort beim Starten ein Programm liegen, also Eprom, dein Monitor, nun braucht allerdings CPM RAM ab Adresse 0000, also kopiert man die Routinen ins obere Ram z.B. nach f000 und startet den Monitor dort (beim MC Computer) und gleichzeitig wird das Eprom ausgeblendet und Ram eingeblendet...jetzt stehen 64K Ram zur Verfügung.Nun brauchst du einen Bootloader welcher die einzelnen Teile des CPM an die entsprechenden Speicherstellen kopiert und das CCP startet.
Soweit so gut..nur bei mir funktionierts ab Bootloader nicht...


;
MSIZE EQU 60 ;60Kb
BIAS EQU (MSIZE-20)*1024 ; 40 * 1024 = 40960 = A000h
CCP EQU 3400H+BIAS ; 3400h + A000h = D400h
BDOS EQU CCP+806H ; D400h + 806h = DC06h
BIOS EQU CCP+1600H ; D400h + 1600h = EA00h
DOSL EQU BIOS-CCP ; EA00 - D400h = 1600h
;
Hier mal meine Speicheraufteilung, die absoluten Adressen hab ich daraus berechnet. Diese Adressen sind bei MC-Computer so verteilt.
Da hänge ich jetzt..... das könnte auch bei dir ein Problem sein, nur das du erst mal ein CPM überhaupt anpassen musst, und bei mir schon ein CPM läuft.
Gruß
Hans-Werner
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
031
03.01.2013, 00:36 Uhr
Hein_Ko

Avatar von Hein_Ko

Hi
@ Hans-Werner:
Hast Du dazu die Quellen für Z80 Assembler? Mich würden da u.a. mal die entry-points interessieren.

@ alle CP/M-Spezialisten:
Ich "verheirate" gerade den Urlade-Monitor mit dem CCP/BDOS und Bootloader. Dabei möchte ich jedoch das CP/M mögl. ROM-resident umprogrammieren, so dass nur der Stack und TPA im RAM als Lücke freigeschaltet sind. Ist das aus Sicht von CP/M2.2 überhaupt möglich, oder werden innerhalb der CBASE und FBASE auch auf dynamische Werte zugegriffen?

Grüsse
Heinrich
--
Es gibt keine Probleme - nur Lösungen !

Dieser Post wurde am 03.01.2013 um 00:45 Uhr von Hein_Ko editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
032
03.01.2013, 10:52 Uhr
paulotto



da wirst Du kein Glück haben, da CP/M sein eigenes BIOS je nach Auswahl der Ein- und Ausgabegeräte dynamisch umkonfiguriert. CP/M ist auf RAM angewiesen!!!

Gruß,

Klaus
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
033
03.01.2013, 17:22 Uhr
Hein_Ko

Avatar von Hein_Ko

@ paulotto:
Hab ich mir schon gedacht. Wäre auch zu schön gewesen. So muss ich mich dann wohl oder übel doch in die Quellen reinknieen. :-(

@ Hans-Werner:
Wie weit kommt denn der Boot/Ladevorgang bei Deinem System? Startet/sucht das Lauferk A: schon um Sektoren zu laden, oder bricht er vorher ab?

Gruss,
Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
034
03.01.2013, 17:50 Uhr
hschuetz

Avatar von hschuetz

Hallo Heinrich,
das MC-System startet von Diskette einwandfrei... nur ich möchte die Diskette ganz raus haben. So habe ich mir gedacht lade CPM vom Eprom in den Speicher....Laufwerk A wäre dann meine erste IDE Platte oder eine Ramdisk. Ich weiß nur nicht wie weit es geht... wenn ich die CPM Daten vom Eprom kopiere...debuggen ist auch nicht so einfach. Im Moment bin ich aber an einer anderen Sache am basteln....coming soon
Gruß
Hans-Werner
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
035
03.01.2013, 18:57 Uhr
Hein_Ko

Avatar von Hein_Ko

Hallo Hans-Werner

Genau an dieser Sache bin ich auch dran. Da ich aber gar keinen mc/NDR ECB-Rechner... und auch keine FLO-1... habe, muss ich alles "ins Blaue" hinein programmieren. Das kostet viel Zeit, da ich noch gar kein CP/M auf SEPIA am laufen habe und alles auf einem DOS-PC assembliere. Alle Sourcen müssen so auch noch neu angepasst werden, da ansonsten nur Fehlermeldungen produziert werden. Ich will die Floppy ganz raus haben und direkt mit EPROM booten und CP/M dann von IDE nachladen. Wie ich die Systemspuren auf IDE bringe, ist mir auch noch nicht klar. Darüber mache ich mir später Gedanken.

Nun zu Deinem System: Das heißt, das booten von Floppy A: ist bei Dir o.k., und anschließend kannst Du auch auf die IDE umschalten und weiter arbeiten? Oder geht nur die IDE dann nicht, wenn versucht wird, davon zu booten?

Gruss
Heinrich
--
Es gibt keine Probleme - nur Lösungen !

Dieser Post wurde am 03.01.2013 um 19:05 Uhr von Hein_Ko editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
036
03.01.2013, 23:05 Uhr
hschuetz

Avatar von hschuetz

Hallo Heinrich,
dein System ist doch auch ein ECB System oder? Evtl. kann man dein System dem MC/NKC System ähnlich machen... denn Hebas war ursprünglich auch nicht für dein System gemacht, dass hat Hans ja erst angepasst. Du musst erstmal dein System zum CPM fähigen System machen, also Eprom zum starten dann 64K Ram zur Verfügung stellen und dann CPM laden...
Für das MC System gibt es viele verschiedene Varianten CPM... alles läuft mit Floppy Flo1 bzw Flo2/3... Laufwerke 3 1/2 bis 8 Zoll und Sasi Festplatten. Nur bei dem System welches ich dir zum Download gegeben habe, hat ein IDE Interface. Booten von IDE funktioniert nicht... oder noch nicht... Es fehlt ein Bootlader und der entsprechende Sysgen. Leider bin ich nicht in der Lage das zu programmieren.... also hatte ich die Idee mit dem Eprom... da es auch mal eine Epromfloppy gab, welche allerdings zu klein für mein System ist.
Mal sehen ob wir deinem System nicht auch ein CPM verpassen können.
Gruß
Hans-Werner
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
037
04.01.2013, 01:15 Uhr
Hein_Ko

Avatar von Hein_Ko


Zitat:
hschuetz postete
Mal sehen ob wir deinem System nicht auch ein CPM verpassen können.

Ja, CP/M auf SEPIA wäre toll. Ich kann (dank CPLDs) die gesamte Logik im System individuell anpassen. So habe ich mir schon ein BIOS geschrieben, dass sich nach F000h hochläd (LDIR), dort startet, Schnittstellen samt IDE pre-initialisiert, Meldungen ausgibt und einen Start-Cursor anzeigt. Danach wird das EPROM über einen Zugriff auf 7FFFh abgeschaltet, so dass 64k RAM (-BIOS ab F000h) zur freien Verfügung steht. Das funktioniert alles schon. Ich kann nun von hier aus mit einem Jump einen Bootloader oder CCP "anstarten", doch dazu müssen die Quellen allesamt neu angepasst werden. (ich mache das alles auf einem DOS-PC mit einem Cross-Assembler, nicht unter CP/M)

Ich denke, bei Deinem Projekt muss der Bootloader (samt BIOS) noch auf IDE angepasst werden, da (anstatt Floppy) jetzt neue Hardwareadressen (8255 oder GIDE?) direkt angesprochen werden müssen und Parameter wie Sektorgröße, LBA, CHS... u.v.m. gem. IDE umgeändert werden muss. Das ist viel Fummelarbeit. Ich denke, Michael hat da recht, das das so noch nicht gehen kann. Schau doch mal bei N8VEM vorbei. Der hat zwar einen S100-Bus, ist aber sonst sehr nah am ECB-Prinzip dran. Sein IDE-Interface hat er mit dem ollen 8255 realisiert, so dass man eventuell seine Quellcodes als Basis zur Umprogrammierung nutzen kann, wenn die Schaltung identisch ist. Im Moment sichte ich noch alle Quellen, um mir ein Gesamtbild von CP/M zu machen. Ausserdem muss ich die Quellen für meinen Assembler einzeln anpassen und mir noch ein Make-File schreiben. Das ist reine Quälerei.

Hans ist leider schon vor einem Jahr aus dem Projekt ausgeschieden. Das Advanced-BASIC habe ich dann selbst geschrieben. Doch ohne Hans wäre das Projekt nicht entstanden, da das HEBAS die Basis war, worauf alles weitere entstanden ist. Dafür bin ich ihm sehr sehr dankbar und werde seine Hilfestellung bei einem Markterfolg von SEPIA ganz sicher nicht vergessen!

Wie ist denn Dein IDE-Interface schaltungstechnisch aufgebaut?
8 oder 16 Bit Datenbits, mit 8255 oder GIDE, oder noch ganz anders?

Gruß,
Heinrich
--
Es gibt keine Probleme - nur Lösungen !

Dieser Post wurde am 04.01.2013 um 01:18 Uhr von Hein_Ko editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
038
04.01.2013, 07:31 Uhr
hschuetz

Avatar von hschuetz

Hallo Heinrich,
mein Interface zur IDE ist mit einem 8255 aufgebaut...siehe:
http://schuetz.thtec.org/NKC/hardware/mcide/ide.html
mein BIOS funktioniert damit gut, auch habe ich ein IDE Tool zum Formatieren.
Im Bios sind auch schon Systemspuren vorgesehen, allerdings weiß ich nicht wie ich da rankommen soll.
Bei deinem System mußt du als erstes die Schnittstellen hinbekommen...wie da die Verknüpfungen zu machen sind weiß ich leider nicht, allerdings steht in jedem Bios CONIN, und CONOUT drin... desweiteren gibt es ein CPM Handbuch welches die Generierung eines neuen CPM beschreibt siehe:
http://www.cpm.z80.de/randyfiles/DRI/CPM_2_0_System_Alteration_Guide.pdf
Ausserdem sollten die Dateien von mir evtl.hilfreich sein.
http://www.schuetz.thtec.org/down/mc_Quellen.zip
Wenn du die Quellen vom Monitor brauchst...sag Bescheid.
Gruß
Hans-Werner
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
039
04.01.2013, 15:35 Uhr
Hein_Ko

Avatar von Hein_Ko

Hallo Hans-Werner

Vielen Dank für Dein nettes Angebot. Quellen sind mir immer willkommen, da ich davon viel lernen kann, wie CP/M intern tickt. Am liebsten in Z80. ;-)

Dein 8255 IDE-Interface ist, soweit ich das sehe, nahezu mit N8VEM identisch. Ergo, müsste sich das von den Quellen her auch anpassen lassen.
Guck mal hier:
http://s100computers.com/My%20System%20Pages/IDE%20Board/My%20IDE%20Card.htm
http://n8vem-sbc.pbworks.com/w/browse/#view=ViewFolder¶m=XT-IDE
http://n8vem-sbc.pbworks.com/w/file/28373213/ppide-Install.txt

Wenn ich mich nicht irre, hat die KC85-Gemeinde neben dem GIDE-Interface auch mal so eine Schaltung verwendet. Da müsste ich aber nochmal nach-googeln.

Leider ist mein IDE-Interface völlig anders aufgebaut, da es u.a. mit 20 MHz Bus/Systemtakt klar kommen muss. So werden intern zwei 16-bit Dual-RAM-Zellen von einer unabhänigen Statmachine im CPLD gesteuert, welche auch das Timing der IDE-CS/A0../RD/WR.. Signale vornimmt. Die CPU kann somit einfach Daten senden (oder lesen), ohne sich um die weitere Ansteuerung zu kümmern. Damit lassen sich dann Transfers bis zu 5 MB/Sek. (bei ATA PIO6 mode) erreichen. Damit ist jedoch die "Ausbeute" von IDE-Quellsourcen bereits sehr eingeschränkt, so dass ich hier wohl-oder-übel eigene CP/M-Treiber schreiben muss.

Grüße,
Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
040
04.01.2013, 18:11 Uhr
Hein_Ko

Avatar von Hein_Ko

Da bin ich nochmal

Hochinteressant sind in diesem Zusammenhang auch folgende Web-Seiten:
http://hc-ddr.hucki.net/wiki/doku.php/cpm:cpa
http://hc-ddr.hucki.net/wiki/doku.php/cpm:systemdoku
http://hc-ddr.hucki.net/wiki/doku.php/cpm:write_a_bios:teil_1

Gruss
Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
041
05.01.2013, 11:30 Uhr
hschuetz

Avatar von hschuetz

Hallo Heinrich,
ja die Quellen sind mir bekannt...ja mein Interface ist identisch mit dem S100 Interface...sogar die Software läuft.

Bei deinem Interface könnte es evtl. einfacher sein...sprichst du es ähnlich wie Speicher an? Es könnte sein, dass du dann die Codes von einer Ramdisk / Epromdisk übernehmen kannst... das wäre dann einfach! Auch im Bios!
Schau einfach mal bei der Epromfloppy rein. http://schuetz.thtec.org/mccomputer/mcc.html
Evtl. wäre dein Interface auch für mich interessant, denn bei der 8255 Methode wird sehr viel Speicher für die Ansteuerung verbraucht.
Gruß
Hans-Werner
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
042
05.01.2013, 12:45 Uhr
m.haardt



Ich könnte mir vorstellen, dass nur die Abbildung von zwei 8 Bit Zugriffen in einen 16 Bit Zugriff in Hardware realisiert wird, ähnlich wie bei GIDE. Dadurch kann man entweder zum Datentransport die schnellen Z80 Befehle benutzen oder DMA machen. Zudem läßt sich das Timing von Bus und IDE Port entkoppeln.

Der Treiberunterschied beschränkt sich also auf den Datentransport, das sind zwei Funktionen.

Das Interface mit dem 8255 ist extrem langsam. Als Prototyp ganz nett, zur Benutzung aber eigentlich nicht geeignet.

Der Zugriff auf die Systemspuren läuft über SYSGEN und das BIOS. Weil es nervt, SYSGEN für jedes Laufwerk anzupassen, benutze ich ein portables SYSGEN, was den DPB benutzt und damit laufwerksunabhängig ist.

Für den Anfang ist es sicher sinnvoll, keine Partitionen zu verwenden. Sowie der Bootloader und das BIOS laufen, sollte man aber die Partitionstabelle auslesen und wenigstens primäre Partitionen benutzen. Es läuft letztlich darauf hinaus, die CP/M Partition zu finden und den Sektor Offset zu bestimmen. Der DPB gibt eine feste Größe vor, d.h. die Partition muss wenigstens so groß sein. Die Systemspuren sind dann die ersten Blöcke innerhalb der Partition. Der DPB wird sinnvollerweise die maximale Anzahl Sektoren und Spuren verwenden und das Laufwerk spricht man über LBA statt CHS an.

Michael
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
043
05.01.2013, 15:53 Uhr
Hein_Ko

Avatar von Hein_Ko

Hallo Hans-Werner, Hallo Michael

Die SEPIA-IDE-Karte arbeitet (inkl. der Adressfolge) wie bei einem PC-AT ISA-Rechner. Man könnte mit einer anderen Adresslage diese Schaltung auch direkt auf einem ISA-Bus anwenden und dort die CF-Card/HDD genauso ansteuern wie unter CP/M. Man müsste nur ein kleines Treiber-Programm schreiben, um auf diese Daten zuzugreifen (ist was für später...)

Bei SEPIA schaufelt die Z80-CPU ihre Daten so schnell sie kann in die ersten beiden 8-bit-Register (ähnl. wie bei GIDE). Doch dann übernimmt eine Statemachine im CPLD die Steuerung und puffert das 16-bit-Datum synchron in einem zweiten Registersatz, während die CPU weitere Daten an die ersten Register liefert. Dies entkoppelt das CPU-Timing, so wie es Michael schon richtig erkannt hat. Die Statemachine erzeugt dabei CPU-unabhängig das gesamte Timing inkl. Datenfluss auf der IDE-Schnittstelle. Das Ganze wird mit den üblichen CHS-Parametern übergeben. Das Timing ist an "schnelle" IDE-Medien angepasst. Uralt-HDDs oder ultra-langsame CF-Karten funktionieren hiermit jedoch i.d.R. nicht mehr. Genauso können keine reinen DMA/UDMA-Medien verwendet werden, die den PIO-mode 0...6 gem. ATA nicht unterstützen.

Beim BIOS komme ich zur Zeit nicht weiter. Habe Knoten im Kopf ;-). Ziel ist es, mit einem EPROM Monitor-BIOS, CCP und BDOS in das obere RAM zu laden nach -> 0F000h. Als erstes lade ich den Monitor hoch, starte die Initialisierungen und schalte das EPROM ab. Doch dann kann ich kein CPP und BDOS mehr hochladen. Da ich noch keinen SEPIA-IDE-Treiber für CP/M habe, ist ein Nachladen (vom Monitor aus) von CCP und BDOS mit einem Datenträger erstmal nicht möglich und damit befinde ich mich bereits in der Möbius-Schleife bzw. habe ein Henne-Ei-Problem.

Gruß
Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
044
05.01.2013, 16:44 Uhr
Hein_Ko

Avatar von Hein_Ko

Da bin ich nochmal

@ Hans-Werner: Hast Du das Z80-Listing in der Datei
http://schuetz.thtec.org/mccomputer/EPF.pdf
eventuell als ASM-Quelle (Datei) vorliegen? Es wäre sehr mühsam das alles nochmal abzutippen, nur um einen Test durchzuführen.

Grüße
Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
045
05.01.2013, 16:50 Uhr
m.haardt



Üblicherweise laden Monitor oder Boot-ROM den ersten Sektor des Mediums und starten ihn, um den Monitor unabhängig vom OS zu halten. Du bekommst doch sicher in 512 Byte genug Code, um die Systemspuren von der Platte in den Speicher zu laden, oder?

Beim mc CP/M Computer werden sogar nur 128 Bytes nach 0x80 geladen und gestartet.

CHS macht eigentlich alles nur unnötig kompliziert.

Michael
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
046
05.01.2013, 17:10 Uhr
Hein_Ko

Avatar von Hein_Ko


Zitat:
m.haardt postete
Üblicherweise laden Monitor oder Boot-ROM den ersten Sektor des Mediums und starten ihn, um den Monitor unabhängig vom OS zu halten. Du bekommst doch sicher in 512 Byte genug Code, um die Systemspuren von der Platte in den Speicher zu laden, oder?

Hallo Michael
So fit bin ich noch nicht in Sachen CP/M. Ich muss mir erst mal klar machen, was wann wohin muss/kann/darf, und wie die Reihenfolge beim Starten der Module ist. Intensiv beschäftige mich mit CP/M erst ein paar Wochen lang und habe die Anfänge 1980? alle nicht mitgemacht.

Ja, ich kann auf die CF-Card 512 Byte sektorweise schreiben/lesen. Ich weiß nur nicht welche Daten dort hinterlegt sein müssen (System ist klar, aber was genau?), oder welchen Code ich assemblieren/relozieren muss bzw. wie das ganze System mit den Modulen bzgl. der int. Abhängigkeiten wirklich zusammenhängt.

Grüße
Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
047
05.01.2013, 19:29 Uhr
m.haardt



Ich glaube, Du stellst Dir da viel zu viel vor. CP/M ist ganz einfach. ;-)

Also: Erstmal brauchst Du im Monitor eine Funktion, die ab Adresse 0 RAM einblendet und dann den ersten Sektor der Platte in den Speicher lädt (z.B. nach Adresse 0) und startet. Dazu wäre es ganz praktisch, wenn Dein Monitor eine Funktion hätte, mit der man Sektoren beschreiben kann.

Auf die Weise kannst Du den Bootsektor beschreiben, laden und starten. Das ist eigentlich schon die meiste Arbeit. Wenn das läuft, ist man schon sehr weit. Als Test kannst Du den Bootsektor ja erstmal irgendwas ausgeben lassen, um zu wissen, dass es funktioniert.

Dieser Sektor enthält eigentlich einen Bootloader, der den Rest der Systemspuren lädt. Die enthalten das CP/M Image mit CCP, BDOS und BIOS, drum wird es auch an die Position von CP/M im RAM geladen. Danach springt der Code direkt an den Anfang des BIOS, typischerweise 0x1600 nach Beginn vom Image. Den Bootloader muss man selbst schreiben.

Die Systemspuren kannst Du für den Anfang auch mit Deinem Monitor beschreiben. Im BIOS kannst Du erstmal alles ausser cold boot und den Konsolenfunktionen mit RET implementieren. Hast Du das geschafft, bootest Du vom Monitor. Der Bootsektor wird geladen und gestartet, lädt den Rest des Systems und startet es. COLDBOOT im BIOS macht nicht viel und startet CCP, der sich dann meldet. Damit hast Du schon mal was laufen.

Ich legte Dir schon mal nahe, in meine Sourcen von CP/M unter Yaze reinzuschauen. Dank idealisierter virtueller Hardware wirst Du nicht von Hardwaredetails abgelenkt, sondern kannst genau sehen, wie alles funktioniert. Zudem kannst Du es unter Linux laufen lassen und schon direkt unter CP/M assemblieren, so wie später auf Deinem System.

Michael
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
048
06.01.2013, 02:11 Uhr
Hein_Ko

Avatar von Hein_Ko


Zitat:
m.haardt postete
Also: Erstmal brauchst Du im Monitor eine Funktion, die ab Adresse 0 RAM einblendet und dann den ersten Sektor der Platte in den Speicher lädt (z.B. nach Adresse 0) und startet. Dazu wäre es ganz praktisch, wenn Dein Monitor eine Funktion hätte, mit der man Sektoren beschreiben kann.

Auf die Weise kannst Du den Bootsektor beschreiben, laden und starten. Das ist eigentlich schon die meiste Arbeit. Wenn das läuft, ist man schon sehr weit. Als Test kannst Du den Bootsektor ja erstmal irgendwas ausgeben lassen, um zu wissen, dass es funktioniert.
Michael

Hallo Michael
Vielen Dank für Deine Starthilfe. Bin jetzt einen Schritt weiter: Ich kann nun mit dem Monitor einen beliebigen Sektor (bsp.0) von der CF laden und dabei nach RAM 0000h schreiben + ggf. starten. Welche Daten müssen denn jetzt hier im Bootsektor genau hinterlegt sein, damit der Rest mit CCP... fluppt ?

Gruß
Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
049
06.01.2013, 14:35 Uhr
m.haardt



Wie ich schon sagte: Den Bootsektor musst Du selbst schreiben.

Bei CP/M machte man es sich noch einfach, da enthält ein Bootsektor für ein Laufwerk genau den Code, um von dem Laufwerk zu booten, d.h. der Bootsektor für Floppies und Platten ist verschieden. Ich hänge hier mal den von Udo Munk ein, den ich auch bei Yaze benutze. Er fängt bei Sektor 2 an, weil Sektor 1 der Bootsektor ist.

CP/M selbst ist das alles egal. Die Systemspuren sind nur reservierter Platz. Was da drin steht, interessiert es nicht. Wie das ganze System beim Kaltstart geladen wird oder nur CCP und BDOS beim Warmstart, ist Sache des BIOS.

Michael

; CP/M 2.2 boot-loader for Z80-Simulator
;
; Copyrigth (C) 1988-95 by Udo Munk
;
.var CCP 0xE400 ; base of the ccp
.var BIOS CCP+0x1600 ; base of the bios
.var BIOSL 0x0300 ; length of the bios
.var SIZE BIOS+BIOSL-CCP ; size of cp/m system
.var SECTS SIZE/128 ; # of sectors to load
;
; I/O ports
;
.var DRIVE 10 ; fdc-port: # of drive
.var TRACKL 11 ; fdc-port: # of track low
.var TRACKH 12 ; fdc-port: # of track high
.var SECTOR 13 ; fdc-port: # of sector
.var FDCOP 14 ; fdc-port: command
.var FDCST 15 ; fdc-port: status
.var DMAL 16 ; dma-port: dma address low
.var DMAH 17 ; dma-port: dma address high
;
; begin the load operation
;
COLD: LD BC,2 ; b=track 0, c=sector 2
LD D,SECTS ; d=# sectors to load
LD HL,CCP ; base transfer address
LD A,0 ; select drive A
OUT (DRIVE),A
;
; load the next sector
;
LSECT: LD A,B ; set track
OUT (TRACKL),A
XOR A
OUT (TRACKH),A
LD A,C ; set sector
OUT (SECTOR),A
LD A,L ; set dma address low
OUT (DMAL),A
LD A,H ; set dma adress high
OUT (DMAH),A
XOR A ; read sector
OUT (FDCOP),A
IN A,(FDCST) ; get status of fdc
CP 0 ; read successful ?
JR Z,CONT ; yes, continue
HALT ; no, halt cpu
CONT:
; go to next sector if load is incomplete
DEC D ; sects=sects-1
JP Z,BIOS ; head for the bios
;
; more sectors to load
;
; we aren't using a stack, so use <sp> as scratch register
; to hold the load address increment
;
LD SP,128 ; 128 bytes per sector
ADD HL,SP ; <hl> = <hl> + 128
;
INC C ; sector = sector + 1
LD A,C
CP 27 ; last sector of track ?
JR C,LSECT ; no, go read another
;
; end of track, increment to next track
;
LD C,1 ; sector = 1
INC B ; track = track + 1
JR LSECT ; for another group
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] -2- [ 3 ] [ 4 ] [ 5 ]     [ Tips und Links ]  



gaby.de

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek