Eric Lengyel dobrovolně uvolnil jako volné dílo svůj patentovaný algoritmus Slug. Algoritmus vykresluje text a vektorovou grafiku na GPU přímo z dat Bézierových křivek, aniž by využíval texturové mapy obsahující jakékoli předem vypočítané nebo uložené obrázky a počítá přesné pokrytí pro ostré a škálovatelné zobrazení písma, referenční ukázka implementace v HLSL shaderech je na GitHubu. Slug je volným dílem od 17. března letošního
… více »Sashiko (GitHub) je open source automatizovaný systém pro revizi kódu linuxového jádra. Monitoruje veřejné mailing listy a hodnotí navrhované změny pomocí umělé inteligence. Výpočetní zdroje a LLM tokeny poskytuje Google.
Cambalache, tj. RAD (rapid application development) nástroj pro GTK 4 a GTK 3, dospěl po pěti letech vývoje do verze 1.0. Instalovat jej lze i z Flathubu.
KiCad (Wikipedie), sada svobodných softwarových nástrojů pro počítačový návrh elektronických zařízení (EDA), byl vydán v nové major verzi 10.0.0 (𝕏). Přehled novinek v příspěvku na blogu.
Letošní Turingovou cenu (2025 ACM A.M. Turing Award, Nobelova cena informatiky) získali Charles H. Bennett a Gilles Brassard za základní přínosy do oboru kvantové informatiky, které převrátily pojetí bezpečné neprolomitelné komunikace a výpočetní techniky. Jejich protokol BB84 z roku 1984 umožnil fyzikálně zaručený bezpečný přenos šifrovacích klíčů, zatímco jejich práce o kvantové teleportaci položila teoretické základy pro budoucí kvantový internet. Jejich práce spojila fyziku s informatikou a ovlivnila celou generaci vědců.
Firefox 149 dostupný od 24. března přinese bezplatnou vestavěnou VPN s 50 GB přenesených dat měsíčně (s CZ a SK se zatím nepočítá) a zobrazení dvou webových stránek vedle sebe v jednom panelu (split view). Firefox Labs 149 umožní přidat poznámky k panelům (tab notes, videoukázka).
Byla vydána nová stabilní verze 7.9 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 146. Přehled novinek i s náhledy v příspěvku na blogu.
Dle plánu byla vydána Opera GX pro Linux. Ke stažení je .deb i .rpm. V plánu je flatpak. Opera GX je webový prohlížeč zaměřený na hráče počítačových her.
GNUnet (Wikipedie) byl vydán v nové major verzi 0.27.0. Jedná se o framework pro decentralizované peer-to-peer síťování, na kterém je postavena řada aplikací.
Byly publikovány informace (technické detaily) o bezpečnostním problému Snapu. Jedná se o CVE-2026-3888. Neprivilegovaný lokální uživatel může s využitím snap-confine a systemd-tmpfiles získat práva roota.
Rád bych v DosBoxu emuloval rychlost I/O operací starých pevných disků či nedejbože disketové mechaniky (DosBox nemá implementovaný FDC – to jen tak pro zajímavost), které měly přístupové doby několik stovek milisekund až klidně celé sekundy. Jak to vypadá? Nějak takto.
Zpomalení cyklů vykonávání na to nemá příliš vliv. Je to implementováno jako read() volání a to na dnešních strojích může být i pár volání a zachvilku je několik MB dat v paměti než stačí člověk lusknout prstem. Dodám že DosBox samotný (aspoň SVN verze) má implementovaný zpomalovací mechanismus pro I/O operace. Jeden v iohandleru.cpp:#define IODELAY_READ_MICROSk (Bit32u)(1024/1.0)
#define IODELAY_WRITE_MICROSk (Bit32u)(1024/0.75)
inline void IO_USEC_read_delay() {
Bits delaycyc = CPU_CycleMax/IODELAY_READ_MICROSk;
if(GCC_UNLIKELY(CPU_Cycles < 3*delaycyc)) delaycyc = 0; //Else port acces will set cycles to 0. which might trigger problem with games which read 16 bit values
CPU_Cycles -= delaycyc;
CPU_IODelayRemoved += delaycyc;
}
inline void IO_USEC_write_delay() {
Bits delaycyc = CPU_CycleMax/IODELAY_WRITE_MICROSk;
if(GCC_UNLIKELY(CPU_Cycles < 3*delaycyc)) delaycyc=0;
CPU_Cycles -= delaycyc;
CPU_IODelayRemoved += delaycyc;
}
a konkrétně pro diskové operace nad lokálními soubory se o to stará procedura modify_cycles();
#ifndef DOSBOX_CPU_H
#include "cpu.h"
#endif
static inline void modify_cycles(Bits value) {
if((4*value+5) < CPU_Cycles) {
CPU_Cycles -= 4*value;
CPU_IODelayRemoved += 4*value;
} else {
CPU_IODelayRemoved += CPU_Cycles/*-5*/; //don't want to mess with negative
CPU_Cycles = 5;
}
}
//použito:
if (DOS_ReadFile(reg_bx,dos_copybuf,&toread)) {
MEM_BlockWrite(SegPhys(ds)+reg_dx,dos_copybuf,toread);
reg_ax=toread;
CALLBACK_SCF(false);
} else {
reg_ax=dos.errorcode;
CALLBACK_SCF(true);
}
modify_cycles(reg_ax);
dos.echo=false;
break;
V proměnné reg_ax/value je počet bajtů co se bude číst/zapisovat a podle toho se nějak spočte prodleva a prskne se tam. Bohužel to není dokonalé a ač to znatelně zpomaluje I/O operace (když se to zaDEFuje tak jsou I/O operace tak rychlé že načítací obrazovky jen problikávají) stále je to příliš rychlé a to úplně nezávisle na tom co se do toho zadá.
Vysledoval jsem si použití proměnné CPU_IODelayRemoved, bohužel ta má pouze informativní účel (používá se pouze ustanovování dynamicky se měnící rychlosti) a nemá žádný vliv na samotné plánování vykonávání. O to se stará proměnná CPU_Cycles respektive to co v ní zbude. Bohužel v tom je také zakopaný celý pes. I když zbude jen pár cyklů je to furt dost na to aby to načetlo spoustu dat za pár instrukcí do paměti (volá se dál fread() a to už je vlastně systémová funkce a jede rychlostí systému).
Jedním funkčním řešením je vklínění funkce usleep() či něčeho podobného do volané procedury. Stačí zadat v milisekundách jak dlouho se má spát a samotné načítání pak funguje tak jako kdysi za starých časů, jenže po dobu co se spí je samozřejmě suspendováno také vykonávání celého virtuálního stroje DOSu, takže místo prodlev to v reálné čase vypadá tak že DosBox laguje jak kráva. Což není úplně přesně to čeho chci dosáhnout.
Má někdo nějaký lepší nápad jak to implementovat? Jak se to vlastně dělalo v reálném DOSu/BIOSu že vykonávání celé mašiny nebylo zastaveno (jednoznačně si pamatuju že třeba blikal kurzor) zatímco jednotka (a přitom úplně šumák jestli ta pevná nebo ta zplihlá) seekovala a četla?
Nejde o úplně standardní dotaz, takže se asi nebudu zlobit když se na nic lepšího nepodaří přijít. Ani nemůžu.
Blikání kurzoru dělá grafická karta. Proto existují textové režimy. Rychlost blikání a velikost kurzoru (první a poslední řádek ve znaku) se dá nastavit. Detaily si už nepamatuji, protože jsem to používal naposledy tak někdy před dvaceti lety. Kurzor bude blikat, i když se procesor zastaví.
Přístup k disketové mechanice skrze BIOS je blokující. Programy, co při formátování dělali ještě něco jiného, buď pracovali přímo s I/O porty a dokončení operací kontrovaly pollingem nebo prostě dělali operace po malých blocích a prokládali je s jiným užitečným programem. Ten užitečný program stejně většinou jen čekal na stisk klávesy a pak překreslil pár znaků. Takový kooperativní taskwitching byl samozřejmě poznat, že interaktivita psaní na klávesnici šla do háje.
Tak jsem našel na disku jednotku v Pascalu. K nastavení tvaru kurzoru jsem používal službu 01h na přerušení 10h. Podle tohoto návodu je možné místo přerušení BIOSu si popovídat přímo s grafickou kartou kartou skrze I/O porty 0x3d4 a 0x3d5.
Frekvenci blikání prý ale standardně měnit nelze. Asi se mi to popletlo s pozorování, že když se změnil textový režim, změnila se i rychlost blikání kurzoru. Ta je totiž daná vertikální obnovovací frekvencí obrazovky a ta se s rozlišením mění.
Přístup k disketové mechanice skrze BIOS je blokující. Programy, co při formátování dělali ještě něco jiného, buď pracovali přímo s I/O porty a dokončení operací kontrovaly pollingem nebo prostě dělali operace po malých blocích a prokládali je s jiným užitečným programem.Jenže jak tohle implementovat? Nemůžu prostě na pár milisekund zastavit vykonávání virtuálního stroje. Resp. můžu ale chování moc neodpovídá tomu jak se to opravdu chovalo (až na to přehrávání OPLka, to to simuluje při zátěži vcelku věrně). Týden jsem se rýpal nacpáním ZMBV do mého SVN buildu abych to demonstroval a jen pro to abych zjistil, že usleep se na nahraném videu (zcela logicky ani nemůže, zastavená je aplikace a vnitřní hodiny běží jinou rychlostí a nějaké uspávání je nezajímá) se absolutně neprojevuje. V tom nahrávací obrazovka jenom blinke
Tiskni
Sdílej: