ã¯ããã«
æ°æ¥åãAMDïŒAm386-DXïŒã®ããã»ããµãæèŒãã4ã¡ã¬ãã€ãã®RAMãVGAãããªã«ãŒããããã³ãã©ã€ãã³ã³ãããŒã©ãŒãããŒããã©ã€ãããã©ã¬ã«ãã·ãªã¢ã«ã®æ©èœãå®è¡ãããã«ãã«ãŒããæèŒããæåã®ã³ã³ãã¥ãŒã¿ãŒã386ããŒãã
ãã¡ããã圌ã¯é·ãé圌ã®ã±ãŒã¹ãšå€ä»£ã®æ»ãã ããŒãããå ããŠããŸãã-ä»ã§ã¯åœŒã¯äžå¯Ÿã®æ¡åŒµã«ãŒããåãããã¶ãŒããŒãã§ããã æ°å¹Žåãæ°ããããŒããã£ã¹ã¯10 GBïŒåœåã¯200 MBã®ãã£ã¹ã¯ãããããŸããã§ããïŒã«æ¥ç¶ããããã«FreeDOSãã€ã³ã¹ããŒã«ããŸããã

ããããä»åã圌ã¯BIOSãããããã«èµ·åããããšãæåŠããŸãã-é³ã§å€æãããšãã¯ããŒãŒããã«æšªããã£ãŠããæ°å¹Žéã¯10 GBã200ã¡ãŒãã«åŸã«è¿œãè©°ããããŸããã
ãããŠãç§ã¯ãã®ã³ã³ãã¥ãŒã¿ãŒã§äœãããããããã®å€ãã觊ããããšãã匷ã欲æ±ã«ç®èŠããŸãããããã«ããããŠãŒã¶ãŒãšããŠã§ã¯ãªããéçºè ãšããŠæ¢ã«ITã«ç²Ÿéãå§ããŸããã çæ³çã«ã¯ããã¡ãããSDã«ãŒãã§åäœããããŒããã©ã€ããšãã¥ã¬ãŒã¿ãäœæããããšæããŸãããåŸã ã«ãã®ç®æšã«åãã£ãŠãããŸãã ç°¡åãªã¿ã¹ã¯ããå§ããŸããããå®éã®ããŒããã£ã¹ã¯ã³ã³ãããŒã©ãšäžŠè¡ããŠãã³ã°ããããŒã¿äº€æãèšé²ããããã€ã¹ãçµã¿ç«ãŠãŠãå€ãBIOSãããŒããã©ã€ããæ€åºããæ¹æ³ãæ£ç¢ºã«èª¿ã¹ãŸãã æåã¯åãããšãããã€ããã§ãããããããããŒã³ã³ãããŒã©ãŒã«ã€ããŠã¯ãæåŸã®ããŒããã€ã®åŸãBIOSã ããæ®ã£ãŠããŸããBIOSã¯ãããããŒããã§ãã¯ããŸããã ãããã圌ã¯ããŒããã©ã€ãã«é¢é£ããããã€ãã®é ç®ãæã£ãŠããŸã-ããŒããã©ã€ãã®æ€åºãšãããããã©ãŒãããããããã®æ段ã
ãã¡ãããããã¯FPGAã®ã¢ãŒããã¯ãã£ã«ããéåžžã«ç°¡åã«è¡ãããŸãããäºç®ãªãã·ã§ã³ã«åºå·ããSTM32F103ã³ã³ãããŒã©ãŒãšããã€ãã®ãã£ã¹ã¯ãªãŒãããžãã¯åè·¯ã§ãããå®è¡ããããšããŸãã ããã§ã¯ãå§ããŸãããã
é
äŒçµ±çã«ãç§ãã¡ã¯åºèæš¹ã®åºããè¡ããŸãã å€ãã³ã³ãã¥ãŒã¿ãŒã®åºç€ãšãªãISAãã¹ãšã¯äœã§ãããããããŠã©ã®ããã«æ¥ç¶ã§ããããæ£ç¢ºã«æãåºããŸãããã x86ãã·ã³å ã®åè·¯ãå®éã«ç解ããŠããªã人ã«ãšã£ãŠãããã¯ãã®ãããªã·ã¹ãã ã®ã¢ãŒããã¯ãã£ãæããã«ããã®ã«åœ¹ç«ã¡ãŸãã å®éããã¹ãŠãéåžžã«åçŽã§ã-ãã¯ãªãŒã³ãªãISAã«ã¯ãã©ã°ã¢ã³ããã¬ã€ããŒã«ã¯ãããŸãã-ãããã¯æ¬¡ã®æšæºã§ã®ã¿ç»å ŽããŸããããããã£ãŠãããã€ã¹ã«ã¢ãã¬ã¹ãçºè¡ããæ段ã¯ãããŸããã
ãããã£ãŠãISAã«ãŒãã¯ãããŒããŠã§ã¢ã§æå®ãããã¢ãã¬ã¹ãæã€ããã€ã¹ã§ãïŒãžã£ã³ããŒã§ããŒã¹ã¢ãã¬ã¹ãéžæããæ©èœãåãããå³å¯ã«å®çŸ©ãããåè·¯ïŒã ãã¹èªäœã«ã¯ã20æ¬ã®ã¢ãã¬ã¹ã©ã€ã³ã16æ¬ã®ããŒã¿ã©ã€ã³ãè€æ°ã®é»æºä¿¡å·ãè€æ°ã®IRQã©ã€ã³ãããã³äžé£ã®å¶åŸ¡ä¿¡å·ãå«ãŸããŠããŸãã

ã©ã®ããã«æ©èœããŸããïŒ ããã€ã¹ã®ããã€ãã®LEDããªã³/ãªãããæ©èœãå¿ èŠã ãšããŸãã ãããè¡ãã«ã¯ãããšãã°74HC273ãªã©ã®ISAããŒãã«ã¬ãžã¹ã¿ããããé 眮ããŸãã
ããã¯æãäžè¬çãª8ãããã®ãã©ãããã§ãããä¿¡å·ã«ãã£ãŠå ¥åã«äŸçµŠããããã®ãèšæ¶ããŸãã ã¬ãžã¹ã¿ã®åºåãLEDã«æ¥ç¶ããããããå¿ããŠãã ããã ãœãããŠã§ã¢ã®èŠ³ç¹ããèŠããšãISAãã¹äžã®ããã€ã¹ãšã®å¯Ÿè©±ã¯2ã€ã®æ¹æ³ã§å®è£ ã§ããŸãã
- ã¡ã¢ãªãããã³ã°ã®å©ããåããŠãã¡ã¢ãªã®èªã¿åã/æžã蟌ã¿ä¿¡å·ããã³ãŒãããDRAMã³ã³ãããŒã©ãŒã§ã¯ãªããã¹ã«çµæãåºåããŸããããããããªã«ãŒãã®åäœã§ãããããªã¡ã¢ãªã¯ã³ã³ãã¥ãŒã¿ãŒã®ã¡ã¢ãªã®ã¢ãã¬ã¹ç©ºéã«ãããã³ã°ãããŸãã ãããã£ãŠãã³ã³ãã¥ãŒã¿ãŒã®ãããªã«ãŒãã®ã¡ã¢ãªãžã®æžã蟌ã¿ã¯ããã®RAMãžã®æžã蟌ã¿ãšå€ããããéåžžã®MOVã³ãã³ãã«ãã£ãŠå®è¡ãããŸãã
- 倧ããªããŒã¿ãããã¯ã転éããå¿ èŠã®ãªãããã€ã¹ã«ã¯ããããããI / Oã¹ããŒã¹ãã䜿çšãããŸããããã¯ãåšèŸºããã€ã¹ã«å²ãåœãŠããã16ã¢ãã¬ã¹ãããã«å¶éãããå¥åã®ã¢ãã¬ã¹ã¹ããŒã¹ã§ãã INããã³OUTã³ãã³ãã«ãã£ãŠã¢ã¯ã»ã¹ãããŸãïŒI / OããŒããžã®èªã¿åãããã³æžã蟌ã¿ïŒ
å®éããå¥åã®ã¢ãã¬ã¹ç©ºéããšããèšèã®èåŸã«ã¯ç©ççã«åçŽãªãšã³ãã£ãã£ããããŸããISAãã¹ã«ã¯ã MEMWãMEMRãIORãIOWãšãã4ã€ã®ä¿¡å·ããããŸãã ã³ãã³ããå®è¡ããŠã¡ã¢ãªã®èªã¿åã/æžã蟌ã¿ïŒ MOV ïŒãŸãã¯IOã®èªã¿åã/æžã蟌ã¿ïŒ IN ã OUT ïŒãå®è¡ãããšãç®çã®ã¢ãã¬ã¹ãåããã¹ãã©ã€ã³A0ãA19 ISAã«èšå®ãããŸãã ããŒã¿ã¯åãè¡D0-D15ã«ã沿ã£ãŠããŸãã å¯äžã®éãã¯ãã¡ã¢ãªããèªã¿åãå Žåã MEMRã©ã€ã³ã§ã¢ã¯ãã£ãã¬ãã«ãèšå®ãããããšãã¡ã¢ãªãžã®æžã蟌ã¿-MEMW ãIOããŒãããã®èªã¿åã-IOR ãæžã蟌ã¿-IOWã®å Žåã§ãã
ãããã£ãŠã1ã€ã®ã¬ãžã¹ã¿ãšLEDãåããæãåçŽãªããã€ã¹ãäœæããã«ã¯ãå¿ èŠãªã¢ãã¬ã¹ããã¹ã«èšå®ãããŠãããã©ãããå€æããå¿ èŠããããŸãïŒèª°ãã¢ãã¬ã¹ãæäŸããªãããšãæ¢åã®åšèŸºæ©åšãšç«¶åããªãã¢ãã¬ã¹ãéžæããå¿ èŠãããããšãèŠããŠããŸãïŒ IOWä¿¡å·ã§ãã¬ãžã¹ã¿ã®ã©ã€ã³D0ãD8ããã®ããŒã¿ã®èšé²ãæå¹ã«ããŸãã
è€æ°ã®ã¬ãžã¹ã¿ãå«ãããè€éãªããã€ã¹ã§ã¯ãããã€ã¹ã®ãããŒã¹ãã¢ãã¬ã¹ãšäžèŽãããšãã«ãã·ãã¢ã¢ãã¬ã¹ã©ã€ã³ããã³ãŒãã«éãããã¢ã¯ãã£ããªåºåä¿¡å·ã圢æããŸãã
ããå ·äœçãªäŸã«ç§»ããŸããã-ATAã³ã³ãããŒã©ã ãã®äœæ¥ã®ååãããããç解ããããã«ãOSDev wikiã®èšäºãèªãããšããå§ãããŸãã
ããã¯9ã€ã®IOã¬ãžã¹ã¿ã«ãã£ãŠç®¡çããããã®ãã¡8ã€ã¯ããŒã¹ã¢ãã¬ã¹0x1F0ããé ã«äžŠãã§ããŸãã æ®å¿µãªããšã«ã9çªç®ã¯0x3F6ã«ããããã³ãŒãã¹ããŒã ãããè€éã«ããŸãã
ãã¡ãããã³ã³ãããŒã©ãŒäžã®ãã¹ãŠã®ã¢ãã¬ã¹ã©ã€ã³ãååŸããŠãã³ãŒããŒãäœæããããšã¯ãããŸãããããããªããšã8 MHzãã¹ã®ã¯ããã¯åšæ³¢æ°ãIOãµã€ã¯ã«ã¯ä»æ§ã«åŸã£ãŠ4ãµã€ã¯ã«ç¶ãã72 MHzã§36ã¯ããã¯ãµã€ã¯ã«ããåŸãããŸãããèãã®ããã«ã ãããã£ãŠãå®äŸ¡ãªãã£ã¹ã¯ãªãŒãããžãã¯ãããã䜿çšããŸãã
0x3F6ã«çªãåºãŠãããã®9çªç®ã®ã¬ãžã¹ã¿ããªãã£ãå Žåãã©ã€ã³A9ãšA3ã«ãŒããèšå®ããã A4-A8ã« 1ãèšå®ãããŠããå ŽåïŒã€ãŸããã¢ãã¬ã¹0x1FïŒ ..ïŒ ïŒã ISAã«ãŒãã®A9ããå€ããããã¯éåžžãã³ãŒãããããäžèšã®ã¢ãã¬ã¹ã«ããåãããã€ã¹ãžã®ã¢ã¯ã»ã¹ã®å¯èœæ§ã«æ³šæãæããŸããã
3ã€ã®æäžäœãããã®åŠçã¯ããã§ã«ã³ã³ãããŒã©ãŒã«å§ããããŠããå¯èœæ§ããããŸãã æ®å¿µãªãã ããŸã å°éããŠããªãã¬ãžã¹ã¿0x3F6ããããŸãã
ãããã®ãããã¯0x1FïŒ..ïŒãš0x3F6ã® äž¡æ¹ã«å¯ŸããŠç€ºãããç¶æ ã«ãããããåææ¡ä»¶ïŒã¢ã¯ãã£ãã©ã€ã³A4-A8ããã³éã¢ã¯ãã£ãA3 ïŒã¯åžžã«æºããããŠããŸãã æ¡ä»¶ãè¿œå ããã次ã®ããã«å®åŒåã§ããŸããã¢ã¯ãã£ããªA9ã䜿çš-A1ããã³A2 ïŒã¢ãã¬ã¹0x3F6 ïŒã«ã¢ã¯ãã£ããªã¬ãã«ãå¿ èŠã§ã
ã€ãŸãã
CS0 = A8 & A7 & A6 & A5 & A4 & ~A3 CS1 = A1 & A2 & A9 CS2 = CS0 & (~A9 | CS1)
Logic.Lyãªã³ã©ã€ã³ããžãã¯åè·¯ã·ãã¥ã¬ãŒã¿ã䜿çšããŠãç§ã¯æã£ãŠãããã€ã¯ãåè·¯-74HC04ïŒã¯ã¯ãããšã¬ã¡ã³ãNOTïŒ ã74HC30-8å ¥åNANDããã³74HC10ïŒããªãã«3å ¥åNANDïŒã«åºã¥ããŠãã®åè·¯ãæ§ç¯ããŸããã
ORãšã¬ã¡ã³ãããªããããDe Morganã®ã«ãŒã«ãæãåºããŠãã ãã-è«çç©ã®åŠå®ã¯åŠå®ã®è«çåã§ãããè«çåã®åŠå®ã¯åŠå®ã®è«çç©ããŸãã¯è«çççåŒã®åœ¢ã§ã
~(A&B) = ~A | ~B ~(A|B) = ~A & ~B
ããã䜿çšããŸãã
~( ~ (~A9 | CS1))) = ~(A9&~CS1) - = (A9 NAND ~CS1) CS2 = CS0 & (A9 NAND ~CS1)
ãŸããçŽç²ãªANDããªãããããã®ã³ã³ããŒãã³ãã3å ¥åNANDãããã¯ã«äŸçµŠãããããããªãå²ã蟌ã¿ã«å ¥ããŸãã
ã芧ã®ãšããããã¹ãŠã®ããžãã¯ã¯3ã€ã®ã±ãŒã¹ã«æ£ç¢ºã«é©åããŠããŸãã

IORãŸãã¯IOWã®ã¢ã¯ãã£ãã¬ãã«ã®ååšã¯ããããã®æ¡ä»¶ã«è¿œå ãããŸãïŒæšæºã«åŸã£ãŠãã¢ã¯ãã£ãã¬ãã«ãäœãããšãå¿ããªãã§ãã ãããã€ãŸãããã§ã«ä¿¡å·ãå転ããŠããŸããIORããã³ãIOW ïŒã
CS = CS2 & (IOR | IOW) (IOR|IOW) = ~(~(IOR & IOW) ) = ~(~IOR & ~ IOW) = (IOR NAND IOW) CS = CS2 & (IOR NAND IOW)
æçµçãªå³ã¯æ¬¡ã®ããã«ãªããŸãã

ä»ãã¢ãã¯ã¢ããã䜿çšããŠãéã§ãããéãå§ããŸãã ãŸããæåã®3ã€ã®ãã€ã¯ãåè·¯ãé 眮ããŸãããã®åè·¯ã«ã¯ãã»ãšãã©ã®å ¥åä¿¡å·ãéãããé»æºãã¹ãšã°ã©ã³ããã¹ãžã®æ¥ç¶ã«æ³šæããŸãã

åºååè·¯ãæ éã«è¿œå ããŠãããååã«é·ããããŒãã®åœ¢åŒã§å ¥ååè·¯ãè¿œå ããŸããããã¯åŸã§ã³ã³ãã¥ãŒã¿ãŒã®ãã¶ãŒããŒãã«æ¥ç¶ããŸãã

䟿å®äžãå·ŠåŽã®äžäœã¢ãã¬ã¹å ¥åïŒ A3-A9 ïŒãå³åŽã®äžäœã¢ãã¬ã¹å ¥åïŒ A0-A2 ïŒãäžæçã«ä¿®æ£ããäžå€®ã§CS2ä¿¡å·ãåºåããŸããã
ã¢ã»ã³ããªããäžæçã«æ³šæããããããªã·ãã¹ã³ãŒãã§äœãèµ·ãã£ãããèŠãŠã¿ãŸãããã ãããã£ãŠãã¢ãã¬ã¹å ¥åããã¹ã«æ¥ç¶ããŸã-ISAã¯ãŸãã«ãã¹ã§ãããããATAã³ã³ãããŒã©ããŒããæ¿å ¥ãããŠããã®ãšåãã¹ãããã«ãããŒããæ¥ç¶ããå¿ èŠã¯ãããŸããã䟿å©ãªãã®ãéžæããŸãã æ®å¿µãªããšã«ããããŒãã¯ãã®ãããªç©Žã«ã¯å°ããããã®ã§ãäžã«ãŸã£ãããªãã³ã®æ«ã貌ãä»ããŸãã-åå¥ã«ããããŒããšãã³ã¯è±èœããŸããããããã¯éåžžã«ããŸããã£ã€ããŸãã
ãŸããã°ã©ã³ããšåè·¯é»æºãISAã«æ¥ç¶ããããšãå¿ããªãã§ãã ãã-åæã«-ãªã·ãã¹ã³ãŒããããŒãã®ã°ã©ã³ãã
ãªã·ãã¹ã³ãŒããšã³ã³ãã¥ãŒã¿ãŒã®é»æºãå ¥ãïŒããã«BIOSã»ããã¢ããã¡ãã¥ãŒã«å ¥ã£ãïŒã CLKä¿¡å·ã確èªããŸããã 次ã®ãããªãã®ã衚瀺ãããã¯ãã§ãã

ãã¡ãããããã¯éåžž8 MHzã®åšæ³¢æ°ã®ãã¹ã¯ããã¯ã§ãã ç§ã®ãã¶ãŒããŒãã§ã¯ãåšæ³¢æ°ã¯7.19 MHzã§ãããBIOSèšå®ã«åæ ãããŠããŸãã ã©ããããããã¯éã®æ©èœã§ã-BIOSã¯ãã®åšæ³¢æ°ãäžããããšãèš±å¯ããŠããŸããã§ããããŸãã¯å°ãªããšãæ£ç¢ºã«8 MHzã«èšå®ããé åºã«7.19 MHzãèšå®ããŸããã ãŸãã
åè·¯ã®å ¥åã®æ¥ç¹ã確èªããŸããã·ã¹ãã ãåžžã«ç°ãªãã¢ãã¬ã¹ãšããŒãã«ã¢ã¯ã»ã¹ããããããããã®ãããããçªããšãªã·ãã¹ã³ãŒãç»é¢ã«ã«ãªã¹ä¿¡å·ã衚瀺ãããŸãã ãã®ãããå ¥ãå£ã«æ²é»ãããå Žåã¯ãé£çµ¡å ãèœã¡ãããšãæå³ããå確èªããå¿ èŠããããŸãã
次ã«ã CS2ä¿¡å·ã«æ¥ç¶ãã次ã®å³ã確èªããŸãã

IORããã³IOWä¿¡å·ã¯CS2ã®åœ¢æã«é¢äžããªãããããã¹äžã®ã¢ãã¬ã¹ãæå®ããã¢ãã¬ã¹ïŒ 0x1F0-0x1F7ããã³0x3F6 ïŒãšäžèŽãããšã¢ã¯ãã£ãã«ãªããŸãã ã·ã¹ãã ã¯éåžžã®DRAMåçæãå®è¡ãããããçŸããåšæä¿¡å·ãååŸããŸãã ä»ããããªã·ãã¹ã³ãŒãã®æåŒãšã¬ãã«ã調æŽããŠããã¹ãŠã®æ å ã®ä¿¡å·ãèŠããšãã§ãã
ãã¹ãŠãæ©èœããããšã確èªããåŸãåè·¯ã®é»æºãåããæåŸãŸã§çµäºããŠã次ã®ãããªã¯ã€ã€ã®ããã·ã¥ãååŸããŸãã

ã³ã³ãã¥ãŒã¿ãŒã®é»æºãåã³å ¥ããBIOSã»ããã¢ããã¡ãã¥ãŒã«ç§»åãããªã·ãã¹ã³ãŒãã®é»æºãå ¥ããŸãã
ä¿¡å·ãªãïŒ ããŠãèšç®ã®æ£ç¢ºãã確èªããæãæ¥ãŸãã-ãããŒããã©ã€ãã®èªåæ€åºãé ç®ãéžæããŸãã æåã®ãã£ã¹ã¯ã¯ããã«æ€åºãããŸããããããããªã·ãã¹ã³ãŒãã®ç»é¢ã§ã¯ãã·ã³ã°ã«ã¢ãŒãããªã³ã«ããªãéããäœã«ãæ°ä»ãæéã¯ãããŸããã
ãããã2çªç®ã®ãã£ã¹ã¯ïŒååšããªãããïŒã¯ãã³ã³ãã¥ãŒã¿ãŒç»é¢ã§ããã確èªããã®ã«ååãªæéæ€åºãããŸãã

ãããŠããªã·ãã¹ã³ãŒãç»é¢ã§-ããïŒ

æ£ããããšã確èªããããã«ããã£ã¹ã¯æ€åºãçµäºããã·ã³ã°ã«ã¢ãŒããªã·ãã¹ã³ãŒãããªã³ã«ããŠãç»é¢ã泚ææ·±ãèŠãŠãã ãã-äœããããŸããïŒ ã©ãã ãåŸ ã£ãŠãã CSã¯ã¢ã¯ãã£ãã«ãªããŸããïŒ ãããããã£ã¹ã¯ã®æ€åºã«å ¥ããšããã«ãæšæºãšå®å šã«äžèŽããããªãã¿ã®ç»åãåã³ååŸããŸããæåŸã®4ã¯ããã¯ãµã€ã¯ã«ã®I / Oãµã€ã¯ã«ã§ãã
ããŠãSTM32ã§ããŒããåããã·ã¹ãã ã«æ¥ç¶ããæãæ¥ãŸããïŒ
ç§ã¯æ¬¡ã®ããã«æ¥ç¶ããŸããïŒ
GPIOD.0-GPIOD.7ã«æ¥ç¶ãããISAããŒã¿ãã¹ïŒ D0-D7 ïŒ
3ã€ã®äžäœã¢ãã¬ã¹è¡ïŒ A0-A2 ïŒ -GPIOD.8-GPIOD.10 ã
ã¢ãã¬ã¹A9ã®è¡ã¯GPIOD.11ã§ã ïŒçµå±ããã®ãããã¯ãåŒã³åºãã0x1F6ã§ã¯ãªã0x3F6ã«è¡ãããšãç解ããããã«å¿ èŠã§ãïŒïŒ
GPIOD.12ããã³GPIOD.13ãžã®IOWããã³IORè¡ã
CSä¿¡å·-GPIOB.0ãž
ããã§ã GPIOB.0ã§äžæããå Žåã GPIOD-> IDR ïŒå ¥åããŒã¿ã¬ãžã¹ã¿ïŒãèªã¿åãã ãã§ãäžäœ8ããããç®çã®ããŒã¿ã«ãªãã次ã®4ããããã¢ãã¬ã¹ã«ãªããŸãïŒããã«ãããŒã0x1F0ã«å¯Ÿå¿ããçµã¿åããã¯0000-0111ããã³1011ã«ãªããŸãïŒ -0x1F7ããã³0x3F6 ïŒã次ã®2ã€-ã¢ãŒãå¥ïŒ 01ã§èªã¿åããŸãã¯10ã§æžã蟌ã¿ïŒã
ããã§æ¬¡ã®ããšã«æ³šæããããšãéèŠã§ã-ç¡å¹ãªç¶æ ã«ããã¢ãŒãããã-00ãŸãã¯11ã§çªç¶çµæãåŸãããå Žåãããã¯åäœãšã©ãŒãéç¥ããŸã-ãã®äºå®ã¯ããã«åœ¹ç«ã¡ãŸãã
ãããã£ãŠããœãããŠã§ã¢ã«æž¡ããŸãã
ãœãããŠã§ã¢
ãœãããŠã§ã¢ã䜿çšãããšããã¹ãŠãéåžžã«ç°¡åã«ãªããŸããå ¥åçšã®GPIODãšGPIOB.0ãæ§æãã GPIOB.0ã«æ¥ç¶ãããEXTIã©ã€ã³ã§ããããå²ã蟌ã¿ãæ§æããŸãã
å²ã蟌ã¿ãã³ãã©ãŒã§ã¯ã GPIODããå€ãèªã¿åãããããã¡ãŒãžã®ãã€ã³ã¿ãŒãã€ã³ã¯ãªã¡ã³ãããã ãã§ãã ãã®ãããã¡ãŒã¯ãä»»æã®ã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠåæã®ããã«ã³ã³ãã¥ãŒã¿ãŒã«éä¿¡ããããšãããŸã£ããæ°ã«ããã«ãããã°ã§çŽæ¥ç¢ºèªããããšãã§ããŸãã
ã»ããã¢ããã³ãŒãã以äžã«ç€ºããŸãã
GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3| GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7 |GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11| GPIO_Pin_12|GPIO_Pin_13; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0); EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); NVIC_InitTypeDef NVIC_InitStructure; NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
ãããŠãããã«å²ã蟌ã¿ãã³ãã©ã³ãŒãããããŸãã
uint16_t Log[1024]; uint16_t ptr=0; void EXTI0_IRQHandler() { Log[ptr]=GPIOD->IDR; ptr++; EXTI_ClearITPendingBit(EXTI_Line0); }
ãã¹ãããããã°ãä»äžã
ç§ãã¡ããã£ãããšã確èªããæãæ¥ãŸããïŒ ã³ã³ãã¥ãŒã¿ãŒãèµ·åããBIOSã»ããã¢ããã«é²ã¿ãŸãã STMkiãããã°ãå®è¡ããŸãã ãã£ã¹ã¯ã®æ€åºã«å ¥ãããã©ã€ãCã®æ€åºåŸãã³ã³ãããŒã©ãŒããã°ã©ã ã®å®è¡ãäžæããŸãã ãããã°ãŠã£ã³ããŠã§ãäžéšã®ããŒã¿ããã£ãããããããšãããããŸããå€ãã®ããŒã¿ããããŸãã
ãã®åŸã次ã®ããã«è¡ããŸãã-ãããã°ãŠã£ã³ããŠãããããã¡ãŒã®å 容ãMS Exelã«ã³ããŒããŠåã«åå²ããå€æ°åãå«ãæåã®åãåé€ãããã®åŸãå€ãæã€åãæ°ããããã¹ããã¡ã€ã«ã«ã³ããŒãã次ã®ãããªãã®ãååŸããŸããïŒ
58453 54527 42069 38143 42069 38143 ...
ããã§ã䟿å©ãªèšèªã§çµæãåŠçããããã°ã©ã ãäœæããŸããããã«ã¯CïŒã䜿çšããŸããã åå ¥åuintãããŒã¿ãã¢ãã¬ã¹ãããã³ã¢ã¯ã»ã¹ã¢ãŒãã«åå²ããèªã¿ãããã¬ããŒããäœæããå¿ èŠããããŸãã ããã¯ãããšãã°æ¬¡ã®ããã«ãéåžžã®ãããã·ãããšãããåäœã®æäœã§éåžžã«ç°¡åã«å®è¡ãããŸãã
var busData = uint.Parse(entry); uint data = (busData & 0xFF); uint address = ((busData & 0xFF00) >> 8); uint rw = (address & 0x30)>>4; address = (address & 0x0F);
ããããããã°ã©ã ãå®è¡ãããšã倧ããªåé¡ãçºçããŸããããã¡ã€ã«ã®å€ãã®ã¬ã³ãŒãã«ã¢ã¯ã»ã¹ã¢ãŒã11ãå«ãŸããŠãããããèªã¿åã/æžã蟌ã¿ä¿¡å·ããããŸããã§ããã ã€ã³ã¿ãŒã©ãããžã®å ¥ãå£ã¯ãããã®ä¿¡å·ã®1ã€ã§ã®ã¿å¯èœã§ãããããã€ã³ã¿ãŒã©ããã¯ãã¹ãµã€ã¯ã«ãããé·ãç¶ããæå¹ãªããŒã¿ãèªã¿åãæéããããŸããã
ãã®ä»®èª¬ããã¹ãããããã«ãå²ã蟌ã¿ã®å ¥ãå£ã§ãã³GPIOB.2ã1ã«èšå®ããåºå£ã§ããã0ã«ãªã»ãããããã®åŸãªã·ãã¹ã³ãŒããããŒããæããããšã«ããŸããã
çµæã¯æ鬱ã§ããïŒ

ã芧ã®ããã«ãå ¥åçšã«12ã¯ããã¯ãµã€ã¯ã«ãçŽæãããŠããã«ãããããããã·ã¹ãã ã¯I / Oãµã€ã¯ã«ã®æåŸã«ã€ã³ã¿ãŒã©ããã«å ¥ããŸãã ïŒè£žã®ïŒå±æ§ã§ããå©ãã«ã¯ãªããŸããã§ãããããã®éãã¯ãŸã£ããéèŠã§ã¯ãããŸããã§ããã
ããã¯æ°åã害ããŸããããã³ã³ãããŒã©ãŒã®ãªãŒããŒã¯ããã¯ãè©Šã¿ãããšã«ããŸãã-åãAVRã¯ãªãŒããŒã¯ããã¯ã«éåžžã«åªããŠããã®ã§ãSTM32ãããã§ã©ã®ããã«åäœããŠãããã確èªããŠãã ããã ãããè¡ãã«ã¯ã system_stm32f10x.cãã¡ã€ã«ã«ç§»åããŠãã·ã¹ãã ã¯ããã¯SetSysClockTo72ãåæåããæé ã«é²ã¿ ã次ã®è¡ãèŠã€ããå¿ èŠããããŸãã
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
ãã®è¡ã§ã¯ãå®æ°RCC_CFGR_PLLMULL9ãããã«å€æŽããå¿ èŠããããŸãã ç§ã¯ããã«èšããŸã-ç§ã¯ãã¹ãŠã®ãªãã·ã§ã³ãè©Šããæçµçã«æ倧å€RCC_CFGR_PLLMULL16ã«èœã¡çããŸãã ã ãããã£ãŠãã³ã³ãããŒã©ãŒã¯ã济ããããšãªãã72ã§ã¯ãªã128 MHzã®åšæ³¢æ°ã§å®å šã«å·»ãäžããããŸããã
ã¡ãªã¿ã«ãåæããŠåäœãããããã«ãISAã¯ããã¯ã«ã³ã³ãããŒã©ãŒã¯ããã¯ä¿¡å·ãæ¥ç¶ããããšã¯éåžžã«è¯ãããšã§ããããããã°ããŒãã«æ°Žæ¶ãã¯ãã ä»ãããããªãã£ãã®ã§ãããã¯ããŸããã§ããã
ãªã·ãã¹ã³ãŒãã®åºåãèŠãŠã¿ãŸãããã

æåŸã«ãã€ã³ã¿ãŒã©ãããåŠçããæéãããã®ã«ååæ©ãå ¥åãå§ããŸããïŒ ããäžåºŠå ¥åããŠãåæããŠã¿ãŸãããã
ã¬ããŒãã«ã¢ã¯ã»ã¹ããŠããã¬ãžã¹ã¿ã®ååããââãã«ãã©ãŒããããããããã«ãããã°ã©ã ã«ããã€ãè¿œå ããŸããã 誀ã£ãã¢ã¯ã»ã¹ã¢ãŒãã®å Žåãç¡å¹ãªããŒã¿ã«é¢ããè¡ãã¬ããŒãã«è¿œå ãããŸãã
ããã°ã©ã ã®çµæã¯æ¬¡ã®ãšããã§ãã
WRITE: Cylinder Low [0x1F4] VALUE: 0x55 READ: Cylinder Low [0x1F4] VALUE: 0x55 WRITE: Cylinder Low [0x1F4] VALUE: 0xAA READ: Cylinder Low [0x1F4] VALUE: 0xAA WRITE: Cylinder Low [0x1F4] VALUE: 0x0F READ: Cylinder Low [0x1F4] VALUE: 0x0F WRITE: Cylinder Low [0x1F4] VALUE: 0x00 READ: Cylinder Low [0x1F4] VALUE: 0x00 READ: Status [0x1F7] VALUE: 0x50 WRITE: Drive/Head [0x1F6] VALUE: 0xA0 READ: Status [0x1F7] VALUE: 0x50 WRITE: Drive/Head [0x1F6] VALUE: 0x04 WRITE: Drive/Head [0x1F6] VALUE: 0x00 READ: Status [0x1F7] VALUE: 0x50 WRITE: Drive/Head [0x1F6] VALUE: 0xA0 READ: Status [0x1F7] VALUE: 0x50 WRITE: Drive/Head [0x1F6] VALUE: 0xA0 READ: Status [0x1F7] VALUE: 0x50 WRITE: Command [0x1F7] VALUE: 0x10 READ: Status [0x1F7] VALUE: 0x50 READ: Status [0x1F7] VALUE: 0x50 WRITE: Drive/Head [0x1F6] VALUE: 0xA0 READ: Status [0x1F7] VALUE: 0x50 WRITE: Drive/Head [0x1F6] VALUE: 0xA0 READ: Status [0x1F7] VALUE: 0x50 WRITE: Command [0x1F7] VALUE: 0xEC READ: Status [0x1F7] VALUE: 0x58 READ: Data [0x1F0] VALUE: 0x5A READ: Data [0x1F0] VALUE: 0xFF READ: Data [0x1F0] VALUE: 0x00 READ: Data [0x1F0] VALUE: 0x10 READ: Data [0x1F0] VALUE: 0x00 READ: Data [0x1F0] VALUE: 0x00 READ: Data [0x1F0] VALUE: 0x3F READ: Data [0x1F0] VALUE: 0x00 READ: Data [0x1F0] VALUE: 0x00 READ: Data [0x1F0] VALUE: 0x00 READ: Data [0x1F0] VALUE: 0x45 ...
ã芧ã®ãšãããç¡å¹ãªããŒã¿ã¯ãããããŸããã
BIOSãæ€åºãå®è¡ããæ¹æ³ãç解ããŠã¿ãŸãããã
æåã¯ãã¢ãã¬ã¹ãæå®ããã¬ãžã¹ã¿ã«åžžã«æžã蟌ã¿ãšèªã¿åããè¡ããæžã蟌ãŸããå€ãšåãå€ã確å®ã«èªã¿åãããããã«ããŸãã ATAã³ã³ãããŒã©ãã·ã¹ãã ã«ãªãå ŽåãBIOSã¯ãã®ã¬ãžã¹ã¿0x1F4ãé·æéèªã¿æžãããããšããŸã-ããã¯ãã³ã³ãããŒã©ããŒããåŒãåºãããã¬ããŒãã®äŸã§ãã
WRITE: Cylinder Low [0x1F4] VALUE: 0x55 READ: Cylinder Low [0x1F4] VALUE: 0xFF WRITE: Cylinder Low [0x1F4] VALUE: 0x55 READ: Cylinder Low [0x1F4] VALUE: 0xFF ... WRITE: Cylinder Low [0x1F4] VALUE: 0x55 READ: Cylinder Low [0x1F4] VALUE: 0xFF WRITE: Cylinder Low [0x1F4] VALUE: 0x55
次ã«ã 0x10ã³ãã³ããéä¿¡ããŸãããã®å€ã¯mark_ablovã«ãã£ãŠèŠªåã«ããã³ãââãããããã£ã¹ã¯ã匷å¶çã«ç£æ°ããããã»ã¯ã¿ãŒ0ã«åé 眮ããå€ãå調æŽã³ãã³ãã§ãããã®åŸãBIOSã¯ã¹ããŒã¿ã¹ãã€ãããã§ãã¯ããã³ãã³ãã®å®äºãåŸ æ©ããŸãïŒããŒããã©ã€ããBUSYç¶æ ã«å ¥ããªãããšãããããŸãïŒ ãããã«åœŒãå®äºãããšå¿çããŸãïŒ
ãããŠæåŸã«-ã³ãã³ã0xEC ã DRIVE IDENTIFY ãããã«å¿çããŠãããŒãã¯256åã®16ãããã¯ãŒãã®ãã£ã¹ã¯æ å ±ãæäŸããŸãã
ããŒã0x1F0ããèªã¿åããéå§ããåã«ãBIOSã¯ã¬ãžã¹ã¿0x1F7ããã¹ããŒã¿ã¹ãã€ããèŠæ±ãããã£ã¹ã¯ã®æºåãæŽãã®ãåŸ ã¡ãŸãã
ããã§ãæ®å¿µãªãããç§ã¯èªåã®ééãã«æ°ä»ããŸãããå¶åŸ¡ã¬ãžã¹ã¿ã¯8ãããã§ãããããããŒã¿ã¯8ãããã§åºåãããããšã«ããŸããã ããããå€æããããã«ãããŒã¿ã¯16ãããã§åºåãããããã256ãã€ãã®äžäœãã€ãããåä¿¡ããŸããã§ããã å®å šãªæ å ±ãååŸããã«ã¯ãã¹ããŒã ãå°ãããçŽããŠGPIODå šäœãããŒã¿ã«æž¡ã ãã¢ãã¬ã¹ãšã¢ã¯ã»ã¹ã¢ãŒããä»ã®ãã³ã«è¡šç€ºããå¿ èŠããããŸãããã¡ããããããã®åŠçã®é 延ãå¢å ããŸãã
ãããã£ãŠãçŸæç¹ã§ã¯åæ¢ããŸããããè¿ãå°æ¥ãã¢ãã¿ãŒãšããŠã§ã¯ãªããããã€ã¹ãšããŠãã¹ã«åº§ã£ãŠäœæ¥ãç¶ããŸãã ISAãã¹ã«ã¯çŽ æŽãããIOCHRDYä¿¡å·ããããããã€ã¹ãIOãµã€ã¯ã«ã®æéãå¢ããå¿ èŠãããããšãç¥ãããéã¢ã¯ãã£ãã¬ãã«ãèšå®ããŸããããã¯ããã³ãåºåã«åãæ¿ããŠã¹ããŒã¿ã¹ãçºè¡ããã®ã«ååãªæéãããããšãæå³ããŸãã
ããã§ãã¹ãŠã§ããèŠãŠãããŠããããšãã
æŽæ° ïŒ
èå³æ·±ããã®ãçºèŠããŸããã ãããžã§ã¯ãèšå®ã§O3ã®ä»£ããã«æé©åO1ãèšå®ããå Žåãã€ã³ã¿ãŒã©ãããå ¥åããæéã¯ãŸãã«ãã®ãšããã§ãã ããã€ãã®èª¿æ»ã®åŸãO2ãŸãã¯O3æé©åããªã³ã«ãããšãã³ã³ãã€ã©ãŒãåœä»€ãåé 眮ããããšãããããŸããããã®ãããä¿¡å·ãã³ã¯ã€ã³ã¿ãŒã©ããã«å ¥ã£ãçŽåŸã§ã¯ãªããã³ãŒãã®äžéšãå®è¡ãããåŸã«1ã«èšå®ãããŸãã
ãããã£ãŠããªã·ãã¹ã³ãŒãã§O1ãæé©åãããšãã·ã¹ãã ãå²ã蟌ã¿ããã»ããµã«æ©ãå ¥ããŸãããããã®ããã»ããµã®å®è¡æéã¯O3ã®å Žåãããé·ãããšãããããŸãã