
KolibriOSãããžã§ã¯ãã§æãçç£æ§ã®é«ãéçºè
ã®1人ã§ãã
Sergey Semenov aka
Serge ïŒHabr
ion2 ïŒã®ã€ã³ã¿ãã¥ãŒã«æ³šç®ããŸãã
ã€ã³ã¿ãã¥ãŒã¯ã
ã¯ã€ã«ããŠã§ã¹ããšããŠã
ç¥ããã
ã»ã«ã²ã€ã¯ãºãã³ ïŒ
Habrr W__W㧠ïŒã«ãã£ãŠè¡ãããŸããã
趣å³ã¯ãããŸããïŒäžåºŠ
ã¿ã³ã¯ãšé£è¡æ©ã
ã¿ã³ã¯ã«æ¥çããŸã
ã ã 趣å³ã¯ããã°ã©ãã³ã°ã®éã«ãªããããã¥ã¡ã³ããèªãã§ãä»ã®äººã®ã³ãŒããåŠã¶ããã«ãªããŸããã
ãã€ãã©ã®ããã«ããŠã³ã³ãã¥ãŒã¿ãŒãšããã°ã©ãã³ã°ã«èå³ãæã¡ãŸãããïŒ ã©ã®æ¬ã圹ã«ç«ã¡ãŸãããïŒãŸããããã°ã©ã å¯èœãªèšç®æ©ãšãScience and Lifeèªã®æåã®èšäºããããŸããã 1985幎ã§ããã ãã以åã¯ãããŒã ã³ã³ãã¥ãŒã¿ãŒã¯æãžã®é£è¡ã®ããã«éçŸå®çã§ããã ãã®åŸãSpark 1080ãç»å Žãããã®äžã§ã¢ã»ã³ãã©ãŒ8080ã調ã¹ãŸããã
æžç±ãBorland C ++ã«ã€ããŠã¯ã·ã³ãã«ã§æ確ãããã£ãŒã«ãºã«ã«ããŒãã®åªããã21æ¥éã§Windowsããã°ã©ãã³ã°ãç解ãããããããŒãœãã«ã³ã³ãã¥ãŒã¿ãŒçšã®Cããã°ã©ãã³ã°èšèªãããããã°ã©ã ã®éçºã«Turbo Assemblerã䜿çšããã ãã¡ãããKulakovã«ãããããŒããŠã§ã¢ã¬ãã«ã§ã®ããã°ã©ãã³ã°ãããã³ä»ã®2ããŒã¹ã®æ¬ãStraustrupã¯ãã®äžã§ãã ããããæ¬æ£ã®åèªããå Žæã¯ãIA-32 Intel Architecture Software Developer's Manualã®3å·»ãšæé©åã¬ã€ãã§å ããããŠããŸãã Intelããããã®ã¬ã³ã¬ãäžçäžã«éã£ãæããããŸããã
é衚瀺ã®ããã¹ãæããã©ã³ãã®ããã¥ã¢ã«ãŸã§

æŽæ°åŸ

ã©ã®OSãè©ŠããŸãããïŒ èªå®
ãè·å Žããæ°ã«å
¥ãã®OSã¯äœã§ããïŒDOS 3.0ã4.0ã5.0ãããã³ã»ãŒãã¹ãŠã®WindowsïŒ3.1ã95ã95OSR2ã98ãNT4.0ãXPãWin7ã
çŸåšã®äŸ¡æ Œã¯8.1ã§ããç§ã«ã¯ããªã䌌åããŸããã以åã®ãã®ããããã³ã°ããŒãã«ãªããŒãããæ¹ã䟿å©ã§ããã ãŸããç°ãªãLinuxã䜿çšããDebian JessieãšKDEãã¹ã¯ãããã«èœã¡çããŸããã
ããªãã¯ã©ã®ããã°ã©ãã³ã°èšèªãç¥ã£ãŠããŸããããªãããããåŠã³ãŸãããïŒ ã©ããä»ã®äººããã奜ãã§ããïŒãã®çç±ã¯ïŒå€§åŠã®ã³ãŒã¹ã§åœŒãã¯
PL / Mãå°å
¥ããåŠæ ¡ã§ã¯åœŒããçã§æ·åããŸããã ç 究æã«ã¯ã
ã¯ã©ãªãªã³ 2.0ã®äœæ¥äžã«åŒ·å¶çãªãã©ãŒãã©ã³ããããŸããã ç§
ã¯ãã°ããã®é
Borland Pascal 7.0ã䜿çš
ããŠããŸãããããã®ã²ã©ãæ§æã«ããããããŠ
Cã«åãæ¿ããŸãã
ã ãããã20幎ãçµã¡ãŸããã
KolibriOSã«é¢ä¿ã®ãªããããžã§ã¯ãïŒä»¥åããã³çŸåšïŒã«ã€ããŠãããªãã¯äœãèšãããšãã§ããŸããïŒä»ã¯äœãæ®ã£ãŠããŸããã
KolibriOSããã€ãã©ã®ããã«çºèŠããŸãããïŒ åœŒå¥³ã®ããã«ããã«éçºãå§ããŸãããïŒ ãªã圌女ã®ããã«ããã°ã©ãã³ã°ããŠããã®ã§ããïŒ2001幎ã«ãComputerraã®
MenuetOSã«é¢ããå°ããªã¡ã¢ããããŸããã ããããããã«ã¯ãããŠã³ããŒãããã°ããã®0.38ãéåžžã«é
ããªããæãããèŠããã®ã§ã圌ãã¯ä»ã®Menuetã«ã€ããŠæžããŸããã æã
ãæ°ããããŒãžã§ã³ããã§ãã¯ãã2006幎ã«ããã³ã°ããŒãã«åºäŒããŸããã æ°ããã·ã¹ãã ã¯å€èŠ³ããã£ãšãããã§ãåäœãé«éã§ããã ããããç§ã¯ãã©ãŒã©ã ã«è¡ããIRQåŠçã«ã€ããŠè°è«ããŸããã 誰ãããŸãééã£ãŠããã ãããŠåžã蟌ãŸããã ç§ã¯ãã€ãéã§éã¶ããšã«èå³ããããŸããã ããã³ã°ããŒãã¯ãã³ã¢ãšéã®éã«è€éãªHALäžéå±€ããªããšããç¹ã§äŸ¿å©ã§ãã ãã¹ãŠãéåžžã«ã·ã³ãã«ã§æ確ã§ãããã«ãŒãã«ã¯å³åº§ã«ã³ã³ãã€ã«ããã³ããŒããããŸãã ããã¯ã100åè¡ããšãã«éèŠã§ãã
KolibriOSãããžã§ã¯ãã§äœãããäœãããŸãããïŒ ãããžã§ã¯ãã®çŸåšã®ã¹ããŒã¿ã¹ãšãã®å±¥æŽã説æããŸããæåã®ãããžã§ã¯ãã¯ãµãŠã³ããµãã·ã¹ãã ã§ããã Hummingbirdã«ã¯ã
Ivan Poddubnyã®ac97wavãšãããã¬ãŒã€ãŒãããŠãã³ã³ãããŒã©ãŒãšã³ãŒããã¯ãçŽæ¥æäœããŠããŸããã åé¡ã¯ãããã°ã©ã ãã³ã³ãããŒã©ãŒããã®å²ã蟌ã¿ãåŠçã§ãããã¯ãªãã¯é³ã鳎ããšããããšã§ããã次ã«ãããŒããŠã§ã¢ãžã®æä»çã¢ã¯ã»ã¹ã§ããã è€æ°ã®ããã°ã©ã ãåæã«ãµãŠã³ããåºåã§ããããã«ãããŠã³ããŒãå¯èœãªãã©ã€ããŒãšã·ã¹ãã ãããµãŒãäœæããå¿
èŠããããŸããã AC97ã®ã³ã³ãããŒã©ãŒãã©ã€ããŒã«ã¯ç¹å¥ãªåé¡ã¯ãããŸããã§ããããããããã©ã³ã銬鹿ããŠçŒãããŠããŸããããã«ãŒãã«ã¯ããŠã³ããŒãå¯èœãªãã©ã€ããŒããµããŒãããŠããªããããéçŸå®çãªDOSã¢ãŒãã§ã³ãŒãããã¹ãããå¿
èŠããããŸããã ã«ãŒãã«ã«ä»®æ³ã¡ã¢ãªãå²ãåœãŠãããç©çããŒãžãå¿
èŠãªã¢ãã¬ã¹ã«ãããããããIRQãã³ãã©ãŒãã€ã³ã¹ããŒã«ãããããããšã¯äžå¯èœã§ããã ãã¡ã€ã«ãããŠã³ããŒãããããã®å
éšæ©èœãããããŸããã§ããã ããã¯ã0x40ã«ãŒãã«ã³ãŒã«ãä»ããŠè¡ãå¿
èŠããããŸããã ãã®çµæãHummingbirdã§ãµãŠã³ãã衚瀺ãããåã«ãããŒãžãšä»®æ³ã¡ã¢ãªã®ç®¡çããã©ã€ããŒããŒããŒãããã³IRQåŠçãããçŽãå¿
èŠããããŸããã
ãŸã äžå®å
šãª2çªç®ã®äž»èŠãªäœæ¥ã¯ãããã£ã³ã©ã³ãã®å°é£ãªéå»ãã®éºç£ãå
æããããšã§ããã ãŸããå€æ°ã®ã·ã³ãã«åã¯Menuetã³ãŒãã§äœ¿çšãããŠããŸããã åæã®æ¹èšã§ã¯ãããããªã¯éãæããªããã°ãªããŸããã§ãã
mov eaxã[0xFE00]
shr eaxã1
mov [0xFB0A]ãax
mov eaxã[0xFE04]
shr eaxã1
mov [0xFB0C]ãax
ãŸãã¯
mov ediã[0x3004]; æåŸã®ããã»ã¹ïŒæ°å€ïŒ
movzx esiãã¯ãŒã[0xC400 + edi * 2]
shl esiã5
esiãwindow_dataãè¿œå ããŸã
第äºã«ããå°ããªã¢ã»ã³ãã©ãŒã³ã¢ãã¯ã¡ã¢ãªãå®å
šã«å€§éã«æ¶è²»ããŸããã ãã€ãå€æ°ã®å Žåããããã€ãã®å²ãåœãŠãäžè¬çã§ãããæ°åãããã€ãã®ãããã¡ã®å Žåãã¢ãã¬ã¹ã¯çµ¶å¯Ÿçã§ãããããçŸããã©ãŠã³ãå€ã«èª¿æŽãããŸããã ããã¯ãã¹ãŠè²§å°ããã§ããã ã«ãŒãã«ãã¡ã¢ãªãåçã«å²ãåœãŠãæ¹æ³ãç¥ããªãå Žåãéçã«äœè£ãæã£ãŠäºçŽããŸãã åŸã
ã«ããã¹ãŠã®çµ¶å¯Ÿã¢ãã¬ã¹ãã·ã³ããªãã¯ã©ãã«ã«çœ®ãæããããã«ãŒãã«ã®é£æ¬²ã¯çŽ3åçž®å°ãããŸããã
ãŸããã³ã¢ã«ã¯å€ãã®å°ããªå€åããããããã»ã©å€åã¯ãããŸããã§ããã æåã«ãããŒããŠã§ã¢ã«ãŒãœã«ãå«ãATI R100-R500çšã®ã¢ã»ã³ãã©ãã©ã€ãããããŸããã ãã®åŸãAMDã¯
radeonhdãå°å
¥ããHummingbirdã§ã¯ãããªã¢ãŒããå€æŽããæ©äŒããããŸããã æ°ãæåŸãLinuxã«ãŒãã«ã¯Hummingbirdã«ç¶ããŸãã:-) KMSã«åãæ¿ããæ°ãããã©ã€ããŒãåã³ç§»æ€ãããŸããã 11ã®çµããã«i915ã®ãã©ã€ããŒãç»å Žãã2幎åŸã«Mesaãã©ã€ããŒã®i965ãšæåã®ãéãã®ã¢ãå転ãå§ããŸããã 䞊è¡ããŠãffmpegã移æ€ãããããã«åºã¥ãããããªãã¬ãŒã€ãŒãäœæãããŸããã +ããã€ãã®äººæ°ã®ããã©ã€ãã©ãªã移æ€ããŸããïŒ
cairo ã
freetype ã
libpng ã
zlib ã
mesa ã æåŸã®ãããžã§ã¯ãã¯
binutils ïŒld objcopy stripã§ãããHummingbirdã«çŽæ¥ãªã³ã¯ããå¿
èŠããããã¹ãŠã§ãã
é衚瀺ã®ããã¹ãFPlayãããªãã¬ãŒã€ãŒ

ãã¢ã«ã€ã

Hummingbirdçµã¿èŸŒã¿ãã©ã³ãïŒå·ŠïŒãšDroid Sans Monoããã³FreeType 2.5

éçºäžã®ã«ãŒãã«ãã©ã³ãã«ã€ããŠæããŠãã ãããkolibri-acpiã¯ãkolibri-nextãšããæ£ç¢ºã«åŒã°ããŸãã ããã§ãã³ãŒãã¯ã¡ã€ã³ã³ã¢ã«å«ãŸããåã«ãã¹ããããŸãã
Kolibri-process-ãã«ãã¹ã¬ããã¢ããªã±ãŒã·ã§ã³ã®ãµããŒãã®æ¹åã å€æŽã¯ã¡ã€ã³ã³ã¢ã«ã¢ããããŒãããããã©ã³ãã¯äžå¿
èŠã«åé€ãããŸãã
kolibri_pe-æŽå²ãšåæ©ã¯ãã©ãŒã©ã ã§èªãã®ãäžçªã§ãã äœæ¥ã®æåã®éšåã¯æ£åžžã«å®äºããŸããã Cããã³ã¢ã»ã³ãã©ã®ã«ãŒãã«ã³ãŒãã¯ãåºå®ããŒã¹ã¢ãã¬ã¹ãæã€PE DLLã®ldã䜿çšããŠãªã³ã¯ãããŸããã ã«ãŒãã«ã¯GRUBãããŒãããä¿è·ã¢ãŒããããªã¢ã«ã¢ãŒãã«ãžã£ã³ããããªãã·ã§ã³ãéžæããŠãæ°ã«å
¥ãã®éãããŒãç»é¢ã衚瀺ããã°ã©ãã£ãã¯ã¢ãŒãããªã³ã«ããŠä¿è·ã¢ãŒãã«æ»ããŸããã ãããžã§ã¯ãã®è¡šçŽã®æåã®éã¯ãAMDã«ãã£ãŠæãããŸããã redéonhdãã©ã€ããŒã衚瀺ãããããã«åãæ¿ããŸããã 2çªç®ã®éã¯CCPã²ãŒã ããã®ãã®ã§ããã
çµæã¯ãå€ã®ã¢ã»ã³ããªã§ããããžã§ã¯ãã®FTPãµãŒããŒã«è¡šç€ºãããŸã ã ãããã®ãããžã§ã¯ãã®äžã§æãé£ãããã®ã¯ã©ãã§ããïŒéåœã®ç§»æ€ã ã¡ããšããã®ããŒãžã§ã³ã¯ãã§ã«ååšããŠãããããäœæ¥ã¯ããã»ã©è€éã§ã¯ãªãããã§ãããäž»ãªã¿ã¹ã¯ã¯ãµãŠã³ããè¿œå ããããšã§ããã ããããããŸããŸããããã°ã©ã ã¯ããŒãåŸã«ã¯ã©ãã·ã¥ããäœãåé¡ãªã®ããå®å
šã«äžæã§ããã id SoftwareãšOpen WatcomãsizeofïŒboolïŒãç°ãªãæ¹æ³ã§å®çŸ©ããããšãå€æãããŸã§ã1é±éã®ãããã°ã«å¯ŸåŠããå¿
èŠããããŸããã ãã®åŸããã¹ãŠãæèšä»æãã®ããã«ãªããŸããã
ããŸããŸãªäŒæ¥ã®ããã€ã¹çšã«ããã°ã©ãã³ã°ããå Žåã¯ãããã¥ã¡ã³ããèªãã§ãã ããã éã®éšåãŸãã¯OSã®éšåã«å¶éããã£ãå°é£ãªç¬éããããŸãããïŒããããªã¯ãACPIãŸãã¯ããã€ã¹ãããŒãžã£ãŒããµããŒãããŠããŸããã ããã¯å€ãã®åé¡ãåŒãèµ·ãããŸãã ããšãã°ãã«ãŒãã«ã¯äŸç¶ãšããŠå
å²æ代ã®8259Aã¢ãŒãã§å²ã蟌ã¿ãåŠçããBIOSã¯å
±æãããIRQã©ã€ã³ãç°ãªãPCIããã€ã¹ã«å²ãåœãŠãããšããããããŸãã çè«çã«ã¯ããã®ç·ã®åé¢ã¯æ©èœããã¯ãã§ãããå®éã«ã¯ããã§ã¯ãããŸããã ã«ãŒãã«ã¯APICã¢ãŒãã§ãåäœããŸãããããã«ã¯ãŠãŒã¶ãŒåŽã§ã®æºåã¢ã¯ã·ã§ã³ãå¿
èŠã§ãããæ®å¿µãªããè¯å®çãªçµæã¯ä¿èšŒãããŸããã
PCIãã¹äžã®ããã€ã¹ãåæãããšã䜿çšãããŠãããªãœãŒã¹ã«é¢ããæ
å ±ãåŸãããŸãããACPIããªããšäžå®å
šã§ãã ããã€ã¹ïŒi915 Gen3 gpuïŒã¯ã空ããŠããç©çã¢ãã¬ã¹ã®ç¯å²ãå¿
èŠãšããã«ãŒãã«ã¯ãããããã¯ã¢ããããã®ã«ååãªããŒã¿ãæã£ãŠããªãå ŽåããããŸãã ãŸããæåã®16MBã§ã®ã¿åäœããå€ä»£ã®SoundBlasterããããéçã«ã¡ã¢ãªãäºçŽããå¿
èŠããããŸãã
ãµãŠã³ãããã³ãããªã«ãŒããããŒãã£ã³ã°ã©ã€ãã©ãªããããªãã¬ãŒã€ãŒã®ãã©ã€ããŒ...次ã¯äœã§ããïŒAMD Radeonã®3Dãã©ã€ããŒããã³Fplayã§ã®ããŒããŠã§ã¢ãããªãã³ãŒãã®èšç»ã æ®å¿µãªãããããã«ã¯ããã€ãã®é害ããããŸãã Fplayã¯ffmpegã䜿çšããŠããããã®éçºè
ã¯VAAPIãšlibVAã®éçºè
ã«ããŸã銎æã¿ããããŸããããããããåŸè
ã«ã¯ç¬èªã®gstreamerãããããã§ãã äžæ¹ãffmpegã«ã¯vdpauã§ååãªæ©èœãåãã£ãŠãããããGalluim3Dã®r600ãšradeonsiã®æºåãæŽããšããã«ãã³ãŒããŒã¯ç¡ç·ã§åäœããŸãã ãããããããã¯llvmã«äŸåããŠããã移æ€ãããllvmã¯äºæ³ãããã³ãŒãã®ä»£ããã«çæããŸã... llvmãäœãã©ã®ããã«çæãããã¯æ£ç¢ºã«ã¯ããããŸããã
å€ãã®å Žåãåå¿è
ãæ¥ãŠãOSã®åã
ã®éšåãæžãæããŠãä»ã®ããŒããŠã§ã¢ãã©ãããã©ãŒã ã«ç§»æ€ããããšã«ã€ããŠå°ããŸãã ããšãã°ã mike.dld ã art_zhãªã©ãããåäžã®éçºè
ã®ãã©ãŒã¯ã§ããæã
çŸããŸãã ããã«ã€ããŠã©ãæããŸããïŒèœã¡çããŠããŸãã èªåã§ãã©ãŒã¯ãèµ·åããŠããçµäºããŸããã
KolibriOSã«ãšã£ãŠãããŒããŠã§ã¢ãã©ãããã©ãŒã ãŸãã¯ä»ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãšã®äºææ§ã¯éèŠã§ããïŒx86çšã®Hummingbirdã¢ã»ã³ããªã·ã¹ãã ã ä»ã®ããŒããŠã§ã¢ãã©ãããã©ãŒã ã«ã€ããŠè©±ãããšã¯ã»ãšãã©æå³ããããŸããã
åºæ¬çã«ãC ++ããã°ã©ã ãäœæããŠç§»æ€ããŸãã éçºã«äœ¿çšããããŒã«ã¯äœã§ããïŒWindowsãšLinuxã®ããŒãžã§ã³ã®gcc-4.8.2ãšbinutils-2.24ã«åºã¥ã
ããŒã«ãã§ãŒã³ãšãlibstdc ++ãªã©ã®å¿
èŠãªã©ã€ãã©ãªã®å°ããªã»ããããããŸãã
æ¬ èœããŠããé¢æ°ãè¿œå ããŠãæšæºã®ã³ã³ãã€ã©ã©ã€ãã©ãªãç·šéããå¿
èŠããããŸããïŒ POSIXã¯ã©ã®çšåºŠå®å
šã«ãµããŒããããŠããŸããïŒC / C ++ããã°ã©ã ã¯ã
newlibãæšæºã©ã€ãã©ãªãšããŠäœ¿çšããŸãã ãã¹ãŠã¯ffpmegããŒã¹ã®ãããªãã¬ãŒã€ãŒããå§ãŸããŸããã æåã®ããŒãžã§ã³ã«ã¯ãæäœéå¿
èŠãªæ©èœæ°ããããŸããã æ°ãããããžã§ã¯ãããšã«ãå¿
èŠãªæ©èœãnewlibã«è¿œå ããŸãã ããã¯ç¢ºãã«ééã£ãŠããŸãããæšæºã©ã€ãã©ãªã®ç§»æ€ã¯éå±ãªäœæ¥ã§ãã menuetlibcã§ã¯ãPOSIXã¯å€§å®¹éã§ãµããŒããããŠããŸãã äžè¬ã«ãPOSIXã®åé¡ã¯ãã¹ãŠå
æå¯èœã§ãããå°ãã®å¿èãšå¿èãå¿
èŠã§ãã
ããã°ã©ããŒã«ãªããããšæã£ãŠãã人ã«äœãã¢ããã€ã¹ã¯ãããŸããïŒ ã©ã®èšèªãè©Šãã¹ãã§ããïŒ æ°ããOSã®éçºè
ã«äœããå§ãããŸããïŒ éå§æ¹æ³ èªãã¹ãæç§æžã¯äœã§ããïŒä»¥åã¯ãã³ãŒããæçµçã«ã©ã®ããã«ãªãããç解ããããã«ãã¿ãŒã²ãããã©ãããã©ãŒã ã®ã¢ã»ã³ãã©ãŒã調ã¹ãããšããå§ãããŸãã ãããŠä»ããã¹ãŠãã¯ãã¹ãã©ãããã©ãŒã ã§ããã解éãããŠããããããäœã§å®è¡ããããã¯äžæã§ãã ããããOSéçºè
ã«ã¯ããã€ãã®ãã³ãããããŸãã
- æ¢åã®ãããžã§ã¯ãã«åå ããããå¿ãåãããã人ã
ãèŠã€ããŠãã ããã 3ã€ã®ãããã¯1ã€ãã4ååªããŠããŸãã
- ç¹ã«åç¬ã§ããã€ã¯ãã«ãŒãã«ã䜿çšããŠéçºãéå§ããªãã§ãã ããã ãã©ã€ããŒãšã¢ããªã±ãŒã·ã§ã³ãéçºããããšã¯ããå°é£ã«ãªããŸãã
- ãæ¯é¡ã®ãªããŠããŒã¯ãªAPIããæãã€ããããPOSIXã«ã€ããŠèããŠãã ããã é
ããæ©ãããäºææ§ãå¿
èŠã«ãªããŸãã
ããŠãèªè
ã®çãããããã³ã°ããŒãã«é¢é£ãããããã¯ã«ã€ããŠè³ªåãããã®ã§ãããèšäºãèŠããã§ããïŒ