復活!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 ; |