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.


Nachrichten - syxce

Seiten: [1] 2 3
1
Lowlevel-Coding / A20 Line aktivieren
« am: 01. February 2006, 21:43 »
Ok danke, ich hab nun die "ret" mit einem jmp $ ersetzt und jetzt passts.
Achja wegen der Bootsignatur, das ist nicht der Bootloader sondern einer der Kernel, trotzdem danke.
2
Lowlevel-Coding / A20 Line aktivieren
« am: 01. February 2006, 12:23 »
Hallo,
das habe ich gemacht jedoch erhalte ich jetzt folgenden Fehler, zuerst der Code, dann ein Pic von Bochs.

;A20 Gate aktivieren
;GDT laden
;Protected Mode schalten

;jmp 0x10000:0000

        mov esp, 0x100

enableA20:

pusha

;; Make sure interrupts are disabled
cli

;; Keep a counter so that we can make up to 5 attempts to turn
;; on A20 if necessary
mov CX, 5

.startAttempt1:
;; Wait for the controller to be ready for a command
.commandWait1:
xor AX, AX
in AL, 64h
bt AX, 1
jc .commandWait1
.
.
.
.
.


3
Lowlevel-Coding / A20 Line aktivieren
« am: 24. January 2006, 21:40 »
Hallo,
ich versuche schon eine Weile das A20 Gate zu aktivieren aber ich erhalte immer von Bochs den Fehler: "PUSHAD: eSP < 16"
Die Meldung das es erfolgreich aktiviert wurde wird jedoch ausgegeben.
Was ist der Fehler ?
danke

;A20 Gate aktivieren
;GDT laden
;Protected Mode schalten

;jmp 0x10000:0000


enableA20:


pusha

;; Make sure interrupts are disabled
cli

;; Keep a counter so that we can make up to 5 attempts to turn
;; on A20 if necessary
mov CX, 5

.startAttempt1:
;; Wait for the controller to be ready for a command
.commandWait1:
xor AX, AX
in AL, 64h
bt AX, 1
jc .commandWait1

;; Tell the controller we want to read the current status.
;; Send the command D0h: read output port.
mov AL, 0D0h
out 64h, AL

;; Wait for the controller to be ready with a byte of data
.dataWait1:
xor AX, AX
in AL, 64h
bt AX, 0
jnc .dataWait1

;; Read the current port status from port 60h
xor AX, AX
in AL, 60h

;; Save the current value of (E)AX
push AX ; 16-BIT
;; push EAX ; 32-BIT

;; Wait for the controller to be ready for a command
.commandWait2:
in AL, 64h
bt AX, 1
jc .commandWait2

;; Tell the controller we want to write the status byte again
mov AL, 0D1h
out 64h, AL

;; Wait for the controller to be ready for the data
.commandWait3:
xor AX, AX
in AL, 64h
bt AX, 1
jc .commandWait3

;; Write the new value to port 60h.  Remember we saved the old
;; value on the stack
pop AX ; 16-BIT
;; pop EAX ; 32-BIT

;; Turn on the A20 enable bit
or AL, 00000010b
out 60h, AL

;; Finally, we will attempt to read back the A20 status
;; to ensure it was enabled.

;; Wait for the controller to be ready for a command
.commandWait4:
xor AX, AX
in AL, 64h
bt AX, 1
jc .commandWait4

;; Send the command D0h: read output port.
mov AL, 0D0h
out 64h, AL

;; Wait for the controller to be ready with a byte of data
.dataWait2:
xor AX, AX
in AL, 64h
bt AX, 0
jnc .dataWait2

;; Read the current port status from port 60h
xor AX, AX
in AL, 60h

;; Is A20 enabled?
bt AX, 1

;; Check the result.  If carry is on, A20 is on.
jc .success

;; Should we retry the operation?  If the counter value in ECX
;; has not reached zero, we will retry
loop .startAttempt1


;; Well, our initial attempt to set A20 has failed.  Now we will
;; try a backup method (which is supposedly not supported on many
;; chipsets, but which seems to be the only method that works on
;; other chipsets).


;; Keep a counter so that we can make up to 5 attempts to turn
;; on A20 if necessary
mov CX, 5

.startAttempt2:
;; Wait for the keyboard to be ready for another command
.commandWait6:
xor AX, AX
in AL, 64h
bt AX, 1
jc .commandWait6

;; Tell the controller we want to turn on A20
mov AL, 0DFh
out 64h, AL

;; Again, we will attempt to read back the A20 status
;; to ensure it was enabled.

;; Wait for the controller to be ready for a command
.commandWait7:
xor AX, AX
in AL, 64h
bt AX, 1
jc .commandWait7

;; Send the command D0h: read output port.
mov AL, 0D0h
out 64h, AL

;; Wait for the controller to be ready with a byte of data
.dataWait3:
xor AX, AX
in AL, 64h
bt AX, 0
jnc .dataWait3

;; Read the current port status from port 60h
xor AX, AX
in AL, 60h

;; Is A20 enabled?
bt AX, 1

;; Check the result.  If carry is on, A20 is on, but we might warn
;; that we had to use this alternate method
jc .warn

;; Should we retry the operation?  If the counter value in ECX
;; has not reached zero, we will retry
loop .startAttempt2


;; OK, we weren't able to set the A20 address line.  Do you want
;; to put an error message here?
jmp .fail


.warn:
;; Here you may or may not want to print a warning message about
;; the fact that we had to use the nonstandard alternate enabling
;; method

.success:
sti
popa
xor EAX, EAX
mov si, msg_a20_ok
call putstr
ret

.fail:
sti
popa
mov EAX, -1
mov si, msg_a20_fail
call putstr
ret


msg_a20_ok db "A20 Gate aktiviert",13,10,0
msg_a20_fail db "A20 Gate konnte nicht aktiviert werden",13,10,0

putstr:
lodsb
or al, al
jz short putstrd
mov ah, 0x0E
mov bx, 0x007
int 0x10
jmp putstr

putstrd:
retn



times 512-($-$$) db 0
4
Ich weiss nicht wieviel von TeeJays Code funktioniert, ich würde das lieber lassen.
Du kommst dort hin in dem einen "jmp 0x...." zur Adresse machst an der dein C Kernel liegt.
5
Ja das habe ich, jedoch mit viel arbeit und zeit verbunden, ich habe dir bereits einen Link gschickt wo viele Tutorials findest.
6
TeeJay's Tuorial funktioniert nicht, du bist nicht der erste den es hier erwischt.
7
Lowlevel-Coding / Eingabe im Real Mode
« am: 27. December 2005, 22:25 »
Danke das funktioniert jetzt.
Jedoch habe ich gleich ein weiteres Problem, nun will ich einen String einlesen und vergleichen, ich erhalte jedoch immer die Ausgabe "Ungleich", hier der Code:

mov ax, 0x1000
mov ds, ax
mov es, ax

start:
mov si, msg
call putstr

;mov si, msg1
;call putstr
;call getkey
;mov bl, 'r'
;cmp al, bl
;je gleich
;jmp ungleich

call read_str
mov dl, check
cmp dl, al
je gleich
jne ungleich


;################

msg db "Welcome to an OS Kernel",13,10,0
msg1 db "Gib etwas ein: ",13,10,0
msg2 db "Gleich",13,10,0
msg3 db "Ungleich",13,10,0
check db "Hallo",13,10,0

gleich:
mov si, msg2
call putstr

jmp $

ungleich:
mov si, msg3
call putstr

jmp $

putstr:
lodsb
or al, al
jz short putstrend
mov ah, 0x0E
mov bx, 0x0007
int 0x10
jmp putstr
putstrend:
retn

return:
ret

read_str:
mov ah,0
int 16h
cmp al,13
JE return
mov ah,0eh
int 10h
mov [bx],al
inc bx
jmp read_str

getkey:
mov ah, 0
int 0x16
mov ah, 0x0e
int 0x10
retn


times 512-($-$$) db 0
8
Lowlevel-Coding / Bochs mit bestimmten Adressen
« am: 27. December 2005, 21:59 »
Hallo,
folgendes Problem, ich habe einen Bootloader von dem man verschiedene Unterprogramme aufrufen kann, mit meinem makefile kann ich sie ganz einfach auf Diskette schreiben lassen und alles ist wunderbar, an die bestimmten adressen wird mit partycopy gschrieben, jetzt meine frage, wie mache ich das mit bochs, denn jedes mal wenn ich dort probiere ein unterprogramm mit seinem namen aufzurufen dann sagt mein bootloader "File nciht gefunden", ist auch klar, weil die unterprogis nicht an der bestimmten adresse deswegen wollte ich wissen wie ich das unter bochs realisiere ?
hier mein makefile damit ihr euch etwas darunter vorstellen könnt was ich meine.

nasm os.asm
nasm files.asm
nasm hello.asm
nasm ask.asm
nasm ls.asm

partcopy os 0 200 -f0
partcopy files 0 200 -f0 200
partcopy hello 0 200 -f0 400
partcopy ask 0 200 -f0 600
partcopy ls 0 200 -f0 800
9
Lowlevel-Coding / Eingabe im Real Mode
« am: 27. December 2005, 18:42 »
Ok danke, aber jetzt gibt er beide Meldungen aus, also "Gleich" und "Ungleich" dann fordert er mich erneut zur eingabe auf und bricht dann nach der eingabe mit der Meldung "IRET: top 6 bytes of stack not within stack limits" ab  :(
10
Lowlevel-Coding / Eingabe im Real Mode
« am: 27. December 2005, 18:37 »
Jetzt bricht Bochs immer mit der Meldung "prefetch: RIP > CS.limit" ab


Gelöst
11
Lowlevel-Coding / Eingabe im Real Mode
« am: 27. December 2005, 16:41 »
Ok ich hätte nun folgendes probiert:

call getkey
mov dl, 'r'
cmp al, dl
je gleich
jmp ungleich


er gibt aber nur kurz meine Eingabe aus und rebootet dann, wiso,

getkey:

getkey:
mov ah, 0
int 0x16
mov ah, 0x0e
int 0x10
12
Lowlevel-Coding / Eingabe im Real Mode
« am: 27. December 2005, 16:18 »
Hallo,
wenn ich im Real Mode jetzt einen Buchstaben einlese wo wird der gespeichert.
Ich habe folgendes Problem, ich möchte das wenn ein "r" eingeben wird der computer rebootet und wenn ein "n" eingegeben wird das er "hallo" ausgibt.
Ich verwende folgenden Code zum einlesen eines Buchstaben:

readchar:
mov ah, 0
int 0x16

Wo wird der nun gespeichert damit ich mit:
cmp buchstabenadresse, 'r'
ermitteln kann ob es übereinstimmt.

Danke
13
Lowlevel-Coding / Invalid Operand
« am: 25. December 2005, 12:01 »
vidmem ist ein Integer, mag sein das es am gcc liegt, mit borland funktioniert es.
14
Lowlevel-Coding / Invalid Operand
« am: 24. December 2005, 22:46 »
Hallo,
wenn ich folgende Zeile compilire erhalte ich immer den Fehler "invalid operands to binary".
Wie kann das sein, der wird doch wohl dividieren können ?

 case '\n':
  vidmem = (vidmem/160)*160 + 160;
  break;
15
Lowlevel-Coding / Ausgabe in C erfolgt nicht
« am: 20. December 2005, 19:51 »
Ich habe eine interessante Feststellung gemacht und zwar wenn ich den kernel_to_c.asm komplett weglasse dann passiert das gleiche wie vorher, es wird nur der Bildschirm gelöscht  und ein "S " ausgegeben, wie kann das sein ?
16
Lowlevel-Coding / Ausgabe in C erfolgt nicht
« am: 19. December 2005, 07:39 »
Weiß niemand weiter ? :(
17
Lowlevel-Coding / Ausgabe in C erfolgt nicht
« am: 15. December 2005, 20:13 »
Achso, aber wo der Fehler dann in der "Print" Funktion liegt weißt du auch nicht direkt oder, diese hält mich mittlerweile schon einige Tage auf !? :?
18
Lowlevel-Coding / Ausgabe in C erfolgt nicht
« am: 15. December 2005, 19:35 »
Ich würde mit ziemlicher Sicherheit sagen das beide darauf abgestimmt werden, aber wenn er den C Kernel findet und meine clrscr Funktion sowie meine getch Funktion verwendet warum geht dann die Ausgabe print nicht, da müsste der Fehler dann eigentlich in der Video.c liegen oder nicht, genauer in der Funktion print, aber wo  :?:
19
Lowlevel-Coding / Ausgabe in C erfolgt nicht
« am: 15. December 2005, 17:25 »
Ah, danke, jetzt löscht er schon mal den ganzen Bildschirm und schreibt ins linke obere eck wieder ein "S ", aber auch schon in der gewollten Schrift.
Er sollte jedoch den gewollten Text schreiben, wie kann das sein das er nur ein "S " ausgibt anstatt "Wir sind in C", vll is im Videospeicher irgendeine Adresse schon belegt oder so ?
20
Lowlevel-Coding / Ausgabe in C erfolgt nicht
« am: 14. December 2005, 22:14 »
Jetzt erhalte ich das "Loading..." vom Bootloader wie immer und danach ein "S " aus dem C Kernel als ausgabe, warum nicht meinen text ?
Seiten: [1] 2 3

Einloggen