Avatar billede mcgoat Nybegynder
27. februar 2003 - 10:57 Der er 24 kommentarer og
1 løsning

Genstart og Lukning af computer i DOS

Jeg vil lave et program til at lægge på en bootdisk så man kan genstarte eller lukke computeren. Hvordan gøres dette?
Avatar billede ionado Nybegynder
27. februar 2003 - 11:04 #1
Du skal skrive værdien 0xFE til i/o porten på addresen 0x64
Avatar billede mcgoat Nybegynder
27. februar 2003 - 11:06 #2
Ehh, og hvordan gør jeg så lige det?
Avatar billede ionado Nybegynder
27. februar 2003 - 11:07 #3
Så i C tror jeg du skal skrive:

outportb(0xfe, 0x64);
Avatar billede ionado Nybegynder
27. februar 2003 - 11:09 #4
hvilken compiler bruger du
Avatar billede mcgoat Nybegynder
27. februar 2003 - 11:10 #5
Sidder og laver c++ filer I C++ Builder 5, den kender ikke den funktion. nogen der har et link, eller et helt eksempel som ved der virker?
Avatar billede ionado Nybegynder
27. februar 2003 - 11:12 #6
prøv #include <dos.h>
Avatar billede ionado Nybegynder
27. februar 2003 - 11:13 #7
eller

#include <dos.h>

main()
{
outportb(0xfe, 0x64);

}
Avatar billede mcgoat Nybegynder
27. februar 2003 - 11:15 #8
Builderen kender ikke den function. andre forslag?
Avatar billede borrisholt Novice
27. februar 2003 - 11:18 #9
her er et par pascal fættere til at gøre det med :

function ReadPortB( wPort : Word ) : Byte;
asm
  mov dx, wPort
  in al, dx
  mov result, al
end;

procedure WritePortB( wPort : Word; bValue : Byte );
asm
  mov dx, wPort
  mov al, bValue
  out dx, al
end;



Jens B
Avatar billede mcgoat Nybegynder
27. februar 2003 - 11:21 #10
fatter minus af det der :o(, er der ikke et HELT eksempel på hvordan man gør, og helst i normal C++ hvis dette kan lade sig gøre...
Avatar billede borrisholt Novice
27. februar 2003 - 11:22 #11
Jeg porter det lige til C++

Jens B
Avatar billede borrisholt Novice
27. februar 2003 - 11:24 #12
Det her er et godt bud :

void WritePortB( unsigned short int wPort,  char bValue)
{
  __asm
  {
    mov dx, wPort
    mov al, bValue
    out dx, al
  }
}

også skulle

WritePortB(0xfe, 0x64);

boote din maskine
Avatar billede soreno Praktikant
27. februar 2003 - 11:27 #13
Hvis det _kun_ er til reboot af computeren så kan du gøre sådan:
C:\>debug
-a0100
0C7E:0100 int 19
0C7E:0102
-rcx
CX 0000
:2
-n boot.com
-w
Writing 00002 bytes
-q

Så har du en "boot.com" i c:\ som du kan smide på en diskette.

Hvis du vil lave det i c/c++ skal du have fat i en compiler der kan generere DOS kode.
Avatar billede borrisholt Novice
27. februar 2003 - 11:30 #14
Den her kan læse fra din port.

char ReadPortB( unsigned short int wPort )
{
  char result;
  __asm
  {
    mov dx, wPort
    in al, dx
    mov result, al
  }

  return result;
}

Hvis du bare kører det i en consol. Skal du boote windows, og det er en anden snak.

Jens B
Avatar billede benjams69 Nybegynder
27. februar 2003 - 11:32 #15
>>soreno - hvordan fanden finder man ud af at det?! Jeg mener, du har vel næppe prøvet dig frem med de forskellige tal/registre etc...
Avatar billede soreno Praktikant
27. februar 2003 - 11:36 #16
benjams69 >> Man kigger somænd bare i Ralph Browns interrupt liste (søg selv efter den). Jeg kunne huske det fra "den eksperimenterende tid i DOS perioden"..
:-)
Avatar billede mcgoat Nybegynder
27. februar 2003 - 11:37 #17
kan ikke få noget af det til at virke, heller ikke debug måden, den melder fejl når man kører programmet...
Avatar billede soreno Praktikant
27. februar 2003 - 11:40 #18
Så kan du snyde og smide følgende 2 bytes ind i en (tom) fil - gerne med en hexeditor:
cd 19
Avatar billede soreno Praktikant
27. februar 2003 - 11:47 #19
Hvis du beskriver hvad du har gjort og hvilke fejlmeddelelser du har mødt så er det meget nemmere at hjælpe dig..
Avatar billede benjams69 Nybegynder
27. februar 2003 - 11:52 #20
"DOS perioden" - LoL
Men som mcgoat siger, så virker det ikke under alle systemer... fx Xp eller 2K!
Men det er vel fordi det ikke er en "rigtig" promt, men en emulation/simulation eller noget rite?!
Avatar billede soreno Praktikant
27. februar 2003 - 11:54 #21
Hvis det er til en bootdisk så skal det vel ikke virke under Windows.. ??

Iøvrigt kan det være godt lige at læse dette:
http://www.faqs.org/faqs/msdos-programmer-faq/part4/section-16.html
Avatar billede the_bma_man Nybegynder
27. februar 2003 - 16:12 #22
Hov - hov.

Vi er faktisk nogen, der har leget med Assembler i "De gode gamle DOS-dage".

Men det er nu svært at huske så mange år siden :-)
Avatar billede benjams69 Nybegynder
03. marts 2003 - 11:20 #23
HAHAHA - Nostalgi der vil frem :D
Avatar billede mcgoat Nybegynder
25. marts 2003 - 13:25 #24
svar
Avatar billede fcs Novice
15. april 2003 - 10:20 #25
Mcgoat>> Der er masser af kompetente personer der prøver at hjælpe dig. Det er absolut ikke god tone bare at skrive "svar" og så lukke, specielt ikke når du bliver bedt om at beskrive fejlmeddelelser, så folk kan hjælpe dig videre. Nu sidder der nogle brugere, som har brugt masser af tid på dig og er sure - dem skal du nok ikke forvente at få hjælp fra igen. Du tildeles derfor en advarsel.

Med venlig hilsen

FCS/Coadmin
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