💾 Archived View for mirrors.apple2.org.za › archive › apple.cabi.net › Languages.Programming › Pixie… captured on 2023-04-20 at 00:43:01.

View Raw

More Information

⬅️ Previous capture (2023-01-29)

-=-=-=-=-=-=-

Pixie v2.4 - Memory debugging CDA
Written by Richard Bennett
April 1989

Copyright (c) 1989-1993 by Oz-Data (FREEWARE)

This file last updated: 4th October 1993
Software last updated: 4th October 1993

Write to: P.O. Box 271
	     Turramurra
	     NSW, 2074
	     Australia.

AppleLink: AUST0391
Internet gateway: AUST0391@applelink.apple.com
GEnie: RICHARD.B

I can also be found at any Apple IIgs meeting of the Apple Users' Group, Sydney,
Australia.

NOTE: Users upgrading from a previous level of Pixie should read the file
PIXIE.UPDATES for a brief description of changes.

NOTE 2: Pixie is a very powerful debugging CDA. Please take some time to read
this documentation properly. There is help online, however like Nifty List, there
are ALOT of commands, and takes a while to comprehend how it all works, and not
all are listed in the online help.

NOTE 3: This document is a very quick hack, converted from an AppleWorks file.
The layout and use of colour sucks, but it will improve when I get some spare
time. I did this quickly to get v2.4 out the door.

Pixie consists of the following four files;

	PIXIE230.CDA	The desk accessory itself

	PIXIE.DAT	Contains all the known data areas
			Pixie CAN run without this file

	PIXIE.HELP	The online help text
			Pixie CAN run without this file

	Pixie.v2.4.dox	This teach text doc file (NOT used by Pixie)

Pixie will also use NLIST.DATA if it has been loaded into memory, or if it
resides in your SYSTEM/DESK.ACCS subdirectory. NLIST.DATA is part of a shareware
product called Nifty List by David A Lyons, and available from DAL Systems. If
Nifty List is currently active, it will have already loaded the NLIST.DATA file
into memory and set it up for speed indexing. If Nifty List is not active, then
the file will still be read by Pixie whenever it is needed.

When Pixie is first activated, it does the following things;

          1.	Load up all the variables with various system pointers.
	(see below for details)

          2.	Insert a hook into the system COP vector.

          3.	Test the machine memory size. If at least two megabytes, Pixie will
	perform the following extra functions;

	Load the HELP text into memory.
	Load the DAT file into memory.

          4.	Search for the memory loaded version of NLIST.DATA.
	Search for the disk version of NLIST.DATA.
	Set a flag to say which one to use from now on.

          5.	If the DAT file wasn't loaded in step 3, it is read now to allocate
	however much minimum memory it requires to be used. This is
	currently $800 bytes in v2.4.

          6.	Save system interrupt status, and disable keyboard and VBL
	interrupts. Test which tool sets are currently loaded and active.
	If TransWarpGS is found, set it to full speed.

          7.	Display the main memory display screen.

From now on, entering Pixie will only perform functions 6 and 7. To signify that
Pixie is ready for commands, a �?� is displayed in the top left hand corner of
the display. This can help you tell when Pixie is away and doing something, such
as searching NLIST.DATA on disk, or printing the screen.

By inserting a COP $50 or COP 'P' into your program code, you can explicitly call
Pixie during tracing or execution. It is not necessary to setup any special
variables or registers, as Pixie does all of this for you. The only restriction,
is that you must be in native mode, else it will be passed on to the ROM COP
vector. (see more on COP below)

For step 3, if an error occurs whilst loading files, or allocating memory, Pixie
will default to the next support level of that feature. eg. If the DAT file won't
fit entirely in memory, it will be used from disk. If any of the files can't be
found, or some disk error occurs, Pixie will inform you that this feature has
been disabled. Disk errors include activation from P8, as GS/OS is no longer
available. Features that use the data file are;

	SPC	- data display
	NA	- inquire on data area (pointer)
	NR	- inquire on data area (handle)
	^	- move forward by last data area length
	OA-^	- move backward by last data area length

The memory allocated is left as unlocked when Pixie is not active. This allows
the memory manager to move it around as much as it likes to make room for your
application. These features are also deactivated if the memory cannot be
initially allocated.

When in P8, the pathnames in various displays will not show up, but instead their
user type will be displayed. This is because the GS/OS support routines have been
de-activated by GS/OS whilst switching to P8. The P8/pathname restricted commands
are;

	H	- handle information
	D	- auto-handle-info
	GT	- goto heartbeat task
	GC	- goto chunk
	GS	- goto same ID
	GU	- goto UserID

Much care has been taken to provide P8 support for all the Pixie functions that a
P8 programmer would require. Because of this, various Pixie displays may appear
slow or different compared to when they are used under GS/OS. GS/OS specific
functions however, such as goto window, are simply not supported whilst P8 is
active.

Some commands require certain tool sets (listed at the end of this file) to be
loaded and active (_xxxSTATUS must be true). Rather than list which ones are
required for each command, I simply de-activate them from Pixie. If a certain
command is missing from a menu, then this is probably the reason. So as not to be
totally confused over which tool sets are required, the list at the end of this
file should give you an idea which commands require what. As mentioned
previously, the tool sets are checked on each invocation of Pixie, so certain
commands may seem to be active sometimes, and not others. If all the listed tool
sets are active, then every command is guaranteed to be active.

If you are not using Pixie for a particular session, and don't want rampant Pixie
memory chunks all over the place, simply never invoke Pixie. Similarly if you
don't want the COP features either. Another way, is to press ^R to reload Pixie,
and just never invoke it.


Moving around

Pixie always displays $100 bytes starting at the current memory pointer. Any
special functions on a specific memory location, are done with the current memory
pointer. To move the memory pointer around, you can use the following keys, with
automatic wrapping of the display around hardware pages, and non existent memory;

      left arrow	move down by $100 bytes
     right arrow	move up by $100 bytes
        up arrow	move down by $10 bytes
     down arrow	move up by $10 bytes
	L	move forward by a long word (open-apple L for backwards)
	W	move forward by a word (open-apple W for backwards)
	+	move forward by 1 byte
	=	same as +
	-	move backward by 1 byte
 	_	same as -
	-	on keypad, go backward by a specific number of bytes
	+	on keypad, go forward by a specific number of bytes
	B	move to a specific bank
	>	move to the next bank
	.	same as >
	<	move to the previous bank
	,	same as <
	M	go to a specific memory location
	OA-M	go to a specific 16 bit memory location, within the same bank
	=	on keypad. same as M
	G	go to a special memory location (see GOTO description below)
	@	go to the offset into the current memory chunk being displayed
		by retrieving the current word in memory, and using that as
		the index value. good for following loaded index file chains
		such as those in NLIST.DATA and PIXIE.DAT. de-activated when
		looking at free memory
	#	move forwards in memory by the number of bytes specified by the
		byte at the current memory location (use open-apple-# to go
		backwards)
	$	move forwards in memory, completely skipping over the PString
		at the current memory location
	^	move forwards in memory by the length of the last displayed
		data area. (use open-apple-^ to go backwards)
	&	move to the two byte address stored at the current memory
		location, whilst staying within the same bank
            1 ... 9	move forwards in memory by the nominated number of bytes. (use
		open-apple-num to go backwards) (non-keypad only)


GOTO

By pressing �G�, you are presented with the following options;

	P	go to the memory pointer stored at the current memory location
		(your current location is saved in VAR0)
	H	go to the memory location pointed to by the handle stored at
		the current memory location
		(your current location is saved in VAR0)
	I	same as H (stands for [I]ndirect location)
	L	go to a memory location input from the keyboard
		(same as pressing 'M' from the main display)
		(your current location is saved in VAR0)
 	M	same as L (stands for [M]emory location, as on main display)
	W	go to a window. if the window manager is active, you will be
		presented with a list of current windows. use the arrows to
		move around, and return to select which window. if you press
		L, the first 9 windows will be loaded into variables VAR1
		through VAR9. if the window manager is active, but there are
		no windows, you will be told so. an asterisk ("*") before the
		windrec pointer indicates a system window
	T	go to an entry in the heartbeat interrupt queue. use the arrows
		to move around, and return to select which task. if you press
		L, the first 9 tasks will be loaded into variables VAR1
		through VAR9. the location retrieved is actually the start of
		the task code. to view the task header, simply press OA-L
		twice to back up by two long words (you can then data display
		HEARTBEAT). if there are currently no tasks in the queue, you
		will be told so
	C	go to a memory chunk selected from a list of current memory
		handles
	S	go to a memory chunk selected from a list of memory chunks
		with the same master UserID as that you are currently looking
		at. this option is deactivated if you are currently looking at
		free memory
	U	go to a memory chunk selected from a list of memory chunks
		with the same master UserID as that input from the keyboard
	G	go to the GS/OS Loader Globals (you can then use data display
		to display the LOADERGLOBALS)
	F	go to a particular file, selected from a list of pathnames
		currently in the System Loader pathname table
	R	go to a resource in the current resource file
              0-9	by pressing a number from 0 to 9, you will load that variable
		into the current memory pointer.
		(this can also be done by pressing the keypad number keys from
		the main display screen)


Memory allocation

The amount of memory the current version of Pixie can allocate, is starting to
increase to such a degree, that Pixie is no longer a "quick and dirty method of
displaying memory chunks". There are currently two main versions of Pixie, those
being v1.14 (from the 1989 Australian Apple II Developers conference disk), and
version 2 (all 2.xx versions). The former is a "quick and dirty" version, and
doesn't use much memory, whereas the second one has "grown up" to Nifty List
size. Alot of the memory allocation is based on the machine size, in that any
machine with at least 2 megabytes of RAM will have all the Pixie functions memory
resident (except NLIST.DATA if it is on disk).


Handles and stuff

From the main display, you have the following commands that deal in some way or
another with memory handles.

	H	display the handle information of the current memory location
	P	display a miscellaneous list of ports and pointers
	N	inquire on a specific thingo (see below)
	R	go to the beginning of the memory chunk in which the current
		memory location belongs, and display its handle information
		(rewind)
	E	go to the end of the memory chunk in which the current memory
		location belongs, and display its handle information. you can
		then press '+' to get to the memory chunk directly following
		it. by combining the auto-handle-info option and the 'E' and
		�+� commands, it is easy to quickly skip along through the
		various allocated memory chunks in low memory
	OA-F	fill the current memory chunk with a byte value input from the
		keyboard. this feature is de-activated if the current memory
		pointer is in free memory

The handle display, shows the following information;

	Handle:	The actual handle of this memory chunk.
		The offset from the start of this memory chunk of the current
		memory pointer.
	Size:	The size of the memory chunk.
	Chunk:	This shows the memory chunk start and end addresses.
	Attrib:	The attributes of this memory chunk are shown in hex, and
		binary. The binary display also has a bit position map printed
		above it.
	UserID:	The actual UserID of this memory chunk, and the type of the
		UserID.
	Path:	If possible, the GS/OS class 1 pathname of the file as
		extracted from GS/OS.

Any indirect handle information (eg, from i[N]quire on [P]ointer), still shows
the offset from the start of the memory chunk, of the current memory pointer.
This can be confusing at times when the offset is actually a negative value,
which is when the handle you are getting information on is higher in memory than
the current memory pointer. (ie. to get from the handle to where you are now, you
have to add the negative value of the offset to the start of the displayed
handle)


iNquire on stuff

By pressing 'N' from the main display, you can get the following information;

	P	the handle information of the memory chunk that contains the
		memory location stored at the current memory location
	H	the handle information of the handle stored at the current
		memory location
	A	a data area display of the location stored at the current
		memory location
		(see below)
	R	a data area display of the location pointed to by the handle
		stored at the current memory location
		(see below)


Data displays

By pressing the space bar, or 'A'/'R' from the iNquire menu, you can display the
various data areas included with Pixie. By typing '?' to the prompt for the name,
you will get a list of all the currently available areas. You can then invoke it
again, and type in either the name of the area, or the number that was allocated
to it. eg. to display a GRAFPORT, you could type either 'GRAFPORT', or the number
next to it. The default display consists of the following three parts;

	1.   The actual address of each entry.
	2.   The name of the entry as specified in the appropriate Apple manual.
	3.   The actual value that the location contains.

By turning 'explain' on (see toggle options below), the display is different, and
shows the following three things;

	1.   The name of the entry as specified in the appropriate Apple manual.
	2.   The actual value that the location contains.
	3.   A short description of what the entry means.

If the data file is currently on disk, and the disk is no longer online, you will
not be prompted for the disk. By re-inserting the disk, the feature will be
re-activated. Also, where original Apple labels and definitions apply, the
spelling is as originally specified. BUT, in the various descriptions, Australian
(english) spelling is used instead. (eg. colour and NOT color)


Toggle options

All of the following toggle options keep their value between sessions, and can be selected from the main display.

	A	toggle the ascii output mask on the main display. this turns off
		all mousetext, inverse and flashing characters
	O	toggle mousetext on and off. all mousetext characters now become
		flashing. this also effects the Pixie screen layout
	D	auto-handle-info on/off. when Pixie displays memory, it also, by
		default, shows the handle information for the particular chunk
		being displayed. this feature comes in handy when scanning
		through memory with a-h-i on, and wish to keep the handle
		information on the screen as you go. ie. use a-h-i on for
		scanning, and then off when you've found the wanted handle,
		and it will be held on the display (until you use another
		command that changes the display). a-h-i on is signified by an
		asterisk in the top left hand corner of the screen
	I	toggle the Pixie interrupt routines. initially, Pixie will
		not touch the interrupt flag in the status register. this means
		that a CDA invocation of Pixie will have interrupts enabled, and
		a COP call won't. by pressing 'I', both modes will disable
		interrupts. this is handy for examining interrupt handlers in
		memory. when you press �*� to go to monitor, interrupts are
		automatically enabled, thus ignoring the current 'I' setting.
		keyboard and VBL interrupts are always disabled by Pixie anyway,
		so 'I' would only be handy for something like scan-line
		interrupts, or for slowing down the TransWarp GS to the current
		IIgs system speed at $C036


Miscellaneous

The following miscellaneous commands are also available from the main display;

	C	to select which language card bank is displayed, press C, and
		then the bank you want. ie. '0' or 'B' will select the first
		bank, and '1' or '3' will select the second bank
	*	enter the system monitor. as usual, just press ^y to return	
		this sets the two display registers to that of the current
		memory pointer, the L register to the Pixie L= register, and the
		e/m/x flags to zero. all other registers are left as originally
		set
	!	displays the status of a few Pixie options, the state of
		system memory, and the name of the currently running application
	^G	graphics functions. (see below)
	T	display the function pointer (FPtr) and work area pointer (WAP)
		of an input tool number. if NLIST.DATA is available, the tool
		call format is also displayed
	OA-T	open-apple T does the same as T, except the tool call
		monitor is also hooked in. if the tool is in RAM, and the tool
		call monitor is installed, the subsequent calls to the tool with
		shift held down will flash the border and beep the speaker. by
		pressing escape at the prompt for a tool number, the monitor is
		removed. the current state of the monitor is displayed in the
		�!� status display
	%	displays the word at the current memory location in binary
	?	displays the online help text
	^R	reload Pixie. if the system disk is still online, Pixie will be
		reloaded into memory. the current Pixie and its associated
		memory chunks are purged, and the entry removed from the CDA
		menu. the Pixie loaded from disk is then inserted into the menu.
		Pixie then exits to the CDA menu, where you can select the newly
		loaded version, which will of course re-do all the initial
		startup tasks mentioned at the beginning of this documentation
	OA-P	displays the boot volume name, GS/OS version, file level,
		SysPrefs, SessionStatus, and all the GS/OS prefixs which
		currently have pathnames attached to them
	ESC	returns you to the CDA menu


Graphics functions

By pressing �^G� (control-G) from the main display, you can select a very limited
number of graphics functions. Whether super hires is currently on or off is also
displayed if Pixie was called by a COP.

	S	displays the current SCBs (scan line control byte) for each
		line on the super hires screen
	P	displays the 16 currently defined palettes
	Z	zoom in on an area on the super hires screen, and display the
		byte values on the text screen. you then use the arrows keys to
		move around, or the [RETURN] or [Tab] keys to toggle between the
		graphics and text mode displays. OA-arrows move around by the
		whole width of the window. [ESC] to quit
	C	displays the controls connected to the current front window. use
		the arrows to select which control, and [RETURN] or [Tab] to
		toggle between graphics and text mode displays. [SPC] will redraw
		the current control. [ESC] to quit

The [Z]oom display, shows the SCB, and the line number of the corresponding line.
Also, down the bottom, is the current horizontal offset. Whilst in text mode, you
can press [A] and [S] to toggle between the line address and SCB/line number
displays.

The [C]ontrol display uses the WASZ and IJKM keys to re-size the control's rect
dynamically. To shorten any of the sides of the rect, use the WASZ keys, and to
lengthen them use the IJKM keys. Any rect changes you make will be kept by the
system, however the controls will not be redrawn. With controls which actually
involve Quickdraw II changes (eg. clicking buttons), this obviously means that
the changes will occur in the new position, whilst the old position still
contains the original image. This shouldn't cause a problem, considering this
feature is mainly for customizing dialogs during program design.


Undocumented

The following commands are also available, but not on the help screen. These are
mainly my own debug commands, but I've left them in case you want to find various
Pixie internals;

	/	goto start of Pixie
	Z	call WIPEDISP (routine to clear handle display)
	G/	by pressing 'G' to go into the goto display, and then
		pressing '/' and a number key, you can quickly go to
		any of the Pixie memory areas. the keys available are;

		1 - Pixie itself
		2 - Pixie DAT file (if loaded) else the buffer for it
		3 - Pixie HELP file (if loaded)
		4 - NLIST.DATA (if loaded)
		5 - Pixie internal buffer
		6 - COP internal buffer (for saving $00/0100-$00/01FF)


Variables

There are 10 variables, numbered from VAR0 to VAR9. All the memory jumping
routines save the current location in VAR0, which serves as an undo variable.
Whenever a special location is displayed (eg. �P� to display the ports, or �T� to
display the FPtr), the location displayed is loaded into VAR1. You can explicitly
set any of the variables (including VAR0 and VAR1) by pressing �V�, and then the
number of the variable to save (or by simply pressing open-apple and a number on
the keypad). All the variables are kept intact across sessions, and can be listed
by pressing �V?�. On startup, the variables are set to the following values;

	VAR0  -  $00/0000
	VAR1  -  pointer to the current Grafport
	VAR2  -  pointer to COP handler (before Pixie hooks in)
	VAR3  -  pointer to Desk Accessory manager
	VAR4  -  pointer to quarter second interrupt handler
	VAR5  -  pointer to one second interrupt handler
	VAR6  -  pointer to cursor update routine
	VAR7  -  $E1/0000
	VAR8  -  pointer to the first entry in the Memory manager used handle list
	VAR9  -  pointer to the first UserID in the Memory manager UserID list

The only commands that can't be undone using the undo variable (VAR0), are the
really simple memory movement commands. These are; up-arrow, down-arrow,
left-arrow, right-arrow, non-keypad number keys, non-keypad +, non-keypad =,
non-keypad -, non-keypad _, <, >, comma, non-keypad full-stop.


Searching

Pixie has the ability to scan all of memory for input strings, which can be of a
variable length, with optional wildcards. To edit the search display, press �S�
or �F�. The current string is displayed in hex and ascii, and either can be
edited by pressing the tab key. Use the arrows to move around the fields, the
delete key to delete a character, or control-x to delete the whole lot. You can
toggle a byte between high and low value by pressing the up and down arrows, and
insert wildcards by pressing the space bar in hex mode. Once you've finished
editing, press return to start the search, or escape to exit to the main display
again. Pixie will not present matches if the string is found within Pixie itself.
Also;

	U	allows a userid mask to be used with the search function. the
		current status of the mask is displayed in the �!� status
		display


Memory editing

If editing memory by using the monitor annoys you, press return. The Pixie edit
function allows you to move around in the current display and enter in hex
values. By pressing return again, the cursor will flash to indicate text input
mode. Pressing ESC will exit to the main display. Whilst in hex input mode, the
memory values can be shifted to high and low by pressing �H� and �L�. Memory
editing does not have an undo function, so whatever you change, it's permanent.
When you first press return, the handle information of the current memory pointer
is display for reference.


Printing

The print functions use the text tools to hook into slot #1, and use standard
Imagewriter II control codes.

       control-Z	dumps the whole 80 column text screen to printer. this can be
		done whenever Pixie asks for input. (eg. window list)
       control-P	dumps the text screen which was displayed before Pixie, or the
		Desk Accessories menu was invoked.
	.	from the keypad. dumps out a complete memory map, plus a
		matching handle list.

When you select the memory map function, you will be asked to toggle two special
options before pressing return to start the dump. The first is �F�, and selects
whether full memory is dumped, or chunks larger than $1000 bytes are simply
summarized. The second is to turn the graphic display on or off. By turning of
the graphic display (memory map), only the handle list will be dumped. With both
displays dumped to printer, the handle list can easily be matched with the
graphic display by using the lettering legend in the first column.


COP stuff

When Pixie is called by a COP $50, the COP address is printed at the top of the screen, and set to VAR1. Memory $00/0100-$00/01FF is saved internally,  and the S register set to use that space. Pixie always allocates its direct page space from the stack on entry, so in this case the direct page and stack are both set to page 1. If you wish to look at page 1 as it was when the COP was called, press �G/6�. By pressing �Q�, you can change the RTI return address, or by pressing �1� on the keypad, you can go to the location that the application was interrupted from ('Q' is only active when Pixie is called by a COP instruction). When entering the monitor, the following registers are also set to what they were when the program was interrupted;

	A     16 bit accumulator
	X     16 bit X register
	Y     16 bit Y register
	S     16 bit stack pointer
	P     processor status register (with the interrupt flag set on)
	B     DBK (data bank register)
	K     PBR (program bank register)
	M     machine state register ($C068 without INTCXROM)
	Q     quagmire register (bit7=speed,bit6-bit0=$C035|6-0)
	m     accumulator length
	x     index register length
	e     emulation setting (always zero, as Pixie doesn't support an
	       emulation mode COP)

The L register, and the two display registers are set to the L= and current
memory pointer registers from the Pixie display.


TransWarp GS stuff

When Pixie is activated, part of its startup is a check for a TransWarp GS card.
If found, the current configuration is saved, and the card set to the following
mode:

	The fastest speed the card can handle.

	Data Cache enabled.

	AppleTalk/IRQ enabled (so you can use �I� from the main display to slow
	down the machine at any time)

When exiting, Pixie restores the original TransWarp GS settings. The only change
will be that the Data Cache has changed due to Pixie running with it enabled.
Once your application is re-activated, the Data Cache should soon build up again
in about a second or so.

The speed at which the TransWarp GS was running before Pixie was activated, is
displayed in the top right corner of the screen for reference. This can be useful
to check if particular programs have actually slowed down, or changed the speed
of the TransWarp GS.


Pixie Tools

Pixie has an external entry point for programmers to use Pixie routines.

To find the Pixie Tools entry point, simply scan the used handle list for a
handle with the UserID set to $5xxx, and examine the chunk for the Pixie ID
bytes. After the mandatory CDA header of a PString and two longwords, there is an
ID word of $4252. The following longword is the address of the Pixie Tools. To
call it, simply load the Y register with the routine number, and call the entry
point in native mode with all registers long.

Here is some sample Merlin code to find the Pixie Tools entry point;

FINDPIXIE LDA      >$E11600
	TAX
	LDA      >$E11602
:LOOP	STX      0
	STA      2
	LDY      #6
	LDA      [TEMPHANDLE],Y
	AND      #$F000
	CMP      #$5000
	BNE      :NEXT
	LDA      [0]
	TAX
	LDY      #2
	LDA      [0],Y
	STX      4
	STA      6
	LDA      [4]             ;Skip over CDA PString
	AND      #$FF
	CLC
	ADC      #9              ; and CDA Startup/Shutdown address
	TAY
	LDA      [4],Y
	CMP      :RBID           ;Is this Pixie?
	BNE      :NEXT
	INY
	INY
	LDA      [4],Y           ;Pixie Tools LO address
	STA      PIXIETOOLS+1
	INY
	LDA      [4],Y           ;Pixie Tools HI address
	STA      PIXIETOOLS+1+1
	CLC
	RTS
:NEXT	LDY      #16
	LDA      [TEMPHANDLE],Y
	TAX
	INY
	INY
	LDA      [TEMPHANDLE],Y
	BNE      :LOOP
	CPX      #0
	BNE      :LOOP
	SEC
	RTS

:RBID	DA       'RB'

PIXIETOOLS JSL   0
	RTS

Functions: (All XA register pairs are X-lo and A-hi)

	0001	Set the current memory pointer to X and A registers
	0n02	Set variable n to the location in the X and A registers
		(The variable must be a numeric digit from 0 to 9, else it is
		ignored by Pixie)
	0003	If Pixie hasn't been activated, hook into the system COP vector


Pixie tool usage

The tools used by Pixie are listed below;

Tool Locator	required	    <FPtr>, <WAP>
Memory manager	required     MMStartup, <Handleinfo>, <Allocation>
Miscellaneous	required     <Vectors>
System Loader	optional     LGetPathname2, InitialLoad2, UserShutdown
Quickdraw II	optional     GetPort, InvertRect
Control Manager	optional     DrawOneCtl
Menu Manager	optional     GetMenuMgrPort
Window Manager	optional     GetWMgrPort, GetWindow, GetWTitle, FrontWindow,
		                     GetFirstWindow
Resource Manager	optional     GetCurResourceFile, GetMapHandle
Text tools	required     <Printing>,<Monitor>
Integer Math	required     Int2Dec,Multiply


Hints and interesting things to do

DEVICE DRIVERS: By finding a device driver in memory, you can easily display its
DIBs by pressing �R� to rewind to the beginning of the driver, and pressing �@�
to offset to the first DIB. You can then data display the DIB, or goto the
pointer at the current memory location, which is the pointer to the next DIB in
the chain (the data area is defined as GSOSDIB).

DATA DISPLAY: A neat trick with the data display, is to go to location $00/0000
and do the display of the area you require. This will then give you the offsets
into the area of each entry without having to open the appropriate Apple manual,
once you've put the pages back into correct order anyway, and spending ten
minutes trying to find the diagram.

HEARTBEAT TASKS: As mentioned in the Goto section, you can goto a task, and then
press OA-8 to back space by eight bytes to the task header.

GRAFPORTS: OA-L on a GrafPort will usually backspace to a pointer to the next
GrafPort in the chain. Also, you can go to the current GrafPort by pressing 1 on
the numeric keypad, as long as you haven't changed variable 1, or retrieved any
other addresses. By pressing �P� from the main display, variable 1 will be
reloaded with the location of the current GrafPort.

BANK E1 VECTORS: Press �M� and type �E1/� to go to location $E1/0000, and then
press the space bar for data display, and type �E10000� to display all the
vectors. Turn explain on (press �X� from main display) for a detailed description
of each one. Alternatively, if you haven't changed variable 7, you could simply
press the 7 key on the numeric keypad to goto location $E1/0000.

PIXIE UNDER P8: If you activated Pixie under P8, and are missing some of the
functions which P8 doesn't provide, you can quit P8 to GS/OS, press �^R� to
reload Pixie, activate the new version, and then launch P8 again. You will now
have access to all Pixie functions.

SEARCH FOR ROUTINES IN MEMORY: When looking for a routine in memory, it may be
easier to press �GC� to goto a chunk, and then look at the end of the list for
memory chunks. eg. FREDA allocates $400 bytes for itself. By checking the end of
the list in �GC�, I can find the $400 bytes, and take note of the UserID. Now I
can simply do a �GU� and type in the UserID to get a list of all FREDAs memory
chunks (of which the first in the list is FREDA itself).

GSOS STUFF: The last Loader call, and GS/OS call, can be displayed by �GG� to
goto the Loader Globals, and displaying the LOADERGLOBALS data area.

MENU MANAGER: By pressing �P� to get the current menu bar, and going to that
location, you can display the control record by pressing the space bar and typing
�CTLREC�. A handle to each menu record then follows, so you can simply press �^�
to skip the CTLREC and �GH� to goto the handle (and then use data display on
MENU). Using �0� on the keypad will then bounce you back to the end of the CTLREC
again.

DIALOG DESIGN: By knocking up a quick rough dialog template, �^GC� can be used to
completely define the dialog rects dynamically. You can then �^P� (print) each
screen and copy the rect values into your program. No more re-assemblies just to
get your name centred properly! Of course you could always use a resource editor,
but then the template isn't within the program is it!


FREEWARE NOTES

Yes, this program is freeware. Yes, this program is free. No, you are not allowed
to modify the program or data files in any way. Because Pixie is freeware, the
only charge you may have to pay, is the copying charge by a registered Apple user
group. Companies that run public domain libraries, are NOT allowed to sell,
distribute or transfer this program in any way, because it is also copyright (c)
1989-1993 by Oz Data. Permission is given however for online systems to let users
download Pixie as long as there is no charge for Pixie itself.

All the code and data files of the Pixie software (excluding of course
NLIST.DATA) remain copyright (c) 1989-1993 by Oz-Data. So there!

The layout of the data file, PIXIE.DAT, is quite involved, and if you modify it
at all, chances are it won't work anymore. I will supply the layout to anyone who
wants it, either in Merlin source code, or on paper. So just write, with a self
addressed return envelope. Having this source can be handy if your application
has its own data areas, or if you have some layouts that I haven't included.
There are two reasons why PIXIE.DAT isn't a text file; 1-Speed, 2-Memory. If
PIXIE.DAT is being read from disk (ie. your machine is less than 2Meg), the
lookup of each data area could take quite a while in an unformatted text file,
such as NLIST.DATA, so you're stuck with this special layout instead. I have
plans for an internal editor within Pixie, but that's a while off yet.

If you have a program that would like to use some of Pixie's routines, simply
drop me a line, and I'll put in a new Pixie Tools call for you. Access to
PIXIE.DAT will also be available in later versions of Pixie, so any data areas
you would like to see included will be gladly accepted as well.

This program has nothing to do with the Nifty List CDA from DAL systems. If you
are NOT a registered user of Nifty List, then the use of the NLIST.DATA file with
Pixie MAY infringe copyright. But you can sort that out with David Lyons if you
so wish. However, if you have a data file with a list of tool calls, and it just
happens to be called NLIST.DATA, and you swear that the name is just a
co-incidence, then this will probably not infringe. In either case, speak to
Dave.

How was I to know that when I started writing Pixie, Dave had just started on
Nifty List? Pixie and Nifty List have been pretty much neck and neck feature wise
through each successive revision (except for a few specific things which each one
does - disassembly and data data display imediately spring to mind). Which you
choose to use really depends on whether you prefer a command line interface, or a
hot key interface, and whether you prefer disassembly or hex output. Apart from
that, there is not much difference. You could argue feature against feature, but
there will always be �more than one way to skin a cat�.

Please address all correspondence to:

	Richard Bennett
	P.O. Box 271
	Turramurra
	NSW  2074
	Australia

	AppleLink: AUST0391
	Internet gateway: AUST0391@applelink.apple.com
	GEnie: RICHARD.B

Or you can speak to me at any of the Apple II meetings of the AUG (Apple Users
Group) Inc., Sydney, Australia. Just ask around for Richard.

Special thanks, however small; Chris Nelligan, John Maclean, Simon Walmsley,
Cameron Brawn, Godfrey Gamble, and Matt Deatherage.

Special thanks to Matt Deatherage and David Lyons (DTS APPLE INC. US) for showing
me Nifty List after I asked �Why don't people use Pixie?�, and Godfrey Gamble
(DTS APPLE OZ) and Matt Deatherage for helping out with new system 5 info and
various beta info. (Australia is a long way from Cupertino!)


			Apple II forever!

			   II Infinitum!