Toon posts:

[tutorial] how to write your own OS

Pagina: 1 2 Laatste
Acties:
  • 6.354 views sinds 30-01-2008
  • Reageer

  • JayTaph
  • Registratie: oktober 1999
  • Laatst online: 21-10 19:41

JayTaph

Portability is for canoes.

Topicstarter
Ik heb een paar maandjes geleden (uit pure verveling, om eerlijk te zijn), ooit eens begonnen aan een tutorial'tje voor het schrijven van een eigen OS, uitgelegd in nederlandse leken-taal. Nu is dat een gigantisch karwei (blijkt), en ben ik ook niet echt verder gekomen dan het documenteren van de bootsector (en zelfs dat niet eens 100%). Het schrijven van de tutor is voor mij dus een stuk ingewikkelder dan het schrijven van het OS zelf.. Zeker als je alle bijbehorende dingen ook moet uitleggen zoals assembly, protected mode etc.. :+

Aangezien er hier zat mensen zijn die wel willen, maar geen OS kunnen schrijven, is het misschien wel leuk om ze online te gooien, (en straks in de codebase?) maar dan zal ik wel hulp nodig hebben van andere, omdat het een gigantisch karwei is om het in leken-taal te documenteren.

Mijn vraagjes dus: zijn er mensen die geinteresseerd zijn in de (toekomstige) tutors, en zijn er mensen die geinteresseerd zijn in het meeschrijven aan de tutors? Het heeft namelijk ook weinig nut om me kapot te typen voor 1 of 2 personen die het volgen, en in me eentje is het gewoonweg teveel...

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • Sneechy
  • Registratie: juni 2001
  • Laatst online: 24-03-2003
Lijkt me hardstikke interessant (om te lezen dan), alhoewel ik niet echt leek ben.

  • Grum
  • Registratie: juni 2001
  • Niet online
ik 'speel' wel de leek :p

  • DaFearLess
  • Registratie: juni 2001
  • Niet online
lijkt mij ook heel interesant :)

en ik ben echt leek

specs : http://specs.tweak.to/7435


  • veldmuis
  • Registratie: mei 2001
  • Niet online
same here, ik willum echt wel es lezen
en ik kan hemaal niet programmeren ofzo, dus lijkt me wel boeiend om te zien hoe zoiets in elkaar zit

  • JayTaph
  • Registratie: oktober 1999
  • Laatst online: 21-10 19:41

JayTaph

Portability is for canoes.

Topicstarter
nou ja, euh.. "leken"-taal is ook wel heel erg overdreven (en dan zoek je op je toetsenbord een knop met een gebogen pijltje naar links, ook wel de 'enter' of 'return' knop genoemd. Druk hier 2 maal op :+)..

Ik bedoel meer te zeggen dat je wel ervaring hebt (da's ook HARD nodig), maar dat je niet precies hoeft te weten hoe een OS inelkaar zit (dat leg ik namelijk al uit :)), maar veel ervaren visual-programmeurs zullen veel moeite hebben met protected mode-begrippen enzovoorts... dat zijn dus de "leken" die ik bedoel..

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • veldmuis
  • Registratie: mei 2001
  • Niet online
Op maandag 30 juli 2001 12:02 schreef JayTaph het volgende:
nou ja, euh.. "leken"-taal is ook wel heel erg overdreven (en dan zoek je op je toetsenbord een knop met een gebogen pijltje naar links, ook wel de 'enter' of 'return' knop genoemd. Druk hier 2 maal op :+)..

Ik bedoel meer te zeggen dat je wel ervaring hebt (da's ook HARD nodig), maar dat je niet precies hoeft te weten hoe een OS inelkaar zit (dat leg ik namelijk al uit :)), maar veel ervaren visual-programmeurs zullen veel moeite hebben met protected mode-begrippen enzovoorts... dat zijn dus de "leken" die ik bedoel..
oke dan ben ik minder dan leek :+
wat jij wilt hoor :D

  • eX0duS
  • Registratie: juni 2001
  • Laatst online: 23:49
Ik wil best een 2e Bill Gates worden, COUNT ME IN!

  • Apache
  • Registratie: juli 2000
  • Laatst online: 17:19

Apache

amateur software devver

ik wil ook altijd bijleren dus ik zal het zeker lezen :)

misschien bouwt iemand er wel een successvol OS mee :P

If it ain't broken it doesn't have enough features


  • JayTaph
  • Registratie: oktober 1999
  • Laatst online: 21-10 19:41

JayTaph

Portability is for canoes.

Topicstarter
Op maandag 30 juli 2001 12:05 schreef Apache het volgende:

ik wil ook altijd bijleren dus ik zal het zeker lezen :)



misschien bouwt iemand er wel een successvol OS mee :P
Och... ik vraag maar 35% van de netto opbrengst... :+

Maar ik zal er eentje in GOT-format zetten en hier online zetten. Kan ik pas vanavond doen want ik heb ze hier niet op de laptop staan... :(

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • Marvin
  • Registratie: juli 2001
  • Laatst online: 08-11-2010
Ik ben niet zo leek maar ik zit al te wachten tot hij online komt. Hier zullen vele mensen op zitten te wachten zodat ze een beetje degelijke OS kunnen bouwen voor bijv. Hun bedrijf of iets anders.

  • Arien
  • Registratie: september 2000
  • Laatst online: 15-05-2008
Marvin: Hier zullen vele mensen op zitten te wachten zodat ze een beetje degelijke OS kunnen bouwen voor bijv. hun bedrijf of iets anders.
Niet om het een of ander maar ehmm... :D

  • 5chaap2k
  • Registratie: januari 2001
  • Niet online

5chaap2k

¯\_/¯\_/¯\_/&ma

Ik wil die tutorial ook wel eens lezen :)

\Specs . pics . CASEMOD \_iconstats_/¯


  • basst
  • Registratie: april 2000
  • Laatst online: 02-05-2004
Lijkt me ook wel leuk om te lezen ja!

| you should have no expectation of privacy! |Team Supercows |


  • Tizzwat
  • Registratie: december 2000
  • Laatst online: 09-05-2009
Op maandag 30 juli 2001 12:12 schreef Marvin het volgende:
Ik ben niet zo leek maar ik zit al te wachten tot hij online komt. Hier zullen vele mensen op zitten te wachten zodat ze een beetje degelijke OS kunnen bouwen voor bijv. Hun bedrijf of iets anders.
*LOL*
Welk OS heb jij op je bedrijf ?? :D

  • Spectral929
  • Registratie: oktober 2000
  • Laatst online: 03-02-2006
Op maandag 30 juli 2001 12:12 schreef Marvin het volgende:
Hier zullen vele mensen op zitten te wachten zodat ze een beetje degelijke OS kunnen bouwen voor bijv. Hun bedrijf of iets anders.
Grapje zeker? >:)

  • Tim
  • Registratie: mei 2000
  • Laatst online: 24-08 14:09
Op maandag 30 juli 2001 12:40 schreef Spectral het volgende:
[..]
Grapje zeker? >:)
Tuurlijk niet >:)
Oh, even de administratie bekijken, even booten naar het administratie OS :)
Iedereen een custom OS,
Verdieping 3 OS
WC OS -> Menu: Doortrekken, WC papier halen >:)
:P

  • Onno
  • Registratie: juni 1999
  • Niet online
Leuk idee.. maar ik vraag me wel een beetje af wie je hiermee bereikt. Mensen die al daadwerkelijk in het stadium verkeren dat ze een OS willen schrijven hebben zich denk ik meestal ook al wel in intel docjes verdiept, en kunnen dus zelf uitvogelen hoe pm werkt. Maar misschien kan het je wel met een aantal goede ideeen op weg helpen natuurlijk. :)

  • marnix_nr_nog_wat
  • Registratie: maart 2001
  • Laatst online: 10-06-2003

marnix_nr_nog_wat

 trapt kont

Nou lijkt mij in ieder geval ook interessant om te lezen, niet omdat ik zelf een os wil bouwen ( het idee alleen al :D ), maar gewoon omdat ik wel ongeveer wil weten hoe het inelkaar steekt.
En ja je mag mij ook wel tot de leken rekenen :P

  • Tsjipmanz
  • Registratie: oktober 2000
  • Laatst online: 11-10 19:45

Tsjipmanz

Der Rudi ist da

Misschien dat Andrew S. Tanenbaum je wil helpen ( ast@cs.vu.nl )

There's no such thing as a mistake, just happy accidents - Bob Ross
Relaxte muziek: altijd okee!
- Soulseek rulez -


  • Infinitive
  • Registratie: maart 2001
  • Laatst online: 23-10 12:02
Laat maar eens zien.

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • JayTaph
  • Registratie: oktober 1999
  • Laatst online: 21-10 19:41

JayTaph

Portability is for canoes.

Topicstarter
Op maandag 30 juli 2001 12:56 schreef Onno het volgende:

Leuk idee.. maar ik vraag me wel een beetje af wie je hiermee bereikt. Mensen die al daadwerkelijk in het stadium verkeren dat ze een OS willen schrijven hebben zich denk ik meestal ook al wel in intel docjes verdiept, en kunnen dus zelf uitvogelen hoe pm werkt. Maar misschien kan het je wel met een aantal goede ideeen op weg helpen natuurlijk. :)
Intel doc'jes lezen is ook een van de voorwaardes :). Ik kan natuurlijk niet alles gaan uitleggen en ben dat zeker ook niet van plan. Het gaat meer om wat je met die docs moet gaan doen. Hoe laad je een kernel in, hoe moet ik fatsoenlijk een GDT opzetten en hoe kan ik task switchen. Dat staat overal netjes uitgelegd, maar als je het voor het eerst probeert te doen dan valt het allemaal vies tegen (ik weet niet hoe het met jou zit, maar mijn reset-knop is helemaal weggesleten :)).

En het grote voordeel met het hier publiceren is dat je vragen meteen beantwoord kunnen worden (door wie dan ook). Als ik een OS aan het bouwen ben, en mijn bootsector doet het niet, dan kan ik alleen maar passief text gaan zitten doorlezen en mijn sources regel voor regel nachecken. Maar hier kan ik veel makkelijker het probleem (en evt sources) posten en er zullen zat mensen zijn die dan eventuele fouten kunnen opsporen..

Dat niet iedereen naar huis gaat met een full-size OS lijkt me logisch, maar der zullen zat mensen zijn (als ik de postings zo lees) die het wel interessant vinden om het op z'n minst te proberen. Alhoewel ik wel me afvraag hoe lang die interesse blijft, aangezien het heel lang duurt voordat je echt resultaat gaat zien.

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • Infinitive
  • Registratie: maart 2001
  • Laatst online: 23-10 12:02
Misschien is het dan handig om de links naar de intel docjes erbij te zetten (iets meer direct dan developer.intel.com :7 ).

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • Engineer
  • Registratie: juni 2001
  • Laatst online: 19-10 12:16
Koel, alleen dat bootsector gedeelte is al vet :)

  • 4of10
  • Registratie: januari 2001
  • Laatst online: 28-06-2007

4of10

Resistance is futile

ik ben zelf geen leek op dit gebied aangezien ik zelf een OS aan het schrijven ben en het al redelijk op gang is. Maar als je echt een OS wilt schrijven, is het lezen van boeken en intel manuals en zo toch eigenlijk niet te vermijden. En er zijn al best veel "how to write your own OS" tutorials (weliswaar in het engels, maar ik denk wel dat je dat nodig hebt om een OS te kunnen programmeren). Bovendien is een OS echt een enorm project dus een complete tutorial maken is echt niet te doen. Een bootsector schrijven is een van de kleinste onderdelen eigenlijk ;). Maar het is wel een leuk ID voor de beginners maar een OS schrijven is eigenlijk niet met een tutorial te beschrijven

Als iemand nog links nodig heeft, hier staan een paar andere tutorials:

Creating your own Operating System - http://mega-tokyo.com/os/os-faq.html

Code your own OS - http://www.openbg.net/sto/os/

The Triple Fault Club -
http://www.execpc.com/~geezer/os/index.htm

edit:
Type 'n' co

lal | 011011000110000101101100 | Current version of TriangleOS: 0.0.3-DEV


  • JayTaph
  • Registratie: oktober 1999
  • Laatst online: 21-10 19:41

JayTaph

Portability is for canoes.

Topicstarter
Sjaloom allemaal!

Welkom bij JayTaph's How-To-Write-An-OS-Tutorial. Als je dit leest, ben je waarschijnlijk nieuwschierig over hoe OS'en in elkaar zitten, of ben je benieuwd wat dit allemaal inhoudt, of heb je misschien op de verkeerde link geklikt. Anyways: welkom dus. Vandaag gaan we het hebben over het schrijven van een eigen OS. Een OS? Ja, Operating System. Zoiets als windows, linux, solaris, DOS en consorten.

Ok, eventjes relativeren: na het lezen hiervan ga je echt geen linux bouwen, maar je gaat wel een beetje leren hoe een OS eruit zien onder de motorkap en hoe je zelf (welliswaar simplistisch) een eigen OS in elkaar kunt schroeven. Dit is ongeveer wat ik ga bespreken:

* Bootstrapping.
* Aansturen van console.
* Switchen naar Protected mode.
* Laden van een in C geschreven kernel.
* Schrijven van een eigen c-library.
* Paging / Virtual Memory Manager.
* Multitasken van C-routines en/of aparte programma's.

en nog veel meer, maar dit zijn zo de dingen die ik zeker wil gaan behandelen. Hou er wel rekening mee dat deze tutor eigenlijk alleen geldt voor een i386 processor (elke processor boven de 286 is goed). Er zullen genoeg dingen zijn die je niet ineens begrijpt, of dingen waarvan je nog nooit gehoord hebt, maar waarvan ik wel vanuit ga dat je het snapt.


Wat heb je zelf nodig om mee te doen met deze tutor:

* Een *goede* kennis van C. Zonder dat ben je eigenlijk nergens, of ga je het in ieder geval moeilijker krijgen dan de rest...
* Een matige kennis van assembly. Helaas voor sommige mensen kunnen we niet zonder.
* Matige kennis van de i386 processor.
* Een redelijk denk en werkniveau.
* Een computer waarop je gaat coden (maakt niet uit vanaf welk OS).
* Eventueel een computer (minimaal een 80386) met minimaal 1 MB geheugen. Hierop gaan we het OS testen,
maar wat makkelijker is, is om vmware of bochs te gebruiken.
* VMWare of BOCHS. Ik gebruik BOCHS met debugging aangezien die heel veel goeie info teruggeeft over de
VM-processor en de huidige staat waarin hij verkeerd. Hierdoor kan je *HEEEEEL* veel kleine geniepige bugs verwijderen.
* Nasm (netwide assembler), gcc (gnu compiler collection), djgpp of een andere 32bits c-compiler.
* Ralphs Brown Interrupt List
* HTML-pages met allemaal info over OS'en. Binnenkort zet ik er wel een lijstje bij, maar lees.... lees heel veel....
* Veeeeeeel papier, caffeine en een ijzeren wil om door te zetten terwijl je al dagen bezig bent met de vraag waarom je OS steeds crashed.


Misschien dat ik nog dingen vergeten ben, als dat zo is, dan vul ik dat nog wel aan. Alle tools en dergelijke zijn zo te vinden op internet via Google. Het kan natuurlijk zijn dat je niet alles weet wat ik heb opgeschreven. Dat geeft op zich niets, maar ik ga veel dingen doen die dan misschien moeilijk lijken, terwijl ik er vanuit ga dat je het al kan. Dan zal je het denk ik op de gathering even moeten vragen. Als er nog meer mensen zijn die deze tutor volgen, dan zullen ze je vast wel willen helpen. Zeker als we dadelijk gaan beginnen met proctected mode, dan ga ik er voor een groot deel ervan uit dat je termen kent zoals page-mapping, physical memory, logical memory, descriptors, selectors, ringen, cr0's, LDT's, GDT's, traps, gates, interrupts etc... Ben je er nog?

Hou er wel ten alle tijden rekening dat niemand volmaakt is (al kom ik heel dicht in de buurt), en dat zelfs ik af en toe fouten maak (stinkt het bij jou ook zo?). Dus als je systeem ontploft, of al je MP3'tjes, video-cd'tjes en je illegale win-XP kopieen verdwenen zijn, dan heb ik het in ieder geval niet gedaan, mmkay?

Ok dan, dan gaan we nu beginnen... niet gaan staan, armen binnenboord en niet flitsen naar de wilde dieren...

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • JayTaph
  • Registratie: oktober 1999
  • Laatst online: 21-10 19:41

JayTaph

Portability is for canoes.

Topicstarter
Bootstrapping:
--------------

Moeilijkheidsgraad: makkelijk
Voorkennis: matige i386 assembly
Referenties: Ralfs Brown Interrupt List
Tools: bochs, dd, nasm


Bootstrapping is het process dat gestart wordt als je je computer hebt aangezet en nadat de BIOS zijn tests heeft uitgevoerd (de zogenaamde POST - power on self test). Je BIOS laadt vanaf de boot-drive 1 sector (512 bytes) in zijn geheugen en springt naar dat stukje code. Dat stukje code zorgt voor het laden van de rest van het OS (of voor andere dingen, zoals het verzorgen voor virussen of spelletjes als tetris). De sector van de schijf waarop dit stukje code staat heet de bootsector en staat per definitie op de eerste sector (sector 1) van de schijf.

Op een harddisk kun je meestal meerdere partities kwijt, met elk een eigen bootsector. Hierdoor kan de bootsector van partitie 2 nooit op de eerste sector van de schijf staan (omdat hier al de bootsector van partitie 1 staat). Om dit op te lossen staat op de eerste sector van een harddisk meestal geen bootsector, maar een master boot record (MBR). Dit is ook een stuk code dat wordt ingeladen door de bios, maar bevat extra informatie over de partities op de schijf (de partitie table). Dit moet ook allemaal in 512 bytes gebeuren, dus een MBR heeft minder ruimte voor programma-code dan een bootsector.

Een MBR en bootsector worden allebei beeindigd door 0xAA55 op plaats 510. Dit is de bootsector terminator en je bios *KAN* (maar hoeft niet altijd) kijken of dit bestaat. Als het niet bestaat, dan kan je bios zeggen dat er geen legale bootsector is en stoppen met booten. Dit moet er dus altijd instaan wil je je OS laten booten op verschillende computers (en BIOS'en).

Ook kunnen sommige file-systemen kunnen in de bios een header zetten waarin gegevens staan over de schijf (volume naam, fat-type etc). Hiermee gaan we pas in het volgend hoofdstuk aan de gang. Hierdoor is het mogelijk om bijvoorbeeld je OS en de benodigde files te kopieren naar een normale DOS-floppy.

In dit hoofdstuk gaan we een bootsector maken die geen OS inlaad, maar wat text laat zien op het beeldscherm. We gaan op dit moment nog geen enge en moeilijke dingen doen zoals het inladen van sectoren etc. Als je geen assembly kent, dan worden sommige dingen hieronder al best pittig, maar ik probeer zoveel mogelijk uitleg te geven in wat ik doe, en als je er dan nog niet uitkomt, dan heb je altijd nog the gathering... :+


Het eerste wat we moeten weten is dat de bootsector normale, ruwe code is zonder headers (zoals exe-files). We weten dat de laatste 2 bytes van de code 0xAA55 moet zijn, en dat de code precies 512 bytes lang moet zijn (we kunnen heel makkelijk de code uitvullen met 00'tjes of NOP'jes).

We weten dat de bootsector door de BIOS geladen word op positie 0000:7C00 of 07C0:0000. Alletwee zijn mogelijk, dus moeten wij er zelf voor zorgen dat dit op elk systeem gelijk is.

Wat ook handig is, is dat de BIOS in het DL-register het ID van de drive laad waarvan we booten. Floppy drives beginnen bij 0: 00 is de A:, 01 is de B:, en harde schijven (fixed disks) beginnen bij 0x80: 80 is de C:, 81 de D: etc etc..

Hou er rekening mee dat wanneer je in de bootsector zit, je niet alles kunt gebruiken wat je normaal wel kunt. Je kunt niet alle interrupts die je wilt aanspreken, en dingen zoals de muis werken nog niet. Je moet dus zo minimaal mogelijk gebruik maken van interrupts, en zoveel mogelijk zelf doen (zover dat dat kan).
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
[bits 16]           ; 16 bits code  
    org 0       ; We staan op offset 0

    ; We weten niet of we op 0000:7C00 of 07C0:0000 staan, daarom kiezen
    ; we er zelf een.

    mov ax, 0x7C0   ; Segment 07C0
    mov ds, ax      ; Data staat op 07C0:0000 ipv 0000:7C00

    cli
    xor ax, ax      ; Stack Segment Goedzetten
    mov ss, ax
    mov sp, 0xFFFF
    sti

    mov [bootdrive],dl  ; Onthoud de bootdrive

    ; De volgende code maakt van het duffe zwarte achtergrond een 
    ; mooi blauw kleurtje.
    mov dx,0x3c8    ; VGA Palette register (werkt dus alleen
    xor al,al       ; op een VGA)
    out dx,al       ; We willen kleur 0 (background) instellen
        
    inc dx      ; VGA Data register (0x3c9)
    mov al,8
    out dx,al       ; Output rood component
    xor al,al
    out dx,al       ; Output groen component
    mov al,32
    out dx,al       ; Output blauw component

    dec dx      ; En doe hetzelfde voor kleur 1
    mov al,1
    out dx,al

    inc dx
    mov al,63
    out dx,al
    out dx,al
    out dx,al

    ; Nu hebben we een mooi kleurtje, print de string op
    ; het beeld.

    mov si, msg     ; Print string op het beeld
    call    PrintMsg

    xor ah,ah       ; Wacht op een toets
    int 0x16

    int  0x19       ; En reboot, de rest komt later...

; ------------------------------------------------------------------------
; Routine die een string in SI print die eindigt op een 0. 
PrintMsg:
    cld
    lodsb           ; Laad uit DS:SI naar AL
    cmp al,0
    jz  End_Of_String   ; Is het een 0, dan einde
    call    PrintChar   ; Print character
    jmp PrintMsg    ; En volgende character
End_Of_String:
    ret

; -------------------------------------------------------------------------
; Routine die een karakter in AL op het scherm print. Deze routine maakt 
; gebruik van BIOS-interrupt 0x10 om een karakter te plotten.
PrintChar:
    mov ah,0x0E     ; BIOS functie 15
    mov bx,0x0001   ; Print op page 0 in kleur 1
    int 0x10
    ret

; -------------------------------------------------------------------------
    ; Data die we gebruiken in de bootsector
    msg     db  'hello bootsector!',13,10,0
    bootdrive   db  0

    times 510-($-$$) db 0x90    ; Opvullen met NOP (doet niets)
    dw  0xAA55          ; En de boot terminator

Ik hoop dat het een beetje duidelijk is wat ik hierboven gedaan heb. We weten als bootsector zijnde niet zeker of we op 0000:7C00 of 07C0:0000 bevinden (dat is per BIOS verschillend). Voor onze data is dit relevant om te weten en dus kiezen wij zelf maar wat het gaat worden. Daarna zetten we een stack-framepje op en bewaren wij de bootdrive-id. Het stukje daarna zorgt ervoor dat we van dat saaie grijs-op-zwart kleurtje afzijn door de achtergrondkleur (kleur 0) mooi blauw te maken en de letters (kleur 1) wit. Als dat gebeurd is, printen we een string af op het scherm, wachten we op een toets en rebooten we het systeem.

Voordat je je bootsector op een schijf kunt zetten moet je het eerst assembleren met nasm:
code:
1
    nasm -o bootsect.dat bootsect.asm

Als dat gedaan is, kun je je bootsector wegschrijven naar de eerste sector van je schijfje. Ik doe het eventjes linux-style, maar voor de windows-mensen onder ons kunnen (hopelijk) zelf wel iets verzinnen (rawrite.exe ofzow). Zoniet, dan zal ik kijken of ik daarvoor een simpel programmatje voor kan vinden.
code:
1
    dd if=bootsect.dat of=/dev/fd0 bs=512

Voila, je eerste bootsector, en begin van je eigen OS is af... Reboot je test-systeem met de schijf, of probeer het via BOCHS uit (je A-drive is /dev/fd0). Werkt het? simpel toch? :-)

Huiswerk: maak een bootsector dat een stukje tekst laat zien en de gebruiker laat kiezen wat hij wil kiezen (bijvoorbeeld: laat de gebruiker een driveletter kiezen en bewaar deze in een aparte variable). Hierbij kun je gebruik maken van Ralph Brown Interrupt lists.

In het volgende hoofdstuk gaan we een MS-DOS (en tevens windows) compatible floppy maken met onze eigen bootsector. Deze bootsector kan kijken of er een file op de floppy staat die we nodig hebben (bijvoorbeeld kernel.sys) en deze in het geheugen laden.

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • 4of10
  • Registratie: januari 2001
  • Laatst online: 28-06-2007

4of10

Resistance is futile

... voor de windows-mensen onder ons kunnen (hopelijk) zelf wel iets verzinnen (rawrite.exe ofzow). Zoniet, dan zal ik kijken of ik daarvoor een simpel programmatje voor kan vinden.
ik heb nog wel een simpel programmatje voor DOS/Win users, heb ik ooit geschreven omdat ik het ook zelf voor m'n OS nodig had.
Hier staat de complete file:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/*
             TriangleOS
                      -   by Wim Cools (2001)

 Name: makeflp.c
 Function: Puts bootsector on a 3,5~-inch floppy (1.44MB)
 Last Update: 01/04/2001 - 19:51
*/

#include <stdio.h>
#include <bios.h>

#define BIOS_WRITE  0x3

int result;
int count;

int main()
{
 FILE *bootsector;
 unsigned char buffer[512];

 if ((bootsector=fopen("boot.bin","rb"))==NULL)
 {
      printf("Unable to load the Triangle Bootsector (BOOT.BIN)\n");
      return -1;
 }
 if (!fread(&buffer,512,1,bootsector))
 {
      printf("Error reading file boot.bin\n");
      return -1;
 }
 printf("Writing bootsector to A:, Sector 1, Cylinder 0, Head 0\n");
 result = 1;
 count = 0x0;
 while (result != 0)
 {
      count++;
      if (count > 5)
      {
            printf("Error! Unable to write sector\n");
            return 0;
      }
      result = biosdisk(BIOS_WRITE, 0, 0, 0, 1, 1, buffer);
 }
 return 1;
}

boot.bin is hier dus je bootsector
voor meerdere sectors kun je idd beter het programma "RAWRITE" ergens vandaan halen, dit programma is maar heel simpel om ff de bootsector weg te schrijven.
Maar goed, dit is toch maar klein, je kunt het compilen met DJGPP.
Btw, ik ben niet verantwoordelijk voor schade he ;)... Ik weet niet of dit ook onder Win2K en XP werkt, waarschijnlijk wel maar vooral XP _zuigt zwaar_. Dat meen ik, XP/(Win2K) is echt niet fijn als Windows-OSdev-Platform... Het is traag en vanalles werkt er niet lekker onder.

lal | 011011000110000101101100 | Current version of TriangleOS: 0.0.3-DEV


  • mrek
  • Registratie: maart 2000
  • Laatst online: 06-02-2018

mrek

*BURP*

Cool dit, ga het eens aandachtend lezen, ga vooral zo door :)

There are two kinds of people, those who do the work and those who take credit. Try to be in the first group, there is less competition there.


  • Infinitive
  • Registratie: maart 2001
  • Laatst online: 23-10 12:02
Een aparte functie voor PrintChar maken lijkt me wat overbodig?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
; ------------------------------------------------------------------------
; Routine die een string in SI print die eindigt op een 0. 
PrintMsg:
    cld
    lodsb           ; Laad uit DS:SI naar AL
    cmp al,0
    jz  End_Of_String   ; Is het een 0, dan einde

    ; letter plotten
    mov ah,0x0E     ; BIOS functie 15
    mov bx,0x0001   ; Print op page 0 in kleur 1
    int 0x10

    jmp PrintMsg    ; En volgende character
End_Of_String:
    ret

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • Sire
  • Registratie: februari 2001
  • Laatst online: 03-03-2009

Sire

Wie weet er nog een

Ga zo door, dit is echt cool!

-_-


  • Rob2k
  • Registratie: juli 2001
  • Niet online
Hulp nodig.

Ik zou je wel willen hjelpen bij het schrijven van de tutorial. Heb zelf nog niet echt een OS in elkaar gezet maar weet er al wel heel veel van af. Als iemand nog webpagina's zoekt met informatie, heb hier een stuk of 20 bookmarks naar nuttige sites. Interesse?? mail me dan op j.koster@rendo.dekooi.nl

Groeten,
Rob

  • JayTaph
  • Registratie: oktober 1999
  • Laatst online: 21-10 19:41

JayTaph

Portability is for canoes.

Topicstarter
Zenks... volgend deeltje komt binnenkort (eerst ff zelf nog afmaken :P).

Niet alles wat ik doe is misschien *DE* perfecte manier van werken dus er zullen zat dingen zijn die andere mensen beter, sneller of anders zullen doen. De reden waarom PrinChar een aparte routine is, is omdat deze (later) gebruikt wordt om ruwe letters te printen. In elke fase van de bootsector word er een letter geprint (CYBOS, dus 5 stages), zodat ik netjes kan zien waar een computer hangt tijdens het booten.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
; Start phase 1
mov al, 'C'
call PrintChar

 .....

; Start phase 2
mov al, 'Y'
call PrintChar

 .....

etc..

anyways... you get the point...

Het programmaatje van 4of10 kan gebruikt worden voor het schrijven van de bootsector naar schijf.. tnxs.. scheelt mij weer wat werk :P

In het volgend hoofdstuk gaan we meteen gebruik maken van FAT12, dus kun je vanaf dat moment gewoon files via windows naar de schijf kopieeren. Alleen de bootsector zal je op deze manier moeten blijven schrijven (maar zodra die klaar is, hoef je er nog maar weinig aan te doen).

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • Beelzebubu
  • Registratie: juni 2001
  • Laatst online: 25-02-2014

Beelzebubu

Bé-jèl-ze-bú-bú

Erg kewle tutorial... Maarruhhh, ik kan absoluut geen ASM, dus domme vraag: kun je een bootsector in C proggen? C kan ik wel :P

Linux & GNOME Multimedia Developer
"It's over, baby, over..." - future has arrived, today!


  • Rob2k
  • Registratie: juli 2001
  • Niet online
Heb die code ook gebruikt om bootsector te schrijven. Maar misschien is het handig om het zo te doen:
int main (int argc, char *argv[]);
en dan ook:
bootsector=fopen(argv[1],"rb")
zit je niet meer vast aan dat boot.bin, gebruik zelf nl. andere namen...zoals velen zullen doen

  • Infinitive
  • Registratie: maart 2001
  • Laatst online: 23-10 12:02
Niet alles wat ik doe is misschien *DE* perfecte manier van werken dus er zullen zat dingen zijn die andere mensen beter, sneller of anders zullen doen. De reden...
Zoiets dacht ik al. Ik zat me alleen in dit geval af te vragen om het waarom van die aparte functie (maar dat is nu duidelijk). Het is natuurlijk ook maar een voorbeeld.

Van mij hoef je verder niet veel haast te maken hoor. Dan heb ik tenminste nog even de tijd om wat kennis up-to-date te brengen. Net zoals de meeste andere geinteresserden hapert er hier en daar (of overal) nog wat. Mensen die de benodigde kennis al hebben die zullen dit denk ik niet lezen (wel lezen maar er verder niets mee doen omdat ze het al wel weten).

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • Infinitive
  • Registratie: maart 2001
  • Laatst online: 23-10 12:02
[EDIT:]
Erg kewle tutorial... Maarruhhh, ik kan absoluut geen ASM, dus domme vraag: kun je een bootsector in C proggen? C kan ik wel
kan niet, kijk maar wat een compiler/linker doet met segmenten, etc. Bovendien moet je ook onder het limiet blijven...

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • BurningSheep
  • Registratie: januari 2000
  • Laatst online: 09-05-2017
Op dinsdag 31 juli 2001 13:19 schreef Infinitive het volgende:

[..]

kan niet, fopen is een functie uit een bibliotheek en aangezien je nog geef bibliotheken kan openen... en bovendien misschien het formaat van je lib niet in het zelfde formaat is als de layout die je zelf aan je lib wilt geven. Om nog maar te zwijgen over wat een compiler/linker doet met segmenten, etc. Bovendien moet je ook onder het limiet blijven...
Waar heb je het over?

Deze code wordt gewoon gebruikt onder (bijv.) windows om de bootsector op een disk te zetten

  • mrek
  • Registratie: maart 2000
  • Laatst online: 06-02-2018

mrek

*BURP*

Op dinsdag 31 juli 2001 13:19 schreef Infinitive het volgende:

[..]

kan niet, fopen is een functie uit een bibliotheek en aangezien je nog geef bibliotheken kan openen... en bovendien misschien het formaat van je lib niet in het zelfde formaat is als de layout die je zelf aan je lib wilt geven. Om nog maar te zwijgen over wat een compiler/linker doet met segmenten, etc. Bovendien moet je ook onder het limiet blijven...
Hij heeft het over het stukje code van 4of10. Correct me if I'm wrong :)

There are two kinds of people, those who do the work and those who take credit. Try to be in the first group, there is less competition there.


  • BurningSheep
  • Registratie: januari 2000
  • Laatst online: 09-05-2017
Op dinsdag 31 juli 2001 13:32 schreef CoDeR het volgende:

[..]

Hij heeft het over het stukje code van 4of10. Correct me if I'm wrong :)
Volgens mij haalt ie een paar dingen door elkaar, maar het kan aan mij liggen

  • 4of10
  • Registratie: januari 2001
  • Laatst online: 28-06-2007

4of10

Resistance is futile

Op dinsdag 31 juli 2001 13:17 schreef Rob2k het volgende:
Heb die code ook gebruikt om bootsector te schrijven. Maar misschien is het handig om het zo te doen:
int main (int argc, char *argv[]);
en dan ook:
bootsector=fopen(argv[1],"rb")
zit je niet meer vast aan dat boot.bin, gebruik zelf nl. andere namen...zoals velen zullen doen
je mag er best een int main(int argv, char **argv) van ja ;) maar ik had het niet echt nodig en in de source stond de naam toch ... dus ... ;)
kan niet, fopen is een functie uit een bibliotheek en aangezien je nog geef bibliotheken kan openen... en bovendien misschien het formaat van je lib niet in het zelfde formaat is als de layout die je zelf aan je lib wilt geven.
Uhm volgens mij zie het een beetje verkeerd.
Die code is bedoeld om vanuit DOS de bootsector te schrijven (onder *NIX/*BSD kun he daar dus 'dd' voor gebruiken). Je hebt dus al _wel_ libraries en het is gewoon de DOS API hoor, want dit programma _is_ voor DOS/Win. Een bootsector schrijven vanuit je eigen OS is nog wel een paar tutorials verder hoor ;)

lal | 011011000110000101101100 | Current version of TriangleOS: 0.0.3-DEV


  • 4of10
  • Registratie: januari 2001
  • Laatst online: 28-06-2007

4of10

Resistance is futile

Op dinsdag 31 juli 2001 12:53 schreef beelzebubu het volgende:
Erg kewle tutorial... Maarruhhh, ik kan absoluut geen ASM, dus domme vraag: kun je een bootsector in C proggen? C kan ik wel :P
Nee een bootsector kan niet in C.
Okay, tenzij je gaat EMITten en een C code vol met inline assembly maar dan heb je er ook vrij weinig aan ;)

lal | 011011000110000101101100 | Current version of TriangleOS: 0.0.3-DEV


  • Infinitive
  • Registratie: maart 2001
  • Laatst online: 23-10 12:02
eehm, ja, de verkeerde gequote |:(

Ik wilde zeggen wat 4of10 hierboven net poste:
Nee een bootsector kan niet in C.
Okay, tenzij je gaat EMITten en een C code vol met inline assembly maar dan heb je er ook vrij weinig aan

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • oogapp0ltje
  • Registratie: januari 2001
  • Niet online
Ok, het is een goede oefening om je computer beter te leren kennen, en om je c/c++/java/assembler kennis te vergroten maar waarom zou je een os schrijven?
Als je echt een revolutionair idee hebt voor een os zou ik de linux kernel gebruiken, het grootste werk is al voor je gedaan!
Ok, linux laat wat te wensen over wat betreft het geheugen management, en het is voor velen een ouderwetste monolitische kernel met een shell, maar wel erg stabiel en modulair.

Samengevat: als je een revolutionair idee hebt voor een os maakt dan niet een nieuw os maar implementeer het in linux(kernel)

| To acknowledge what is known as known and what is not known as known is knowledge. |


  • Infinitive
  • Registratie: maart 2001
  • Laatst online: 23-10 12:02
Ok, het is een goede oefening om je computer beter te leren kennen, en om je c/c++/java/assembler kennis te vergroten maar waarom zou je een os schrijven?
Ik zal zelf geen OS gaan schrijven, maar ik wil wel weten hoe het zo'n beetje zit.
Samengevat: als je een revolutionair idee hebt voor een os maakt dan niet een nieuw os maar implementeer het in linux(kernel)
Dan kan het nog steeds geen kwaad om in ieder geval de beginselen te weten.

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • oogapp0ltje
  • Registratie: januari 2001
  • Niet online
nee ok. maar gevolg is dat er heel veel (kleine) osj'es komen, je kunt beter een al bestaand os verbeteren.

| To acknowledge what is known as known and what is not known as known is knowledge. |


  • CBravo
  • Registratie: januari 2001
  • Laatst online: 28-05-2004

CBravo

-s dumb -jDROP

volgens mij kan je die NOPs gewoon weglaten, want daar komt de PC toch nooit. Gewoon

code:
1
2
3
Bootterminator:
   org 510
    dw 0xAA55

lijkt mij genoeg. Het is zelfs gevaarlijk als de PC zomaar bij het einde komt (al weet ik niet wat xAA55 voor 'n opcode is). Als je echt een opvang wil hebben voor zoiets zou ik een errorroutine maken vlak voor 510 met de strekking dat je hier nooit had moeten komen. Een overflow in een textstring is easy (ja, ik praat uit ervaring). Vooral als je zin hebt om zelf te gaan kloten met allerlei ASM truukjes om je bootupsequence nog gafer te maken dan je medetweaker (hell, jij bent natuurlijk de uberkoning) is het debuggen wel een sportief.

Duron 850 - .5GB - 60GB - G450 - iiyama pro 510 - Brilliance 1720 - Asus DVD - 3com 905c - silent


  • jvdmeer
  • Registratie: april 2000
  • Laatst online: 28-09 15:14
Het begin maakt me erg nieuwsgierig naar de rest, niet om een OS te schrijven, maar om wat meer over de achtergrond te weten.

Maar ehh, heb je ook een URL naar een andere locatie dan hier op GoT? Hier komen er ook veel andere teksten/opmerkingen tussendoor, die niet altijd tot de tekst zelf behoren.

  • Infinitive
  • Registratie: maart 2001
  • Laatst online: 23-10 12:02
nee ok. maar gevolg is dat er heel veel (kleine) osj'es komen, je kunt beter een al bestaand os verbeteren.
Je hebt ook wel gelijk. Maar deze discussie is eigenlijk zinloos. Want je heb nog steeds dan wat basiskennis nodig, die je juist opdoet door te denken hoe je zelf een os zou opzetten. Ofwel, we kunnen betere deze discussie stoppen, net als de discussie of het wel zinvol is om een tutorial te schrijven als er al een aantal beschikbaar zijn... voor de mensen die het interessant vinden is het leuk dat JayTaph de moeite neemt om het te doen.

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • wasigh
  • Registratie: januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

kun je de teksten ergens downloadbaar neerzetten? want ik heb helaas niet altijd internet (meer)
desnoods kan ik ze hosten als je geen ruime hebt :)

  • BurningSheep
  • Registratie: januari 2000
  • Laatst online: 09-05-2017
Leuk om te lezen trouwens, en je hoeft wat mij betreft geen maanden te wachten met het posten van het vervolg ;)

Een website waar je de tutorials verzameld zou idd ook wel leuk zijn, handiger dan alles in deze thread gooien of steeds een nieuwe thread aanmaken

  • JayTaph
  • Registratie: oktober 1999
  • Laatst online: 21-10 19:41

JayTaph

Portability is for canoes.

Topicstarter
>Het is zelfs gevaarlijk als de PC zomaar
>bij het einde komt (al weet ik niet wat
>xAA55 voor 'n opcode is). Als je echt een
>opvang wil hebben voor zoiets zou ik een
>errorroutine maken vlak voor 510 met de
>strekking dat je hier nooit had moeten
>komen.

Zet anders een JMP $ voor het einde neer. In plaats van NOP'jes kun je alles wat je maar wilt neerzetten.. De rede waarom het NOPjes zijn, is dat ik makkelijk in een hex-editor (MC in dit geval) kan zien hoe groot mijn bootsector-code is, en hoe groot de data is (die standaard op 00 staat). Als ik er 00'tjes neer zou zetten, dan zou ik dus niet meer kunnen zien wat data is, en wat opvulling is. Jouw manier werkt net zo goed.. TIMTOWTDI

De tutors mogen best ergens anders komen te staan, maar ik denk dat iemand anders dan maar van de HTML-opmaak en hosting moet regelen..

Ik weet niet wanneer het volgende deel komt, zeer binnenkort in ieder geval want hij is al bijna af. Daarna moet ik vanaf 0 weer gaan beginnen, en dat gaat langer duren, tenzij er mensen zijn die graag mee willen helpen.

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • CyberSnooP
  • Registratie: augustus 2000
  • Laatst online: 14-06 16:11

CyberSnooP

^^^^ schrijft --->

Dit is echt perfect!! Gewoon lekker eenvoudig de beginsellen van een OS erdorheen raggen :)

Ik heb ooit een stukkie van een ASM tutorial doorgebladerd, maar ik kan iem een goeie aangeven? Er zijn een paar codes die mij niet 100% duidelijk zijn. En, waar is die Interrupt list online te vinden?

|_____vakje______|


  • BurningSheep
  • Registratie: januari 2000
  • Laatst online: 09-05-2017

  • JayTaph
  • Registratie: oktober 1999
  • Laatst online: 21-10 19:41

JayTaph

Portability is for canoes.

Topicstarter
Wat ik heel erg stoer vind, maar dat is niet echt de bootsector die dat doet, maar de kernel-loader, is om het beeld in grafische mode te zetten (standaard 320x200x256), en tijdens het booten een gave landscape-scroller laat zien.. (voor de oudjes onder ons: zoiets als MARS). Met daaronder een percentage met hoever hij nog moet... lijkt me echt super.. het schrijven van een scroller is niet moeilijk, ook niet als front-end dus misschien wel leuk als iemand zich geroepen voelt om dit te schrijven? (in asm, anders kan het feest niet doorgaan :-( )


:P

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • Blizz¿
  • Registratie: mei 2000
  • Laatst online: 07-06-2003
Dit is een heel cool onderwerp, maar gaan we er nog eens op door of is dit het zoveelste geweldige idee zonder vervolg?

"I did not have a relationship with that woman . . . Miss Lewinsky."


  • MeneerPeer
  • Registratie: juni 2001
  • Laatst online: 25-03-2004
Op maandag 30 juli 2001 13:23 schreef Tsjipmanz het volgende:
Misschien dat Andrew S. Tanenbaum je wil helpen ( ast@cs.vu.nl )
Heb jij die boeken ook? Dolle boel hé!

  • 4of10
  • Registratie: januari 2001
  • Laatst online: 28-06-2007

4of10

Resistance is futile

Op dinsdag 31 juli 2001 23:42 schreef JayTaph het volgende:
Wat ik heel erg stoer vind, maar dat is niet echt de bootsector die dat doet, maar de kernel-loader, is om het beeld in grafische mode te zetten (standaard 320x200x256), en tijdens het booten een gave landscape-scroller laat zien.. (voor de oudjes onder ons: zoiets als MARS). Met daaronder een percentage met hoever hij nog moet... lijkt me echt super.. het schrijven van een scroller is niet moeilijk, ook niet als front-end dus misschien wel leuk als iemand zich geroepen voelt om dit te schrijven? (in asm, anders kan het feest niet doorgaan :-( )

:P
Kun je idd wel in je 2nd stage bootloader zetten (VOOR de protected mode code want video modes switchen is toch wel iets makkelijker in real mode ;) . Alleen de bitch is dat je landschap wel moet blijven bewegen natuurlijk ;).. Btw, het hoeft niet per se in ASM. De grafische routines het liefst wel omdat dit sneller is maar omdat het hier toch om minimaal een second stage bootloader gaat kan het makkelijk in C.

lal | 011011000110000101101100 | Current version of TriangleOS: 0.0.3-DEV


  • JayTaph
  • Registratie: oktober 1999
  • Laatst online: 21-10 19:41

JayTaph

Portability is for canoes.

Topicstarter
Ik denk dat je dan het beste kunt switchen naar 320x200 en daarna een jump kan maken naar PM om de kernel te starten. Op dat moment kun je wel netjes van C gebruik maken en je voxel-scroller starten. Onder deze scroller door laad je je kernel in (zet je scroller op de PM timerint, genereer frame, plot frame, EOI) en laad ondertussen de rest in.. Je moet dan wel rekening houden met andere tijd-kritieke operaties zoals het kalibreren van je delay() (bogomips). Ook zal het misschien wat lastiger worden met eventuele switches van IDT's en GDT's. Kwestie van eventjes goed uitdenken en dan kom je daar ook wel uit..

Ik heb vroeger nog wel menig voxel-scroller gecode, maar ik denk niet dat ik die nog terug kan vinden... Zo moeilijk waren ze nu ook weer niet..


Owja,.. volgend deeltje (fat12 lezen en laden van primary KERNEL.SYS) komt er binnenkort aan voor de geinteresseerden.. :)

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • Apocalyps
  • Registratie: december 2000
  • Laatst online: 01-09-2008

Apocalyps

Geen Punt Bij Karwei!

ik bne meer in voor klik and play :P geintje maar het lijkt mij intrezant :)

Achja ...


  • ceidhof
  • Registratie: november 2000
  • Niet online

ceidhof

Stream me up, Scotty

Echt een perfecte tutorial,
maar kan je 'm ergens neerzetten zodat ik 'm kan downloaden?

[url=http://www.microsoft.com/download/w2kfull/iso/free/]


  • KixAss456208
  • Registratie: februari 2001
  • Niet online
TweakOS deel x :P

  • ceidhof
  • Registratie: november 2000
  • Niet online

ceidhof

Stream me up, Scotty

Dit is heel interessant:
http://bochs.sourceforge.net/
Een OS emulator voor windows.
Je hoeft dus niet meer te rebooten en zo, superhandig!

[url=http://www.microsoft.com/download/w2kfull/iso/free/]


  • KixAss456208
  • Registratie: februari 2001
  • Niet online
beterz!!!

  • Access
  • Registratie: juni 2001
  • Laatst online: 01:24
Ja, mensen dit interesseert mij ook wel. Doorgaan zo! :)

  • 4of10
  • Registratie: januari 2001
  • Laatst online: 28-06-2007

4of10

Resistance is futile

Op zondag 19 augustus 2001 20:05 schreef JayTaph het volgende:
Ik denk dat je dan het beste kunt switchen naar 320x200 en daarna een jump kan maken naar PM om de kernel te starten.
Is idd wel makkelijk. mov ax, 0x13 int 0x10 is veel minder werk dan VGA poorten of V86 tasks ;)
Op dat moment kun je wel netjes van C gebruik maken en je voxel-scroller starten. Onder deze scroller door laad je je kernel in (zet je scroller op de PM timerint, genereer frame, plot frame, EOI) en laad ondertussen de rest in.. Je moet dan wel rekening houden met andere tijd-kritieke operaties zoals het kalibreren van je delay() (bogomips).
Ook zal het misschien wat lastiger worden met eventuele switches van IDT's en GDT's. Kwestie van eventjes goed uitdenken en dan kom je daar ook wel uit..
Misschien kun je beter eerst de IDT en GDT initializeren. Dan staan je offsets al goed en kun je interrupts enablen(is wel makkelijk als je gebruik wilt maken van de timerint ;) ). IDT en GDT initen duurt toch maar een paar ms ;). Bogomips berekenen is misschien wel een goed ID omdat ff niet te laten beinvloeden door een landscape scroller ja ;). Maar sowieso, het booten op zich duurt niet zo lang. Disk I/O (en terminal) is nog het traagst van alles. Dus het enige wat echt lang gaat duren is files inladen. En het FS wordt eigenlijk toch pas geinitializeerd nadat je de 'standaard' system init hebt gedaan (zoals delay loops, protected mode stuff, enz.). Dus ff het systeem opzetten (duurt maar heel kort) en dan de scroller is denk ik het beste.

lal | 011011000110000101101100 | Current version of TriangleOS: 0.0.3-DEV


  • 4of10
  • Registratie: januari 2001
  • Laatst online: 28-06-2007

4of10

Resistance is futile

Op zondag 19 augustus 2001 22:14 schreef ceidhof het volgende:
Dit is heel interessant:
http://bochs.sourceforge.net/
Een OS emulator voor windows.
Je hoeft dus niet meer te rebooten en zo, superhandig!
Het werkt ook onder UNIX voor de *NIX/*BSD gebruikers hier ;)

lal | 011011000110000101101100 | Current version of TriangleOS: 0.0.3-DEV


  • Yarvieh
  • Registratie: september 2000
  • Niet online

Yarvieh

Fratser

Op zondag 19 augustus 2001 22:14 schreef ceidhof het volgende:
Dit is heel interessant:
http://bochs.sourceforge.net/
Een OS emulator voor windows.
Je hoeft dus niet meer te rebooten en zo, superhandig!
Dit is een cpu emulator, geen OS emulator! Dit juweeltje emuleert een complete i386 cpu! (goed performance is ver te zoeken maar da geeft niet) dingen als dos draaien er prima op, net ff norton sysinfo installed toch nog 3.6 gescoord bij de cpu test wat net iets langzamer is dan 'n 8mhz 286 ;)

If you can not convince confuse!


  • JayTaph
  • Registratie: oktober 1999
  • Laatst online: 21-10 19:41

JayTaph

Portability is for canoes.

Topicstarter
Is idd wel makkelijk. mov ax, 0x13 int 0x10 is veel minder werk dan VGA poorten of V86 tasks ;)
Verschrikkelijke bezigheid, zeker V86 tasks in een primaire omgeving.. ik raad het je niet aan in ieder geval en mijn bios weet veeeeel meer van VGA-poorten af dan ik, dus laat hem dat maar lekker regelen :)
Misschien kun je beter eerst de IDT en GDT initializeren. Dan staan je offsets al goed en kun je interrupts enablen(is wel makkelijk als je gebruik wilt maken van de timerint ;) ). IDT en GDT initen duurt toch maar een paar ms ;). Bogomips berekenen is misschien wel een goed ID omdat ff niet te laten beinvloeden door een landscape scroller ja ;). Maar sowieso, het booten op zich duurt niet zo lang. Disk I/O (en terminal) is nog het traagst van alles. Dus het nige wat echt lang gaat duren is files inladen. En het FS wordt eigenlijk toch pas geinitializeerd nadat je de 'standaard' system init hebt gedaan (zoals delay loops, protected mode stuff, enz.). Dus ff het systeem opzetten (duurt maar heel kort) en dan de scroller is denk ik het beste.
Waar ik eigenlijk op doel is een beetje een probleem waar ik mee zit dat ik nooit heb weggewerkt in mijn eigen OS, namelijk dat de loader een temporary IDT en GDT maakt, en pas daarna alles goed gaat zetten voor de kernel. Dat is gewoon 1 manier van opzetten maar niet echt een optimale manier. Het probleem KAN onstaan dus dat je kromme omwegen moet gaan verzinnen om je voxel-scroller te laten werken in beide GDT/IDT's.

Als je een eigen OS aan het opzetten bent dan kan je hier natuurlijk rekening mee houden, en is het waarschijnlijk helemaal niet nodig om uberhaupt 2 keer te switchen van GDT's.

Het opstarten van het systeem tot aan de construct (dat is mijn kernel-loader waarin ik mijn kernel-configuratie kan editten) kost ongeveer 1 seconde.. da's ook zonde om daarvoor een scrollertje te bouwen :)..
Het beste is inderdaad om na de initialisatie van kernel tot aan "prompt" zo'n voxel-scroller tevoorschijn te toveren.

Op zich hoort de delay-calibratie thuis in het opstarten van de feitelijke kernel. Aangezien deze een ongestoorde timer-int moet hebben zou de scroller dus eventjes gaan haperen op het moment dat je deze loskoppelt. Voor de rest zou disk-io en de hele reutemeteut geen tot weinig invloed moeten hebben over de scroller en zou het netjes moeten blijven werken. Een kwestie van implementeren om te zien of dat daadwerkelijk zo is :) (maar tegen de tijd dat je dat kan, heb je je OS al feitelijk af :-))


Ik gebruik zelf bochs ook voor development. Om precies te zijn, 2 versies. 1 normale versie en 1 debug versie. Uitermate handig, zeker met de uitgebreide logging die bochs meegeeft elke sessie, maar de debugger is nou niet echt vriendelijk te noemen. Ga niet alles puur compatible maken voor bochs, maar probeer je OS af en toe ook te booten vanaf verschillende systemen om te kijken of het wel echt overal werkt.

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • johnwoo
  • Registratie: oktober 1999
  • Laatst online: 22:45

johnwoo

3S-GTE

Hmm.. ik zal zelf geen OS gaan maken (misschien als ik ooit nog eens heeel veel tijd heb, want het lijkt me wel leuk :) ), maar tweaker als ik ben zal ik zeker je tutorial gaan lezen :)
Een vriend van me (drZymo) is begonnen met een OS, waar ik (samen met hem) de shell (inclusief een built-in interpreter voor een eigen scripttaal) voor ga maken.
De bedoeling is dan dat in feite alle proggels in dat taaltje gemaakt worden. (in eerste instantie alleen maar een filebrowser)

Ga zo door :)

Specs | Toyota MR2 Turbo


  • KIMBLE
  • Registratie: juni 2001
  • Laatst online: 20:20
:?

  • 4of10
  • Registratie: januari 2001
  • Laatst online: 28-06-2007

4of10

Resistance is futile

Op maandag 20 augustus 2001 00:39 schreef JayTaph het volgende:
Verschrikkelijke bezigheid, zeker V86 tasks in een primaire omgeving.. ik raad het je niet aan in ieder geval en mijn bios weet veeeeel meer van VGA-poorten af dan ik, dus laat hem dat maar lekker regelen :)
[..]
Tsja ik ben nu bijna klaar met mijn V86 tasks, moet nog wat virtual memory dingen verbeteren, maar het is idd wel veel werk ;)
Waar ik eigenlijk op doel is een beetje een probleem waar ik mee zit dat ik nooit heb weggewerkt in mijn eigen OS, namelijk dat de loader een temporary IDT en GDT maakt, en pas daarna alles goed gaat zetten voor de kernel. Dat is gewoon 1 manier van opzetten maar niet echt een optimale manier. Het probleem KAN onstaan dus dat je kromme omwegen moet gaan verzinnen om je voxel-scroller te laten werken in beide GDT/IDT's.
Ja, vooral als je paging gebruikt met andere base adresses en zo. Maar een tijdelijke GDT heb je sowieso nodig om naar je pmode kernel te springen. IDT hoeft niet per se eigenlijk. Maar die voxel hoeft bij de temporary GDT (de bootsector waarschijnlijk) toch nog niet aan te staan en de GDT reloaden is een van de eerste dingen die mijn kernel file doet
Op zich hoort de delay-calibratie thuis in het opstarten van de feitelijke kernel. Aangezien deze een ongestoorde timer-int moet hebben zou de scroller dus eventjes gaan haperen op het moment dat je deze loskoppelt. Voor de rest zou disk-io en de hele reutemeteut geen tot weinig invloed moeten hebben over de scroller en zou het netjes moeten blijven werken. Een kwestie van implementeren om te zien of dat daadwerkelijk zo is :) (maar tegen de tijd dat je dat kan, heb je je OS al feitelijk af :-))
Hehe ja eigenlijk wel .. de scroller is toch wel iets wat je beter wat later op kan doen ja ;)
Ik gebruik zelf bochs ook voor development. Om precies te zijn, 2 versies. 1 normale versie en 1 debug versie. Uitermate handig, zeker met de uitgebreide logging die bochs meegeeft elke sessie, maar de debugger is nou niet echt vriendelijk te noemen. Ga niet alles puur compatible maken voor bochs, maar probeer je OS af en toe ook te booten vanaf verschillende systemen om te kijken of het wel echt overal werkt.
Mijn probleem is (ik heb gelukkig veel test bakken) dat mijn OS niet onder Bochs werkt. Maar veel OSsen out there werken WEL onder Bochs maar niet op alle 5 mijn test bakken, en mijn OS doet dat wel. Bochs geeft in de bootsector (!) al een error dus dat is er zo uit te halen neem ik aan, maar mijn test bakken gebruik ik eerder om te kijken of het ook op 'echte' computers werkt. Want onder Bochs laten draaien is one thing, op een echte bak another...

lal | 011011000110000101101100 | Current version of TriangleOS: 0.0.3-DEV


  • JayTaph
  • Registratie: oktober 1999
  • Laatst online: 21-10 19:41

JayTaph

Portability is for canoes.

Topicstarter
Op maandag 20 augustus 2001 02:33 schreef 4of10 het volgende:

Ja, vooral als je paging gebruikt met andere base adresses en zo. Maar een tijdelijke GDT heb je sowieso nodig om naar je pmode kernel te springen. IDT hoeft niet per se eigenlijk. Maar die voxel hoeft bij de temporary GDT (de bootsector waarschijnlijk) toch nog niet aan te staan en de GDT reloaden is een van de eerste dingen die mijn kernel file doet
Afgezien van de jump naar Pmode gebruik ik nog 1. In totaal doe ik dus 3 keer een GDTR :?. Ik zeg al, da's een kwestie van opzet en dit heb ik er nooit echt fatsoenlijk uitgehaald. De trampoline gebruikt namelijk geen flat memory (gdt met 2 descriptoren naar 4gig mem), maar de loader zelf draait al onder complete afbakening. Nadat de kernel is geladen wordt de GDT en IDT on-the-fly gegenereerd waarna naar de kernel gesprongen wordt.
Mijn probleem is (ik heb gelukkig veel test bakken) dat mijn OS niet onder Bochs werkt. Maar veel OSsen out there werken WEL onder Bochs maar niet op alle 5 mijn test bakken, en mijn OS doet dat wel. Bochs geeft in de bootsector (!) al een error dus dat is er zo uit te halen neem ik aan, maar mijn test bakken gebruik ik eerder om te kijken of het ook op 'echte' computers werkt. Want onder Bochs laten draaien is one thing, op een echte bak another...
Het grootste voordeel van bochs vind ik de sublieme logging, die echt letterlijk elke processortick laat zien. Ik heb daar zoveel geniepige foutjes mee kunnen traceren waar ik op een normale PC dagen over heb kunnen doen (de piepjes, de x'jes op het beeld, de deadlocks en de reboots).
Maar zoals ik al zei: een OS draaien in bochs alleen is niet verstandig, af en toe checken of hij onder echte systemen (en liefst zoveel mogelijk verschillende) draait wel...

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • 4of10
  • Registratie: januari 2001
  • Laatst online: 28-06-2007

4of10

Resistance is futile

Ja bochs is daar idd heel handig voor. Mijn OS dumped nu registers en dan kan ik uit mijn kernel map uitlezen waar het fout ging maar Bochs is veel fijner voor debugging.
En voor dat GDT gebruik, 3 lijkt me wel een beetje veel ja ;) maar ja das idd gewoon een kewstie van opzetten.

Ik doe het zo iig:

BootSector:
- Load Kernel (van disk)
- disable interrupts en NMI's
- een GDT (null, data en code, base = 0x0. limit = 4GIG)
- enable protected mode
- jump naar de kernel

Kernel:
- PIC remappen
- A20 enablen
- page tables setten
- paging enablen
- IDT opzetten
- nieuwe GDT opzetten
- jumpen naar het nieuwe segment
en dan komt de C code..

lal | 011011000110000101101100 | Current version of TriangleOS: 0.0.3-DEV


  • NL_SCSI
  • Registratie: maart 2001
  • Niet online

NL_SCSI

Ik ben altijd up!

Ga vooral zo door, ik wil wel lezen ja !

PIII500, 256 MB PC100, 20.4GB 7200 Maxtor, 6.4GB 5400 Quantum, Asus 6600 Deluxe, running Windows XP Pro. MySQL, PHP, Apache, Mdeamon. Ja, ik moet een nieuwe PC :((


  • whoami
  • Registratie: december 2000
  • Laatst online: 18:02
Ik ben niet echt een goede schrijver, maar wel geïnteresseerd in zo'n tutor. Moest ik die tutorial echter schrijven, zou ik niet direct beginnen met de details uit te spitten en uit te leggen hoe je een boot-sector schrijft. Ik zou eerst het OS in een aantal grote stukken uit elkaar trekken;
- Kernel
hieronder dan; processormanagement, memory-management
- User Interface
- IO systeem
File handling, printing, ...

  • M_KOS
  • Registratie: november 2000
  • Niet online
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
IDEAL
ORG 0


mov ax, 07c0h
mov ds, ax

cli
xor ax, ax
mov ss, ax
mov sp, 0FFFFh
sti
mov [drive],dl

mov si, msg
call print_string
xor  ah, ah
int  16h
int 19h

PROC print_string
string:
cld
lodsb
cmp al, 0
jz  eind_string
call     printchar
jmp  string

eind_string:
ret
ENDP Print_string

PROC printchar
mov ah,eh
int  10h
ret
endp printchar

msg DB  'boot!',13,10,0
drive   db  0

times 510-($-$$) db 9h
dw  aa55h

Ik heb dat programma een beetje in gekort en vertaalt naar tasm.
Maar nu doet hij het niet.
wat is er fout?

Hoe moet het verder gaan met onze democratie. Ik weet het niet.


  • 4of10
  • Registratie: januari 2001
  • Laatst online: 28-06-2007

4of10

Resistance is futile

edit:
damn, dubble-post

lal | 011011000110000101101100 | Current version of TriangleOS: 0.0.3-DEV


  • 4of10
  • Registratie: januari 2001
  • Laatst online: 28-06-2007

4of10

Resistance is futile

Op maandag 20 augustus 2001 21:43 schreef M_KOS het volgende:

... code ...

Ik heb dat programma een beetje in gekort en vertaalt naar tasm.
Maar nu doet hij het niet.
wat is er fout?
Geen ID .. wat GAAT er fout? De code werkt namelijk gewoon onder NASM en ik zie er zo niet iets fout in (niet dat ik nooit ergens overheen lees of zow ;) ) (ik heb btw ff geen TASM hier, dus ik heb niet geprobeerd om het met TASM te compilen)

Anders probeer NASM maar eens, werkt heel fijn en is gratiz ;). Het valt op veel plaatsen te downloaden (zie ook: google + 'download NASM' ;) (sorry, kweet het URL zo niet uit m'n hoofd)

lal | 011011000110000101101100 | Current version of TriangleOS: 0.0.3-DEV


  • thrax
  • Registratie: maart 2000
  • Laatst online: 21-10 21:16
Op maandag 20 augustus 2001 21:43 schreef M_KOS het volgende:

Ik heb dat programma een beetje in gekort en vertaalt naar tasm.
Maar nu doet hij het niet.
wat is er fout?
Volgens mij ben je het vergeten te vertalen naar tasm. ;)

Probeer dit eens:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
text segment public use16
  assume cs:text,ds:text
  org 0

start:

push  cs
pop  ds

cli
xor ax, ax
mov ss, ax
mov sp, 0FFFFh
sti

mov [drive],dl
mov si, offset msg
call     string
xor  ah, ah
int  16h
int 19h

string:
cld
lodsb
cmp al, 0
jz  eind_string
call     printchar
jmp  string
eind_string:
ret

printchar:
mov ah,00eh
int  10h
ret

msg db  'boot!',13,10,0
drive   db  0

org 510
dw  0aa55h
text ends

end

Btw om de een of andere reden wil tlink geen com files maken. Los dit op door gewoon een exe file te maken en de eerste 512 bytes weg te knippen. De resterende 512 zet je dan in je bootsector neer.

"Ore wa bakemono? Che, ore wa akuma da!"


  • M_KOS
  • Registratie: november 2000
  • Niet online
Op dinsdag 21 augustus 2001 19:44 schreef thrax het volgende:

[..]

Volgens mij ben je het vergeten te vertalen naar tasm. ;)

Probeer dit eens:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
text segment public use16
  assume cs:text,ds:text
  org 0

start:

push  cs
pop  ds

cli
xor ax, ax
mov ss, ax
mov sp, 0FFFFh
sti

mov [drive],dl
mov si, offset msg
call     string
xor  ah, ah
int  16h
int 19h

string:
cld
lodsb
cmp al, 0
jz  eind_string
call     printchar
jmp  string
eind_string:
ret

printchar:
mov ah,00eh
int  10h
ret

msg db  'boot!',13,10,0
drive   db  0

org 510
dw  0aa55h
text ends

end

Btw om de een of andere reden wil tlink geen com files maken. Los dit op door gewoon een exe file te maken en de eerste 512 bytes weg te knippen. De resterende 512 zet je dan in je bootsector neer.
thanks maar bij tlink geeft hij de volgende error:
no program entry point
wat moet ik doen?
[edit]probleem opgelost je was end start vergeten{/edit]

Hoe moet het verder gaan met onze democratie. Ik weet het niet.


  • Masta-T734
  • Registratie: juli 2001
  • Laatst online: 05-05-2004

Masta-T734

Master of the Obvious

Ik heb i.v.m. mijn werk 3 maanden lang Linux kernel hacking gedaan om hem te porten naar een heel ander platform.

Ik kan je wel vertellen, dat het iets is wat je neit in een howto kunt uitleggen. Hoeft ook niet
Wat je nodig hebt is: "Linux 2.4 kernel internals", een hoop lef, en codeer-ervaring.

GoT is niet je Medische hulpgroep, noch fietsenmaker, noch advocatuur of Notarieel, slechts gespekt met Anekdotes... Snap dat dan


  • JayTaph
  • Registratie: oktober 1999
  • Laatst online: 21-10 19:41

JayTaph

Portability is for canoes.

Topicstarter
Op dinsdag 21 augustus 2001 21:25 schreef M_KOS het volgende:

[..]

thanks maar bij tlink geeft hij de volgende error:
no program entry point
wat moet ik doen?
[edit]probleem opgelost je was end start vergeten{/edit]
Ik heb geen windows-systeem op dit moment om tasm uit te proberen, maar waarschijnlijk link je het allemaal naar een exe toe in plaats van naar een raw binary (16bit BIN-file). Als het goed is kun je daar opties voor meegeven..

als ik me nog goed kan herinneren is dat de optie /t:
code:
1
2
tasm boot.asm
tlink /t boot.obj boot.com

ofzoiets geloof ik...

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • Anoniem: 24417
  • Registratie: maart 2001
  • Niet online
waaah geile topic is dit :D
keep up the good work

edit: nog een leuk boek over deze stof: "Het pc-hardwareboek" van Hans-Peter Messmer, uitgegeven op Addison-Wesley

  • BurningSheep
  • Registratie: januari 2000
  • Laatst online: 09-05-2017
Of 'Operating System Concepts' van Silberschatz et al

  • thrax
  • Registratie: maart 2000
  • Laatst online: 21-10 21:16
Om de een of andere reden heeft tasm/tlink nog nooit een .com file voor mij willen maken. Verschillende soorten segmenten, org 100h etc etc ik krijg altijd "invalid initial entry point adres". Dus wat ik gewoon doe is er een exe file van maken en vervolgens de exe header strippen. (Naja eigenlijk gebruik ik nasm ;))

De exe header bestaat uit de eerste 512 bytes van je programma. Als dit bovenstaande compile krijg je een .exe bestandje van 1024 bytes. De laatste 512 bytes is dan je bootsector. De eerste 512 bytes kun je makkelijk strippen als je bijvoorbeeld een hexeditor als 'psedit' hebt, maar met een andere zal het ook wel kunnen.

Overgens is op http://www.nondot.org/sabre/os/articles ook veel info over operating systems te vinden.

"Ore wa bakemono? Che, ore wa akuma da!"


  • Anoniem: 24417
  • Registratie: maart 2001
  • Niet online
kan iemand misschien een lijstje maken, een soort inhoud voor wat voor onderdelen er allemaal gemaakt moeten worden als je een OS bouwt...

zoiets van

1. bootloader
1.1. blah
2. kernel
2.1 memory bla
2.1.1 flat memorie
...

slaat ff nergens op hoor, gaat om het idee...
maar dan is het wat duidelijker wat er allemaal komt kijken bij het bouwen van een OS :)

anyone? *liefaankijk* :P
Op maandag 20 augustus 2001 19:17 schreef whoami het volgende:
Ik ben niet echt een goede schrijver, maar wel geïnteresseerd in zo'n tutor. Moest ik die tutorial echter schrijven, zou ik niet direct beginnen met de details uit te spitten en uit te leggen hoe je een boot-sector schrijft. Ik zou eerst het OS in een aantal grote stukken uit elkaar trekken;
- Kernel
hieronder dan; processormanagement, memory-management
- User Interface
- IO systeem
File handling, printing, ...
zoiets eigenlijk dus idd, en dan misschien nog per onderdeel een tutor... (oei dit gaat veel werk worden :o)

  • Super_ik
  • Registratie: maart 2001
  • Laatst online: 17:09

Super_ik

haklust!

gaat deze tutor asjeblieft verder.
want hij is echt SUPER VET (oid ;))

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


  • Super_ik
  • Registratie: maart 2001
  • Laatst online: 17:09

Super_ik

haklust!

dit gaat toch wel verder he.
geef anders aub links waarmee ik verder kan want dit vint ik SUPER :9~

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


  • 4of10
  • Registratie: januari 2001
  • Laatst online: 28-06-2007

4of10

Resistance is futile

lal | 011011000110000101101100 | Current version of TriangleOS: 0.0.3-DEV


  • stylee
  • Registratie: december 2000
  • Laatst online: 04-09 22:34

stylee

blah zeg ik je

zeer interessant dit!

keep up the good work

edit: ik moet toegeven dat het best een goed gevoel was om "hello bootsector!" te zien direct na het booten op een blauwe achtergrond, doet me denken aan heel lang geleden ... :)

  • curry684
  • Registratie: juni 2000
  • Laatst online: 21-10 17:20

curry684

left part of the evil twins

Op dinsdag 31 juli 2001 15:53 schreef CBravo het volgende:
Het is zelfs gevaarlijk als de PC zomaar bij het einde komt (al weet ik niet wat xAA55 voor 'n opcode is).
code:
1
2
000001FE  55            push bp
000001FF  AA            stosb

Professionele website nodig?


  • Gerco
  • Registratie: mei 2000
  • Laatst online: 02:56

Gerco

Professional Newbie

Op maandag 27 augustus 2001 01:53 schreef curry684 het volgende:
code:
1
2
000001FE  55            push bp
000001FF  AA            stosb
Dan hangt het er maar net vanaf waar je ES:DI heenwijst of dat gevaarlijk is... maar handig is het niet iig.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10! | Huis te koop in Barendrecht!


  • Dawai
  • Registratie: december 2000
  • Laatst online: 18:43

Dawai

HERiTAGE CHESS CREW

Die 55AA is de mediacode, een soort handtekening, die vind je altijd op het einde van een DOS/Windows MBR of bootsector. Het is geen code die uitgevoerd wordt en is trouwens overbodig voor een eigen besturingssysteem. Als die code ontbreekt op een MS partitie zal Scandisk komen blaten :)

Programmer: red-eyed, mumbling mammal capable of conversing with inanimate objects.


  • curry684
  • Registratie: juni 2000
  • Laatst online: 21-10 17:20

curry684

left part of the evil twins

Op maandag 27 augustus 2001 02:41 schreef Dawai het volgende:
Die 55AA is de mediacode, een soort handtekening, die vind je altijd op het einde van een DOS/Windows MBR of bootsector. Het is geen code die uitgevoerd wordt en is trouwens overbodig voor een eigen besturingssysteem. Als die code ontbreekt op een MS partitie zal Scandisk komen blaten :)
De vraag was of het gevaarlijk was als de CPU op een onbewaakt moment tijdens het opstarten door al die NOP'jes zou jagen en bij de 55AA uit zou komen.

Professionele website nodig?


  • Dawai
  • Registratie: december 2000
  • Laatst online: 18:43

Dawai

HERiTAGE CHESS CREW

Op maandag 27 augustus 2001 17:24 schreef curry684 het volgende:
De vraag was of het gevaarlijk was als de CPU op een onbewaakt moment tijdens het opstarten door al die NOP'jes zou jagen en bij de 55AA uit zou komen.
Dat zal wel ja, die 55AA op zich zal niet veel verkeerd doen maar dan gaat ie gewoon verder met de code voorbij die 55AA, en dat wordt gegarandeerd zooi :P

Programmer: red-eyed, mumbling mammal capable of conversing with inanimate objects.


  • JorgenHorstink
  • Registratie: augustus 2001
  • Niet online
Zoals ik zie is bijna alles gemaakt in asambler. Ik ken dit niet maar wil het wel leren. Weet iemand nog een boek en waar ik het kan kopen (op internet).

Ik keek bij bol.com en vond dit boek:

Assembler programmeren Grand Cru van EasyComputing en kost fl.79,50.

Weet iemand of dit een goed boek is?

  • ACM
  • Registratie: januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

*kuch*

Willen jullie weer richting topic gaan??

Saai uitzicht in je tuin? Hang er een foto voor!


  • 4of10
  • Registratie: januari 2001
  • Laatst online: 28-06-2007

4of10

Resistance is futile

Op maandag 27 augustus 2001 20:29 schreef ACM het volgende:
*kuch*

Willen jullie weer richting topic gaan??
Het is niet off-topic hoor. De laatste opmerkingen gingen over de bootsector, en dat is waar het 1ste deel van de tutorial van Jay. over ging

edit:

oops, iets te snel op verstuur geklikt ;)
Wat ik dus wilde zeggen nog over die assembly, was dat je op die OS dev links ook veel voorbeelden vind van assembler bootloaders en dat je met google of zow best veel assembler tutorials kan vinden ...

lal | 011011000110000101101100 | Current version of TriangleOS: 0.0.3-DEV


  • Anoniem: 24417
  • Registratie: maart 2001
  • Niet online
Jay: wanneer denk je ongeveer de volgende tutor af te hebben? (werk je er nog aan?)

ik kan niet wachten... :D
Pagina: 1 2 Laatste


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee