ã¬ããã³ã³ãã¥ãŒã¿ã«ã¯ããŸããŸãªçšåºŠã®çŽ°å¿ã®æ³šæãå¿ èŠã§ãã ãšãã¥ã¬ãŒã·ã§ã³ã䜿çšããã³ã³ãã³ãããããŸãã FPGAã奜ã人ãããŸãããã®çç±ã¯ããšãã¥ã¬ãŒã·ã§ã³ã§ã¯ãªãã¬ã¯ãªãšãŒã·ã§ã³ã ããã§ãã æåŸã«ã3çªç®ã®ããã»ããµã«ãµãŒãã¹ãæäŸããŸãã
ããããããã»ããµã¯åäœããããã«å€ããå¿ èŠãšããŸãïŒ ç¹°ãè¿ããŸããããžã¬ã³ãïŒåã幎ã®å®éã®ãããã䜿çšããã®ãããããšããã¹ãŠãFPGAã«å ¥ããŠããã»ããµãŒãå€ã«çœ®ãã®ã§ããïŒ ãããããªãFPGAãå¿ èŠãªã®ã§ããïŒ Arduinoãšã¯ã©ã·ãã¯ããã»ããµã®çµåãé·ãçãç¶ããŸãããïŒ
Arduinoã«ã第2ã®é è³ããäžããããã¹ããŒãã«ããŸãã
çã®8ããããã€ã¯ãããã»ããµãããã°ã©ã ãå®è¡ããArduinoãROMãRAMãããã³åçŽãªåšèŸºæ©åšããšãã¥ã¬ãŒãããŸãã
Arduino IDEã§ä»®æ³åšèŸºæ©åšãèšèšãããã€ã¯ãããã»ããµã§ã¢ã»ã³ãã©ã³ãŒããå®è¡ããŸãã è€éãªåè·¯ããã©ãã·ã¥ãã©ã¬ã«ROMãçµã¿ç«ãŠãå¿ èŠã¯ãããŸããã
ãµããŒããããŠãããã€ã¯ãããã»ããµãŒïŒ6502ã6809ãããã³Z80ïŒ18581ïŒããã®ä»ã¯æºåäžã§ãã
ãã€ã¯ãããã»ããµãåããã·ãŒã«ãã¯ãLCDãã¡ã¢ãªã«ãŒããªã©ã®ä»ã®ã·ãŒã«ãã®æ¥ç¶ã劚ããŸããã
èªå·±ã¢ã»ã³ããªèšèªã«å ããŠããã€ã¯ãããã»ããµã§ããã€ãã®å€å žçãªã³ãŒããå®è¡ããããšããããšãã§ããŸãã
確ãã«ããã€ã¯ãããã»ããµã¯éåžžã«äœãåšæ³¢æ°ïŒçŽ95 kHzïŒã§åäœããŸãããã®æ£ç¢ºãªå€ã¯ãåšèŸºãšãã¥ã¬ãŒã·ã§ã³ã³ãŒãã®æé©åã«äŸåããŸãã
ã¢ãã¬ã¹ç©ºéã®ååžã¯ãããã°ã©ã ã§ã¹ã±ããã«èšå®ãããŸãã ãã€ã¯ãããã»ããµã¯ãArduino Megaã§å©çšå¯èœãª8 kB RAMã®4ã6 kBã«å²ãåœãŠãããšãã§ããŸãã ROMã¯ã䜿çšå¯èœãª256ã®ãã¡200 kB以äžãå²ãåœãŠãããšãã§ããŸãã
Arduino Megaã·ãªã¢ã«ããŒãã¯UARTããšãã¥ã¬ãŒãã§ããŸãã
åè·¯ãããŒãå³é¢ãã¬ãŒããŒãã¡ã€ã«ã¯CC-BY-SA 4.0 ããã§å©çšã§ããŸã ã åæã«ã次ã®èŠåãå«ãŸããŠãããããå¿ ãREADME.mdãã¡ã€ã«ãæ·»ä»ããå¿ èŠããããŸãã
åšèŸºãšãã¥ã¬ãŒã·ã§ã³ã¹ã±ãããã¢ããããŒãããããŸã§ãã·ãŒã«ããæ¥ç¶ããªãã§ãã ããïŒ ããããªããšããã€ã¯ãããã»ããµã®åºåã©ã€ã³ãç絡ããå¯èœæ§ããããŸããã¯ãããããŠã¹ã±ããèªäœã§ãåãçç±ã§äœããæ éã«ããçŽãå¿ èŠããããŸãã
6502ã®ããã€ã¹ã®ã¹ããŒã ïŒ
6809ã®ããã€ã¹å³ïŒ
Z80äžã®ããã€ã¹ã®ã¹ããŒã ïŒ
ãã§ã«å®è¡ã§ããŸãïŒ
6502ãæèŒããããã€ã¹-Apple IãWoz Monitor + BASIC ROM
6809ãæèŒããããã€ã¹- åãéçºè ã®èªå®¶è£œã³ã³ãã¥ãŒã¿ãŒSimon6809ã®ã¢ããã°ãã¢ã»ã³ãã©ãŒãšéã¢ã»ã³ãã©ãŒãåãããã¬ãŒãã³ã°ã¢ãã¿ãŒ
Z80ãæèŒããããã€ã¹-ãããŸã§ã®ãšãããã·ãªã¢ã«ããŒãã®ãšã³ãŒãã¹ãã®ã¿ã§ãä»®æ³8251ïŒKR580VV51AïŒã®ããã©ãŒãã³ã¹ã確èªã§ããŸãã
åšèŸºæ©åšããšãã¥ã¬ãŒãããããã®ãã¡ãŒã ãŠã§ã¢-MITã©ã€ã»ã³ã¹ã®äžã
è¡åååã®ç°¡åãªèª¬æïŒ
6502ããã€ã¹ãž
6809ã®ããã€ã¹ãž
Z80ã®ããã€ã¹ã«-æºåäžã
éçºè ã¯ããã€ã¹ã販売ããããšããŠããŸãããé éã¯ç±³åœã®ã¿ã§ãã ã¹ããŒã ã¯éåžžã«åçŽã§ãããããè³Œå ¥ããç¹å¥ãªçç±ã¯ãããŸããããã¬ããããŒãäžã§1æéã§ç¹°ãè¿ãããšãã§ããŸãã
RCA1802ã68008ã8085ïŒ182185ïŒã8088ïŒ181088ïŒã§åæ§ã®ããŒããéçºããäºå®ã§ãã K1801BM1ã«ã€ããŠã¯èšãããŠããŸããããèè ã«ãã®ãããªèããæããããšãã§ããŸãã
ãã¡ã€ã«ïŒ
6502ã®ããã€ã¹ïŒ çµç«èª¬ææž ã ã·ã«ã¯ã¹ã¯ãªãŒã³å°å· ã å³
6809ã®ããã€ã¹ïŒ çµç«èª¬ææž ã ã·ã«ã¯ã¹ã¯ãªãŒã³å°å· ã å³
Z80ã®ããã€ã¹ïŒ çµã¿ç«ãŠèª¬ææž ã ã·ã«ã¯ã¹ã¯ãªãŒã³å°å· ã å³
Arduinoãš6502ããã€ã¹ã®çžäºäœçšãèæ ®ããArduinoã¯ãã¯ããã¯ãã«ã¹ãäŸçµŠããããã«èšèšããããã€ã¯ãããã»ããµã®å ¥åã¬ãã«ã0ãã1ããŸãã¯ãã®éã«å®æçã«å€æŽããŸãã åã¹ãããã§ãå¶åŸ¡ç·ãšã¢ãã¬ã¹ãã¹ã§äœãèµ·ãã£ãŠãããããã§ãã¯ããç¶æ³ã«å¿ããŠãããŒã¿ãã¹ããæ å ±ãèªã¿åãããããã«éä¿¡ããŸãã Arduinoã¯IRQããã³NMIã©ã€ã³ãå¶åŸ¡ããããšãã§ããäžæãåŒãèµ·ãããŸãã ãã®å³ã¯ãããŒã¿ã®ã¿ã€ããšãã®éä¿¡ã®æ¹åã瀺ããŠããŸãã
ArduinoããŒããšãã€ã¯ãããã»ããµãŒåºåã®å¯Ÿå¿ã¯ãã¹ã±ããã§æ§æãããŸãã
/* Digital Pin Assignments */ #define DATA_OUT PORTL #define DATA_IN PINL #define ADDR_H PINC #define ADDR_L PINA #define ADDR ((unsigned int) (ADDR_H << 8 | ADDR_L)) #define uP_RESET_N 38 #define uP_RW_N 40 #define uP_RDY 39 #define uP_SO_N 41 #define uP_IRQ_N 50 #define uP_NMI_N 51 #define uP_E 52 #define uP_GPIO 53
åã¡ãžã£ãŒã次ã®ã€ãã³ãã«åå²ããŸãã
CLKã¯ç¶æ ã1ãã0ã«å€æŽããŸãïŒæåŠïŒ
CLKã¯ãŒãã®ç¶æ ã§ã
CLKã¯ç¶æ ã1ãã0ã«å€æŽããŸãïŒäžæïŒ
CLKã¯ãŠãããç¶æ ã§ã
CLKã¯åã³ç¶æ ã1ãã0ã«å€æŽããŸã...
ç¶æ é·ç§»ã®ç¬éã«äœãèµ·ãããŸããïŒ
6502ã¯ãå ¥åCLK0ã§ã¯ããã¯ãã«ã¹ãåä¿¡ãããããããããã¡ãªã³ã°ããŠãCLK1ãšCLK2ã®2ã€ã®åºåã«éä¿¡ããŸãã ãã€ã¯ãããã»ããµå ã®ãã¹ãŠã®ã€ãã³ãã¯CLK1ã«é¢é£ä»ããããŠããŸãããé 延ã¯å°ããããã€ã¯ãããã»ããµãArduinoããã¯ããã¯ãã«ã¹ãåä¿¡ããã©ã€ã³ã§ããCLK0ã«é¢é£ä»ããããŠãããšæ³å®ããŠããŸãã ãããŠãä¿¡å·ãåã«CLKãšåŒã³ãŸãã
1. CLKã¯ç¶æ ã1ãã0ã«å€æŽããŸãã
2.ãã€ã¯ãããã»ããµã¯ãæ°ããã¢ãã¬ã¹ãã¢ãã¬ã¹ãã¹ã«åºåããR / Wåºåãžã®èªã¿åããšæžã蟌ã¿ã®åãæ¿ãä¿¡å·ãåºåããŸãã ãããã圌ã¯ãŸã ããŒã¿äº€æã®æºåãã§ããŠããŸããã
3. CLKã¯ãŠãããç¶æ ã«ãªããããã¯ããŒã¿ã®äº€æãéå§ãããããšãæå³ããŸãã ãããèªã¿åãæäœã®å Žåããã€ã¯ãããã»ããµã¯ããŒã¿ãã¹åºåãå ¥åç¶æ ã«è»¢éããŠããŒã¿ãåä¿¡ããæžã蟌ã¿æäœã®å Žåãããããåºåç¶æ ã«è»¢éããŠããŒã¿ãéä¿¡ããŸãã ãŸããR / Wä¿¡å·ã¯ãå€éšããã€ã¹ãæžã蟌ã¿ã¢ãŒããŸãã¯èªã¿åãã¢ãŒãã«åãæ¿ããŸããããã¯ããã€ã¯ãããã»ããµãŒã®å¯Ÿå¿ããç¶æ ã®å察ã§ãã
4. CLKããŒãã«ãªããŸãã ããã§ããã€ã¯ãããã»ããµãå ¥åºåããã€ã¹ãããŒã¿ãã¹ã«äœãåºåããŸããã ãã€ã¯ãããã»ããµã¯ãããŒã¿ãã¹ã©ã€ã³ãšR / Wãã³ãæ°ããç¶æ ã«èšå®ã§ããŸãã
åäŸãç解ã§ããç°¡åãªèª¬æã ãã€ã¯ãã³ã³ãããŒã©ã®ã¿ãããã°ã©ãã³ã°ããå Žåããããã®ãèå°è£ã®é°è¬ãã«ã€ããŠèª°ãèããŸããã ã¢ã»ã³ãã©ãŒã§ãã
åšèŸºæ©åšãæ¥ç¶ããå¿ èŠãããå Žåã¯ãCLKã©ã€ã³ã«ãŠãããïŒæºåæéïŒã衚瀺ãããåã«ããŒã¿ãæºåããæéãå¿ èŠã§ãããŠããããååšããéã¯ãå€æŽããªãã§ãã ããã CLKããŒãã®ãšãã«åšèŸºæ©åšã«ããŒã¿ãæºåããæéããªãå ŽåããŸãã¯ãŠããããååšãããšãã«ããŒã¿ãå€æŽããå Žåããªãã³ãŒããæ©èœããªãã®ãé·ãéäžæè°ã«æãã§ãããã ãã€ã¯ãããã»ããµã®ã¯ããã¯åšæ³¢æ°ã¯å ¬ç§°åšæ³¢æ°ã®10ã15åäœãããããã®èŠä»¶ã«å®¹æã«æºæ ã§ããŸãã ããããããã¯å¿ èŠã§ãã
ãã®ãããã¯ããã¯ãã«ã¹ãçæããããã«Arduinoããæãããå¿ èŠããããã¢ãã¬ã¹ãã¹ãšR / Wã©ã€ã³ã§äœãèµ·ããããç¶ç¶çã«ãã§ãã¯ããããã«å¿ããŠããŒã¿ãã¹ãšããåãããŸãã ãããè¡ãããã«ãã¹ã±ããã¯timer1ã¿ã€ããŒå²ã蟌ã¿ã䜿çšãã95 kHzã®åšæ³¢æ°ã®ãã«ã¹ãçæããŸãã Arduinoã¯ãã€ã¯ãããã»ããµãããã¯ããã«é«éã«åäœãããããã¯ããã¯éã§ãã¹ãŠãèªã¿åããæºåããããšãã§ããŸãã ã¹ã±ãããå€æŽããåŸããã®æ¡ä»¶ãåŒãç¶ãæºããããããã«ããããšãéèŠã§ãã
ããã¯ãCLKããŒããã1ã«ç§»è¡ããæ¹æ³ãšã次ã«äœãèµ·ãããã瀺ãã¹ã±ããããã®æç²ã§ãã
//////////////////////////////////////////////////////////////////// // Processor Control Loop //////////////////////////////////////////////////////////////////// // This is where the action is. // it reads processor control signals and acts accordingly. // ISR(TIMER1_COMPA_vect) { // Drive CLK high CLK_E_HIGH; // Let's capture the ADDR bus uP_ADDR = ADDR; if (STATE_RW_N) ////////////////////////////////////////////////////////////////// // HIGH = READ transaction { // uP wants to read so Arduino to drive databus to uP: DATA_DIR = DIR_OUT; // Check what device uP_ADDR corresponds to: // ROM? if ( (ROM_START <= uP_ADDR) && (uP_ADDR <= ROM_END) ) DATA_OUT = pgm_read_byte_near(rom_bin + (uP_ADDR - ROM_START)); else if ( (BASIC_START <= uP_ADDR) && (uP_ADDR <= BASIC_END) ) DATA_OUT = pgm_read_byte_near(basic_bin + (uP_ADDR - BASIC_START)); else // RAM? if ( (uP_ADDR <= RAM_END) && (RAM_START <= uP_ADDR) ) DATA_OUT = RAM[uP_ADDR - RAM_START]; else // 6821? if ( KBD <=uP_ADDR && uP_ADDR <= DSPCR ) { // KBD? if (uP_ADDR == KBD) { ... // handle KBD register } else // KBDCR? if (uP_ADDR == KBDCR) { ... // handle KBDCR register } else // DSP? if (uP_ADDR == DSP) { ... // handle DSP register } else // DSPCR? if (uP_ADDR == DSPCR) { ... // handle DSPCR register } } } else ////////////////////////////////////////////////////////////////// // R/W = LOW = WRITE { // RAM? if ( (uP_ADDR <= RAM_END) && (RAM_START <= uP_ADDR) ) RAM[uP_ADDR - RAM_START] = DATA_IN; else // 6821? if ( KBD <=uP_ADDR && uP_ADDR <= DSPCR ) { // KBD? if (uP_ADDR == KBD) { ... // handle KBD register } else // KBDCR? if (uP_ADDR == KBDCR) { ... // handle KBDCR register } else // DSP? if (uP_ADDR == DSP) { ... // handle DSP register } else // DSPCR? if (uP_ADDR == DSPCR) { ... // handle DSPCR register } } } //////////////////////////////////////////////////////////////// // We are done with this cycle. // one full cycle complete clock_cycle_count ++; // start next cycle CLK_E_LOW; // If Arduino was driving the bus, no need anymore. // natural delay for DATA Hold time after CLK goes low (t_HR) DATA_DIR = DIR_IN; }
ã¢ãã¬ã¹ç©ºéã®å²ãåœãŠã¯ä»»æã®æ¹æ³ã§è¡ãããšãã§ããŸããå€æŽãããŠããªãã¹ã±ããã§ã¯ã256ãã€ãã®ROMã8ãããã€ãã®BASICçšROMã4ãããã€ãã®RAMã6821å ¥åºåããã€ã¹ãåããApple 1ãšåãã§ãã
// MEMORY LAYOUT // 4K MEMORY #define RAM_START 0x0000 #define RAM_END 0x0FFF byte RAM[RAM_END-RAM_START+1]; // ROMs (Monitor + Basic) #define ROM_START 0xFF00 #define ROM_END 0xFFFF #define BASIC_START 0xE000 #define BASIC_END 0xEFFF //////////////////////////////////////////////////////////////////// // Woz Monitor Code //////////////////////////////////////////////////////////////////// // PROGMEM const unsigned char rom_bin[] = { 0xd8, 0x58, 0xa0, 0x7f, 0x8c, 0x12, 0xd0, 0xa9, 0xa7, 0x8d, 0x11, 0xd0, ... 0x00, 0xff, 0x00, 0x00 }; // BASIC ROM starts at E000 PROGMEM const unsigned char basic_bin[] = { 0x4C, 0xB0, 0xE2, 0xAD, 0x11, 0xD0, 0x10, 0xFB, ... 0xE0, 0x80, 0xD0, 0x01, 0x88, 0x4C, 0x0C, 0xE0 };
RAMã¯ããã€ãRAMé å[RAM_END-RAM_START + 1]ã«ãã£ãŠãšãã¥ã¬ãŒããããŸãã ãšãã¥ã¬ãŒããããROMã®å 容ããã€ã¯ãã³ã³ãããŒã©ãŒã®ãã©ãã·ã¥ã¡ã¢ãªã«ä¿åãããããã«ã2ã€ã®PROGMEMããŒã¯ãŒããå¿ èŠã§ãã
6821ã¯ååã«ãšãã¥ã¬ãŒããããŠãããä»®æ³ããŒããŒããšãã£ã¹ãã¬ã€ã¯ãã¿ãŒããã«ããä»ããŠæ©èœããŸãã Woz MonitorãšBASICãåäœããŸãããããã¯èè ãæ±ããŠãããã®ã§ãã
åšèŸºæ©åšããšãã¥ã¬ãŒãããã«ã¯ããã®ããŒã¿ã·ãŒãã泚ææ·±ãèªã¿ããã®ã¬ãžã¹ã¿ãäœã§ãããäœã®ããã«ããã®ãã調ã¹ãå¿ èŠããããŸãã ãšãã¥ã¬ãŒã·ã§ã³ã®å©äŸ¿æ§ã¯ãåšèŸºã®ãœãããŠã§ã¢ã®é¡äŒŒç©ãäœæã§ããæè»æ§ã«ãããŸãã
I / Oããã€ã¹ã¯ãã€ã¯ãããã»ããµã®ã¢ãã¬ã¹ç©ºéã«ãããã¡ã¢ãªã»ã«ãšåãæ¹æ³ã§ã¢ã¯ã»ã¹ãããŸãã LCDãã£ã¹ãã¬ã€ãã¡ã¢ãªã«ãŒãããµãŠã³ãåºåãªã©ã®ãéãåšèŸºæ©åšã䜿çšããã«ã¯ãã¢ãã¬ã¹ã¹ããŒã¹ã«å Žæãå²ãåœãŠãå¿ èŠããããŸãã
åç §ïŒ
www.6502.org
www.callapple.org/soft/ap1/emul.html
skilldrick.github.io/easy6502
searle.hostei.com/grant/6502/Simple6502.html
wilsonminesco.com/6502primer
SB-AssemblerïŒ www.sbprojects.net/sbasm
6809ã«ç§»åãããšã以äžãå«ãŸããŸãã
2ã€ã®8ãããããããªãŒAããã³Bã1ã€ã®6ãããããããªãŒã«çµåå¯èœ
2ã€ã®16ãããã¹ã¿ãã¯ã€ã³ããã¯ã¹
åœä»€ã«ãŠã³ã¿ãŒã«é¢é£ããã¢ãã¬ã¹æå®
1ãŸãã¯2ãèªåçã«å ç®ãŸãã¯æžç®ããŸã
2ã€ã®8æ¡ã®ç¬Šå·ãªãæ°å€ã®ä¹ç®
16ãããæŒç®
ãã¹ãŠã®ã¬ãžã¹ã¿éã§ã®ããŒã¿ã®è»¢éããã³äº€æ
ãã¹ãŠã®ã¬ãžã¹ã¿ããã³ãããã®ä»»æã®çµã¿åããã®æžã蟌ã¿ãšèªã¿åã
ãã€ã¯ãããã»ããµ6809EïŒå€éšïŒã«ã¯å€éšã¯ããã¯ãžã§ãã¬ãŒã¿ãå¿ èŠã§ã6809ã«ã¯å éšã¯ããã¯ãžã§ãã¬ãŒã¿ããããŸãã æ¥ç«ã§ã¯ããããã6309Eããã³6309ãšåŒã°ããéåžžã®æäœãšã¯ç°ãªããæäœå ã§32ããã圢åŒã§åäœããŸãããã¯ã©ã·ãã¯ããŒãžã§ã³ãšã®äºæã¢ãŒãã«åãæ¿ããããšãã§ããŸãã
å®éãRetroShieldãããžã§ã¯ãå šäœãéå§ãããã®ã¯ãäœè ãèªåã§äœã£ãã³ã³ãã¥ãŒã¿ãŒSimon6809ãã¢ããã°ã¬ãŒãããŠãçµæãSimon6809 Turboãšåä»ããããšããããã§ãã ãããã圌ãããã«å®è£ ãããã£ããã¹ãŠã®ãã®ã®æšæºçãªããžãã¯ãããã«ã¯ãå€ããå¿ èŠã§ããããšãããããŸããã ãããã£ãŠãèè ã¯6809ã«é¢é£ããŠåããŠRetroShieldã®ã¢ã€ãã¢ãçå®ãããä»ã®ããã»ããµãšåãããšãåãå Žåã¯ã©ããªãã®ãïŒããšèããŸããã
ãã¡ãããããã€ã¹ã¯å€éšã¯ããã¯ãå¿ èŠãšãã6809Eã䜿çšãããããå€éšããäœæ¥ãåæã§ããŸãã äž¡æ¹ã®ããã»ããµã®Eããã³Qã©ã€ã³ã¯åããã®ãšåŒã°ãã6809ã®ã¿ã«åºåãããã6809Eã«ã¯å ¥åããããŸãã
Arduinoã¯6502ãšåæ§ã«6809ãšå¯Ÿè©±ããŸããã2ã€ã®ã¯ããã¯å ¥åïŒEãšQïŒãããã³3ã€ã®å²ã蟌ã¿å ¥åïŒIRQãFIRQãNMIïŒããããŸãã
ä»åãArduinoããŒããšãã€ã¯ãããã»ããµãã³éã®å¯Ÿå¿ã¯æ¬¡ã®ããã«æ§æãããŸãã
/* Digital Pin Assignments */ #define DATA_OUT PORTL #define DATA_IN PINL #define ADDR_H PINC #define ADDR_L PINA #define ADDR ((unsigned int) (ADDR_H << 8 | ADDR_L)) #define uP_RESET_N 38 #define uP_E 52 #define uP_Q 53 #define uP_RW_N 40 #define uP_FIRQ_N 41 #define uP_IRQ_N 50 #define uP_NMI_N 51 #define uP_GPIO 39
ã°ã©ããããããããã«ãä¿¡å·Qã¯åšæEã«å¯ŸããŠåšæã®1/4ã ãã·ããããŠããŸãã
ãã¹ãŠã®ã€ãã³ãã¯Eã«é¢é£ä»ããããŠãããããQã«ã¯ã»ãšãã©æ³šæãæããŸããããã¹ãŠã次ã®ããã«çºçããŸãã
- Eã¯ãŒãã«åãæ¿ãããŸãã ããã»ããµã¯ãã¢ãã¬ã¹ãã¹ã«æ°ããã¢ãã¬ã¹ãèšå®ããR / Wã©ã€ã³ã®ç¶æ ãå€æŽããŸãã
- Eã¯1ã«åãæ¿ãããããã»ããµã¯ããŒã¿äº€æã®æºåãæŽããŸãã
- Eã1ã§ããéããããŒã¿ãã¹ã«äœãèµ·ãããã¯åé¡ã§ã¯ãããŸãããäž»ãªããšã¯ãå¿ èŠãªããŒã¿ãEããŒãã«æ»ã£ãæç¹ã§ããã«ååšããããšã§ãã
- ããŒã¿ãèªã¿åãå ŽåãI / Oããã€ã¹ã¯ãã©ã€ã³Eã1ãã0ã«ç§»ãåã«å¿ èŠãªããŒã¿ãããŒã¿ãã¹ã«äŸçµŠããå¿ èŠããããŸãïŒæå°é 延ã¯åã®çªå·17ã§ç€ºãããŸãïŒã
- èšé²ãããšããI / Oããã€ã¹ã¯ãEã1ãã0ã«ãªã£ãæç¹ã®åœ¢åŒã§ãããã¬ãžã¹ã¿ã®ããŒã¿ãä¿®æ£ããå¿ èŠããããŸãã ããã»ããµã¯ãQã1ïŒåã®20ïŒã«é·ç§»ããç¬éã«ããã®ããŒã¿ãããã«æ©ããã¹äžã«æäŸããŸãã
- EããŒãã«ç§»è¡ããåŸããã¹ãŠãç¹°ãè¿ãããŸãã
äžèšã®ãã¹ãŠã¯ãæéã«é¢ä¿ãããã¹ãŠã®ä¿¡å·ãéçºããããã®åšèŸºæ©åšïŒä»®æ³ããã€ã¹ãå«ãïŒã®å¿ èŠæ§ã«ã€ããŠ6502ã«ã€ããŠè¿°ã¹ãŠããŸã6809ã
6502ã®å Žåã®ããã«ãä¿¡å·EãšQã®çæã2ã€ã®ä¿¡å·ããããã°ã©ãã«åŸã£ãŠåãæ¿ããå¿ èŠããããšããå¯äžã®éãããããŸãã åæ§ã«ãå²ã蟌ã¿æã«åŒã³åºããããµãã«ãŒãã³ã¯ãå¿ èŠãªã¿ã€ãã³ã°ã§ããŒã¿ã®å ¥åãŸãã¯åºåãå®è¡ããŸãã
å€æŽãããŠããªãã¹ã±ããã®ã¢ãã¬ã¹ã¹ããŒã¹ã¯ã èªå®¶è£œã®Simon6809ã³ã³ãã¥ãŒã¿ãŒãšåãæ¹æ³ã§é åžãããŸãã
// MEMORY #define RAM_START 0x0000 #define RAM_END 0x0FFF #define ROM_START 0xE000 #define ROM_END 0xFFFF byte RAM[RAM_END-RAM_START+1]; //////////////////////////////////////////////////////////////////// // Monitor Code //////////////////////////////////////////////////////////////////// // static const unsigned char PROGMEM const unsigned char simon09_bin[] = { 0x1a, 0xff, 0x4f, 0x1f, 0x8b, 0x0f, 0x36, 0x7f, 0x01, 0xa5, 0x10, 0xce, ... 0x00, 0x09, 0x00, 0x0c, 0x00, 0x0f, 0xe0, 0x00 };
RAMãšROMã¯ã6502ããªã¢ã³ããšåãæ¹æ³ã§ã¢ã¬ã€ã«ä¿åãããŸãããå¯äžã®éãã¯ãROMããŒã¿ãæã€ã¢ã¬ã€ã1ã€ãããªãããšã§ãã
I / Oããã€ã¹ã«ãã¢ãã¬ã¹ç©ºéã®äžéšãå²ãåœãŠãããä»®æ³ããã€ã¹ã§ãå®ããã€ã¹ã§ãããŸããŸããã Simon6809ã¯ãã³ããŒãžã®èŠçŽ ããŒã¹ã«åºã¥ãææ°ã®ãã·ã³ã§ããããããã¿ãŒããã«ããå®è¡ãããŠããPCããFTDIãä»ããŠããŒã¿ã亀æããŸãã ããã§ã¯ãšãã¥ã¬ãŒããããŠããŸãã
åç §ïŒ
ArtoããŒãžã® 6809ã«é¢ããå€ãã®æ å ±
6809ã«é¢ãããŠã£ãããã£ã¢ã®èšäº
SWTPc 6809ã·ã¹ãã
FLEXãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«é¢ãããŠã£ãããã£ã¢ã®èšäº