N64 Programmierung in C+: Audiosequenz

  • Hallo Leute,


    hoffe das gehört hierher


    ich versuche eine Art OS für den N64 zu entwickeln. Eine fortschrittlichere IPL-ROM vom 64DD halt. Funktioniert auch sehr gut.


    Ich habe aber beim Anwenden einer Audiosequenzwiederholung in C+ ein Problem:


    Ich gehe ganz genau nach Plan vor, um eine MIDI-Sequenz in den N64-Buffercache zu laden, jedoch hängt er sich mitten in den Sequenzen auf und springt ins Errorlevel.
    Liegt es am Code?
    Hab hier den Code, vielleicht kann mir jemand helfen?


    Code im Anhang :D



    Greets,

    Meine Ausrüstung zum N64-Debugging:
    -- PK7402 Echtzeit Romwriter
    -- 3x N64, 2xDD, 2x Tuned N64, 1x PortableN64
    --Clausos Debug System (PC-GUI von mir)
    --N64 Colombridge
    und noch mehr... :)

    2 Mal editiert, zuletzt von jojo1 ()

  • Heyho jojo1,


    Als erstes mal vermute ich du verwendest C++ als Programmiersprache C+ gibts meines wissens nicht und wenn du C meinst, naja warum das plus daher vermute ich wohl das es ein tippfehler war, aber ich wollte nur nachfragen da eben zwischen C und C++ schon erhebliche unterschiede sind.


    Wie auch immer in jedem fall wäre noch wichtig zu wissen was in der Headerdatei "auSeq.h" enthalten ist bzw der Code eben^^. Da es kein Standardheader ist muss es wohl ein von dir geschriebener oder wo heruntergeladnener sein, der wäre aber schon sehr wichtig für die Codeanalyse.


    Was für einen Compiler/IDE verwendest du? Und auf welcher Plattform programmierst du?


    Da ich nämlich ein haufen Bezeichner im Code sehe die nicht Definiert sind.


    Was mir aber spontan so auffällt:

    Code
    void guAlignF(float m[4][4],
       float 32, float 64, 
       float 128, float 128)


    Öhm ja, also erstmal sieht das grundsätzlich schonmal komisch aus. Also entweder ist es der Prototyp einer Funktion, dann fehlt aber der abschluss mit ; am ender der Zeile. Oder es ist ein Aufruf der Funktion "guAlignF" was aber auch mit ; abgeschlossen werden muss. Aber ein Aufruf der funktion mit angabe von Variablentypen ohne explizit zu casten gibts eigendlich nicht.
    Alo könnte es noch die Definition einer Funktion sein, aber da fehlt die komplette Definition, die Funktion "guAlignF" macht also garnichts.
    Außerdem sind im Falle das es ein Prototyp oder eine Definition ist die Bezeichner nicht erlaubt. Bezeichner die rein aus Ziffern bestehen sind in C++ nicht erlaubt.


    Also der Komplette Code wäre mal nicht schlecht mit allen Header, abegesehen von den Standardheadern. Und auch alle anderen Dateien die du noch brauchst, irgendwo musst du ja auch eine Main() - Funktion haben.


    Am wichtigsten wären aber jetzt erstmal die sachen, Spache? Compiler? IDE? Plattform?

  • Hey Hellton,


    danke erstmal für deine Antwort!


    Ja war ein Tippfehler, meinte C++.


    ich habe jetzt erstmal guAlignF rausgeschmissen, jetzt scheint es ein wenig besser zu laufen. Bin grad nicht am PC, ich poste dann den vollen Code + Header.


    Compiler ist gcc, IDE ist Borland.
    Zielplattform ist der N64, welcher sowohl C als auch C++ versteht.




    Greets,

    Meine Ausrüstung zum N64-Debugging:
    -- PK7402 Echtzeit Romwriter
    -- 3x N64, 2xDD, 2x Tuned N64, 1x PortableN64
    --Clausos Debug System (PC-GUI von mir)
    --N64 Colombridge
    und noch mehr... :)

    2 Mal editiert, zuletzt von jojo1 ()

  • Arg, Borland, den mag ich ja persönlich überhaupt nicht.^^
    Aber nunja seis drum der Borland Builder is ja nicht schlecht, aber Ok er hat glaube leider keinen echtzeit Syntaxchek weswegen man sehr aufpassen muss. Und Fehler erst beim kompilieren erkannt werden.


    Kann dir zwar jetzt noch nicht durekt weiterhelfen, aber eine kleine Anmerkung noch.


    Der N64 versteht kein C oder C++ ;D
    Jeder Computer, genauer genommen der Prozessor, versteht nur OpCode. Darum hast du ja auch einen Compiler der aus deinem C++ Code dann OpCode erzeugt.
    Der Comnpiler muss dazu natürlich auf den Prozessor eingestellt sein für den Programmiert werden soll. Im Falle des N64 Prozessors auf MIPS R4300. Das kann übrigens auch ein Fehler sein warum was nicht läuft wenn der Code für den falschen Prozessor gebaut wurde läuft eben nichts^^. Der GCC sollte aber MIPS R4300 können.


    Nur so nebenbei, ich finds Toll dass du dich in so jungen Jahren schon so für die Programmierung interessierst, darum will ich dir aber auch ein paar Begrifflichkeiten beibringen, und ein Prozessor versteht hald nunmal keine Programmiersprache direkt. Die Programmiersprachen sind ja nur gemacht um für den Menschen leserlich zu sein und die arbeit zu erleichtern was raus kommt sieht dem C Code aber nicht im Ansatz noch ähnlich.


    Da wunderts mich übrigens gerade nicht warum der N64 trotz geringem Takt doch recht flott is, der verbaute NEC VR4300 Prozessor is ja ne RISC Maschiene mit 64 Bit ALU *-*
    Da bekommt man ja glatt Lust bissl zu programmieren für das Teil.

  • Die N64 Referenzanleitung schreibt:


    N64 Programming Basics


    N64 game applications are written in the C or C++ programming language. However, an N64 game program is structured somewhat differently from a general C language program.


    Different Programming Styles


    In the flow of an ordinary C program, each process executes sequentially to ensure that no processes are executed simultaneously. However, in the flow of an N64 C program, several processes may execute in parallel; that is, although they are not executing simultaneously they are executing together by taking turns -- pausing and restarting.


    The flow of an ordinary C program continues as if one person is doing the whole job by completing several tasks in a series. The N64 C program flow continues as if several people are working on different parts of the job at the same time by sharing the tools. Because of this, you must design your N64 game programs carefully to manage all the workers and to manage the tool sharing process.


    .. und auch :


    No main() Function in N64 Programs


    A typical C program starts from the beginning of the main() function and proceeds by calling library functions or originally defined functions.


    An N64 C program, on the other hand, has no main() function. The boot function (a function specified in the spec file) begins the processing. The boot function, however, may or may not call all the other functions the program uses. After providing various initializations and settings, the boot function may turn control over to a thread that takes charge of the main part of the program


    Deshalb hab ich auch kein main() Aufruf ;))



    Greets,

    Meine Ausrüstung zum N64-Debugging:
    -- PK7402 Echtzeit Romwriter
    -- 3x N64, 2xDD, 2x Tuned N64, 1x PortableN64
    --Clausos Debug System (PC-GUI von mir)
    --N64 Colombridge
    und noch mehr... :)

    Einmal editiert, zuletzt von jojo1 ()

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!