Posts by JenGun

    Es gibt sogar eine Version womit es möglich ist REL Datein mit dem Hi-Tech Linker zu verwenden.

    Beispiel: m80 test=test. Die erzeugte test.rel kann mit dem C-Compiler - Linker eingebunden werden.

    Wenn ich Microsoft REL for HiTech C (Z80) richtig verstehe, wird L80.COM verwendet, nicht LINK.COM bzw. LINQ.COM des HI-TECH C Compilers ... oder meinst du eine andere Version?

    Mit welchen Aufruf-Parametern für den Hi-Tech-C Compiler hast Du Deine Beispiele übersetzt ?

    Unter YAZE-AG mit:

    Code
    C>c frachtc.c -lf
    HI-TECH C COMPILER (CP/M-80) V3.09
    Copyright (C) 1984-87 HI-TECH SOFTWARE

    Kannst Du die extrahierten CP/M Files hier vielleicht auch noch ablegen?

    CONFIG.COM, DUP.COM und KEYDEF.COM sind zwar speziell für das Montezuma Micro CP/M 2.31 (TRS-80 Model 4/4P), aber zur Vollständigkeit enthalten ...

    Um die Files dort zu extrahieren - zur Nutzung mit RunCPM - wollte ich erst cpmtools nehmen, aber dem fehlen wohl die passenden diskdefs

    trsg (und andere TRS-80 CP/M-Formate) von Larry Kraemer ist in diskdefs der cpmtools bereits vorhanden ... :)

    Die wx.h Header-Datei ist zwar sehr bequem, allerdings wird auch wirklich sehr viel includiert was nicht wirklich gebraucht wird, und da muß sich der Compiler erstmal durchhangeln.

    Die Fehlermeldungen wurden dadurch zwar verhindert, allerdings ist -include in einem Makefile auch eigentlich für das Einbinden von anderen Makefiles gedacht, nicht für "Header"-Dateien: 3.3 Including Other Makefiles ... auf Wx-Config steht auch nicht, dass wx.h immer extra includiert werden muss ... und bis CIFE Version 0.07 war es ja auch nicht notwendig ... ;)


    Wo auch immer die Macros T1 und P1 außerhalb von CIFE definiert wurden: es compiliert jetzt ohne Fehler ... :)


    Verwendet man clang++ als C++-Compiler ist allerdings noch ein kleiner Patch notwendig:

    ... sonst kommt es zu dieser Fehlermeldung:

    Code
    CIFE/Sources/CpmFs.cpp:1001:70: error: cannot pass object of non-trivial type 'std::string' (aka 'basic_string<char>') through variadic method; call will abort at runtime [-Wnon-pod-varargs]
            fserr = msgFormat("Failed to read Amstrad superblock  (%s)", cpmdevice->getErrorMsg());
                                                                         ^

    Da die Angabe dieser Datei im Entwicklungssystem erfolgt und daher in Deinem Makefile nicht auftaucht kann es schon sein das daher die Fehler kommen.

    wx-config --cxxflags im GNUmakefile liefert die notwendigen #include-Pfade ... und wx/wx.h wird ja in main.cpp eingebunden. Der Patch verändert da nichts ... es fehlen nur ein paar Standard-"Header" für C++, wie z.B. cstdarg und cstring ...

    So wie der Quellcode in Github steht kompiliert CIFE sauber [ ... ]

    Sorry, aber auch unter Linux Mint 21 ("Vanessa"):


    Code
    $ g++ --version
    
    g++ (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0
    Copyright (C) 2021 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

    wie wende ich den Patch denn an und wo muss ich die patch-Datei ablegen?

    Im Verzeichnis CPM_Image-File_Explorer den Patch speichern und:

    Code
     patch -p1 < cife-patch.diff

    ... GNUmakefile ist noch anzupassen (bzw. in diesem Verzeichnis anzulegen):

    ... dann funktioniert einfach make ...

    Ich habe jetzt mal auf die schnelle durch die Eleminierung von Leerzeichen und Linien 2,5k freibekommen. Ich hatte gedacht, dass da mehr drin ist. Ist es auch, aber dann wird es mühsamer.

    Man könnte einfach die sehr langen Namen der Variablen entsprechend kürzen ... ;)

    Das Umbenennen des Makros kann bei der Funktion 'check CP/M Filesystem' zu Problemen bei Passwort geschützten Dateisystem führen.

    Habe das natürlich auch in der Datei CpmTools.cpp gemacht ... meine Vermutung war, dass es an der Definition in edid.h (Paket xserver-xorg-dev) liegt ... der C++-Compiler verlangt hier auch nach #include <cstring>, #include <cstdarg>, #include <climits> ... Patch dafür erwünscht? :)

    Mit der Xorg Header-Datei hat der CIFE doch nichts zu tun. :/

    Beim Compilieren unter Devuan Chimaera 4.0 (= Debian Bullseye 11.1) wird dieser Fehler ausgegeben:

    Code
    In file included from CIFE/Sources/CpmTools.cpp:18:
    CIFE/Sources/CpmDefs.h:66:12: error: expected nested-name-specifier before 'E'
       66 | #define T1 'E'
          |            ^~~

    ... vielleicht hat das aber eine andere Ursache ... Umbenennen der T-Macros in CIFE hat jedenfalls geholfen ...

    Und ein bißchen Platz für Variablen muss ja auch noch bleiben.

    Code
    BASIC-80 Rev. 5.22                   
    CP/M Version                         
    Copyright 1977-1982 (C) by Microsoft 
    35318 Bytes free                     
    Ok                                   
    load "WARGAMES.BAS"                  
    Ok                                   
    print fre(0)                         
     1470                                
    Ok

    ... TCS Genie IIIs, CP/M 2.2 von Klaus Kämpf ...

    Die beiden Macros T1 und T2 aus CpmDefs.h werden bei Xorg auch in edid.h definiert:

    Code
    /* extract information from standard timing section */
    #define T1 GET(E_T1)
    #define T2 GET(E_T2)

    ... das sorgt(e) hier für ein paar "wilde" Fehlermeldungen und Abbruch ... ;)

    In Brasilien gab es sehr viele "Nachbauten" des TRS-80, die meisten sind kompatibel zum Model III. Der CP-500/M80 von Prologica hatte einen 80x24-Modus (ohne einen 6845 CRTC o.ä.) und konnte eine hauseigene CP/M 2.2-Version mit dem Namen SO-08 ausführen. Auf einigen Internet - Seiten steht zwar, dass die Maschine auch zum Model IV kompatibel sei, dies ist jedoch nicht richtig ...


    Technische Informationen über dieses spezielle Modell von Prologica und das Betriebssystem SO-08 sind (so gut wie) nicht vorhanden!


    Leonardo Brondani Schenkel hat sich die ganze Arbeit gemacht, die Funktionsweise dieses Betriebssystems (bzw. des CP-500/M80) durch "Reverse Engineering" zu "entschlüsseln" und auch die Emulation für SDLTRS zu schreiben! :)



    Im Quellcode hat er ausführlich kommentiert, was er dabei herausgefunden hat: "Banking" durch Lesen(!) eines I/O-Ports und einen 80x24-Bildschirm-Modus, der 3-mal(!) den bekannten Adress-Bereich (0x3C00-0x3FFF) des TRS-80 verwendet ...