[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.

Re: [Projekt] eigener Computer

Beitragvon RedGuy » 02.02.2017, 11:53

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[i] und nicht x[a] = y[i]
keine Array-Indizierung bei return Befehlen: also return x und nicht return x[i]
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...
RedGuy
Manuel Hofmann
 
Beiträge: 68
Registriert: 17.09.2002, 17:27
Wohnort: Rottweil

Re: [Projekt] eigener Computer

Beitragvon Oprah Noodlemantra » 02.02.2017, 19:17

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.
Oprah Noodlemantra
 
Beiträge: 8
Registriert: 30.06.2015, 19:03

Re: [Projekt] eigener Computer

Beitragvon RedGuy » 04.02.2017, 16:56

@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
Manuel Hofmann
 
Beiträge: 68
Registriert: 17.09.2002, 17:27
Wohnort: Rottweil

Re: [Projekt] eigener Computer

Beitragvon RedGuy » 15.02.2017, 12:15

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
RedGuy
Manuel Hofmann
 
Beiträge: 68
Registriert: 17.09.2002, 17:27
Wohnort: Rottweil

Re: [Projekt] eigener Computer

Beitragvon Zudomon » 15.02.2017, 13:04

Ich finde dein Projekt sehr spannend!
Kannst du nicht mal ein YouTube Video machen, wo du deinen Rechner vorführst?
Bild
Benutzeravatar
Zudomon
 
Beiträge: 1925
Registriert: 25.03.2009, 08:20

Re: [Projekt] eigener Computer

Beitragvon RedGuy » 16.02.2017, 09:34

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
RedGuy
Manuel Hofmann
 
Beiträge: 68
Registriert: 17.09.2002, 17:27
Wohnort: Rottweil

Re: [Projekt] eigener Computer

Beitragvon Zudomon » 16.02.2017, 10:08

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?
Bild
Benutzeravatar
Zudomon
 
Beiträge: 1925
Registriert: 25.03.2009, 08:20

Re: [Projekt] eigener Computer

Beitragvon RedGuy » 16.02.2017, 11:35

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
Manuel Hofmann
 
Beiträge: 68
Registriert: 17.09.2002, 17:27
Wohnort: Rottweil

Vorherige

Zurück zu Vorstellungsbereich

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste