Cp/m 2.2 Bios...

  • Hallo.


    Ich hab an meinem Imsai CP/M 1.4 laufen. Jetzt will ich mir eine CP/M 2.2 Disk (alles momentan noch am Gotek) erstellen.


    Ich hab eine 8“ sssd Leerdiskette als image. Also 77 Tracks, 26 Sektoren und 128bytes/sektor. Vorerst will ich eine 20k Version erstellen.

    Über mein Monitorprogramm lade ich das ccp und das bdos an 3400h. Das Bios lade ich an 4a00h. Mein Putsysprogramm schreibt dann den Kram ab T00S02 auf die Diskette. Auf T00S01 liegt mein Urlader programm. Wenn ich von Floppy boote lädt der Urlader das cp/m in den Speicher inkl bios und springt dann zum bios mit jmp 4a00h. Das sollte soweit alles passen. Ich kriege allerdings keinen a> Prompt.

    Mein cp/m 1.4 hat im Bios nur die Sprungtabelle. Also boot,wbiot,const,conin usw. Sonst nichts. Also keine disk definition table oder dergleichen.

    Ich werde es später noch damit probieren. Die macro library hab ich. Braucht man diese erst ab cp/m 2.0 ? Ich verstehe nicht, warum er das 1.4er sauber startet und das 2.2er nicht..


    Vielen Dank


    Gruß Jan

  • Danke für die Info ! Leider hat das mir nicht viel gebracht. Ich bin auch nur mit 8080 bzw 8085 Assembler vertraut. Z80 kann ich nicht lesen.


    Jedenfalls bin ich etwas weiter gekommen. Ich hatte einen Fehler bei der bdos adresse in der zeropage.

    Er lädt jetzt die Disk und dann schreibt er bdos err on a:select.


    Also kennt er das Laufwerk nicht, obwohl er davon gebootet hat ?!


    An 0004h steht 0 für Laufwerk a: . Aber ich habe auch gelesen, dass 0 einen select error darstellt.

    Kann es sein, dass ich das bdos patchen muß ?


    Gruß Jan

  • Danke für den Link ! Ich schaue später mal rein. Ich vermute, dass ich das bdos im Bereich seldsk patchen muß.

    Mit der Imsai Software direkt kann ich nichts anfangen. Außer der Prozessorkarte hab ich leider keine Imsai Karte. Als serial Card hab ich eine Interfacer 1, als Floppy card eine Versafloppy 1. Also passen die Ports da nicht. Ich schau heut Abend mal in Ruhe.


    Gruß Jan

  • Mein Imsai bootet jetzt mit CP/M 2.2 einwandfrei !!

    Ich hatte einen Tippfehler in der Definition der Zeropage im Urlader. Außerdem muß der Urlader zum CCP springen und nicht zum BIOS. Das war das erste.

    Dann kam immer wieder der bdos:select Fehler. Das lag an der seldsk Routine in meinem bios. Die musste ich etwas verbiegen... Jetzt geht alles.


    Vielen Dank


    Gruß Jan

    • Offizieller Beitrag

    Außerdem muß der Urlader zum CCP springen und nicht zum BIOS.

    Bei allen CPMs, die ich bisher und gerade aktuell bearbeite, springt der Bootloader zur BIOS - BOOT Funktion. Die springt zum CCP.

    Wer setzt den die BDOS und WBOOT Vektoren bei 5h und 0h in der ZeroPage?

  • Das hab ich bei mir in den Urlader gepackt.



    Gruß Jan

    Einmal editiert, zuletzt von Jan1980 ()

    • Offizieller Beitrag

    Bischen ungewoehnlich.

    Ich kenn das eigentlich immer so, der Bootloader liest die Systemtracks, packt die in den Speicher und springt das BIOS an.

    In der BOOT-Funktion wird i.a. auch mehr initialisiert als die Systemvektoren und IO Byte.


    Aber gut, wenn's laeuft.

  • Ja, es läuft. Ich hatte ja die laufende CP/M 1.4 Version als Image für mein Gotek. Ich habe mir im HXC den Dump von Track 00 Sector 01 angeschaut und diesen von Hand mit Dauerschreiber auf einem Block disassembliert und kommentiert. Und da hatte ich mir das abgekuckt.. Also bin ich zumindest nicht der erste, der es so macht.. :)


    Na, jetzt hab ich ja mal was laufendes. Ich kann es ja immer noch anders machen auf die korrekte Art und Weise. Hauptsache es is jetzt mal ne funktionierende CP/M 2.2 Version für den Imsai da..


    EDIT: Was ich demnächst auch noch angehen will, ist eine Version von IMDOS zu erstellen.


    Gruß Jan

    Einmal editiert, zuletzt von Jan1980 ()

  • Einen Fehler hatte ich noch drin. Hab ich oben im Source auch abgeändert. Die Einschaltmeldung kann erst abgerufen werden, wenn alles im Speicher ist, da die Databytes am Ende des Bios ist, weil im Urlader wegen der 128 byte Begrenzung kein Platz war. ich hatte den Aufruf aus dem Urlader vor der Laderoutine stehen. Das hat gestern nur funktioniert, weil der Rechner immer nur kurz aus war und da hatte der das noch im RAM. Ich hab statisches RAM drin, was die bytes recht lange hält. Man muß dann schon bißchen warten vor dem Neustart. So geht es jetzt aber...


    Backspace in MBASIC geht nicht... bißchen nervend, wenn man sich vertippt. Da muß ich mal noch kucken. In Wordstar löscht man mit delete.. Etwas ungewohnt, aber funzt..


    Gruß Jan

  • So, jetzt hab ichs fein gemacht. Einschaltmeldung im Bios und der Urlader springt ins Bios, wie es sich gehört... Das System läuft soweit. Ich kann auf Laufwerk A und B zugreifen (alles Gotek HXC bzw. Lotharek mit Display). Hab eben noch ne Runde Ladder gespielt..


    ABER... wenn ich eine Datei speichere mit "save 1 x.com", dann macht er das auch anscheinend, aber es kommt kein Prompt mehr. Und, wenn ich zweimal zwischen den Laufwerken hin und her springe, zeigt er keine directory mehr an, also


    a>dir -- ok !

    a>b: -- ok !

    b>dir -- ok !

    b>a:

    a>dir -- gehts nichts mehr - ich muß resetten


    Bei meinem CP/M 1.4 funktioniert alles wunderbar ! Also kann es nicht an meinen read und write routinen im eprom liegen.


    Es wäre super, wenn mir jemand ein Diskettenimage von einer 56k CP/M 2.2 Bootdisk schicken könnte, wo das CP/M definitiv richtig funktioniert... Da könnte ich dann meinen Urlader und mein cbios reinmachen.

    Oder hat jemand noch eine andere Idee ?


    Vielen Dank !!


    Gruß Jan

    • Offizieller Beitrag

    wo das CP/M definitiv richtig funktioniert

    Meinst du mit CP/M den CCP und BDOS?

    Das sollte in allen Systemen gleich sein, ausser der Adresse natuerlich.

    Da findest du bei deramp.com genug Images, daraus kannst du CCP und BDOS mit einem Hexeditor rausschneiden.

    Oder was meinst du?


    Welchen Diskcontroller hast du eigentlich?

  • Ja genau, mit CP/M meine ich CCP und BDOS. Ich hab den Versafloppy 1 Controller.

    Zum einen hatte ich das CCP und BDOS als Source gefunden und mit zmac assembliert und auf Disk gebracht. Zum anderen hab ich eine Boot image von dem Imsai-Emulator genommen und da CCP und BDOS von der Disketten geladen ab Track 0 Sektor 2 insgesamt 52 Sektoren und dann das in mein Disk image geschrieben und das bios und den urlader geschrieben. Ich denke, es liegt am BDOS ?! Deswegen wäre es super, eine Bootdisk bzw ein Image von jemandem zu bekommen, wo ich weiß, dass das CCP und das BDOS ok sind. Anpassen kann ich ja dann selber...


    Gruß Jan

    • Offizieller Beitrag

    Dann nimm doch hier ein Image raus.

    https://deramp.com/downloads/v…table%20Disk%20Images.zip

    Ich bin gerade an dem CPM22A-MikeD dran.

    Die Vector Images sind auf den Systemtracks gleich, tut's also genauso.



    Mein Ansatz ist etwas anders. (Nur al als Info)

    Ich hab nen Micropolis FDC und nehm das BIOS (natuerlich auch CCP und BDOS) wegen der Floppyroutinen. Die IO Routinen kann ich auf den Monitor umlenken. Vector spezifisches Zeug fliegt erstmal raus.


    Viel Erfolg

  • Na ich hab 2 salota mixed memory karten. Diese sind mit 60kb RAM bestückt, bei f000h hab ich das floppy-bios in einem 2716, also auch die ganzen i/o Routinen und bei f800h hab ich ebenfalls in einem 2716 mein Monitorprogramm. Ursprünglich war das, um hex files zu empfangen. Ich habe es aber erweitert, dass man bequem damit eine diskette formatieren kann und außerdem das cp/m, das bios oder den urlader damit lesen und schreiben kann..


    In meinem cbios, also dem auf der Diskette, verzweigt die Sprungtabelle auf die Routinen im Eprom. Nur die seldisk routine musste ich separat schreiben, weil ich gerade keine Lust hatte den Rechner zu zerlegen..:-)

    Ok, ich schau morgen mal nochmal auf der Seite dort.


    Gruss Jan

    • Offizieller Beitrag

    2 salota mixed memory karten

    Ooooh, from good Old Germany ?


    Das hat Stil !

  • Ja klar ! :)


    Bei vcfed wird stellenweise über diese Karten gelästert, aber sie tun ihren Dienst. Ich habe auch noch verschiedene andere RAM Karten da, aber nur zur Reserve.

    Gruß Jan

  • Sehr schön ...

    ... bitte weitermachen und abschließend alles HIER schön zusammenfassend Dokumentieren.


    ----------------------------------------------------------------------------

    Hab ich eigentlich schon von meine Genie III erzählt ?

    Mit freundlichen Grüßen


    fritz

  • Ich habe jetzt ein cp/m source von deramp benutzt. Dieses hab ich mit zmac assembliert und mir eine bootdisk erstellt. Läuft soweit. Nach dem save befehl kommt auch jetzt wie gewünscht der Prompt.


    wenn ich dann am hxc die cp/m 1.4 disk auf Laufwerk b mounte, klappt das auch. Wenn ich dann eine datei von laufwerk b nach a schreiben will, schreibt er bad sector. Daraufhin ist meine bootdisk zerstört. Ich glaube aber, dass das jetzt wirklich was mit meinem Gotek zu tun hat ! Auf dem Display sieht man die tracks dann plötzlich in einer Endlosschleife von 0 bis 160 hin und her steppen.


    Hat jemand Erfahrungswerte mit dem gotek am cp/m Rechner als doppelfloppy emulation ?


    Gruß Jan

  • Kleines feedback an der Stelle. Nach dem dritten CP/M war der Fehler immer noch da.

    Ich hatte dann anstatt dem gotek als lw a und lw b, ein 5,25“ hd laufwerk als 8“ Laufwerk benutzt. Dazu musste ich an der Floppy selber nur das ready signal auf low ziehen, also auf Masse legen. Das ging dann immer noch nicht 100%.

    Ich musste wieder in meiner seldisk routine etwas abändern. Daraufhin hat es einwandfrei funktioniert. Jetzt auch mit dem Gotek hxc als laufwerk a und b !


    Also hab ich hier insgesamt 3 CP/M versionen, von denen 2 nicht einwandfrei laufen. Die dritte schon. Außerdem war die seldisk Routine für die Probleme verantwortlich.


    Ende gut, alles gut ! Der Imsai läuft jetzt wie er soll.. Ich muss jetzt nur mal meine 8“ Doppelfloppystation fertig bauen... :)


    Gruß Jan

    • Offizieller Beitrag

    Was machst du den in dem seldsk Aufruf?

    Der gibt doch nur den Pointer auf die DiskParameter zurueck.

  • Normalerweise schreibt cp/m das Laufwerk nach Register c und ruft dann die seldisk routine auf. In meinem Versafloppy Bios sieht das original so aus:


    mov a,c. ; register c in akku

    sta unit ; sende an Controller

    ret. ; Rücksprung


    Es mag sein, dass das für CP/M 1.4 reicht, da funktioniert es nämlich. Bei 2.2 funktioniert es nicht. Mein Versafloppy Controller ist auch von 1978. CP/M 2.2 kam 1979. Mit dem Alterationguide von CP/M 1.4 hab ich mich nicht beschäftigt, ich weiss nur, dass es geht !


    Bei CP/M 2.2 wird ja das Laufwerk bei Cdisk an der Adresse 0004h erwartet. Außerdem muß als erstes 0000h in das Register h geschrieben werden als Rückmeldung. Im Grunde genommen sieht meine seldisk Routine jetzt fast so aus wie im Alteration guide, außer dass das Laufwerk aus dem Akku zusätzlich an den Controller geschickt wird. Anders ging es nicht.


    Ich hatte mich auch etwas verrannt, weil ich mit vermutlich gepatchten CP/M Sources rum hantiert habe, die dann auf einem Originalsystem nicht mehr sauber laufen anscheinend ?!

    Ich will mir die Sources bei Gelegenheit nochmal in aller Ruhe anschauen.


    Gruß Jan

  • Imsai

    Deine Hardware kenne ich nicht - aber mal unten überlegen und probieren.


    Beim selektieren eines LW wird offenbar schon an die Hardware gesteuert - oder ist "unit" eine Variable?

    sta unit ; sende an Controller

    Falls sofort der Controller hier gesteuert wird - könnte irgenwo im eigenen BIOS ein Nebeneffekt mit dem Selekt eine falsche Operation im eigenen HOST I/O ablaufen?

    Warum sollte sonst eine Fehlfunktion bei cp/M I/O (HOST-DE- BLOCKING) hier auftreten?

    Auf den CODE-bereich zum effektiven Floppyzugriff per READ oder WRITE würde ich mal überprüfen.


    Beispiel bei TA alphaTronic P2 ( aus BIOS )

    Bei vielen cp/m BIOS - wie bei der alpahTronic Px, KISS oder vom DS 2069 wird erst bei einem HOST- read / oder write (Block/ Deblock System) auf die Hardware ( Floppy-Laufwerk) mit dem richtigen Drive gearbeitet.

    Das Registerpar HL muss mit der richtiger "Diskparameter-Adresse" versorgt werden. Das ist wohl schon erledigt. Das cp/m sichert intern dann den Diskparameterblock für ein I/O später.


    Evtl. kann man besser erst z.B. über eine Variable wie bei mir "sekdsk", im HOST BLOCK - DEBLOCK Zugriff, jetzt zentral die erforderlichen Steuerbefehle an den Floppycontroller ( von "sekdsk" abgeleitet das physikalischen Laufwerk) abgesetzt werden.


    Beispiel seldsk

  • Danke für die Antwort. Ja so in etwa ist mein Code jetzt auch. Unit ist ein equal für die dementsprechende Controlleradresse in der Zeropage. In dem Fall 0043h. Ich hab den Versafloppy 1 Controller..



    Im Grunde stehts ja auch fast genauso im Skeletal-Bios. Ich hab mich nur etwas im Kreis bewegt, weil ich fehlerhafte bzw. gepatchte CP/M Sources anscheinend hatte und hier und da noch ein paar andere Problemchen hatte. Außerdem hab ich mich die ganze Zeit gewundert, warum CP/M 1.4 einwandfrei läuft und CP/M 2.2 mit den selben Routinen nicht...


    Na, es war mein erstes CP/M System, dass ich komplett aufgesetzt habe. Von Kleindi hier ausm Forum/Verein hab ich am Anfang ein Monitor Programm bekommen, um Intel HEX-files zu übertragen. Alle anderen Tools hab ich selber programmiert. Formatierprogramm, Diskschreib- und Leseprogramme, einen hexdump Monitor usw. .. Wenn alles von Anfang an glatt laufen würde, dann würde es nur halb so viel Spaß machen, wenn es funktioniert... :)


    Gruß Jan

    • Offizieller Beitrag

    sta 0004h ; schreibe das Laufwerk in die Zeropage an Adresse 4h, dort erwartet es CP/M

    Ich bin kein CP/M Experte, aber m.E. ist CurDisk (adr. 4) das Laufwerk, das ich am CCP gerade als Default benutze.


    SELDISK wird vor jedem Diskettenaufruf aufgerufen.

    Also wenn ich von Lw A PIP B:=C:BLA.TXT aufrufe, wird SELDISK fuer B und C aufgerufen. Damit aendert sich aber CurDisk fuer den CCP nicht.


    Aber ich bin kein Experte. Ich schau auch noch mal nach.

  • Ich hatte nachgeschaut. Klar, am Anfang steht das ja als cdisk im Bios. Das wird ja an Adresse 4h geschrieben. Wenn ich auf Laufwerk A bin, und am Imsai mit den switches das Programm anhalte und Adresse 4 anspringe steht da Wert 0. Wenn ich auf Laufwerk B bin und dasselbe mache, steht da Wert 1.


    EDIT: Wenn du dann eine Reset machst, springt er ja in den Bootstrap und lädt neu. Bei mir zB zu 0F000h, weil da der Bootstrap steht, der die Diskette anspricht und somit den Urlader, das Bios und das ganze Gedöhns erneut reinlädt..


    0000h: C3 - opcode für jump

    0001h: 00 - low byte

    0002h: F0 - high byte

    0003h: 00 - IO Byte

    0004h: 00 - cdisk dann 00 default aus dem Lader beim Neustart

    usw....


    Gruß Jan

    Einmal editiert, zuletzt von Jan1980 ()