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 - scales of justice

Seiten: 1 ... 8 9 [10] 11 12
181
Lowlevel-Coding / Fonts
« am: 18. April 2006, 14:28 »
also ich hab meine Fonts so ähnlich wie bitmaster in Arrays gespeichert,
allerdings ziemlich komisch, irgendwie immer den Abstand zum letzten Pixel,
ich dachte ich könnte so Speicherplatz sparen, war aber Schwachsinn
und jetzt hab ich keine Lust mehr das System zu ändern

später will ich das auch mit richtigen bildern machen, ich lad einfach einmal ne bitmap in den Speicher, aus der ich dann immer wieder die einzelnen Buchstaben auslesen kann

ich hab das ganze aber in C gemacht, hab einmal nen FAR-Zeiger zum Video-Speicher gemacht und über den steuert meine Grafikengine, die ich irgendwann mal für Windows gebraucht hab, das Ganze
182
Lowlevel-Coding / Memory Models einhalten
« am: 17. April 2006, 13:33 »
jetzt hab ich verstanden was Turbo C für ein Problem hat:
ich halt mich nicht an die Memory Models

aber ich weis auch nicht wirklich wie, ich benutz grade Small:
64KB Code
64KB Daten + Stack + Heap
restlicher Speicher Far Heap

aber wie genau mach ich das jetzt mit nasm?

sobald ich das Programm in den Speicher ladt,
ist doch Code und Daten im gleichen Segment,
aber das Daten Segment muss ja 64KB (0x1000 Segmente) hinter dem Cide Segment anfangen

ich probier mal Modell Tiny, da soll ja eh alles auf einem Haufen sein
183
Lowlevel-Coding / fliesskommazahlen funktionieren nicht
« am: 16. April 2006, 20:35 »
ich hab mein Betriebssystem nun endlich soweit das man C gut benutzen kann
es funktioniert auch alles soweit

nur die fliesskommazahlen lassen noch zu wünschen übrig:

rechnen mit fliesskommazahlen geht ohne Probleme, aber es klappt einfach nicht eine fliesskommazahl, also float oder double in short, oder long um zu wandeln
sobald ich das mache, hängt sich der Computer auf, sogar Bochs gibt nur noch sinnlose Fehlermeldungen aus (Festplatten schreibe fehler, oder Bochs selber stürzt einfach ab)

so sieht mein C-Code aus:
long l = 0;
float f = 0;

long = (long)f;


ich benutz Turbo C (also 16-Bit) und linke dessen Fliesskomma Emulation ein (ich habs auch schon mit der FPU-Unterstützung versucht, gleiches Ergebnis)

weis vielleicht jemand woran das liegen kann,
oder kennt ein Hintertürchen, mit dem ich irgendwie floats, oder doubles in shorts, oder longs umwandeln kann?
184
Offtopic / Windows XP Professional
« am: 16. April 2006, 13:52 »
@Toast3r:

das weis ich auch, aber früher oder später tausche ich nunmal diese 3 Komponenten
und bisher musste ich dann bei der Installation nur einen Code eingeben, der oben auf meinem Rechner steht,
aber wenn der jetzt gesperrt ist
185
Offtopic / HILFE
« am: 16. April 2006, 02:46 »
ich glaub das hast du dir genau das richtige Forum rausgesucht
und ich denke auch dass das schonmal ein guter Anfang ist, das wird sicher das beste online Game von allen
186
die Links beim einloggen sind falsch gesetzt
das "www." müsste mal jemand weg machen
187
Offtopic / Windows XP Professional
« am: 15. April 2006, 22:04 »
@Toast3r:
versteh ich nich, was is am Telefonieren denn so schwer?
du weis nich zufällig wos ne Liste mit den gesperrten gibt?
muss bestimmt bald auch mal wieder neu-installieren
188
Lowlevel-Coding / falsche Parameter
« am: 15. April 2006, 15:27 »
Klasse, nun hab ich nach 2 Tagen endlich rausgefunden, dass der Error Code nicht 0x10, sondern 0x01 ist, meine Error-Code Auslese Routine war falsch -.-

0x01 bedeutet falscher Funktionscode, oder falsche Parameter

aber jetzt kommts:

wenn ich 10 Byte, oder weniger auf dem Stack habe funktioniert alles, d.h. ich bekomme auch keinen Fehlercode zurück

wenn ich mehr als 10 Byte auf dem Stack habe kommt Fehlercode 0x01 zurück

und wenn ich 14, oder mehr Bytes auf dem Stack habe, kehrt die int 0x13 gar nicht zurück

ich dachte das kann gar nicht sein, aber ich habs jetzt bestimmt 20x ausprobiert
kann mir das mal einer erklären? o.O


EDIT:
keine Ahnung was das Problem war, aber ich hab jetzt den Stack einfach mal wo anders hingetan und jetzt geht alles ohne Probleme
189
Lowlevel-Coding / Textausgabe
« am: 15. April 2006, 14:10 »
endlich hab ich die Ursache für den Diskettenlesefehler gefunden:
meine Textausgabe Funktion

ich versteh allerdings nicht im geringsten was an der falsch ist:

text:
push ax
push bx
push si
mov si, string
text_goon:
lodsb
cmp al, 0x00
je text_e
mov ah, 0x0e
mov bx, 0x0007
int 10h
jmp text_goon
text_e:
pop si
pop bx
pop ax
ret
string db "string", 0


wenn ich direkt vor der Text Funktion meine Diskettenlesefunktion aufrufe,
funktioniert Alles problemlos
ruf ich erst die Textfunktion und dann die Diskettenlesefunktion auf, hängt er sich auf so bald ich in der Diskettenlesefunktion int 0x13 aufrufe

aber für mich ergibt das absolut keinen Sinn, ich pushe doch schön alle Register die ich benutze,
also wo ist das Problem?

EDIT:
in Bochs funktionieren übrigens beide Möglichkeiten ohne Probleme
190
Lowlevel-Coding / pushen Interrupts?
« am: 15. April 2006, 13:30 »
@nore:

das ist klar, ich mein aber jetzt die Register, die nicht für die Übergabe vn irgendwelchen Werten angegeben sind

@nooooooooos:

das mach ich auch, ich frag mich nur ob grade das mein Fehler ist
191
Lowlevel-Coding / wofür ist ES?
« am: 15. April 2006, 13:25 »
Ah, jetzt hab ichs kapiert, dann ist das schonmal nicht mein Fehler
Aber wie kommst du eigentlich auf die Idee, dass hier Links verboten sind?
192
Lowlevel-Coding / wofür ist ES?
« am: 15. April 2006, 01:16 »
Also CS, zeigt auf das Segment, in welchem grade Code ausgeführt wird,
wird also für Sprünge und eigentlich jeden Befehl gebraucht

DS ist das Gleiche für Daten, also das wird z.B. bei sowas gebraucht:
mov [0x0000], ax
ist dann eigentlich
mov [ds:0x0000], ax

aber wofür ist dann ES?
ES muss man ja auch am Anfang des Bootloaders auf das Code Segment setzen damit alles funktioniert
Ich dachte immer ES wäre nur für Schiebeoperationen
193
Lowlevel-Coding / pushen Interrupts?
« am: 15. April 2006, 01:06 »
Ich hab meine Funktionen so aufgebaut, dass man die überall aurufen kann,
da sie alle Register die geändert werden zuerst auf den Stack gepusht und hinterher wieder so runtergeholt werden

Wie sieht das eigentlich bei den Bios Interrupts aus?
muss man bevor man einen aufruft alle Register sichern, oder macht das die Interrupt?
194
Lowlevel-Coding / alternative zu Bochs
« am: 15. April 2006, 00:10 »
also qemu kann man irgendwie vergessen, das Teil erzeugt zwar einen Fehler, aber ist komplett uninformativ, angeblich soll man mit strg+alt+n in die Konsole kommen, klappt aber beim besten willen nicht,

ich schau mir jetzt mal vmware an
195
Offtopic / C-Calling Convention verbessern
« am: 15. April 2006, 00:08 »
hm, stimmt eigentlich, laden muss der Prozessor ja genauso viel,
die Anweisung kommt zwar nicht mehr so oft vor, dafür muss er sie aber öfter von der Gleichen Stelle laden

aber der C-Code ist ja wieder was ganz anderes
für die For-Schleife wird ja eine extra Variable angelegt
196
Offtopic / C-Calling Convention verbessern
« am: 14. April 2006, 22:50 »
@Krox:

indirekt eigentlich schon, da es weniger Befehle gäbe
vorrausgesetzt man braucht die Funktion öfters
und wenn man Befehle weg lässt wird das Programm immer schneller

ich hab extra noch überlegt ob man das wirklich da reinschreiben kann, aber mir ist nicht eingefallen warum nicht
naja, aus Fehlern lernt man...
197
Offtopic / C-Calling Convention verbessern
« am: 14. April 2006, 18:58 »
Heute hab ich versucht die C-Calling Convention schneller zu machen:

angenommen ich will eine Textschreibe Funktion aufrufen:
push dx ;in dx steht die Adresse
call text ;Text ist die Schreibfunktion
add sp, 2 ;hier wird dx dann wieder gelöscht


nun dachte ich, dass es ja eigentlich doof ist jedesmal wieder sp um 2 zu addieren,
dass kann man ja einfach direkt in der Funktion machen, dann muss mans nicht immer wieder machen:

text:
push bp
mov bp, sp
;eigentliche Funktion
mov sp, bp
pop bp
add sp, 2
ret


und dafür hab ich das bei de aufrufenden Teil weggelassen

danach hab ich 2 Stunden rumprobiert, bis ich mein Programm wieder am Laufen hatte, ich dachte das hat nix damit zu tun,
hatte es am Ende aber doch

jetzt dürf ihr mal raten wo der Fehler ist -.-
198
Offtopic / Windows XP Professional
« am: 14. April 2006, 18:53 »
Du sagtest du hättest gerade dein Windows XP installiert
also eins dass du legal erworben hast und dieses stände auf der schwarzen Liste

das hab ich als Geschichte bezeichnet


ein Key auf der schwarzen Liste den du grade erworben hast, kann ja noch sein, denn hat halt irgendwie jemand rausgefunden,
aber dass du statt dich ein Microsoft zu wenden hier illegal nach einem Key fragst, kommt mir irgendwie komisch vor

wie gesagt ist nicht böse gemeint, aber naja...
199
Lowlevel-Coding / alternative zu Bochs
« am: 14. April 2006, 18:06 »
ich wüsst gern ob es noch einen anderen PC Emulator, außer Bochs gibt
leider funktionieren die meisten meiner Programme immer mit Bochs, aber nie auf einem realen System,
deswegen kann ich nie den Debug Modus benutzen um den Fehler zu finden,
da es ja für Bochs keinen Fehler gibt

deswegen hoff ich, dass mein Programm in dem anderen Emulator nicht funktioniert, dann könnte ich dessen Debug-Modus benutzen, um den Fehler zu finden

Ich dachte ich hätte mal etwas von einem anderen gehört, weis aber nicht mehr wie der heist, da ich dann Bochs genommen hab

EDIT:

ich suche allerdings einen Kostenlosen, Kostenpflichtige habe ich schon ein paar gefunden,
außerdem sollte er für Windows sein, beispielweise QEMU hab ich bis jetzt nur für Linux gefunden

EDIT2:

QEMU gibts doch für Windows, dann schau ich mir das mal an
trotzdem, je mehr desto besser
200
Lowlevel-Coding / Disketten Lesefehler
« am: 14. April 2006, 12:45 »
ich les absichtlich immer nur 1 Sektor auf einmal, um solche Fehler zu umgehen
Code hab ich absichtlich nicht gepostet, ich dachte da vergeht den meisten die Lust, da er ein bisschen lang ist, aber wenns hilft:

readdisk:
push bp
mov bp, sp
sub sp, 0x06
pusha
mov ax, [bp+4]
mov bx, 0x0024
xor dx, dx
div bx
mov [bp-2], ax
mov ax, dx
push ax
mov bx, 0x0012
xor dx, dx
div bx
mov [bp-4], ax
pop ax
xor dx, dx
div bx  
mov ax, dx
inc ax
mov [bp-6], ax
mov ax, [bp+6]
mov es, ax
mov ah, 0x02
mov al, 0x01
mov ch, [bp-2]
mov cl, [bp-6]
mov dh, [bp-4]
mov dl, 0x00
int 0x13
jc readdisk_fehler
popa
mov sp, bp
pop bp
ret

readdisk_fehler:
pusha
push ds
push ax
mov ax, 0x1000
mov ds, ax
mov [0x0000], ax
pop ax
pop ds
mov si, readdisk_fault
call text
mov ax, 0x1000
mov ds, ax
mov si, 0x00
mov cx, 0x0002
call hex
popa
jmp readdisk

readbr:
mov cx, 0x0001
mov ax, 0x1000
readbr_loop:
cmp cx, 0x0055
je readbr_e
push ax
push cx
call readdisk
add sp, 4
inc cx
add ax, 0x20
jmp readbr_loop
readbr_e:
ret


in der main Funktion (keine Ahnung wie die bei Assembler heist, is ja eigentlich keine Funktion)
wird dann einfach "call readbr" aufgerufen
Die Segmente und der Stack sind richtig gesetzt

das Dumme ist ich kann mir nicht vorstellen wo der Fehler ist, ich hätte gedacht ich berechne einfach irgendwas falsch und die Sektoren werden komplett daneben geladen,
aber das kann nicht sein, in Bochs funktionierts ja

(der Code zum Sektoren lesen ist größtenteils der von Tee-Jay, meiner wollte nie so wirklich)

EDIT:

na klasse, pusha sichert gar nicht alle Register, es z.B. nicht, deswegen konnte das gar nicht funktionieren
Funktionieren tut das ganze allerdings trotzdem noch nicht, jetzt stürzt er einfach ohne Fehlercode ab, aber ich bin schonmal ein Stück weiter
Seiten: 1 ... 8 9 [10] 11 12

Einloggen