* ------------------------------------------------------------------------- *

		Disect - © DMA 1994-5		24.11.94
		=====================		========

V1.0: 13 Mar-Oct 94	At times, I thought I'd never get there...
-------------------

V1.1: 17.11.94-24.11.94	Well, from my rather affected memory:
-----------------------

	1) No longer crashes if disassembly window at hardware registers
	2) No longer need to define hundreds of copper addresses one
		at a time (!)
	3) DataStrings allow 'X' in base string
	4) Will load executables containing LINE debug/HCLN hunks

V1.2: 25.11.94-29.11.94	Got fed up playing Frontier, so...
-----------------------

	1) Gave screen a proper menu bar, and menus. ASL menus OK now.
	2) Screen is now WB2+, ASL requester is (at last) blue!
	3) Disect aware of 'gadtools.library' base address
	4) Main window is now WFLG_BACKDROP, so now cannot lose ASL
		requester window behind it! I remember the day I
		discovered that one...
	5) Key '+' swaps both disassembly windows
	6) Symbol Window: LMB on a selected symbol, moves (upper)
		disassembly window to address of (program) symbol
	7) Up & Down arrow gadgets in disassembly windows

V1.3: 30.11.94-7.12.94
----------------------

	1) A bug which made Process crash/caused system corruption
		on Process termination creeped into V1.1. Dead now...
	2) INCBIN Request. Thanks to Mark M for that idea
	3) Symbol Window: if press a letter key (with/without) SHIFT key,
		or '.' key, and if symbols are sorted alphabetically,
		now moves window to first symbol which begins with
		that character
	4) Improved algorithms for ensuring disassembly windows align
		themselves to defined program addresses
	5) Improved handling of global/local program symbol definition
		and reference
	6) Added an 'about' message
	7) When define global program symbol, opens request if causes
		local program symbols to be corrupted
	8) RMB on a local in program symbol area moves disassembly window
		the local's global symbol

V1.4: 7.12.94-11.12.94
----------------------

	1) When disassemble to file, will concatenate successive DC.X
		statements to produce (much fewer) lines of source
	2) RMB on instruction mnemonic moves PC to instruction
	3) Can display addresses normally, or as hunk start offsets
	4) Allows hunk offsets in expressions: "[0:64]"
	5) Shift key WILL move memory window fast
	6) Letters in hex now follow selected case
	7) Up/down arrow gadgets in windows repeat if held down
	8) Alarm sound when finds search data

V1.5: 18.12.94
--------------

	1) RMB on displacement (eg: 'dd(Ax)') moves disass window to EA
	2) WB requesters if cannot get resources

V1.6: 9.1.95-01.02.95
---------------------

	 1) It sometimes missed arrow gadget messages, only responding
		to them when another IDCMP message occurred which
		created a signal bit to the message port. This
		happened if LMB > 4 times quickly on arrow gadgets
	 2) System DataStrings: now contain 'X' for address pointers, and
		is now aware of address pointers which point to other
		system structures
	 3) System DataStrings: automatic line commenting, and automatic
		program symbol name definition
	 4) Allows definition of user address same as previous defined
	 5) Allows a base offset address to be defined
	 6) LMB on SEA/DEA text to lock register zoom
	 7) Auto blank lines preference
	 8) SS 'Prev' gadget allows offsets from locals if same global
	 9) Dummy symbol selections can be used as line comment texts
	10) Symbol Window now contains a scroller gadget
	11) Disect aware of 'mathffp.library' base address
	12) Added 'PROCP' reserved symbol name
	13) Added Process Grabber, but only tested on A500+ so far
	14) Request windows which take an address range: can enter '=',
		'+X', and ',X' into end address string gadgets
	15) Was unable to read any DSCT data file if the file contained
		no user address structures
	16) Could not detect characters between "9" and "A" as invalid in
		hex numbers input by user
	17) Added LMB function in Display Breakpoints request window
	18) RMB in memory dump will define base offset address
	19) No longer scans executable files to determine project memory
		sizes, now uses seg list (the things you learn once
		you get the RKMs...)
	20) Data areas defined using system DataStrings now get DF'd as
		macros
	21) During DF, if a program symbol name length exceeds one tab
		size, then the remainder of the source line will be
		output using a new line
	22) Increased executable file hunk limit

V1.7: 2.2.95-20.3.95
--------------------

	 1) When RMB on program address or displacement, right ALT will
		move memory window to the address
	 2) Memory dump now contains a +/- cycle gadget
	 3) When filling memory: eg, if filling LONGs, but address range
		was 31 bytes, Disect would actually write 32 bytes
		(ie: 8 complete LONGs); also changed FORBID/CLEAR
		CACHE/PERMIT method (once per byte, instead of once
		per address range, since very large fills may FORBID
		for too long); also did this for copy memory
	 4) Search memory also gives alarm sound when search ends (data
		not found); source/ASCII searches now match any
		number of spaces or tabs
	 5) During DF, if a program address was automatically replaced
		with a (program) symbol (creating an instruction
		address), the original address would still be logged
		as an missing undefined-reference address; by adding
		a single instruction, this was solved
	 6) Added Process Menu 'Breakpoint At Active Process PC' function,
		but I think the world may not like this too much...
	 7) A new, improved Symbol Selection window...
	 8) Cute little arrow gadgets in main window to move disassembly
		windows left and right
	 9) Disect refused to disassemble movec control registers (unless
		the upper 4 bits of the opcode extension word were 0)
	10) Disect hung when I ungrabbed what I had previously considered
		to be a safe Process to do this to... it was a very
		well hidden bug (since I did not realise that by
		sending a Signal to a Wait()ing Process, a task-
		switch might/will occur)
	11) Added Process memory allocations monitor, & unfreed memory
		list when Process terminates
	12) History buffer no longer limited to only four entries (!)
	13) ASL window size and coords now saved as Preferences
	14) Can now extract symbols from .gs files
	15) Binary files: allows load to a preferred address
	16) Disect auto-replaces CUSTOM/CIA addresses with symbols
	17) Another bug: if an address register contained a library base
		address, and was displayed in register window as,
		eg: 'BASEDOS', then the content of the address would
		not be displayed
	18) Mark M pointed out to me that 'CUSTOM' is defined in
		'intuition/preferences.i', but not as $DFF000,
		so had to rename the same symbol (held within
		Disect executable file) to 'CUSTOM_BASE'
	19) Allows '.x' in expressions for FFP values
	20) Fill & Copy Memory: no longer FORBID/CLEAR CACHE/PERMIT
	21) LMB on address digits in disass window: if right ALT pressed
		moves memory window to address (instead of defining
		a breakpoint)
	22) Had a bit of screen corruption (register/memory window) if
		defined a base offset which caused large offsets to
		be displayed (eg: '[-$12345678]', which would not
		fit into 10-chars available for it)
	23) Now allows definition of key macros... it's simple, but
		highly effective, and I'll sleep with a grin on
		my face tonight! (I will get around to allowing
		macros to be loaded/saved... eventually)
	24) Previously, could not replace references to seglists with
		program symbols (eg: 'move.l main-4,a0'), so Disect
		will now do this automatically
	25) Grabbing a Process would crash if it's pr_WindowPtr was -1
	26) Now replaces 'jsr dd(a6)' with relevant '_LVO' symbols for
		following libraries: Exec, DOS, Gfx, Int, ASL,
		GadTools, MathFFP
	27) Can no longer define breakpoints outside project memory range
	28) MultiBin files load and save, and program 'AllocMultiBin'
	29) Request window gadgets now display '_' characters beneath
		letters equivalent to keyboard controls
	30) Now allows definition of a Process's variables memory area
		(either within Process, or allocated memory), and
		can define user constant symbols as displacements
		within this memory (eg: dd(ax)), so that Disect can
		auto-replace any displacements with relevant constant
		symbol
	31) Disect will now display content of addresses (eg: register
		window) as program symbols (no longer displays only
		an address as a program symbol)
	32) Found a very obscure bug: if a 'JSR _LVOAllocMem' was ('E')
		executed (buffered), and if this memory was not freed
		then when Process terminated, unfreed memory was not
		listed as 'SELF' allocated
	33) Now allows binary files to be inserted into loaded project
	34) With much DSCT data (especially on a 500+!), things tended
		to get slow, so added something to speed things up
		(although it still seems too slow at times...)
	35) Auto Trace mode!!
	36) Hardware monitor (not finished?!)

V1.8: 21.3.95 ... 10.7.95
-------------------------

	 1) Hardware monitor now finished
	 2) Can now end a key-macro definition with a request window open
	 3) Key-macros now record menu messages
	 4) Can save INCBIN areas as IFF ILBMs
	 5) Added audio sample player
	 6) Can manually open trackdisk device (for when if have saved
		a pre-loaded boot block as a multibin file)
	 7) Disect will now auto-replace ARID references to chip & CIA
		registers when PC at, eg: ...,dmacon(a4)
	 8) Can now SET or EQU constant symbols manually
	 9) Disect now shows possible Process variables memory references
	    using a 'V' marker, and LMB on this will auto-replace
	10) Instant definition of BYTE/WORD/LONG Data addresses via LMB
	11) Defining data addresses until 'Next Symbol' will now define
	    data area size explicitly, instead of leaving it 'variable'
	12) Can now save boot blocks
	13) DF now warns of references to addresses in project mem but
		outside disassemble area(s)
	14) DF areas now displayed as (blue?) background in disassembly
		window
	15) DF address range lists can now be loaded and saved
	16) Can now 'Run Copper List'
	17) Will now remap executable file's Process [hunk:offset]
 		to a corresponding [offset] into the executable
 		file on disk (for when executable is loaded as a
 		binary file...)
	18) Will now search user addresses for use of any system/user
 		symbol
	19) MultiBin files now allow Process status to be saved. Is only
 		useful for games (ie: does not use OS, probably kills
 		it straight away) since is ?impossible? to save a
 		Process which has eg: opened a screen & 4 windows
 		and half a dozen third-party libraries, set up
 		interrupt servers, ... etc AND restore EVERYTHING
 		when you load it back up later
	20) A MultiBin 'file' can consist of more than one file (eg:
 		a 1.5 meg 'file' split across two disks)
	21) Two more prefs: maximum MultiBin file size & '.b'/'.s' for
 		branch instructions
	22) Bug fixed: did not select copjmp1 or 2 when execute a write
		to either register
	23) Hardware monitor now does (certain) blitter registers
	24) Finally removed the (redundant) project request window
	25) Can now also define data areas until next -1 byte/word/long
	26) Finally fixed the annoying ASL for Mark M
	27) Can load/save individual DataStrings
	28) DF: user constant EQUs now grouped according to prefix text
		(ie: any text before a '_' character), and listed
		in increasing numeric order
	29) And system constant EQUs are also
	30) Found a bug during DF with spaces (not tabs), which caused
		corrupt source files when disassembling system
		structure macros
	31) Bug: sometimes, when LMB on an #immediate number which was
		in project memory range, its value was ignored,
		resulting in only allowing a symbol selection
		for a value of zero (this only occurred when #imm
		was specifically immediate data in an instruction,
		eg: addi.l #x, as opposed to, say, add.l <EA>,
		where <EA> was immediate data
	32) Added maximum DF source file size pref
	33) Crashed when traced/executed, eg: move.l d0,$4.w, even with
		hardware monitor enabled; is ok now
	34) Hardware monitor now tracks bus error vector instead of odd
		address vector, since Disect uses odd vec during HWM
	35) Previously, did not auto-replace, eg: ...,0(a0), to become
		...,ciapra(a0), because EA mode was ARI (not ARID),
		where '0' was auto done by Disect
	36) Now replaces ARIDI references to hardware registers (used to
		be only ARID references)
	37) Will now auto replace the bit number of a btst/bset/bclr/bchg
		when DEA is CIAA_PRA, CIAB_PRA, or CIAB_PRB (very
		useful when dissecting disk loaders...)
	38) Added stuff to allow a Process to safely alter a7 (hardware
		menu item 'Stack Top'), and checks if attempt to
		execute or auto-trace a move to a7 when the address
		is not in project memory
	39) SysSymbol data is now compressed; this saved about 40-50k of
		disk space
	40) Bug fixed: if executed/traced instruction with (conditional)
		breakpoint at PC, did not suspend at next instruction,
		only did so when expression was TRUE (it was a loop,
		fortunately!)
	41) Ditto: sometimes got an $80000003 when LMB on the operand of
		a DC.X which had been defined using a system Data-
		String
	42) Previously, GrabProcess would check the instruction before
		the rts address from Exec.Wait()/WaitPort(), to
		ensure it was a jsr _LVO(a6) - this is not always
		the case, and resulted in not being able to grab
		certain Processes, so I removed this check
	43) DC.L operands: if have matching program symbol, now displays
		'P' marker, and can LMB on this for auto-replace
	44) Auto-LVOs now also done for jmp dd(a6) as well as jsr dd(a6)
	45) Added Task & Process system DataStrings (I wanted them to
		dissect ExecBase TaskWait list, to see why I couldn't
		grab SimCity! see #42 above!)
	46) Further to #38, I forgot to allow a7 to be changed by an
		instruction so that the new address is not in project
		memory, but is in stack memory (!). Then, spent two
		days allowing for every instruction which would alter
		a7. By method, this worked by checking if the DEA is
		a7, but, finally, discovered: exg a7,a0 (a7 is SEA!).
		What fun this all was (?)
	47) In memory window (small one in main screen), if any memory
		address is within the Process's Process structure,
		Disect now displays, eg: TC_SPLOWER, or pr_SegList
		instead of the address (is preference-able: 'Symbolic
		Address Display')
	48) Previously, if I defined a data area using, for example, an
		LH DataString, but then realised it was an LN, it
		would not (always) replace the line comments, and it
		would never replace the program symbol at data area
		start (which messed up the macros during DF!)
	49) During auto-trace, a JMP to a ROM (or external) function
		would be traced even if you didn`t want it to be,
		since Disect was only looking for JSR (or BSR!)
		to ROM/etc
	50) Another One! With a grabbed Process, auto-trace mode did
		not detect a write to stack memory as being a
		permitted DEA
	51) Disect now checks to ensure that TRACE and ILLEGAL vectors
		are intact before executing anything/anyhow
	52) Can now (at last!) display Process's allocated memory
		(if a memory monitor has been installed)
	53) Current project name now displayed in screen title
	54) Disect now allows 'address constant' symbols; defined via
		CTRL key & LMB on 'd0', etc, in register window

* ------------------------------------------------------------------------- *