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

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

[第407回]


●ZB3DOS(CP/M互換DOS)セットを発送いたしました

本日は朝からがんばって、ZB3DOS(CP/M互換DOS)セットの発送をいたしました。
少しの方を除き、ご注文いただいた分のほとんどを発送できました。
残ってしまった分も明日1日で全部発送できそうです。

●増設RAMのテストプログラム

ND80ZV用の増設RAMボードには32KBのフラットパッケージRAMを実装しています([第403回]の写真参照)。
完成品ですから当然動作テストをしてから発送いたします。
実際に当方所有のND80ZVにとりつけて、まともに動作することを確認しますが、フラットパッケージということになりますとハンダ付けの不良が一番心配です。
そこで普通に動作確認のテストをすることに加えて、簡単なテストプログラムを作ってRAMの書き込みと読み出しのテストをすることにしました。
増設RAMのテストプログラムは[第22回]でごく簡単なものを作りました。
しかしそこで作ったテストプログラムはRAMのほんの一部をテストするだけのものでしたから、今回はそれをもとにして、32KBの増設RAM全体をテストするプログラムに書き換えました。

こちらがソースプログラムです。

;;;ND80Z3 ROM/RAM BANK TEST
;12/1/31
;13/5/30
;
      ORG $8000
;
	DEDP=$1018
	CRLF=$101B
	ZBENTRY=$1033
	HLDP=$104E
;
	LD HL,$0000
	LD A,FF
	OUT (9C),A
LOOP:LD (HL),L
	INC HL
	LD (HL),H
	INC HL
	LD A,H
	CP 80
	JP NZ,LOOP
	LD HL,$0000
LOOP2:LD A,(HL)
	CP L
	JP NZ,ERR
	INC HL
	LD A,(HL)
	CP H
	JP NZ,ERR
	INC HL
	LD A,H
	CP 80
	JP NZ,LOOP2
END:XOR A
	OUT (9C),A
END2:CALL HLDP
	CALL CRLF
	JP $1033
ERR:XOR A
	OUT (9C),A
	LD DE,ERRT
	CALL DEDP
	JP END2
ERRT:"ERR "
	DB 00
;END

こちらがアセンブルリストです。

2013/5/30  9:17  rambktst.txt
END=8042
              ;;;ND80Z3 ROM/RAM BANK TEST
              ;12/1/31
              ;13/5/30
              ;
                    ORG $8000
              ;
              	DEDP=$1018
              	CRLF=$101B
              	ZBENTRY=$1033
              	HLDP=$104E
              ;
8000 210000   	LD HL,$0000
8003 3EFF     	LD A,FF
8005 D39C     	OUT (9C),A
8007 75       LOOP:LD (HL),L
8008 23       	INC HL
8009 74       	LD (HL),H
800A 23       	INC HL
800B 7C       	LD A,H
800C FE80     	CP 80
800E C20780   	JP NZ,LOOP
8011 210000   	LD HL,$0000
8014 7E       LOOP2:LD A,(HL)
8015 BD       	CP L
8016 C23280   	JP NZ,ERR
8019 23       	INC HL
801A 7E       	LD A,(HL)
801B BC       	CP H
801C C23280   	JP NZ,ERR
801F 23       	INC HL
8020 7C       	LD A,H
8021 FE80     	CP 80
8023 C21480   	JP NZ,LOOP2
8026 AF       END:XOR A
8027 D39C     	OUT (9C),A
8029 CD4E10   END2:CALL HLDP
802C CD1B10   	CALL CRLF
802F C33310   	JP $1033
8032 AF       ERR:XOR A
8033 D39C     	OUT (9C),A
8035 113E80   	LD DE,ERRT
8038 CD1810   	CALL DEDP
803B C32980   	JP END2
803E 45525220 ERRT:"ERR "
8042 00       	DB 00
              ;ENDCRLF         =101B  DEDP         =1018  END          =8026  
END2         =8029  ERR          =8032  ERRT         =803E  
HLDP         =104E  LOOP         =8007  LOOP2        =8014  
ZBENTRY      =1033  

バンクを切り換えて増設RAMの0000Hから7FFFHに、HLレジスタをインクリメントしながらその値を書き込んでいきます。
全部書き込んだら最初に戻って、今度は今書き込んだ値を読み出してチェックします。
書き込んだ値と違っていたら「ERR 」と表示したあとに、そのアドレスを表示します。
正常に完了したときは最後のアドレス+1を表示して終わります。

こちらはテストが正常に終了したときの画面です。


こちらはND80Z3.5に増設RAMを実装しないでテストしてみたときの画面です。


マシン語のプログラムで面倒なのは、今回のテストプログラムのように、画面にレジスタの値や文字列を表示させることです。
CP/Mではそれを簡単に行なえるようにファンクションコールの機能が備わっていました。
実はND80ZV(ND80Z3.5)に標準で実装しているZB3BASICにも同じような機能が組み込まれています。
今回のプログラムではその機能を利用しています。
アドレス1018Hは文字列表示ルーチンです(文字列の先頭アドレスをDEレジスタで示す)。
アドレス101BHは改行(CRLF)を行ないます。
アドレス1033HはZB3BASICのエントリポイントです。
アドレス104EHはHLレジスタの値を16進数4桁で表示します。

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

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