
			    Tiny Z80 Disassembler
				  Ver 0.1

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


1. ΥץˤĤ

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

	Хʥեե֥뤷ޤ
	٤˵ե֥ǤΤ65536ХȤޤǤǤ
	٥ϼưۤʬǻǤޤ
	Υɥ쥹̿ξ硢Τޤ
	̤̿бƤϤǤ
	Ѥޤ
	ե򵭽ҤС٤(?)椬Ǥޤ

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

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


2. ѥ󥹥ȡ

   󥹥ȡѰդƤޤΤǡ

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


3. dasm88 λˡ

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

	binary_file	 ޥΥХʥե

	-org n		 ե֥γϡn ϡ0x0000  0xffff 
			   άϡ-org 0x0000 Ȥߤʤޤ
			   ʤեǻꤵƤϡ
			   ͥ褵ޤ
	-size n		 ե֥뤹륵n ϡ0x0001  0x10000 
			   άϡեνüޤǵե֥뤵ޤ
			   Υץˡ-org ץɬפǤ
			   ʤեǻꤵƤϡ
			   ͥ褵ޤ
	-nv		 Not Verbose 
			   ե֥뤷̤ΥΤߤɽޤ
	-t n		 ꤷޤ
			   n 8ܿȤά 8 Ȥߤʤޤ
	-f config_fil	 ե뤬硢ե̾ꤷޤ

    [¹Է̤]

	% 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 ץĤȡƬΥɥ쥹ȡˤĤŤޥ쥳ɤ
    ɽʤʤޤäơΤޤ޽Ϸ̤򥢥֥뤹뤳Ȥ
    ǽǤ



4. ϤΥեޥå

	ϤϡʲΥեޥåȤǹԤʤޤ


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

	            	 	
	   			 	
	   			 	
				 	
				 	


	ɥ쥹ϡ-org ޤϡեꤵ줿ɥ쥹
	  꿶ޤ
	
	٥ϡLxxxxx ηȤޤxxxxxˤϡ5ο֤ͤ
	  꿶졢 16384Ĥޤޤʤ٥̾
	  L00001L16384Ȥʤޤۤ硢顼å
	  ɽ졢Ƥ L00001 ٥뤬꿶ޤ
	  ޤեǤդΥɥ쥹Ǥդ̾Υ٥
	  Ĥ뤳ȤǤޤǤդǤ٥ 16384Ĥޤǡ
	  ٥ʸפ32768ХȰǤʤƤϤʤޤ
	  ٥˻Ȥʸμ¤Ϥޤ

	˥˥åڥɤϡҤZ80˥˥å˽򤷤
	  Ϥޤ(¿ʬ ^_^;)

	ʬ̿Υ䡢եǥ٥ꤷɥ쥹ˤ
	  ٥뤬Ĥޤλɥ쥹̿˽ŤʤȤϡ
	  * ޡɤȥ˥˥åδ֤ɽޤ

	     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Ϥϡ̿
	     					       档硢
						       * ɽ롣

	եǡDBDW ʤɤε̿᤬Ǥޤ
	  ɥ쥹̿˽Ťʤϡ# ޡɤȥ˥
	  ˥åδ֤ɽޤ

	     եǡ0C003HϤ DB ˤ

	     C000 7E         L00001:  LD     A,(HL)
	     C001 C307C0    #         JP     L00002  0C003HϤϡ̿
						       档硢
						       # ɽ롣

	嵭2ܤξ֤ʣƵäϡ #* ޡɤ
	  ˥˥åδ֤ɽޤ
	
	̤̿¸ߤʤ̿ˤϡ˥˥å + ޡĤޤ

	     C000 DD7C               +LD     A,IXH
	     C002 FDCB0004           +DB     0FDH,0CBH,000H,004H
	     
	-nv ץĤ뤳Ȥˤꡢ*#νϤǤޤ
	  + νϤϤǤޤ


	̤̿ϰʲΤΤ򥵥ݡȤƤޤ

		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 ̿

		LD	(nn),HL 	[ ޥǡ ED 63 ]
		LD	HL,(nn) 	[ ޥǡ ED 6B ]


5. եν
	
	եϡե֥ФƳƼξͿ롢ƥ
	ΥեǤ

	1ԤΥեޥåȤϡ
		̿	ϥɥ쥹(16ʿ)	λɥ쥹(16ʿ)
	ޤϡ	
		̿	ϥɥ쥹(16ʿ)	#(16ʿ)
	Ǥ

	줾δ֤1İʾΥڡ֤Ƕڤޤ
	ɥ쥹16ʿɽޤ
	λɥ쥹̿ˤäƤפǤ
	 ; ФƤȡʹߤϥȤȤߤʤޤ
	1Ԥϡ255ʸȤޤ


	    եε

		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	ϥɥ쥹	λɥ쥹
		ORG	ϥɥ쥹	#
		
	ե֥ݤγϥɥ쥹ӽλɥ쥹(ޤϥ)
	꿶ޤե֥ϡХʥեƬԤʤ
	ޤƬǤդΥɥ쥹Ȥߤʤ褦ꤹ̿Ǥ
	
	Хʥե뤬 ORG̿ꤷ⾮
	­ʤ֤ 00H ޤ

	Хʥե뤬 ORG̿ꤷ礭
	Хʥեޤɤ߹ޤơե֥뤵ޤ
	λλĤΥХʥʬεե֥³ϡ
	END ̿ꤷ塢 ORG ̿ꤷޤ

  5.2) END̿
  
  		END
	
	νλ򼨤ޤORGEND ǰϤޤ줿˽ե֥
	Ԥʤޤ
	
	Хʥե뤬 ORG̿ꤷ礭
	END ³ ORG ̿ꤹ뤳Ȥˤꡢ³Хʥ
	եե֥뤹뤳ȤǤޤ
	
  5.3) DB̿
  
  		DB	ϥɥ쥹	λɥ쥹
		DB	ϥɥ쥹	#

	ϥɥ쥹顢λɥ쥹ޤϥʬޤǤ DB ΰ
	ꤷޤΰ 132 ХʬޤǤǤ33ХȰʾꤷ
	ϡDB̿ʣꤷƲ

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

  5.4) DC̿

  		DC	ϥɥ쥹	λɥ쥹
		DC	ϥɥ쥹	#

	ϥɥ쥹顢λɥ쥹ޤϥʬޤǤ DB ΰ
	ꤷޤΰ 132 ХʬޤǤǤ33ХȰʾꤷ
	ϡDC̿ʣꤷƲ

	DB̿Ȥΰ㤤ϡڥɤʸǽϤ뤳ȤǤ
	ȥ륳ɤʤɤξϡ16ʿǽϤޤ

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

  5.4) DW̿

    		DW	ϥɥ쥹	λɥ쥹
		DW	ϥɥ쥹	#

	ϥɥ쥹顢λɥ쥹ޤϥʬޤǤ DW ΰ
	ꤷޤΰ 264 ХʬޤǤǤ66ХȰʾꤷ
	ϡDW̿ʣꤷƲ
	ʤΰ褬ˤʤȥ顼Фޤ

	       C010 3412FFFF            DW     01234H,0FFFFH

  5.5) DS̿

    		DS	ϥɥ쥹	λɥ쥹
		DS	ϥɥ쥹	#

	ϥɥ쥹顢λɥ쥹ޤϥʬޤǤ DS ΰ
	ꤷޤΰ 1128 ХʬޤǤǤ129ХȰʾꤷ
	ϡDS̿ʣꤷƲ

	DS̿ǻꤵ줿ΰϵե֥뤵ޤ

	       C010 00 *020H            DS     020H

  5.6) LABEL̿

    		LABEL	ɥ쥹

	̾٥ʬ̿ΥΥɥ쥹Фưޤ
	LABEL̿ǻꤷɥ쥹ˤɬ٥뤬ޤ
	
  5.7) ̾Ĥ٥̿
  
		٥̾	ɥ쥹

	LABEL̿Ʊꤷɥ쥹˥٥Ĥޤλ
	٥̾Ǥդꤹ뤳ȤǤޤ
	٥̾˻ѤǤʸϡ¾̿ƱǤʤФʤǤ
	ޤ

	̾Ĥ٥Ϻ16384ĤޤǤޤ٥̾
	ʸפ 32768ĤۤƤϤޤ



6. 顼å

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

	顼å in եιֹ

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


	ORG: Start is bad
		ORG̿ǡɥ쥹0x0000-0xffffˤʤ
	ORG: End or Size is bad
		ORG̿ǡ0̤ޤ0x10000 ۤ
	ORG: Bad format
		ORG̿ǡ񼰤
	DB: Start is bad
		DB̿ǡɥ쥹0x0000-0xffffˤʤ
	DB: End or Size is bad
		DB̿ǡ0̤ޤ 32 ۤ
	DB Bad format
		DB̿ǡ񼰤
	DC: Start is bad
		DC̿ǡɥ쥹0x0000-0xffffˤʤ
	DC: End or Size is bad
		DC̿ǡ0̤ޤ 32 ۤ
	DC: Bad format
		DC̿ǡ񼰤
	DW: Start is bad
		DW̿ǡɥ쥹0x0000-0xffffˤʤ
	DW: End or Size is bad
		DW̿ǡ0̤ޤ 64 ۤ
	DW: Size is bad
		DW̿ǡˤʤäƤ롣
	DW: Bad format
		DW̿ǡ񼰤
	DS: Start is bad
		DS̿ǡɥ쥹0x0000-0xffffˤʤ
	DS: End or Size is bad
		DS̿ǡ0̤ޤ 128 ۤ
	DS: Bad format
		DS̿ǡ񼰤
	LABEL: Addr is bad
		LABEL̿ǡɥ쥹0x0000-0xffffˤʤ
	LABEL: Bad format
		LABEL̿ǡ񼰤
	Users label: Addr is bad
		̾Ĥ٥̿ǡɥ쥹0x0000-0xffffˤʤ
	Users label: Bad format
		̾Ĥ٥̿ǡ񼰤
	Users label: Out of label buffer
		̾Ĥ٥̿ǡХåե줿

	    嵭Υ顼ϡե֥äƹԤʤե
	    ϻˤǤޤ

	PC Overflow (>FFFFH)!?
		̿᤬0FFFFHϤۤ
	size mismatch
		̿᤬ꥵ٤Ǥ

	    嵭Υ顼ϡե֥˽Фޤ顼ФޤǤΡ
	    ե֥̤ϽϤƤޤ

	Opps! Label number is greater than 16383!
		ưΥ٥뤬 16383Ĥۤηٹ
		ʣ٥̾뤬³Ԥ롣

	Internal Error ֹ
		顼



7. ѻ  ɤμ
	ץΤʤ

	{
		ե뤬ϡ
		ENDϡ³Ȥߤʤ
		
		Хʥ(64KB)˳Ǽ
		EOFޤɤ߹ࡣ꤬ϡʬ
		
		٥κ
		
		ե֥
		
		³ξեβϤ
	}
	
    եβ
        ORG	 ֥γϥɥ쥹
	END	 Ͻλ
	DB,DW,DS attr[] 
	LABEL	 label[]


	attr[]
	
	attr[xxx]  xxx ϥɥ쥹00xffff

	     0x00		ڥ()
	     0x20 + 031	DB̿(Υɥ쥹ʹߡ1 32Х³)
	     0x40 + 031	DC̿(Υɥ쥹ʹߡ1 32Х³)
	     0x60 + 031	DW̿(Υɥ쥹ʹߡ2 62Х³)
	     0x80 + 0127	DS̿(Υɥ쥹ʹߡ1128Х³)


	label[]

	label[xxx]  xxx ϥɥ쥹00xffff

	     0x0000		٥ʤ()
	     0x4000 + 016383	ư٥Υ٥ֹ
	     0x8000 + 032767	桼٥Υ٥̾ХåեΥݥ


		ư٥Υ٥ֹϤǤϤĤʤ
		0x4000 ꤹ롣
		
		桼٥ξ硢ꤷ٥ʸϡ
			&label_buf[xxx]
		˳Ǽ롣label_buf  32768 ХȤ̤
		桼٥ʸϢ³ƳǼƤ롣
		(ʸϡ'\0'ޤ)Ρxxx 
		桼٥Υ٥̾ХåեΥݥ Ȥʤ롣
		Τˤϡݥ󥿤ǤϤʤlabel_buf[] ֹǤ롣


    ٥κ

	ե֥Ԥʤ̿䡢ľܥɥå̿
	ꤷƤ륢ɥ쥹׻label[xxx]  0x4000 Ǽ롣
	
	ˡlabel[]  0x4000 ǤƤˡ˥٥ֹ(116383)
	򿶤롣
	

    ե֥

	ե֥ϡñ˥ơ֥뤫˥˥åʸĥä
	ơɽǤ롣
	
	attr[] Ĵ٤ơڥɤλϡ˥˥åʸɽ
	̿λϡɽ

	λlabel[] Ĵ١ư٥λϡlabel[] ꤵ줿
	٥ֹ򡢥桼٥λϡ&label_buf[ label[] ] 
	줿ʸɽ롣
	
	٥̿᤬ŤʤäƤʤΥå⤢碌ƹԤʤ



8. 

  0.1	OUT (C),F           ɲ
	EX DE,IX / EX DE,IY κ
	NEG/RETI/RETM/IM    γ̤ʬ˳ĥ
	BIT n,(IX/IY +d)    γ̤ʬ˳ĥ
	FDDD ǻϤޤ륳ɤ̤ʬб
	ХȤ

  0.0	ǽΥ꡼
