今回から使用するアセンブラは以前から使用しているasxxxxのasrabとaslinkです。
ラズベリーパイのRaspbian(OS)上で行っています。
asxxxxのラズベリーパイへのインストールは姉妹ブログのこちらを参照ください。
実行ファイルのコピーで
$ sudo cp asrab /usr/local/bin
$ sudo cp aslink /usr/local/bin
アセンブラasrabとリンカーaslinkをインストールします。

EEPROMライタのTL866ⅡPLUSはWindows機に接続し、WinSCPでラズベリーパイから転送しています。asxxxxはwindows(Cygwin)でも動作するのでwindowsで完結した方が楽という話もありますが・・・ 
でも、ラズベリーパイやLinuxを勉強しないといけないのでwww このような構成でソフト作成していきたいと思います。

では、初めにROMの動作確認を行います。

確認のソフトですが、リセット後、0x0000番地から0x0080へジャンプして、各種レジスタの初期化を行った後、CLK端子(1pin)に接続したLEDを消灯させます。

リセット後のCLK端子は、内部クロックのPCLKが出力され、目に見えない速さで点滅しています。(GOCR=0x00)
GOCR(グローバルアウトプットコントロールレジスタ)のBit7,Bit6に書き込みすることで状態を変化させることができます。
GOCR
bit7,bit6 00=CLK Driven with PCLK
     01=CLK Driven by PCLK/2
     10=CLK Low
     11=CLK High

リセット直後 GOCRに0x80を書き込むことで CLK端子をLowにして、接続されているLEDを消灯します。

まず初めに実際にシステムクロックが動作しているか、ROM及びRAMを刺さない状態で電源をいれてCLK端子(1pin)が点灯するか確認します。
次に下記のプログラムをROMに書き込み電源を入れ、CLK端子(1pin)に接続のLEDが一瞬点灯してから消灯することを確認します。

では、プログラムを作成していきます。

まずは、アセンブラにrabbit2000用のアセンブラを生成するための指示を記述します。
       .r2k

続いて使用するレジスタの定義を行います。
GCSR/GOCR/MB0CRの各レジスタ

;;Global Control/Status Register
GCSR	.equ	0x00
;;Global Output Control Register
GOCR	.equ	0x0e		
;;MMU: Memory Bank 0 Control Ragister
MB0CR	.equ	0x14

0x0000番地から0x0080番地にジャンプして、GCSR及びMB0CRを初期化します。
GCSR: システムクロックは源発振周波数をそのまま使用、周期的な割り込み禁止を設定
MB0CR: ROM用にCS0 及びOE0を使用して、0x000000からROMを配置する設定にします。

内部レジスタの読み書きは、ioi ld命令を使用します。Z80のout/in命令は廃止されています。

	.org	0x0000
	jp	start

	.org	0x0080
start:
	ld	a,0b00001000		;proc=OSC,pclk=osc,periodic interrupt=disable
	ioi ld	(GCSR),a
	ld	a,0x00			;0x000000 Use /OE0 Use CS0 (ROM)
	ioi ld	(MB0CR),a
	jp	main

GOCRに0x80を書き込み CLK端子(1pin)をlowにします。
HALT命令も廃止されているので、無限ループで代用しました。

	.org	0x0100
main:
	ld	a,0x80			;CLK(1pin) low
	ioi ld	(GOCR),a
	
loop:
	jr	loop	

全体のプログラムは下記の通りです。

; rabbit2000 rom check
;
; rabbit2000 cpu
; rom 0000h -- 7fffh
; ram 8000h -- ffffh
; External clock 19.6608MHz

; assembler
;  program start 0000H
;  main          0100H
;
; assemblers  ASxxxx and ASlink V5.10
; file name rabbit2000_rom_check.asm
; $ asrab -l -s -o rabbit2000_rom_check.asm
; $ aslink -i rabbit2000_rom_check
; $ rom-writer TL866-2 plus rabbit2000_rom_check.ihx
;

	.r2k

       	.area TEST(ABS)

;;Global Control/Status Register
GCSR	.equ	0x00
;;Global Output Control Register
GOCR	.equ	0x0e		
;;MMU: Memory Bank 0 Control Ragister
MB0CR	.equ	0x14

	.org	0x0000
	jp	start
	
	.org	0x0080
start:
	ld	a,0b00001000		;proc=OSC,pclk=osc,periodic interrupt=disable
	ioi ld	(GCSR),a
	ld	a,0x00			;0x000000 Use /OE0 Use CS0 (ROM)
	ioi ld	(MB0CR),a
	jp	main
	
	.org	0x0100
main:
	ld	a,0x80			;CLK(1pin) low
	ioi ld	(GOCR),a
	
loop:
	jr	loop	

	.end

HEXファイルは下記の通りです。

:03000000C38000BA
:0F0080003E08D33200003E00D3321400C300010B
:080100003E80D3320E0018FE10
:00000001FF

次回はRAMの確認を行っていきたいと思います。

コメントを残す

Rabbit2000, Z80の関連記事
  • Z80(Rabbit2000)に萌えたい。9-クロックとモニタの改善
  • Z80(Rabbit2000)に萌えたい。8-最初のモニタその2
  • Z80(Rabbit2000)に萌えたい。7-最初のモニタその1
  • Z80(Rabbit2000)に萌えたい。6-シリアル通信その2
  • Z80(Rabbit2000)に萌えたい。5-シリアル通信その1
  • Z80(Rabbit2000)に萌えたい。4-RAM動作確認
おすすめの記事
Rabbit2000
からんからん店員:いらっしゃいませ。 お客:う~~と これ ありますか? 店員:ご注文はうさぎですか? お客:はい 店員:ご注文はうさぎです...