CP/M v2.23
æŠèŠ
Sharp MZ80A åãã® CP/M ããŒãžã§ã³ã¯ Micro Technology ã«ãã£ãŠäœæãããŸãããã80 æ¡ã¹ã¯ãªãŒã³ããªããããã¢ããã°ã¬ãŒããªãã§ã¯ããŸã圹ã«ç«ã¡ãŸããã§ããã調æ»ãããšãããKuma ãªã©ã®ãµãŒãããŒãã£ã 80 æ¡ã¢ããã°ã¬ãŒããéçºããåŸã« SUC ããå ¥æã§ããããã«ãªããŸããããMZ80A ã® CP/M 㯠2020 幎æç¹ã§ã¯å€ãã®èšäºã§èšåãããŠãããã®ã®ãå®éã«å ¥æããã®ã¯éåžžã«å°é£ã§ãããoriginal.sharpmz.org ãªã©ã®åªãããµã€ã㯠80K/80B/800 ããŒãžã§ã³ãæäŸããŠããŸãããMZ80A åãã¯æäŸããŠããŸããã
80 æ¡ã«ã©ãŒã¢ããã°ã¬ãŒãããŒããš Rom Filing System ãéçºããäž»ãªç®çã¯ãMZ80A ã§ CP/M ãå®çŸããããšã§ãããFPGA ããŒã¹ã®ããŒããŠã§ã¢ãšãã¥ã¬ãŒã¿ãŒãããžã§ã¯ãã§ã¯æ§ã ãªæ¡æ°ã®åºåãã«ã©ãŒãã°ã©ãã£ãã¯ã¹ã«å¯Ÿå¿ãã倿Žãç°¡åã«è¿œå ã§ããŸããããŽã£ã³ããŒãžãã·ã³ãžã®å€æŽãæå°éã«æããå®éã®ãªãªãžãã«ããŒããŠã§ã¢ã§è¡ãããšã¯ããã倧ããªææŠã§ããã1983 幎ã«ãã®ãã·ã³ãåããŠæã«ããŠä»¥æ¥ã®å人çãªé¡æã§ããããŸãããéå»ã®ã¢ããã°ã¬ãŒãã®ã»ãšãã©ã¯ãªãªãžãã« PCB ãžã®ã«ããããªã³ã¯ãå¿ èŠã§ãããç§ã¯ç¹ã«ãããããããããŸããã§ãããSharp ãäœã£ããŸãŸã®ãªãªãžãã«ããŒããŠã§ã¢ãä¿ã¡ããã®ã§ãïŒãªãªãžãã« PCB ãžã®ç§ã®å¯äžã®å€æŽã¯ããããïŒIC8 74LS165 ãããªã·ããã¬ãžã¹ã¿ãŒïŒããœã±ããåããããšã§ãããã¯äœ¿çšäžã«æ éããŠäº€æãå¿ èŠã«ãªã£ãå Žåã§ãç°¡åã«è¡ãããã·ã³ã¯ 100% ãªãªãžãã«ã®ç¶æ ã«ä¿ãããå ã®å·¥å Žåºè·ç¶æ ã«ç°¡åã«æ»ããŸãã
ããã㊠CP/M ãåäœãããããšããŸãããããããäžã«å€§éã®æ å ±ããã£ãŠãç°¡åãªäœæ¥ã§ã¯ãããŸããã§ããããŸããMZ80A åãã® Micro Technology ç CP/M ã®å ¥æãéåžžã«å°é£ã ã£ããããMZ80K ãš MZ80B ããŒãžã§ã³ã«é Œãããšã«ããŸãããæ¬¡ã«ãMZ80A ãå転ããŒã¿ãèªã¿åãããã«èšèšãããŠãããšããå¥åŠãªãã£ã¹ã¯ãã©ãŒãããã®åé¡ã«çŽé¢ããŸãããé·ã話ãçããããšãç¬èªã® ROM ããŒã¹ç CBIOS ãäœæããCP/M v2.23 ã® BDOS+CCP ãšçµã¿åãããããšã«ããŸããããã®ã»ã¯ã·ã§ã³ã§ã¯ãã®äœæ¥ã®è©³çްã説æããŸãã
CP/M ããŒãããã»ã¹
CP/M ã®èµ·å㯠2 ã€ã®ãã§ãŒãºã§è¡ãããŸãïŒ
- ãªãªãžãã«ã® AFI ãããããŒãã£ã¹ã¯å¶åŸ¡ãœãããŠã§ã¢ã䜿çšããŠå転ããŒãã»ã¯ã¿ãŒãèªã¿èŸŒã¿ã0x0000 ã«å¶åŸ¡ã³ãŒã 0x02 + âIPLPROâ ãå«ãŸããŠããããšã確èªããã«ãã»ã«åãããããŒãããŒããŒã«å¶åŸ¡ãæž¡ã
- 0x9C00 ããå§ãŸã CCPãBDOSãCBIOS ãèªã¿èŸŒããCBIOS ãå¶åŸ¡ãåŒãç¶ããç°ãªããã£ã¹ã¯ãã©ãŒããããé©çšããŠç°ãªã FDC ã³ã³ãããŒã©ãŒããžãã¯ã䜿çšããïŒããŒã¿ãåå転ããïŒã
MZ80A çã® CP/M ãæã£ãŠããªãã£ããããMZ80K ããŒãžã§ã³ãèªã¿èŸŒãããšããŸããããéå転ããŒã¿ã®ãã MZ80K ããŒããã£ã¹ã¯ã MZ80A ãã©ãŒãããã«å€æããå¿ èŠããããŸããã倿åŸã« CP/M ãèµ·åããããšããŸãããããã£ã¹ã¯ã³ã³ãããŒã©ãŒãªã©ã®éäºææ§ããããŸããããã®åŸ Micro Technologies ã® CP/M ã® MZ80B ãš MZ800 ããŒãžã§ã³ã調ã¹ãŸããããããããç°ãªããã£ã¹ã¯ãã©ãŒãããã䜿çšããŠãããæçµçã«ã¯ã«ã¹ã¿ã CP/M ãæ§ç¯ããŠç¬èªã® CBIOS ãäœæããã®ãæåã®ã¢ãããŒãã ãšå€æããŸããã
CBIOS
3 ã€ã®ã³ã³ããŒãã³ãã¯ãã¹ãŠãããããŒãã£ã¹ã¯ããããŒãã¹ãã©ãããããã¡ã¢ãªïŒMZ80K/A ã§ã¯ 0x9C00ïŒã«èªã¿èŸŒãŸããå¶åŸ¡ã CBIOS ã«æž¡ãããCBIOS ããã·ã³ãã»ããã¢ããããŠãã CCP ã«å¶åŸ¡ãæž¡ããŸããéåžžã®åäœæ¡ä»¶äžã§ã¯ãèªã¿èŸŒãŸããã¢ããªã±ãŒã·ã§ã³ã¯ BDOS ãåŒã³åºããŠãã³ã³ãœãŒã«ãžã®æžã蟌ã¿ãããŒå ¥åã®ååŸããã£ã¹ã¯ã¢ã¯ã»ã¹ãªã©ã®ãµãŒãã¹ãæç¢ºã«å®çŸ©ããã API ããå©çšããŸãããBDOS ãµãŒãã¹ãäžèŠãªå Žå㯠CBIOS ãçŽæ¥åŒã³åºããŠãã® API ã䜿çšããCCP+BDOS ã® RAM ã䜿çšããŠè¿œå ã®ããã°ã©ã ã¹ããŒã¹ã確ä¿ããããšãã§ããŸããã¢ããªã±ãŒã·ã§ã³ãå®äºãããšããã¯ã¿ãŒ 0x0000 ã«ãžã£ã³ãã㊠CCP+BDOS ã®åèªã¿èŸŒã¿ãå«ããŠã©ãŒã ã¹ã¿ãŒããéå§ãããŸãã
CP/M ã¯èªå·±ä¿®æ£/çµã¿èŸŒã¿å€æ°ã䜿çšãããã ROM ãžã®æ ŒçŽã«ã¯é©ããŠããŸããããCBIOS ã«ã€ããŠã¯è©±ãå¥ã§ããCBIOS ã ROM ã«é 眮ã㊠RAM ãå¢ããããšãå¯èœã§ãããŒãž ROM ãã³ã¯ãæã€ Rom Filing System ã«ã¢ã¯ã»ã¹ã§ããããšããããç§ã¯ãã®æ¹æ³ãæ¡çšããŸããã
CBIOS ãäœæããã«ã¯ã以äžã® API ã¡ãœãããæäŸããå¿ èŠããããŸãïŒ
| API ã¡ãœãã | 説æ |
|---|---|
| BOOT | ã³ãŒã«ãã¹ã¿ãŒããCCP ãåŒã³åºãåã«ãã¹ãŠã®ããŒããŠã§ã¢ãåæåããã |
| WBOOT | ãŠã©ãŒã ã¹ã¿ãŒããããŒããŠã§ã¢ã®å€æŽãå ã«æ»ããŠãã CCP ãåŒã³åºãåã« CCP+BDOS ãåèªã¿èŸŒã¿ããã |
| CONST | ã³ã³ãœãŒã«ã¹ããŒã¿ã¹ãããŒããŒãã®ããŒå ¥åãåŸ æ©äžãã©ããã確èªããã |
| CONIN | ã³ã³ãœãŒã«å ¥åãããŒããŒãããããŒãååŸããå©çšå¯èœã§ãªãå Žåã¯åŸ æ©ããã |
| CONOUT | ã³ã³ãœãŒã«åºåãç»é¢ã«æåãåºåããã |
| LIST | ãªã¹ãããã€ã¹åºåããªã¹ãããã€ã¹ïŒäŸïŒããªã³ã¿ãŒïŒã«æåãåºåããã |
| PUNCH | ãã³ãããã€ã¹åºåããã³ãããã€ã¹ïŒ70幎代ã«ã¯ãã³ãããŒããã«ãŒãã䜿ãããŠããïŒã«æåãåºåããã |
| READER | ãªãŒããŒå ¥åããªãŒããŒããã€ã¹ïŒäŸïŒçŽããŒãïŒããæåãå ¥åããã |
| HOME | çŸåšéžæãããŠãããã£ã¹ã¯ã®ãããããã©ã㯠0 ã«ç§»åããã |
| SELDSK | ãã£ã¹ã¯ãéžæ/æå¹åããã |
| SETTRK | 次ã®èªã¿æžãæäœã®ãã£ã¹ã¯ãã©ãã¯ãèšå®ããã |
| SETSEC | 次ã®èªã¿æžãæäœã®éžæããããã©ãã¯äžã®ãã£ã¹ã¯ã»ã¯ã¿ãŒãèšå®ããã |
| SETDMA | ããŒã¿ãèªã¿æžããããå Žæã®ãã£ã¹ã¯ã¡ã¢ãªã¢ãã¬ã¹ãèšå®ããã |
| READ | ãã£ã¹ã¯ã»ã¯ã¿ãŒãèªã¿åãã |
| WRITE | ãã£ã¹ã¯ã»ã¯ã¿ãŒã«æžã蟌ãã |
| LISTST | ãªã¹ãããã€ã¹ã¹ããŒã¿ã¹ããªã¹ãããã€ã¹ãæ°ããæåãåãå ¥ããæºåãã§ããŠãããã確èªããã |
| SECTRN | ã»ã¯ã¿ãŒå€æãç¹å®ã®ããŒããŠã§ã¢ãžã®é©å¿ããã£ã¹ã¯ãµãã·ã¹ãã ã®å¿çæ§åäžã®ããã®è«çããç©çã»ã¯ã¿ãŒãžã®å€æã |
CP/M ãæäŸããåºæ¬çãªæåå ¥åºåã¡ã«ããºã ã®äžã«å¿ èŠãªãããªãèŠä»¶ãšããŠãã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã¯é«åºŠãªç»é¢ãšããŒããŒãæ©èœãæäŸããã¹ããŒãã¿ãŒããã«ã CP/M ãã·ã³ã®åã«ããããšãæåŸ ããŠããŸããããã¯éåžž DEC VT52 ã VT100 ãªã©ã®ã¿ãŒããã«ã®åœ¢åŒã§ããMZ80A ã¯ç¬èªã®ç»é¢ãšããŒããŒããæã£ãŠããããããã®ã¹ããŒãæ©èœãäœæããå¿ èŠããããŸãã
CBIOS ãäœæããã«ã¯ã以äžã®ãã¡ãŒã ãŠã§ã¢ãµãã¢ãžã¥ãŒã«ãã³ãŒãã£ã³ã°ããå¿ èŠããããŸãïŒ
| ãµãã¢ãžã¥ãŒã« | 説æ |
|---|---|
| åºæ¬ç»é¢ I/O | ç»é¢ã«æåãé 眮ãããç»é¢ãã¯ãªã¢ãããªã©ã®äœã¬ãã«æ©èœã |
| é«åºŠãªç»é¢ I/O | 衚瀺åºåã®äœçœ®æ±ºããç»é¢ã®äžéšã®ã¯ãªã¢ã倪åãªã©ã®ç¹å¥å±æ§ã®ã€ã³ããªãžã§ã³ã¹ã |
| ããŒããŒã I/O | ããŒã³ãŒããã¹ãã£ã³ããŠè¿ããå¿ èŠã«å¿ã㊠ASCII ã«ãããã³ã°ããã |
| ãã£ã¹ã¯ I/O | è€æ°ã®ãã£ã¹ã¯ã»ã¯ã¿ãŒãèªã¿æžãããæ©èœãæäŸããã |
ãã¹ãŠã®æ©èœã¯ã¹ããŒã¹ãå¿ èŠãšãã以äžã®ããã«å²ãåœãŠãããŠããŸãïŒ
| ROM | ã¢ãã¬ã¹ | 説æ |
|---|---|---|
| 4K MROMïŒ0x0000 - 0x0FFF ããåé 眮ãããã¢ãã¿ãŒ ROMïŒ | 0xC000 - 0xCFFF | CBIOSïŒCP/M APIãåæåã«ãŒãã³ãROM ãã£ã¹ã¯ã³ã³ãããŒã©ãŒã«ãŒãã³ãå²ã蟌ã¿ã«ãŒãã³ïŒãæäŸã |
| 2K ããŒãž ROM | 0xE800 - 0xEFFFããã³ã¯ 8 | åºæ¬çãªãµãŠã³ããšã¡ããã£ãŒãRTCãããŒããŒããšãã«ããŒæ©èœã |
| 2K ããŒãž ROM | 0xE800 - 0xEFFFããã³ã¯ 9 | ç»é¢ I/O ãš ANSI ã¿ãŒããã«ããŒãµãŒã |
| 2K ããŒãž ROM | 0xE800 - 0xEFFFããã³ã¯ 10 | SD ã«ãŒãã³ã³ãããŒã©ãŒæ©èœã |
| 2K ããŒãž ROM | 0xE800 - 0xEFFFããã³ã¯ 11 | ãããããŒãã£ã¹ã¯ã³ã³ãããŒã©ãŒæ©èœã |
*CP/M ãã£ã¹ã¯ãã©ã€ã*
ãã©ã€ãã®é åºã¯ä»¥äžã®è¡šã«ç€ºãããŠããŸãïŒ
| ROM ãã©ã€ã # | ååš | 0 | 1 | 2 | ååš | 0 | 1 | 2 |
|---|---|---|---|---|---|---|---|---|
| ROM ãã©ã€ã | n/a |  | A | A,B | n/a |  | A | A,B |
| ãããããŒãã£ã¹ã¯ | ãã | A,B | B,C | C,D | ãªã |  |  |  |
| SD ã«ãŒã | ãã | C,D,E,F | D,E,F | E,F,G | ãã | A,B,C,D,E | B,C,D,E | C,D,E,F |
| SD ã«ãŒã | ãªã |  |  |  | ãã |  |  |  |
*æ©èœ*
æšæºç㪠BIOS æ©èœã«å ããŠã以äžã®æ©èœã CBIOS ã«è¿œå ãããŠããŸãã
- 50mS 粟床ã®ãªã¢ã«ã¿ã€ã ã¯ããã¯
- ãããã¡ãšèªåãªããŒããæã€å²ã蟌ã¿é§åããŒããŒã
- éåžžãCaps LockãShift Lock ã® 3 ã¢ãŒãããŒããã¯
- ANSI ã¿ãŒããã«æ©èœ
- 1.44Mã720Kã320K ãµã€ãºã®åã¿ãŒã²ããå¯èœãªãããããŒãã£ã¹ã¯ãã©ã€ã
- 240K ãµã€ãºã®åã¿ãŒã²ããå¯èœãª ROM ãã©ã€ãïŒèšå®ã§å€æŽå¯èœïŒ
- åã¿ãŒã²ããå¯èœãª SD ã«ãŒã 16MB ããŒããã£ã¹ã¯
- SHIFT+GRAPH+BREAK ã§ã¢ãã¿ãŒã«çµäº
CP/M ã®ãã«ã
ãããå®çŸããã«ã¯ããã€ãã®ããŒã«ãå¿ èŠã§ãçŸæç¹ã§ã¯ããªãæåã®ããã»ã¹ã§ãã
ãã¹
èªã¿ãããããããã以äžã®ççž®åã¯ãã®ç« ã®å¯Ÿå¿ãããã¹ãæããŠããŸãã
| ççž®å |  |
|---|---|
| [<ABS PATH>] | ãã®ãªããžããªãã·ã¹ãã ã«å±éããããã¹ã |
| <software> | [<ABS PATH>]/MZ80A_RFS/software |
| <roms> | [<ABS PATH>]/MZ80A_RFS/software/roms |
| <CPM> | [<ABS PATH>]/MZ80A_RFS/software/CPM |
| <tools> | [<ABS PATH>]/MZ80A_RFS/software/tools |
| <MZF> | [<ABS PATH>]/MZ80A_RFS/software/MZF |
| <MZB> | [<ABS PATH>]/MZ80A_RFS/software/MZB |
ããŒã«
Z80 Glass Assembler - ã¢ã»ã³ããªãã¡ã€ã«ããã·ã³ã³ãŒãã«å€æãã Z80 ã¢ã»ã³ãã©ãŒã
samdisk - ãã«ã OS ã³ãã³ãã©ã€ã³äœã¬ãã«ãã£ã¹ã¯æäœããŒã«ã
cpmtools - ãã«ã OS ã³ãã³ãã©ã€ã³ CP/M ãã£ã¹ã¯æäœããŒã«ã
CPMToolsGUI - Windows ããŒã¹ã® GUI CP/M ãã£ã¹ã¯æäœããŒã«ã
z88dk - Z80 CPU åãã®åªãã C éçºãããã
sdcc - Z80 ãã¿ãŒã²ããã®äžã€ãšããå¥ã®åªãã Small Device C ã³ã³ãã€ã©ãŒãz88dk ã¯ãã®ããŒã«ã® Z80 åã匷åçãããã±ãŒãžå
ã«æäŸããŠããŸãã
ãœãããŠã§ã¢
ãœãããŠã§ã¢ã€ã¡ãŒãžã®ãã«ãã¯ããªããžããªãã¯ããŒã³ããæäŸãããŠããã·ã§ã«ã¹ã¯ãªãããšãã€ããªãããã€ãå®è¡ããããšã§è¡ããŸãã
| ã¹ã¯ãªãã | 説æ |
|---|---|
| assemble_cpm.sh | CPM ãã€ããªãRFS çµç±ã§èªã¿èŸŒãããã® CPM MZF ãã©ãŒãããã¢ããªã±ãŒã·ã§ã³ãCPM ROM ãã©ã€ã 0 ãš 1 ããã«ãããã·ã§ã«ã¹ã¯ãªãã |
| assemble_rfs.sh | Rom Filing System ROM ã€ã¡ãŒãžããã«ããã bash ã¹ã¯ãªããã |
| assemble_roms.sh | SA-1510 ã¢ãã¿ãŒ ROM ãªã©ã®æšæº MZ80A ROM ããã¹ãŠãã«ããã bash ã¹ã¯ãªããã |
| make_roms.sh | 512KByte ãã©ãã·ã¥ RAM ã«ããã°ã©ãã³ã°ããã®ã«é©ãã RFS ROM ããã«ããã bash ã¹ã¯ãªããããããã®ã€ã¡ãŒãžã«ã¯ãã³ã¯åããã RFS ROMãSA-1510 ãªã©ã®åçš®ã·ã¹ãã ROMãRFS ã§èªã¿èŸŒãŸãããã¹ãŠã® MZF ããã°ã©ã ãå«ãŸããŸãã |
| make_cpmdisks.sh | SD ã«ãŒããŸã㯠ROM ãã©ã€ãã®ããŒåœ¢åŒã€ã¡ãŒãžãšããŠäœ¿çšãã CPM ãã£ã¹ã¯ã»ãããããã³ CPC Extended Disk FormatïŒãããããŒãã£ã¹ã¯ãšãã¥ã¬ãŒã¿ãŒãŸãã¯ç©çã¡ãã£ã¢ãžã®ã³ããŒã«äœ¿çšïŒããã«ããã bash ã¹ã¯ãªããã |
| make_sdcard.sh | RFS ã€ã¡ãŒãžãšããã€ãã® CPM ãã£ã¹ã¯ãã©ã€ããçµã¿åããã SD ã«ãŒãã€ã¡ãŒãžãäœæãã bash ã¹ã¯ãªããããã®ã€ã¡ãŒãžã¯ SD ã«ãŒãã«ãã€ããªã³ããŒãããRFS SD ã«ãŒããªãŒããŒã«åãä»ããããŸãã |
| mzftool.pl | MZF ã€ã¡ãŒãžãäœæ/æœåº/æäœãã Perl ã¹ã¯ãªããã |
| processMZFfiles.sh | MZF ããã°ã©ã ã®ã»ããã Rom Filing System ROM ã§ã®äœ¿çšã«é©ããã»ã¯ã¿ãŒåã€ã¡ãŒãžã«å€æãã bash ã¹ã¯ãªããã |
| sdtool | src/tools ãªããžããªã§äœæããããã€ããªã§ãRFS SD ã«ãŒãã€ã¡ãŒãžãäœæãããã£ã¬ã¯ããªãäœæã㊠MZF/ãã€ããªã¢ããªã±ãŒã·ã§ã³ããã©ã€ãã€ã¡ãŒãžã«è¿œå ããŸãã |
CP/M ã·ã¹ãã 㯠4 ã€ã®éšåã§ãã«ããããŸãïŒ
1. CCPãBDOSãCBIOS ã¹ã¿ããå«ã cpm22.binã
2. ãã©ã€ããªãœãŒã¹ã 4K ROM ãš 4 ã€ã®ãã³ã¯åããã 2K ROM ã«ãããã³ã¯åããã CBIOSã
ããã㯠RFS ãã³ã¯åã¢ãã¿ãŒ ROM ãšãã³ã¯åãŠãŒã¶ãŒ ROM ãžã®è¿œå çšã«çæãããŸãã
3. ä»»æã® CP/M ãã©ã€ãæåã«å²ãåœãŠãããæå€§ 2 ã€ïŒçŸåšïŒã®èªã¿åãå°çš CP/M ROM ãã©ã€ãã
4. 1. ãš 3. ã§çæããããã€ããªããå¥ã®ããã°ã©ã ãšããŠçŽæ¥ Rom Filing System ã«
远å ããã®ã«é©ããã»ã¯ã¿ãŒå MZF ã€ã¡ãŒãžãžã®å€æã
äžèšã®ãã¹ãŠã¯ assemble_cpm.sh bash ã¹ã¯ãªããã«ãšã³ã³ãŒããããŠããã以äžã®ããã«å®è¡ã§ããŸãïŒ
cd <software>
tools/assemble_cpm.sh
ãã®ã¹ã¯ãªããã¯çŸåš 1 ã€ã®èªã¿åãå°çš CPM ROM ãã©ã€ããçæããããã«èšå®ãããŠããŸãã2 ã€ç®ã® CPM ROM ãã©ã€ãã远å ããã«ã¯ã以äžã®æé ã«åŸã£ãŠãã ããïŒ
1. <tools>/make_cpmdisks.sh ã¹ã¯ãªãããç·šéããŠå€æ°ã倿ŽïŒ
from BUILDCPMLIST="cpm22 CPM_RFS_1"
to BUILDCPMLIST="cpm22 CPM_RFS_1 CPM_RFS_2"
倿°ã倿ŽïŒ
from SOURCEDIRS="CPM_RFS_[1] CPM[0-9][0-9]_* CPM_MC_5 CPM_MC_C? CPM_MC_D? CPM_MC_E? CPM_MC_F? CPM[0-9][0-9]_MZ800*" to
to SOURCEDIRS="CPM_RFS_[1-2] CPM[0-9][0-9]_* CPM_MC_5 CPM_MC_C? CPM_MC_D? CPM_MC_E? CPM_MC_F? CPM[0-9][0-9]_MZ800*"
2. ãã£ã¬ã¯ããªãäœæïŒååšããªãå ŽåïŒïŒ
<CPM>/CPM_RFS_2
3. ROM ã«é
眮ããå¿
èŠãª CPM ãã¡ã€ã«ã§ãã£ã¬ã¯ããªãåããã
4. make_cpmdisks.sh ã¹ã¯ãªãããå®è¡ãããã以äžã«ç€ºãã³ãã³ãã·ãŒã±ã³ã¹ã®äžéšãšããŠ
ã€ã¡ãŒãžããã«ãããã
CPM ã䜿çšããã«ã¯ã2Ã512KByte ãã©ãã·ã¥ RAM ã«ããã°ã©ãã³ã°ã§ããã¢ãã¿ãŒ ROM ãš USERROM ã€ã¡ãŒãžãäœæããå¿ èŠããããŸãã以äžã®ã³ãã³ãã§ CPM ã RFSãROMãã¢ããªã±ãŒã·ã§ã³ãšãšãã«ãã¹ãŠãã«ãããŸãïŒ
cd <software>
tools/assemble_cpm.sh
tools/assemble_rfs.sh
tools/assemble_roms.sh
tools/make_cpmdisks.sh
tools/make_roms.sh
tools/make_sdcard.sh
äžèšã³ãã³ãã®åºå㯠ROM ã€ã¡ãŒãž <roms>/MROM_256.bin ãš <roms>/USER_ROM.256.bin ã§ã512KByte ãã©ãã·ã¥ RAM ã«ãã©ãã·ã¥ã㊠RFS ã¢ããã¿ãŒã®ãœã±ããã«åãä»ããå¿ èŠããããŸãã
CPM ãã£ã¹ã¯ã€ã¡ãŒãžã¯ <CPM>/1M44/RAWïŒããŒåœ¢åŒïŒãŸã㯠<CPM>/1M44/DSKïŒCPC Extended ãã©ãŒãããïŒã«ãããŸãããããã®ã€ã¡ãŒãžã¯ <CPM> ã®ãã£ã¬ã¯ããªããäœæãããCPM* ã§å§ãŸãåãã£ã¬ã¯ããªã¯ 1 ã€ã® 1.44MB ãã©ã€ãã€ã¡ãŒãžã«ããã±ãŒãžãããŸãããŸãã察å¿ãããã£ã¬ã¯ããªã®ä»ã®ãã¹ãŠã®ãµããŒããã£ã¹ã¯ãã©ãŒãããã®ã€ã¡ãŒãžã«ãããã±ãŒãžãããŸãïŒäŸïŒ16MB SD ã«ãŒããã©ã€ãã€ã¡ãŒãžçšã® <CPM>/SDC16MïŒã
SD ã«ãŒãã€ã¡ãŒãžã¯ <roms>/SHARP_MZ80A_RFS_CPM_IMAGE_1.img ã«ããã<roms>/SHARP_MZ80A_RFS_IMAGE_1.img ã§å§ãŸããäžèšã®ããã« <CPM>/SDC16M/RAW ã«æ ŒçŽããã 7 ã€ã® CPM ãã©ãŒããããã©ã€ãã€ã¡ãŒãžãç¶ããŸãããããã®ã€ã¡ãŒãžã¯ <CPM> ã®ãã£ã¬ã¯ããªãããã«ããããŸãããmake_cpmdisks.sh ã¹ã¯ãªããã«ããŒãã³ãŒããããŠæçµã€ã¡ãŒãžã«æåã§è¿œå ãããŸãã
ROM ãã©ã€ãã«æ ŒçŽãããã¢ããªã±ãŒã·ã§ã³ã¯ <MZF> ãã£ã¬ã¯ããªã«ãããŸãããã®ãã£ã¬ã¯ããªã«å¿ èŠãªã¢ããªã±ãŒã·ã§ã³ãã³ããŒãã以äžã®ã³ãã³ããå®è¡ããŠã»ã¯ã¿ãŒäžžãã€ã¡ãŒãžã«å€æã㊠<MZB> ãã£ã¬ã¯ããªã«ä¿åããŸãïŒ
cd <software>
tools/processMSFfiles.sh
ROM ã«ãã«ããããå®éã®ã¢ããªã±ãŒã·ã§ã³ã¯ <tools>/make_roms.sh ã¹ã¯ãªããã§éžæãããŸãããã®ã¹ã¯ãªããã¯å¿ èŠãªãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ããªã¹ãããã¹ããŒã¹ãèš±ãéã ROM ã«ããã¯ããŸããã¢ããªã±ãŒã·ã§ã³ã ROM ã«ç¢ºå®ã«å«ããã«ã¯ããªã¹ãã®å é ã«è¿œå ããŸãïŒ.MZF æ¡åŒµåãªãã®ãã¡ã€ã«åã®ã¿ïŒïŒ
ãã¡ã€ã« <tools>/make_roms.sh ãç·šé
è¡ãæ¢ã: ROM_INCLUDE=
ãã®è¡ã®äžã«ããã©ãŒããã: ROM_INCLUDE+="${MZBPATH}/<YOUR APPLICATION>.${SECTORSIZE}.bin" ã§ã¢ããªã±ãŒã·ã§ã³ã远å
äŸ: ROM_INCLUDE+="${MZB_PATH}/A-BASIC_SA-5510.${SECTORSIZE}.bin:"
ãã¡ã€ã«ãä¿åããŠäžèšã®ã³ãã³ããå®è¡ã㊠MonitorROM ãš USERRROM ããã«ãããã
ãã£ã¹ã¯ãã©ãŒããã
ããã£ãããšã§ãããCP/M ãã£ã¹ã¯ãã©ãŒãããã¯æ°çŸããããSharp ã·ãªãŒãºã ãã§ããã·ã³ããšã« 2ã3 çš®é¡å®è£ ãããŠããŸãããã® CP/M å®è£ ã«äœ¿çšãããã©ãŒããããæ±ºå®ããã«ããããæ¢åã®ãã©ãŒãããã調ã¹ãŸããããªãªãžãã«ã® Sharp MZ80A ãã£ã¹ã¯ãå ¥æã§ãããå転ãããéæšæºãã©ãŒãããã䜿çšããŠããããšãMZ80B ã MZ80A ã«äŒŒãŠãã倧容éã§ããããšãMZ800 ããã€ããªããã§ããããšãMZ80K ãäœå®¹éã§ããããšããã1.44MBã720K ã® 3.5â ãããããŒã®æšæºãã©ãŒãããïŒSharp MZ80A ãã£ã¹ã¯ãšåãç©çãã©ãŒãããïŒãš ROM ããŒã¹ã® 240K ROM ãã©ã€ãã䜿çšããããšã«ããŸããã
䜿çšããŠãããã©ãŒãããã¯ä»¥äžã® diskdefs å®çŸ©ã䜿çšã㊠cpmtools ã§æäœã§ããŸãã以äžã cpmtools ãŸã㯠CPMToolsGUI ã® diskdefs ãã¡ã€ã«ã«è¿œå ããŠäœ¿çšããŠãã ããïŒ
# MZ80A çš 320K ãã£ã¹ã¯ - MZ800 ãšåããã©ãŒãããã ã
# ã·ãªã³ããŒãåäžãªæ¹æ³ã§å®è£
ïŒ1 cyl = 1 track à 2(heads)ã
# MZ800 㯠160 ãã©ãã¯ã80 à ããã 1 0->79ãæ¬¡ã« 80 à ããã 2 80->159 ãšããŠå®è£
ïŒã
diskdef MZ80A-A
seclen 256
tracks 40
sectrk 32
blocksize 2048
maxdir 64
skew 0
boottrk 1
os 2.2
end
# MZ80A çšæšæº 1.44Mb ãããããŒãã©ãŒããã
diskdef MZ80A-1440
seclen 512
tracks 80
sectrk 36
blocksize 2048
maxdir 128
skew 0
boottrk 0
os 2.2
end
# MZ80A çšæšæº 720K ãããããŒãã©ãŒãããã
diskdef MZ80A-720
seclen 256
tracks 80
sectrk 36
blocksize 2048
maxdir 128
skew 0
boottrk 0
os 2.2
end
# 240K Rom Filing System ROM ãã©ã€ãã€ã¡ãŒãžã
diskdef mz80a-rfs
seclen 128
tracks 15
sectrk 128
blocksize 1024
maxdir 32
skew 0
boottrk 0
os 2.2
end
# 16MB åºå®ãã£ã¹ã¯ SD ã«ãŒãã€ã¡ãŒãžã
diskdef MZ80A-SDC16M
seclen 512
tracks 1024
sectrk 32
blocksize 8192
maxdir 512
skew 0
boottrk 0
os 2.2
end
| å®çŸ© | MZ80A 320K | Rom Filing System | 1.44MB 3.5â | 720K 3.5â | 16MB SD ã«ãŒãã€ã¡ãŒãž |
| SPT | 64 | 128 | 144 | 72 | 128 |
| BSH | 4 | 3 | 4 | 4 | 6 |
| BLM | 15 | 7 | 15 | 15 | 63 |
| EXM | 1 | 0 | 0 | 0 | 3 |
| DSM | 155 | 240 | 719 | 359 | 2047 |
| DRM | 63 | 31 | 127 | 127 | 511 |
| AL0 | 128 | 128 | 192 | 192 | 192 |
| AL1 | 0 | 0 | 0 | 0 | 0 |
| CKS | 16 | 8 | 32 | 32 | 0 |
| OFF | 1 | 0 | 0 | 0 | 0 |
CP/M ãã£ã¹ã¯ã®äœæ
ãã® CP/M å®è£ ã§ Sharp MZ80A äžã§äœ¿çšã§ãã CP/M ãã£ã¹ã¯ãäœæããã«ã¯ãäžèšã®å®çŸ©ã cpmtools ã® diskdefs ãã¡ã€ã«ã«è¿œå ããå¿ èŠããããŸãã远å åŸã\<CPM\>/BLANKFD ã«ãã空çœã€ã¡ãŒãžã® 1 ã€ãæ°ããååã«ã³ããŒããŠã¿ãŒã²ãããã£ã¹ã¯ãšããŠäœ¿çšãããããã£ã¹ã¯å®çŸ©ã䜿çšã㊠CPMTools å ãããã£ã¹ã¯ãäœæããŸããæ¬¡ã«ãCPMToolsGUI ã§ã¯ãã©ãã°ã¢ã³ãããããã§æ°ãããã£ã¹ã¯ã«å¿ èŠãªããã°ã©ã ã远å ããŸãã
æ°ããããŒã® CP/M ã€ã¡ãŒãžããããããŒãšãã¥ã¬ãŒã¿ãŒãŸãã¯å®éã®ãããããŒãã£ã¹ã¯ãã©ã€ãã§äœ¿çšããã«ã¯ãããŒã€ã¡ãŒãžãã»ãšãã©ã®ãããããŒãã£ã¹ã¯ããŒã«ããããããŒã«èªã¿æžãã§ãããã©ãŒãããã«å€æããå¿ èŠããããŸããLotharek ãããããŒãšãã¥ã¬ãŒã¿ãŒã®å Žåã¯ãHxCFloppyEmulator v2.2.2.1 ããŒã«ã䜿ã£ãŠ Load ãš Export to HFE ã§å®éã®ãããããŒãæš¡å£ããé©å㪠SD ã€ã¡ãŒãžãçæãããŸãã
ã€ã¡ãŒãžã倿ããã«ã¯ä»¥äžã®ããããã䜿çšããŠãã ããïŒ
1.44MB ãã©ã€ãçšïŒ
./samdisk copy <RAW IMAGE FILE, ie. CPM00_SYSTEM.RAW> <DSK IMAGE FILE, ie.CPM00_SYSTEM.DSK> --cyls=80 --head=2 --gap3=78 --sectors=36 --interleave=4
Samdisk ã¯ãã¡ã€ã«ã®ãµã€ãºïŒ1474560 ãã€ãïŒãããã©ãŒããããèªåèªèããŸãã
720K ãã©ã€ãçšïŒ
./samdisk copy <RAW IMAGE FILE, ie. CPM00_SYSTEM.RAW> <DSK IMAGE FILE, ie.CPM00_SYSTEM.DSK> --cyls=80 --head=2 --gap3=78 --sectors=36 --size=2 --interleave=4
Samdisk ã¯ãã¡ã€ã«ã®ãµã€ãºïŒ737280 ãã€ãïŒãããã©ãŒããããèªåèªèããŸãã
MZ80A 320K ãã©ã€ãçšïŒ
./samdisk copy CPM00_320K_SYSTEM.RAW CPM00_320K_SYSTEM.DSK --cyls=40 --gap3=78 --head=2 --sectors=16
Samdisk ã¯ãã¡ã€ã«ã®ãµã€ãºïŒ327680 ãã€ãïŒãããã©ãŒããããèªåèªèããŸãã
RFS ROM ãã©ã€ãã¯å€æäžèŠã§ããRFS æ©èœã¯ããŒã€ã¡ãŒãžãåæãšããŠããŸãã
泚æ: Samdisk v4 ã¯äœ¿ããªãã§ãã ããããã£ã¹ã¯ã®å
é ã«ã©ã³ãã ãªã»ã¯ã¿ãŒãé
眮ãããã°ããããŸãã
ãã®ãã°ã«ããäœæéãã®ãããã°æéã倱ãããŸãããv3.8.8 ã䜿çšããããšããå§ãããŸãã
äžèšã® samdisk ã³ãã³ã㯠Amstrad CPC Extended DSK ãã©ãŒãããã€ã¡ãŒãžãäœæããŸãããã㯠Lotharek HxCFloppyEmulator ãŸãã¯ç©çãããããŒã«æžã蟌ãããŒã«ã§èªã¿æžãã§ããŸãã
MZ80A CP/M ãã£ã¹ã¯ã®æœåº
ãªã³ã©ã€ã³ã§å ¥æå¯èœãªã»ãšãã©ã® MZ-80A CP/M ãã£ã¹ã¯ã€ã¡ãŒãžã¯ EDSKïŒAmstrad CPC Extended DSKïŒãã©ãŒãããã§ãããã£ã¹ã¯ãžãªã¡ããªã¯ 40 ã·ãªã³ããŒã2 ãããããã©ãã¯ããã 16 ã»ã¯ã¿ãŒãã»ã¯ã¿ãŒããã 256 ãã€ãïŒåèš 320KBïŒã§ãã
EDSK ã€ã¡ãŒãžããã©ãã RAW ã€ã¡ãŒãžã«å€æããã«ã¯ samdisk ã䜿çšããŠãã ããïŒ
samdisk copy <MZ80A DISK NAME>.DSK <MZ80A DISK NAME>.RAW --cyls=40 --head=2 --sectors=16 --size=256
以äžã®ã³ãã³ããå®è¡ã㊠RAW ã€ã¡ãŒãžã®åãã€ããå転ãããMZ-80A ã®å転ãã©ãŒãããã CPMTools ãåŠçã§ããæšæºããŒã¿ã«å€æããŸãïŒ
python3 -c "import sys; sys.stdout.buffer.write(bytes(~b & 0xFF for b in open('<MZ80A DISK NAME>.RAW','rb').read()))" > <MZ80A DISK NAME>_normal.RAW
CPMTools ã§ MZ80A-A diskdefïŒäžèšã®ãã£ã¹ã¯å®çŸ©ã»ã¯ã·ã§ã³ã§å®çŸ©ïŒã䜿çšããŠãåŠçãããã€ã¡ãŒãžã®ãã¡ã€ã«ãäžèŠ§è¡šç€ºã»æœåºããŸãïŒ
# ãã£ã¹ã¯äžã®ãã¡ã€ã«ãäžèŠ§è¡šç€º
cpmls -f MZ80A-A <MZ80A DISK NAME>_normal.RAW
# ãã¹ãŠã®ãã¡ã€ã«ãããŒã«ã«ãã£ã¬ã¯ããªã«ã³ããŒ
cpmcp -f MZ80A-A <MZ80A DISK NAME>_normal.RAW 0:*.* /output/directory/
MZ80K CP/M ãã£ã¹ã¯ã®æœåº
01h ãšããã«ç¶ã ASCII æåå IPLPRO ã§èå¥ãããŸãã
MZ-80K CP/M ãã£ã¹ã¯ã€ã¡ãŒãžã¯éåžž EDSK ãŸãã¯ããŒåœ¢åŒã§å ¥æã§ããŸãããã£ã¹ã¯ãžãªã¡ããªã¯ 40 ã·ãªã³ããŒã1 ãããããã©ãã¯ããã 18 ã»ã¯ã¿ãŒãã»ã¯ã¿ãŒããã 128 ãã€ãïŒçŽ 90KBïŒã§ãã
EDSK ãœãŒã¹ããããŒã€ã¡ãŒãžãæœåºããã«ã¯ samdisk ã䜿çšããŠãã ããïŒ
samdisk copy <MZ80K DISK NAME>.DSK <MZ80K DISK NAME>.RAW --cyls=40 --head=1 --sectors=18 --size=128
# ãã¡ã€ã«ãäžèŠ§è¡šç€ºïŒdiskdef åã MZ-80K diskdef ãšã³ããªãŒã«åãããŠèª¿æŽïŒ
cpmls -f mz80k <MZ80K DISK NAME>.RAW
# ãã¹ãŠã®ãã¡ã€ã«ãæœåº
cpmcp -f mz80k <MZ80K DISK NAME>.RAW 0:*.* /output/directory/
MZ80B CP/M ãã£ã¹ã¯ã®æœåº
03h ãšããã«ç¶ã IPLPRO ã§èå¥ãããMZ-80AïŒ01hïŒã MZ-80KïŒ01hïŒãšåºå¥ãããŸãã
MZ-80B ã®å®¹é㯠MZ-80A ãããã倧ããã40 ã·ãªã³ããŒã2 ãããããã©ãã¯ããã 18 ã»ã¯ã¿ãŒãã»ã¯ã¿ãŒããã 256 ãã€ãïŒçŽ 368KBïŒã䜿çšããŸããã»ãšãã©ã®å ¥æå¯èœãªãã£ã¹ã¯ã€ã¡ãŒãžã¯ EDSK ãã©ãŒãããã§ãã
EDSK ã€ã¡ãŒãžããã©ãã RAW ã€ã¡ãŒãžã«å€æããã«ã¯ samdisk ã䜿çšããŠãã ããïŒ
samdisk copy <MZ80B DISK NAME>.DSK <MZ80B DISK NAME>.RAW --cyls=40 --head=2 --sectors=18 --size=256
MZ-80A ãšåæ§ã®ãã€ãå転ãé©çšããŠå転ããŒã¿ãæšæºãã©ãŒãããã«å€æããŸãïŒ
python3 -c "import sys; sys.stdout.buffer.write(bytes(~b & 0xFF for b in open('<MZ80B DISK NAME>.RAW','rb').read()))" > <MZ80B DISK NAME>_normal.RAW
# ãã¡ã€ã«ãäžèŠ§è¡šç€ºïŒdiskdef åã MZ-80B diskdef ãšã³ããªãŒã«åãããŠèª¿æŽïŒ
cpmls -f mz80b <MZ80B DISK NAME>_normal.RAW
# ãã¹ãŠã®ãã¡ã€ã«ãæœåº
cpmcp -f mz80b <MZ80B DISK NAME>_normal.RAW 0:*.* /output/directory/
MZ800 CP/M ãã£ã¹ã¯ã®æœåº
samdisk ã䜿çšã㊠EDSKïŒAmstrad CPC ãã·ã³çšã«äœæããã Extended DSK ãã©ãŒããããã»ãšãã©ã® MZ800 ãã£ã¹ã¯ã¯ãã®ãã©ãŒãããã®ããã§ãïŒã RAW ã€ã¡ãŒãžã«å€æããŸãã
samdisk copy <MZ800 DISK NAME>.DSK <MZ800 DISK NAME>.RAW --cyls=40 --head=2 --sectors=8 --size=256
äžèšã§ååŸãã RAW ãã©ãŒãããã®ãã£ã¹ã¯ã CPMTools ã§èªã¿åãã圢åŒã«å€æããããã«ä»¥äžã® bash ã³ãã³ããå®è¡ããŸãã
mv <MZ800 DISK NAME>.RAW workingfile.raw
> total
dd if=workingfile.raw of=total count=8192 bs=1
for i in $(seq 8192 8192 327680); do
dd if=workingfile.raw of=blob skip=$i bs=1 count=4096
cat blob >> total
echo $i
done
for i in $(seq 12288 8192 327680); do
dd if=workingfile.raw of=blob skip=$i bs=1 count=4096
cat blob >> total
echo $i
done
mv total <MZ800 DISK NAME>.RAW
åŠçããã RAW ã€ã¡ãŒãžã®ããŒã¿ãèªã¿åãã«ã¯ä»¥äžã® diskdefs å®çŸ©ãå¿ èŠã§ãã
# MZ800 CP/M ããŒããã£ã¹ã¯ã®å®çŸ©ãäºçŽ
# ãã©ãã¯ã¯å転ããŒã¿ãã©ãŒãããã§ãã CPM Tools ã§ã¯ã¹ããããããŸãã
diskdef mz800-BOOT
seclen 256
tracks 80
sectrk 16
blocksize 2048
maxdir 64
skew 0
boottrk 1
os 2.2
end
# MZ800 CP/M ããŒã¿ãã£ã¹ã¯ã®å®çŸ©ãäºçŽãã©ãã¯ãªãã
diskdef mz800-DATA
seclen 256
tracks 80
sectrk 16
blocksize 2048
maxdir 64
skew 0
boottrk 0
os 2.2
end
CP/M ã¢ãŒã«ã€ã
CP/M ã¢ãŒã«ã€ãã¯ãã¡ã€ã«ã®ä¿å/ã¢ãŒã«ã€ãã«ã¯é©åãªå Žæã§ã¯ãªããã Gitea ããåé€ããŸãããå¿ èŠãªå Žåã¯zip ãã¡ã€ã«ãããŠã³ããŒãããŠãªããžããªã® <repo>/software ãã£ã¬ã¯ããªã«è§£åããŠãã ããã
ã¢ãŒã«ã€ãå ã®ãã¡ã€ã«ã¯å³éžãããããã°ã©ã ã§ãæ§ã 㪠CP/M ã¢ãŒã«ã€ãããéããããåœåèŠå CPM[0-9[0-9]_<Contents> ã®ãã£ã¬ã¯ããªã«æŽçãããŠããŸãããŸãïŒã¢ãŒã«ã€ããæŽçãã圌ã®äœæ¥ã«é©åãªã¯ã¬ãžãããšèäœæš©ãä»ããŠïŒGrant Searle ã® MultiComp ã³ã³ãã¥ãŒã¿ãŒïŒè€æ°ã®ã³ã³ãã¥ãŒã¿ãŒã 1 ã€ã«ããŸãã¯è€æ°ã® CPU ã¿ã€ããæã¡ããã®ã¢ãŒãã® 1 ã€ã CP/M ãå®è¡ããïŒããã®ã¢ãŒã«ã€ããå«ãŸããŠããŸããGrant ã®ã¢ãŒã«ã€ãã¯åªããŠãããMZ80A ã§ CP/M ã䜿çšããããã®çæ³çãªåºç€ãšãªããŸãã
3.5â ãã©ã€ããŸãã¯ãããããŒãšãã¥ã¬ãŒã¿ãŒã§ã®äœ¿çšã«é©ãã 1.4MB ãããããŒã€ã¡ãŒãžã®ã»ããã«ã¢ãŒã«ã€ãããã«ãããã«ã¯ã以äžã®ã³ãã³ããå®è¡ããŸãïŒ
cd <software>
tools/make_cpmdisks.sh
ãã£ã¹ã¯ã¯ãã£ã¬ã¯ã㪠<CPM>/1M44/DSK ã«äœæãããŸãã
ãã®ã¹ã¯ãªããã¯ã¢ãŒã«ã€ãã®çµã¿åããã䜿çšã㊠16MB SD ã«ãŒããã©ã€ãã€ã¡ãŒãžããã«ãããŸãããã®çµã¿åããã¯ã¹ã¯ãªããå ã«ããŒãã³ãŒããããŠããŸãã
CP/M ããã¥ã¢ã«
| ããã¥ã¢ã« | 説æ |
|---|---|
| ãŠãŒã¶ãŒããã¥ã¢ã« | CP/M v2.2 ãŠãŒã¶ãŒããã¥ã¢ã«ã |
| SID | ã·ã³ããªãã¯åœä»€ãããã¬ãŒãŠãŒã¶ãŒã¬ã€ãã |
| ED | ãšãã£ã¿ãŒãŠãŒã¶ãŒã¬ã€ãã |
| MAC | ãã¯ãã¢ã»ã³ãã©ãŒãŠãŒã¶ãŒã¬ã€ãã |
| ASM | Z80/8080 ã¢ã»ã³ãã©ãŒãŠãŒã¶ãŒã¬ã€ãã |
| DDT | åçãããã°ããŒã«ãŠãŒã¶ãŒã¬ã€ãã |