
			    Tiny Z80 Assembler
				  Ver 0.1

				ʡʾʻ
			     fukuchan@mh1.117.ne.jp


1. ΥץˤĤ

      ΥץϡUNIXƥư㵡ǽ Z80 ϥ
    ֥Ǥ

      ֥ΥޥХʥեǽϤޤ
      ޤ٤˥٥ꥹȤɸϤ˽ϤǤޤ
      ٤Υ֥ޥϺ65536ХȤޤǤǤ
      ٥ϡ31ʸޤǤΤΤ2048ĤޤǻȤޤ
      Ĥ̤̿ȤϤǤ

      ) ʤŬ˺äΤǡХǤ뤫⤷ޤ

      ΥեȤ̵ݾڤǤΥեȤѤˤ뤤ʤ»
        Ԥݾڤޤ


2. ѥ󥹥ȡ

   󥹥ȡѰդƤޤΤǡ

    % cc -o zasm88 zasm88.c
    
    ǥѥ뤷塢Ŭʥǥ쥯ȥ˥󥹥ȡ뤷Ʋ


3. zasm88 λˡ

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

	source_file	 ե(ƥ)
	output_file	 ޥϥե(Хʥ)

	-org n		 ֥γϡn ϡ0x0000  0xffff 
			   άϡ-org 0x0000 Ȥߤʤޤ
			   ʤ ORG λΤϤ餬
			   ͥ褵ޤ
	-nv		 Not Verbose ꡣ
			   ֥ˡɸ२顼Ϥ˽Ϥ
			   ޻ߤޤ
	-l		 ٥ΰɸϤ˽Ϥޤ


    [¹Է̤]

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

    -nv ץĤȡｪλϰڤɽޤ




4. եν

	ŪˡҤ Z80˥˥å˽򤷤֥Ǥ
	ȤäƤ⡢ԼȤʤZ80Υ֥Ȥиʤ
	Τǡ⤷Ȥʤüʻͤޤޤ뤫Τޤ

	
  4.1 Ԥν

	٥: ˥˥å   ڥ ;

	1ԤĹϡ255 ХȤǤ
	ԤƬʸ* ޤ ; λϡιԤϤ٤ƥȤ
	  ߤʤ졢̵뤵ޤ
	ߥθϥȤȤߤʤ졢̵뤵ޤ
	٥롢ڥɤϡ줾 1Ԥ1ĤΤ ޤ

  4.2 ٥

	٥ľˤϥɬפǤ
	٥˻ȤʸϡѻǤ
	  ٥Ƭ˿ȤȤϤǤޤ󡣤ʤѻʸ
	  ʸ϶̤ޤ
	ʲʸͽǤ٥˻Ѥ뤳ȤϤǤޤ
	  ٥ΰȤƤʤ˴ޤޤ䡢ʸǤС
	  ѲǽǤ
  
		  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 $

	٥Ƭ31ʸܤޤǤǧޤ
	٥Ϻ 2048ĤޤϿǤޤ
	Ĺ٥̾򤿤Ѥ硢٥ѤΥ­Υ顼
	  Ǥ뤳Ȥޤλϡ٥򸺤餹٥ʸ
	  򸺤餷Ʋ(̾Ѥθ¤ǤϡޤפǤ礦)
	٥ͤϡEQU̿λϡΥڥɤ͡ʳλ
	  ν񼰤Τ륢ɥ쥹ͤȤʤޤ

  4.3 ˥˥å

	˥˥åʸΤߤȤޤ
	˥˥åȥڥɤϰʸʾΥڡ֤Ƕڤޤ
	Х̿(JRDJNZ)Ǥϡڥɤ˥Υɥ쥹
	  ޤϥ٥ꤷޤǥץ쥹(Ѱ)ϡ
	  ֥Ƿ׻ޤ
	     1.  JR    0D500H
	     2.  JR    NZ,$-2
	     3.  DJNZ  LOOP
	IN/OUT̿ϡʲΤ褦˵Ҥޤ
	     1.  IN    A,(10H)
	     2.  OUT   (C),H

  4.4 ڥ

	ڥɤȥڥɤδ֤ϥޤǶڤޤ
	ڥΥڡ䥿֤ϥ٥͡黻Ҥζڤ
	  ߤʤޤ٥ͤ˥ڡ֤ȥ顼
	  Ȥʤޤ
	     1.  ( IX  + 2*  10 )   ʤ
	     2.  ( I X + 2*  1 0 )  顼
	ڥɤˤϡ10ʿ2ʿ16ʿοͤȤޤ
	    10ʿ̤ɽޤ
		  1024  -16
	     2ʿˡB ޤ b Ĥޤ
		   10011010B   01b
	    16ʿˡH ޤ h ĤޤƬ AF
		    λϡ 0 ĤޤAFϾʸǤ
		    ޤ
		   25H  0AF00H  0ffh
  	ʸϡ' ǳޤ'ΤΤʸǰϡ
	  '' Ȥ褦ˡݥȥե2¤٤ޤ
		 1.	'ABC'
		 2.	'Search ''COMMAND''!'
	ʸϡ2ʸ ASCII ɤͤȤƻޤ
		 1.  CP  '0'         CP  30H       Ʊ
		 2.  LD  HL,'YN'     LD  HL,594EH  Ʊ
	  ʤʸϡɥ쥹ˤϻȤޤ󡣤ޤʸ
	  黻뤳ȤǤޤ
		 3.  LD  (IX +'MO'),B     顼
		 4.  LD  B,'X'-'A'        顼
	٥ϡΥ٥줿ͤͿޤ黻뤳Ȥ
	  ǽǤ
	         1.  LD   A,(IX+POSI)
		 2.  JP   PUT_C
		 3.  DB   5 + BASE * 3
	ڥɤ $ ꤹȡߥ֥Υɥ쥹
	  Ϳޤ
	         1.  JR   $-2
	ڥɤοͤλκݤϡʲα黻ҤȤޤ
		+ - * /
	  黻ϡ*  / ͥ褵ޤ̤ϻѤǤޤ

  4.5 ̿

     ORG		ORG	

	֥볫ϥɥ쥹(ޥϥɥ쥹)ꤷޤ
	ORG ̿ˡ٥Ĥ뤳ȤϤǤޤ
	ͤ˥٥Ѥ硢Υ٥ѤǤʤФޤ
	ORG ̿ϡ 8 Ĥޤ뤳ȤǤޤ

	ʤޥꥢϡ65536ХȤݤƤΤߤǤ
	ORG ʣꤷ硢ޥɥ쥹Ťʤ뤳Ȥ
	Τޤ󤬡ΥåϰڹԤʤޤ

     END		END
		
	եνλ򼨤ޤι԰ʹߤϥ֥뤵ޤ
	END ̿ˡ٥Ĥ뤳ȤϤǤޤ


     EQU		٥: EQU	

	٥ͤޤ
	ͤ˥٥Ѥ硢Υ٥ѤǤʤФʤޤ

     DB			DB	,,,,

	Хȥǡޤ
	ڥɤϺ1ɬפǤ
	ڥɤϡ1ԤǤФĤäƤ⹽ޤ

     DW			DW	,,,,

	ɥǡޤ
	ڥɤϺ1ɬפǤ
	ڥɤϡ1ԤǤФĤäƤ⹽ޤ
	ͤϥȥ륨ǥ(̤Ȳ̤դˤʤä¤)ꤵޤ

     DS			DS	

	ͤǼ줿Хȿݤޤ
	ݤΰϡ0 ޤ
	ͤ˥٥Ѥ硢Υ٥ѤǤʤФʤޤ
	
  4.6 ̤̿

  	ʲ̤̿򥵥ݡȤƤޤޤåϤƤޤ

	IXH, IXL, IYH, IYL ޤࡢLD ̿
	IXH, IXL, IYH, IYL ޤࡢINC/DEC ̿
	IXH, IXL, IYH, IYL ޤࡢADD/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. 顼å

	֥˥顼Ф硢ʲΤ褦ʥ顼å
	ɽޤ

	Error in ֹ [顼å(顼)]	

	顼åϰʲΤȤꡣǥХå̾Ĥǡ䤿Ȥ
	ޤʤʣΥ顼ĤäϡΤʥ顼
	ȤǤޤ


	Detect NULL label
		: Υ٥뤬Ĥä
	LABEL Detect bad character
		ѿʳʸ٥˻Ȥä
	LABEL Duplicate labels
		Ʊ̾Υ٥뤬Ǥ¸ߤ
	LABEL Over! Number of label
		٥ο2048Ĥۤ
	LABEL Over! Label memory buffer
		٥ѤΥ꤬­
	Can't detect more OPRAND
		ɬפʥڥɤʤ
	String fotmat is bad
		ʸ󤬡' ǰϤޤƤʤ
	Address fotmat is bad
		ɥå󥰤 () ǰϤޤƤʤ
	This REG can't use for addressing
		ܥɥå󥰤Ǥʤ쥸ѤƤ
	This REG can't use for index-addressing
		IXIY ʳΥ쥸ǥǥåɥå󥰤Ƥ
	REG can't caliculate
		쥸黻褦Ȥ
	Calcuration expression error
		׻ν񼰥顼
	Calcuration string error
		׻ˡʥڡĤä
	Label undefined
		٥뤬Ƥʤ
	OPRAND is too many
		ڥɤ᤮
	Syntax error
		񼰥顼
	Displacement error
		ǥåХפѰͥ顼(-128127ۤ)
	This OPCODE need defined label
		٥뤬Ƥʤ
	ORG Over! Number of ORG
		ORG ̿᤬ 8 Ĥۤ
	!! UNKNOWN ERROR !!?
		ƥ२顼


6. ѻ  ɤμ

	ץΤʤ

	{	
	    1ԤХåե˳Ǽ
	    
	    ٥롢ڥɡڥɤʬ
	    
	    ڥ̤ˡ
		
		̿λ		Ƽü
		̾̿λ
		  
		  ٥뤬Ͽ
		  ڥɤ(2)
		  	
			ڥɤμϡ쥸ǥ
			ܥɥå󥰡ľܥɥå󥰡
			ʸ󡣤λͤξϷ׻롣
		  ڥɤȥڥɤȹ礻򸡺
		  
		  ɤ
	 }
	
	٥̤ʳΥ顼Ф硢
	
	嵭 { } ٷ֤٥ϿϹԤʤʤ
		 
	顼Ф
	
	ORG ǻꤷϰϤ

	
    ٥롢ڥɡڥɤʬ

	: ǶڤƤС٥롣
	ڡ֤ǶڤƤ顢ڥɡ
	ʹߤʸСϥڥɡ
	; ʹߤ̵뤹롣


    ٥Ͽ
    
	٥Ѥˡchar 65536 ХȤΥХåեȡ٥Ѥι¤Τ
	2048  Ѥ롣

	٥̾ϡ65536ХȤΥХåե˵ͤƳǼƤλ٥
	ˡ\0 򤤤졢٥ѹ¤ˡγǼƬΥɥ쥹
	(ݥ󥿤ǤϤʤֹ)ȡ٥ͤꤹ롣

	٥¤ΤΡƬɥ쥹 0 λϡ̤Ѥɽäơ
	٥ѤΥХåե 0  Ȥʤ
	
	٥Ϻ 31ʸ٥Ϻ 2048ĤʤΤǡ
	(31 + 1) * 2048 = 65536 ȤʤꡢλΤߥХåե롣


    ڥɤμϡʲΤȤꡣ

	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)
	 () ʸ

		ʸϡڥɤˤäƤϡͰ⤹롣


    ڥɤȥڥɤȹ礻ϰʲΤȤ

	ʤʲȹ礻ϡ̿ᥳɤΥѥˤ
	̤Ƥ롣

	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)	
	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)		
	LD	A			(BC) (DE)
	LD	A			()
	LD	(BC) (DE)		A
	LD	()			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		
	LD	IXH IHL			IXH IXL
	LD	IYH IYL			IYH IYL
	LD	BC DE HL SP		
	LD	IX IY			
	LD	HL			()
	LD	IX IY			()
	LD	()			HL
	LD	()			IX IY
	LD	BC DE HL SP		()
	LD	()			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			
	ADD	A			IXH IXL IYH IYL
	ADC	A			A B C D E H L (HL)
	ADD	A			(IX+d) (IY+d)
	ADD	A			
	ADC	A			IXH IXL IYH IYL
	SUB				A B C D E H L (HL)
	SUB				(IX+d) (IY+d)
	SUB				
	SUB				IXH IXL IYH IYL
	SBC	A			A B C D E H L (HL)
	SBC	A			(IX+d) (IY+d)
	SBC	A			
	SBC	A			IXH IXL IYH IYL
	AND				A B C D E H L (HL)
	AND				(IX+d) (IY+d)
	AND				
	AND				IXH IXL IYH IYL
	XOR				A B C D E H L (HL)
	XOR				(IX+d) (IY+d)
	XOR				
	XOR				IXH IXL IYH IYL
	OR				A B C D E H L (HL)
	OR				(IX+d) (IY+d)
	OR				
	OR				IXH IXL IYH IYL
	CP				A B C D E H L (HL)
	CP				(IX+d) (IY+d)
	CP				
	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			()
	IN	A N C D E F H L		(C)
	INI
	INIR
	IND
	INDR
	OUT	()			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	
	JP	NZ Z NC C PE PO P M	
	CALL	
	CALL	NZ Z NC C PE PO P M	
	RET
	RET	NZ Z NC C PE PO P M
	JR	
	JR	NZ Z NC C		
	DJNZ	
	JP	(HL)
	JP	(IX) (IY)


    ̿ᥳɤμ

	
	ǥå (IXѻ DD IYѻ FD)
	--ppprrrη
		-- 
		ppp 1ڥɤˤäƷ
		qqq 2ڥɤˤäƷ
		[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 1ڥɤˤäƷ [1]
	--qqq---η
		--000---
		qqq 1ڥɤˤäƷ [1]
	-----pppη
		-----000
		ppp 1ڥɤˤäƷ [1]
	-----qqqη
		-----000
		qqq 1ڥɤˤäƷ [1]
	--pp----η
		--00----
		pp 1ڥɤˤäƷ
		[2]	      pp / qq
			BC	00
			DE	01
			HL	10	IX IY Ʊ
			SP	11	AF Ʊ
	--qq----η
		--00----
		qq 2ڥɤˤäƷ [2]
	8ӥå
	16ӥå8ӥå
	16ӥå8ӥå
	ǥåΥեå (-128127)
	ХפΥեå (-128127)


7. 

  0.2	ORG̿ΥХ

  0.1	OUT (C),F           ɲ
	EX DE,IX / EX DE,IY κ

  0.0	ǽΥ꡼
