
			    Tiny Z80 Assembler
				  Ver 0.1

				siȎOt
			     fukuchan@mh1.117.ne.jp


1. ̃vOɂ

      ̃vÓAUNIXVXeœA@\ Z80 ΔԒnNX
    AZułB

      EAZũ}VoCit@Cŏo͂܂B
      E܂xɃxXgWo͂ɏo͂ł܂B
      Ex̃AZuŐ}V͍ő65536oCg܂łłB
      Ex́A31܂ł̂̂A2048܂Ŏg܂B
      E̖`߂g͂łB

      ) ȂKɍ̂ŁAoOł邩܂B

      Ẽ\tg͖ۏ؂łB̃\tggpɂ邢Ȃ鑹Q
        ҂͕ۏ؂܂B


2. RpCCXg[

   CXg[pӂĂ܂̂ŁA

    % cc -o zasm88 zasm88.c
    
    ŃRpCAKȃfBNgɃCXg[ĉB


3. zasm88 ̎gp@

    zasm88 [-org n] [-nv] [-l] source_file output_file

	source_file	c \[Xt@C(eLXg)
	output_file	c }Vo̓t@C(oCi)

	-org n		c AZůJnԒnBn ́A0x0000 ` 0xffff B
			   ȗ́A-org 0x0000 Ƃ݂Ȃ܂B
			   ȂA\[X ORG ̎ŵꍇ͂炪
			   D悳܂B
	-nv		c Not Verbose wB
			   AZuɁAWG[o͂ɏo͂郁b
			   Z[W}~܂B
	-l		c ẍꗗWo͂ɏo͂܂B


    [sʂ̗]

	% zasm88 sample.asm sample.bin
	*** pass 1 ***
	*** pass 2 ***
	Start C000H  End C0FFH (Size=256)

    -nv IvVƁAI͈؂̕\܂B




4. \[Xt@C̏

	{IɁAUCOЂ Z80jjbNɏAZułB
	ƂĂAҎgȂZ80̃AZug񂾌oȂ
	̂ŁAƂȂȎdl܂܂邩m܂B

	
  4.1 s̏

	x: jjbN   Iyh ;Rg

	E1s̒́Aő255 oCgłB
	Es̐擪̕A* ܂ ; ̎́A̍sׂ͂ăRg
	  ݂ȂA܂B
	EZ~Ř̓RgƂ݂ȂA܂B
	ExAIyR[h́Aꂼ 1s1̂ ܂B

  4.2 x

	Ex̒ɂ̓RKvłB
	ExɎg镶́ApAAA_[XRAłBA
	  x̐擪ɐgƂ͂ł܂BȂAp̑啶A
	  ͋ʂ܂B
	Eȉ͗̕\łBxɎgp邱Ƃ͂ł܂B
	  AẍꕔƂĂȂɊ܂܂ꍇAł΁A
	  gp\łB
  
		  A B C D E F H L AF BC DE HL IX IY I R
		  NZ Z NC C PE PO P M IXH IXL IYH IYL $

	Ex͐擪31ڂ܂łF܂B
	Ex͍ő 2048܂œo^ł܂
	ExgpꍇAxp̃s̃G[
	  ł邱Ƃ܂B̎́Ax炷Ax̕
	  炵ĉB(ʏgp̌ł́A܂vł傤)
	Ex̒ĺAEQU߂̎́ÃIyh̒lAȊO̎
	  ̏̂AhX̒lƂȂ܂B

  4.3 jjbN

	EjjbN͑啶݂̂g܂B
	EjjbNƃIyh͈ꕶȏ̃Xy[X^uŋ؂܂B
	E΃Wv(JRADJNZ)ł́AIyhɃWṽAhX
	  ܂̓xw肵܂BfBXvXg(ψʒl)́AAZ
	  uŌvZ܂
	     1.  JR    0D500H
	     2.  JR    NZ,$-2
	     3.  DJNZ  LOOP
	EIN/OUT߂́Aȉ̂悤ɋLq܂
	     1.  IN    A,(10H)
	     2.  OUT   (C),H

  4.4 Iyh

	EIyhƃIyh̊Ԃ̓R}ŋ؂܂B
	EIyh̃Xy[X^u̓x␔lAZq̋؂
	  ݂Ȃ܂Bx␔l̓rɃXy[XA^uƃG[
	  ƂȂ܂B
	     1.  ( IX  + 2*  10 )   Ȃ
	     2.  ( I X + 2*  1 0 )  G[
	EIyhɂ́A10iA2iA16i̐lg܂B
	    10icʂɕ\L܂
		  1024  -16
	     2icɁAB ܂ b ܂B
		   10011010B   01b
	    16icɁAH ܂ h ܂BA擪 A`F
		    ̎́ȂO 0 ܂BA`F͏ł
		    \܂B
		   25H  0AF00H  0ffh
  	E萔́A' Ŋ܂B'̂̂𕶎񒆂ň́A
	  '' Ƃ悤ɁAA|XgtB2ׂ܂B
		 1.	'ABC'
		 2.	'Search ''COMMAND''!'
	E萔́A2 ASCII R[hlƂĎ܂B
		 1.  CP  '0'         CP  30H       Ɠ
		 2.  LD  HL,'YN'     LD  HL,594EH  Ɠ
	  ȂA萔́AAhXwɂ͎g܂B܂A萔
	  Z邱Ƃł܂B
		 3.  LD  (IX +'MO'),B     G[
		 4.  LD  B,'X'-'A'        G[
	Ex́Ãxɒ`ꂽl^܂BZ邱Ƃ
	  \łB
	         1.  LD   A,(IX+POSI)
		 2.  JP   PUT_C
		 3.  DB   5 + BASE * 3
	EIyh $ w肷ƁA݃AZũAhX
	  ^܂B
	         1.  JR   $-2
	EIyh̐l̎w̍ۂ́Aȉ̉Zqg܂B
		+ - * /
	  ŹA*  / D悳܂Bʂ͎gpł܂B

  4.5 ^

     ORG		ORG	l

	AZuJnAhX(}VꐶJnAhX)w肵܂B
	ORG ^߂ɁAx邱Ƃ͂ł܂B
	lɃxgpꍇÃx͒`ςłȂ΂܂B
	ORG ^߂́Aő 8 ܂Ő錾邱Ƃł܂B

	ȂA}V̐GÁA65536oCgmۂĂ݂̂łB
	ORG 𕡐w肵ꍇA}V̐AhXdȂ邱Ƃ
	m܂񂪁Ã`FbN͈؍sȂ܂B

     END		END
		
	\[Xt@C̏I܂B̍sȍ~̓AZu܂B
	END ^߂ɁAx邱Ƃ͂ł܂B


     EQU		x: EQU	l

	xɒl`܂B
	lɃxgpꍇÃx͒`ςłȂ΂Ȃ܂B

     DB			DB	l,l,l,l,c

	oCgf[^`܂B
	Iyh͍Œ1KvłB
	Iyh́A1s̐ł΂Ă\܂B

     DW			DW	l,l,l,l,c

	[hf[^`܂B
	Iyh͍Œ1KvłB
	Iyh́A1s̐ł΂Ă\܂B
	l̓gGfBA(ʂƉʂtɂȂ)Őݒ肳܂B

     DS			DS	l

	lŎꂽoCgAmۂ܂B
	mۂ̈́A0 Ŗ߂܂B
	lɃxgpꍇÃx͒`ςłȂ΂Ȃ܂B
	
  4.6 `

  	ȉ̖`߂T|[gĂ܂A܂`FbN͂Ă܂B

	IXH, IXL, IYH, IYL ܂ށALD 
	IXH, IXL, IYH, IYL ܂ށAINC/DEC 
	IXH, IXL, IYH, IYL ܂ށAADD/ADC/SUB/SBC/AND/XOR/OR/CP 
	
	EX	DE,IX
	EX	DE,IY
	
	IN	F,(C)
	
	SLL	r		r=A B C D E H L (HL) (IX+d) (IY+d)


5. G[bZ[W

	AZuɃG[oꍇAȉ̂悤ȃG[bZ[W
	\܂B

	Error in sԍ [G[bZ[W(G[R[h)]	

	G[bZ[W͈ȉ̂ƂBfobO̖cŁA₽Ƃ
	܂BȂÃG[́AmȃG[
	Ƃł܂B


	Detect NULL label
		: ̃x
	LABEL Detect bad character
		pAA_[XRAȊO̕xɎg
	LABEL Duplicate labels
		Õxłɑ݂
	LABEL Over! Number of label
		x̐A2048z
	LABEL Over! Label memory buffer
		xp̃s
	Can't detect more OPRAND
		KvȃIyhȂ
	String fotmat is bad
		񂪁A' ň͂܂ĂȂ
	Address fotmat is bad
		AhbVO () ň͂܂ĂȂ
	This REG can't use for addressing
		ԐڃAhbVOłȂWX^gpĂ
	This REG can't use for index-addressing
		IXAIY ȊÕWX^ŃCfbNXAhbVOĂ
	REG can't caliculate
		WX^Z悤Ƃ
	Calcuration expression error
		vZ̏G[
	Calcuration string error
		vZɁAsȃXy[X
	Label undefined
		x`ĂȂ
	OPRAND is too many
		Iyh߂
	Syntax error
		G[
	Displacement error
		CfbNXA΃Wv̕ψʒlG[(-128`127z)
	This OPCODE need defined label
		x`ĂȂ
	ORG Over! Number of ORG
		ORG ߂ 8 z
	!! UNKNOWN ERROR !!?
		VXeG[


6. Zp c \[Xǂ̎

	vÔȂ

	{	
	    1sobt@Ɋi[
	    
	    xAIyhAIyR[hɕ
	    
	    IyhʂɁA
		
		E^߂̎		eꏈ
		Eʏ햽߂̎
		  
		  xΓo^
		  Iyh(ő2)
		  	
			Iyh̎ނ́AWX^ARfBVA
			ԐڃAhbVOAڃAhbVOA萔A
			B̎Al̏ꍇ͌vZB
		  IyR[hƃIyh̑g
		  
		  R[ho
	 }
	
	x`ȊÕG[oꍇA~
	
	L { } ēxJԂBAxo^͍sȂȂB
		 
	G[o璆~
	
	ORG Ŏw肵͈͂o

	
    xAIyhAIyR[h̕

	: ŋ؂Ă΁AxB
	Xy[XA^uŋ؂ĂAIyhB
	ȍ~ɕ΁A̓IyhB
	; ȍ~͖B


    x̓o^
    
	xpɁAchar^ 65536 oCg̃obt@ƁAxǗp̍\̂
	2048  gpB

	x́A65536oCg̃obt@ɋl߂Ċi[ĂB̎Ax
	̖ɁA\0 AxǗp\ɁÅi[擪̃AhX
	(|C^ł͂Ȃz̗vfԍ)ƁAx̒lݒ肷B

	xǗ\̂́A擪AhX 0 ̎́Agp\BāA
	xp̃obt@̗vf 0  gȂB
	
	x͍ő 31Ax͍ő 2048Ȃ̂ŁA
	(31 + 1) * 2048 = 65536 ƂȂA̎̂݃obt@B


    Iyh̎ނ́Aȉ̂ƂB

	A B C D E F H L AF BC DE HL SP IX IY I R AF'
	C NC Z NC PE PO P M
	(BC) (DE) (HL) (SP) (IX) (IY) (IX+d) (IY+d) (C)
	l (l) 

		́AIyR[hɂẮAlB


    IyR[hƃIyh̑g͈ȉ̂Ƃ

	ȂAȉ̑ǵA閽߃R[h̃p^[ɂ
	ʂĂB

	LD	A B C D E H L		A B C D E H L (HL)
	LD	(HL)			A B C D E H L
	LD	A B C D E H L (HL)	l
	LD	A B C D E H L		(IX+d) (IY+d)
	LD	(IX+d) (IY+d)		A B C D E H L
	LD	(IX+d) (IY+d)		l
	LD	A			(BC) (DE)
	LD	A			(l)
	LD	(BC) (DE)		A
	LD	(l)			A
	LD	A			I R
	LD	I R			A
	LD	A B C D E		IXH IXL IYH IYL
	LD	IXH IHL IYH IYL		A B C D E
	LD	IXH IHL IYH IYL		l
	LD	IXH IHL			IXH IXL
	LD	IYH IYL			IYH IYL
	LD	BC DE HL SP		l
	LD	IX IY			l
	LD	HL			(l)
	LD	IX IY			(l)
	LD	(l)			HL
	LD	(l)			IX IY
	LD	BC DE HL SP		(l)
	LD	(l)			BC DE HL SP
	LD	SP			HL
	LD	SP			IX IY
	PUSH	BC DE HL AF
	PUSH	IX IY
	POP	BC DE HL AF
	POP	IX IY
	EX	DE			HL
	EX	(SP)			HL
	EX	(SP)			IX IY
	EX	AF			AF'
	EXX
	LDI
	LDIR
	LDD
	LDDR
	CPI
	CPIR
	CPD
	CPDR
	ADD	A			A B C D E H L (HL)
	ADD	A			(IX+d) (IY+d)
	ADD	A			l
	ADD	A			IXH IXL IYH IYL
	ADC	A			A B C D E H L (HL)
	ADD	A			(IX+d) (IY+d)
	ADD	A			l
	ADC	A			IXH IXL IYH IYL
	SUB				A B C D E H L (HL)
	SUB				(IX+d) (IY+d)
	SUB				l
	SUB				IXH IXL IYH IYL
	SBC	A			A B C D E H L (HL)
	SBC	A			(IX+d) (IY+d)
	SBC	A			l
	SBC	A			IXH IXL IYH IYL
	AND				A B C D E H L (HL)
	AND				(IX+d) (IY+d)
	AND				l
	AND				IXH IXL IYH IYL
	XOR				A B C D E H L (HL)
	XOR				(IX+d) (IY+d)
	XOR				l
	XOR				IXH IXL IYH IYL
	OR				A B C D E H L (HL)
	OR				(IX+d) (IY+d)
	OR				l
	OR				IXH IXL IYH IYL
	CP				A B C D E H L (HL)
	CP				(IX+d) (IY+d)
	CP				l
	CP				IXH IXL IYH IYL
	INC	A B C D E H L (HL)
	INC	(IX+d)(IY+d)
	INC	IXH IXL IYH IYL
	DEC	A B C D E H L (HL)
	DEC	(IX+d)(IY+d)
	DEC	IXH IXL IYH IYL
	ADD	HL			BC DE HL SP
	ADD	IX			BC DE IX SP
	ADD	IY			BC DE IY SP
	ADC	HL			BC DE HL SP
	SBC	HL			BC DE HL SP
	INC	BC DE HL SP
	INC	IX IY
	DEC	NC DE HL SP
	DEC	IX IY
	DAA
	CPL
	NEG
	CCF
	SCF
	NOP
	HALT
	DI
	EI
	IM	0 1 2
	RLCA
	RLA
	RRCA
	RRA
	RLC				A B C D E H L (HL)
	RLC				(IX+d) (IY+d)
	RRC				A B C D E H L (HL)
	RRC				(IX+d) (IY+d)
	RL				A B C D E H L (HL)
	RL				(IX+d) (IY+d)
	RR				A B C D E H L (HL)
	RR				(IX+d) (IY+d)
	SLA				A B C D E H L (HL)
	SLA				(IX+d) (IY+d)
	SRA				A B C D E H L (HL)
	SRA				(IX+d) (IY+d)
	SLL				A B C D E H L (HL)
	SLL				(IX+d) (IY+d)
	SRL				A B C D E H L (HL)
	SRL				(IX+d) (IY+d)
	RLD
	RRD
	RETI
	RETN
	RST	0H 8H 10H 18H 20H 28H 30H 38H
	IN	A			(l)
	IN	A N C D E F H L		(C)
	INI
	INIR
	IND
	INDR
	OUT	(l)			A
	OUT	(C)			A B C D E F H L
	OUTI
	OTIR
	OUTD
	OTDR
	BIT	0 1 2 3 4 5 6 7		A B C D E H L (HL)
	BIT	0 1 2 3 4 5 6 7		(IX+d) (IY+d)
	RES	0 1 2 3 4 5 6 7		A B C D E H L (HL)
	RES	0 1 2 3 4 5 6 7		(IX+d) (IY+d)
	SET	0 1 2 3 4 5 6 7		A B C D E H L (HL)
	SET	0 1 2 3 4 5 6 7		(IX+d) (IY+d)
	JP	l
	JP	NZ Z NC C PE PO P M	l
	CALL	l
	CALL	NZ Z NC C PE PO P M	l
	RET
	RET	NZ Z NC C PE PO P M
	JR	l
	JR	NZ Z NC C		l
	DJNZ	l
	JP	(HL)
	JP	(IX) (IY)


    閽߃R[h̎

	萔
	CfbNX (IXgp DD AIYgp FD)
	--ppprrř`
		-- ͒萔
		ppp ͑1IyhɂČ
		qqq ͑2IyhɂČ
		[1]	     ppp / qqq
			B	000
			C	001
			D	010
			E	011
			H 	100	IXH IYH 
			L	101	IXL IYL 
			(HL)	110	(IX+d) (IY+d) 
			A	111
	--ppp---̌`
		--000---͒萔
		ppp ͑1IyhɂČ [1]Q
	--qqq---̌`
		--000---͒萔
		qqq ͑1IyhɂČ [1]Q
	-----ppp̌`
		-----000͒萔
		ppp ͑1IyhɂČ [1]Q
	-----qqq̌`
		-----000͒萔
		qqq ͑1IyhɂČ [1]Q
	--pp----̌`
		--00----͒萔
		pp ͑1IyhɂČ
		[2]	      pp / qq
			BC	00
			DE	01
			HL	10	IX IY 
			SP	11	AF 
	--qq----̌`
		--00----͒萔
		qq ͑2IyhɂČ [2]Q
	8rbg萔
	16rbg萔8rbg
	16rbg萔8rbg
	CfbNX̃ItZbg (-128`127)
	΃WṽItZbg (-128`127)


7. 

  0.2	ORG߂̃oOC

  0.1	OUT (C),F           ̒ǉ
	EX DE,IX / EX DE,IY ̍폜

  0.0	ŏ̃[X
