Hallo Besucher, der Thread wurde 8,2k mal aufgerufen und enthält 53 Antworten

letzter Beitrag von detlef am

Wo fängt bitte die 1. Adresse in CP/M an beim C128 nach dem Start?

  • Ich verstehe immer noch nicht, wozu er unter CP/M für eine Bildschirmausgabe die Bildschirmadresse braucht?

  • Ich verstehe immer noch nicht, wozu er unter CP/M für eine Bildschirmausgabe die Bildschirmadresse braucht?

    Naja, sagen wir mal so: er könnte mit Assembler direkt die Hardware programmieren. Das wäre aber nicht 'the cp/m way of things'. Sein Programm liefe halt nur auf dem c128er, und sonst nirgends.

  • Und weil das nicht Sinn der Sache ist, sollten eben die BDOS-Funktionen verwendet werden.


    BTW, zum Positionieren des Cursors muss man ja unter CP/M wissen, welche ESC-Sequenzen benötigt werden. Dazu muss man wissen, welche Terminal-Emulation verwendet wird.
    Welche Terminal-Emulation verwendet der 128er unter CP/M?

  • Es gibt keine cp/m funktion um Zeichen an Pos. XY zu schreiben.Das überläßt cp/m den Programmiersprachen. cp/m unterscheidet noch nicht einmal zwischen Text-Modus und Grafik-Modus, weil es in cp/m schlicht und einfach keine Grafik-Funktion gibt. Es gibt zwar einzelne Programme die sowas bewerkstelligen, aber die sind alle Hardware-Abhängig, und solche Programme sind demzufolge auch nicht mehr einfach portierbar.


    Doch, es gibt eine systemübergreifende Grafikbibliothek für cp/m. Diese unterstützt aber leider nicht den C128.


    Edit: http://www.z80.eu/gsx.html

  • ADM31 bzw. ADM3A wie KAYPRO II ind IV

    Alles klar.


    Dann wäre für spacer noch wichtig zu wissen, dass er die in dieser Terminal-Emulation beschriebenen ESC-Sequenzen verwenden muss, wenn er direkt über die BDOS-Funktionen (also ohne die TP-Funktionen) an eine bestimmten Bildschirmposition schreiben will.

  • Dazu habe ich noch mal eine Frage (ich hoffe, das schweift jetzt nicht zu sehr vom Thema ab).


    Turbo Pascal muss ich ja bei der Installation von CP/M an die jeweilige Terminal-Emulation anpassen. Dann funktioniert auch die Cursor-Positionierung innerhalb meiner Pascap-Programme.
    Wenn ich jetzt ein compiliertes Pascal-Programm auf einem anderen CP/M-Rechner mit anderer Terminal-Emulation laufen lassen will, wie funktionert da dann?

  • Doch, es gibt eine systemübergreifende Grafikbibliothek für cp/m. Diese unterstützt aber leider nicht den C128.


    Edit: http://www.z80.eu/gsx.html

    Das stimmt nur bedingt. DR hat zwar mit GSX ein Grundstein gelegt (und später zu GEM weiterentwickelt), aber das war beileibe nicht 'Systemübergreifend'.

  • Hhhmmm....


    Also soweit ich in Sachen CP/M informiert bin, kann CP/M tatsächlich nicht den Cursor beliebig positionieren. Aus der Sicht vom CP/M werden die Daten (also der Text) nur an ein Terminal gesendet. Daher waren ja solche Terminals wie das VT52 damals sehr beliebt, weil es dort mittels sogenannter Escape-Sequenzen möglich war, verschiedene gebräuchliche Funktionen zu erreichen.


    Zum Beispiel (hier jetzt zum verdeutlichen in typischer Basic-Sysntax):
    print chr$(27); "Y"; chr$(31+Zeile); chr$(31+Spalte); "*"
    setzt einen * in die linke obere Ecke, wobei sowohl die Zeilen als auch die Spalten dann ab 1 nummeriert werden.
    Wichtig ist das große Y, kein kleines y.


    Vermutlich ist das Turbo Pascal für den C128 bereits auf eine passende Terminal-Emulation angepasst.
    Du kannst ja mal so eine Sequenz über die BDOS-Ausgaberoutine schicken. Vielleicht erfüllt die ja dan deine Wünsche. Good Luck!

  • Dazu habe ich noch mal eine Frage (ich hoffe, das schweift jetzt nicht zu sehr vom Thema ab).


    Turbo Pascal muss ich ja bei der Installation von CP/M an die jeweilige Terminal-Emulation anpassen. Dann funktioniert auch die Cursor-Positionierung innerhalb meiner Pascap-Programme.
    Wenn ich jetzt ein compiliertes Pascal-Programm auf einem anderen CP/M-Rechner mit anderer Terminal-Emulation laufen lassen will, wie funktionert da dann?

    Da bin ich überfragt, aber ich schätze mal daß man dann den SourceCode auf das andere System neu übersetzen muß.
    Zu deutsch: dann spricht man von 'Quellcode-Kompatibel'.

  • Das stimmt nur bedingt. DR hat zwar mit GSX ein Grundstein gelegt (und später zu GEM weiterentwickelt), aber das war beileibe nicht 'Systemübergreifend'.

    also zumindest gibt es gsx für mehrere Systeme. Müssen die Programme denn separat compiliert werden oder laufen die gleichen binaries auf unterschiedlichen cp/m Systemen?

  • also zumindest gibt es gsx für mehrere Systeme. Müssen die Programme denn separat compiliert werden oder laufen die gleichen binaries auf unterschiedlichen cp/m Systemen?

    Das entzieht sich meine Kenntnisse. Aber das Digital Research schon unter cp/m mit seinem GEM angefangen hatte, habe ich noch aufgeschnappt ;)
    Zum Glück haben die das früh genug auf DOS Plus bzw. MS-DOS portiert, so daß die Amstrad/Schneider PC1512 und 1640 gleich mit GEM ausgeliefert werden konnten. Auch Glück für DR das Atari das GEM nutzte. Pech für die ST Besitzern, weil GEM da noch nicht Multitaskingfähig war.

  • also zumindest gibt es gsx für mehrere Systeme. Müssen die Programme denn separat compiliert werden oder laufen die gleichen binaries auf unterschiedlichen cp/m Systemen?

    Ich kenne GSX nicht, aber wenn es eine Library ist (wie der Name suggeriert), dann gehört sie nicht zum Betriebssystem und wird mit dem Programm zusammengelinkt.
    Aber anscheinend verwendet GSX Hardware-Treiber, die könnten dann möglicherweise separat installiert oder geladen werden.

  • CP/M ist ein Betriebssystem, das keine festen Vorgaben für den Bildschirmaufbau hat.
    Die meisten Rechner hatten zwar mit 80 Zeichen pro Zeile gearbeitet, es gab aber viele Unterschiede.
    Besonders bei der Anzahl der Bildschirmzeilen und der Steuer-Codes. Das konnte je nach Hersteller anders sein.


    Die Bildschirmsteuerung findet deshalb über die Terminal-Emulationen statt.Es hängt alles direkt mit der Entstehungsgeschichte von CP/M zusammen:


    Die ersten CP/M-Versionen Mitte der 70er Jahre waren so ausgelegt, dass man mit einem Terminal einen Hauptrechner bedient. Also einen Computer wie z.B. den Altair 8800 oder den IMSAI 8080



    Das waren "Desktop-Rechner", die weder einen Monitor-Anschluss noch eine Tastatur hatten.
    Man konnte nur mit einem externen Terminal auf diese Computer zugreifen. Es waren praktisch die Ur-Väter späterer CP/M- und MS-DOS PCs.
    Um alles zu vereinheitlichen, wurden BDOS und BIOS unter CP/M geschaffen.


    Bei den Terminals gab es einen ziemlichen Wildwuchs. Jeder Hersteller hatte seinen Bildschirm anders angesteuert.
    Deshalb gibt es unter CP/M die verschiedenen Terminal-Emulationen wie VT100, ADM3A, usw.
    Das kann man als frühen Vorläufer späterer Bildschirmtreiber ansehen, wenn man so will. Nur, dass jedes Programm selber darauf eingestellt werden musste.


    Grafik war unter CP/M zunächst nicht vorgesehen. Später gab es dann aber die Grafik-Schnittstelle GSX für CP/M.
    Diese wurde aber leider nie an den C128 angepasst. Für andere Rechner wie den CPC gab es zwar GSX, aber kaum Programme, die es nutzten.


    Sicherlich kann man in Maschinensprache direkt auf den VDC zugreifen und versuchen, den Bildschirmspeicher zu beschreiben.
    Das ist dann aber kein CP/M-konformes Programm mehr. Andere CP/M-Rechner als der C128 können mit der VDC-Direktansprache nichts anfangen. Da kann man dann ja gleich im C128-Modus programmieren.


    Ein Bildschirm-RAM, wie man es vom C64 her kennt (ab Adresse 1024), gibt es unter CP/M nicht. Der Bildschirmspeicher liegt unterhalb der Betriebssystem-Ebene. Jeder Computerhersteller musste CP/M selber an seine Rechner anpassen.


    Das ist auch einer (!) der Gründe, warum die Nachbauten der IBM-PCs sich dann so schnell durchsetzen konnten. Da wurde einfach mehr standardisiert.
    Das war in den 70ern noch anders. Der kleinste gemeinsame Nenner war damals die CPU und der Speicherausbau. Und sonst: Sehr viel Wildwuchs.

  • Grafik war unter CP/M zunächst nicht vorgesehen.

    Was logisch ist, denn man hätte dafür grafikfähige Terminals gebraucht.
    Und die waren in den 70ern sicher noch unbezahlbar.
    Und wenn man einen angeschlossen hätte, dann hätte man den mit seinen speziellen Grafikkommandos direkt angesteuert.

  • Auch da hilft Tante Guurgle wieder wenn man nach "Vice Tastaturlayout" sucht... und Bingo...


    https://www.c64-wiki.de/wiki/VICE#Tastaturlayout

    Lieben Gruß, Torsten


    Meine Spielzeuge
    BFZ MFA, Apple //e, ZX80Core, AX81, ZX81, ZX81NU, Spectrum+, Harlequin, Jupiter ACE Clone, Amstrad NC100, Cambridge Z88, C64, C128D, Plus/4, Amiga 500, Amiga 1200, Atari Portfolio, HP200LX, HP48SX, HP48GX, Accura 101, IBM PC 5155, PS/2 (Model 40SX), TP755c, T20, T41, T61, PS/2E, TI-59,

  • Um nochmal auf die Ausgangsfrage zurück zu kommen:
    "Wie setze ich ein Zeichen an eine bestimmte Bildschirm-Position unter CP/M?"


    Die Antwort liegt in den Steuer-Codes der verwendeten Terminal-Emulation.


    Der C128 kann ja z.B. ADM3A emulieren.
    Diese Terminals hatten spezielle Befehle, um den Cursor an eine bestimmte Bildschirmposition zu setzen.
    Ich kenne den Code zwar nicht auswendig. Aber damit sollte es klappen: Den Cursor an die gewünschte Stelle setzen und dann über die CP/M-Funktion dort den Buchstaben oder Text ausgeben.


    In der Beschreibung zum ADM3A steht folgendes:


    "The ADM-3A added support for control codes to move the cursor around on the screen, and directly position the cursor at any point in the display."


    Siehe hier

  • Wenn ich jetzt ein compiliertes Pascal-Programm auf einem anderen CP/M-Rechner mit anderer Terminal-Emulation laufen lassen will, wie funktionert da dann?

    Da patcht man die Steuersequenzen für die andere Terminalemulation in die ins Programm gelinkte Turbo-Pascal-Runtime-Library rein, evtl. geht das sogar mit dem Original-TP-Setup-Programm.