FreeBASIC
Aus Lowlevel
| Allgemeines | |
|---|---|
| Name: | FreeBasic |
| Inlineassembler: | Ja (Intel-Syntax) |
| Compiler: | FBC (arbeitet mit GCC zusammen) |
| Spracheneigenschaften | |
| Plattformen: | Windows, Linux, u.a. |
| Beispielkernel in der Sprache: | s.u. |
| Homepage | |
| | |
Ob man BASIC für einen Kernel benutzen kann, ist in erster Linie eine akademische Frage. Der typische BASIC-Programmierer hat nicht die Kenntnisse, ein OS zu schreiben, und die Fortgeschritteneren wollen mit BASIC in aller Regel nichts zu tun haben.
Der Vollständigkeit halber: Es geht. Ich habe dazu FreeBASIC als Compiler benutzt.
Testkernel in BASIC
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
Gebaut wird das ganze mit den folgenden Befehlen:
fbc -c kernel.bas ld -Ttext=0x100000 kernel.o -melf_i386 -o basic.krn
Anfang einer kleinen RTLib
Möchte man FB-Funktionen wie IN oder OUT benutzen, muss erstmal eine Runtime-Lib her, die die Funktionen zur Verfügung stellt. Die ist normalerweise in C geschrieben, aber das geht (zumindest für einfache Dinge) auch in FREEBASIC. Hier Beispiele für IN und OUT:
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
Diese werden in die Datei rtlib.bas gepackt, danach wie oben angegeben kompiliert. Zum Linken muss jetzt der folgende Befehl benutzt werden:
ld -Ttext=0x100000 kernel.o rtlib.o -melf_i386 -o basic.krn
Weblinks
- http://www.freebasic.net - Offizielle englischsprachige Website der FreeBASIC-Entwickler
- http://www.freebasic-portal.de - deutschsprachiges Portal zu FreeBASIC mit Tutorials und Code-Beispielen

