<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=61&amp;t=13155&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-05-14T14:36:47+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=61&amp;t=13155&amp;mode</id>
<entry>
<author><name><![CDATA[robertomic]]></name></author>
<updated>2016-05-14T14:36:47+01:00</updated>
<published>2016-05-14T14:36:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13155&amp;p=160597#p160597</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13155&amp;p=160597#p160597"/>
<title type="html"><![CDATA[Re: Programowanie PC innaczej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13155&amp;p=160597#p160597"><![CDATA[
<div class="quotetitle">PROTON napisał(a):</div><div class="quotecontent"><br />Żeby uruchomić program trzeba go wgrać do zerowego sektora dysietki lub pendrive a następnie zabootować z tego urządzenia komputer.<br /></div><br />1. czy na realnym prawdziwym komputerze tez sie uruchomi czy tylko na maszynie wirtualnej <br />sprawdzałeś ?<br /><br />2. Jak wgrac pod zerowy sektor pendriva ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13232">robertomic</a> — 14 maja 2016, o 14:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PROTON]]></name></author>
<updated>2015-10-08T13:15:55+01:00</updated>
<published>2015-10-08T13:15:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13155&amp;p=141827#p141827</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13155&amp;p=141827#p141827"/>
<title type="html"><![CDATA[Re: Programowanie PC innaczej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13155&amp;p=141827#p141827"><![CDATA[
Skąd czerpać informacje o przerwaniach?<br />Ze strony: <!-- m --><a class="postlink" href="http://www.cs.cmu.edu/~ralf/files.html" >http://www.cs.cmu.edu/~ralf/files.html</a><!-- m --> , są tam pliki zawierające opisy przerwań. Dla przykładu podam jak odczytać godzinę z zegara na płycie głównej (RTC).<br /><br />W pliku INTERRUP.D, pochodzącym z w/w strony znajduje się zapis:<br />[syntax=c]--------B-1A02-------------------------------<br />INT 1A - TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS)<br />AH = 02h<br />CF clear to avoid bug (see below)<br />Return: CF clear if successful<br />    CH = hour (BCD)<br />    CL = minutes (BCD)<br />    DH = seconds (BCD)<br />    DL = daylight savings flag (00h standard time, 01h daylight time)<br />CF set on error (i.e. clock not running or in middle of update)<br />Notes:this function is also supported by the Sperry PC, which predates the<br />  IBM AT; the data is returned in binary rather than BCD on the Sperry,<br />  and DL is always 00h<br />MS-DOS/PC DOS IO.SYS/IBMBIO.COM use this function to detect if a RTC<br />  is preset by checking if the returned values are non-zero. If they<br />  are, this function is called one more time, before it is assumed<br />  that no RTC is present.<br />BUG:some BIOSes leave CF unchanged if successful, so CF should be cleared<br />  before calling this function<br />SeeAlso: AH=00h,AH=03h,AH=04h,INT 21/AH=2Ch[/syntax]<br /><br />Zgodnie z powyższym opisem po wykonaniu instrukcji:<br />[syntax=asm]mov ah, 0x2<br />int 1ah[/syntax]<br /><br />W rejestrze CH mamy godzinę, w CL minuty, w DH sekundy. Wszytko w kodzie BCD więc bardzo łatwe do wyświetlenia.<br /><br /><br />W przypadku odczytu daty, w tym samym pliku INTERRUP.D mamy opis jak ją odczytać:<br />[syntax=c]--------B-1A04-------------------------------<br />INT 1A - TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS)<br />AH = 04h<br />CF clear to avoid bug (see below)<br />Return: CF clear if successful<br />    CH = century (BCD)<br />    CL = year (BCD)<br />    DH = month (BCD)<br />    DL = day (BCD)<br />CF set on error[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1315">PROTON</a> — 8 paź 2015, o 13:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2015-10-07T20:03:23+01:00</updated>
<published>2015-10-07T20:03:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13155&amp;p=141785#p141785</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13155&amp;p=141785#p141785"/>
<title type="html"><![CDATA[Re: Programowanie PC innaczej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13155&amp;p=141785#p141785"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Kompilascja Netwide Assemblerem, tworzy ona obraz dyskietki.<br /><br />nasm zegar.asm -o zegar.img<br /></div><br /><br />Np tak ....<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 7 paź 2015, o 20:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[vaffanculo]]></name></author>
<updated>2015-10-07T20:01:12+01:00</updated>
<published>2015-10-07T20:01:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13155&amp;p=141784#p141784</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13155&amp;p=141784#p141784"/>
<title type="html"><![CDATA[Re: Programowanie PC innaczej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13155&amp;p=141784#p141784"><![CDATA[
Ciekawy temat,<br /><br />podpowiesz jak skompilować ten kod?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1784">vaffanculo</a> — 7 paź 2015, o 20:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PROTON]]></name></author>
<updated>2015-10-07T18:31:40+01:00</updated>
<published>2015-10-07T18:31:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13155&amp;p=141752#p141752</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13155&amp;p=141752#p141752"/>
<title type="html"><![CDATA[Programowanie PC innaczej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13155&amp;p=141752#p141752"><![CDATA[
Programy na PC uruchamia się zazwyczaj pod kontrolą jakiegoś systemu operacyjniego, np. może być to DOS, Windows, Linux, itp. Można też uruchomić bezpośrenio na komputerze.<br />Wymagania są takie, że program musi być napisany w trybie 16bitowym, ponieważ będzie uruchamiany na procesorze pracyjącym w trybie rzeczywistym. Drugie wymaganie to program nie może być większy jak 512 bajtów, to ograniczenie wynika z tego że BIOS komputera jest w stanie wczytać tylko jeden 512 bajtów sektor i go uruchomić.<br />Żeby uruchomić program trzeba go wgrać do zerowego sektora dysietki lub pendrive a następnie zabootować z tego urządzenia komputer.<br /><br />O to program zegar.asm<br /><br />[syntax=asm]&#91;bits 16&#93;<br />&#91;org 0x7c00&#93;<br />start:<br /><br />jmp word 0:code<br /><br />;ES:DI - adres VRAM<br />;B800:0000 - początek - tryb tekstowy<br /><br />code:<br />mov ax, 0xb800<br />mov es, ax<br />xor di, di<br />mov ds, di<br />xor ax, ax <br />mov cx, 80*25<br />cld<br />rep stosw;fill CX words at ES:DI with AX<br />mov di, (80*12+40-6)*2<br />mov si, text<br />mov cx, text_dl<br />write:<br />movsb; mov byte DS:SI -&gt;  ES:DI<br />mov al,12 <br />stosb;store AL at address ES:DI<br />loop write<br /><br />czas:<br />;#######################################<br />;odczyt godziny (tryb BCD)<br />clc<br />xor ax, ax<br />xor bx, bx<br />xor cx, cx<br />xor dx, dx<br />mov ah, 0x2<br />int 1ah<br /><br />;przetwarzanie godziny<br />;godzina<br />xor ax, ax<br />mov al, ch<br />shr al, 4<br />add al, &quot;0&quot;<br />mov &#91;data&#93;, al<br /><br />mov al, ch<br />and al, 0b00001111<br />add al, &quot;0&quot;<br />mov &#91;data+1&#93;, al<br /><br />mov al,&quot;:&quot;<br />mov &#91;data+2&#93;, al<br /><br />;minuta<br />mov al, cl<br />shr al, 4<br />add al, &quot;0&quot;<br />mov &#91;data+3&#93;, al<br /><br />mov al, cl<br />and al, 0b00001111<br />add al, &quot;0&quot;<br />mov &#91;data+4&#93;, al<br /><br />mov al,&quot;:&quot;<br />mov &#91;data+5&#93;, al<br /><br />;sekunda<br />mov al, dh<br />shr al, 4<br />add al, &quot;0&quot;<br />mov &#91;data+6&#93;, al<br /><br />mov al, dh<br />and al, 0b00001111<br />add al, &quot;0&quot;<br />mov &#91;data+7&#93;, al<br /><br />mov al, &quot; &quot;<br />mov &#91;data+8&#93;, al<br />mov &#91;data+9&#93;, al<br /><br />;wypisanie godziny<br />mov di, (80*13+40-4)*2<br />mov si, data<br />mov cx, data_dl<br />write2:<br />movsb<br />mov al, 4<br />stosb<br />loop write2<br /><br />;#########################################<br />;odczyt daty<br />clc<br />xor ax, ax<br />xor bx, bx<br />xor cx, cx<br />xor dx, dx<br />mov ah, 0x4<br />int 1ah<br /><br />;przetwarzanie daty<br />;century<br />xor ax, ax<br />mov al, ch<br />shr al, 4<br />add al, &quot;0&quot;<br />mov &#91;data&#93;, al<br /><br />mov al, ch<br />and al, 0b00001111<br />add al, &quot;0&quot;<br />mov &#91;data+1&#93;, al<br /><br />;rok<br />mov al, cl<br />shr al, 4<br />add al, &quot;0&quot;<br />mov &#91;data+2&#93;, al<br /><br />mov al, cl<br />and al, 0b00001111<br />add al, &quot;0&quot;<br />mov &#91;data+3&#93;, al<br /><br />mov al,&quot;-&quot;<br />mov &#91;data+4&#93;, al<br /><br />;miesiac<br />mov al, dh<br />shr al, 4<br />add al, &quot;0&quot;<br />mov &#91;data+5&#93;, al<br /><br />mov al, dh<br />and al, 0b00001111<br />add al, &quot;0&quot;<br />mov &#91;data+6&#93;, al<br /><br />mov al,&quot;-&quot;<br />mov &#91;data+7&#93;, al<br /><br />;dzien<br />mov al, dl<br />shr al, 4<br />add al, &quot;0&quot;<br />mov &#91;data+8&#93;, al<br /><br />mov al, dl<br />and al, 0b00001111<br />add al, &quot;0&quot;<br />mov &#91;data+9&#93;, al<br /><br /><br />;wypisanie godziny<br />mov di, (80*14+40-5)*2<br />mov si, data<br />mov cx, data_dl<br />write3:<br />movsb<br />mov al, 6<br />stosb<br />loop write3<br /><br />;czekanie na klawisz<br />;xor ax, ax<br />;int 16h<br /><br />jmp czas<br /><br />; stop<br />jmp $<br /><br />text  db &quot;ZEGAR PROTON&quot;<br />text_dl equ $ - text<br />data times 10 db &quot; &quot;<br />data_dl equ $ - data<br /><br />; botesctor<br /><br />times (510-($-start)) db 0<br />db 0x55, 0xAA <br />times ((1440*1024)-($-start)) db 0[/syntax]<br /><br /><br />Kompilascja Netwide Assemblerem, tworzy ona obraz dyskietki.<br /><br />nasm zegar.asm -o zegar.img<br /><br />Efekt działania programu pod VirtualBoxem<br /><br /><a href="https://obrazkiforum.atnel.pl/1315/e462d8e7607f39ef5016ba1a4e67ca97.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/1315/e462d8e7607f39ef5016ba1a4e67ca97.png" alt="Obrazek" /></a><br /><br />Porgram powstał na bazie artykułów z miesięcznika programista, &quot;Bliżej krzemu&quot;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1315">PROTON</a> — 7 paź 2015, o 18:31</p><hr />
]]></content>
</entry>
</feed>