🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
18 messages
18 total messages Started by AdamW Fri, 20 Apr 2007 19:08
Własny program startowy
#1057
Author: AdamW
Date: Fri, 20 Apr 2007 19:08
49 lines
2310 bytes
Witam, chciałem napisać w assemblerze własny program startowy do
komputera. Jedynym jego zadaniem jest wypisanie pewnego tekstu na
ekranie i pozostawienie komputera w stanie wlaczonym.  Przejrzalem
zrodla linuxowego kernela oraz lilo i wyskrobalem (wykopiowalem ;) )
cos takiego:
## CUT ###.
code16

.text

.global _start
_start:
 movb $0xe,%ah
 movw $0x7,%bx
 movw $msg,%si

msg_loop:
 lodsb
 cmpb $0,%al
 je loop
 int $0x10
 jmp msg_loop

loop:
 jmp loop

msg:
 .ascii "\n"
 .ascii "\n"
 .ascii "\n"
 .ascii "Tutaj moj tekst\n"
 .ascii "\n"
 .ascii "\n"
 .ascii "\n"
 .byte  0
## CUT ###
Tutaj jak sie z nim obchodze:
adam@localhost $ as -o bootsect.o bootsect.S
adam@localhost $ ld bootsect.o -o bootsect.bin --oformat binary -Ttext
1000
root@localhost # dd if=bootsect.bin of=/dev/hda bs=512 count=1
I potem reset, żeby przetestować.
Jak widac korzystam z 32-bitowego Intel-compatybile'nego procesora.
Jak to odpale to nic się nie dzieje, po prostu nic. Zachowany zostaje
stan sprzed uruchomienia (na ekranie), tak dlugo az go nie Ctrl-Alt-
Del albo nie zresetuje z guzika.
Oprócz tego jeszcze pytanko jak wyczyścić ekran wywołaniem do biosa?
Czy moze latwiej bedzie nadpisac go Newline'ami?
Pozdrawiam
Re: Własny program startowy
#1058
Author: Bernard
Date: Fri, 20 Apr 2007 19:44
23 lines
1739 bytes
AdamW wrote:
> Witam, chciałem napisać w assemblerze własny program startowy do
> komputera. Jedynym jego zadaniem jest wypisanie pewnego tekstu na
> ekranie i pozostawienie komputera w stanie wlaczonym.  Przejrzalem
> zrodla linuxowego kernela oraz lilo i wyskrobalem (wykopiowalem ;) )
> cos takiego:

> Tutaj jak sie z nim obchodze:
> adam@localhost $ as -o bootsect.o bootsect.S
> adam@localhost $ ld bootsect.o -o bootsect.bin --oformat binary -Ttext
> 1000

BIOS ładuje bootloader pod adres 0:7c00, a więc spod takiego adresu 
wystartuje Twój program. O ile pamiętam, DS i ES są wtedy nieokreślone, 
więc wypadałoby je zainicjować.

> Oprócz tego jeszcze pytanko jak wyczyścić ekran wywołaniem do biosa?

Ustaw tryb 3, zrób scroll o 25 wierszy albo wypisz 2000 spacji.

> Czy moze latwiej bedzie nadpisac go Newline'ami?

Hmmmm, a można po polsku?
Re: Własny program startowy
#1059
Author: AdamW
Date: Fri, 20 Apr 2007 22:55
46 lines
2072 bytes
### CUT ###
from sys import argv, exit

def printc(c):
    print " movw $0x%x,%%ax" % (0x0e00+c)
    print " movw $0x7,%bx"
    print " int $0x10"


if len(argv) < 2:
    exit()

f=open(argv[1])

print ".code16"
print ".text"

print ".global _start"

print "_start:"
print "sti"
print " cld"
print " movw $0x1202,%ax"
print " movb $0x30,%bl"
print " int $0x10"
for c in f.read():
    c = ord(c)
    if c == 0xa:
        printc(0x20)
    if c == ord('\n'):
        printc(13)
        printc(10)
        printc(0)
    else:
        printc(c)

print "loop:"
print " jmp loop"
### CUT ###

Więc doszedłem sam do czego chciałem.
Jak z powyższego kodu korzystać pozostawiam już Wam do obmyślenia ;).
Dzięki za odpowiedź. Są może jakieś ciekawe materiały na temat
programowania "surowego" kompa?

Pozdrawiam
Re: Własny program startowy
#1072
Author: AdamW
Date: Fri, 20 Apr 2007 22:56
46 lines
2180 bytes
### CUT ###
from sys import argv, exit

def printc(c):
    print " movw $0x%x,%%ax" % (0x0e00+c)
    print " movw $0x7,%bx"
    print " int $0x10"


if len(argv) < 2:
    exit()

f=open(argv[1])

print ".code16"
print ".text"

print ".global _start"

print "_start:"
print "sti"
print " cld"
print " movw $0x1202,%ax"
print " movb $0x30,%bl"
print " int $0x10"
for c in f.read():
    c = ord(c)
    if c == 0xa:
        printc(0x20)
    if c == ord('\n'):
        printc(13)
        printc(10)
        printc(0)
    else:
        printc(c)

print "loop:"
print " jmp loop"
### CUT ###

Więc doszedłem sam do czego chciałem.
Jak z powyższego kodu korzystać pozostawiam już Wam do obmyślenia ;).
Dzięki za odpowiedź. Są może jakieś ciekawe materiały na temat
programowania "surowego" kompa?

Pozdrawiam
Re: Własny program startowy
#1073
Author: Matuzalem
Date: Sat, 21 Apr 2007 13:11
60 lines
2608 bytes
On 21 Kwi, 00:56, AdamW <adam.wieckow...@gmail.com> wrote:
> ### CUT ###
> from sys import argv, exit
>
> def printc(c):
>     print " movw $0x%x,%%ax" % (0x0e00+c)
>     print " movw $0x7,%bx"
>     print " int $0x10"
>
> if len(argv) < 2:
>     exit()
>
> f=open(argv[1])
>
> print ".code16"
> print ".text"
>
> print ".global _start"
>
> print "_start:"
> print "sti"
> print " cld"
> print " movw $0x1202,%ax"
> print " movb $0x30,%bl"
> print " int $0x10"
> for c in f.read():
>     c = ord(c)
>     if c == 0xa:
>         printc(0x20)
>     if c == ord('\n'):
>         printc(13)
>         printc(10)
>         printc(0)
>     else:
>         printc(c)
>
> print "loop:"
> print " jmp loop"
> ### CUT ###
>
> Więc doszedłem sam do czego chciałem.
> Jak z powyższego kodu korzystać pozostawiam już Wam do obmyślenia ;).
> Dzięki za odpowiedź. Są może jakieś ciekawe materiały na temat
> programowania "surowego" kompa?
>
> Pozdrawiam

Witam

Ogólnie: www.google.com i takie słowa kluczowe jak np. 'my own
operating system', 'operating system programming', 'open source
operating system' itp.

np.:
http://my.execpc.com/~geezer/osd/index.htm

no i oczywiście wiele wiele książek jak np.:
http://helion.pl/ksiazki/anatp7.htm

Pozdrawiam
Re: Własny program startowy
#1060
Author: Wiktor S.
Date: Sat, 21 Apr 2007 23:35
31 lines
2409 bytes
> Więc doszedłem sam do czego chciałem.
> Jak z powyższego kodu korzystać pozostawiam już Wam do obmyślenia ;).
> Dzięki za odpowiedź. Są może jakieś ciekawe materiały na temat
> programowania "surowego" kompa?

Coś tam jest, ale jeśli chcesz pisać własny system operacyjny, to nie od 
bootloadera zaczynaj - narobisz się na sam początek, a efektów widać będzie 
mało.

Ja zacząłem od jądra - ustawianie trybu chronionego, obsługa przerwań 
sprzętowych (klawiatura, mysz), wyjątki, obsługa ekranu, prymitywna 
wielozadaniowość :-)

Wszystko kompilowane jako DOS-owy exek - dla ułatwienia pracy, własnego 
bootloadera mogę zrobić w swoim czasie. Kod oczywiście 32-bitowy, zero 
korzystania z przerwań DOS-u i BIOS-u -- wszystko bezpośrednio na sprzęcie. 
"System" jest w stanie zakończyć swoją pracę, tj. przywrócić przerwania i 
środowisko DOS-u sprzed uruchomienia i "wyjść" -- znacznie to ułatwiało 
pisanie: odpalam, coś nie tak ["bluescreen" ;-)], to wychodzę do DOS-a, 
poprawiam, kompiluję i odpalam jeszcze raz.

W przypadku bootloadera nie mamy nic w zapasie, więc każde uruchomienie to 
kolejny reset - tak się pisze ZNACZNIE wolniej, i kosztuje to dużo więcej 
nerwów.

Oczywiście wszystkie tego typu zabawy proponuję robić pod Virtual PC albo 
podobnym emulatorze ;-)


-- 
Azarien
Re: Własny program startowy
#1061
Author: Michal Schulz
Date: Sun, 22 Apr 2007 08:14
26 lines
1794 bytes
Wiktor S. wrote:

> Coś tam jest, ale jeśli chcesz pisać własny system operacyjny, to nie od
> bootloadera zaczynaj - narobisz się na sam początek, a efektów widać
> będzie mało.

Prawda :)

> Ja zacząłem od jądra - ustawianie trybu chronionego, obsługa przerwań
> sprzętowych (klawiatura, mysz), wyjątki, obsługa ekranu, prymitywna
> wielozadaniowość :-)
> 
> Wszystko kompilowane jako DOS-owy exek - dla ułatwienia pracy, własnego
> bootloadera mogę zrobić w swoim czasie.

A po co robic w ogole wlasnego bootloadera, skoro mozna skorzystac z
gotowego? GRUB spelnia swoje zadanie znakomicie.

> W przypadku bootloadera nie mamy nic w zapasie, więc każde uruchomienie to
> kolejny reset - tak się pisze ZNACZNIE wolniej, i kosztuje to dużo więcej
> nerwów.

qemu, VirtualPC, VMWare, Bochs....

-- 
Michal Schulz
Re: Własny program startowy
#1069
Author: Wiktor S.
Date: Sun, 22 Apr 2007 09:49
11 lines
1435 bytes
>> W przypadku bootloadera nie mamy nic w zapasie, więc każde
>> uruchomienie to kolejny reset - tak się pisze ZNACZNIE wolniej, i
>> kosztuje to dużo więcej nerwów.
>
> qemu, VirtualPC, VMWare, Bochs....

Z vpc korzystam, ale mimo wszystko odpalanie własnego systemu spod dosa (i 
pod wirtualem!) jest znacznie wygodniejsze :-)

-- 
Azarien
Re: Własny program startowy
#1062
Author: Matuzalem
Date: Sun, 22 Apr 2007 11:34
8 lines
1606 bytes
On 22 Kwi, 10:14, Michal Schulz <michal.sch...@onet.eu> wrote:
>
> A po co robic w ogole wlasnego bootloadera, skoro mozna skorzystac z
> gotowego? GRUB spelnia swoje zadanie znakomicie.

Dla własnej satysfakcji, nie sztuką jest zrobić "copy-paste" :]

Pozdrawiam
Re: Własny program startowy
#1063
Author: AdamW
Date: Sun, 22 Apr 2007 17:47
19 lines
2206 bytes
On Apr 22, 1:34 pm, Matuzalem <codemast...@op.pl> wrote:
> On 22 Kwi, 10:14, Michal Schulz <michal.sch...@onet.eu> wrote:
>
>
>
> > A po co robic w ogole wlasnego bootloadera, skoro mozna skorzystac z
> > gotowego? GRUB spelnia swoje zadanie znakomicie.
>
> Dla własnej satysfakcji, nie sztuką jest zrobić "copy-paste" :]
>
> Pozdrawiam

Bo chodzi o to, że potrzebuje płytkę, którą gdy zbootuje wypisuje mi
się na ekranie pewien tekst. Nie chodzi jak na razie o pisanie
własnego OS'a. W tym zakresie moja znajomość ASM'a jest z pewnością
zbyt mała, a poza tym nie mam jak na razie takich ambicji. Jak już
wspominałem próba zakończyła się powodzeniem i mam co chciałem
(troszkę poprawiona wersja tego pythonowego skryptu wyżej). Dzięki za
odpowiedzi. Pozdrawiam
Re: Własny program startowy
#1064
Author: Michal Schulz
Date: Sun, 22 Apr 2007 20:11
12 lines
1313 bytes
Matuzalem wrote:

>> A po co robic w ogole wlasnego bootloadera, skoro mozna skorzystac z
>> gotowego? GRUB spelnia swoje zadanie znakomicie.
> 
> Dla własnej satysfakcji, nie sztuką jest zrobić "copy-paste" :]

Napisanie bootloadera tez nie jest sztuka, raczej tylko
nudnym "rzemioslem" ;)

-- 
Michal Schulz
Re: Własny program startowy
#1065
Author: Matuzalem
Date: Sun, 22 Apr 2007 21:29
16 lines
1858 bytes
On 22 Kwi, 22:11, Michal Schulz <michal.sch...@onet.eu> wrote:
> Matuzalem wrote:
> >> A po co robic w ogole wlasnego bootloadera, skoro mozna skorzystac z
> >> gotowego? GRUB spelnia swoje zadanie znakomicie.
>
> > Dla własnej satysfakcji, nie sztuką jest zrobić "copy-paste" :]
>
> Napisanie bootloadera tez nie jest sztuka, raczej tylko
> nudnym "rzemioslem" ;)
>
> --
> Michal Schulz

Tak jaaassnnee :]

Pozdrawiam
Re: Własny program startowy
#1066
Author: Michal Schulz
Date: Sun, 22 Apr 2007 22:47
16 lines
1452 bytes
Matuzalem wrote:

>> >> A po co robic w ogole wlasnego bootloadera, skoro mozna skorzystac z
>> >> gotowego? GRUB spelnia swoje zadanie znakomicie.
>>
>> > Dla własnej satysfakcji, nie sztuką jest zrobić "copy-paste" :]
>>
>> Napisanie bootloadera tez nie jest sztuka, raczej tylko
>> nudnym "rzemioslem" ;)
>
> Tak jaaassnnee :]

Cos nie tak?

-- 
Michal Schulz
Re: Własny program startowy
#1067
Author: Matuzalem
Date: Mon, 23 Apr 2007 00:15
17 lines
1976 bytes
On 23 Kwi, 00:47, Michal Schulz <michal.sch...@onet.eu> wrote:
> Matuzalem wrote:
> >> >> A po co robic w ogole wlasnego bootloadera, skoro mozna skorzystac z
> >> >> gotowego? GRUB spelnia swoje zadanie znakomicie.
>
> >> > Dla własnej satysfakcji, nie sztuką jest zrobić "copy-paste" :]
>
> >> Napisanie bootloadera tez nie jest sztuka, raczej tylko
> >> nudnym "rzemioslem" ;)
>
> > Tak jaaassnnee :]
>
> Cos nie tak?

Nie nie, wszystko jest ok :]

Pozdrawiam
Re: Własny program startowy
#1074
Author: Q
Date: Mon, 23 Apr 2007 00:38
9 lines
1366 bytes
> chciałem napisać w assemblerze własny program startowy do komputera

'startowy' tzn. taki 'system loader' co siedzi w #1 fizycznie sektorze (boot 
sector) na dysku ?

jak tak, to kiedys na stronie pc kuriera znalazlem
zrodlo przykladowego (prostego) ladowacza systemu;
do nowych (>8 GB) dyskow trza bylo je troche przerobic,
dodac ladniejsze menu i jazda :)
Re: Własny program startowy
#1070
Author: Q
Date: Mon, 23 Apr 2007 00:46
15 lines
1718 bytes
> bootloadera mogę zrobić w swoim czasie. Kod oczywiście 32-bitowy, zero 
> korzystania z przerwań DOS-u i BIOS-u -- wszystko bezpośrednio na 
> sprzęcie.

nie korzystales z 'przerwan' czy z 'uslug' ? :)
/bo mnie wkurza jak ludzie pisza 'przerwania biosu' -
 - bios Ci daje jakies tam uslugi ulatwiajace programowanie
 a przerwania (interrputs) to cos co sprzet wywuluje;

> Oczywiście wszystkie tego typu zabawy proponuję robić pod Virtual PC albo 
> podobnym emulatorze ;-)

VMware lepszy !
polecam go, mimo, ze ma nie do konca sprawna obsluge sieci -
- przeklamuje mi jakis bajt w udp :( 
Re: Własny program startowy
#1068
Author: Q
Date: Mon, 23 Apr 2007 00:52
12 lines
1654 bytes
> Napisanie bootloadera tez nie jest sztuka, raczej tylko
> nudnym "rzemioslem" ;)

trza wiedziec co robi bios, tzn. gdzie (adres) wgrywa sector;
potem co zrobic po tym biosowym jump'ie
i to w sumie wszystko :).

a - i assemblera trza znac, ale podstawy podstaw starcza
(jakie rejestry, kilka rozkazow - mov,jmp,add,shl,...).

tyle, ze na 100 ludzi posiadajacych taka wiedze,
to pewnie max 5 da rade napisac :P
Re: Własny program startowy
#1071
Author: Wiktor S.
Date: Tue, 24 Apr 2007 06:24
15 lines
1617 bytes
> nie korzystales z 'przerwan' czy z 'uslug' ? :)
> /bo mnie wkurza jak ludzie pisza 'przerwania biosu' -
> - bios Ci daje jakies tam uslugi ulatwiajace programowanie
> a przerwania (interrputs) to cos co sprzet wywuluje;

W dokumentacji jedno i drugie nazywane jest "interrupt" (odpowiednio: 
"software interrupt" i "hardware interrupt"), więc nie obrażając: bredzisz 
;-)

ale niech ci będzie: ani razu nie wykonywałem instrukcji INT, choć 
oczywiście przejmowałem przerwania sprzętowe (mysz, klawiatura, timer)


-- 
Azarien
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads