SSブログ
English Version

CP/M-68K シミュレータ [68K]

 「3チップ構成Pic24CPMマイコン(CP/M起動までの作業まとめ」の記事に3チップ構成のワンボードマイコンで CP/M-80 を動作させる手順を書きましたが、CP/M系はソフトの入手性がいいので他の CP/M にも興味が沸き、CP/M-68K Simulatorのwebページの情報を参考に CP/M-68K のシミュレータを動かしてみました。

 MusashiというLinux上で動く MC68000 のエミュレータを使ってCP/M-68Kを動作させているとのことです。

 このCP/M-68KシミュレータはWindows対応ではないですが、Windows10であればWSL(Windows Subsystem for Linux)が使えるので以前のように VM上でLinuxを動かしたりCygwinを入れたりしなくてもWSL上で簡単に動かすことができます。

 動作させるまでの手順を簡単にメモしておきます。
  1. Linux環境の準備
     Windows10であれば上記のようにWSLでLinux環境を使えるようになります。
     WSLの設定自体はネット上に豊富に情報があるので(例えばここ)、そちらを参照してください。
     Linux自体も選択肢がありますが私はUbuntsuを導入しています。
     Ubuntsuであれば"sudo apt install gcc"などのコマンドでCコンパイラ環境の導入も簡単です(後述のmakeを起動すると何が足りないか表示されるのでそれを参考に必要なモジュールをインストールする)。

  2. ソースの準備
     上記のCP/M-68K Simulatorのページのリンク先からMusashiCP/M-68K Simulatorのソースファイルをダウンロードします。
     それぞれのファイルを解凍してソースを一つのフォルダにまとめます。
     フォルダ内には下記のファイルが入った状態になります。

    ビルド前のディレクトリの状態
    2018/07/21 17:23 <DIR> . 2018/07/21 17:21 <DIR> .. 2014/04/08 07:36 6,634 m68kconf.h 2001/01/30 09:37 37,535 m68kcpu.c 2001/01/30 09:49 60,715 m68kcpu.h 2001/02/03 10:34 99,849 m68kdasm.c 2001/02/03 11:31 44,972 m68kmake.c 2001/01/29 08:52 13,019 m68k.h 2001/01/29 13:07 225,370 m68k_in.c 2014/04/22 17:36 32,768 simbios.bin 2014/04/22 17:36 5,396 simbios.s 2018/02/05 18:53 21,402 cpmsim.c 2014/04/27 14:07 16,777,216 diskc.cpm.fs 2014/04/17 09:01 1,334 makefile 2014/04/08 07:22 497 sim.h 2018/07/21 17:23 <DIR> obj


  3. CP/M-68Kシミュレータのビルド
     Windows上でLinuxを起動した状態でmakeします。
     WSLの機能によりWindowsのドライブはLinux環境内では /mnt ディレクトリの下にマウンドされた状態に見えます。
     Linux環境で上記のソースを入れたディレクトリに移動した状態でmakeを実行します。

    ビルドの状況
    skyriver@Dospar:/mnt/c/sat/files/src/CPM/CPM68K/BuildTest$ ll total 17092 drwxrwxrwx 1 skyriver skyriver 4096 Jul 21 20:41 ./ drwxrwxrwx 1 skyriver skyriver 4096 Jul 21 18:15 ../ -rwxrwxrwx 1 skyriver skyriver 21402 Feb 5 18:53 cpmsim.c* -rwxrwxrwx 1 skyriver skyriver 16777216 Apr 27 2014 diskc.cpm.fs* -rwxrwxrwx 1 skyriver skyriver 6634 Apr 8 2014 m68kconf.h* -rwxrwxrwx 1 skyriver skyriver 37535 Jan 30 2001 m68kcpu.c* -rwxrwxrwx 1 skyriver skyriver 60715 Jan 30 2001 m68kcpu.h* -rwxrwxrwx 1 skyriver skyriver 99849 Feb 3 2001 m68kdasm.c* -rwxrwxrwx 1 skyriver skyriver 147816 Jul 21 18:38 m68kdasm.o* -rwxrwxrwx 1 skyriver skyriver 13019 Jan 29 2001 m68k.h* -rwxrwxrwx 1 skyriver skyriver 225370 Jan 29 2001 m68k_in.c* -rwxrwxrwx 1 skyriver skyriver 44972 Feb 3 2001 m68kmake.c* -rwxrwxrwx 1 skyriver skyriver 1334 Apr 17 2014 makefile* drwxrwxrwx 1 skyriver skyriver 4096 Jul 21 20:41 obj/ -rwxrwxrwx 1 skyriver skyriver 32768 Apr 22 2014 simbios.bin* -rwxrwxrwx 1 skyriver skyriver 5396 Apr 22 2014 simbios.s* -rwxrwxrwx 1 skyriver skyriver 497 Apr 8 2014 sim.h* skyriver@Dospar:/mnt/c/sat/files/src/CPM/CPM68K/BuildTest$ make gcc -Wall -O2 -c -Iobj -I. cpmsim.c -o obj/sim.o cpmsim.c: In function ‘MC6850_data_write’: cpmsim.c:338:3: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result [-Wunused-result] write(STDOUT_FILENO, &ch, 1); ^ cpmsim.c: In function ‘read_fig_track’: cpmsim.c:761:3: warning: ignoring return value of ‘read’, declared with attribute warn_unused_result [-Wunused-result] read(g_disk_fds[2], &g_ram[p], 512); ^ cpmsim.c:762:3: warning: ignoring return value of ‘read’, declared with attribute warn_unused_result [-Wunused-result] read(g_disk_fds[2], &g_ram[p+0xa00], 512); ^ cpmsim.c:763:3: warning: ignoring return value of ‘read’, declared with attribute warn_unused_result [-Wunused-result] read(g_disk_fds[2], &g_ram[p+0x200], 512); ^ cpmsim.c:764:3: warning: ignoring return value of ‘read’, declared with attribute warn_unused_result [-Wunused-result] read(g_disk_fds[2], &g_ram[p+0xc00], 512); ^ cpmsim.c:765:3: warning: ignoring return value of ‘read’, declared with attribute warn_unused_result [-Wunused-result] read(g_disk_fds[2], &g_ram[p+0x400], 512); ^ cpmsim.c:766:3: warning: ignoring return value of ‘read’, declared with attribute warn_unused_result [-Wunused-result] read(g_disk_fds[2], &g_ram[p+0xe00], 512); ^ cpmsim.c:767:3: warning: ignoring return value of ‘read’, declared with attribute warn_unused_result [-Wunused-result] read(g_disk_fds[2], &g_ram[p+0x600], 512); ^ cpmsim.c:768:3: warning: ignoring return value of ‘read’, declared with attribute warn_unused_result [-Wunused-result] read(g_disk_fds[2], &g_ram[p+0x1000], 512); ^ cpmsim.c:769:3: warning: ignoring return value of ‘read’, declared with attribute warn_unused_result [-Wunused-result] read(g_disk_fds[2], &g_ram[p+0x800], 512); ^ cpmsim.c:770:3: warning: ignoring return value of ‘read’, declared with attribute warn_unused_result [-Wunused-result] read(g_disk_fds[2], &g_ram[p+0x1200], 512); ^ In file included from /usr/include/unistd.h:1151:0, from cpmsim.c:67: In function ‘read’, inlined from ‘load_srecords’ at cpmsim.c:739:11: /usr/include/x86_64-linux-gnu/bits/unistd.h:42:9: warning: call to ‘__read_chk_warn’ declared with attribute warning: read called with bigger length than size of the destination buffer return __read_chk_warn (__fd, __buf, __nbytes, __bos0 (__buf)); ^ gcc -Wall m68kmake.c -o obj/m68kmake obj/m68kmake obj m68k_in.c Musashi v3.3 68000, 68010, 68EC020, 68020 emulator Copyright 1998-2000 Karl Stenerud (karl@mame.net) Generated 1962 opcode handlers from 503 primitives gcc -Wall -O2 -c -Iobj -I. m68kcpu.c -o obj/m68kcpu.o gcc -Wall -O2 -c -Iobj -I. obj/m68kops.c -o obj/m68kops.o gcc -Wall -O2 -c -Iobj -I. obj/m68kopac.c -o obj/m68kopac.o gcc -Wall -O2 -c -Iobj -I. obj/m68kopdm.c -o obj/m68kopdm.o gcc -Wall -O2 -c -Iobj -I. obj/m68kopnz.c -o obj/m68kopnz.o gcc -Wall obj/sim.o obj/m68kcpu.o obj/m68kops.o obj/m68kopac.o obj/m68kopdm.o obj/m68kopnz.o m68kdasm.o -o cpmsim skyriver@Dospar:/mnt/c/sat/files/src/CPM/CPM68K/BuildTest$ ll total 17672 drwxrwxrwx 1 skyriver skyriver 4096 Jul 21 20:25 ./ drwxrwxrwx 1 skyriver skyriver 4096 Jul 21 18:15 ../ -rwxrwxrwx 1 skyriver skyriver 591912 Jul 21 20:25 cpmsim* -rwxrwxrwx 1 skyriver skyriver 21402 Feb 5 18:53 cpmsim.c* -rwxrwxrwx 1 skyriver skyriver 16777216 Apr 27 2014 diskc.cpm.fs* -rwxrwxrwx 1 skyriver skyriver 6634 Apr 8 2014 m68kconf.h* -rwxrwxrwx 1 skyriver skyriver 37535 Jan 30 2001 m68kcpu.c* -rwxrwxrwx 1 skyriver skyriver 60715 Jan 30 2001 m68kcpu.h* -rwxrwxrwx 1 skyriver skyriver 99849 Feb 3 2001 m68kdasm.c* -rwxrwxrwx 1 skyriver skyriver 147816 Jul 21 18:38 m68kdasm.o* -rwxrwxrwx 1 skyriver skyriver 13019 Jan 29 2001 m68k.h* -rwxrwxrwx 1 skyriver skyriver 225370 Jan 29 2001 m68k_in.c* -rwxrwxrwx 1 skyriver skyriver 44972 Feb 3 2001 m68kmake.c* -rwxrwxrwx 1 skyriver skyriver 1334 Apr 17 2014 makefile* drwxrwxrwx 1 skyriver skyriver 4096 Jul 21 20:25 obj/ -rwxrwxrwx 1 skyriver skyriver 32768 Apr 22 2014 simbios.bin* -rwxrwxrwx 1 skyriver skyriver 5396 Apr 22 2014 simbios.s* -rwxrwxrwx 1 skyriver skyriver 497 Apr 8 2014 sim.h* skyriver@Dospar:/mnt/c/sat/files/src/CPM/CPM68K/BuildTest$


  4. CP/M-68Kシミュレータの起動
     ビルド時に多少warningが表示されますが、シミュレータは動きました。
     CドライブにはCP/Mの基本的なファイル(アセンブラ等emacsも)が入った状態で起動されます。

    CP/M-68Kシミュレータの起動
    skyriver@Dospar:/mnt/c/sat/files/src/CPM/CPM68K/BuildTest$ ./cpmsim Read 32768 bytes from boot track CP/M-68K(tm) Version 1.2 03/20/84 Copyright (c) 1984 Digital Research, Inc. CP/M-68K BIOS Version 1.0 Simulated system of April 2014 TPA =16251 K C>AUTOST.SUB C>INIT.REL M Do you really want to init disk M ? y C>dir C: RELOC 68K : DUMP 68K : PIP 68K : STAT 68K : INIT REL C: SENDC68 68K : DDT 68K : AS68 68K : CP68 68K : AS68INIT C: C068 68K : C168 68K : AR68 68K : CONFIG 68K : LO68 68K C: MORE 68K : NM68 68K : SIZE68 68K : COPY SUB : CC REL C: CC 68K : AS68SYMB DAT : ED 68K : SID 68K : WHEREIS 68K C: BBYE 68K : UEMACS 68K : F83 BIN : PUTBOOT 68K : AUTOST SUB C: GREEN 68K : MAKE REL : ARC 68K : EMACS 68K : F83 68K C: SPLIT 68K : CPM SYS : MAKE 68K : EMACS HLP : DDT68000 68K C: SID68K 68K : EMACS RC : TAIL 68K : ROBOTS21 68K : PIP REL C: ERAQ 68K : LINK68 68K C>

★追記 2018/10/31
 CP/M-68Kが動く、3チップ構成の自作プリント基板が完成しました^^

★追記 2022/02/11
 MC68Kのチップサイズ(64ピンDIP)とほぼ同じサイズの基板で CP/M-68K が動きました。


nice!(0)  コメント(2) 
共通テーマ:趣味・カルチャー