[Projekt] eigener Computer

Hier könnt ihr euch selbst, eure Homepage, euren Entwicklerstammtisch, Termine oder eure Projekte vorstellen.
Forumsregeln
Bitte Präfixe benutzen. Das Präfix "[Projekt]" bewirkt die Aufnahme von Bildern aus den Beiträgen des Themenerstellers in den Showroom. Alle Bilder aus dem Thema Showroom erscheinen ebenfalls im Showroom auf der Frontpage. Es werden nur Bilder berücksichtigt, die entweder mit dem attachement- oder dem img-BBCode im Beitrag angezeigt werden.

Die Bildersammelfunktion muss manuell ausgeführt werden, die URL dazu und weitere Details zum Showroom sind hier zu finden.

This forum is primarily intended for German-language video game developers. Please don't post promotional information targeted at end users.
RedGuy
Establishment
Beiträge: 111
Registriert: 17.09.2002, 17:27
Echter Name: Manuel Hofmann
Wohnort: Rottweil
Kontaktdaten:

[Projekt] eigener Computer

Beitrag von RedGuy »

Hi zusammen !!!

Mit diesem Thread möchte ich mir hier eine kleine Rubrik für mein Projekt erstellen ;) .

Das Projekt möchte ich hiermit vorstellen und lautet folgendermaßen:

Ein eigener Computer :geek: !!![/b]

Grob:
Ich hab schon meinen eigenen Prozessor konzeptioniert.
Eine Programmiersprache ist schon fertig.
Ein Betriebsystem kommt noch. Dieses soll auf einem ROM auf dem Prozessor aufgebracht sein.
Ein eigener Grafik- und Soundchip sind in Planung.
VGA - Anschluss für Monitor, Cinch - Buchse für Sound, PS2 je für Tastatur und Maus, Flash-Chip für Festplatte, eSATA - Anschluss für optisches Eingabegerät.

Das know-how hierfür habe ich mir selbst angeeignet und ist für alle genannten Aspekte vorhanden - außer für eSATA und optisches Laufwerk :( ...

Das Betriebsystem hat eine Besonderheit und passt deshalb ganz besonders in dieses Forum: EIN 3D - DESKTOP !!!!!!!!!!!!!


Das Ganze System ist schon ziemlich fertig konzeptioniert.
Falls nun Details erwünscht sind - einfach schreiben und ich poste das Ganze !!!!!!!
Und was haltet Ihr davon ?!

Gruss
RedGuy

[obsolete]PS: an die Moderatoren: ich hab grad entdeckt dass es einen Vorstellungsbereich für Projekte gibt :o . Könnte man den Thread irgendwie bitte verschieben ?!
Zuletzt geändert von RedGuy am 17.10.2016, 19:00, insgesamt 2-mal geändert.
Benutzeravatar
Krishty
Establishment
Beiträge: 8227
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von Krishty »

Erledigt.

Ich habe mich auch schon in diese Richtung umgeschaut. Es gibt ja z.B. mit OpenRISC eine offene CPU-Architektur, aber selber gießen möchte man die Teile natürlich nicht :)

3D finde ich für den Anfang zu gewagt, vor allem ohne eigenen 3D-Beschleuniger. Du solltest die Komplexität minimieren wo es nur geht. Aber nichtsdestotrotz – bin gespannt!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Oprah Noodlemantra
Beiträge: 19
Registriert: 30.06.2015, 19:03

Re: [Projekt] eigener Computer

Beitrag von Oprah Noodlemantra »

Was ist denn das Besondere an deiner Programmiersprache und dem Prozessor?

Wie fängt man denn so ein Projekt überhaupt an?
Matthias Gubisch
Establishment
Beiträge: 470
Registriert: 01.03.2009, 19:09

Re: [Projekt] eigener Computer

Beitrag von Matthias Gubisch »

Klingt sehr spannend, ich möchte mehr Details.

Warum machst du das ganze denn? Zu Lernzwecken, einfach weil du Bock drauf hast oder hast du einen bestimmten technischen Hintergrund?
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von xq »

Hey RedGuy, geile Sache!

Ich bastel ja auch an verschiedenen Einzelkomponenten in die Richtung, habe ebenfalls eigene CPU mit passender Programmiersprache. Muss die CPU jetzt nur eben noch realisiert bekommen, das wird aber wohl ein wenig Aufwand.

Bin gespannt, was von dir noch für Infos kommen.

Zu 3D-Desktop: Guck dir mal das hier an:
http://opencores.org/project,wf3d

Grüße
Felix
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
RedGuy
Establishment
Beiträge: 111
Registriert: 17.09.2002, 17:27
Echter Name: Manuel Hofmann
Wohnort: Rottweil
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von RedGuy »

Hi !

Also:

Komplexität spare ich ab und zu ein. Aber auf jeden Fall nicht bei meiner 3d-Oberfläche ;) . Einen eigenen 3d-Beschleuniger habe ich, wie schon geschrieben, jedoch in Planung ;) ! Ich weiß auch schon was ich da alles implementieren werde...

Also das besondere an meinem Prozessor ist seine Architektur. Nämlich eine 128bit OISC (One instruction set computer) !!!!!!!!!!!!!!!!!!!!!!!
Er kopiert nur Daten. Zum Beispiel zur ALU. Gleich dazu mehr.
Der Compiler für meine Programmiersprache generiert (schon) Maschinencode für diesen Prozessor.
Der Prozessor und meine Programmiersprache kennen (zumindest im Moment) nur zwei Datentypen: natürliche Zahlen und vorzeichenbehaftete Fließkommazahlen.
Die Programmiersprache ähnelt basic. Aber lange Rede kurzer Sinn, ich zeige Euch mal ein aktuelles Testprogramm IN MEINER EIGENEN PROGRAMMIERSPRACHE - dann könnt Ihr ein bischen knobeln was die Befehle bedeuten:

Code: Alles auswählen

decl x Natürlichezahl
decl y Fließkommazahl
decl z Fließkommazahl
decl z1 Fließkommazahl

x = 10
y = 2.5

z = x~

z1 = z + y


decl Ergebnis Natürlichezahl

if (z1 > y)
    Ergebnis = 1
else
    Ergebnis = 0
endIf


decl Zähler Natürlichezahl

Zähler = 0

infinite
    Zähler = Zähler + 1
    if ( Zähler = 10 )
        break
    endIf
endInfinite

infinite
    Zähler = Zähler + 1
    if ( Zähler = 20 )
        goto endOfProgram
    endIf
endInfinite


:endOfProgram

endProgram






function TestHeader(x[,] Ganzzahl, y Fließkommazahl)
    y = y + 1.25

    return y

endFunction
Jetzt noch einmal zum Prozessor. Dieser kopiert nur Daten von einem Ort zu einem Anderen.
Man könnte sich nun Fragen: Wie führt man nun eine Addition aus ?

Nun - der Prozessor besitzt ebenfalls eine ALU (Arithmetic Logic Unit; darin befinden sich alle mathematischen Operationseinheiten).
Wenn nun eine Addition durchgeführt werden soll kopiert man einfach jeweils die Summanden zu speziellen Summandenregistern der Additionseinheit. Anschließend holt man das Ergebnis von einem Additionsergebnisregister ab.

Man muss nur Daten kopieren.

Das hat Vorteile. Zum Beispiel braucht man keinen Instructiondecoder (um viele Instruktionen steuern zu können).

So. Das Ganze nicht nur in 64bit - sondern in 128bits !!!!!!!!! Das hatte Gründe für mich. Nämlich bei der Kodierung von Fließkommazahlen als Binärzahl.
Das war ein Thema für sich - das sage ich Euch...
Also ich habe mich für 128bits entschieden, da ich somit über meine Kodierung 64bit große Vorkommastellen darstellen kann. Das habe ich mir als Voraussetzung vorgegeben (man will ja auch ganz große Festplatten ansteuern und Zukunftsfähig sein).

Das obige Programm liefert übrigens einen Maschinencode, nämlich über meinen compiler - hier ein Auszug davon:

Code: Alles auswählen

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001010
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101
00000000000000000000000000000000000000000000000000000000000000101000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Das Ganze sind die ersten beiden Instruktionen für die ersten beiden Variablendefinitionen.
Man sieht hier schön die 128bit - ich nenne es Wörter- .
Eine Instruktion besteht aus vier 128bit Wörtern (deshalb der Absatz).
Die 6. Zeile ist die kodierte Fließkommazahl 2.5 .


Das Projekt habe ich vor ca. 12 Jahren angefangen. Es ist mein Hobby und voll mein Gebiet !!!
Mich haben die Grundtechnologieen Prozessor, Betriebsystem, Programmiersprache schon immer interessiert.
Angefangen hat es mit einer Philosophie über Prozessoren. Was muss ein Prozessor überhaupt können ?

Die Realisierung des Projektes wird noch ein Problem darstellen.
Erstens erledige ich soviel Arbeit wie möglich alleine. Zum Beispiel 3d-Beschleunigungschip. Allerdings kenne ich mich nicht mit allem aus.
Zum Beispiel USB3.0 Anschlüsse, eSATA - Anschluss, optische Laufwerke (also insbesondere Funktionsweiße/Treiber).
Außerdem muss, wie MasterQ32 schon sagt, das Ganze noch gefertigt werden.

Hierzu brauche ich dann jemanden, der sich mit den Maschinen (mit Chipfertigung) auskennt oder einfach eine Firma dazu, die mir das erledigt.

Das Ganze ist ein Riesenprojekt !!!! Und es macht auf jeden Fall riesig Spaß !!

Gruss
RedGuy
DerAlbi
Establishment
Beiträge: 269
Registriert: 20.05.2011, 05:37

Re: [Projekt] eigener Computer

Beitrag von DerAlbi »

Wenn man knobeln muss, was eine Programmiersprache bedeutet, dann ist da etwas grundlegend falsch oder es ist eine Parodie. ;-)
Was die Herstellung angeht, muss ich dich leider auf den Boden der Tatsachen zurückholen: Ein mm² kostet selbst in billigen Technologien mindestens 4stellig und du musst mindestens "ganz viele" (30 - 50) Stück abnehmen und eine Mindestfläche einhalten.
Und das alles nur, damit du danach merkst, dass der ESD-Schutz nicht ausreichend ist oder sonst irgendwas falsch läuft. Mal davon abgesehen, dass Packaging nochmal das selbe kostet, wie die Herstellung selbst. (Das ist prinzipiell ein Stückzahlproblem)
Deine beste Option ist ein FPGA als Endstation !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! mehr Ausrufezeichen!!!!!!!!!!!!!!!!!!!!!!
Wenn nun eine Addition durchgeführt werden soll kopiert man einfach jeweils die Summanden zu speziellen Summandenregistern der Additionseinheit. Anschließend holt man das Ergebnis von einem Additionsergebnisregister ab.
Die Adresse der Memory-Mapped Register ist doch aber konstant. damit ist das Schreiben an diese Adresse letztlich eine spezielle Instruktion die man "SetAdditionOperand1" oder "sao1" ( :-D ) nennen könnte.
Was du beschreibst ist das, was jede Pipeline im Hintergrund macht. Muxer setzen [operanden zu spezieller hardware schicken], Ergebnis auslesen und zurückschreiben. Du zerlegst die Instruktionen schlicht in die einzelnen Pipeline-Stages, ohne eine Piepline zu haben.
Sowas gabs schon früher.. dass die Compiler das (low-Level)Pipelining übernommen haben, hat sich aber irgendwie nicht durchgesetzt.
Ich finde es auch etwas komisch, dass du 128bit Codewörter hast nur damit die Immediates reinpassen. Damit hast du definitiv immer mehr Programmcode als du Daten mit einer Instruktion verarbeiten könntest. Das ist der Grund, warum man seine Arbeitsumgebung in Registern hält. Damit man eben nicht alles in die Instruktionen reinhauen muss.
jetzt noch einmal zum Prozessor. Dieser kopiert nur Daten von einem Ort zu einem Anderen.
Deine Vorstellung von Prozessoren ist merkwürdig. Also die Tatsache, dass du das als herausstellenswert ansiehst: jeder Prozessor tut nichts Anderes als das, was du beschreibst. Die Tatsache, dass gut durchdachte Architekturen Muxer setzen, anstatt immer über den Adressbus wandern hat seine Gründe (Geschwindigkeit, Stromaufnahme), denn je weniger Logik [und desto kürzer angebunden] im Spiel ist, desto effizienter wird das Ganze. Ein Adressbus ist nichts anderes als ein hochflexibler Muxer.
Also ich habe mich für 128bits entschieden, da ich somit über meine Kodierung 64bit große Vorkommastellen darstellen kann. Das habe ich mir als Voraussetzung vorgegeben (man will ja auch ganz große Festplatten ansteuern und Zukunftsfähig sein)
Jede 8bit-Architektur kann das indem man große Daten stückweise bearbeitet. Die Wortbreite hat überhaupt nichts damit zu tun.
RedGuy
Establishment
Beiträge: 111
Registriert: 17.09.2002, 17:27
Echter Name: Manuel Hofmann
Wohnort: Rottweil
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von RedGuy »

Hi !

Also die Produktion der Chips, wenn es dann mal wirklich so weit wäre, wäre schon eine Sache für sich.


Was schätzt Ihr übrigens was das Komplizierteste an der Programmiersprache war ?!

Gruss
RedGuy
NytroX
Establishment
Beiträge: 358
Registriert: 03.10.2003, 12:47

Re: [Projekt] eigener Computer

Beitrag von NytroX »

Cool, eine Move-Machine. Halte ich für sehr vielversprechend, wollte ich auch schon immer mal haben...
Das coole ist, dass man SIMD (oder eigentlich sogar MIMD) quasi kostenlos bekommt. Ist halt nicht so energieeffizient, aber ich glaube du willst sowieso keinen Mobile-Prozessor bauen. :mrgreen:
Wechselst du immer zwischen moves und berechnungen (also je 2 takte ein tick/move und ein tock/berechnung), oder läuft das gleichzeitig?

PS: vielleicht lohnt es sich bei der Anzahl an BITs einfach fixpoint zahlen zu nehmen, dann musst du gar nicht mehr zwischen natural/float unterscheiden; und dann geht auch multiplizieren und dividieren super einfach, sofern du Hardware-FMA baust :-)
RedGuy
Establishment
Beiträge: 111
Registriert: 17.09.2002, 17:27
Echter Name: Manuel Hofmann
Wohnort: Rottweil
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von RedGuy »

@NytroX

also ich will aber zwischen natürliche Zahlen und Fließkommazahlen unterscheiden, da die Berechnung von Natürlichen ggf. schneller ist
Aber guter Gedanke !

Das mit dem Zusammenhang von Kopierinstruktion und Berechnung ist so wie ich es geschrieben habe und immer gleich.

Gruss
RedGuy
Dummie
Beiträge: 97
Registriert: 09.02.2004, 20:45

Re: [Projekt] eigener Computer

Beitrag von Dummie »

Ziemlich cool. Ich hab auch schon mal Interpreter, etc. geschrieben und finde das noch immer sehr interessant. Allerdings finde ich es nicht gut, dass du manche Begriffe eingedeutscht hast. Außerdem sind viele Begriffe recht lang.

Wird der Code vorher optimiert? Es sieht ja so aus als wäre alles statisch, da es keine Eingabebefehle gibt. In dem Fall sollte sich vieles optimieren lassen :)
RedGuy
Establishment
Beiträge: 111
Registriert: 17.09.2002, 17:27
Echter Name: Manuel Hofmann
Wohnort: Rottweil
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von RedGuy »

Hi !

@Dummie

Das Eindeutschen hat den Grund, dass ich das Betriebsystem erst einmal mit dem deutschen Zeichensatz ausstatte - das ist sowas wie ein Gesamtkonzept :) ...
Der Compiler ist hochoptimiert - es gibt viele Optimierungsaspekte. Arrays KÖNNEN bei mir dynamisch sein.

Gruss
RedGuy
Benutzeravatar
Zudomon
Establishment
Beiträge: 2253
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von Zudomon »

NytroX hat geschrieben:PS: vielleicht lohnt es sich bei der Anzahl an BITs einfach fixpoint zahlen zu nehmen, ...
Würde ich auch so machen. Und wenn du schon dabei bist... noch auf 256 Bit erhöhen...
Wenn ich mich nicht irre, sollte das dann auch ausreichen, um jeden Punkt im Universum adressieren zu können, vorausgesetzt dieses ist auf Plancklänge quantisiert :D
http://htwins.net/scale2/

PS: Mich würde ja auch ein eigener Rechner interessieren... aber zuvor wäre autonome Versorgung interessant (Wohnen, Wasser, Nahrung, Strom, Wärme, Internet) :lol:
DerAlbi
Establishment
Beiträge: 269
Registriert: 20.05.2011, 05:37

Re: [Projekt] eigener Computer

Beitrag von DerAlbi »

Naja dann nimmt man lieber gleich 512bit, weil wenn du ein halbes Universum nach drüben gibts, wirst du dort auch ein universum finden, das die gleiche Größe hat, sodass man dann dreiviertel Universen rübergehen kann usw ^_^
Das wird spannend in der Addierschaltung, wie man das hinbekommt. Ein halbes Universum zu wandern dauert eeewig.

Aber mal im ernst: Fixkomma ist kein Ersatz für Float, sondern ein Workaround für die Schwächen von Float, sowie Float ein Workaround zu den Schwächen von Fixkomma ist. Das ist komplett Situationsabhängig was man nehmen kann oder nehmen sollte.
RedGuy
Establishment
Beiträge: 111
Registriert: 17.09.2002, 17:27
Echter Name: Manuel Hofmann
Wohnort: Rottweil
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von RedGuy »

Hi zusammen !

Also das mit Abstand Schwierigste an der Programmiersprache bei mir waren/sind die Zuweisungen von arrays.

Das gibt jeweils ein RIEESIGER (riesig ist natürlich relativ) Maschinencode 8-) ...


Die genaue Spezifikation poste ich wenn ich alles fertig entwickelt habe (bisher steht nur der Grundkonstrukt).

Gruss
RedGuy
RedGuy
Establishment
Beiträge: 111
Registriert: 17.09.2002, 17:27
Echter Name: Manuel Hofmann
Wohnort: Rottweil
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von RedGuy »

Hi !!

Also: Hiermit, wie versprochen, die Spezifikation meiner Programmiersprache 8-) !!!

DER AKTUELLE STAND:
Sub-Projekt Programmiersprache: bug-fixing im Bereich der arrays.
Sub-Projekt Betriebsystem: kernel - Konzept ist im Detail fertig, Treiber und GUI Konzepte sind fertig
Sub-Projekt Mikrochips: Chip - Design ist ca. zur Hälfte fertig; der Prozessor-core ist implementiert. Es fehlen so aufwendige Dinge wie Speicher,
welche ich automatisiert implementieren werde (automatisiert z.B. auf Grund von address-decoding).
Sub-Projekt Graphik-chip: debugging von Texturierung; das Kommunikationsprotokoll für zwischen Grafikchip und Hauptprozessor (also Betriebsystem, da auf ROM) ist fertig implementiert 8-)


Jetzt zur Spezifikation meiner Programmiersprache:
Ich hoffe Ihr könnt alles entziffern (manches ist noch Stichwortweiße) bzw. verstehen :D .

Mal sehen was Ihr davon haltet.

Und hier gehts los:

Zum Verständnis: Arise heißt meine Programmiersprache, Events heißt mein Betriebsystem

(1)
Schlüsselwörter ; Bedeutung

decl ;Variablendeklaration
infinite ; Endlosschleife (ist bei meiner Programmiersprache DIE Schleife)
endInfinite
break ; Ausbruch aus der Endlosschleife
= ; Zuweisung
delta ; Maschinencode - interface; siehe unten
function ; Funktionsdeklaration (Funktionen besitzen bei mir KEINE Parameter; die Übergabe geschieht über globale Variablen)
endFunction
return ; Funktionswertrückgabe
endProgram ;Anweisung für mein Betriebsystem, das Programm zu beenden
if
else
endIf
: ; goto - Label
goto ; Sprungbefehl á la goto :)
events ; Parallelisierungsbefehl: Multi-threading; das Betriebsystem erhält wieder die Kontrolle und sieht zu wie es gemäß seiner multi-tasking/multi-threading Strategie weiter verfährt
' ; Kommentar
redim ; Redeklaration von dynamischen arrays !!! (siehe unten)


(2)
Variablendeklarationen:
Festlegung von Menge der Zahlen und die Dimension (Vektor oder Matrix und die Dimension(en))
wie in der Mathematik

Multidimensionale arrays (über zwei Dimensionen hinaus) sind (noch) nicht unterstützt

Variablennamen dürfen beliebige Bezeichnungen aufweisen - sogar Zahlen !!!
bei Zahlen ist der Variablennamen dann allerdings ein override zu einer Zahl.

Variablen müssen nach der Deklaration noch initialisiert werden, sonst steht der aktuelle Speicherinhalt drin!

(3)
Zuordnungen und Typsicherheit
Variablen müssen nach der Deklaration noch initialisiert werden, sonst steht der aktuelle Speicherinhalt drin!

statische Zuordnungen
Typ: Fließkommazahl = 8 (man muss nicht 8.0 schreiben)
Ganzzahl = 10.4 geht natürlich nicht

Operationen müssen typsicher sein. Das bedeutet, dass alle Operanten vom gleichen Typ sein müssen, wie die Zielvariable.

Bei Fehler gibt Compiler Fehlermeldung aus

array - Zuordnungen:
decl xmatrix[2,3] Natürlichezahl
xmatrix = ((2,3)(3,2)(3,3))

decl xvector[4] Natürlichezahl
xvector = (2,3,y,5)

für arrays gibt es mindestens ein Element !!! keine leere Menge !!!
das da eine Variable mindestens einen Wert speichern muss !!!

die array Definition muss stets die gleiche Größe aufweisen, wie der Ziel - array groß ist !
->Variablendefinitionskonform

(4)
dynamische Arrays:
bei dynamischen Arrays kann eine sogenannte redim space angegeben werden
Diese bestimmt wie viel Platz dass nach der tatsächlichen Größe des Arrays für eventuelle Größenänderungen noch freigelassen wird.
Größenänderungen von dynamischen Arrays geschieht über den redim Befehl.
Mit Hilfe von diesem können die Dimensionen des dynamischen arrays neu festgelegt werden.
Die darin befindlichen Daten werden zur Laufzeit entsprechend der Größenänderung umkopiert.
Der allokierte Speicherplatz bleibt nach dem redim Befehl gleich.

Eine neue redim space kann beim redim Kommando nicht angegeben werden.
Beim Überschreiten der redim space beim redim Kommando mittels der angegebenen Dimensionen wird das Programm beendet.

Syntax:

decl dynamicArray[dimension1,dimension2] 20
decl dynamicArray[dimension1,dimension2] dynamicRedimSpaceVariable

redim dynamicArray[newsize1,newsize2]

die Zuweisung der redim space kann dynamisch (per Variable) geschehen.
Die Transformation der Daten des dynamischen Arrays während eines redim Befehls geschieht nach folgender einfacher, selbsterklärender Regelung:
Wenn der array größer wird, liegen die alten Daten am Anfang darin,
wenn der array kleiner wird, werden die Daten am Ende abgeschnitten.


(5)
operationen:
a&b
a|b
a^b (XOR)
a=b
a<b
a>b (nutzt intern b<a)
a<=b
a>=b
a+b
a-b
a*b
a/b
a%b (Modulo als Fließkommazahloperation mit Natürlichezahl-Ergebnis)
a! (invert)
a~ (cast)
a>>f (shift right and fill with f)
a<<f (shift left and fill with f)

(6)
Funktionen als Methodik ("es geht wirklich nicht anders")
nicht nur als Modularisierung / reusability

nur globale Variablen, keine Parameter als lokale Variablen, da
1. Kontext sowieso gegeben (auch bei Funktionen als Methodik)
2. prinzipiell nur globale Variablen (auch keine Kapselung)

Funktionswerte (return command) müssen in die aufrufende Wertzuweisung (z.B. x[2] = functionX) passen

(7)
beliebige Zuweisung/Einführung von Binärzahlen

Wenn Sie einer Variable eine Zahl zuweisen möchten, die im Dualsystem gegeben ist, dann geben Sie einfach die 128stellige Repräsentation ein.
Dies können Sie für alle Fälle einer Einführung einer Zahl in das Arise-System erledigen (zum Beispiel auch beim Indizieren von arrays - mit Binärzahlen).

Beispiel:
x = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011000000000000000000000000000000000000

Dies gilt auch für Fließkommazahlen.

(8)
binäre Fließkommazahlen sind als binäre Ganzzahlen kodiert.

der Aufbau einer Fließkommazahl ist wie folgt:

1bit für Read/Write reserviert + 1 bit Vorzeichen ( 1 bedeutet minus; 0 bedeutet plus)
+ 62 bits Vorkommastellen ( also 2^0 aufwärts)
+ 64 bits Nachkommastellen negative Zweierpotenzen ( also 2^(-1) abwärts)

(9)
Einschränkungen bei Arise Alpha
eine Operation per Zuweisung zum Beispiel: x = a + b und nicht x = a + b + c
extra Zuweisung notwendig pro rechtsseitige Arrayindizierung: x = y und nicht x[a] = y
keine Array-Indizierung bei return Befehlen: also return x und nicht return x
als direkte Rückgabewerte bei return Behlen nur return 2.5 und nicht z.B. return (2,3) ; arrays funktionieren also nicht, nur Skalare

keine direkt rekursive Funktionen
diese müssen mit einer indirekten Rekursion ersetzt werden

keine multi-dimensionale arrays, lediglich Vektor und Matrix sind möglich

(10) multi-threading mit "events"
benutzerdefiniert und Systemvoraussetzung (so dass multi-tasting per System möglich ist)

(11)
Array safety
checks for array equality and indexOutOfRange

konsequent umgesetzt bezüglich Statik (z.B. copy von Vektor auf Matrix geht nicht) und Speicherkonsistenz
allerdings Matrizen könnten z.B. mit unterschiedlichen Dimensionen aber gleicher Gesamtgröße kopiert werden
aus Entwicklungszeitgründen
bei Fehler wird Programm beendet

Kopieren ausschließlich statischer arrays wird allerdings auch nur zur run-time überprüft - aus Entwicklungszeitgründen

(12) Maschinencodeinterface 9,1,3,3b
dynamisches Maschinencode interface mit "delta"

delta(299,120 , 300,120)
delta(x,y)
delta(200,120 , x)

delta(5,100, y) // schreibt die Zahl 100 nach y


(13)
Ergebnisregister an Prozessoreinheiten als temporären Speicher verwenden
innerhalb eines Events

(14)
Bei automatisierten Kopiervorgängen, bei denen Quell- und/oder Zieladresse von einer Variablen abhängen
gibt es zwei Prozessorerweiterungen.

Dies ist wichtig wenn man z.B. einfach Daten automatisch (also z.B. Massenweiße) von USB - Stick auf Festplatte kopiert.

Die Erste ist für von einem offset/Variablen abhängige Quelladresse.
Die Zweite ist für eine von einem offset/Variablen abhängige Zieladresse.

[data]offsetting mit internalDataOffsetCopy
read from RAM
2 Varianten (read result from register, oder in einem Wisch)

// internalDataOffsetCopy for data offsetting

// device represents an extension for the core delta processor
// otherwise data offsetting would not be possible

// reads an address given by an offset (given by a previously to a register written offset date)
// writes the result date to the result register AND to Delta date

write to RAM
fast advanced copy (faster than software copy to offset)

// internalDataOffsetCopy for data offsetting

// device represents an extension for the core delta processor
// otherwise advanced copy would not be possible EASILY

// copies a Delta date to a specific address given by an offset (given by control date)

(15)
software copy to offset (further offsetting)
->eine Instruktion wird dynamisch geschrieben
->Gemeinsamkeit und Unterschied zu write to RAM

(16)
das RW-bit und die Daten-Befehlsbeziehung
Spezialfall: Instruction-Register 4
copy to offset - Software - Fälle

(17)
Compilerdefinition und -konzept:

Compiler fügt eine Sequenz von code zusammen
Parser
Module

(18)
der compiler
Parser
Module
Funktionskompilierung mit typhaftem Programmbaum [und "outer rim"]

(19)
compiler - Optimiertheit
hochoptimiert auf Statik - außer auf manche elektrotechnische Interna (-> interne Geräte interop)
und außer bei rechtsseitigen Variablenzuweisungen (?)
und außer bei Variablenzuweisungen und return Befehlen (aus Entwicklungszeitgründen wird nicht der Statikfall berücksichtigt) (?)

Optimierung bei Kopiervorgang statischer und dynamischer arrays ?!

// für einen Kopiervorgang von statischen arrays muss dessen Größe berücksichtigt werden
// ->Optimierung; z.B. 2 Elemente werden direkt kopiert - mehr werden über eine Schleife kopiert
// bei dynamischen arrays wird immer über eine Schleife kopiert



Compiler Optimierungensoptionen

(20)
Daten im Speicher - absolut (von Programmen geschrieben und von resourceManager gelesen)

backjump date for dynamic memory allocation and multi-threading for resource manager

Daten im Speicher - RELATIV (von resourceManager verwaltet)

data processing information
dynamicIDcurrent
metaInfoOffsetCurrent
offsetSource
endOffsetSource
offsetDestination
endOffsetDestination
sizeDimension1source
sizeDimension2source
arrayPosSource
arrayPosDestination
sizeDimension1destination
sizeDimension2destination
lengthArraySource
lengthArrayDestination
arrayPosNormal
arrayPosNormalEnd
xArraySource
yArraySource
xArrayDestination
zArrayCurrent
---
skalare Variablen
---
statische ein dimensionale Arrays
---
statische zwei dimensionale Arrays
---
dynamic array meta information (1):
offsetDynamicArrays
---
dynamic array meta information (2):
offset
endArrayOffset // optimization date for copying the arrays
sizeDimension1
sizeDimension2
redimSpace
---
dynamic arrays

(21)
Entwicklungsprozess
erst Delta Prozessor
dann Events und Arise Konzept
dann Arise Alpha
dann Events
virtueller Monitor VGA
clock chip
Grafikchip
emulative Tastatur & Maus PS2
PS2 - chip
Hauptprozessor

Erweiterungsmöglichkeiten (Delta-System)
z.B. USB (z.B. auch für Drucker), eSATA (z.B. auch für optisches Laufwerk), Netzwerk, SD-Card-Reader
parallel dazu VLSI - Design
dann Events - Software
dann Arise-Events IDE
---
Arise Alpha IDE
core programming option
Wenn man nicht für Events programmiert, sondern zum Beispiel events programmiert, dann
sind bestimmte API - Elemente nicht definiert- zum Beispiel die Speicherallokation über Events.
Wenn man also komplett eine eigene Applikation schreibt, bitte Häkchen für core programming setzen.

Achtung: Laufzeitfehler bei arrays werden nicht mehr abgefangen...
Oprah Noodlemantra
Beiträge: 19
Registriert: 30.06.2015, 19:03

Re: [Projekt] eigener Computer

Beitrag von Oprah Noodlemantra »

Wofür wird return gebraucht, wenn die Funktion doch einfach eine globale Variable schreiben könnte?

Es wäre ohne return wohl etwas aufwändiger: Returnvariable reservieren, Funktion aufrufen, Wert der Returnvariable an eine andere Variable schreiben.
RedGuy
Establishment
Beiträge: 111
Registriert: 17.09.2002, 17:27
Echter Name: Manuel Hofmann
Wohnort: Rottweil
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von RedGuy »

@Oprah Noodlematra

also das ist richtig. daran hab ich nicht gedacht :D ! Das hab ich wohl aus den Gründen so implementiert, da halt eine Funktion auf jeden Fall so definiert ist.

Danke für den Tipp !!!

Gruss
RedGuy
RedGuy
Establishment
Beiträge: 111
Registriert: 17.09.2002, 17:27
Echter Name: Manuel Hofmann
Wohnort: Rottweil
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von RedGuy »

Der Hauptteil von meinem Betriebsystemkernel ist fertig.

Also man könnte sagen mein Betriebsystemkernel ist fertig.


Dateisystem, GUI (samt Schrift), Treiber sind nur noch eine Erweiterung dessen.

Den fertigen Kernel nenne ich den sogenannten Resourcemanager und dieser umfasst ca. 600 Zeilen code in meiner eigenen Programmiersprache (Arise).

Ich weiß der Kernel ist sehr schlank, aber Leistungsfähig ;) !!!

Gruss
Red
Benutzeravatar
Zudomon
Establishment
Beiträge: 2253
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von Zudomon »

Ich finde dein Projekt sehr spannend!
Kannst du nicht mal ein YouTube Video machen, wo du deinen Rechner vorführst?
RedGuy
Establishment
Beiträge: 111
Registriert: 17.09.2002, 17:27
Echter Name: Manuel Hofmann
Wohnort: Rottweil
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von RedGuy »

Hi !!

Danke !

Also ein youtube-Video bringt im Moment nichts, denn ich habe NOCH nichts Anschauliches zum vorführen.

Wenn es soweit ist, geb ich natürlich Bescheid !!!


Also gestern hab ich den Treiberbereich konzeptioniert. Heute kommt die GUI dran ;) . Zur Erinnerung: ich hab ne 3d GUI 8-) !!!!!!!!!!!!!!!!!


Gruss
RedGuy
Benutzeravatar
Zudomon
Establishment
Beiträge: 2253
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von Zudomon »

Ja echt krass, dass es eine 3d GUI wird!!!
Aber davon wirst du uns doch sicher dann Screenshots zeigen können, oder?

Ich meine du hättest irgendwo mal gesagt, dass du für dein System auch eine 3d Hardware Beschleunigung bauen würdest?
Basiert dein 3D System dann auf rasterizing oder schon auf raytracing? Wenn es letzteres ist, kannst du dann auch path tracing implementieren? Und ist die 3d beschleunigung dann fixed function oder shader basiert? Und wenn shader, welche shadertypen hast du dir überlegt?
RedGuy
Establishment
Beiträge: 111
Registriert: 17.09.2002, 17:27
Echter Name: Manuel Hofmann
Wohnort: Rottweil
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von RedGuy »

Hi Zudomon !!

Selbstverständlich kann ich dann screenshots zeigen ;) .

Tatsächlich, ich baue eine hardware Beschleunigung (3d-Grafikchip).

AAALSO.

Das Ganze basiert auf rasterizing. Außerdem habe ich einen Entwicklungsprozess eingeplant:
Im Moment verwende ich keine shaders und leider habe ich nicht einmal eine lightning (außer ein einziges ambientes Licht) :( .
Das erhoffe ich mir durch Zusammenarbeit (z.B. mit ZFX) zu erarbeiten.
Ich habe einen eigenen Algorithmus für texture mapping und rasterizing entwickelt (siehe https://zfx.info/viewtopic.php?f=5&t=4156).


Also etwas Geduld und ich habe super Dinge zu zeigen !!!

Gruss
Red
RedGuy
Establishment
Beiträge: 111
Registriert: 17.09.2002, 17:27
Echter Name: Manuel Hofmann
Wohnort: Rottweil
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von RedGuy »

Hi !

Also ich komme Riesenschritte voran:

Bin grad bei der GUI und zwar an der Stelle wo eine Anwendung sein Desktop-Icon definiert und das Icon vom Betriebsystem auf die Festplatte geschrieben wird.
Bei meinem Betriebssystem wird das von der Anwendung erledigt (also das Festlegen des Icons).

AUßERDEM - EIN RIESEN DURCHBRUCH. Ich weiß, wie ich das Ganze (den kompletten Computer) kostengünstig für frühe Anfänge produzieren kann.

Nämlich als FPGA - Variante !!!

Ich hab mir vor kurzem ein FPGA - board zugelegt:
http://www.ebay.de/itm/Altera-CycloneIV ... 1768063938
Man beachte bei dem Board den einfach ansteuerbaren VGA-Anschluss und den wohl relativ einfach ansteuerbaren PS/2 - Anschluss (nehme ich für die Maus).

Das müsste bald ankommen ;) .

Habe mich schon in VHDL (Programmiersprache für FPGA) eingearbeitet ;) !
Mit VHDL kann ich meinen kompletten Prozessor, samt Betriebsystem (welches bei mir ja als ROM auf dem Prozessor aufgebracht ist) komplex beschreiben 8-).

Gruss
RedGuy

PS: Ein Testbild wird bei meinem Graphikchip schon angezeigt. Lediglich habe ich Probleme mit der Grafikengine unter JAVA :( (siehe auch hier https://zfx.info/viewtopic.php?f=5&t=3880&p=49345). Möglicherweiße portiere ich meine virtuelle Maschine samt virtuellen Monitor, welche das Testbild generieren nach C#.
Unter C# habe ich die Probleme nicht...
RedGuy
Establishment
Beiträge: 111
Registriert: 17.09.2002, 17:27
Echter Name: Manuel Hofmann
Wohnort: Rottweil
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von RedGuy »

Hi !

yep! das FPGA-board ist da.
Hab heute meinen Command-Counter des Prozessors (128bits !!!) auf binärer Ebene automatisiert hardcoded in VHDL programmiert 8-)

Gruss
Red
Benutzeravatar
Zudomon
Establishment
Beiträge: 2253
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von Zudomon »

RedGuy hat geschrieben:Also etwas Geduld und ich habe super Dinge zu zeigen !!!
Wann kommt denn mal was?
Seit Monaten bekommen wir, mal abgesehen von den beiden "fotorealistischen" Dreiecken, nichts wirklich zu Gesicht.
Okay, das ist nicht ganz fair. Es gibt ein paar Beschreibungen, aber ehrlich gesagt bin ich geistig ein bisschen zurückgeblieben und kann damit überhaupt nichts anfangen. Also will sagen, es ist mir alles zu hoch. Zwar kann ich erahnen, dass das, was du da machst, wahnsinnig krass sein muss. Aber ich brauche Bilder oder besser noch Videos um das dann zu begreifen. In Büchern gucke ich mir auch nur immer die Bilder an.
RedGuy
Establishment
Beiträge: 111
Registriert: 17.09.2002, 17:27
Echter Name: Manuel Hofmann
Wohnort: Rottweil
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von RedGuy »

Hi !

Hast recht - hinundwieder beschreibe ich mal was :D - z.B. vor allem https://zfx.info/viewtopic.php?f=5&t=4156#p53807

Allerdings bis es zur ersten Betriebsystem-Testapplikation kommt und die dann auf dem FPGA Chip läuft kann es noch ein oder zwei Monate dauern. Dieser Zeitraum ist realistisch.

Das kann ich dann allerdings auf youtube stellen !

Also Du must Dir vorstellen, es handelt sich um ein komplettes Betriebsystem. Soetwas dauert schon seine Zeit, wobei ich eigentlich brutal schnell dabei bin :P ...

[EDIT]
Also ich hab schon etwas zu zeigen. Die virtuelle Maschine für meinen Prozessor und der virtuelle (VGA) Monitor sind fertig. Ein Testprogramm geschrieben in meiner eigenen Programmiersprache füllt den Bildschirm mit roter Farbe aus. Habe lediglich das Problem mit Bildschirmflackern (siehe https://zfx.info/viewtopic.php?f=5&t=3880&p=49349) - wenn man glück hat sieht man allerdings die Farbe :D.

Ich werd mal Screenshots hochladen...

[EDIT EDIT]

Also hier mal für folgendes Programm ein danach folgender Screenshot der virtuellen Maschine (emulierte VGA-Grafikausgabe).

Code: Alles auswählen

' graphics chip program
' (C) Manuel Hofmann, November 2016

decl screenMemoryRed[1440,900] Natürlichezahl
decl screenMemoryGreen[1440,900] Natürlichezahl
decl screenMemoryBlue[1440,900] Natürlichezahl

' erzeuge ein Testbild:
' eine Strecke über eine lineare Funktion
' f(x) = x

decl x Natürlichezahl
decl y Natürlichezahl


' reset screen memory
x = 0
y = 0

infinite
	if ( y > 900 )
		break
	endIf

	infinite
		if ( x > 1440 )
			break
		endIf

		screenMemoryRed[x, y]	= 0
		screenMemoryGreen[x, y]	= 0
		screenMemoryBlue[x, y]	= 0
		x = x + 1

		' TODO: DEBUG - remove again
		break
	endInfinite

	x = 0

	y = y + 1

	' TODO: DEBUG - remove again
	break
endInfinite

' write Strecke into screen memory
x = 0
y = 0

infinite
	if ( y <= 900 )
		screenMemoryRed[x, y]	= 60
		screenMemoryGreen[x, y]	= 60
		screenMemoryBlue[x, y]	= 60

		x = x + 1
		y = y + 1

		' TODO: DEBUG - remove again
		break
	else
		break
	endIf
endInfinite

' write full test screen

infinite
	delta{5,60,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000,10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}

	delta{5,60,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000,10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001}

	delta{5,60,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000,10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010}
endInfinite
[EDIT EDIT EDIT] Das Bild ist jetzt als Anhang...


Und hier die Debugger (Konsolen) Ausgabe der virtuellen Maschine:

https://sites.google.com/site/ncoreshof ... onment.txt


Grüsse
Red

PS: das FPGA board funktioniert- es blinkt und piepst...
Dateianhänge
screenshot von der virutellen VGA Monitor Ausgabe der virtuellen Maschine
screenshot von der virutellen VGA Monitor Ausgabe der virtuellen Maschine
Zuletzt geändert von RedGuy am 06.05.2017, 15:17, insgesamt 2-mal geändert.
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von xq »

Hoste deine Bilder doch mal bei imgur oder so, googlesites erlaubt scheinbar kein cross-site-loading... Ansonsten wäre es auch mal cool, wenn du hier deine Projektseite verlinkst oder wenigstens deine Dokumente
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Benutzeravatar
Krishty
Establishment
Beiträge: 8227
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von Krishty »

ZFX kann auch Dateianhänge; die landen dann sogar automatisch im Showroom :)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
RedGuy
Establishment
Beiträge: 111
Registriert: 17.09.2002, 17:27
Echter Name: Manuel Hofmann
Wohnort: Rottweil
Kontaktdaten:

Re: [Projekt] eigener Computer

Beitrag von RedGuy »

So ! Jetzt müsste alles angezeigt werden...

Allerdings hat die Änderung meines alten posts nicht dazu geführt, dass ich im Showroom angezeigt werde :cry: ...
Antworten