Avatar billede emileej Nybegynder
23. februar 2003 - 09:23 Der er 42 kommentarer og
1 løsning

Programmering på pc uden system

Jeg kunne godt tænke mig at rode lidt med programmering på det absolut basale nievau. Dvs. jeg gerne vil prøve at lave et lille program, der køres som et system, når jeg booter på en af mine harddiske.
Til at starte med vil jeg bare have noget almindeligt tekst output, men god grafik er helt klart målet.

Mine spørgsmål er som følger:
1) Skal jeg bruge assambler eller kan jeg godt bruge C++?

2) Hvordan får jeg bios til at starte mit program, når der bootes på min ekstra disk?

På forhånd tak

E-)mil
Avatar billede arne_v Ekspert
23. februar 2003 - 09:55 #1
Det burde godt kunne laves i C++ forudsat at din C++
compiler enten kan generere BIOS kald (int 10h hvis jeg
husker rigtigt - det er 10+ år siden) eller hvis den
supporterer inline assembler (hvilket de fleste gør).

Der er en boot sekvens og BIOS loader noget kode fra
et bestemt sted (første sektor hvis jeg husker rigtigt)
på disk og kører det. Den kode skal så foretage det videre
fornødne.

Et kritisk spørgsmål er om og hvis ja hvornår du vil switche
fra real til protected mode.
Avatar billede dougheffernan Nybegynder
23. februar 2003 - 09:58 #2
Hmmm...hvis det skal startes fra en disk, så ligger der jo allerede et system, som kan håndtere disken, som f.eks. DOS...........hmmm....hvad med at lave det så det virker som en virus, altså at selve programmet ligger i BIOS?
Avatar billede arne_v Ekspert
23. februar 2003 - 10:01 #3
Øh.

BIOS kan godt finde ud af at læse fra disk. Ellers så var det
da umuligt at lave et opertiv-system.
Avatar billede soreno Praktikant
23. februar 2003 - 10:38 #4
Du kan finde lidt om boot sector her:
http://rootshell.be/~neko/articles/low/boot.htm

Ellers så kig lidt generelt her:
http://www.google.com/search?hl=en&lr=&ie=ISO-8859-1&q=asm+boot+sector+&btnG=Google+Search

I princippet burde det være muligt at lave mode 13h direkte fra bootsektoren.

Husk backup inden du går igang..!
(lige efter boot sektoren ligger fat/partitions tabellen - og det er lidt træls at miste den på den forkerte harddisk)
Avatar billede soreno Praktikant
23. februar 2003 - 10:40 #5
Avatar billede hermandsen Juniormester
23. februar 2003 - 11:21 #6
Du kan også lave det i Delphi/Pascal! :)

Borrisholt har lavet et eksempel til at skrive i bootsektoren:
http://www.borrisholt.com/FileIO/FileIO_MAIN.htm

Den der hedder "WriteBootSector.zip".
Avatar billede emileej Nybegynder
23. februar 2003 - 11:29 #7
arne> Protected mode?
soreno> Jeg bruger en anden harddisk end min system disk, så der burde da hverken ligge et system der i forvejen eller kunne komme komplikationer imellem mit program og systemet på den anden disk?
Avatar billede soreno Praktikant
23. februar 2003 - 11:30 #8
hermandsen >> Men det kræver jo man har noget man kan skrive til boot sektoren..
:-)
Avatar billede soreno Praktikant
23. februar 2003 - 11:32 #9
Næææ, det skulle ikke give problemer. Men hvis du f.eks. ikke er helt "dus" med de værktøjer der skal bruges så kunne det jo gå hen og blive farligt..
Avatar billede hermandsen Juniormester
23. februar 2003 - 11:36 #10
>>soreno
Jeg har ikke forstand på at skrive i boot sektoren. Jeg holder mig bare laaaaaaangt fra det, for som du selv siger så kan det gå grulig galt! Jeg vidste bare at Borrisholt havde lavet et eksempel som emileej måske kunne bruge! :)
Avatar billede emileej Nybegynder
23. februar 2003 - 11:36 #11
Jeg kan jo starte med at ligge et hello world program i boot sektoren på en floppy disk - det kan vel ikke være så farligt?
Avatar billede arne_v Ekspert
23. februar 2003 - 11:37 #12
protected mode = brug af virtual memory

I real mode tilgår du fysiske memory adresser.

I protected mode tilgår du virtuelle memory adresser som
translates til fysiske memory adresser.

DOS kører i real mode.

Win32 og diverse Unix/Linux kører i protected mode.
Avatar billede emileej Nybegynder
23. februar 2003 - 11:40 #13
Hvar er fordelene/ulemperne ved de to modes og hvorledes skifter jeg imellem dem?
Avatar billede soreno Praktikant
23. februar 2003 - 11:42 #14
Jeg troede at du ville bruge f.eks. hdd2 til at eksperimentere med..
Men derfor kan man stadig komme til at angive det forkerte drev når man bestemmer hvilket drev der skal skrives på.
Avatar billede emileej Nybegynder
23. februar 2003 - 11:46 #15
Jeg ville også bruge en harddisk, men da i sagde "farligt" og "pas på" kom jeg til at kigge på mine disketter og tænkte at jeg ville ligge fordigtigt ud :)
Avatar billede arne_v Ekspert
23. februar 2003 - 11:48 #16
Du starter i real mode.

Så kan du switche til protected mode.

Jeg kan ikke huske hvordan du switcher. Få fat på en
hardcore x86 bog for at se sådan noget. Bemærk du switcher
ikke bare til protected mode - du skal have sat noget
op inden du kan gøre det.

Real mode er simpelt, så start med det.

I protected mode kan du protecte memory så man ikke kan overskrive
det ved et uheld.

I real mode har du et segmenteret address space med 64 KB
segmenter.

I protected mode har du et flat 32 bit address space.
Avatar billede soreno Praktikant
23. februar 2003 - 11:49 #17
Jeg synes du skal lade være med at bekymre din om adresserings metoder i første omgang - start med at få vist "hello world"
Avatar billede emileej Nybegynder
23. februar 2003 - 11:52 #18
Jeg fandt et smart lille program - eller rettere der er to:
http://www.1perlstreet.com/vb/scripts/ShowCode.asp?txtCodeId=3570&lngWId=3
Problemet er at de includer en header kaldet 'bios.h', som VC++ ikke kan finde - er det da ikke eet af standard bibliotekerne?
Avatar billede arne_v Ekspert
23. februar 2003 - 11:56 #19
bios.h er ganske rigtigt ikke i VC++ 6.0.

Men den er i VC++ 1.5 16 bit version !
Avatar billede soreno Praktikant
23. februar 2003 - 12:00 #20
Start med at kompilere .asm file..

Det skulle undre mig meget hvis ikke du får brug for tasm..
Men jeg ved faktisk ikke om man kan købe det endnu - eller om det er frigivet til fri afbenyttelse ?
Avatar billede emileej Nybegynder
23. februar 2003 - 12:02 #21
Jam. så kan jeg vel lige så godt starte med at spørge hvilken compiler C++ der giver mig det bedste redsultat - jeg får jo alligevel ikke brug for VC++'s inderface nu...
Avatar billede soreno Praktikant
23. februar 2003 - 12:05 #22
Jeg legede på et tidspunkt med bootsektoren - til det benyttede jeg DOS's debug.
Men det er langt fra optimalt hvis man vil længere end "hello world".
Det er derimod gratis..
Avatar billede arne_v Ekspert
23. februar 2003 - 12:10 #23
Principielt vil jeg mene at compiler ikke betyder så meget.

Det her er avanceret stuff. Og du kommer til at bruge mange
timer på at researche hver 20 linier kode. Header filer
vil være det mindste problem.

Men hvis du vil starte i real mode, så er der formentlig bedre
support i MS VC++ 1.5 eller B C++ 3.1 !
Avatar billede emileej Nybegynder
23. februar 2003 - 13:10 #24
Jeg kan ikke komme til at downloade Borland C++ 5.5 - er der een af jer der har installeren liggende?
Avatar billede soreno Praktikant
23. februar 2003 - 14:10 #25
Jeg tror Arne mener at du skal bruge en DOS version af compileren ?
Avatar billede arne_v Ekspert
23. februar 2003 - 14:54 #26
Jeps.

Det er ikke engang sikkert at nye versioner af compilere kan
generere real mode programs.
Avatar billede emileej Nybegynder
23. februar 2003 - 15:32 #27
Jammen hvor finder jeg de gamle compilere? Nogen der har een liggende?
Avatar billede soreno Praktikant
23. februar 2003 - 15:44 #28
kan gcc til dos ikke bruges - kan den mon generere 16 bit kode ?
http://www.delorie.com/djgpp/

(jeg har ikke selv prøvet den..)
Avatar billede emileej Nybegynder
23. februar 2003 - 15:44 #29
Jam så vil jeg da prøve den :)
Avatar billede arne_v Ekspert
23. februar 2003 - 15:46 #30
DJGPP kan godt køre på DOS, men den kan ikke generere real mode
kode. De indeholder sin egen kode for at switche til protected mode.
Avatar billede emileej Nybegynder
23. februar 2003 - 15:48 #31
Så jeg kan altså godt bruge det?
Avatar billede soreno Praktikant
23. februar 2003 - 15:50 #32
Mon ikke det kan lade sig gøre med disse tools:
http://www.delorie.com/djgpp/16bit/

?
Avatar billede arne_v Ekspert
23. februar 2003 - 15:50 #33
Ikke hvis du vil starte med real mode kode.
Avatar billede emileej Nybegynder
23. februar 2003 - 15:51 #34
Lydder næsten somom jeg bliver nødsaget til at lære assambler...
Avatar billede arne_v Ekspert
23. februar 2003 - 15:53 #35
Turbo C 2.01 kan downloades *legalt* fra Borland !

http://bdn.borland.com/article/0,1410,20841,00.html
Avatar billede emileej Nybegynder
23. februar 2003 - 16:46 #36
Øhm... Hvilket århundrede er turbo c fra?
Følgende fejl får jeg:
Turbo C  Version 2.01  Copyright (c) 1987, 1988 Borland International
copyboot.cpp:
Error copyboot.cpp 24: Declaration syntax error
Error copyboot.cpp 28: Expression syntax in function writebootsector
Error copyboot.cpp 29: Undefined symbol 'result' in function writebootsector
*** 3 errors in Compile ***

        Available memory 386708

I følgende linier:
void writebootsector(char *buffer, int drive=_floppy);//linie 24

void writebootsector(char *buffer, int drive){
    printf("\nWriting....");
    int result; //linie 28
    if((result=biosdisk(3,drive,0,0,1,1,buffer))==0){ //linie 29
    printf("1 sector copied successfully !");
    }else{
    printf("Error %d",result);
    }
}
Avatar billede emileej Nybegynder
23. februar 2003 - 16:48 #37
Og floppy er defineret her:
#define _floppy    0x0
Avatar billede arne_v Ekspert
23. februar 2003 - 16:58 #38
Det er en ren C compile rikke en C++ compiler.

I C så er det:
  først erklæringer
  så statements

I C++ kan man erklære variable midt i statements.

Derfor er:
    printf("\nWriting...."); /* statement */
    int result; /* erklæring */
ikke validt.
Avatar billede arne_v Ekspert
23. februar 2003 - 17:00 #39
Der er også en Turbo C++ 1.01 på:
  http://bdn.borland.com/article/0,1410,21751,00.html

men C++ har ændret sig mere end C de sidste 12-14 år, så
jeg tror du vil få færre problemer med TC end med TC++ !
Avatar billede hermandsen Juniormester
01. april 2003 - 23:45 #40
Lukketid?
Avatar billede emileej Nybegynder
09. januar 2006 - 14:51 #41
Rimeligt gammel tråd. Lukker.
Avatar billede arne_v Ekspert
09. januar 2006 - 14:55 #42
hmmm
Avatar billede soreno Praktikant
09. januar 2006 - 14:59 #43
Du havde slet ikke glæde af nogle af svarene/kommentarene ?

Jeg husker at jeg fik meget ud af denne tråd :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester