
			    Tiny Z80 Disassembler
				  Ver 0.1

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


1. ̃vOɂ

      ̃vÓAUNIXVXeœA@\ Z80 fBXAZułB

	EoCit@CtAZu܂B
	ExɋtAZuł̂65536oCg܂łłB
	Ex͎قAŎwł܂B
	EWṽAhXA߂̓ȑꍇAm܂B
	E`߂ɑΉĂ͂łB
	E^uς܂B
	Et@CLq΁Aߍׂ(?)䂪ł܂B

      ) ȂKɍ̂ŁAoOł邩܂B

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


2. RpCCXg[

   CXg[pӂĂ܂̂ŁA

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


3. dasm88 ̎gp@

    dasm88 [-org n [-size n] ] [-nv] [-t n] [-f config_file] binary_file

	binary_file	c }ṼoCit@C

	-org n		c tAZůJnԒnBn ́A0x0000 ` 0xffff B
			   ȗ́A-org 0x0000 Ƃ݂Ȃ܂B
			   ȂAt@CŎw肳Ăꍇ́A
			   D悳܂B
	-size n		c tAZuTCYBn ́A0x0001 ` 0x10000 B
			   ȗ́At@C̏I[܂ŋtAZu܂B
			   ̃IvV̑OɁA-org IvVKvłB
			   ȂAt@CŎw肳Ăꍇ́A
			   D悳܂B
	-nv		c Not Verbose w
			   tAZuʂ̃\[X݂̂\܂B
	-t n		c ^uw肵܂B
			   n 8̔{ƂAȗ 8 Ƃ݂Ȃ܂B
	-f config_fil	c ݒt@CꍇAt@Cw肵܂B

    [sʂ̗]

	% dasm88 -org 0xc000 sample.bin
	C000 7E         L00001:  LD     A,(HL)
	C001 CDD237              CALL   037D2H
	C004 23                  INC    HL
	C005 0B                  DEC    BC
	C006 79                  LD     A,C
	C007 B0                  OR     B
	C008 20F6                JR     NZ,L00001

    -nv IvVƁA擪̃AhXƁAɂÂ}VR[h
    \ȂȂ܂BāÂ܂܏o͌ʂAZu邱Ƃ
    \łB



4. o͂̃tH[}bg

	o͂́Aȉ̃tH[}bgōsȂ܂B


	C000 7E         L00001:  LD     A,(HL)
	C001 CDD237              CALL   037D2H

	A   R         	 j	I
	h   [		x	 	y
	   h			 j	
	X			 b	
				 N	h


	EAhX́A-org ܂́Aݒt@CŐݒ肳ꂽAhX
	  U܂B
	
	Ex́ALxxxxx ̌`Ƃ܂Bxxxxxɂ́A5̐lԂ
	  UAő 16384܂Ő܂BȂ킿Ax
	  L00001`L16384ƂȂ܂BzꍇAG[bZ[W
	  \AĂ L00001 烉xU܂B
	  ܂Aݒt@C̐ݒŔCӂ̃AhXɔCӂ̖Õx
	  邱Ƃł܂BCӂɐݒł郉x 16384܂ŁA
	  x̑̕v32768oCgȓłȂĂ͂Ȃ܂B
	  xɎg̎ނɐ͂܂B

	EjjbNAIyh́AUCOЂZ80jjbNɏ
	  o͂܂B( ^_^;)

	E򖽗߂̃WvAݒt@CŃxݒ肵AhXɂ
	  x܂A̎AAhX߂̓rɏdȂƂ́A
	  * }[NR[hƃjjbN̊Ԃɕ\܂B

	     C000 7E         L00001:  LD     A,(HL)
	     C001 C307C0              JP     L00002  JP 0C007H
	     C004 23                  INC    HL
	     C005 0B                  DEC    BC
	     C006 CDD237   *          CALL   037D2H  0C007HԒńA߂
	     					       rBꍇA
						       * \B

	Eݒt@CŁADBADW Ȃǂ̋^߂ݒł܂A̐ݒ
	  AhXA߂̓rɏdȂ鎞́A# }[NR[hƃj
	  jbN̊Ԃɕ\܂B

	     ݒt@CŁA0C003HԒn DB ݒɂA

	     C000 7E         L00001:  LD     A,(HL)
	     C001 C307C0    #         JP     L00002  0C003HԒńA߂
						       rBꍇA
						       # \B

	EL2ڂ̏ԂdċNꍇ́A #* }[NR[h
	  jjbN̊Ԃɕ\܂B
	
	E`߂⑶݂Ȃ߂ɂ́AjjbN̑O + }[N܂B

	     C000 DD7C               +LD     A,IXH
	     C002 FDCB0004           +DB     0FDH,0CBH,000H,004H
	     
	E-nv IvV邱ƂɂA*A#Ȁo͂}ł܂A
	  + ̏o̗͂}͂ł܂B


	E`߂͈ȉ̂̂T|[gĂ܂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 

		LD	(nn),HL 	[ }VŁA ED 63 ]
		LD	HL,(nn) 	[ }VŁA ED 6B ]


5. ݒt@C̏
	
	ݒt@ĆAtAZuɑ΂Ċȅ^AeLXg
	`̃t@CłB

	1s̃tH[}bǵA
			JnAhX(16i)	IAhX(16i)
	܂́A	
			JnAhX(16i)	#TCY(16i)
	łB

	ꂼ̊Ԃ1ȏ̃Xy[XA^uŋ؂܂B
	AhXATCY16iŕ\L܂B
	IAhXATCY͖߂ɂĂ͕svłB
	r ; oĂƁAȍ~̓RgƂ݂Ȃ܂B
	1śA255Ƃ܂B


	    ݒt@C̋Lq

		ORG	C000	C0FF
		DB	C010	#4	; Check Work
		DC	C020	C027
		DW	C030	#E
		DS	C080	C09F
		LABEL	C040
		PUTC	C050		; Useful function
		END


  5.1) ORG
  
  		ORG	JnAhX	IAhX
		ORG	JnAhX	#TCY
		
	tAZuۂ̊JnAhXяIAhX(܂̓TCY)
	U܂BtAZúAoCit@C̐擪sȂ
	܂A̐擪Cӂ̃AhXƂ݂Ȃ悤ɐݒ肷閽߂łB
	
	oCit@C ORG߂Őݒ肵TCYA
	ȂԂ 00H ŕ܂B

	oCit@C ORG߂Őݒ肵TCY傫A
	oCit@C͓r܂œǂݍ܂āAtAZu܂B
	̎̎c̃oCi̋tAZu𑱂́A
	END ߂w肵Aēx ORG ߂w肵܂B

  5.2) END
  
  		END
	
	ݒ̏I܂BORG`END ň͂܂ꂽݒɏ]AtAZu
	sȂ܂B
	
	oCit@C ORG߂Őݒ肵TCY傫A
	END ɑ ORG ߂ēxݒ肷邱ƂɂAoCi
	t@CtAZu邱Ƃł܂B
	
  5.3) DB
  
  		DB	JnAhX	IAhX
		DB	JnAhX	#TCY

	JnAhXAIAhX܂̓TCY܂ł DB ̈
	w肵܂B̈ 1`32 oCg܂łłB33oCgȏw肵
	́ADB߂𕡐w肵ĉB

	    o͗   C010 00010203            DB     00H,01H,02H,03H

  5.4) DC

  		DC	JnAhX	IAhX
		DC	JnAhX	#TCY

	JnAhXAIAhX܂̓TCY܂ł DB ̈
	w肵܂B̈ 1`32 oCg܂łłB33oCgȏw肵
	́ADC߂𕡐w肵ĉB

	DB߂Ƃ̈Ⴂ́AIyhŏo͂邱ƂłB
	ARg[R[hȂǂ̏ꍇ́A16iŏo͂܂B

	    o͗   C010 41424344            DB     'ABCDEFGHIJK',000H
		     C014 45464748
		     C018 494A4B00

  5.4) DW

    		DW	JnAhX	IAhX
		DW	JnAhX	#TCY

	JnAhXAIAhX܂̓TCY܂ł DW ̈
	w肵܂B̈ 2`64 oCg܂łłB66oCgȏw肵
	́ADW߂𕡐w肵ĉB
	ȂÄ悪TCYɂȂƃG[o܂B

	    o͗   C010 3412FFFF            DW     01234H,0FFFFH

  5.5) DS

    		DS	JnAhX	IAhX
		DS	JnAhX	#TCY

	JnAhXAIAhX܂̓TCY܂ł DS ̈
	w肵܂B̈ 1`128 oCg܂łłB129oCgȏw肵
	́ADS߂𕡐w肵ĉB

	DS߂Ŏw肳ꂽ̈͋tAZu܂B

	    o͗   C010 00 *020H            DS     020H

  5.6) LABEL

    		LABEL	AhX

	ʏAx͕򖽗߂̃WṽAhXɑ΂܂A
	LABEL߂Ŏw肵AhXɂ͕Kx܂B
	
  5.7) Ox
  
		x	AhX

	LABEL߂ƓAw肵AhXɃx܂A̎
	xCӂɐݒ肷邱Ƃł܂B
	xɎgpł镶́A̖߂ƓłȂ΂Ȃł
	\܂B

	Ox͍ő16384܂Őł܂BAx
	̑v 32768zĂ͂܂B



6. G[bZ[W

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

	G[bZ[W in ݒt@C̍sԍ

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


	ORG: Start is bad
		ORG߂ŁAAhX0x0000-0xffffɂȂB
	ORG: End or Size is bad
		ORG߂ŁATCY0A܂0x10000 zB
	ORG: Bad format
		ORG߂ŁAsB
	DB: Start is bad
		DB߂ŁAAhX0x0000-0xffffɂȂB
	DB: End or Size is bad
		DB߂ŁATCY0A܂ 32 zB
	DB Bad format
		DB߂ŁAsB
	DC: Start is bad
		DC߂ŁAAhX0x0000-0xffffɂȂB
	DC: End or Size is bad
		DC߂ŁATCY0A܂ 32 zB
	DC: Bad format
		DC߂ŁAsB
	DW: Start is bad
		DW߂ŁAAhX0x0000-0xffffɂȂB
	DW: End or Size is bad
		DW߂ŁATCY0A܂ 64 zB
	DW: Size is bad
		DW߂ŁATCYɂȂĂB
	DW: Bad format
		DW߂ŁAsB
	DS: Start is bad
		DS߂ŁAAhX0x0000-0xffffɂȂB
	DS: End or Size is bad
		DS߂ŁATCY0A܂ 128 zB
	DS: Bad format
		DS߂ŁAsB
	LABEL: Addr is bad
		LABEL߂ŁAAhX0x0000-0xffffɂȂB
	LABEL: Bad format
		LABEL߂ŁAsB
	Users label: Addr is bad
		Ox߂ŁAAhX0x0000-0xffffɂȂB
	Users label: Bad format
		Ox߂ŁAsB
	Users label: Out of label buffer
		Ox߂ŁAobt@ꂽB

	    L̃G[́AtAZuɐ悾čsȂݒt@C
	    ͎ɂł܂B

	PC Overflow (>FFFFH)!?
		߂0FFFFHԒnzB
	size mismatch
		߂wTCYׂł

	    L̃G[́AtAZuɏo܂BG[o܂ł́A
	    tAZuʂ͏o͂Ă܂B

	Opps! Label number is greater than 16383!
		̃x 16383žx
		d郉x邪A͑sB

	Internal Error ԍ
		G[B



7. Zp c \[Xǂ̎
	vÔȂ

	{
		ݒt@C鎞́A
		ENDꍇ́ApƂ݂Ȃ
		
		oCi[N(64KB)Ɋi[B
		EOF܂œǂݍށBTCYw肪鎞́ATCY
		
		x̍쐬
		
		tAZu
		
		p̏ꍇ͐ݒt@C̉͂ɖ߂
	}
	
    ݒt@C̉
        ORG	 AZůJnAhXATCYݒ
	END	 ͏I
	DB,DW,DS attr[] ̐ݒ
	LABEL	 label[]̐ݒ


	attr[]̓e
	
	attr[xxx]  xxx ̓AhXB0`0xffff

	     0x00		IyR[h(l)
	     0x20 + 0`31	DB^(̃AhXȍ~A1` 32oCg)
	     0x40 + 0`31	DC^(̃AhXȍ~A1` 32oCg)
	     0x60 + 0`31	DW^(̃AhXȍ~A2` 62oCg)
	     0x80 + 0`127	DS^(̃AhXȍ~A1`128oCg)


	label[]̓e

	label[xxx]  xxx ̓AhXB0`0xffff

	     0x0000		xȂ(l)
	     0x4000 + 0`16383	x̃xԍ
	     0x8000 + 0`32767	[Ux̃xobt@̃|C^


		x̃xԍ͂ł͂ȂB
		0x4000 ݒ肷B
		
		[Ux̏ꍇAݒ肵x́̕A
			&label_buf[xxx]
		Ɋi[Blabel_buf  32768 oCg̗eʂA
		[Ux̕񂪘AĊi[ĂB
		(ÁA'\0'܂)B́Axxx 
		[Ux̃xobt@̃|C^ ƂȂB
		mɂ́A|C^ł͂ȂAlabel_buf[] ̗vfԍłB


    x̍쐬

	tAZusȂAWv߂AڃAhbVO߂
	w肵ĂAhXvZAlabel[xxx]  0x4000 i[B
	
	ɁAlabel[]  0x4000 łvfSĂɁAɃxԍ(1`16383)
	UB
	

    tAZu

	tAZúAPɃe[ujjbN̕
	āA\邾łB
	
	attr[] 𒲂ׂāAIyR[h̎́AjjbN\B
	^߂̎́A\

	̎Alabel[] 𒲂ׁAx̎́Alabel[] ɐݒ肳ꂽ
	xԍA[Ux̎́A&label_buf[ label[] ] ɐݒ
	ꂽ\B
	
	xƖ߂dȂĂȂ̃`FbN킹čsȂB



8. 

  0.1	OUT (C),F           ̒ǉ
	EX DE,IX / EX DE,IY ̍폜
	NEG/RETI/RETM/IM    ̊A`R[hɊg
	BIT n,(IX/IY +d)    ̊A`R[hɊg
	FDADD Ŏn܂R[h̖`Ή
	oOƂ

  0.0	ŏ̃[X
