
1幎ãçµéãã次ã®ãã¯ããã«å€§ãããä»åã¯æçšãªãããžã§ã¯ããæžãããã«å€ãã®å€ãè²»ããããŸããã ååã¯ãã§ããã ãæ©ãã©ãã§ãçµããªããã°ãªããŸããã§ããã ãã®èŸæ±åŒ·ãç³ã®ãªãœãŒã¹ã¯ç§ã«ãšã£ãŠååã§ã¯ãªããããæç¹ã§èå³æ·±ã解決çãåºãŠããŸããã ã¿ã¹ã¯ã®äžéšãå¥ã®ã³ã³ãããŒã©ãŒã«æž¡ããŸãã ïŒåååæ§ãã«ããã®äžã«ã¯ããããã®æ°Žãšç»åããããŸããïŒ
Nextion HMIãGameduinoã®ãããªãããžã§ã¯ããæã£ãŠããã«ãããããããããã€ãã®çç±ã§æ±ºæãäžãããšã«ããŸããã Gameduinoã¯ãèå³æ·±ããœãªã¥ãŒã·ã§ã³ïŒããŒãäžã®VGAåºåãšFPGAïŒã«èŠããŸãããããã®ããŒãã®2çªç®ã®ããŒãžã§ã³ãå ¥æã§ããªããããæåã®ãªããžã§ã³ãè³Œå ¥ããå¿ èŠããããŸããã ããã¯çã¿ãšèŠãã¿ã§ããïŒ
- ãããŸããªãããã³ã«ã
- ãããäžã®ããã€ãã®äŸ;
- ãã¹ãå ã®ã°ã©ãã£ãã¯ã¹ã¹ãã¬ãŒãžïŒSDã«ãŒãã«ä¿åã§ããŸãããFatFSãå¿ èŠã«ãªããŸãããããå€ããæ¶è²»ããæå³ã倱ãããŸãïŒã
- é人ã ããç解ã§ããå€ãã®ããžãã¯ãã³ããŒã
- å
šäœãšããŠããã®ãããžã§ã¯ãã¯çããŠãããããæ»ãã§ããå¯èœæ§ãé«ãã§ãã
Nextionã®ççºçãªäººæ°ã«ããããããããããžã§ã¯ãã¯ãã®ãããªåºç¯å²ã«æž¡ãé åžã®åã«çŸãå§ããŸããã倱æã®ãã®ä»ã®çç±ã¯æ¬¡ã®ãšããã§ãã
- IDEããå§ãŸããã¯ã·ãªã³ã«å¯ŸåŠããããããŸããã§ããã
- ãšãŒããã以å€ã®æéãçºçããå±éºæ§ïŒãã ããäžçš®ã®æ²»çãè¡ãããŸãïŒã
- IDEããäºåã«ããã°ã©ã ãããã¢ã¯ã·ã§ã³ã®ã¿ã䜿çšå¯èœã§ãïŒæ£ãããªãå Žåã¯ä¿®æ£ïŒã
- ãã¹ããšãã£ã¹ãã¬ã€ã®äž¡æ¹ã«æžã蟌ãå¿ èŠããããŸãã
- ãããã³ã«ã®å€§ããªãªãŒããŒãããïŒãã ããããã¯ç解ã§ããŸãïŒã
ãããŠæãéèŠãªããšã¯ãã©ã¡ãã®å Žåããç¬èªã®äœããè¿œå ããæ¹æ³ããªãããšã§ãã
ãªãããã
sGPUã¯Nextionãã£ã¹ãã¬ã€ã«éåžžã«äŒŒãŠããããã«èŠãããããããŸããããããã§ã¯ãããŸããã ããã¯ã¯ããã«åçŽã§èå³ããããããªãã£ãããã«èŠããŸããããæéãçµã€ã«ã€ããŠéåžžã«è «ãäžãããç¹ã«ããã€ãã®ãªã¯ãšã¹ãã®åŸãã³ãã¥ããã£ãšå ±æããããšæããŸããã
ã¢ã€ãã¢ã®ããã€ãã¯ãããŸããŸãªã©ã€ãã©ãªãå人çãªè©³çŽ°ããã³å€ãã³ã³ãœãŒã«ããåçšãããŸããïŒããã€ã¹ã«é¢ããå€æ°ã®ããã¥ã¢ã«ãèªã¿ãŸããããç§ãæããã¹ãŠã§ã¯ãããŸããïŒã
1ã€ã®èšäºã§ãã¹ãŠã®æ©èœã説æããããšã¯æããã«äžå¯èœã§ããããã«ã䜿çšå¯èœãªãã¹ãŠã®ã³ãã³ãã¯ããã¹ãã®ãœãŒã¹ïŒArduinoã©ã€ãã©ãªïŒãŸãã¯commandDiscriptions.txtãã¡ã€ã«ã§è¡šç€ºã§ããŸãã
é©åãªãã£ã¹ãã¬ã€ãšã·ã³ãã«ãªstm32ã³ã³ãããŒã©ãŒãããå Žåã¯ã©ãããã°ããã§ããïŒ æããã«ïŒ 圌ã®ç»é¢ãšã®ãã¹ãŠã®çžäºäœçšãæããïŒ
æåã«åã£ãã®ã¯Adafruitãã£ã¹ãã¬ã€ã©ã€ãã©ãªã§ãã»ãŒå®å šã«æžãçŽãããDMAããã蟌ãŸããŸããã ã°ã©ãã£ãã¯ããªããã£ãããããããã¹ãåºåããããŸãã
ããã«å°å¿µãããã§ã«stm32ã®äžã«æžã蟌ãããšã¯å¯èœã§ããã次ã®ãããªãŒãã¹ã«æµæããã®ã¯éåžžã«å°é£ã§ãïŒ
ããã¯äœã®ããã§ãã
sGPUã¯Nextionãã£ã¹ãã¬ã€ã«éåžžã«äŒŒãŠããããã«èŠãããããããŸããããããã§ã¯ãããŸããã ããã¯ã¯ããã«åçŽã§èå³ããããããªãã£ãããã«èŠããŸããããæéãçµã€ã«ã€ããŠéåžžã«è «ãäžãããç¹ã«ããã€ãã®ãªã¯ãšã¹ãã®åŸãã³ãã¥ããã£ãšå ±æããããšæããŸããã
ã¢ã€ãã¢ã®ããã€ãã¯ãããŸããŸãªã©ã€ãã©ãªãå人çãªè©³çŽ°ããã³å€ãã³ã³ãœãŒã«ããåçšãããŸããïŒããã€ã¹ã«é¢ããå€æ°ã®ããã¥ã¢ã«ãèªã¿ãŸããããç§ãæããã¹ãŠã§ã¯ãããŸããïŒã
1ã€ã®èšäºã§ãã¹ãŠã®æ©èœã説æããããšã¯æããã«äžå¯èœã§ããããã«ã䜿çšå¯èœãªãã¹ãŠã®ã³ãã³ãã¯ããã¹ãã®ãœãŒã¹ïŒArduinoã©ã€ãã©ãªïŒãŸãã¯commandDiscriptions.txtãã¡ã€ã«ã§è¡šç€ºã§ããŸãã
ããããšã¯äœããããŸããã§ãã
é©åãªãã£ã¹ãã¬ã€ãšã·ã³ãã«ãªstm32ã³ã³ãããŒã©ãŒãããå Žåã¯ã©ãããã°ããã§ããïŒ æããã«ïŒ 圌ã®ç»é¢ãšã®ãã¹ãŠã®çžäºäœçšãæããïŒ
æåã«åã£ãã®ã¯Adafruitãã£ã¹ãã¬ã€ã©ã€ãã©ãªã§ãã»ãŒå®å šã«æžãçŽãããDMAããã蟌ãŸããŸããã ã°ã©ãã£ãã¯ããªããã£ãããããããã¹ãåºåããããŸãã
ãããŠãã¹ãŠãéåžžã«è¯ãã§ãïŒ
ããã«å°å¿µãããã§ã«stm32ã®äžã«æžã蟌ãããšã¯å¯èœã§ããã次ã®ãããªãŒãã¹ã«æµæããã®ã¯éåžžã«å°é£ã§ãïŒ
sGPUã®ã³ã³ãããŒã©ãŒ
ã¢ã€ãã¢ã®äžåçãã®ããã«ãSTM32F4xxã·ãªãŒãºãããã«æåŠããŸããïŒãã®ãããªãã³ã»ã³ã¹ã«ãã®ãããªã³ã³ãããŒã©ãŒã䜿çšããŠãã ããïŒpro2ã«
20 kb RAMãåããSTM32F103C8T6ïŒä»¥äžãããããŒãžã§ã³ãšåŒã³ãŸãïŒããã³64 kb RAMãåããSTM32F103VET6ïŒä»¥äžãããããŒãžã§ã³ãšåŒã³ãŸãïŒãéžæãããŸããã
ããã¯ãäžåœãšãã®å®äŸ¡ã§æãããŠããã¡ãŒãã«ããã¯ããŒã³ã®ãããã§ã¯ããã«åºãæ®åããŠããããã以äžã«èª¬æããããã€ãã®å¶éã«ãããããããã¡ã€ã³ã³ã¢ãšããŠéžæããããšã決å®ãããŸããïŒäžåœã§ã¯ãããããŒãžã§ã³ã®ããŒããministm32ã¯ããŒã³ãšããŠãªãªãŒã¹ããŠããŸãïŒã
ã«ãŒãã«ãäœæããã ãã§ãªãããããžã§ã¯ãã®ã³ã³ãããŒã©ãŒã®ã¿ã€ããå€æŽããããã€ãã®ã€ã³ã¯ã«ãŒãžã§ã³ãå€æŽããŠã倧éã®ã¡ã¢ãªãŒãšFSMCã³ã³ãããŒã©ãŒãåããsGPUãååŸããŸãïŒããããŒãžã§ã³ã®å®ããšæ®åã«ããã䜿çšããªãããšãé£ãããªã£ãŠããŸãïŒã
ã¹ã¯ãªãŒã³
ILI9341ãã©ã€ããŒïŒç»é¢è§£å床320x240ïŒã«åºã¥ãç»é¢ã䜿çšããŸããã ç»é¢ãšã®çžäºäœçšã¯ãSPIçµç±ïŒFSMCçµç±ã§ãå¯èœã§ãããããŸããŸãªçç±ã§ãã¹ãããããšã¯ã§ããŸããïŒã§ããã®ã³ã³ãããŒã©ãŒã®æ倧å¯èœé床-36 MbpsïŒå®éã«æž¬å®ããå ŽåãçŽ2.7 Mb / sãŸãã¯22 MbpsïŒããã ãããªãã¡ã¬ã³ã¹ããã¥ã¢ã«ïŒF101-F107ã®å Žåã¯RM0008ïŒã«ç€ºãããŠããããã«ãDMA転éã®ã¿ã
ç¡é§ãªè©Šã¿ã®åŸãããé«éã«SPIãååŸããããšã¯ã§ããŸããã§ããã ã³ã³ãããŒã©ãŒã®SPIãããã¯ã¯çãå§ããŸãïŒ72 MHzã§ã¯ãªããF_CPUã®å®å®ããæ倧80 MHzã¯ããªãŒããŒã¯ããã¯ããã36 Mbit / sããå°ãå€ããªããŸãïŒã
ã€ã³ã¿ãŒãã§ãŒã¹
æãèå³æ·±ãããšã¯ããã¹ããšsGPUã®éä¿¡ã€ã³ã¿ãŒãã§ãŒã¹ã®åã«éžæãè¡ããããšãã«å§ãŸããŸããã
ã€ã³ã¿ãŒãã§ã€ã¹èŠä»¶ã¯æ¬¡ã®ãšããã§ãã
- ã»ãšãã©ãã¹ãŠã®ã³ã³ãããŒã©ãŒã«ãããµããŒãã
- å®è£ ãç°¡åã
- ååãªåž¯åå¹ ããããŸãã
- 䜿çšãããæå°è¡æ°ããããŸãã
éžæã¯UARTã«èœã¡ãŸããã ãã¹ãŠã®ããã€ã¹ã1MBaudã®äº€æã¬ãŒãããµããŒãã§ããããã§ã¯ãªããããé床ãéžæããŠãããã»ã©æçœã§ã¯ãªããªããŸããã èãçŽãããšãªãã圌ã¯4ã€ã®å¯èœãªé床ãäœæããŸããïŒ9600ã57600ã115200ã1Mã 3ã€ã®GPIOã䜿çšããŠããŒããŠã§ã¢ã§é床ãéžæããããšãã§ããŸãïŒGPIOãšé床ã®å¯Ÿå¿ã¯STM32_GPU_GPIO_Pinout.txtã«ãããŸãïŒã
ãããã®ãã¡ã䜿çšãããã®ã¯4ã€ã ãã§ãæ®ãã¯äºåã§ãïŒå°ãªããšã1200ããŒãäœæã§ããŸãïŒã
é床ã¯ãã¹ã¯ã«ãã£ãŠéžæããã
ããŒãã¹ããŒã¿ã¹ã®èªã¿åãïŒ
switch(GPIOA->IDR & 0x07) // GPIO { case 0x01: { init_UART1(USART_BAUD_9600); print(T_BAUD_9600); } break; case 0x02: { init_UART1(USART_BAUD_57600); print(T_BAUD_57K); } break; case 0x03: { init_UART1(USART_BAUD_115200); print(T_BAUD_115K); } break; case 0x04: { init_UART1(USART_BAUD_1M); print(T_BAUD_1M); } break; /* * params 0x05-0x07 and 0x00: reserved * */ default: { init_UART1(USART_BAUD_57600); print(T_DAUD_DEFAULT); } break; }
ã¿ã€ã«
ããã¯ãsGPUãæåã«ã§ããããšã§ãã
åã¿ã€ã«ã¯ãçŸåšã®ã«ã©ãŒãã¬ããå ã®è²ã®ã€ã³ããã¯ã¹ãæã€ãã€ãã®é åã§ãã
ããã¯ã8x8ã¿ã€ã«ã®å€èŠ³ã§ãïŒ10åã«æ¡å€§ïŒïŒ

ãããŠãäžèšã®ã¿ã€ã«ãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸãã
0E 0E 0E 0E 0E 0E 0E 0E 0E 38 38 0E 0E 38 38 0E 0E 38 28 0E 0E 28 38 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 38 0E 0E 0E 0E 38 0E 0E 0E 38 38 38 38 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E
ã¿ã€ã«ãäœã§ãããã«ã€ããŠã¯çµ¶å¯Ÿã«èª¬æããŸããããããã¯ãŒã¯äžã®æ å ±ãèŠã€ããèœåã«é ŒããŸããæ å ±ã®éãå€ãããŸãã
æ°çŸãæ°åã®ã¿ã€ã«ãååšããå¯èœæ§ããããããéåžžã«å€ãã®ROMãå æããŸãã ãã¹ãåŽãããããã転éããããšã¯å®å šã«éè«ççã§ãïŒæåã®ãªããžã§ã³ã®Gameduinoã§è¡ãããããã«ïŒã
åºåã¯ãã¡ã¢ãªã«ãŒããSPIã«åºå·ããããšã§ãããã
æçµçã«ããã¹ãåŽã§ã¯ããã¡ã€ã«åãšRAM sGPUã«èªã¿èŸŒãã¿ã€ã«ã®æ°ãéä¿¡ããã ãã§ååã§ãã
ãã®ããã«ïŒ
gpu.loadTile8x8("pcs8x8", TILE_SET_W, RAM_POS, 1);
// pcs8x8 â ( );
// TILE_SET_W â ;
// ;
// RAM_POS â RAM, ;
// 1 â .
5ãã€ãã®ã³ãã³ãïŒããã¯ãæžã蟌ã¿æã«1ã€ã®ã¿ã€ã«ãããŒãããããã®æå°ãµã€ãºã§ãïŒã¯ãRAMãšèªã¿åãå°çšã¡ã¢ãªã®äž¡æ¹ã®ããªãã®éšåãæ¶è²»ããé¢åãªFatFSã©ã€ãã©ãªãããã¯ããã«å°ããããšã«åæããŸãã
次ã®ã¿ã€ã«ãµã€ãºããµããŒããããŠããŸãã
- 8x8-æå°ã64ãã€ãã®RAMã®ã¿ã䜿çšã
- 16x16-äžåããã§ã«4å以äžã®RAMïŒ256ãã€ãïŒã䜿çšããŠããŸãã
- 32x32ã¯æ倧ã§ããã¯ã4å倧ããã4åã®RAMïŒ1024ãã€ãïŒãå¿ èŠãšããŸãã
æåŸã®ã¿ã€ãã®ã¿ã€ã«ã¯ããããŒãžã§ã³ã§ã®ã¿äœ¿çšã§ããŸããããã¯ãããããŒãžã§ã³ã®ã¡ã¢ãªã®ååãæ¶è²»ããã®ã¯ãããã®10åã ãã§ããããã§ãã
ãŸããç»é¢ã«è¡šç€ºãããšãã«ããªãã¯ãå©çšããããšã«ã觊ããŸãã DMAïŒRGB565ã«ã¯1ã€ã®å€æãããã¿ã€ã«çšã®ãããã¡ãŒããããŸãïŒã®äœ¿çšã«å ããŠãåã¿ã€ã«ã®ã€ã³ããã¯ã¹ã確èªããåã®ã¿ã€ã«ãšäžèŽããå Žåãå€æã¯ã¹ããããããå€ãã¿ã€ã«ã¯æ°ãã座æšã§è¡šç€ºãããŸãã ãã®ãããªã¡ã¢ãªã®æµªè²»ã«ãããããããåãã¿ã€ã«ãç»é¢ã«é£ç¶ããŠè¡šç€ºãããå Žåãããã¯åŠå®ã§ããªãå©ç¹ããããŸãã å€æããæéããªããããã¿ã€ã«ã¯ã»ãŒããã«è¡šç€ºãããŸãã
8x8ã¿ã€ã«åºåã®äŸïŒ
è»èã§é£ã¶-äžèšã®ãããªã§ã¯ããã¹ãã®ã³ãŒãã¯CããŒãžã§ã³ã®ã©ã€ãã©ãªã䜿çšããŠããŸãïŒåäžã¯Arduinoã§STM32ã䜿çšããå Žåã«ã®ã¿å®çŸã§ããŸãïŒã
ã¿ã€ã«ã®æ³¢åœ¢è¡šç€ºã¯æ¬¡ã®ãšããã§ãã

ãã倧ããªéšåïŒ

ãã®äžã§ãã¢ãã¬ã¹ãŠã£ã³ããŠã®èšå®äžã«å€ãã®ãã€ãã«æ°ä»ãããšãã§ããŸãã ã»ãšãã©ã®å Žåããããã®ãã€ãã¯DCã©ã€ã³ã®åãæ¿ãïŒããŒã¿ãŸãã¯ã³ãã³ãã®éžæã2çªç®ã®ãã£ãã«ã¯èµ€è²ã®ã©ã€ã³ïŒãSPIãããã¡ãŒã®è§£æŸã®åŸ æ©ïŒãã¹ãŠã®ããŒã¿ã®éä¿¡ã®åŸ æ©ïŒã§ãã ãã£ã¹ãã¬ã€ã®æ©èœã®ãããããã§ã¯ã»ãšãã©äœãã§ããŸããïŒ9ãããã¢ãŒããŸãã¯FSMCã®ã¿ïŒã
ã¿ã€ã«ãäœæãã
ã¿ã€ã«ãRAM sGPUãååŸããåã«ããŸãSDã«ãŒãããããŠã³ããŒãããå¿ èŠããããŸããããã®åã«ã¿ã€ã«ãé 眮ããå¿ èŠããããŸãã
ã¿ã€ã«ã®äœæã¯ããã»ã©é£ãããããŸããã次ã®æé ãå®è¡ããŠãã ããã
- GIMPã§ã¯ãå®æããç»åã¯ã€ã³ããã¯ã¹ã¢ãŒãã«ãªããŸãã
- çããŒã¿ãšããŠãšã¯ã¹ããŒãïŒæšæºRãGãBïŒ;
- 8.3ãã¹ã¯ïŒãã¡ã€ã«åã«æ倧8æåãæ¡åŒµåã«3æåãããã¯çŸåšã®FatFSèšå®ã®å¶éã§ãïŒã§ãã¡ã€ã«ã®ååãå€æŽããŸããéåžžã* .tleæ¡åŒµåã䜿çšããŸãïŒsGPUã¯æ¡åŒµåèªäœã眮ãæããããããã¹ãã¯è»¢éããå¿ èŠããããŸããïŒã
- ã«ãŒãã®SDã«ãŒãã«* .tleãã¡ã€ã«ãé 眮ããŸãã
-
-???; -
-å©ç!!!
å®éã«ã¯ãã¿ã€ã«ãŸãã¯ã¿ã€ã«ã®ã»ããïŒã¿ã€ã«ã»ããïŒèªäœã®ã€ã¡ãŒãžãäœæããå¿ èŠãããããã§ãã ãã¯ã»ã«ã¢ãŒãã®å€ãã®ããŒã«ã®äžã§ãPixelEditãéžæããŸããïŒãããã¯ãŒã¯äžã®æ å ±ãæ€çŽ¢ã§ããããã«ãªããŸãããã«ïŒã
ããã§ç»åãäœæããããããã* .pngãšããŠãšã¯ã¹ããŒãããGIMPã«ãã£ãŒãããã ãã§ååã§ãïŒäžèšãåç §ïŒã
éåžžã«éèŠãªç¹ïŒ æãéèŠãªã®ã¯ãæ£ããæçµç»åå¹
ãã¿ã€ã«ã§è»¢éããããšãå¿ããªãã§ãã ãããããããªããšãsGPUããŽããããŒãããŠããŸããŸãïŒ ãŸããã¿ã€ã«ã®ãµã€ãºã8ïŒ8x8ã16x16ã32x32ïŒãŸã§ã®å€æ§æ§ã«æ³šæããå¿
èŠããããŸãã ããã¯ãã¿ã€ã«ã®ã»ããã«åœãŠã¯ãŸããŸãã
æãéèŠãªã®ã¯ãæ£ããæçµç»åå¹
ãã¿ã€ã«ã§è»¢éããããšãå¿ããªãã§ãã ãããããããªããšãsGPUããŽããããŒãããŠããŸããŸãïŒ ãŸããã¿ã€ã«ã®ãµã€ãºã8ïŒ8x8ã16x16ã32x32ïŒãŸã§ã®å€æ§æ§ã«æ³šæããå¿
èŠããããŸãã ããã¯ãã¿ã€ã«ã®ã»ããã«åœãŠã¯ãŸããŸãã
ã¹ãã©ã€ã
sGPUã§ã§ããããšã®2ã€ç®ã¯ãã¿ã€ã«ããã¹ãã©ã€ããäœæããããšã§ãã ã¹ãã©ã€ãã¯ãã°ã«ãŒãå ã®ã¿ã€ã«ã®çµã¿åããã§ãïŒç°¡ç¥åãããŠããå ŽåïŒã
ããªãªã®ç§å¯ãç¥ããªã人ã¯èŠãªãã§ãã ããïŒ
ã¹ãã©ã€ãããªãªã¯4ã€ã®8x8ã¿ã€ã«ã§æ§æãããŠããŸãã
ããçã®ã¹ãã©ã€ãã®æ°ã¯56ã§ãããçã®å Žåã¯63ã§ããããçãšããçã®ã¹ãã©ã€ãã®æ°ã¯ç°ãªãæ¹æ³ã§èšç®ãããŸããã ããã®å Žåãããã¯åã¿ã€ãã®ã¿ã€ã«ã®æ倧æ°ã®ååã®åèšã§ãããããã®å Žåãããã¯
ã¹ãã©ã€ãã¯ãåãçš®é¡ã®ã¿ã€ã«ã§æ§æã§ããŸãã 8x8ãš16x16ã®ã¿ã€ã«ããã¹ãã©ã€ããåæã«äœæããããšã¯ã§ããŸãããã8x8ãš16x16ã®ã¿ã€ã«ãã2ã€ã®ã¹ãã©ã€ããäœæããããšã¯ã§ããŸãã åã¹ãã©ã€ãã¯4ã€ã®ã¿ã€ã«ïŒæ倧ïŒã§æ§æããã
次ã®ãµã€ãºã®çµã¿åãããå¯èœã§ãã
- 1x1;
- 1x2;
- 2x1;
- 2x2
ããã§ãæåã®æ¡ã¯ã¿ã€ã«ã®é«ããã¿ã€ã«ã®2çªç®ã®å¹ ã§ãã
ããã«ãåã¹ãã©ã€ãã«ã¯ãæç»ããããã¯ã»ã«åäœã®åº§æšãå«ãŸããŠããŸãïŒ2ã€ã®ã¹ãã©ã€ãã®è¡çªã®èšç®ã«åœ¹ç«ã¡ãŸãããããã«ãååšããŸãïŒã
ã¹ãã©ã€ãæ§é ïŒ
typedef struct { uint16_t posX; // \__ uint16_t posY; // / uint8_t type; // ( 1x1, 1x2⊠8x8, 16x16âŠ) uint8_t visible;// uint8_t tle[4]; // } sprite_t;
ã¿ã€ã«ã®èæ¯
sGPUã§ã§ããããšã¯3ã€ç®ã§ãã
ã¡ã¢ãªã«ã¯ããµã€ãºãããã8x8ã®ã¿ã€ã«ã€ã³ããã¯ã¹ãæã€1200ãã€ãïŒ40x30ã¿ã€ã«ïŒã®é åãå«ãŸããŠããŸãïŒå°æ¥çã«ã¯éžæè¢ããããããããŸããïŒã
ã¿ã€ã«ã«ãŒãã¯RAMã«ä¿åãããSDã«ãŒãããèªã¿èŸŒãŸããŸãïŒ* .mapæ¡åŒµåïŒã çŸåšãããããã¡ã€ã«ãäœæããããŒã«ã¯ãããŸããã
ããããæŸèæã®ã»ããã ãããããŸã...
å¯äžã®æ¹æ³ã¯ãPixelEditãã* .txtã«ãããããšã¯ã¹ããŒãããã¿ã€ã«ã€ã³ããã¯ã¹ã®å
é å
šäœãæ¶å»ããŠtilemapConverterã«æž¡ãããšã§ãïŒååãšããŠQtã§èšè¿°ããŸããïŒã ç§ã®æ²ç·ä»¥æ¥ãã³ã³ããŒã¿ãŒã®ããŒãžã§ã³ãæžãããšããå§ãããŸãããå¿
èŠãªå Žåã¯ã³ã¡ã³ãã«æžã蟌ãã§ãã ããã
é»æºæå ¥æã«ã¿ã€ã«ã®èæ¯ã®äŸãèŠãããšãã§ããŸãã
ãããã®18ã¿ã€ã«ã¯ããµã€ãºã8x8ãã¯ã»ã«ã§ãïŒ10åã«æ¡å€§ïŒïŒ

ãããè¡ãããšãã§ããŸãïŒ2åã«ãªããŸãïŒã

ä»æãäžå¿«ã§ãã ã¹ãã©ã€ããšã¿ã€ã«ã®èæ¯ã¯åã8x8ã¿ã€ã«ã䜿çšããŸãã ã€ãŸããèæ¯ãšã¹ãã©ã€ãã«ã¯ãç°ãªãã¿ã€ã«ã䜿çšããå¿ èŠããããŸãïŒã¯ããããããŒãžã§ã³ã«ã¯å€ããããŸããïŒã
ã¡ã¢ãªå²ãåœãŠ
æããã«ãstm32 RAMã¯éãããŠãããããããŸãå€ãã®ããšãçªãè©°ããããšã¯ã§ããŸããã ç§ã«ã¯ãŸã ããããªãçç±ã§ãç§ã¯ã¿ã€ã«çšã®ã¡ã¢ãªããã-7680ãã€ãããã-40960ãã€ãã«å²ãåœãŠãããšã«ããŸããã
ãããããã®ãã¹ãŠã®ã¡ã¢ãªã1çš®é¡ã®ã¿ã€ã«ã«å²ãåœãŠãããããŸããã§ããã ãã®ã¡ã¢ãªã®åæ£ããŸãã¯äœ¿çšããã¿ã€ã«ã®æ°ã«åé¡ãçºçããŸããã
以åãå€ãã³ã³ãœãŒã«ã«é¢ããèšäºãèªãã ãšãã«ãã³ã³ãœãŒã«ã«ãã£ãŠã¯ãããçš®ã®ã¿ã€ã«ãåžžã«æ¬ èœããŠãããšããäºå®ã«åºäŒããŸããã
ãããã£ãŠãèããããå€ãã®ã·ããªãªãèæ ®ããŠã次ã®ããã«é åžããããšã決å®ãããŸããã
- æã䜿çšããããªãœãŒã¹ãšããŠã®80ã¿ã€ã«8x8ã
- 10ã¿ã€ã«16x16ãæ®å¿µãªããå°æ°ã§ããããã¯ç©ºãã¡ã¢ãªã®ãã¹ãŠã§ããããã§ãã
64 kb RAMã®ãã倧ããªã³ã³ãããŒã©ãŒãå¿ããªãã§ãã ããããã®ããããã£ã¹ããªãã¥ãŒã·ã§ã³ã¯æ¢ã«æ¬¡ã®ããã«ãªã£ãŠããŸãã
- 160 8x8ã¿ã€ã«ãããããŸãæã䜿çšããããªãœãŒã¹ã§ãã
- 80ã¿ã€ã«16x16ãä»åã¯ããã«å€ãã®ã¿ã€ã«ããããŸãã
- 10ã¿ã€ã«32x32ãããã§ãæ°ã¯å°ãªãã§ãããä»åã¯ãµã€ãºãèæ ®ãã䟡å€ããããŸãã
ç§ã¯ãŸã æ£ããååžãçã£ãŠããŸãïŒãã€ããã¯ã¹ã¯ãŸã£ããéžæè¢ã§ã¯ãããŸããïŒã æ®ãã¯ãRAMmath.txtããã¡ã€ã«ã«ãããŸãã
ã«ã©ãŒãã¬ãã
䜿çšããã¡ã¢ãªãåæžããããã«ãã¿ã€ã«ã¯åãã¯ã»ã«ã®è²å šäœã䜿çšããïŒç³ãèš³ãããŸããããã¡ã¢ãªã¯ããã»ã©å€ããããŸããïŒãããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããŸãããã«ã©ãŒãã¬ããã®è²ã€ã³ããã¯ã¹ã®ã¿ã䜿çšããŸãã ãã®ãœãªã¥ãŒã·ã§ã³ã«ãããã¡ã¢ãªèŠä»¶ãååã«åæžãããããªãã¯ã䜿çšããŠãã¬ãããå€æŽããåãã¿ã€ã«ã衚瀺ã§ããããã«ãªããŸããïŒæ°ããã¿ã€ã«ãããŠã³ããŒãããå¿ èŠã¯ãããŸããïŒã
åæ§ã®ããªãã¯ããã¹ãŠã®å€ãã³ã³ãœãŒã«ã§äœ¿çšãããŸããã æãæåã§æåãª
äŸïŒããªãªã®å¥ã®ç§å¯ãç¥ããªã人ã«ãšã£ãŠã¯ãèŠãªãã»ãããããããã¯äººçãå€ããå¯èœæ§ãããïŒ
ã²ãŒã ã§ã¯ãã¹ãŒããŒããªãªãã©ã¶ãŒãºã é²ãšèã¿ã®ã¿ã€ã«ã¯åãã§ããã¬ããã®è²ã®ã¿ãå€ãããŸãã ããªãªãšã«ã€ãŒãžã®ãã¬ãããšåæ§ã
æãåçŽãªãã¬ãããšããŠãNESãã¬ããã䜿çšãããŸãããããã®äžååããçºèŠãããŸããã
GIMPãšã·ã¹ãã ã«çµ±åãããæ¯è²èšãè£ åããŠã圌ã¯è²ã»ããã76ïŒäºåçšã«4ã€ã®é»ïŒã«æ¡åŒµããŸããã
ãã¡ãããå®ç§ãªè²ç¥èŠãæã€äººã§ã¯ãªãããã76è²ã®é©åãªãã¬ãããäœæã§ããŸããã§ããã

誰ãã256è²ã®ããé©åãªãã¬ããïŒå°æ¥ã®ã¢ã«ãã¡ãã£ãã«çšã«1è²ïŒãèŠã€ãããäœæãããã§ãããããšãŠãæè¬ããŠããŸãã
å¥ã®ãã¬ããã䜿çšããå¿ èŠãããå Žåã¯ãSDã«ãŒãããããŠã³ããŒãã§ããŸãã RAM sGPUã«ã¯æ倧512ãã€ãããããŸãïŒ256è²ãè²ããšã«2ãã€ããGameBoy Advanceãšåæ§ã§ãããRGB565ã®ã¿ïŒã
GIMPãããã¬ããããšã¯ã¹ããŒãããã®ã¯éåžžã«ç°¡åã§ããã€ã³ããã¯ã¹ãããç»åïŒçããŒã¿ãªã©ïŒããšã¯ã¹ããŒãããã ãã§ãç»åãã¡ã€ã«ã®é£ã®GIMPã¯* .palæ¡åŒµåãæã€å¥ã®ç»åãäœæããŸãã ãŸããSDã«ãŒãã«é 眮ããå¿ èŠããããŸãïŒæ倧8æåã®ååã®ãµã€ãºãå¿ããªãã§ãã ããïŒã
ãããã³ã«
ãããã³ã«ã¯ãã³ãã³ãã®ãµã€ãºãã§ããã ãå°ãããªãããã«äœæãããŸããã å³å¯ã«æå®ãããã³ãã³ãã®ãµã€ãºãšãã©ã¡ãŒã¿ãŒãããã³ã³ãã³ãã®æ£ç¢ºããå®å šã«å¶åŸ¡ã§ããªãã ã³ãã³ãå®è¡ã®æé«é床ã®ããã®ãã¹ãŠïŒçµå±ããã¹ãŠã¯ããã°ã©ã ã§è¡ãããŸããèŠããŠããå ŽåïŒã
ã³ãã³ãã¯ãã³ãŒãã®ãã€ãã§å§ãŸããŸãã ããŒã å šäœã®æçµçãªãµã€ãºã¯ãã³ãŒãã«ãã£ãŠç°ãªããŸãã ãããã£ãŠãç»é¢å šäœãåäžã®è²ã§å¡ãã€ã¶ãããã«å¿ èŠãªã®ã¯3ãã€ãã ãã§ãããäžè§åœ¢ãæç»ããããã«ã¯ãã§ã«15ãã€ãã§ãã
ã³ãã³ãã³ãŒãã¯ãã¡ããšç¯å²ïŒã»ã¯ã·ã§ã³ïŒã«åå²ãããå€æ°ã®æªäœ¿çšã³ãŒãããããŸãã çŸåšã®ãããã³ã«ã®å®è£ ã§ã¯ãåèšã§255ããŒã ã䜿çšã§ããŸããããã®ãã¡ã®ååã䜿çšãããŠããŸããïŒåµé æ§ã®ããã®èªç±ãªåéããããŸãïŒã
ãã¹ãåŽ
ãã¹ãåŽã§ã¯ãsGPUã¯éåžžã®ç»é¢ã®ããã«èŠããŸãããUARTã€ã³ã¿ãŒãã§ãŒã¹äžã®ã¿ã§ãã
sGPUã³ãã³ãçšã®å€§ããªå ¥åãããã¡ãŒã«ããããããããªãŒããŒãããŒãããªã¹ã¯ããŸã ãããŸãã ãããã£ãŠã2ã€ã®ä¿è·ãªãã·ã§ã³ããããŸãïŒå®é1ïŒã
- ãã¹ããžã®ããã°ã©ã ã«ããå¿çã äœéã§ãããåºããµããŒããããŠãããªãã·ã§ã³ïŒå°ãªããšãUSB <-> UARTãšäº€æçšã®3è¡ã®ã¿ã䜿çšã§ããŸãïŒã
- ãã¹ããžã®ããŒããŠã§ã¢å¿çã GPIOã䜿çšããããã¹ãããã®ãã³ã®ç¶æ ãç£èŠããã ãã§ããããã¡ããã£ã±ãã«ãªãå¯èœæ§ãäœããªããããå€§å¹ ã«é«éã«ãªããŸãã
Arduinoã«ã¯2ã€ã®ããŒãžã§ã³ã®ã©ã€ãã©ãªããããŸãã ArduinoïŒC ++ïŒåãã«å®å šã«ã·ã£ãŒãåãããã©ã€ãã©ãªã®ããŒãžã§ã³ã¯ãéåžžã«å€ãã®å©ç¹ããããŸããã1ã€ã®å€§ããªå¯æ¬¡çãªæ¬ ç¹ããããŸã-éåžžã«åããŠé ãã§ãïŒã¿ã€ã«ã»ã¯ã·ã§ã³ãåç §ïŒã èšãæããã°ã空ã®ã¹ã±ããããããèšã£ãŠã¿ãŸãããïŒ
#include <STMsGPU.h> STMsGPU gpu; void setup() {} void loop() {}
1634ãã€ãã®ROMãš217ãã€ãã®RAMãæ¶è²»ããŸãããããã«ã¯sGPUãšã®åææ¹æ³ããããŸããïŒ ããã«ãSTM32ã䜿çšããå Žåããããã®æ°å€ã¯10åïŒå°ãªããšãïŒåã«ãªããŸã-16732ãã€ãã®ROMãš3960ãã€ãã®RAMïŒ
ãããã£ãŠãCã«ã¯ããŒãžã§ã³ããããŸããæ®å¿µãªããããããŸã§ã®ãšããatmega328pïŒãªã©ïŒã«æçãããŠãããArduinoã®ã»ãšãã©ãã¹ãŠã®å©ç¹ããããŸããã ãããã®æ¬ ç¹ã¯ãé床ã®åäžãšãµã€ãºã®å€§å¹ ãªçž®å°ã®äž¡æ¹ã§è£ãããŸãã922ãã€ãã®ROMãš46ãã€ãã®RAMïŒãã¡ããããããããå°ãªãããããšãã§ããŸãïŒã¯åæã®ã¿ã§ãã
æãéèŠãªããšã¯ãAdafruit ili9341ã¹ã¯ãªãŒã³ã©ã€ãã©ãªã䜿çšããå Žåãã»ãšãã©äœãæžãæããå¿ èŠããªãããšã§ãã ãã¹ãŠã®ã¡ãœãããšã»ãŒå®å šãªäºææ§ããããŸãã
çæ
ç»é¢å šäœã®1ãã¬ãŒã ã«å¿ èŠãªã¡ã¢ãªéã¯180ãããã€ããå æããããã倧éã®ã¡ã¢ãªã¯ãããŸããããã®ããããã¬ãŒã ãããã¡ãäœæããããšã¯äžå¯èœã§ãã ãã®ãããçŸåšãã¿ã€ã«ãšã¹ãã©ã€ãã®ã¢ã«ãã¡ãã£ãã«ã¯ãããŸããã
ãã£ããã FPGAïŒFT800ãRA8875ãªã©ïŒã«å¯ŸããŠãåçŽãª72MHzã³ã³ãããŒã©ãŒã«ã¯æµæããæ©äŒããããŸããã ããçã§FSMCãèµ·åãããšç¶æ³ãæ¹åãããããšã¯æããã§ãããç§ãã¡ãæãã»ã©ã§ã¯ãããŸããã
ãœãŒã¹ã³ãŒã
ãã¹ãŠã®ãœãŒã¹ã³ãŒããšstm32ã®ãã¡ãŒã ãŠã§ã¢ãGithubã«ãããŸãïŒçªç¶ããã°ã©ããŒãããªãå Žåã¯ãUART1çµç±ã§STM32 Flash Loader Demonstratorãä»ããŠãã©ãã·ã¥ã§ããŸãïŒã
ãããžã§ã¯ããªããžããªãžã®ãªã³ã¯ã¯æ¬¡ã®ãšããã§ãïŒãŸã ååšããå Žåãããã©å¹æãã©ãã£ãã¯ã®ããã«çŠæ¢/ãã¥ãŒãã¢ã«ãŠã³ããååŸããªãããšãæã¿ãŸã ïŒã ãœãŒã¹ã«ã¯ãsGPUã®ãããžã§ã¯ãïŒIAR ARMããŒãžã§ã³7.40çšïŒãAVRãšArduinoã®ã³ãŒãïŒããŒãããžãŒã¯ãŸã å ¬éãããŠããŸãïŒãæ¥ç¶æ¹æ³ãªã©ã®èª¬æããããŸãã
äžè¬ã«ãæ¢åã®æ©èœã«ããããããããããžã§ã¯ãã¯éåžžã«ç²éã§ãã
質åãããã°ãå°ããŠãã ãããç§ã¯çããŠããããã§ãã ãŸããããã€ãã®ãã€ã³ãããã詳现ã«åŒ·èª¿ããŠãããã«æžãããšãã§ããŸãïŒãããå¿ èŠãã©ãããæããŠãã ããïŒã ããèšäºã§ã¯ãäžã§æžããããã«ããã¹ãŠãããã·ã¥ããªãã§ãã ããã