2012.1.21
前へ
次へ
ホームページトップへ戻る

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第11回]

●BIOSのディスクアクセスルーチン(2)

本日は前回説明しました、ND80ZVのRAM上に仮に設けた仮想フロッピーディスクをアクセスするためのBIOSルーチンのプログラムリストをお見せします。
CP/M本体は、[第5回]で説明しました”Unofficial CP/M Web site”からソースプログラムをダウンロードすることができます(ダウンロードの仕方から、それをアセンブルしてND80ZVに組込むまでの方法につきましては、近日中に詳しく説明をいたします)。

CP/Mのソースプログラムはダウンロードできるのですが、肝心のBIOSおよびBIOSのためのパラメータは何も示されません。

下は上記サイトからダウンロードしたCP/M2.2ソースプログラムのBIOS記述部分です。
ご覧の通りカラッポです。
;**************************************************************
;*
;*        B I O S   J U M P   T A B L E
;*
;**************************************************************
;
BOOT:	JP	0		;NOTE WE USE FAKE DESTINATIONS
WBOOT:	JP	0
CONST:	JP	0
CONIN:	JP	0
CONOUT:	JP	0
LIST:	JP	0
PUNCH:	JP	0
READER:	JP	0
HOME:	JP	0
SELDSK:	JP	0
SETTRK:	JP	0
SETSEC:	JP	0
SETDMA:	JP	0
READ:	JP	0
WRITE:	JP	0
PRSTAT:	JP	0
SECTRN:	JP	0
;

何か参考になるようなサンプルプログラムがついているものと思っていましたので、これには正直なところがっかりしました。
何か書いてあれば、それを参考にして書き直すことで、自分のシステム用のBIOSにすることができるのですが、これでは何の参考にもなりません。

実際、CP/Mを自分のシステムに移植するために、避けて通れないのが、自分のシステムにあったBIOSを書く、という作業です。
これはかなりハードルの高い作業で、かなりの技術力を必要とします。

せっかくCP/Mのソースリストがダウンロードできるということで上記サイトにやってきた人も、これにはがっかりしてしまうはずで、上記サイトのFAQにはこんな質問が寄せられています。

6.Q:Are you going to post a CBIOS for my ”XYZ” computer?

この問いに対する答えです。

A:No.The CBIOS portion of any CP/M installation is hardware dependant.It is usually written by the folks who manufacture the hardware.It is,therefore,copyrighted by the hardware manufacturer.Since I don’t have the right to any of these,they will not be posted.

ああ。なるほど。
確かにそうですよね。
CP/M本体は同じでも、BIOSはそれぞれの機種ごとにそのメーカーによって書かれるわけですから、それを勝手に公開することはできない道理でした。
それで、BIOSのソースリストは無いのですねえ。
納得です。

おお。
そういうことになりますと。
こうやって、仮のシステム用であったとしても、BIOSのプログラムリストを生のまま公開するっていうのは、これはかなりレアものなのではありませんか?

以下はND80ZVの空きRAMエリアに仮設した仮想フロッピーディスクにアクセスするためのBIOSルーチンです。
                    	;
                      	;BIOS ROUTINE
                      	;
  BB00                	TRKADRS EQU 0BB00H
  BB02                	SCTADRS EQU 0BB02H
  BB04                	DMAADRS EQU 0BB04H
  8800                	DISKTOP EQU 8800H
                      	;
                      	;SEEK HOME POSITION
                      	;
  D280  E5            	HOMEJ:	PUSH HL
  D281  210088        		LD HL,DISKTOP
  D284  2200BB        		LD (TRKADRS),HL
  D287  2202BB        		LD (SCTADRS),HL
  D28A  E1            		POP HL
  D28B  AF            		XOR A
  D28C  C9            		RET
                      	;
                      	;SELECT DRIVE PARAMETER SET
                      	;
  D28D  D5            	SELDSKJ:PUSH DE
  D28E  2AF0D1        		LD HL,(BDIRSIZE)
  D291  EB            		EX DE,HL
  D292  2ADBD1        		LD HL,(BSCRATCH1)
  D295  73            		LD (HL),E
  D296  23            		INC HL
  D297  72            		LD (HL),D
  D298  21D9D1        		LD HL,BXLATE
  D29B  C1            		POP BC
  D29C  C9            		RET
                      	;
                      	;SET TRKADRS
                      	;
  D29D  E5            	SETTRKJ:PUSH HL
  D29E  D5            		PUSH DE
  D29F  C5            		PUSH BC
  D2A0  210088        		LD HL,DISKTOP
  D2A3  110008        		LD DE,800H
  D2A6  0C            		INC C
  D2A7  0D            	STTRK1:	DEC C
  D2A8  CAAFD2        		JP Z,STTRK9
  D2AB  19            		ADD HL,DE
  D2AC  C3A7D2        		JP STTRK1
  D2AF  2200BB        	STTRK9:LD (TRKADRS),HL
  D2B2  C1            		POP BC
  D2B3  D1            		POP DE
  D2B4  E1            		POP HL
  D2B5  AF            		XOR A
  D2B6  C9            		RET	
                      	;
                      	;SET SCTADRS
                      	;
  D2B7  E5            	SETSECJ:PUSH HL
  D2B8  D5            		PUSH DE
  D2B9  C5            		PUSH BC
  D2BA  2A00BB        		LD HL,(TRKADRS)
  D2BD  118000        		LD DE,80H
  D2C0  0C            		INC C
  D2C1  0D            	STSCT1:	DEC C
  D2C2  CAC9D2        		JP Z,STSCT9
  D2C5  19            		ADD HL,DE
  D2C6  C3C1D2        		JP STSCT1
  D2C9  2202BB        	STSCT9:LD (SCTADRS),HL
  D2CC  C1            		POP BC
  D2CD  D1            		POP DE
  D2CE  E1            		POP HL
  D2CF  AF            		XOR A
  D2D0  C9            		RET	
                      	;
                      	;SET DMAADRS
                      	;
  D2D1  E5            	SETDMAJ:PUSH HL
  D2D2  60            		LD H,B
  D2D3  69            		LD L,C
  D2D4  2204BB        		LD (DMAADRS),HL
  D2D7  E1            		POP HL
  D2D8  AF            		XOR A
  D2D9  C9            		RET
                      	;
                      	;READ SECTOR
                      	;
  D2DA  E5            	READJ:	PUSH HL
  D2DB  D5            		PUSH DE
  D2DC  C5            		PUSH BC
  D2DD  2A04BB        		LD HL,(DMAADRS)
  D2E0  EB            		EX DE,HL
  D2E1  2A02BB        		LD HL,(SCTADRS)
  D2E4  0E80          	READJ1:	LD C,80H
  D2E6  7E            	READJ2:LD A,(HL)
  D2E7  12            		LD (DE),A
  D2E8  23            		INC HL
  D2E9  13            		INC DE
  D2EA  0D            		DEC C
  D2EB  C2E6D2        		JP NZ,READJ2
  D2EE  C1            		POP BC
  D2EF  D1            		POP DE
  D2F0  E1            		POP HL
  D2F1  AF            		XOR A
  D2F2  C9            		RET
                      	;
                      	;WRITE SECTOR
                      	;
  D2F3  E5            	WRITEJ:	PUSH HL
  D2F4  D5            		PUSH DE
  D2F5  C5            		PUSH BC
  D2F6  2A02BB        		LD HL,(SCTADRS)
  D2F9  EB            		EX DE,HL
  D2FA  2A04BB        		LD HL,(DMAADRS)
  D2FD  C3E4D2        		JP READJ1
                      	;

Z80ニーモニックで書きましたが、将来MYCPU80にも移植することを考えて、Z80固有の命令は使わず、8080の命令だけで書いています。
今回はあくまでテストですから、たとえば範囲外のアドレスが指定されたときの処理などは考慮していません。
それだけに、必要最小限のプログラムになっていますから、何をやっているか、容易に理解できると思います。

ここでやっていることは極めて簡単明瞭です。
前回書きましたように、CレジスタにセットされているトラックaAセクタbゥら、そのトラック、セクタの先頭アドレスを算出し、そのアドレスから128バイトのデータをDMAバッファにコピーする(READ)か、そのアドレスに、DMAバッファの128バイトのデータを書き込む(WRITE)というプログラムなのです。

いかがでしょうか?
おお。
こんなプログラムでよいのなら、おれでも書けるぞ。
と思っていただけましたでしょうか?
(なんたって、そのまんま、ですものね。解説不要でありましょう)

そこが、ND80ZVCP/Mシステムの狙いなのです。
ND80ZVをお使いいただいて、さらにそこに実際にCP/Mを組み込んでみる、という作業を経験していただくことによって、皆様のソフトウェア、ハードウェアの知識、経験はごく自然にレベルアップしてしまうに違いありません。
それは8ビットの世界だけにとどまらず、それを超えた広い範囲に応用が利く基礎的知識になる、と私は信じております。

最後はしっかり宣伝文句になってしまいました。
ま。そこはそれ、営業目的サイトでありますので、ときおりコマーシャルが入ったりいたします。

ワンボードマイコンでCP/Mを![第11回]
2012.1.21upload

前へ
次へ
ホームページトップへ戻る