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