Autor Thema: Sectoren laden - Problem  (Gelesen 4839 mal)

SPTH

  • Beiträge: 79
    • Profil anzeigen
    • http://www.spth.de.vu
Gespeichert
« am: 07. December 2004, 20:12 »
Hi!
Ich hab den bootloader und den kernel von LL#1 kopiert, und damit versucht, auf dateien zuzugreifen.

naja, da gabs aber schon anfangs ein großes Problem: Der originale Bootloader läd 5 Sectoren (5*512 bytes). Da der Dateiinhalt aber erst bei 0x4200 anfängt, muss ich mehr als 20 sektoren lesen (also 20*512 bytes).

naja, 16 sektoren gehn ja, aber 32 geht nicht mehr, kA warum nicht. Was passiert ist, dass die Diskette nicht mehr aufhört zum laden, und es wird absolut nichts angezeigt!

Hat jemand eine Idee, warum das so ist, und was ich machen kann???

grüsse, ...
'Imagine all the people living life in peace!' (Imagine by John Lennon)

http://www.spth.de.vu <- Meine Codes und Artikel
Freier Schreiber für LowLevel

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #1 am: 07. December 2004, 20:17 »
Hast du dran gedacht das du nach (waren es 16?) Sektoren die Spur wechseln musst?

Weil in eine Spur nur 16 Sektoren passen. Und ich denke ja mal das du über int13 die Sektoren lädst und da musst du ja Kopf, Cylinder(Spur) und Sektor angeben.
Und du kannst nicht einfach bei Sektor 1 beginnen und bis 32 hochzählen lassen. Du müsstest dann zumindest den Cylinder um 1 erhöhen und bei Sektor wieder bei 1 beginnen.
Kann jedoch auch sein das du auch den Kopf verändern musst, jenachdem wohin Rawwrite die Sektoren hingeschriebe hat.
----------------------
Redakteur bei LowLevel

SPTH

  • Beiträge: 79
    • Profil anzeigen
    • http://www.spth.de.vu
Gespeichert
« Antwort #2 am: 07. December 2004, 20:24 »
OK, danke

natürlich hab ich daran nicht gedacht!

werd gleich in Ralf Browns interrutp-list nachgucken...

vielen dank, da wär ich selbst nie draufgekommen!

grüsse, ...
'Imagine all the people living life in peace!' (Imagine by John Lennon)

http://www.spth.de.vu <- Meine Codes und Artikel
Freier Schreiber für LowLevel

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #3 am: 07. December 2004, 20:26 »
Zitat von: TeeJay
Hast du dran gedacht das du nach (waren es 16?) Sektoren die Spur wechseln musst?

Weil in eine Spur nur 16 Sektoren passen. Und ich denke ja mal das du über int13 die Sektoren lädst und da musst du ja Kopf, Cylinder(Spur) und Sektor angeben.
Und du kannst nicht einfach bei Sektor 1 beginnen und bis 32 hochzählen lassen. Du müsstest dann zumindest den Cylinder um 1 erhöhen und bei Sektor wieder bei 1 beginnen.
Kann jedoch auch sein das du auch den Kopf verändern musst, jenachdem wohin Rawwrite die Sektoren hingeschriebe hat.


naja, soweit ich mich erinnere waren es bei einer floppy 18, aber sonst richtig ;-)
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

SPTH

  • Beiträge: 79
    • Profil anzeigen
    • http://www.spth.de.vu
Gespeichert
« Antwort #4 am: 07. December 2004, 20:31 »
jetz wo ihr so schnell antwortet kann ich ja fragen :)

wie ändere ich die spur?

grüsse, ...

(wenn alles funktioniert werd ich für LL#7 ein tut über Dateizugriff auf FAT12 und FAT32 schreiben - hoffentlich)
'Imagine all the people living life in peace!' (Imagine by John Lennon)

http://www.spth.de.vu <- Meine Codes und Artikel
Freier Schreiber für LowLevel

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 08. December 2004, 11:06 »
Hiho,

die Spur gibst du ja in einem Register an, bevor du Int 0x13 aufrufst.
Welches das jetzt genau ist, weiß ich nicht.

MfG GhostCoder
A man, a legend!

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #6 am: 08. December 2004, 14:28 »
lad dir am besten ralf browns int-liste. die ist zwar unübersichtlich, aber vollständig. für wichtige bios-ints habe ich das hier:

http://datasource.de/programmierung/index.html
da stehen unter bios-ints die interrupts. (zumindest die wichtigen)

mfg

JN!
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

SPTH

  • Beiträge: 79
    • Profil anzeigen
    • http://www.spth.de.vu
Gespeichert
« Antwort #7 am: 08. December 2004, 15:41 »
Hi!

Danke, die Liste von Ralf Brown hab ich schon länger mal runtergeladen. Hab gestern einige Zeit gearbeitet, aber noch immer hab ich große Problem. Also, der Code sollte:

bootloader:

org 0x7c00
stfat:
 jmp start
 nop
 db 0x4D,0x53,0x44,0x4F,0x53,0x35,0x2E,0x30  ;
 db 0x00,0x02,0x01,0x01,0x00,0x02,0xE0,0x00  ;
 db 0x40,0x0B,0xF0,0x09,0x00,0x12,0x00,0x02  ;
 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  ; FAT12 von einer formatierten Disk
 db 0x00,0x00,0x00,0x29,0x8C,0x22,0x2F,0x7C  ; God save Hex-Editor :)
 db 0x4E,0x4F,0x20,0x4E,0x41,0x4D,0x45,0x20  ;
 db 0x20,0x20,0x20,0x46,0x41,0x54,0x31,0x32  ;
 db 0x20,0x20,0x20

start:
cli
mov ax,0x9000
mov ss, ax
mov sp, 0
sti

mov [bootdrv], dl
call loada

mov ax, 0x1000
mov es, ax
mov ds, ax
push ax
mov ax, 0
push ax
retf

bootdrv db 0
loadmsg db 'Second Part To Hell has to wait...',13,10,0

putstr:
lodsb
or al, al
jz putstrd

mov ah, 0xE
mov bx, 0x7
int 0x10
jmp putstr
putstrd:
retn

loada:
push ds
mov ax, 0
mov dl, [bootdrv]
int 0x13
pop ds
jc loada

load1:

mov ax, 0x1000
mov es, ax
mov bx, 0
mov ah, 0x2   ; Ab sektor 2
mov al, 0x11  ; 17 Sektoren lesen
mov cx, 2
mov dx, 0
int 0x13  ; Lesen
jc load1

mov ax, 0x1000
mov es, ax
mov bx, 0
mov ah, 0  ; Ab Sektor 0
mov al, 0x13  ; 19 (höchste - hab ich getestet) S lesen
mov ch, 1  ; Spur 1
mov cl, 2
mov dx, 0
int 0x13  ; Lesen
jc load1

; (17+19) * 512 Bytes gelesen

mov si, loadmsg
call putstr
ret
ende:
times (512-(ende-stfat)-2) db 0
dw 0xAA55  ; Boot-sign



und der kernel:


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

start:

mov dx, 0x0
mov si, 0x0
call putstr
call getkey
jmp reboot

msg db 'Welcome to SPTH-OS 1.0',13,10,0
m_boot db 'Press any key...',10,0

putstr:
inc dx  ; Counter +1
lodsb              ; [si] -> al
cmp al, al  ; al=0?
jz putstr  al=0 -> next byte
mov ah, 0xE  ; schreiben
mov bx, 0x7  ; schreiben
int 0x10      ; schreiben
cmp dx, 0x4400  ; counter < 0x4400?
js putstr       ; counter < 0x4400 -> Next byte
ret  ; Fertig!

getkey:
mov ah, 0
int 0x16
ret

reboot:
db 0xEA
dw 0x0
dw 0xFFFF



Aber: Es funktioniert nicht.
Der Bootloader läd zwar fertig, dann wird aber nichts geschrieben.
Ich möchte, dass alle Nicht-0s von 0 bis 0x4400 ausgegeben werden (0-0x4400 ist  zB: bootloader, Root-Directory-Entry, Dateiinhalte!)

Was kann ich machen?
Besser gesagt: Wo ist das Problem???

grüsse, ...
'Imagine all the people living life in peace!' (Imagine by John Lennon)

http://www.spth.de.vu <- Meine Codes und Artikel
Freier Schreiber für LowLevel

SPTH

  • Beiträge: 79
    • Profil anzeigen
    • http://www.spth.de.vu
Gespeichert
« Antwort #8 am: 10. December 2004, 11:36 »
Hi!
kann mir keiner dabei helfen???
Andererseits kann ihc nix weitermachen und auch nichts für LL#7 schicken!

grüsse, ...
'Imagine all the people living life in peace!' (Imagine by John Lennon)

http://www.spth.de.vu <- Meine Codes und Artikel
Freier Schreiber für LowLevel

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 10. December 2004, 13:15 »
Hiho,

ehrlich gesagt hab ich Moment keine Lust mich durch den Code zu wühlen :)
Aber irgendwie scheint es mir, das du int 0x13 falsch aufrust(Siehe al und ah vor dem int)...

MfG GhostCoder
A man, a legend!

SPTH

  • Beiträge: 79
    • Profil anzeigen
    • http://www.spth.de.vu
Gespeichert
« Antwort #10 am: 10. December 2004, 22:16 »
Mann, bin ich blöd!
Danke GhostCoder, darauf wär ich nie gekommen, obwohl es offensichtlich ist.
Natürlich:

 mov   ah, 0  ; Ab Sektor 0


ist ein scheiss, das wär DISK - RESET DISK SYSTEM. AH muss natürlich 0x2 sein, um von Sektoren zu lesen!
hab da was falsch gelesen (englisch :D), und war mir so überzeugt, dass es passt, dass ich darauf nimma geschaut hab!

also, vielen dank noch mal!

grüsse, ...
'Imagine all the people living life in peace!' (Imagine by John Lennon)

http://www.spth.de.vu <- Meine Codes und Artikel
Freier Schreiber für LowLevel

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 11. December 2004, 12:35 »
Kein Problem immer wieder gerne,

solange es jetzt funktioniert... :)
A man, a legend!

 

Einloggen