MAX-IDEã§ã®ããŒã¿ã»ã°ã¡ã³ãå€ã®èªåçãªåæå
èŠçŽ
ãã®ã¢ããªã±ãŒã·ã§ã³ããŒãã¯ãMAXQ®ãã€ã¯ãã³ã³ãããŒã©ã®ã¢ããªã±ãŒã·ã§ã³ããã°ã©ãã³ã°çšã«MAX-IDEãæäŸããŠãããã³ãŒã/ããŒã¿ã»ã°ã¡ã³ãæ©èœã«ã€ããŠè§£èª¬ããŸããã³ãŒã/ããŒã¿ã»ã°ã¡ã³ãã®ã¡ã«ããºã ã«ãã£ãŠãããŒã¿ã¡ã¢ãªå ã®å€æ°ã®äœçœ®ãèªåçã«å®£èšããŠããããã®å€æ°ãéå§æã®å€ã«åæåããããã®æ¹æ³ãæäŸããŸãããã®åŸãã¢ããªã±ãŒã·ã§ã³ã³ãŒãã䜿çšããŠãããã®å€æ°å€ããã©ãã·ã¥ã¡ã¢ãªã«ãã£ãã·ã¥ããŠãå¿ èŠã«å¿ããŠåŸ©å ããããšãã§ããŸãããã®ã¢ãããŒãã«ãã£ãŠããã€ã¯ãã³ã³ãããŒã©ãJTAGãããã¬ã«æ¥ç¶ãããŠããå Žåãæ¥ç¶ãããŠããªãå Žåãäžè²«ããŠåäœãã圢ã§ãMAX-IDEãæäŸããããŒã¿ã»ã°ã¡ã³ãã®èªåããŒãæ©èœãã¢ã»ã³ããªèšèªããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ã§å©çšããããšãå¯èœã«ãªããŸããMAXQ2000ãã€ã¯ãã³ã³ãããŒã©ã®EVãããã䜿çšããŠãã®æ¹æ³ã®å ·äœäŸã瀺ããæ¬æäžã§ã³ãŒãäŸã瀺ããŸãã
æŠèŠ
MAXQã¢ã»ã³ããªèšèªã¢ããªã±ãŒã·ã§ã³ã®å€æ°ã¯ãäœæ¥ã¬ãžã¹ã¿(ã¢ãã¥ã ã¬ãŒã¿A[0]ïœA[15]ãªã©)ãŸãã¯ããŒã¿ã¡ã¢ãª(SRAM)ã®ããããã«æ ŒçŽããããšãã§ããŸãã倿°ãããŒã¿ã¡ã¢ãªã«æ ŒçŽããããšã§ããã倧ããªäœæ¥é åãã¢ããªã±ãŒã·ã§ã³å€æ°ã«äžããããŸãããããå€ãã®ã¢ã¯ã»ã¹ã¿ã€ã ãèŠæ±ãããŸãã
MaxQAsmã¢ã»ã³ãã©ãšMAX-IDEç°å¢ã¯ãç¬ç«ããã³ãŒãã»ã°ã¡ã³ããšããŒã¿ã»ã°ã¡ã³ãã宣èšããã¡ã«ããºã ãåããŠãããããããã®ã»ã°ã¡ã³ãã«ã€ããŠç¬ç«ããhexåºåãã¡ã€ã«ãçæãããŸããå®è¡æã«ã¯ãMAX-IDEãèªåçã«ã³ãŒãã»ã°ã¡ã³ããã¡ã€ã«ãããã°ã©ã ã¡ã¢ãª(éåžžã¯ãã©ãã·ã¥)ã«ãããŒã¿ã»ã°ã¡ã³ããã¡ã€ã«ãããŒã¿ã¡ã¢ãª(éåžžã¯RAM)ã«ããŒãããŸããããããããŒã¿ã¡ã¢ãªã¯æ®çºæ§ã§ããããããã€ã¯ãã³ã³ãããŒã©ã®é»æºããªãã«ããåŸã«ããŒã¿ã»ã°ã¡ã³ãã®å 容ããã®ãŸãŸæ®ãããšã¯ãããŸããã
ãã®ã¢ããªã±ãŒã·ã§ã³ããŒãã§ã¯ãMAXQ2000ã®EV (è©äŸ¡)ãããã䜿çšããŠã第1ã«ã¢ããªã±ãŒã·ã§ã³ã®ååå®è¡æã«ãããã®ãããããããŒããããããŒã¿ã¡ã¢ãªå€ããã©ãã·ã¥ã«ä¿åããæ¹æ³ã瀺ãã第2ã«ãã®åŸãã€ã¯ãã³ã³ãããŒã©ãåèµ·åãããæã«ãã©ãã·ã¥ããããŒã¿ã»ã°ã¡ã³ãå€ã埩å ããæ¹æ³ã瀺ããŸãããã®2段éã®ããã»ã¹ã«ãã£ãŠãã¢ããªã±ãŒã·ã§ã³ãéçºäž(JTAGã¢ããã¿ãšMAX-IDEã«æ¥ç¶ãããç¶æ )ã®å Žåãããã£ãŒã«ãã§åäœäžã®å Žåããåäžã®ããŒã¿ã»ã°ã¡ã³ãã¡ã«ããºã ã䜿çšããŠå€æ°ã®å®£èšãšåæåãè¡ãããšãå¯èœã«ãªããŸãã
ãã®ã¢ããªã±ãŒã·ã§ã³ããŒãã®ãã¢çšã³ãŒãã¯MAXQ2000ãã€ã¯ãã³ã³ãããŒã©ãšMAXQ2000ã®EVãããåãã«èšè¿°ãããŠããŸããã以äžã§ç€ºãã³ãŒããšååã¯ãæžæãå¯èœãªããã°ã©ã ãã©ãã·ã¥ã¡ã¢ãªãåããMAXQ20ããŒã¹ã®ä»»æã®ãã€ã¯ãã³ã³ãããŒã©ã«é©çšããããšãã§ããŸãã
MAX-IDEç°å¢ã®ææ°ã®ã€ã³ã¹ããŒã«ããã±ãŒãžãšããã¥ã¡ã³ãããç¡åã§ããŠã³ããŒãããããšãã§ããŸãã
- MAX-IDEã®ã€ã³ã¹ããŒã«ããã±ãŒãž
- MAXQ Core Assembly Guide (è±æã®ã¿)
- Development Tools Guide (è±æã®ã¿)
倿°ãšèšæ¶åã®äœçœ®
äžè¬çãªçµèŸŒã¿ã¢ããªã±ãŒã·ã§ã³ã¯ãç¶æ ã«é¢ããæ å ±ãèšå®å 容ãäžéçãªèšç®å€ãã«ãŒãã«ãŠã³ã¿ãèšç®çµæãªã©ãæ ŒçŽããããã®ãäžå®éã®äœæ¥ã¹ããŒã¹ãå¿ èŠãšããŸãããã®äœæ¥ã¹ããŒã¹ã«æ ŒçŽãããå€ã¯äžè¬ã«å€æ°ãšåŒã°ãã以äžã®ãããªå ±éã®ç¹æ§ããããŸãã
- äžæçã§ããããšãåé»ããªã»ããã«ã£ãã£ãŠã¢ããªã±ãŒã·ã§ã³ãäžæãããå Žåãä¿åã®å¿ èŠã¯ãããŸããã
- ã¢ã¯ã»ã¹ãšæŽæ°ãé »ç¹ã«è¡ãããããšãèªåããæžèŸŒã¿ãçŽ æ©ãè¡ãããšãã§ããå Žæã«æ ŒçŽããå¿ èŠããããŸããæžèŸŒã¿åæ°ã«å¶éãããå Žæã䜿çšããããšã¯ã§ããŸããã
- åæå€ãå®çŸ©ãããŠããå Žåãå€ãããšãã¢ããªã±ãŒã·ã§ã³ã®éå§æã«ããŠãŒã¶ãŒã®ã³ãŒãã§ç¹å®ã®å€ãèšå®ããå¿ èŠããããŸãã
unsigned int c = 0x1234;ããããMAXQã®ã¢ã»ã³ããªèšèªã§çŽæ¥ã¢ããªã±ãŒã·ã§ã³ãèšè¿°ããå Žåã¯ã倿°çšã®ã¹ããŒã¹ã®å²åœãŠãšå€æ°ã«å¯Ÿããåæå€ã®èšå®ãæç€ºçã«è¡ãå¿ èŠããããŸãããã®è©³çްãªäœæ¥ã«ãã£ãŠãMAXQãã€ã¯ãã³ã³ãããŒã©ã§å©çšå¯èœãªãªãœãŒã¹ãããå³å¯ã«ç®¡çããããšãã§ããŸãããã·ã¹ãã ã®è€éããå€å°å¢å€§ããããšã«ãªããŸãã
å°èŠæš¡ãªã¢ã»ã³ããªèšèªããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ãã倧éã®äœæ¥ã¹ããŒã¹ãå¿ èŠãšããªãã¢ããªã±ãŒã·ã§ã³ã®å Žåãå éšã¬ãžã¹ã¿ã䜿çšããŠãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³å€æ°ãæ ŒçŽããããšãã§ããŸãããã®ã¢ãããŒãã«ã¯ã2ã€ã®éèŠãªã¡ãªããããããŸãã
- ã³ã³ãã¯ãã§é«éãªã³ãŒããã¬ãžã¹ã¿å€æ°ã®èªåããæžèŸŒã¿ããŸãã¯ä»ã®ã¬ãžã¹ã¿å€æ°ãžã®ã³ããŒã¯ãæå°1åœä»€ãµã€ã¯ã«ã§å®è¡å¯èœã§ã(ã¬ãžã¹ã¿ã®äœçœ®ã«äŸåããŸã)ãMAXQ20ããŒã¹ã®ãã€ã¯ãã³ã³ãããŒã©ã§ã¯ãéåžžã¯ã¯ãŒã¹ãã±ãŒã¹ã§ãæå€§2åœä»€ãµã€ã¯ã«ããå¿ èŠãšãããŸããã
- 倿°ã«å¯ŸããçŽæ¥æŒç®ãäžéšã®å éšã¬ãžã¹ã¿äœçœ®ã¯ãçŽæ¥æŒç®ãå¯èœã§ããããšãã°ã16ã®äœæ¥ã¢ãã¥ã ã¬ãŒã¿A[0]ïœA[15]ã¯ãããããã¢ã¯ãã£ããªã¢ãã¥ã ã¬ãŒã¿AccãšããŠ(APã¬ãžã¹ã¿ã䜿çšããŠ)éžæããããšãã§ããŸããããªãã¡ããããã®ã¬ãžã¹ã¿ã®1ã€ã«æ ŒçŽãããŠãã倿°ã«å¯ŸããŠæŒç®ãå®è¡ããå¿ èŠãçããå Žåãå€ãã¬ãžã¹ã¿ã®å€éšã«ã³ããŒããŠãæŒç®ãå®è¡ãããŸãå€ãã¬ãžã¹ã¿å ã«ã³ããŒããå¿ èŠã¯ãªãããã®ã¬ãžã¹ã¿ã«å¯ŸããŠçŽæ¥æŒç®ãå®è¡ããããšãã§ããŸããåæ§ã«ãLC[0]ããã³LC[1]ã¬ãžã¹ã¿ã«æ ŒçŽãããŠãã倿°ã¯ãdjnzåœä»€ãå®è¡ããããšã«ãã£ãŠçŽæ¥ã«ãŒãã«ãŠã³ã¿ãšããŠäœ¿çšããããšãã§ããŸãã
move DP[0], #0010h ; Location of variable in data memory move Acc, @DP[0] ; Read variable add #1 ; Increment variable value by 1 move @DP[0], Acc ; Store variable back in data memory倿°ã«å¯ŸããŠäžé£ã®é·ãèšç®ãå®è¡ããå¿ èŠãããå Žåãäžã®ã³ãŒãäŸã§ç€ºãããã«ããã®å€æ°ã®å€ãäœæ¥ã¬ãžã¹ã¿ã«ã³ããŒãããšäŸ¿å©ã§ããéäžã®æŒç®ã¯ãã¹ãŠãã®äœæ¥ã¬ãžã¹ã¿ã䜿çšããŠè¡ããèšç®ãå®äºããæç¹ã§å€ãå ã®å€æ°ã«ã³ããŒããŸãã
MAX-IDEã§ã®ã»ã°ã¡ã³ã宣èš
ã¢ããªã±ãŒã·ã§ã³å€æ°ãSRAMããŒã¹ã®ããŒã¿ã¡ã¢ãªã«æ ŒçŽããããšã«æ±ºå®ããå Žåã倿°ãã©ãã«æ ŒçŽãããã®æ±ºå®ã¯ã©ã®ããã«è¡ãã®ã§ããããïŒ
äžè¬çã«ã¯ããããã¬ã䜿çšããæäžäœã®32ãã€ããé€ããŠããã¹ãŠã®ããŒã¿ã¡ã¢ãªãã¢ããªã±ãŒã·ã§ã³ã§å©çšããããšãã§ããŸãããããã£ãŠã倿°ã®å®£èšã¯ãåã«ããŒã¿ã¡ã¢ãªäžã§ãã®å€æ°çšã®å Žæãå®çŸ©ããããšã«çžåœããŸãããã®åŸã¯ã倿°ã®èªã¿æžããè¡ãããããšã«ããã®å Žæãã³ãŒãã«ãã£ãŠäœ¿çšãããããšã«ãªããŸãã#defineãã¯ãã䜿çšããŠã倿°ã®äœçœ®ã«ã·ã³ãã«åãçµã³ä»ããããšãã§ããŸãã
#define VarA #0020h #define VarB #0021h #define VarC #0022h move DP[0], VarA ; Point to VarA variable move Acc, @DP[0] ; Read value of variable move DP[0], VarB ; Point to VarB variable move @DP[0], Acc ; Copy VarA to VarB move DP[0], VarC ; Point to VarC variable move @DP[0], #1234h ; Set VarC = 1234hãã®ã¢ãããŒãã¯ååã«åœ¹ç«ã¡ãŸãããããã€ãåé¡ããããŸãã
- å倿°ã®äœçœ®ãåãã£ãŠæ±ºå®ããŠããå¿ èŠããããŸãããã®äœæ¥ã«ã¯æéãããããç¹ã«ãåŸãããã¹ãŠã®å€æ°ãããŒã¿ã¡ã¢ãªå ã®å¥ã®é åã«ç§»åããããšã«ãªã£ãå Žåãåé¡ã§ãã
- 誀ã£ãŠåãå Žæã2ã€ä»¥äžã®å€æ°ã«äœ¿çšããªãããã«æ³šæããå¿ èŠããããŸãããã®èª€ããç¯ããšããã°ã®è¿œè·¡ãå°é£ã«ãªããŸãã
- 倿°ã®åæå€(éå§æã®å€)ãããå Žåã¯ãäžã®äŸã®æåŸã®è¡ã®ããã«ãã¢ããªã±ãŒã·ã§ã³ã³ãŒãã§æç€ºçã«ããŒãããå¿ èŠããããŸãããã®æ¹æ³ã§åæåãã倿°ã倿°ååšããå Žåããã®åŠçã«ãã£ãŠå€§éã®ã³ãŒãã¹ããŒã¹ãæ¶è²»ãããå¯èœæ§ããããŸãã
segment code move DP[0], #VarA ; Point to VarA move Acc, @DP[0] ; Get current value of VarA add #1 ; Increment it move @DP[0], Acc ; Store value back in VarA segment data VarA: dw 0394h ; Initial value for VarAäžã®ã¢ãããŒãã®å ŽåãããŒã¿ã»ã°ã¡ã³ãå ã§å®£èšãã倿°ã®ã¢ãã¬ã¹ã¯ãã³ãŒãã¹ããŒã¹ã®ã©ãã«ã«å¯Ÿããã¢ãã¬ã¹ã®ä»äžã«äœ¿çšãããã®ãšåãæ¹æ³ã§ããã¡ã€ã«ãããŒã¹ããéã«ã¢ã»ã³ãã©ã«ãã£ãŠèªåçã«æ±ºå®ãããŸãããããã®å€æ°ã¢ãã¬ã¹ã«ã·ã³ãã«åãä»äžããããã«ã©ãã«ã䜿çšãããdwããã³dbã¹ããŒãã¡ã³ãã䜿çšããŠã¯ãŒããµã€ãºãšãã€ããµã€ãºã®å€æ°ãéå§æã®å€ã§åæåããããšãã§ããŸãããã®å Žåããã®ã¢ã»ã³ããªãã¡ã€ã«ã«ã¯ããããåã«segment dataãã£ã¬ã¯ãã£ãããªãã£ããšä»®å®ãããšãã¢ã»ã³ãã©ã¯ã¢ãã¬ã¹0000hãããã®ããŒã¿ã»ã°ã¡ã³ããéå§ããŸãããããã£ãŠãVarAã¯ã¯ãŒãã¢ãã¬ã¹0000hã«æ ŒçŽãããããšã«ãªããŸããã³ãŒãã¹ããŒã¹ã®å Žåãšåæ§ã«ãorgã¹ããŒãã¡ã³ãã䜿çšããŠãæå®ããã¢ãã¬ã¹ã®å é ã«åŒ·å¶çã«å€æ°ãé 眮ããããšãå¯èœã§ãã
ããŒã¿ã»ã°ã¡ã³ãã®åæå
ååºã®ã³ãŒããªã¹ãã§ã倿°VarAã¯(dwã¹ããŒãã¡ã³ãã䜿çšããŠ)åæå€ã0394hã«ãªãããã«å®çŸ©ãããŠããŸããããããã®å€ã¯ãã³ãŒãäžã§ã¯VarAã«ããŒããããŠããŸãããããã§ã¯ããã®å€ã¯ã©ããã£ãŠåæåãããã®ã§ããããïŒããŒã¿ã»ã°ã¡ã³ãã®åæåã¯ããããžã§ã¯ãã®ã³ã³ãã€ã«ãšå®è¡ã®éã«ãMAX-IDEã«ãã£ãŠèªåçã«è¡ããããšããã®ããã®çãã§ãã
MaxQAsmã¢ã»ã³ãã©ã¯ãsegment dataãã£ã¬ã¯ãã£ãã«å¯ŸããŠã第2ã®hexåºåãã¡ã€ã«ãçæããŸããéåžžã¯ãã³ãŒãããŒã¿ãå«ããããžã§ã¯ãã«å¯ŸããŠhexãã¡ã€ã«ãçæãããŸããããšãã°ãexample.prjãšãããããžã§ã¯ããã³ã³ãã€ã«ããå Žåããããžã§ã¯ããã¡ã€ã«ãã¢ã»ã³ãã«ããããšã«ãã£ãŠçæãããã³ãŒãããŒã¿ãå«ãã example.hexãšããhexãã¡ã€ã«ãçæãããŸããããŒã¿ã»ã°ã¡ã³ããå®çŸ©ãããŠããå Žåããã®ã»ã°ã¡ã³ãã§ã¢ã»ã³ãã«ãããããŒã¿ãå«ãŸããexample_d.hexãšãã远å ã®hexãã¡ã€ã«ãçæãããããšã«ãªããŸãã
ãããžã§ã¯ãã®å®è¡æãMAX-IDEã¯ãããžã§ã¯ãã®ã³ã³ãã€ã«äžã«ããŒã¿ã»ã°ã¡ã³ããã¡ã€ã«(æ«å°Ÿã_d.hexã®ãã®)ãçæãããŠããªãã調ã¹ãŸããããŒã¿ã»ã°ã¡ã³ããã¡ã€ã«ãååšããå ŽåãMAX-IDEã¯æšæºã®JTAGããŒãã䜿çšããŠããã®ã»ã°ã¡ã³ãã®ããŒã¿ãããã€ã¹ã®ããŒã¿SRAMã«ããŒãããŸããããã¯ãæšæºã®hexãã¡ã€ã«ãããã°ã©ã ã¡ã¢ãªã«ããŒããããåŸã§è¡ãããŸãã
ããã€ã¹ãJTAGã¢ããã¿ã«æ¥ç¶ãããŠããéçºãµã€ã¯ã«ã§ã¯ããã®æ¹æ³ãããŸãæ©èœããŠãMAX-IDEã¯ã¢ããªã±ãŒã·ã§ã³ã®å®è¡åã«æ¯åã³ãŒããšã»ã°ã¡ã³ãããŒã¿ããªããŒãããŸããããããããã€ã¹ã®é»æºããªã/ãªã³ããåŸãåç¬ã§(ãããã¬ãæ¥ç¶ããã«)åäœãããå ŽåãMAX-IDEã¯å®è¡ããšã«ããŒã¿ã»ã°ã¡ã³ãã«é©åãªå€ãããŒãããããšãã§ããªããªããŸãã以åŸã¯å€æ°ã«æå®ã®å€ãèšå®ãããªããªãããã®çµæã¢ããªã±ãŒã·ã§ã³ã誀åäœããå¯èœæ§ããããŸããããäžåºŠããã€ã¹ããããã¬ã«æ¥ç¶ãããšãMAX-IDEã¯å®è¡åã®ããŒã¿ã»ã°ã¡ã³ãã®ããŒããåéããåé¡ãå³åº§ã«æ¶æ» ããŠããŸãããããã®çš®ã®é害ã¯åæãå°é£ãªå ŽåããããŸãã
ããŒã¿ã»ã°ã¡ã³ãã®ä¿åãšåŸ©å
æ®ãåé¡ã¯ãã©ã®ããã«ããã°ãã¢ããªã±ãŒã·ã§ã³ããããã¬ã«æ¥ç¶ãããŠããŠã(æ¯åMAX-IDEãã³ãŒããšããŒã¿ãåããŒãããå Žåã)ãèªç±ã«åäœããŠããŠã(èµ·åæã«ç¹å®ã®RAMã®å 容ãä¿èšŒãããŠããªããŠã)ãäžè²«ããŠã¢ããªã±ãŒã·ã§ã³ãåäœããããã«ã§ããããšããããšã§ããæãããªè§£æ±ºçãšããŠãã¢ããªã±ãŒã·ã§ã³ã«å€æ°ã®å€ã(åæåãçµãã£ãåŸã§)ãã©ãã·ã¥ã¡ã¢ãªã«ä¿åããããªã»ãããŸãã¯èµ·åããšã«å€ã埩å ããããšããã2段éã®ããã»ã¹ãèããããŸãã
第1ã®ã¹ããããšããŠãã¢ããªã±ãŒã·ã§ã³ããã©ãã·ã¥ã¡ã¢ãªã«å€ãä¿åããå¿ èŠããããŸãããã®åäœã¯ããã¹ã¿ãŒæ¶å»ãŸãã¯ã³ãŒãã®ããŒããµã€ã¯ã«ã®åŸãã¢ããªã±ãŒã·ã§ã³ãæåã«å®è¡ãããæç¹ã§è¡ãããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã¯ïœ¢ãã©ã°ïœ£äœçœ®ããã§ãã¯ããŠã倿°ããŸã ãã©ãã·ã¥ã«ã³ããŒãããŠããªãããšã確èªããŸãããã®ãã©ã°ã¯ã倿°ä»¥å€ã®å°çšã®äœçœ®ã䜿çšãããããŸãã¯å€æ°ã®åæå€ãéãŒãã§ããéã(空ã®RAMäœçœ®ãšåºå¥ãããã)ãã®å€æ°ãšå ±çšããããšãå¯èœã§ãã
- ã¢ããªã±ãŒã·ã§ã³ã¯ãåã ã®å€æ°ã®å€ãããŒã¿RAMãããã©ãã·ã¥ã¡ã¢ãªã«ã³ããŒããŸããæžæãå¯èœãªãã©ãã·ã¥ãåããã»ãšãã©ã®MAXQãã€ã¯ãã³ã³ãããŒã©(MAXQ2000ãªã©)ã§ã¯ãããã¯UROM_flashWrite颿°ã䜿çšããŠè¡ãããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã¯ã倿°ãæ ŒçŽãããããšã瀺ãããã«ããã©ãã·ã¥ã¡ã¢ãªã«ãã©ã°ãæžã蟌ã¿ãŸãã
- ã¢ããªã±ãŒã·ã§ã³ã¯ãã©ãã·ã¥å ã®ãã©ã°äœçœ®ããã§ãã¯ããŠã倿°ã®å€ãæ ŒçŽãããŠããããšã確èªããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã¯ãUROM_copyBufferã«ãŒãã³ã䜿çšããŠã倿°ã®å€ããã©ãã·ã¥ã¡ã¢ãªããããŒã¿RAMå ã®é©åãªäœçœ®ã«ã³ããŒããŸãã
$include(maxQ2000.inc) ;; Code memory (flash) : 0000h-7FFFh (word addr) ;; Data memory (RAM) : 0000h-03FFh (word addr) org 0000h ljump start ; Skip over password area org 0020h start: move DPC, #1Ch ; Set all pointers to word mode move DP[0], #0F000h ; Check first variable value (flag) lcall UROM_moveDP0 ; 'move GR, @DP[0]' executed by Utility ROM move Acc, GR cmp #1234h jump NE, copyToFlash ;; This is the "free-running" code, executed on subsequent power-ups, that copies ;; values from the flash back into their proper data segment locations. move DP[0], #0F000h ; Source: Flash location 7000h move BP, #0 ; Dest: Start of RAM move Offs, #0 move LC[0], #100h ; Copy 256 words lcall UROM_copyBuffer jump main ;; This is the first-pass code. A bit of a trick here; because MAX-IDE enters ;; and exits the loader separately when loading the code and data segment files, ;; the application is allowed to execute briefly before the data segment file ;; has been loaded. The first four lines under copyFlash ensure that the ;; application waits for MAX-IDE to load the data segment file before continuing. copyToFlash: move DP[0], #0h ; Wait for flag variable to be loaded by MAX-IDE. move Acc, @DP[0] ; Note that this will reset the application; the cmp #1234h ; data segment is not loaded while the application jump NE, copyToFlash ; is still running. move DP[0], #0 ; Start of RAM variable area move A[4], #7000h ; Location in flash to write to move LC[0], #100h ; Store 256 words in flash 7000h-70FFh copyToFlash_loop: move DP[0], DP[0] ; Refresh the data pointer to read values correctly, ; because calling UROM_flashWrite changes memory ; contexts and affects the cached @DP[0] value move A[0], A[4] ; Location to write move A[1], @DP[0]++ ; Value to write (taken from RAM) lcall UROM_flashWrite move Acc, A[4] add #1 move A[4], Acc djnz LC[0], copyToFlash_loop main: move PD0, #0FFh ; Set all port 0 pins to output move PO0, #000h ; Drive all port 0 pins low (LEDs off) move DPC, #1Ch ; Set pointers to word mode move DP[0], #varA move Acc, @DP[0] cmp #1234h ; Verify that the variable is set correctly jump NE, fail pass: move PO0, #55h sjump $ fail: sjump $ segment data org 0000h varA: dw 1234h org 00FFh varB: dw 5678h end
çµè«
MAX-IDEã«ãã£ãŠæäŸãããã³ãŒã/ããŒã¿ã»ã°ã¡ã³ãæ©èœã¯ãããŒã¿ã¡ã¢ãªå ã®å€æ°ã®äœçœ®ãèªåçã«å®£èšããŠããããã®å€æ°ãéå§æã®å€ã§åæåããæ¹æ³ãæäŸããŸãããã®åŸãã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒãã䜿çšããŠãããã®å€æ°ã®å€ããã©ãã·ã¥ã¡ã¢ãªã«ãã£ãã·ã¥ããŠãå¿ èŠã«å¿ããŠåŸ©å ããããšãã§ããŸãããã®ã¢ãããŒãã«ãã£ãŠãã¢ã»ã³ããªèšèªããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ã§MAX-IDEãæäŸããããŒã¿ã»ã°ã¡ã³ãã®èªåããŒããå©çšãããšãšãã«ããã€ã¯ãã³ã³ãããŒã©ãJTAGãããã¬ã«æ¥ç¶ãããŠããŠãæ¥ç¶ãããŠããªããŠãäžè²«ããŠåäœãããããšãå¯èœã«ãªããŸãã