Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Themen - JG

Seiten: 1 [2]
21
Offtopic / Nochmal fragen in C...
« am: 05. March 2005, 11:15 »
Hallo,
wenn ich das hier


void SetCursor(int, int);
void ClearScreen();
void NewLine();
void print(char *);

/*
Diese datei enthält die Video-Funktionen
*/


char *VideoMem = (char*)0xB8000;
int xPos=0;
int yPos=0;

/**********************************************/

void SetCursor(int _xPos,int _yPos)
{
xPos = _xPos;
yPos = _yPos;
*VideoMem = (char*)0xB8000;
*VideoMem = *VideoMem + (xPos*2-2)
*VideoMem = *VideoMem + (yPos-1)*160
};

void ClearScreen()
{
int i;
for (i=0; i==4000; i++)
{
VideoMem[i] = ' ';
i++;
VideoMem[i] = 7;
}
yPos=0;
xPos=0;
*VideoMem = (char*)0xB8000;

};

void print (char *string)
{
for(*VideoMem = *string; *VideoMem =! '/0'; *VideoMem++)
{
*VideoMem++;
*string++;
*VideoMem = '7';
if (xPos==80)
{
xPos=1;
if (yPos==25)
{
ClearScreen();
yPos=1;
};
else
{
yPos++;
};
xPos++;
}
};
};

void NewLine
{
};

kompilieren will, dann kommenn total viele Fehlermeldungen, aber ich finde einfach keine Fehler, findet ihr welche?

Danke schon mal und ich hoffe ich nerv net....
22
Lowlevel-Coding / Uhrzeit
« am: 02. March 2005, 16:06 »
Hallo,
wie kann ich die Uhrzeit ermitteln?
23
Lowlevel-Coding / Reboot unnd Ausschalten im pm
« am: 28. February 2005, 15:54 »
Hallo,
wie kann ich im PM den Rechner neustarten und ausschalten?
Danke schon mal!
24
Offtopic / EAX in C lesen
« am: 27. February 2005, 13:50 »
Hallo,
wenn ich in C wissen will, was in EAX steht, wie kann ich das machen? Und kann ich das in ne Variable kopieren?
25
Offtopic / Textmodus
« am: 26. February 2005, 13:20 »
Hallo,
im Textmodus sind doch 80 Zeichen und 25 zeilen, ist das nicht einwenig komisch? Ich meine, sind das nicht einwenig wenig Zeilen?
26
Offtopic / Problem in C
« am: 24. February 2005, 16:40 »
Hallo,
wenn ich in C nen zeiger auf den Video-Speicher habe char *VideoMem = (char*)0xB8000; und dann den Bildschirm leeren will, dann mach ich das ja am besten mit einer while schleife,

char *VideoMem = (char*)0xB8000;

void ClearScreen(int i)
{
while(i=4000)
{
}
}

nur wie mach ich das, dass char *VideoMem nun auf das nächste byte zeigt, also auf VideoMem + die zählervariable i?
Ich hoffe man kan verstehen, was ich will
27
Lowlevel-Coding / Wiedereinmal ein paar Fragen...
« am: 20. February 2005, 17:37 »
Hallo,
ich hab ein paar Fragen:
1. Wenn ich ein Zeichen mit dem Int. 16h und der Fun, 00h eingelesen habe, wie schreibe ich den in einen String?
2. Wie hänge ich dann an den String ein Null-Byte an?
3. Wie wechsel ich in die nächste Zeile? Gibt es da einen Int. dafür?

Danke schon mal...
28
Lowlevel-Coding / Problem bei Texteingabe
« am: 19. February 2005, 19:28 »
Hallo,
ich hab ein Problem:
Wenn ich einen String per Int. 16 Fun. 00h einlese, wie erkenne ich, ob der Benutzer 'Enter' gedrückt hat?
29
Lowlevel-Coding / Ich finde den Fehler net....
« am: 19. February 2005, 14:34 »
Hallo,
ich finde den Fehler net... Bochs zeigt nur noch boot from floppy an und das macht es nichts mehr...
Hier der Code:
boot.asm


%include "strings.asm"

org 0x7C00 ; Unsere Startadresse

; -----------------------------------------
; Unser Bootloader
; -----------------------------------------

start:
                ; Erst brauchen wir einen Stack.
cli             ; Keine Interrupts!
mov ax, 0x9000  ; Stackadresse
mov ss, ax      ; SS = 9000 (unser Stack)
mov sp, 0       ; SP = 0000  (der Stackpointer)
sti             ; Interrupts zulassen

; Bootlaufwerk aus DL speichern
mov [bootdrv], dl

;Lade unseren Kernel
call load

;Springe zu diesem Kernel
mov ax, 0x1000 ; Die Adresse des Programms
mov es, ax     ; Segmentregister updaten
mov ds, ax
push ax
mov ax, 0
push ax
retf

; ----------------------------------------------
; Funktionen und Variablen
; ----------------------------------------------

bootdrv db 0 ;Das Bootlaufwerk

; Einen String ausgeben:
putstr:
lodsb             ; Byte laden
or al,al
jz short putstrd  ; 0-Byte? -> Ende!

mov ah,0x0E       ; Funktion 0x0E
mov bx,0x0007     ; Attribut-Byte (wird nicht benötigt)
int 0x10          ; schreiben
jmp putstr        ; Nächstes Byte
putstrd:
retn

; Lade den Kernel vom Bootlaufwerk
load:

; Diskdrive reset (Interrupt 13h, 0)
push ds            ; Sichere DS
mov ax, 0          ; Die gewünschte Funktion (reset)
mov dl, [bootdrv]  ; Dieses Laufwerk ist gewünscht
int 13h            ; Den Interrupt ausführen
pop ds             ; DS wiederherstellen
jc load            ; Geht nicht? -> Noch mal!

load1:
mov ax,0x1000      ; ES:BX = 10000
mov es,ax
mov bx, 0

; Sektoren lesen (Interrupt 13h, 2)
mov ah, 2       ; Funktion 2 (Lesen)
mov al, 5       ; Lese 5 Sektoren
mov cx, 2       ; Cylinder=0, Sector=2
mov dx, 0       ; Head=0, Laufwerk=0
int 13h         ; ES:BX =  Daten vom Laufwerk
jc load1        ; Fehler? Noch mal!
mov si,msg_load
call putstr     ; Meldung ausgeben
retn

times 512-($-$$)-2 db 0   ; Dateilänge: 512 Bytes
dw 0AA55h                 ; Bootsignatur


kernel.asm


%include "strings.asm"

; ---------------------------------------------------
; Unser Kernel
; ---------------------------------------------------

mov ax, 1000h ; Segmentregister updaten
mov ds, ax
mov es, ax

start:

mov si, msg_welcome
call putstr   ; Schicke Bootmessage :)

mov si,msg_reboot
call putstr   ; Noch eine Message :D

call getkey   ; Warte auf einen Tastendruck
jmp reboot    ; Reboot

; -------------------------------------------------
; Funktionen und Variablen
; -------------------------------------------------


; Stringausgabe
putstr:
lodsb            ; Byte laden
or al,al
jz short putstrd ; 0-Byte? -> Ende!
mov ah,0x0E      ; Funktion 0x0E
mov bx,0x0007    ; Atrribut-Byte
int 0x10         ; schreiben
jmp putstr       ; nächstes Byte
putstrd:
retn

; Warte auf einen Tastendruck
getkey:
mov ah, 0 ; Funktion 0
int 016h  ; Ausführen
ret

; Rebooten (HEX Dump).
reboot:
db 0EAh
dw 0000h
dw 0FFFFh

strings.asm


msg_load db "Loading...",13,10,0
msg_welcome db "Welcome to jgOS 0.01",13,10,0
msg_reboot db "Press any key to reboot...",13,10,0

30
Offtopic / download rawrite (Linux)
« am: 19. February 2005, 13:47 »
Hallo,
weiß jemand wo man rawrite für linux runterladen kann?
31
Offtopic / Problem in ASM
« am: 19. February 2005, 13:05 »
Hallo,
kann ich in ASM wie in C andere Quellcode dateien mit einbinden? (unter C "#include "xxx.x")
Ich hab mir schon mehere Tutorials durchgelesen, doch in keinen stand es drin...
32
Offtopic / Bochs unter Linux
« am: 17. February 2005, 17:16 »
Hallo,
hat jemand schonmal Bochs unter Linux installiert? Wenn ja wie geht das?
33
Offtopic / Buch PC intern
« am: 17. February 2005, 16:33 »
hallo, weiß jemand die ISBN von Buch PC Intern?
34
Lowlevel-Coding / Bootloader von der 1. Lowlevel Ausgabe
« am: 16. February 2005, 16:05 »
Hallo,
ich hab ein paar Fragen zum Bootloader.
Hier mal der Code:
org 0x7C00 ; Unsere Startadresse

; -----------------------------------------
; Unser Bootloader
; -----------------------------------------

start:
                ; Erst brauchen wir einen Stack.
cli             ; Keine Interrupts!
mov ax, 0x9000  ; Stackadresse
mov ss, ax      ; SS = 9000 (unser Stack)
mov sp, 0       ; SP = 0000  (der Stackpointer)
sti             ; Interrupts zulassen

; Bootlaufwerk aus DL speichern
mov [bootdrv], dl

;Lade unseren Kernel
call load

;Springe zu diesem Kernel
mov ax, 0x1000 ; Die Adresse des Programms
mov es, ax     ; Segmentregister updaten
mov ds, ax
push ax
mov ax, 0
push ax
retf

; ----------------------------------------------
; Funktionen und Variablen
; ----------------------------------------------

bootdrv db 0 ;Das Bootlaufwerk
loadmsg db "Loading...",13,10,0

; Einen String ausgeben:
putstr:
lodsb             ; Byte laden
or al,al
jz short putstrd  ; 0-Byte? -> Ende!

mov ah,0x0E       ; Funktion 0x0E
mov bx,0x0007     ; Attribut-Byte (wird nicht benötigt)
int 0x10          ; schreiben
jmp putstr        ; Nächstes Byte
putstrd:
retn

; Lade den Kernel vom Bootlaufwerk
load:

; Diskdrive reset (Interrupt 13h, 0)
push ds            ; Sichere DS
mov ax, 0          ; Die gewünschte Funktion (reset)
mov dl, [bootdrv]  ; Dieses Laufwerk ist gewünscht
int 13h            ; Den Interrupt ausführen
pop ds             ; DS wiederherstellen
jc load            ; Geht nicht? -> Noch mal!

load1:
mov ax,0x1000      ; ES:BX = 10000
mov es,ax
mov bx, 0

; Sektoren lesen (Interrupt 13h, 2)
mov ah, 2       ; Funktion 2 (Lesen)
mov al, 5       ; Lese 5 Sektoren
mov cx, 2       ; Cylinder=0, Sector=2
mov dx, 0       ; Head=0, Laufwerk=0
int 13h         ; ES:BX =  Daten vom Laufwerk
jc load1        ; Fehler? Noch mal!
mov si,loadmsg
call putstr     ; Meldung ausgeben
retn

times 512-($-$$)-2 db 0   ; Dateilänge: 512 Bytes
dw 0AA55h                 ; Bootsignatur

So nun die Fragen:
1. Was ist [bootdrv]?

2. bei loadmsg db "Loading...",13,10,0
Was beuteuten da die Zahlen dahinter?

3. Wie wird der Kernel gelesen?
 
4. Gibt es irgendwo eine übersicht mit allen interrupts?

5. Wie rechnet man hex in dezimal Zahlen um?

Ich weiß es sind viele Fragen...
Seiten: 1 [2]

Einloggen