!64K CP/Mシステムへ拡張する http://star.gmobb.jp/koji/data/cpm64fig1.png CP/Mサイトから入手できるシステムのメモリサイズは62Kになっていますが、今のところBIOSは小さいので最大サイズの64Kにすることは可能です。いろいろな方法があると思いますが、せっかくAVRとZ80でCP/Mの改良や[[mbed(ST Nucleo F401RE)版CP/Mエミュレータ|mbed(ST Nucleo F401RE)版CP/Mエミュレータ]]というCP/Mマシンがあるのですから、今回は全ての作業をCP/M上で行うことにします。 システム(CCP/BDOS)のソースが公開されている今、システムのリロケートは再アセンブルすればよいわけですが、MOVCPM.COMというコマンドを使用して当時のやり方でやってみます。 !!用意するもの 以下のファイルをそろえます。 *IPL.ASM, BIOS.ASM → DISKDEFマクロの使い方メモ *MAC.COM, DISKDEF.LIB, DDT.COM, LOAD.COM, MOVCPM.COM, SYSGEN.ASM → [CP/Mサイト|http://www.cpm.z80.de/index.html]の[Digital Research Source Code|http://www.cpm.z80.de/source.html]から'''cpm2-plm.zip'''をダウンロードしてください。 *作業用エディタ(WordStar,TURBO PASCALなど) 上記のファイルをCP/Mのディスクイメージに登録します。→ CpmtoolsGUI 作業を誤るとディスクの内容は壊れるので'''バックアップは必ず取っておいてください。'''(BIOSのディスク設定が元と異なっているとファイルが読めなくなります) !!作業手順 http://star.gmobb.jp/koji/data/cpm64fig2.png 作業の概要は、 +MOVCPM.COMで64Kシステム(CCP/BDOS)をTPA上に作成します。 +IPL(BOOT)とBIOSを付加してシステムトラックイメージを完成させ、ファイルとして保存します。 +カスタマイズしたSYSGEN.COMを作成し、システムトラックにイメージを書き込みます。 DDT.COM上では、I、R、Sコマンドを使います。→ CP/Mコマンド概要メモ 以下、詳細を示します。 !IPL.ASM, BIOS.ASM のメモリサイズを変更する IPLもBIOSも影響を受けるので修正します。変更箇所はどちらも、 MSIZE EQU 64 とするだけです。(BIOSのディスク設定は変更してはいけません。変更したい場合は先に変更したディスクを作ってからこの作業を始めます。'''メモリサイズの変更とディスクパラメータの変更は同時には行えない'''ということです) MAC.COM でアセンブルします。 A>MAC IPL CP/M MACRO ASSEM 2.0 205E 001H USE FACTOR END OF ASSEMBLY A>MAC BIOS CP/M MACRO ASSEM 2.0 FE54 014H USE FACTOR END OF ASSEMBLY A> !MOVCPM.COMを変更する MOVCPM.COMはシリアルプロテクトが掛けられているのでそのままでは使えません。シリアルチェックしないように改修します。変更箇所は、 (アドレスはDDTで読み込んだときの場所) 02CB C2 5A 02 → 00 00 00 DDT.COMのSコマンドで変更し、SAVE.COMで保存します。(SAVE 38 MOVCPM2.COM) A>DDT MOVCPM.COM DDT VERS 2.2 NEXT PC 2700 0100 -S2CB 02CB C2 00 02CC 5A 00 02CD 02 00 02CE 23 . -^C A>SAVE 38 MOVCPM2.COM A> !64Kシステムイメージを作成する MOVCPM2.COMを実行(MOVCPM2 64 *)し、TPA上に作成された64K化したCCPとBDOSを一旦SAVE.COMで保存(SAVE 34 CPM64.COM)します。 A>MOVCPM2 64 * CONSTRUCTING 64k CP/M vers 2.2 READY FOR "SYSGEN" OR "SAVE 34 CPM64.COM" A>SAVE 34 CPM64.COM A> !IPLとBIOSを付加する DDT.COMでCPM64.COMを読み込み、さらにIコマンド、Rコマンドにより、IPL.HEXとBIOS.HEXを *IPL.HEX のバイアス値: 900H - 2000H = '''E900H''' ※1 *BIOS.HEX のバイアス値:1F80H - FA00H = '''2580H''' ※2 で読み込み、SAVE.COM で保存します。(SAVE 34 SYS64.COM) A>DDT CPM64.COM DDT VERS 2.2 NEXT PC 2300 0100 -IIPL.HEX -RE900 NEXT PC 2300 0000 -IBIOS.HEX -R2580 NEXT PC 2300 0000 -^C A>SAVE 34 SYS64.COM A> ※1.メモリサイズに関係なく一定(減算しているのは IPL のスタートアドレス) ※2.メモリサイズ(20〜64)に対する、バイアス値:BIAS と変更後の各部のアドレス {{include_html CPM_BIAS_CALC_HTML}} !カスタマイズしたSYSGEN.COMを作成する SYSGEN.ASMを編集し、BIOSのディスク設定に合わせます。 数値の変更箇所。 NSECTS EQU 64 ;NO. OF SECTORS PER TRACK NTRKS EQU 1 ;NO. OF OPERATING SYSTEM TRACKS NDISKS EQU 1 ;NUMBER OF DISK DRIVES TRELT SET 0 ;FIRST/NEXT TRAN ELEMENT コメント化する箇所。(NSECTSが64だとREPTが0になりアセンブルできないため) ; NOW LEAVE SPACE FOR EXTENSIONS TO TRANSLATE TABLE ; IF NSECTS LT 64 ; REPT 64-NSECTS ; DB 0 ; ENDM MAC.COMでアセンブル、LOAD.COMで実行ファイル(SYSGEN.COM)にします。 A>MAC SYSGEN CP/M MACRO ASSEM 2.0 04CD 005H USE FACTOR END OF ASSEMBLY A>LOAD SYSGEN FIRST ADDRESS 0100 LAST ADDRESS 04A5 BYTES READ 03A4 RECORDS WRITTEN 08 A> !システムトラックに64Kシステムを書き込む SYSGEN SYS64.COM を実行。 A>SYSGEN SYS64.COM SYSGEN VER 2.0 DESTINATION DRIVE NAME (OR RETURN TO REBOOT)A DESTINATION ON A, THEN TYPE RETURN FUNCTION COMPLETE DESTINATION DRIVE NAME (OR RETURN TO REBOOT) コールドブート(ハードリセット)し、64Kシステムになったことを確認します。 IPL is loading system... 64k CP/M Version 2.2 COPYRIGHT (C) 1979, DIGITAL RESEARCH A> !!関連リンク CP/M非公式サイト http://www.cpm.z80.de/index.html 当サイト内 AVRとZ80でCP/M AVRとZ80でCP/Mの改良 [[mbed(ST Nucleo F401RE)版CP/Mエミュレータ|mbed(ST Nucleo F401RE)版CP/Mエミュレータ]] CP/Mコマンド概要メモ CP/M資料メモ CP/Mディスクイメージ作成手順メモ DSK形式のディスクイメージからファイルを取り出す方法メモ DISKDEFマクロの使い方メモ CpmtoolsGUI ---- *62k cp/m ---> 30k cp/m(on CycloneIII)で大変役に立ちました、有難うございます。 - K.N. (2019年01月26日 12時48分12秒) {{comment}}