たまには原点を見つめなおすのも悪くない。

THE SENTINEL

高校時代、学校をサボって SHARP X1F model20 で動作するこいつでZ80アセンブラプログラミングに夢中になっていた時期を思い出した。


当時は高校3年生で、学校をそのために幾度も無断欠席したり昼から出たりして、担任に「何で休んだ/遅れてきた」と問われると臆面も無く「家でプログラム書いてました」と答えていたものだ。当時の高校3年生としては世間的に進学や就職で忙しい時期だったので「そういうのはやめて学校来い」と言われたわけだが、もちろんそのとき「学校を休んで」積み上げたノウハウが、今自分の飯の種の基礎になっているんだな。つまり S-OS SWORD と Z80 は私の原点だったりするわけで。


いゃ〜あの時学校サボってプログラムしていて本当によかった(笑)


先生の言うとおりプログラムさぼって学校真面目に出てたら、地力不足でプログラマとしての道を断念してたかもしれんわな…と、一緒に酒でも飲みながら鬼の首を取ったかのように当時の担任を見返して自慢してやりたいのだがそうもいかない。高校3年当時の担任は、私が卒業する直前に肝臓を煩って他界してしまったからだ。


…いや、このサイトを探してしまったのは、先日の Fizz-Buzz が職場で話題になった折、Z80アセンブラで書こうとした人がいて、その人が除算ルーチンを書くのをサボっていたのでネタついでに書いてみたら、「あ、なんか懐かしい」とか思ってしまったからだな(笑)

;;; Div
;;; L = L / H
;;; H = L % H
DIV:
	PUSH	AF
	PUSH	BC

	LD	B,8		; loop counter (= 8bit)
	LD	A,80h
	ADD	A,A		; A = 00h, Cy = 1

DIV_LOOP:
	RL	L
	ADC	A,A
	CP	H
	JR	C,DIV_SKIP
	SUB	H
DIV_SKIP:
	DJNZ	DIV_LOOP
	RL	L		; final bit to bit0

	LD	H,A		; H = L % H

	LD	A,L
	CPL
	LD	L,A		; L = not L

	POP	BC
	POP	AF
	RET

んー…さすがに動作する環境が今ちょっと手元にないので、この除算ルーチンが正しく動作するかどうかはチェックしていないw 学校を出て以来、8086以降の「便利なプロセッサ」のぬるま湯に浸かっていたので、Z80的に効率の悪いところも結構あって当然かな、とは思う。

ただ、Z80アセンブラプログラマとして現役でやっていけるかどうかはともかく、久々に書いてみて楽しかったのは確かだな。