æ±æ¹VGS宿©çããããã²ãŒã æ©ãã£ãœãããŠã¿ãïŒåç·šïŒ
ååèšäºïŒäžèšïŒã§ç޹ä»ããæäœã®å人ããŒããŠã§ã¢ãæ±æ¹VGS宿©çãã§ãããããããããã²ãŒã æ©ãã£ãœãããããã®æ¹ä¿®ãé²ããŠã¿ãŸããã
æ±æ¹VGS宿©çã¯æ±æ¹VGSå°çšã®ããŒãã§ã¯ãªããæ°ããã²ãŒã æ©ãåµããã®ããŒã³ãã¿ã€ãã«ãšããŠæ±æ¹BGM on VGSãå®å šç§»æ€ãšããïŒãšãŠãé¢åãããïŒæèã§éçºããŠããŸãã
ååã®èšäºã§ãèšåããŠããŸããããªãªãŒã¹æç¹ã§ã¯æ±æ¹VGSã®ãã¡ãŒã ãŠã§ã¢å®è£ ã«å¿ èŠãªæå°éã®æ©èœããå®è£ ããŠããããç§ããããªã²ãŒã ãåµãããã«å¿ é ã ãšæã£ãŠãã以äžã®3ã€ã®æ©èœå®è£ ãçç¥ããŠããŸãã
ã²ãŒã åãã®ã°ã©ãã£ãã¯ã¹æç»æ©èœ
广é³ã®åç
ã²ãŒã ããã
çŸæç¹ã§ã¯ãæ±æ¹VGSã®ãã¡ãŒã ãŠã§ã¢ãå®è£ ããããã«æå°éå¿ èŠãªAPIããæäŸããŠããŸããããå°æ¥çã«ã¯ããã²ãŒã åãã®ã°ã©ãã£ãã¯æ©èœïŒILI9341ã«ç¹åããFCS80ã®VDPçžåœã®BG/Sprite衚瀺APIïŒããµãŠã³ãæ©èœã®åŒ·åïŒå¹æé³ã®åçãžã®å¯Ÿå¿ïŒãã²ãŒã ãããïŒãã¡ãã³ã³çžåœïŒã®å ¥åã€ã³ã¿ãã§ãŒã¹è¿œå ãªã©ãèšç»ããŠããŸãã
ãªããã²ãŒã ãããã«ã€ããŠã¯æ¬æžå·çæç¹ã§ãŸã 察å¿äžïŒéšåéããæè¡éžå®ã®éäžïŒãªã®ã§ããŸãã¯å®æããŠãã1ã2ã®è©³çްã«ã€ããŠææžåããŠã¿ãŸããã
1. ã²ãŒã åãã®ã°ã©ãã£ãã¯ã¹æç»æ©èœ
ã²ãŒã ã«é¢ä¿ããã³ã³ãã¥ãŒã¿ã»ã°ã©ãã£ãã¯ã¹ã®æç»æ©èœã¯ã倧å¥ãããšæ¬¡ã®3çš®é¡ã®ãã¯ãããžãŒãäž»æµãšããèªèã§ãã
ãã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒ
ããããããæ¹åŒ
ããªãŽã³æ¹åŒ
ãã¯ã¿ãŒã¹ãã£ã³æ¹åŒïŒ
ãã¿ãŸãããããåãããŸããã
ãªããäžè¿°ã®ãã¯ãããžãŒåºåã¯äŸ¿å®äžç§ãåæã«åœåãšåºåããããã®ãªã®ã§ãçŸæç¹ã®ã²ãŒã æ©é¢ä¿ã®è«æãªã©ã§ã¯èŠãããªããããããŸããã
ãã®ãããå ãã¯ïŒå°ãã ãé·ããªããŸããïŒåãã¯ãããžãŒã®å®çŸ©ãè«è¿°ããŸãã
(1) ãã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒ
ãªã·ãã¹ã³ãŒããTTLçãé€ãã°æãå€å žçãªæ¹åŒã®äžçš®ã§ãäŸãã°1976幎ã«çºå£²ãããApple Iã¯24è¡40åã®æåã衚瀺ã§ããŸãããããã®æ¹åŒã«åé¡ããããã®ãšèããããŸãã
ãã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒã«ã¯ãã¡ã¢ãªäžã«å°ãªããšããã¿ãŒã³ããŒãã«ãšããŒã ããŒãã«ãšåŒã°ãã2çš®é¡ã®é åãå¿ èŠã§ãã

ãã¿ãŒã³ããŒãã«: ãã£ã©ã¯ã¿ã®ç»åããŒã¿ïŒãããããã圢åŒïŒã®ã¬ã³ãŒããæã€ç·åœ¢æ§é ã®ããŒãã«
ããŒã ããŒãã«: ç»é¢ã«åºåãããã£ã©ã¯ã¿çªå·çã®å±æ§æ å ±ã¬ã³ãŒããæã€è¡åæ§é ã®ããŒãã«ïŒè¡åã®äœçœ®ïŒç»é¢äžã®è¡šç€ºäœçœ®ïŒ
ãªãããã£ã©ã¯ã¿ïŒæåïŒãã¿ãŒã³æ¹åŒã¯ãå ã ã¯ã°ã©ãã£ãã¯ã¹ã§ã¯ãªãããã¹ãã衚瀺ããçšéã®ãã®ã§ããã
ãã¿ãŒã³ããŒãã«ãRAM; Random Access MemoryïŒèªã¿æžãå¯èœãªã¡ã¢ãªïŒã§ã¯ãªãROM; Read Only MemoryïŒèªã¿åãå°çšã¡ã¢ãªïŒã«ãããããªã»ããããããã£ã©ã¯ã¿ïŒæåïŒã®ã¿è¡šç€ºã§ããã³ã³ãã¥ãŒã¿ãååšããŸããïŒPC-98ãªã©ïŒ
ãªããPC-98ã§ã¯ããã¹ãç»é¢ã䜿ã£ãŠé«éãªããŒã¬ãŸã»ã°ã©ãã£ãã¯ã¹è¡šçŸãå¯èœã§ãããã䜿ã£ãäŸå€çãªã²ãŒã ã幟ã€ãååšããŸããïŒèŠªç¶çãªã©ïŒ
ãŸããå€åæ©èœãé§äœ¿ããŠããã¹ãç»é¢ã§é«ç²ŸåºŠãªã°ã©ãã£ãã¯ã¹ãæç»ãã倿 ïŒâ»è€ãèšèïŒãå± ããããããŸããã
ããããPC-98ã®ãã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒã®ç»é¢è¡šç€ºæ©èœã¯åºæ¬çã«ã¯ããã¹ãã衚瀺ããããã®ãã®ã§ãã°ã©ãã£ãã¯ã¹ã¯åŸè¿°ããããããããæ¹åŒã§è¡šç€ºããã®ãäžè¬çã§ãã
äžæ¹ããã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒãã¡ã€ã³ã®ã°ã©ãã£ãã¯ã¹æç»æ©èœãšããŠäœ¿çšãããã£ã¹ãã¬ã€ICããããååšããŸããã
ïŒTMS9918ã·ãªãŒãºïŒ
1979幎ã«çºå£²ããããããµã¹ã»ã€ã³ã¹ãã«ã¡ã³ã瀟補ã®ããŒã ã³ã³ãã¥ãŒã¿TI-99/4ã«æèŒãããVDP; Video Display ProcessorãTMS9918ãã¯ããã¿ãŒã³ããŒãã«ãVDPå éšã«æèŒãããRAMé åïŒVRAM; Video RAMïŒã«ãããèªç±ã«æããããã£ã©ã¯ã¿ãã¿ãŒã³ãããŒã ããŒãã«ã§ã¿ã€ã«ãã¿ãŒã³ã®ããã«äžŠã¹ãããšã§ã°ã©ãã£ãã¯ã¹ã衚瀺ããããšãã§ããŸããã
TI-99/4ã¯ããŸã売ããªãã£ããã®ã®ã1981幎ã«çºå£²ãããåŸç¶æ©ãTI-99/4Aãã¯å€§ãããããTI-99/4Aã«æèŒãããVDPãTMS9918Aãã¯åŸã«æ§ã ãªã²ãŒã æ©çãžæ¡çšãããŸããã
æ¥æ¬ã§ã¯1983幎ã«çºå£²ãããSG-1000ïŒã»ã¬ïŒãMSXïŒASCIIã»MicrosoftïŒãªã©ã§æ¡çšãããŠããŸãã
1985幎ã«ç»å ŽããSG-1000ãšMSXã®åŸç¶æ©ïŒã»ã¬ããŒã¯IIIãšMSX2ïŒã§ã¯ãTMS9918Aã®æè¡ãåºç€ã«ãã€ã€é²åããVDPãæèŒãããŠããŸãããã²ãŒã æ©ã§ããã»ã¬ããŒã¯IIIã¯ãã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒã®ã¿ã匷åããã²ãŒã æ©ã§ã¯ãªãMSX2ã¯äž»ã«ããããããæ¹åŒã匷åããç°ãªãé²åç³»èã蟿ãããšã«ãªããŸãã

ãã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒã¯ãåœæã®ã²ãŒã æ©ã®ã°ã©ãã£ãã¯ã¹æç»æ¹åŒã®è±åœ¢ã§ããã
ïŒTMS9918Aã®ç¹åŸŽïŒ
TMS9918Aã¯ãTMS9918ã«MODE2ãšåŒã°ããç»é¢ã¢ãŒããæ°ãã«è¿œå ãããMODE2ã§ã¯å šç»é¢ïŒ256x192ãã¯ã»ã«ïŒã«ç°ãªã8x8ãã¯ã»ã«ã®ãã£ã©ã¯ã¿ãã¿ãŒã³ã衚瀺ã§ããŸããã
SG-1000ãMSXåãã®åžè²©ã²ãŒã ã®å€§åã¯MODE2ã䜿ãããŠããŸããïŒããããå人çã«ã¯ç»é¢ã3åå²ããå¿ èŠãããMODE2ããããã·ã³ãã«ãªMODE0ã®æ¹ãã²ãŒã ãäœããããæ°ãããŸãïŒ
TMS9918Aã®MODE2ïŒãŸãã¯MODE0ïŒã§ã¯ã4KBãŸãã¯16KBã®VRAMã®ç¹å®ç¯å²ã«ãã¿ãŒã³ããŒãã«ã«çžåœãããã¿ãŒã³ãŒãã¬ãŒã¿ãŒãããŒã ããŒãã«ãªã©ïŒâ»ãã®ä»ã«ãè²ã ãªããŒãã«ããããŸãã岿ïŒãé 眮ããããšãã§ããæŽã«åè²ã®ã¹ãã©ã€ãã衚瀺ããããšãã§ããŸãããïŒã¹ãã©ã€ãã«ã€ããŠã¯åŸã»ã©è©³è¿°ããŸãïŒ
ïŒãã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒã®çè¡°ïŒ
ãã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒãã²ãŒã æ©ã®ã«ããŽãªã§èŠæš©ãåã£ãåå ãšããŠã¯ããã€ãªãã¢çãªååšã ã£ãTMS9918ã·ãªãŒãºã®ååšã倧ããã£ããšæãããŸããã1983幎ã«çºå£²ãããã¡ããªãŒã³ã³ãã¥ãŒã¿ïŒä»»å€©å ïŒã®åœ±é¿ãæŽã«å€§ããã£ãããã«æãããŸãã
ãã¡ãã³ã³ã®VDPã«çžåœããPPU; Picture Processing UnitãRP2C02ãã¯ãTMS9918ãšã¯å šãç°ãªãã¢ãŒããã¯ãã£ã§ãããã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒã«ã®ã¿ç¹åããŠããŸãã
RP2C02ã§ã¯ã4è²ã®ã«ã©ãã«ãªãã£ã©ã¯ã¿ãã¿ãŒã³ã衚瀺ã§ããå šæ¹åã®ã¹ã ãŒã¹ãªããŒããŠã§ã¢ã¹ã¯ããŒã«ãã§ãã2ç»é¢åã®åºå€§ãªããŒã ããŒãã«ãæšæºã§äœ¿çšããããšãã§ããæŽã«ã«ã©ãã«ãªã¹ãã©ã€ãïŒéæè²ãå«ããŠ4è²ïŒã衚瀺ã§ããŸããã
ãããã®ç¹åŸŽã¯1983å¹Žåœæ2幎èœã¡ã®ãã¯ãããžãŒã ã£ãTMS9918Aã®æ§èœãå§åçã«åé§ããŠããŸãã
ãã¡ãã³ã³ã®PPUã«é¢ãã詳现ã¯ä»¥äžã®èšäºã詳ãããããããŸããã
1985幎ã«ç»å Žããã»ã¬ããŒã¯IIIã®VDPïŒ315-5124ïŒã¯ãMODE4ãšåŒã°ããæ°ããªç»é¢ã¢ãŒãã远å ãããŠãããæšæºïŒããããŒ0ïŒã®ãã¡ãã³ã³ã®ããŒããŠã§ã¢æ§èœãäžåããŸãã
315-5124ã«ã€ããŠã¯ä»¥äžã®èšäºã詳ãããããããŸãããïŒâ»ã²ãŒã ã®ã¢ã«ã¯ã»ã¬ããŒã¯IIIã®VDPãšã»ãŒåããã®ãæèŒãããŠããŸãïŒ
1989幎ã«çºå£²ãããã»ã¬ããŒã¯IIIã®æ¬¡äžä»£æ©ãã¡ã¬ãã©ã€ããã1990幎ã«çºå£²ããããã¡ãã³ã³ã®æ¬¡äžä»£æ©ãã¹ãŒããŒãã¡ãã³ã³ãã§ãããã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒãæŽã«åŒ·åãããVDPãæèŒãããŸããã
åœæãæ°žé ã«ç¶ããã®ããã«æããããã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒã®ç¹æ ã¯ããã¬ã€ã¹ããŒã·ã§ã³ãç»å Žãã1994幎æ«ããã«åŽ©å£ããããšã«ãªããŸãã
å¥ããã厩å£ã®è¶³é³ãè¿«ã1994幎åé ãããã°ã©ããšããŠã®ãã£ãªã¢ãã¹ã¿ãŒããããç§ïŒâ»äžåŠ1幎çïŒã¯PC-9801ãšããããœã³ã³ããæã£ãŠãããããŸãã§ãã¡ãã³ã³ã®ãããªã°ã©ãã£ãã¯ã¹è¡šçŸãç°¡åã«ã§ããMSXãX68000çã®æçš¿ããã°ã©ã ïŒâ»ãã€ã³ã³BASICãã¬ãžã³æ²èŒïŒã®ã¹ã¯ãªãŒã³ã·ã§ããã矚æã®çŒå·®ãã§çºããŠããããšãæªã ã«èŠããŠããŸãã
ãªãããæã£ãŠããããšãã衚çŸã«ã¯è¥å¹²èªåŒããããæ£ç¢ºã«ã¯ããœã³ã³éšã«å ¥ã£ãŠåŠæ ¡ã®PC-9801ã䜿ã£ãŠæ¯æ¥ã®ããã«ã²ãŒã ãäœã£ãŠéãã§ããŸããã
åŸã«èŠªãPC-9821ïŒCanBeeïŒãè²·ã£ãŠãããã®ã§ãæ¥å€ãåããããã°ã©ãã³ã°æŒ¬ãã®ç掻ãéãããšãã§ããã®ã§ããããã®æã«ã¯ãã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒã®ã³ã³ãã¥ãŒã¿ã¯ã»ãŒå¹»æ³å ¥ãããŠãããããçµããã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒã§ã²ãŒã ã»ããã°ã©ãã³ã°ã§ããæ©äŒã¯ç¡ãããã£ãšæ§ãã®ååšã®ãŸãŸä»ã«è³ããŸãã
ãã¡ããããšãã¥ã¬ãŒã¿ã®æè¡ãçºéããæšä»ã§ã¯ãæã®ããŒãåãã®ããã°ã©ã ãç°¡åã«æžããŠåããããšãªãã§ããŸãããå°ãªããšããã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒãå ¬åŒæ¡çšããããŒãªãã·ã¥ãªææ°ã®ã²ãŒã æ©ãç»å Žããããšã¯åžžèã§ã¯èããããŸããã
ïŒãã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒã®å©ç¹ïŒ
ãã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒã«ã¯ãå°ãªããŠãŒã¶ããã°ã©ã ã®åŠçéã§å€ãã®ç»é¢æŽæ°ãã§ããã¡ãªããããããäŸãã°ããŒã ããŒãã«ã1ãã€ãæŽæ°ããã ãã§8x8ãã¯ã»ã«ïŒ64ãã¯ã»ã«ïŒåã®ã°ã©ãã£ãã¯ã¹ãäžæ°ã«æŽæ°ã§ããããšã«ãªããŸãã
ïŒãã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒã®åŒ±ç¹ïŒ
ãã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒã«ã¯ãVRAMã®ã¡ã¢ãªã»ã¬ã€ã¢ãŠããè€éãªæ§é ïŒè€æ°ã®ããŒãã«ãæã€åœ¢ïŒã«ãªããã¡ãªãããããããã®åœ±é¿ã§ãã£ã¹ãã¬ã€ICãããã®æ§é ãè€éã«ãªã£ãŠããŸãïŒéšåç¹æ°ãå€ããªã£ãŠããŸãïŒãããéç£æã«ã³ã¹ãé¢ã§äžå©ã«ãªããŸãã
ãã®ãããè¿å¹Žã®ã²ãŒã æ©ïŒã«éããã³ã³ãã¥ãŒã¿å šè¬ïŒã®ãã£ã¹ãã¬ã€ICãããã«ã¯é«ã³ã¹ããªãã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒã¯å®è£ ããããã·ã³ãã«ïŒäœã³ã¹ããªããããããæ¹åŒïŒåŸè¿°ïŒã®ã¿å®è£ ãããŠããããã§ãã
å®éãæ±æ¹VGS宿©çãæ¡çšããŠãããã£ã¹ãã¬ã€ICãããïŒILI9341ïŒããããŒã¿ã·ãŒããèŠãéãããããããæ¹åŒããå®è£ ãããŠããŸããã
ãã ãããŠãŒã¶ããã°ã©ã ãã·ã³ãã«ã«ãªãã¡ãªããã¯æçšãªãããOSãªã©ã®åºæ¬ãœãããŠã§ã¢ããã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒã®VDPãã·ãã¥ã¬ãŒãããæ©èœãšã€ã³ã¿ãã§ãŒã¹ïŒAPI; Application Program InterfaceïŒãæäŸããŠããããããŠãŒã¶ãŒããã°ã©ã 㯠printf 颿°ãå®è¡ããã ãã§ç°¡åã« Hello, World! ãšããæååãç»é¢ã«è¡šç€ºããããšãã§ããŸãã
(2) ããããããæ¹åŒ
ããããããæ¹åŒã¯ããããªã¡ã¢ãªïŒVRAMïŒãç»é¢ã®ç»çŽ ïŒãã¯ã»ã«ïŒã«å¯Ÿå¿ããã¡ã¢ãªã¬ã€ã¢ãŠãã«ãªã£ãŠããç»é¢è¡šç€ºæ¹åŒã§ãã

ãã®æ¹åŒã«ã¯ãVRAMã®ã¬ã€ã¢ãŠããã·ã³ãã«ã«ãªãã¡ãªãããããäžæ¹ããã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒãšæ¯ã¹ããšç»é¢æŽæ°ã«æãããŠãŒã¶ããã°ã©ã ã®åŠçéïŒâVRAMæŽæ°åæ°ïŒãå€ããªããã¡ãªããããããŸãã
åç¯ã§ç€ºãããã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒïŒ1ãã£ã©ã¯ã¿8x8ãã¯ã»ã«ïŒã§ã¯ã1ãã€ãã®VRAMïŒããŒã ããŒãã«ïŒã®æŽæ°ã§64ãã¯ã»ã«åã®ç»é¢è¡šç€ºãæŽæ°ã§ããŸãããã1ãã¯ã»ã«1ãã€ãã®ããããããæ¹åŒã®ãã£ã¹ãã¬ã€ICã§åãç»é¢æŽæ°ãè¡ãã«ã¯64ãã€ãã®VRAMïŒããããããïŒã®æŽæ°ãå¿ èŠã«ãªããŸãã
ãªããPC-8801ã®ã«ã©ãŒã°ã©ãã£ãã¯ã¹ç»é¢ã¯ããããããæ¹åŒã§ãããæšª8ãã¯ã»ã«ã1ãã€ããšãã1ç»é¢ïŒ640x200ãã¯ã»ã«ïŒåã®VRAMãè²çŽ ïŒRGBïŒæ¯ã«3æãã圢ïŒã€ãŸãã1ãã¯ã»ã«3ãããïŒã«ãªã£ãŠããã®ã§ã8x8ãã¯ã»ã«ã®ç©åœ¢æŽæ°ãè¡ãã®ã«å¿ èŠãªVRAMã®æŽæ°ãµã€ãºã¯24ãã€ãïŒ1ãã€ãÃ瞊8è¡Ã3VRAMïŒã§ãPC-98ã®16è²ã¢ãŒãã§ã¯æŽã«ãã1æè²çŽ VRAMã远å ãããŠ1ãã¯ã»ã«4ããããªã®ã§32ãã€ãã®æŽæ°ãå¿ èŠã§ãã
ããããããæ¹åŒã®ã¡ã¢ãªã¬ã€ã¢ãŠãã¯åºæ¬çã«ã¯ã·ã³ãã«ã§ãããè²ã8ã®åæ°ãããïŒãã€ãïŒåäœã§ãªãå Žåãããã°ã©ã ã§ã®æ±ããã·ã³ãã«ã§ã¯ãªãé¢åïŒè€éïŒã«ãªãåŸåããããŸãã
ILI9341ã®ããŒã¿ã·ãŒããèŠããš18ãããã«ã©ãŒïŒRGB666ïŒãæ±ããããã§ããã18ãããã ãšããã°ã©ã ã§æ±ãã«ãããããèµ€ïŒRïŒãšéïŒBïŒã®è²çŽ ãããã1ãããã¥ã€åã£ã16ãããã«ã©ãŒïŒRGB565ïŒãäž»ã«äœ¿ãããŠããŸãã
(3) ããªãŽã³æ¹åŒ
ããªãŽã³ãšã¯ã座æšã«å¥¥è¡ãïŒZ座æšïŒã®æŠå¿µãå ããäžæ¬¡å 座æšç³»ïŒXYZïŒã®äžè§åœ¢ãåæ°ããè€æ°æç»ããããšã§ãç䌌3Dã®æ åã2Dç»é¢ã«è¡šç€ºãããã¯ãããžãŒã§ãã
äžè¬çã«ã¯äžè§åœ¢1ã€ïŒ1ããªãŽã³ãšããåäœã§è¡šããç©åœ¢ïŒåè§åœ¢ïŒã衚瀺ããã«ã¯2ããªãŽã³å¿ èŠã§ãã
ãã ããã»ã¬ãµã¿ãŒã³ã®å Žåã¯ã¹ãã©ã€ãïŒç©åœ¢ïŒãå€åœ¢ãããŠããªãŽã³ã衚çŸããŠãããããç©åœ¢1ã€ïŒ1ããªãŽã³ã ãšèããããŸããããã®æ¹åŒã¯æ®å¿µãªããäžè¬åãããªãã£ãããã§ããïŒå人çã«ã¯ãµã¿ãŒã³æ¹åŒã®ããªãŽã³ã®æ¹ãçŽæçã§æ±ãããããšæããŸãïŒ
ããªãŽã³ã®è¡šé¢ã«ç©åœ¢ã®ç»åã貌ãä»ããããšïŒãã¯ã¹ãã£ãããã³ã°ïŒãã§ããããã2ããªãŽã³+ãã¯ã¹ãã£ãããã³ã°ã«ãã2Dã®ãã£ã©ã¯ã¿ãã¿ãŒã³ã衚瀺ããããšãã§ããé ç¹åº§æšãæŽæ°ããããšã§æ¡å€§çž®å°ãå転ãå€åœ¢ãªã©ãèªç±èªåšã«è¡ãããšãã§ããŸãã
æ°åäžãæ°åãšãã£ãèšå€§ãªæ°ã®ããªãŽã³ãçšããããšã§ãªã¢ã«ãªç䌌3D空éãåçŸã§ããã¡ãªãããããäžæ¹ããšãŠã€ããªãèšå€§ãªéã®èšç®ãå¿ èŠã«ãªããã¡ãªããããããŸãã
ããªãŽã³æ¹åŒã«ã¯ããã®ãã¡ãªããã®åœ±é¿ã§ãæç»æ§èœããšãæ¶è²»ãšãã«ã®ãŒããšãã2ã€ã®å€§ããªèª²é¡ããããŸãã
ããªãŽã³æ¹åŒã®æç»æ§èœé¢ã®èª²é¡è§£æ±ºã®ããã衚瀺ã«å¿ èŠãªèšç®ïŒäž»ã«è¡åæŒç®ïŒãé«éã«è¡ãããšã«ç¹åããGPU; Graphics Processing UnitãšåŒã°ããICãããïŒNVIDIAã®GeForceã·ãªãŒãºçïŒãé²åããããšã«ãªããŸããã
GPUã®é²åã¯ãäžå®ã®åéã§ã¹ãŒããŒã³ã³ãã¥ãŒã¿ã®ããããã¹ïŒåäœæéã§ã®æµ®åå°æ°ç¹æ°ã®èšç®éãç€ºãæ§èœææšïŒãåŒãäžããããšã«ã圹ç«ã¡ãäž»ã«èšå€§ãªéã®è¡åæŒç®ãå¿ èŠãšããæ·±å±€åŠç¿ïŒãã£ãŒãã©ãŒãã³ã°ïŒãšåŒã°ããç¹åŸŽæœåºã¢ã«ãŽãªãºã ïŒChatGPTãªã©ã§äœ¿ãããŠãããã¯ãããžãŒïŒã®åéãªã©ã«è²¢ç®ããŠããããã§ãã
ããããèšå€§ãªéã®èšç®ãå®è¡ããã«ã¯åœç¶ãªããå€ãã®ãšãã«ã®ãŒãå¿ èŠã«ãªããããèšå€§ãªé»åæ¶è²»ãšå·åŽèšåãå¿ èŠã«ãªãããšã§ã極ããŠå€§ããªç°å¢è² è·ãæãã課é¡ããããŸãã
ãã¡ãããç°å¢è² è·ã®èª²é¡ã¯GPUã¹ãã³ã³ã«éã£ã話ã§ã¯ãªããã·ã³ãã«ã«ãããããèšç®ããã«ã¯ãããããšãã«ã®ãŒãå¿ èŠããšããããšã§ããã®èª²é¡ã解決ããç ç©¶ãçãã«è¡ãããŠããããã§ãïŒåèïŒããçŸç¶ã§ã¯å¯å²³ã1æéåäœãããã®ã«4人äžåž¯å®¶åºã®æ¶è²»é»åã®çŽ75ã¶æåçšåºŠã®é»åãå¿ èŠã«ãªãïŒåèïŒãããã§ãã
ã¹ãã³ã³ãè§Šã£ãçµéšããã人ã¯ããªãéãããïŒç§ãè§Šã£ãããšããªãïŒããã€ã¡ãŒãžãé£ãã®ã§ãããã¹ããã§ã²ãŒã ããã¬ã€ãããšåãŸããå¢ãã§ããããªãŒæ®éãæžãã端æ«ããããã«ã€ãã®ããã«ç±ããªãã¢ã¬ïŒãäœäžåãã®ã¹ã±ãŒã«ã«ãªã£ããã®ïŒïŒã¿ãããªæãã ãšæãããŸãã
çŸä»£ã®ã³ã³ãã¥ãŒã¿ã®ãããã»ããã«ã¯åœç¶ã®ããã«GPUãæèŒãããããã«ãªã£ããããããªãŽã³æ¹åŒãæãããã¥ã©ãŒãªã²ãŒã ã®ã°ã©ãã£ãã¯ã¹æç»æ¹åŒã®å°äœãç²ã£ããšèšãããããããŸããã
ããªãŽã³ã®æ£ç¢ºãªçè§£ã«ã¯é«åºŠãªæ°åŠç¥èãå¿ èŠïŒâåŠç¿ã³ã¹ããé«ãïŒãšããé£ç¹ããããŸãããããã®èª²é¡ã¯éçºããŒã«ïŒSDK; Software Development KitïŒãå æããŠããããã§ãã
ãã€ãŠãUnityãšåŒã°ããSDKãæµè¡ã£ãŠããææããããUnityãçšããã°3Dã«é¢ããæ°åŠç¥èããŒãã®äººã§ãç°¡åã«3Dã®ã²ãŒã ãäœãããšãã§ããŸãããïŒçŸåšã®äž»æµã¯Unreal EngineïŒïŒ
FlashãUnityãªã©ã®ã¯ããŒãºãã§äžèªç±ãªSDKã«äŸåããã®ã¯ãšãŠããªã¹ããŒãªã®ã§ã3Dã²ãŒã ãåµãããã£ããå¿ èŠãªæ°åŠç¥èãç¿åŸããŠãã£ãšãªãŒãã³ã§èªç±ãªSDKïŒOpenGLãšãïŒïŒã䜿ãã¹ãâŠ
âŠãªã©ãšã3Dã®ã²ãŒã ã«å šãæãå ¥ããç¡ãã3Dããã°ã©ãã³ã°ã®ç¿åŸãæåºãšããŠæåŠããŠããç§ãåããã«èšã£ãŠã説åŸåãç¡ããããããŸãããïŒåçŽã«3Dã¯é ãããå«ãïŒ
ã3Dãªã©ããã¬ãšã3Dãæ¥µããŠããèšããâŠ!ã
ãšèšãããã°è¿ãèšèããããŸããã
ããªãŽã³æ¹åŒ = æé€
ãªãªãŒã¹åœåã®æ±æ¹VGS宿©çã®SDKïŒvgssdk-picoïŒãæäŸããã°ã©ãã£ãã¯ã¹æç»æ©èœïŒVGS::GFXïŒã¯ãããããããæ¹åŒã®ã¿ã§ããã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒãšããªãŽã³æ¹åŒãçç¥ããŠããŸãã
ããªãŽã³æ¹åŒã¯æå³çã«çç¥ïŒæé€ïŒããŸããã
ããªãŽã³æ¹åŒã«å¯Ÿå¿ããæ¹ãåµããã²ãŒã ã®å¹ ãåºããã®ã¯ééããªããšæããŸãããããªãŽã³ãç¡ããã°ã²ãŒã ãåµããªãèš³ã§ã¯ãªãã®ã§äžèŠããªïŒãšããããšã§ã
ãã¡ãããã³ã¹ãé¢ã®éœåãšããåççãªäºæ ããããŸãã
ãã ããããªãŽã³ãžã®æ ç±ãããã°åçæ§ãªã©ã¬ã³ç¡èŠããŠæ¡çšãããšæãã®ã§ãçµå±ã®ãšããã¯å¥œã¿ã®åé¡ã ãšæãããŸããïŒãããããå人ã§ã²ãŒã æ©ãåµãããšããçºæ³ãéåçã®å¡ã§ããïŒ
ãã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒ = æ¡çš
äžæ¹ããã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒã®ã¡ãªããã¯ãåŠçæ§èœãäœãRP2040ã§ã²ãŒã ãéçºããå¿ èŠãããæ±æ¹VGS宿©çã«ã¯å¿ é ã ãšèããããŸãã
ã§ãããäœããç§ã«ã¯ãã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒãžã®æ ç±ãããã®ã§ãåçæ§äºã ã«é¢ä¿ç¡ãã³ã¬ãå€ãããšã¯äžå¯èœã§ãã
ãã ãããã®ããã«å°çšã®ICãããïŒVDP; Video Display ProcessorïŒã远å ããããšã¯ïŒæ±æ¹VGS宿©çã§ã¯ïŒåºæ¥ãªãã®ã§ãVDPããšãã¥ã¬ãŒã·ã§ã³ãããã®ãvgssdk-picoã«æèŒããããšã«ããŸããã
ãã¡ãããå°çšICããããèªåã§äœãæ¹ãïŒå®çšæ§ã¯ããŠããïŒããã³ããããšæããŸãããVGSã¯éç£åãããŠããŠæµééãå€ãïŒå®äŸ¡ã«èª¿éãã§ããïŒæ¢æã®ICãããã®ã¿äœ¿ãæ¹éã§ãã
ã§ããäžå¿ãASICãFPGAãCPLDãªã©ã§ICãããåããããèšèšã«ããŠã¿ãã€ããã§ãã
ç§ã¯ãã£ã¡æ¹é¢ã¯å®å šã«å°éå€ãªã®ã§ãå®éã«ICãããåããããã®ãã¯å®ãã§ã¯ãããŸããããéå»ã«å¹Ÿã€ãã®ã²ãŒã æ©ãšãã¥ã¬ãŒã¿ãäœã£ãŠã¿ãæã®ç¥èŠãåºç€ã«èšèšããŠããã®ã§ãæãã倧äžå€«ããªïŒããšæ³åããŠãŸãã
VGS::VDPã®èšèšææ³
VGS::VDPã®èšèšææ³ã¯ã¡ã¬ãã©ã€ãã®VDPã«å¯ããŠã¿ãã€ããã§ãã
ãã¡ãããå®å šã«åããã®ã«ããã®ã§ã¯ãªããRP2040ã§é©åºŠãªããã©ãŒãã³ã¹ãšæé©ãªãœãããŠã§ã¢çç£æ§ãåŸãããããã«ãã芳ç¹ã§ãŒãããèšèšããŸãããïŒARMã®CPUã6502ã«ã€ã³ã¹ãã€ã¢ãããŠäœããããšãã話ãã©ããã§èããããšããããŸãããæèãšããŠã¯ã ããããããšåãã ãšæãããŸãïŒ
ãŸããåŸæ¥ã®ããããããæ¹åŒã®ã°ã©ãã£ãã¯ã¹æ©èœïŒVGS::GFXïŒã眮ãæããã®ã§ã¯ãªãããããšå ±åãã圢ã§ãã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒã®VDPãšãã¥ã¬ãŒã¿ïŒVGS::VDPïŒãæ°èšããŠããŸãã
VGS::GFXã¯MSX2ã®ã³ãã³ãïŒV9938ã®æ©èœïŒã«è¿ããã®ãããã®ã§MSX2çžåœã®ããœã³ã³çãªã°ã©ãã£ãã¯è¡šçŸãã§ãã€ã€ãVGS::VDPã§ã¡ã¬ãã©ã€ãã®ãããªã²ãŒã çãªã°ã©ãã£ãã¯è¡šçŸãå¯èœâŠãšããäœãšãå¥åŠãªã²ãŒã æ©ã«ãªããŸããã
æ±æ¹VGS宿©çã®SDKã«ã²ãŒã æ©ã£ãœãVDPãå®è£ äžã
â SUZUKI PLAN (@suzukiplan) October 10, 2023
8x8ã®ã¹ãã©ã€ããæå€§256åæç»ã§ããBGã®ã¹ã ãŒã¹ã¹ã¯ããŒã«ãå¯èœã§ãããé åãµã€ãº192x240ãã¯ã»ã«ã ãš21fpsãããïŒé åãµã€ãºãã²ãŒã ã®ã¢çžåœã«ããã°43fpsãããïŒ
åç»ã¯ä»¥äžURLã®ãœãŒã¹ãåããããã®https://t.co/JXpY03lxXQ pic.twitter.com/QiMZHV5nPM
æ¬åœã¯ç»é¢ãã£ã±ãã®ãµã€ãºïŒ240x320ãã¯ã»ã«ïŒã§VGS::VDPã®ç»é¢ã衚瀺ã§ããããã«ãããã£ãã®ã§ãããããŒããŠã§ã¢ã®å¶çŽïŒRP2040ã®åŠçæ§èœãšã¡ã¢ãªãµã€ãºã®å¶çŽïŒã®é¢ä¿ã§ãæå€§ã§ã192x240ãã¯ã»ã«ïŒäžå³èµ€æ ã®ç¯å²ïŒã§20fpsçšåºŠã®æ§èœãéçã§ããã

ïŒ192x240ãã¯ã»ã«ïŒ
ãªããVGS::VDPã®ä»æ§èªäœããªããã¬ãã·ãã«ãªèšèšã«ããŠãããã®ã§ããã£ãšé«æ§èœãªSoCã䜿ãã°å šç»é¢ã§è¡šç€ºããã60fpsã«ããããšãå¯èœã§ããïŒVGS-Zeroã®åžç³ïŒ
ã²ãŒã ã®ã¡ã€ã³ç»é¢ïŒåçãªéšåïŒã¯VGS::VDPã§æç»ãã€ã€ãã¹ã³ã¢è¡šç€ºãã¹ããŒã¿ã¹æ å ±ãªã©ïŒã»ãŒéçãªéšåïŒã¯VGS::GFXã§æç»ãããããªäœ¿ãæ¹ãæ³å®ããŠããŸãã
VGS::VDPã®VRAM
VGS::VDPã®VRAMã«ã¯ãå è¿°ã®ã(1) ãã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒãã§è§£èª¬ãããã¿ãŒã³ããŒãã«ïŒptnïŒãšããŒã ããŒãã«ïŒbgïŒã®ä»ã«ãscrollXãscrollYãoamãšããè¬ã®é åããããŸãã

èŠã人ãèŠãã°å šç¶è¬ã§ã¯ãªãïŒååã ãã§æ©èœãã€ã¡ãŒãžã§ãããã®ïŒãšæãããŸããã
ã¹ã¯ããŒã«ïŒscrollX, scrollYïŒ
VGS::VDPã®ç»é¢ãµã€ãºã¯ãå è¿°ã®éãæå€§192x240ãã¯ã»ã«ïŒå¹ Ãé«ãÃ2âŠ90KBïŒãšãã仿§ã§ãããããŒã ããŒãã«ã¯ãã¯ã»ã«æç®ãããš512x512ãã¯ã»ã«ã§ãã
ã€ãŸããããŒã ããŒãã«ã衚瀺ç»é¢ã®äžéãããããªãåºå€§ãªãµã€ãºã«ãªã£ãŠããŸãããããã¯èšèšãã¹ã§ã¯ãããŸããã
scrollXãšscrollYã§ããŒã ããŒãã«äžã®æç»éå§åºç¹ãæå®ã§ããŸãã

äŸãã°ãscrollXã»scrollYã®å ç®ã»æžç®ãšã¬ã³ããªã³ã°ãã«ãŒããããããšã§8æ¹åã®ã¹ã ãŒã¹ãªã¹ã¯ããŒã«ãããããšãå¯èœã§ãã
ãŸããç¯å²å€åº§æšã®æç»ã¯ã«ãŒããã仿§ã§ãã

ããã¯ãå žåçãªã²ãŒã æ©ã«æèŒãããŠããVDPïŒãã¡ãã³ã³ã®PPUãã¹ãŒããŒãã¡ãã³ã³ã®S-PPUãã»ã¬ããŒã¯IIIã®MODE4ãã¡ã¬ãã©ã€ãã®MODE5ãªã©ïŒã«æèŒãããŠããããŒããŠã§ã¢ã¹ã¯ããŒã«æ©èœãšã»ãŒåã仿§ã§ãã
ãã ããã¹ãã©ã€ãã®æç»åŠçãåçŽåïŒé«éåïŒãããã£ãé¢ä¿ã§H-SYNCå²ã蟌ã¿ïŒç¹å®ã®ã¹ãã£ã³ã©ã€ã³äœçœ®ã§çºçãããå²ã蟌ã¿ïŒããµããŒãããŠããªããããã©ã¹ã¿ã¹ã¯ããŒã«ã掻çšããç䌌3Dã¬ãŒã·ã³ã°ã²ãŒã çã®å®è£ ã¯VGS::VDPã§ã¯å°é£ãããããŸããã
ã¹ãã©ã€ãïŒoamïŒ
OAMïŒObject Attribute MemoryïŒãšã¯ãã¹ãã©ã€ãã®ã¬ã³ãŒãæ å ±ãæ ŒçŽããæ§é äœã§ãVGS::VDPã®OAMã«ã¯åº§æšïŒX, YïŒããã¿ãŒã³çªå·ããŠãŒã¶æ å ±ã®3çš®é¡ã®å±æ§ããããŸãã

ã¹ãã©ã€ããšã¯ãä»»æã®ãã£ã©ã¯ã¿ãã¿ãŒã³ïŒâ»VGS::VDPã®å Žåã¯BGã®ãã£ã©ã¯ã¿ãã¿ãŒã³ãšå ±çšïŒãä»»æã®åº§æšãžåçã«è¡šç€ºã§ããæ©èœã§ãäž»ã«ã²ãŒã ã®ãã£ã©ã¯ã¿æç»ã«äœ¿ãããŸãã
VGS::VDPãæäŸããã¹ãã©ã€ãæ©èœã¯ãå žåçãªã²ãŒã æ©ãæäŸããã¹ãã©ã€ãæ©èœãšæŠãåã仿§ã§ãã
å žåçãªã²ãŒã æ©ã®ã¹ãã©ã€ãæ©èœãšã®éã
è¡šç€ºå±æ§
ã¹ãŒããŒãã¡ãã³ã³ãã¡ã¬CDã®ã¹ãã©ã€ãã«ã¯æ¡å€§çž®å°ãå転ãåéæãªã©ã®æ©èœãããã®ã«å¯ŸããVGS::VDPã®ã¹ãã©ã€ãã«ã¯ãããããããŸãããïŒã¡ã¬ãã©ã€ãã®ã¹ãã©ã€ãçžåœïŒ
å žåçãªã²ãŒã æ©ã®VDPã§ã¯è¡šç€ºå±æ§ã§visible/hiddenãæå®ãã仿§ã«ãªã£ãŠããŸãããVGS::VDPã®å Žåã¯ãã¿ãŒã³çªå·ã«0ïŒ0x00ïŒãæå®ãããšé衚瀺ïŒãã¿ãŒã³çªå·0ã¯ã¹ãã©ã€ããšããŠå©çšäžå¯ïŒãšãã仿§ã«ãªã£ãŠããŸãã
æ°Žå¹³äžé
å žåçãªã²ãŒã æ©ã®VDPã®ã¹ãã©ã€ãæ©èœã«ã¯æ°Žå¹³äžéãšããããŒããŠã§ã¢äžã®å¶çŽãããããã¡ãã³ã³ãªãã¹ãã£ã³ã©ã€ã³æ¯ïŒæ°Žå¹³æ¹åïŒã«æå€§8æïŒâ»ã¹ãŒããŒãã¡ãã³ã³ãªã32æãã¡ã¬ãã©ã€ããªã20æïŒãŸã§ããã¹ãã©ã€ããæç»ã§ãããæ°Žå¹³äžéãè¶ ããåªå 床ãäœãã¹ãã©ã€ãã¯æç»ãçç¥ãããç¹åŸŽããããŸãã
VGS::VDPã®ã¹ãã©ã€ãã«ã¯æ°Žå¹³äžéãç¡ãïŒâ»ç¡ãæ¹ãé«éã«æç»ã§ããïŒããã256å䞊ã¹ãŠæç»ããŠããã©ã€ããŸããã
è²æ°
ãã£ã©ã¯ã¿ãã¿ãŒã³ã«æå®ã§ããè²æ°ã¯éæè²ãå«ããŠæå€§65,536è²ïŒã¹ãŒããŒãã¡ãã³ã³ãã¡ã¬ãã©ã€ãã¯ãã¬ããæ¹åŒã§ã1æã®ãã£ã©ã¯ã¿ãã¿ãŒã³ã«äœ¿çšã§ããè²æ°ã¯éæè²ãå«ããŠæå€§16è²ïŒã§ãã
å人çã«ã¯16è²äœ¿ããã°ååã ãšæã£ãŠããã®ã§ããããã¬ããæ¹åŒïŒ16è²ïŒããããã€ã«ã©ãŒæ¹åŒïŒRGB565ïŒã®æ¹ãæç»åŠçãé«éåã§ããããããã€ã«ã©ãŒæ¹åŒãæ¡çšããŸããã
VGS::VDPã®å Žåãã¹ãã©ã€ãã®è²ã«0ïŒ0x0000ïŒãæå®ããéšåãéæè²ã«ãªããŸãã
äžèšä»¥å€ã®ç¹åŸŽãšããŠãOAMã¬ã³ãŒãã«ãŠãŒã¶ãŒããã°ã©ã ã§èªç±ã«äœ¿ãã3ãã€ãã®ãŠãŒã¶æ å ±ïŒuserïŒãšããé åãæã£ãŠããŸããïŒâ»ã»ã¬ããŒã¯IIIãã²ãŒã ã®ã¢ã®OAMã«ã䌌ããããªé åããããŸãïŒ
ããã¯ãRP2040ã32bit CPUäžã€å³å¯ãª4ãã€ãã¢ã©ã€ã¡ã³ãæ§é ãªã®ã§ãæ°å€åã¯4ãã€ãã§æãããã®ãæãåŠçå¹çãè¯ãããã®é¢ä¿ã§é »ç¹ãªèšç®åŠçãå¿ èŠãªåº§æšå€æ°ã4ãã€ãæŽæ°ïŒintïŒã«ããŠããŸããããã¿ãŒã³çªå·ã¯ïŒåé·ãªã¬ã³ãžãã§ãã¯ãäžèŠã«ããçºïŒç¬Šå·ãªãã®1ãã€ãæŽæ°ã«ããŠããããã3ãã€ãåã®ããŠã³ããªé åïŒåé·é åïŒãçºçããããšã«ãªããæè§ã ãããã®é åããŠãŒã¶ããã°ã©ã ãèªç±ã«äœ¿ãã倿°é åãšããŠææåããŠã¿ã圢ã§ãã
ãã£ã1ãã€ãã§ãOAMã«ãããã£ãåé·é åãããã ãã§å©ããå Žé¢ãå€ã ãããŸããïŒå®éã«ãã¡ãã³ã³ã§ã²ãŒã ãåµã£ãŠã¿ãæã«æ¬²ãããšæããã®ã§å ¥ããŠã¿ãŸããïŒ
ãã¡ãããäœã¡ã¬ãã€ããã®åºå€§ãªRAMãèªç±ã«äœ¿ããæšä»ã®SoCã§ã¯äžèŠãªé æ ®ã§ãããRP2040ãæ±ããRAMã¯264KBãããªãïŒãã€ããã®åå以äžãVGS SDKãå°æããŠããïŒããããããã£ãã¡ã¢ãªãç¯çŽã§ããé æ ®ã¯å¿ é ã ãšèããŠããŸãã
ã¹ãã©ã€ãæ©èœã®å®çŸ©
VGS::GFXãå éšçã«å©çšããŠããTFT_eSPIã«ããTFT_eSpriteããšåŒã°ããæ©èœããããTFT_eSPIã®ã©ãããŒã¯ã©ã¹ã§ããVGS::GFXã«ãåãæ©èœãããã®ã§ãããVGS::VDPã®ã¹ãã©ã€ãæ©èœãšã®æ··åãé¿ãããããVGS::GFXã§ã¯ãã®æ©èœã®ããšãä»®æ³ãã£ã¹ãã¬ã€æ©èœïŒvirtualDisplayïŒãšåŒãã§ããŸãã
ãããããã¹ãã©ã€ãïŒçŽèš³ãããšåŠç²ŸïŒãšã¯ã1978幎ã«ã¢ã¿ãªç€Ÿã«ããèæ¡ããããã®ãåºç€ã«ãªã£ãŠããŸãã
2.6 ã¹ãã©ã€ãã®æä»£ïŒ1980幎代
1978幎ã衚瀺ç©ã®äœçœ®åº§æšãšçµµæã®çªå·ãCPUãæžã蟌ãã ãã§ææã®çµµæãããŒããŠã§ã¢ã衚瀺ããæ¥åçšã²ãŒã ç¬èªã®ãã¹ãã©ã€ã衚瀺æ¹åŒããç±³åœAtari瀟ã§èæ¡ãããã
ç§ã¯æ§ã ãªã²ãŒã æ©ãæèŒããŠããã¹ãã©ã€ãæ©èœãèŠãŠããçµæãã¹ãã©ã€ãã®æ©èœèŠä»¶ã次ã®ããã«å®çŸ©ããŸããã
次ã®1ã4ãå šãŠãæºãããã®ããã¹ãã©ã€ãæ©èœããšåŒã¶
1. 座æšãšãã¿ãŒã³çªå·ãå«ã屿§æ å ±ããŒãã«ïŒOAMïŒãæã¡
2. èæ¯ç»é¢ãŸãã¯åæ¯ç»é¢ãšç¬ç«ããç»é¢ã¬ã€ã€ã«å¯Ÿã
3. åçã«ãã£ã©ã¯ã¿ãã¿ãŒã³ã
4. æå€§ã§OAMã¬ã³ãŒãæ°ãšåæ°æç»ã§ããæ©èœ
ã ã ããæ¡ä»¶4ã¯ããŒããŠã§ã¢ãªãããã«ããçç¥ãèªããã
TFT_eSpriteã¯ç§ãå®çŸ©ããã¹ãã©ã€ãã®æ©èœå®çŸ©ã«åèŽããŸããããä»®æ³ãã£ã¹ãã¬ã€æ©èœãšããŠã¯ãšãŠãæçšãªã®ã§ãååãå€ããŠæ®ãããšã«ããŸããã
äœæ ãTFT_eSPIã®äœè ããããã®ä»®æ³ãã£ã¹ãã¬ã€æ©èœããã¹ãã©ã€ãããšåŒã¶ããšã«ããã®ãâŠãšããç¹ããšãŠãè峿·±ãã§ããããããããšãçŸä»£ã«ãããã¹ãã©ã€ãæ©èœã®äžè¬å®çŸ©ãå€åããŠããã®ãããããŸããã
ãããŠãã¬ãããªã²ãŒã æ©ã°ããç ç©¶ããŠããç§ãæä»£é ããªçorz
C/C++ã§ãŽãªãŽãªæ±ããVDP
VGS::VDPã¯C/C++ã§åŠçãèšè¿°ããåæã®ä»æ§ã«ãªã£ãŠããŸãããC/C++ã§VDPåŠçãç°¡æœã«èšè¿°ã§ãããšããç¹ãã¡ãªãããšããŠå€§ãããããããŸããã
ããã«ã¯ãã²ãŒã æ©ã®æŽå²çãªäºæ ãé¢ä¿ããŸãã
æšä»ã®ã²ãŒã æ©ã«ã¯LLVMãæèŒãããŠãããšæãããïŒæèŒããªãçç±ãç¡ããšæãããïŒã®ã§ãC/C++ã«éããRustçã®æ§ã ãªããã°ã©ã èšèªã§ããã°ã©ã ãèšè¿°ã§ãããã®ãšæãããŸãã
ãããããã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒã®VDPãå šçæã ã£ãé ã®ã²ãŒã æ©ïŒã¹ãŒããŒãã¡ãã³ã³ãã¡ã¬ãã©ã€ãïŒã¯ãåŠçæ§èœçãªäºæ ã§ãŸã ãªãŒã«ãã·ã³èªïŒã¢ã»ã³ããªèšèªã®ã¿ïŒã§ã®ã²ãŒã ã»ããã°ã©ãã³ã°ãäž»æµã ã£ããšèããããŸãã
ãããŠããã®æ¬¡äžä»£ã²ãŒã æ©ã«åœãããã¬ã€ã¹ããŒã·ã§ã³ïŒ1994幎ïŒä»¥éãã²ãŒã æ©ã®ç»é¢æç»ã¯ããªãŽã³æ¹åŒãäž»æµã«ãªãããã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒã®VDPã¯å»ããŸããã
ã¡ãªã¿ã«ããã¬ã€ã¹ããŒã·ã§ã³ïŒããªãŽã³æ¹åŒïŒäžä»£ãããããã¯æµç³ã«Cèšèªã䜿ãããŠããã ããâŠãšå®çŽã«æã£ãŠããææãããã®ã§ãããã»ã¬ãµã¿ãŒã³çããã€ããããã¬ã€ã¹ããŒã·ã§ã³2ã«ç§»æ€ããããšãèšããèšäºã«ã»ã¬ãµã¿ãŒã³çãã€ãã¯ãªãŒã«ãã·ã³èªã§äœãããŠããæšãèªãããŠããŸããïŒSH-2ã¯RISCãªã®ã«ãã«ã¢ã»ã§çµããã®ãð ïŒ
åœæã®äžåžã§ãããã€ãã®çã¿ã®èŠªã§ãããæ°ãããã»ããšã«äžæµ·ããŒã ã§ã§ããã®ïŒå šéšã¢ã»ã³ãã©èšèªã§çµãã§ããããããããµã¿ãŒã³ã®ãã€ã³CPUããã«ã«äœ¿ããŸãã£ãŠããããããšå«å³ãèšãããããããŸãèŠãŠãŠäžããããšè±ªèªãã€ã€èª¬åŸã
ãã®ãããªèæ¯äºæ ãããé«çŽèšèªïŒC/C++ïŒã§ãã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒã®VDPãæ±ãå®¶åºçšã²ãŒã æ©åãããã°ã©ã ãèšè¿°ããçµéšãããã²ãŒã ããã°ã©ãã¯å°ãªãã£ããã®ãšèããããŸãã
ãã¡ãããX68000蟺ããªãC/C++ã§èšè¿°ããããšãåºæ¥ããããããŸããããCISCã¢ãŒããã¯ãã£ã§ããMC68000ã®ãã·ã³èªã¯é«çŽèšèªäžŠã«æ±ããããããšããããç¹ã«æ§èœãæ±ããããå Žé¢ãå€ãVDPé¢é£ã®åŠçã¯ãã·ã³èªã§èšè¿°ããã®ãäž»æµã ã£ããšèããããŸãã
ãŸããåæ§ã«MSXã«ãCèšèªããããŸããããMSXã®CPUãZ80ãã¯æ¯ãé·ãã£ãããšããã£ãŠæè¡æžãæ¬å±ã«è±å¯ã«ãã£ãããšã«å ããCã³ã³ãã€ã©ã¯æ°äžåçšåºŠããé«çŽåã ã£ãã®ã§ããåå¿è ã¯BASICããäžçŽè ã¯ãã·ã³èªããšããæ¥µç«¯ãªäºæ¥µåãããŠããã®ã§ã¯ãªãããšèããããŸãã
ã€ãŸãããã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒïŒïŒã¹ãã©ã€ãããïŒã®VDPã®å¶åŸ¡åŠçãC/C++ã§ãŽãªãŽãªèšè¿°ããããã°ã©ãã³ã°ã¹ã¿ã€ã«ã¯ããã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒãç¥ããªãè¥ãçŸåœ¹äžä»£ã®ã²ãŒã ããã°ã©ãã ãã§ãªãããã£ã©ã¯ã¿ãã¿ãŒã³æ¹åŒãæãããããŒãã«ãªã²ãŒã ããã°ã©ãã«ãšã£ãŠãæ°é®®ãããããŸããã
ç§ã¯Z80ãããããåŸæïŒèªäœã®ãšãã¥ã¬ãŒã¿ãäœããçšåºŠïŒãªã®ã§ãZ80ã®ãªãŒã«ãã·ã³èªã§ã²ãŒã ã®ããã°ã©ã ãæžãããšãäžå¿ã§ããŸãããããã§ããã¯ãC/C++ã®æ¹ãããã°ã©ãã³ã°ãæãïŒçç£æ§ãé«ãïŒãšæã£ãŠããŸããïŒãã·ã³èªããã°ã©ãã³ã°ã«ã¯ãã·ã³èªããã°ã©ãã³ã°ã®è¯ããé¢çœããããã®ã§ãçç£æ§ã®è©±ãæãã«ããã°ãªãŒã«ãã·ã³èªã§ã®ããã°ã©ãã³ã°ããªã¹ã¹ã¡ããããšããã§ã¯ãããŸããïŒ
æè¿ã®ã€ã±ãŠãããŠãã²ãŒã ããã°ã©ããªãRustãããããŸããããRP2040ã®æ§èœã ãšLLVMããã¯ãšã³ããåããã«ã¯æ§èœçã«å°ã ããã€ããªãšã
RP2040ãå ¬åŒã«ãµããŒãããŠããããã°ã©ã èšèªã¯C/C++ or ÎŒPythonãšã®ããšãªã®ã§ãRP2040ã§ã²ãŒã ããã°ã©ãã³ã°ããããªãäºå®äžC/C++äžæã ãšæãããŸãã
IoTçšéãªãÎŒPythonã®æ¹ããµã³ãã«ãå€ããŠè¯ããããããŸããããVGS; Video Game Systemã¯IoTæ©ã§ã¯ãªãã²ãŒã ãåµãããã®ã·ã¹ãã ãªã®ã§ãSDKã¯C/C++ã®ã¿ã§ãã
2. 广é³ã®åç
çŽ8幎åïŒ2015幎10æããïŒã®ç§æ°ãã
鳿¥œã§ã¯ãªãã广é³ã«å¯Ÿããæãã¯çµæ§ããã®ã§ãããããã¯æããæ®éã®äººã®æèŠãšå€§åéããŸããååãªã©ã«ãç§ã®ã²ãŒã 广é³ã«å¯ŸããèŠè§£ãç±åŒãããšã倧æµã®äººã¯ãäœèšã£ãŠãã ã³ã€ãïŒãã¿ãããªé¡ãããŸããç§ã®èŠè§£ã¯ããŸããã²ãŒã ãšã¯å¹æé³ã§ããããšããæãã解説ãå§ãŸããŸãïŒäžç¥ïŒã
ãšã®ããšã§ãâŠãªãã»ã©ïŒð€
é·å¹Žããã°ãæžãç¶ããŠãããšããã®ãããªæªææžãæ®ãç¶ããå ŽåãããããšãŠãæå¿«ãªæ°åã«ãªããã®ã§ãªã¹ã¹ã¡ã§ããïŒé»æŽå²ããŸãæŽå²ïŒ
æè¿ã®æµè¡ãã¯ããã°ã§ã¯ãªãYouTubeã§VLOGïŒåç»ãã°ïŒãããããŸããããåç»ãããããã¹ãã®æ¹ãçæéã§èªã¿è¿ããŠæ€çŽ¢ãç°¡åãªã®ã§ãèšé²ç®çãªãåç»åãããæç« åããªã¹ã¹ã¡ã§ãã
ä»ã«ãYahooããã°ããã³ãã³ã®ãããã¬ãGoogle+ãªã©ãçŸåšã§ã¯ãµãŒãã¹çµäºããŠããæ°å€ã®ããã¹ãç³»ã¯ã©ãŠãã»ãã©ãããã©ãŒã ã§æ§ã ãªæªææžãæçš¿ããŠããŸããããæ®å¿µãªãããããã®å€§åãèŠãããšã¯ããåºæ¥ãŸããâŠãã£ããâ
å šãŠã®ã¯ã©ãŠããµãŒãã¹ã¯æ°Žèžæ°ã®å¡ã«éããªãã®ã§ãå°æ¥çã«å šãŠé§æ£ããåæã§äœ¿ã£ãŠããŸããæ¬åœã«æ®ããããã°WordPressãªãã§èªåçšã®ãµãŒãã建ãŠãã¹ãã§ãããæªææžæçš¿å®¶æ°ããæ¶ããããçŸããããšã®ããšã§é²åœ¹åã奜ãã§äœ¿ã£ãŠããŸãã
Bloggerã¯ããã®R.I.P.ã¡ãŒã«ãŒããšGoogleéå¶ãªã®ã«æªã ã«ç¶ããŠããŸããããã¹ãããŒã¹ã ããã©ã³ãã³ã°ã³ã¹ããå®ãå²ã«AdSenseåºåãšã®çžæ§ãè¯ããšããããšãªã®ãããããŸãããïŒç¥ãããã©ïŒ
äœè«ã¯ããŠãããã²ãŒã ã«ããã广é³ã¯ç©åãéèŠã§ãä»®ã«BGMãç¡ããŠãã广é³ããé©åã«é³Žã£ãŠããã°ã²ãŒã ã£ãœãé°å²æ°ã¯æç«ããããšä»ã§ãæã£ãŠããŸãã
ãªã®ã§ãã²ãŒã éçºããæã«ãBGM or 广é³ãã®ç©¶æ¥µã®äºæãè¿«ãããå Žåããã¯ã广é³ãåããŸãâŠãšãæ±æ¹VGSïŒBGMã®ã¿ïŒå¹æé³ç¡ãïŒãããããäœãç¡ãç§ãèšã£ãŠã説åŸåãç¡ãæ°ãããªãã§ããªãã§ãã
ãBGMãªã©ããã¬ãšãBGMãç¡ãã²ãŒã ãããããããŠããèšããâŠ!ã
ãšããèš³ã§ãæ¬é¡ã®å¹æé³æ©èœãä»ããŸããã
VGSã®å Žåãæ³¢åœ¢ã¡ã¢ãªé³æºïŒVGS::BGMïŒã¯é³æ¥œã®åçå°çšã§ã广é³åçã¯22050Hz, 16bits, ã¢ãã©ã«ã®ä»»æPCM圢åŒã§åçãã仿§ïŒããã¯åæã®VGSã®é ããåã仿§ïŒã§ãã
åŠçæ§èœã®é¢ä¿ã§è€æ°ã®å¹æé³ãåæåçïŒåæåçïŒããããšã¯ã§ããã广é³1ãåçäžã«å¹æé³2ãåçãããšå¹æé³1ã®åçããã£ã³ã»ã«ãããŠå¹æé³2ã®åçãå§ãŸã圢ã«ãªããŸãã
3. ã²ãŒã ãããïŒWIPïŒ
ã²ãŒã ãããã®å¯Ÿå¿ã«ã€ããŠã¯ãéšåéãã®æ®µéãªã®ã§ãŸã ã§ããŠããŸããã
