DEFINITION MODULE DisAss;

(* Autor:	Bernd Preusing, Gerhardstr. 16, D-2200 Elmshorn
   Copyright:	public domain
   Version:	1.0  02-Okt-88
   Imports:	---
   Cofiles:	Dis68000.asm
   Zweck:	Disassembliere  e i n e n  Befehl nach RECORD Line
*)

(*$ LargeVars:=FALSE NameChk:=FALSE *)

FROM SYSTEM IMPORT BITSET, ADDRESS;

TYPE
  Line = RECORD
	l: INTEGER;  (* Länge des Strings s *)
	adrPos:INTEGER; (* wenn bit 0 oder 1: pos von L... in String *)
	drelPos1, (* move.w d16(ax),d16(ax) Offsets auf d16_1, d16_2 *)
	drelPos2,
	abslPos1,
	abslPos2: INTEGER;
	adrAdr,
	drelAdr1,
	drelAdr2,
	abslAdr1,
	abslAdr2: LONGINT; (* pos im Speicher des OpCodes GENAU! *)
	flags:BITSET; (* Bit 0 = 1 : adr gültig für jmp
			 Bit 1 = 1 : pc-relativ adressiert
			 Bit 2 = 1 : kein gültiger Befehl, DC.W
			 Bit 3 = 1 : drelPos1 besetzt, davor inslabel
			 Bit 4 = 1 : drelPos2 besetzt
			 Bit 5 = 1 : abslPos1 besetzt
			 Bit 6 = 1 : abslPos2 besetzt
		       *)
	adr:ADDRESS;  (* falls Bit 0 oder 1 gesetzt:
			 angesprochene Adresse (wahre, ohne Offset!) *)
	CASE :BOOLEAN OF
	| TRUE:  s1: ARRAY[0..31] OF CHAR; (* Schein-Adresse, Words.. *)
		 s2: ARRAY[0..99] OF CHAR; (* Befehl *)
	| FALSE: s: ARRAY[0..131] OF CHAR;
	END
      END;

PROCEDURE Disass(Buffer{9},  (* Adresse des Line-Records *)
		 Code{8}     (* Adresse des Codes *)
		 :ADDRESS;
		 Offset{0}:LONGINT (* Code+Offset=Scheinadresse im Listing *)
		):ADDRESS;   (* Adresse des nächsten Befehls *)

END DisAss.def
