 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
schildron
Anmeldungsdatum: 25.08.2008 Beiträge: 86
|
Verfasst am: 13.07.2009, 16:49 Titel: Hallo World ohne OS |
|
|
DIe folgende Frage ist eher grundsätzlich, da sich ein solches Projekt in ferner Zukunft befindet. Allerdings möchte ich beginnen, mich mit dem folgendem Thema zu beschäftigen.
Die meisten FB Anwendungen laufen auf Windows oder Linux. Ein Hallo World Programm für diese Plattform sollte kein Problem darstellen.
Nun will ich aber den Hallo World Schriftzug nach dem BIOS Selftest und vor dem Start des Betriebssystem haben.
Ich interessiere mich hauptsächlich für die Grundsätzliche Funktionsweise eines solchen Programmes. (z.B.: wie muss es Compiliert werden)?. Brauche ich dafür einen eigenen Kernel?
Das Hallo World Programm sollte außerdem von einer Floppy Diskette starten. Ein dies für 2 Programmierer mit geringer-mittlerer Erfahrung in einem Annehmbaren Zeitraum möglich?
Danke im Voraus
Schildron |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 13.07.2009, 17:07 Titel: |
|
|
Google mal nach "eigenes os schreiben" und du findest genug Skriptkiddie-Artikel, die dir einen dreißig zeiligen "Kernel" erklären. |
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 13.07.2009, 17:14 Titel: |
|
|
das geht eigentlich ziemlich einfach... hab ich auch schon hingekriegt (allerdings nur theoretisch, ausgetestet mit bootloader hab ichs net. aber ich seh keinen grund, wieso es nicht hätte gehen sollen.)
im grunde musst du nur die richtigen bios-interrupts raussuchen, um zeichen auf den bildschirm zu bringen...
das eigentliche problem wird sein, mehr draus zu machen...
denn sobald du auf dateien zugreifen willst, auf hardware (teilweise zumindest) brauchst du auf jedenfall schonmal passende treiber (wozu ich auch dateisystemtreiber zähle)
EDIT: oops... mein beitrag war auf reinen assemblercode bezogen. ob man mit fb n "OS" schreiben kann, kA... mit powerbasic oder purebasic oder so hats mal (hier im forum!) einer geschafft, nen kernel zu schreiben. allerdings mit viiiel rumgetrickse, da PB-programme auf DOS prüfen. _________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 13.07.2009, 17:53 Titel: |
|
|
hey cool xD
[ironie]los, lasst und FBOS1.0 bauen XD[/ironie]
nur mal aus interesse: wozu brauchst du das eigentlich?
soll daraus wirklich mal ein OS werden (ich will dir ja nicht den mut nehmen, aber das bezweifle ich stark), oder ist es was anderes? _________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
|
Nach oben |
|
 |
schildron
Anmeldungsdatum: 25.08.2008 Beiträge: 86
|
Verfasst am: 13.07.2009, 18:37 Titel: |
|
|
Also einmal Danke für die Posts!
Nein, es soll kein Betriebssystem werden. Bei uns haben gerade die Sommerferien begonnenund ich brauche halt ein bischen beschäftigung. Mein Hauptprojekt sollte in 2-3 Wochen fertig sein und ein kleines Nebenprojekt in 3-4 Wochen.
Es gibt allerdings noch einen 2. viel wichtigeren Grund: Ich möchte in den Grundzügen mir erarbeiten wie ein Betriebssystem arbeitet und aufgebaut ist, damit Programme laufen und dazu gehört auch zu wissen, wie einfache Programme ohne OS funktionieren. Quasi eine Aktion um mich Fort zu Bilden.
3. beginnen wir nächstes Jahr in der Schule mit VBA zu programmieren. Da aber die meisten meiner Schulkollegen unfähig in sachen programmieren sind, möchte ich mit dem 2. in meiner Klasse, der ungefähr so viel kann wie ich, uns nächstes Jahr ein bischen mit "fortschrittlicher" Programmierung beschäftigen.
Was es werden soll: Ein Quiz welches Schnell einsatzbereit ist (also ohne start von dem lahmen Windows) |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 13.07.2009, 19:51 Titel: |
|
|
dann ist ein kernel zwingend nötig .. ohne kernel gibts kein zugriff auf die hardware .. ob der kernel in deinem programm drin is, oder seperate gelagert wurde, ist hierbei irrelevant ..
kannst dir ja mal den von mir oben geposteten kernel reinziehen. dda sind grundlegend komponenten drin, die nötig sind, um wirklich simple programme zu schreibne. nicht alle funktionen die in FB genutzt werden funktionieren, aber die grundlegenden schon.
du musst bedenken, das dein programm , und auch FB selbst, auf funktionen zugreift (screen, put, get, open, close, print, usw.) alles befehle sind, die betriebssystemspezifisch sind. da du kein OS hast, musst du dir ein eigenes os schreiben, bzw einen kernel, der diese funktionen bereitstellt.
erst dan kannst du effektiv ein programm schreiben, das auf diese funktionen zugreift.
ohne kernel gehts also nicht.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
Löwenherz

Anmeldungsdatum: 25.08.2008 Beiträge: 86 Wohnort: auf einer sonnigen Insel :)
|
Verfasst am: 15.07.2009, 22:35 Titel: |
|
|
hallo puppetmaster, schildron,
ich hätte gerne gewußt, wie ich a) dieses skript für kernel-testen.bas kompiliere mit FBEDIT... komme nicht ganz klar damit...
Code: | DIM video AS BYTE POINTER
DIM hello AS BYTE POINTER
video = CAST(BYTE POINTER, &Hb8000)
hello = strptr("Hello world")
WHILE *hello <> 0
*video = *hello
hello = hello + 1
video = video + 2
WEND
DO : LOOP
CONST mb_magic = &H1BADB002
CONST mb_flags = 3
ASM
.global _start
_start:
call fb_ctor__kernel
jmp $
fb_RtInit:
ret
mb_header:
.align 4
.int mb_magic
.int mb_flags
.int -mb_magic-mb_flags
END ASM
'fbc -c kernel.bas
'ld -Ttext=0x100000 kernel.o -melf_i386 -o basic.krn |
bekomme eine datei heraus mit namen: "kernel-testen.o" (O-Datei) !
b) meine rtlib-test.bas
Code: | SUB fb_Out CDECL ALIAS "fb_Out" (port as USHORT, value as UBYTE)
ASM
movw dx, [port]
movb al, [value]
outb dx, al
END ASM
END SUB
FUNCTION fb_In CDECL ALIAS "fb_In" (port as USHORT) AS UBYTE
DIM value AS UBYTE
ASM
movw dx, [port]
inb al, dx
mov [value], al
END ASM
RETURN value
END FUNCTION |
also ich brauche die Einstellungen, wo ich das genau bei FBEDIT einstellen kann... habe vorher FBIDE probiert... bei Einstellungen geschaut, aber wo genau und wie genau einstellen ?
möchte das kernel.bas mal einfach antesten !
liebe Grüße, Löwenherz, völlig verschwitzt durch den heißen Tag ! _________________ Das Leben ist wie eine Pralinenschachtel, man weiß nie, was dort drinnen für tolle wie böse Überraschungen stecken |
|
Nach oben |
|
 |
croco97

Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 16.07.2009, 07:31 Titel: |
|
|
schildron hat Folgendes geschrieben: | Also einmal Danke für die Posts!
3. beginnen wir nächstes Jahr in der Schule mit VBA zu programmieren. Da aber die meisten meiner Schulkollegen unfähig in sachen programmieren sind, möchte ich mit dem 2. in meiner Klasse, der ungefähr so viel kann wie ich, uns nächstes Jahr ein bischen mit "fortschrittlicher" Programmierung beschäftigen.
|
Das heisst, du denkst, VBA ist für die Katz?
Ich finde es grundsätzlich gut und nachvollziehbar, dass du mal einen Kernel programmieren willst. Kannst du x86-Assembler? Da wirst du dich etwas einarbeiten müssen.
Aber VBA würde ich auch ernstnehmen. Man kann schon recht komplexe Sachen und in Verbindung mit guten Excelkenntnissen faszinierende Sachen im Bereich Datenbank und Datenanalyse damit machen. VBA im Lebenslauf ist für mich immer ein Grund, mir die Bewerbung mal näher anzuschauen - gute VBA-Programmierkenntnisse trifft man nicht oft an.
VG!
Croco |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 16.07.2009, 09:46 Titel: |
|
|
@Löwenherz
Ganz unten in dem code steht, wie du die kompilierung durchführen musst.
Code: | 'fbc -c kernel.bas
'ld -Ttext=0x100000 kernel.o -melf_i386 -o basic.krn |
Da dein Projekt jedoch ncith "kernel.bas" heist, sondern "kernel-testen.bas" musst du 3 dinge abändern.
einmal den "Einsprungspunkt" in dein Programm. Dieser wird hier definiert:
Code: | call fb_ctor__kernel |
da musst du entsprechen zu
Code: | call fb_ctor__kernel-tester |
abändern.
Ich weis jedoch nicht ob der linker mit "-" klar kommt. Eventuell musst du in der .bas das "-" durch "_" ersetzen.
anschliessend kompilierst du eine Objektdatei mit
Diese musst du anschliessend mit
Code: | ld -Ttext=0x100000 kernel.o -melf_i386 -o basic.krn | zu einer binary linken.
Auch hier must du darauf achten, das die Dateinamen "kernel.xxx" entsprechend den erzeugten Datein entsprechen.
Die ausgabedatei heist anschliessend, durch den linker angegeben: "basic.krn"
Hinzu kommt, das du nicht zwingend eine RTLib erzeugen musst, wenn du in deinem Programm keine FB internen kommandos nutzen willst.
Es empfiehlt sich jedoch, vorallem wenn du Strings verwenden willst, wenn du Konvertierungen nutzen willst (Val(), CInt(), ... )
Ich habe ein Linkerskript für den "FB Kernel" geschrieben, der alle nötigen operationen, unter anderem das kompilieren der RTLib, übernimmt: http://www.freebasic-portal.de/index.php?s=fbporticula&mode=show&id=701
Zus#ätzlich kopiert das skript auch gleich die erzeugte Binary in das Image für QEMU, so das ich QEmu direkt ausführen kann, ohne vorher die Binary, von hand, in das Image zu packen.
An dem oben angegebenem Link von mir: http://www.freebasic-portal.de/index.php?s=projekt&id=26 .. kannst du die grundlegenden Datein einsehen, die FBC braucht, wenn du seine entsprechenden funktionen nutzen willst, wie Print, usw.
dort findet sich auch der "Basic-Kernel" .. quasi das absolute grundgerüst zum "einfachen" Printen von Text. http://www.freebasic-portal.de/index.php?s=fbporticula&mode=show&id=679
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
Löwenherz

Anmeldungsdatum: 25.08.2008 Beiträge: 86 Wohnort: auf einer sonnigen Insel :)
|
Verfasst am: 16.07.2009, 10:54 Titel: |
|
|
hi tpm,
danke, ich habe schon etwas gefunden, "kernel.o" Datei gebaut, aber
aber wie handele ich das mit der zweiten Zeile... "ld -Ttext..usw", du hast von "linken" gesprochen... wie geht das ?
Benutze gerade FBIDE...
Zitat: | 'fbc -c kernel.bas
'ld -Ttext=0x100000 kernel.o -melf_i386 -o basic.krn
|
tschüss, ich probiere weiter aus... danke auch für die Links zu diesen ganzen kernel.bas + kernel.bi themen... uff... das sind ja reichlich, haha
aber vielleicht macht es klick bei mir und ich kapiers dann schnell...
schönen sonnigen Tag noch, danke nochmals... ich will das ja verstehen und es packen !
tschüss, Löwenherz _________________ Das Leben ist wie eine Pralinenschachtel, man weiß nie, was dort drinnen für tolle wie böse Überraschungen stecken |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 16.07.2009, 11:04 Titel: |
|
|
das compilat von fbc ist die .o datei ..
diese datei wurde von FBC erzeugt.
ld ist der linker. Das ist ein anderes programm, mit dem du die .ob von FBC in eine Binary umsetzen kannst.
Typsicherweise baust du das (wenn möglich) in ein skript ein, udn startest dieses, so das du nur einen aufruf druchfühen musst.
andernfalls musst du ne console öffnen, und dort das linking von hand ausführen.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
Löwenherz

Anmeldungsdatum: 25.08.2008 Beiträge: 86 Wohnort: auf einer sonnigen Insel :)
|
Verfasst am: 16.07.2009, 11:35 Titel: |
|
|
hi tpm!
sorry, aber das verstehe ich nicht... mit dem Linker
ich brauche also nichts das zweite Mal kompilieren, richtig ?
wie zb:
Zitat: |
compiler befehl:
"<$ld>" -Ttext=0x100000 kernel.o -melf_i386 -o basic.krn "<$file>" |
ich brauche eine einfache Textdatei, wo ich diesen Code eingebe und dann ?
sorry, komme nicht weiter... lauter Bäume und kein Wald
tschüssi, Löwenherz _________________ Das Leben ist wie eine Pralinenschachtel, man weiß nie, was dort drinnen für tolle wie böse Überraschungen stecken |
|
Nach oben |
|
 |
Löwenherz

Anmeldungsdatum: 25.08.2008 Beiträge: 86 Wohnort: auf einer sonnigen Insel :)
|
Verfasst am: 16.07.2009, 16:51 Titel: Linker für kernel.bas einsetzen, aber wie ? |
|
|
... sorry, kann mir jemand weiterhelfen ?
wie soll ich den "Linker" für kernel.bas erstellen, bitte schrittweise erklären... komme nicht weiter... seufzer... habe schon viel ausprobiert... grummel-grummel...
die kernel.o Datei habe ich bereits erfolgreich kompiliert... und nu ?
beste grüße aus nordhessen, ich schwitze sogar im Stehen
löwenherz _________________ Das Leben ist wie eine Pralinenschachtel, man weiß nie, was dort drinnen für tolle wie böse Überraschungen stecken |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 16.07.2009, 18:49 Titel: |
|
|
Der Linker muss nicht erstellt werden, den hast du schon.
Das ist die ld.exe im bin-Ordner deines FreeBASIC-Verzeichnisses.
Öffne ein Consolenfenster und geh zu dem Ordner, wo die ld.exe ist. Alternativ kannst du die shell_start.exe auf dem FB-Ordner in den bin-Ordner reinkopieren und die starten (erspart dir das raussuchen vom richtigen Pfad in der Console).
Sobald du im richtigen Verzeichnis bist, tippst du das ein, was dir TPM gesagt hat, also das:
Wenn du das dann mit Enter bestätigst, dann hast du das, was du willst. |
|
Nach oben |
|
 |
Löwenherz

Anmeldungsdatum: 25.08.2008 Beiträge: 86 Wohnort: auf einer sonnigen Insel :)
|
Verfasst am: 16.07.2009, 19:43 Titel: |
|
|
hi mod,
prima... habe das Verzeichnis mit der ld.exe gefunden und den schönen Text eingetippt.. ld -Ttext usw.
aber nach Return bekomme ich im Konsolenmodus danach diese Fehlermeldung...
Zitat: | unrecognised emulation mode: elf_i386
supported emulations: i386pe |
immerhin ein großer Schritt weiter mit einer Fehlermeldung, aber was mache ich nun, grinse weiter... befinde mich auf einem fremden Planeten
habe verschiedene modi eingetippt mit wenig Erfolg, leider
beste Grüße, Löwenherz _________________ Das Leben ist wie eine Pralinenschachtel, man weiß nie, was dort drinnen für tolle wie böse Überraschungen stecken |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 16.07.2009, 19:56 Titel: |
|
|
"elf" ist eine ausführbare Linux-Datei, so viel kann ich dir sagen.
Deine ld.exe kann aber nur "pe", also ausführbare Dateien für Windows erstellen.
Entweder du machst das ganze gleich auf einem Linux-System oder du wartest da noch mal auf TPM, da ich auf dem Gebiet keine Erfahung hab und leider auch keine Zeit, das ganze auszuprobieren. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 16.07.2009, 21:54 Titel: |
|
|
Nur mal so geraten: Ich denke, es liegt am Parameter -melf_i386. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 16.07.2009, 22:02 Titel: |
|
|
Schon klar, nur ich weiß jetzt nicht, ob mit dem anderen Parameter das rauskommt, was er will. Kenn mich mit der Materie nicht aus. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|