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

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

[第428回]


●M80用プログラムを添付していただきました

[第426回]で、文字を着色指定するエスケープシーケンスを使ったテストプログラムをZB3BASICとZ80アセンブラで作って、そのリストをお見せしました。
そうしましたら長野県のN様からメールをいただきました。
Z80アセンブラのプログラムをM80(MACRO−80)用に書き直しました、ということでソースプログラムを添付していただきました。
MACRO−80は[第189回][第195回]でご紹介いたしました。
Microsoftのマクロアセンブラです。

私はしかしそれよりは機能はちょいと低いですけれど、ずっと昔に自作したZ80アセンブラを使っておりまして、M−80アセンブラは使ったことがありません。
あ。
その中日電工のオリジナルZ80アセンブラZASM.COMはND80ZV(ND80Z3.5)付属CDROMに入っております。

せっかくこうしてCP/M互換DOSの検証をしているところですので、CP/Mの上で動くM−80アセンブラを使うとよいのですけれど、なにしろ使ったことがないものですから、ものすごいボリュームの英文マニュアルと首っ引きでサンプルプログラムを書いている余裕などとてもありません。
そこへいきますと、なんたってZASMは自作のZ80アセンブラですから、これはもう目をつぶっていたって書けてしまいます。
勢い、CP/M互換DOS用のサンプルとしてはいかがなものか、と思いつつも、ついMACRO−80ではなくて、自作のZASMを使ってしまいます。

そうしたところに思わぬ援軍です。
これは有難いことです。
さっそくN様にお許しをいただいて、せっかく作っていただいたM−80用のアセンブラソースプログラムを皆様にもご紹介いたします。
M−80用のプログラムを書く場合の参考にしてくださいませ。
あれ。今メールを確認しましたら、まだN様からはっきりしたご返事をいただいておりませんでした。
あ。しかし。皆様方の参考にしていただくためのサンプルですから、N様もきっとご快諾されることと思います。

;ESC[2J clear screen test
;ESC[xm color disp test
;2013/6/23 6/26
.Z80
		ASEG
		ORG	100h
		FCALL	EQU	0005h
;
		LD	DE,LIST1
		LD	C,09h
		CALL 	FCALL
		LD	E,01Bh
		LD	C,02h
		CALL	FCALL
		LD	DE,LIST2
		LD	C,09h
		CALL	FCALL
		LD	DE,LIST3
		LD	C,09h
		CALL	FCALL
;
		LD	E,1Bh
		LD	C,02h
		CALL	FCALL
		LD	DE,BGBLU
		LD	C,09h
		CALL	FCALL
;
		LD	E,1Bh
		LD	C,02h
		CALL	FCALL
		LD	DE,BGBLK
		LD	C,09h
		CALL	FCALL
;
		LD	E,1Bh
		LD	C,02h
		CALL	FCALL
		LD	DE,BGW
		LD	C,09h
		CALL	FCALL
;
		LD	E,1Bh
		LD	C,02h
		CALL	FCALL
		LD	DE,RED
		LD	C,09h
		CALL	FCALL
;
		LD	E,1Bh
		LD	C,02h
		CALL	FCALL
		LD	DE,GREEN
		LD	C,09h
		CALL	FCALL
;
		LD	E,1Bh
		LD	C,02h
		CALL	FCALL
		LD	DE,BGM
		LD	C,09h
		CALL	FCALL
;
		LD	E,1Bh
		LD	C,02h
		CALL	FCALL
		LD	DE,YELOW
		LD	C,09h
		CALL	FCALL
;
		LD	E,1Bh
		LD	C,02h
		CALL	FCALL
		LD	DE,BGG
		LD	C,09h
		CALL	FCALL
;
		LD	E,1Bh
		LD	C,02h
		CALL	FCALL
		LD	DE,BLUE
		LD	C,09h
		CALL	FCALL
;
		LD	E,1Bh
		LD	C,02h
		CALL	FCALL
		LD	DE,BGC
		LD	C,09h
		CALL	FCALL
;
		LD	E,1Bh
		LD	C,02h
		CALL	FCALL
		LD	DE,MAG
		LD	C,09h
		CALL	FCALL
;
		LD	E,1Bh
		LD	C,02h
		CALL	FCALL
		LD	DE,BGY
		LD	C,09h
		CALL	FCALL
;
		LD	E,1Bh
		LD	C,02h
		CALL	FCALL
		LD	DE,CYAN
		LD	C,09h
		CALL	FCALL
;
		LD	E,1Bh
		LD	C,02h
		CALL	FCALL
		LD	DE,WHITE
		LD	C,09h
		CALL	FCALL
;
		LD	E,1Bh
		LD	C,02h
		CALL	FCALL
		LD	DE,STN
		LD	C,09h
		CALL	FCALL
;
		LD	E,1Bh
		LD	C,02h
		CALL	FCALL
		LD	DE,BGR
		LD	C,09h
		CALL	FCALL
;
		LD	E,1Bh
		LD	C,02h
		CALL	FCALL
		LD	DE,BGSTN
		LD	C,09h
		CALL	FCALL
		RET
LIST1:		DB '*** ESC clear screen test ***$'
LIST2:		DB '[2J$'
LIST3:		DB '*** ESC[2J clear screen test end'
		DB	0Dh,0Ah,24h
;
BLACK:		DB '[30mCOLOR',3Dh,'BLACK $'
RED:		DB '[31mCOLOR',3Dh,'RED $'
GREEN:		DB '[32mCOLOR',3Dh,'GREEN $'
YELOW:		DB '[33mCOLOR',3Dh,'YELLOW $'
BLUE:		DB '[34mCOLOR',3Dh,'BLUE $'
MAG:		DB '[35mCOLOR',3Dh,'MAGENTA $'
CYAN:		DB '[36mCOLOR',3Dh,'CYAN $'
WHITE:		DB '[37mCOLOR',3Dh,'WHITE $'
STN:		DB '[39mCOLOR',3Dh,'STANDARD $'
BGBLK:		DB '[40mCOLOR',3Dh,'BLACK $'
BGR:		DB '[41mBGCOLOR',3Dh,'RED $'
BGG:		DB '[42mBGCOLOR',3Dh,'GREEN $'
BGY:		DB '[43mBGCOLOR',3Dh,'YELLOW $'
BGBLU:		DB '[44mBGCOLOR',3Dh,'BLUE $'
BGM:		DB '[45mBGCOLOR',3Dh,'MAGENTA $'
BGC:		DB '[46mBGCOLOR',3Dh,'WHITE $'
BGW:		DB '[47mBGCOLOR',3Dh,'WHITE $'
BGSTN:		DB '[49mBGCOLOR',3Dh,'STANDARD $'
;
END
N様からいただいたソースプログラムのニーモニックはZ80ニーモニックです。
プログラムの先頭に
.Z80
と書いておきますと、Z80ニーモニックをアセンブルしてくれます。

上のプログラムをM80にかけたあと、L80(LINK−80)で実行プログラムを作成したところです。

こちらが実行結果です。


●カーソル移動プログラムも作っていただきました

前回は時間がなかったものですから、カーソル移動のテストプログラムをBASICで作ってお見せするのがやっとのことでした。
そうしましたら、そのプログラムもN様がM−80用に書いてくださりメール添付で送ってくださいました。
こちらがそのソースプログラムです。

.Z80
		ASEG
		ORG	100h
;	*** ESC test ***
; ESC ONLY TEST PROGRAM 
;
		CR	EQU	0Dh
		LF	EQU	0Ah
		ESC	EQU	1Bh
		FCALL	EQU	0005h
;
		JP	START
;
START:
		LD	DE,DSP00
		LD	C,09h
		CALL	FCALL
;
		LD	B,7
;
SLOP1:		PUSH	BC
		CALL	DSUB1
		POP	BC
;
		DJNZ	SLOP1;
;
;
		CALL	DSUB2
;
		LD	C,09h ;DSP01
		LD	DE,DSP01
		CALL	FCALL
;
		RET ;CP/M END
;
DSUB2:
		LD	B,24
		LD	HL,DSP0A
LOPS2:
		PUSH	BC
		PUSH	HL
;
		LD	C,02h
		LD	E,(HL)
		CALL	FCALL
;
;
		PUSH	HL
		PUSH	BC
		CALL	CRLFS
		POP	BC
		POP	HL
;
;
		POP	HL
		POP	BC
・	INC	HL

		DJNZ	LOPS2
;
		RET
;
;
;
DSUB1:
		LD	B,10
		LD	HL,DSPNO
LOPSM:
		PUSH	BC
		PUSH	HL
		LD	C,02h
		LD	E,(HL)
		CALL	FCALL
		POP	HL
		INC	HL
		POP	BC
;
		DJNZ	LOPSM
;
		RET
;
CRLFS:		LD	C,02h
		LD	E,CR
		CALL	FCALL
;
		LD	C,02h
		LD	E,LF
		CALL	FCALL
;
		RET
;
;
;
DSP00:	DB ESC,'[2J$'
DSPNO:	DB '0123456789'
DSP01:	DB ESC,3Dh,'(6(1)y',3Dh,'8,x',3Dh,'22'
DSP02:	DB ESC,'[3A(2)up3'
DSP03:	DB ESC,'[12C(3)rigft12'
DSP04:	DB ESC,'[7B(4)down7'
DSP05:	DB ESC,'[47D(5)left47'
DSP06:	DB ESC,'[1B(6)down1**1234567890'
DSP07:	DB 'abcdefghijklmnopqrstuvwxyz'
DSP08:	DB ESC,'[10D(7)'
DSP09:	DB ESC,'[K(8)$'
DSP0A:	DB ' ABCDEFGHIJKLMNOPQRSTUVWXYZ'
END

上のソースプログラムをM−80にかけたあと、L−80で実行プログラムを作成したところです。


実行しました。


N様。
ご協力感謝申し上げます。
本当に有難うございました。

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

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