CP/Mメモリサイズ変更手順メモの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!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.メモリサイズに関係なく一定(減算しているのは BOOT ROM のスタートアドレス)
※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}}