        .NOLIST;===============================================================================;;									        ;;		     LL	       II    SSSSSSS	   AAA			        ;;		     LL	       II    SS		  AA AA			        ;;		     LL	       II    SSSSSSS	 AAAAAAA		        ;;		     LL	       II	  SS    AA     AA		        ;;		     LLLLLLL   II    SSSSSSS   AA       AA		        ;;									        ;;									        ;;   BBBBBB     OOOOO	 OOOOO	  TTTTTTTT      RRRRRR	   OOOOO    MMM	  MMM   ;;   BB	 BB   OO   OO   OO   OO	     TT	        RR   RR	  OO   OO   MM M M MM   ;;   BBBBBB    OO   OO   OO   OO	     TT	        RRRRRR	  OO   OO   MM  M  MM   ;;   BB	 BB   OO   OO   OO   OO	     TT	        RR RR	  OO   OO   MM	   MM   ;;   BBBBBB     OOOOO	 OOOOO	     TT	        RR   RR	   OOOOO    MM	   MM   ;;									        ;;									        ;;       Copyright 1983, 1984 Apple Computer Inc.			        ;;       Revision 2H							        ;;									        ;;===============================================================================;;; Filename:  RMXXX.Y.TEXT, XXX = ROM VERSION # (e.g., 200 for 2.00);			     Y = E (equates);			       = K (kernel tests);			       = S (secondary tests);			       = B (bootstrap code);			       = M (monitor code);			       = G (graphics, icon and message display);; Function:  Initializes LISA system for use and performs preliminary;	     diagnostic checks.	 If all tests pass, the system then;	     does a keyboard scan to check for user input.  If any key;	     is hit other than caps lock or the mouse button,;	     a menu is displayed on the screen showing the available;	     boot devices.  If a valid COMMAND key sequence is detected,;	     a boot from an alternate device is attempted (see below).;	     If no keyboard input is detected, the system first checks;	     parameter memory for a valid boot device and, if none, defaults;	     to booting from a Profile attached to the builtin parallel port;	     for Lisa 1 systems.;;	     For Lisa 2 systems, a check is first made to verify a disk;	     (internal or external) is connected before defaulting to the;	     hard disk boot.  If no disk is detected, the system defaults;	     to booting from the floppy drive.;;;; Inputs:    Checks for keyboard input from the user.  Currently, the following;	     key sequences are honored if input after the system "clicks" the;	     speaker (CMD refers to the Apple key on the keyboard):;;	        CMD/1 - boot from Twiggy drive #1 or integral hard disk;	        CMD/2 - boot from Twiggy drive #2 or SONY drive;	        CMD/3 - boot from Profile attached to parallel port or integral hard disk;	        CMD/4 - boot from I/O slot #1, port 1;	        CMD/5 - boot from I/O slot #1, port 2;	        CMD/6 - boot from I/O slot #2, port 1;	        CMD/7 - boot from I/O slot #2, port 2;	        CMD/8 - boot from I/O slot #3, port 1;	        CMD/9 - boot from I/O slot #3, port 2;	        CMD/ENTER (on key pad) - abort boot, branch to ROM monitor;	        CMD/SHIFT/P - abort boot, do power cycling;;  OUTPUTS:  Saves various results and contents of system registers in memory;	     for examination by system programs or with the ROM monitor.;;	        $180-183 : Power-up status (x0000000 = ok);	        $184-185 : Memory sizing error results;	        $186-1A5 : Results of memory read/write tests;	        $1A6-1A9 : Parity error memory address (if error during mem test);	        $1AA-1AB : Memory error address latch;	        $1AC-1AF : D7 save on exception errors;	        $1B0-1B1 : Results of MMU tests (context/data bits);	        $1B2	 : Keyboard ID (00 = no ID received);	        $1B3	 : Boot device ID;	        $1B4-1B9 : Boot failure data;	        $1BA-1BF : Clock setting (Ey,dd,dh,hm,ms,st);	        $1C0-1DF : Data reg save area (D0 - D7);	        $1E0-1FF : Address reg save area (A0 - A7, A7 = USP);	        $240-260 : System serial #;	        $260-267 : Scratch area;	        $268-26B : Suspected (logical) memory error address for parity error;	        $26C-26F : Save of data written to suspected error address;	        $270-273 : Actual (logical) error address found during search;	        $274-277 : Save of data read during parity error search;	        $278-27B : (Physical) error address read from parity error address latch;	        $27C	 : Error row for parity chip failure (0 = first row, 7 = last row);	        $27D	 : Error column for parity chip failure (9 or 14);	        $27E-280 : Reserved;	        $280-293 : Exception data save area;			    (FC/EXCADR/IR/SR/PC/EXCTYPE/SSP);			    44 = NMI or other interrupt;			    45 = bus error;			    46 = address error;			    47 = other exception/interrupt;			    48 = illegal instruction error;			    49 = line 1010 or 1111 trap;			    50 = bus error accessing keyboard VIA;			    51 = bus error accessing parallel port VIA;			    57 = bus error accessing disk controller;	        $294-297 : Maximum physical memory address + 1;	        $298-299 : I/O slot 1 card id (0 = no card present);	        $29A-29B : I/O slot 2 card id;	        $29C-29D : I/O slot 3 card id;	        $29E	 : Reserved;	        $29F	 : Reserved;	        $2A0	 : Reserved;	        $2A1	 : Disk ROM id;	        $2A2-2A3 : Reserved;	        $2A4-2A7 : Minimum physical address;	        $2A8-2AB : Total memory (Max-Min);	        $2AC	 : SCC test results;	        $2AD	 : Slot # of memory board if memory error;	        $2AE	 : Result of disk controller self-test;	        $2AF	 : System type (0 = Lisa 1, 1 = Lisa 2, 2 = Lisa 2 with external hard disk,;				        3 = Lisa 2 with internal hard disk);	        $2B0-2BF : Keyboard queue (16 bytes);	        $2C0-480 : ROM scratchpad/stack area;	        $480-800 : Reserved for ROM local variable usage;;	     Also saves data in special parameter memory area reserved for boot ROM use if error;	     encountered.  Usage is as follows:;;	        $FCC161	    : Error code;	        $FCC163-165 : Contents of memory error address latch if parity error;	        $FCC167	    : Memory board slot # if memory error;	        $FCC169-173 : Last value read from clock;	        $FCC175-17B : Reserved;	        $FCC17D-17F : Checksum;;; Originator:  Rich Castro  7/30/81 - Version 0.0 released to manufacturing;; Modified by: Rich Castro  7/30 - 11/3/81 - Made the following changes:;				       1) Twiggy bootstrap capability;				       2) Initial COPS test and keyboard scan;				       3) Moved parallel card to slot 2;				       4) Changed ROM interrupt/exception vectors,;				       5) Created jump table for ROM routines;;			    11/3/81  - Version 0.7 released to the world;;			    11/4/81 - 1/15/82 - Made the following changes:;				       1) Added support for new memory cards;				       2) Added warm-start capability and jump;					  table for ROM subroutine usage;				       3) Modified MMU reset routine to support;					  single step board usage;				       4) Added full memory initialization;				       5) Added 256K memory parity test;				       6) Modified COPS initialization so that;					  keyboard commands can be sensed more;					  reliably;				       7) Added error code display routines and;					  display of CPU and IO ROM versions;				       8) Added preliminary disk controller test;				       9) Updated warm-start check;				      10) Modified disk interface test;				      11) Changed low memory assignments;				      12) Made corrections for no I/O board, disk;					  interface error and contrast setting;				      13) Modified memory sizing routine to;					  catch memory errors;				      14) Modify MMU test to avoid context 0;					  destruction, add contrast setting for;					  new machines, correct disk error and;					  CPU ROM messages;				      15) Move stack so old memory test still runs;;			        1/15/82 - Release version 0.16;			        1/18/82 - Fix stack problem and release vrsn 0.17;			        1/19/82 - Change stack for call routine and version;					  to 0.18;			        1/27/82 - Change MMU error routine to do address;					  and data line toggling;			        1/28/82 - Add video circuitry test;			        1/30/82 - Add write wrong parity test;			        1/31/82 - Move run time stack to $180;			        2/6/82  - Add Profile bootstrap with upgrade for;					  OS use (add jump table entries also);			        2/15/82 - Update Twiggy bootstrap and add entry;					  for OS use; also add MMU test to;					  conditional assembly and add context;					  saving to MMUTST2 routine;			        2/17/82 - Add correction to memory test for;					  reboot problem and leave parity on;			        2/24/82 - Add code for clock test and special;					  burn-in cycling;			        2/25/82 - Add code to simulate soft on switch;					  pressed for COPS problem;			        3/1/82  - Removed all changes since ROM 0.18;					  release except for parity enabling,;					  no reset feature, memory sizing change;					  and Profile booting;			        3/1/82  - Restore default stack ptr loc to $300;			        3/1/82  - Move default stack to $0400, restore;					  everything except MMU testing;			        3/4/82  - Add MMU initialization and modify;					  Twiggy, Profile boot routines for new;					  load point;			        3/10/82 - Add change for new I/O addresses and;					  fix for Twiggy routine;			        3/10/82 - Change contrast value for new I/O's;			        3/15/82 - Add correction for Profile and COPS;					  routines and display msg when booting;			        3/17/82 - Restore version # at end of file;			        3/18/82 - Release version 0.22;;			        4/5/82  - Make initial 2732 version (1.00); add;					  following changes:;					    1) correct MMU error routine bug;					    2) change stack for CALL to $0400;					    3) add parity disable to WWP routine;					    4) change MMU I/O space code to '9';					    5) add invalid boot code message;			        4/6/82  - Add speaker click after COPS check;			        4/7/82  - Add jump table entry for speaker;					  routine, 1 second delay before "click";					  and alpha lock key check;;			        4/8/82  - Release version 1.00;;			        5/5/82  - Add I/O slot configuration check and;					  I/O slot booting.  Also add change to;					  Profile read routine for PCR setting.;			        5/12/82 - Add burnin power-cycling routine as;					  boot option invoked by CMD/P.;			        5/13/82 - Add changes for COPS command timing,;					  Twiggy timeout, Twiggy booting, and;					  add power-cycling routine.;			        5/14/82 - Add fixes for booting via parameter;					  memory and COPS timing experiment.;			        5/17/82 - Add display of loop count and run time,;					  and alter parameter memory useage for;					  power-cycling option.;			        5/18/82 - Add display of Twiggy errors, change;					  COPS routine for precheck code.;			        5/20/82 - Add contrast reset for "warm start",;					  add cycle value display, restore COPS;					  timeout code.;;			        5/21/82 - Release version 1.02;;			        5/26/82 - Begin addition of ROM monitor; set;					  default to Apple if PM = 00.;			        6/1/82  - Make following changes:;					  1) Memory sizing retry count to 64;					  2) Save results on memory sizing errors;					  3) Update NMI routine to check for parity;					     errors.;					  4) Restore default NMI vector after;					     memory test.;					  5) Create read clock subroutine and call;					     when doing clock display.;					  6) Add boot fix to save device id.;			        6/1/82  - Change to new sizing algorithm and retry;					  count back to 32.;			        6/3/82  - Convert to version 1.03;			        6/3/82  - Made following changes:;					   1)Localize message display to TSTCHK;					   2)Do clear screen only in INITVCT and;					     in TSTCHK and second monitor level.;					   3)Change default video page to last.;					   4)Complete first edition of monitor.;			        6/7/82  - Modify monitor level2 user interface.;			        6/10/82 - Made following changes:;					   1)Add boot from Apple as CMD/A.;					   2)Clear screen and display only in;					     routine TSTCHK.;					   3)Add ROM checksum error bit.;					   4)Add exception error check to TSTCHK.;					   5)Add speaker click just before;					     keyboard scan.;					   6)Reset to first video page for boot;					     from Apple.;					   7)Merge in changes from 1.03 file.;					   8)Add parity error check to TSTCHK;					   9)Change power-cycling so that double;					     bus fault used to restart diags;			        6/11/82 - Made following changes:;					   1)Increase Twiggy timeout to 2 mins.;					   2)Add 5 sec delay in power-cycle mode;					     before shutting down.;;			        6/14/82 - Release version 1.04;;			        6/22/82 - Add loop after COPS test if error;					  since keyboard not accessible.  Also add;					  fix for NMI restore after memory test.;			        6/30/82 - Made following changes:;					   1)Add parameter memory and I/O boot;					     checksum routines.;					   2)Remove boot id save to parameter;					     memory, except for power-cycle.;					   3)Change to new boot device id's.;			        7/1/82  -  1)Add changes for new Twiggy firmware.;					   2)Add fixes for bugs in 1.04:;					    a)Add row setting before error display;					      to avoid writing over menu line.;					    b)Set device codes for Profile and;					      I/O slots to allow display if error.;					    c)Enable setting of timeout for Twiggy;					      reads.;					    d)Save error codes for I/O boot in;					      memory.;					    e)Add option of clearing memory in;					      INITMON routine.;			        7/7/82  - Made following changes:;					   1)Modify checksum routines;					   2)Add keyboard/mouse check/reset code;			        7/13/82 - Add speed parameter for new Twiggy code;			        7/14/82 - Add check for DSKDIAG in disk test,;					  change to new Twiggy error codes;			        7/15/82 - Made following changes:;					   1)Add Profile routine updates.;					   2)Restore old boot id codes - new ones;					     used only when new Twiggy code;					     released.;					   3)Upgrade burnin code for new parameter;					     memory usage.;					   4)Attempt to enable keyboard after MMU;					     errors.;					   5)Remove I/O boot checksum code until;					     conversion to new Twiggy code.;					   6)Add video pattern display code..;					   7)Remove characters from table and;					     make other changes to save bytes.;					   8)Upgrade service mode display option;					     to handle count up to $FFFF.;;			        7/16/82 - Create version 1.05;			        7/19/82 - Add bug fixes for MMU testing, power-;					  cycle memory testing, Profile boot;					  and service mode display option.;;			        7/19/82 - Create version 1.06;			        7/20/82 - Add fix for MMU testing to properly;					  record context in error;;			        7/20/82 - Release version 1.07;;			        7/21/82 - Make keyboard/mouse reset code changes;					  and move check to before first "click";			        7/23/82 - Add extended memory tests;			        7/27/82 - Add screen memory test and VIA tests.;					  Change default boot for new Twiggy code;					  to upper Twiggy.  Add conditionals for;					  Apple code.;			        7/29/82 - Add SCC test, optimize code.;			        7/30/82 - Add RAM address uniqueness test.;			        8/4/82  - Added the following:;					   1)Twiggy mods for interleave;					   2)Monitor options CONTINUE and LOOP;					   3)Exception routine for line 1111 and;					     line 1010 errors.;			        8/9/82  - Add Twiggy mod for disk clamp, add mods;					  for kernel test failures such as screen;					  flash on MMU error.;			        8/11/82 - Add memory sizing fix, increase delay;					  for COPS and change default boot to;					  TWIGGY!!;			        8/12/82 - Begin code changes for new user interface;					  and add hooks for icon display.;			        8/14/82 - Add mods for Twiggy changes to monitor;					  DSKDIAG line and add initial timeout.;					  Continue user interface changes.;			        8/18/82 - Add mouse, cursor code and changes for;					  Customer mode to use mouse.;			        8/23/82 - Add controls for 2716 version of ROM.;					  Add changes for Service mode to use;					  pull down menu, eliminate keyboard;					  queuing while awaiting input.;			        8/24/82 - Add dialog box, and window to service;					  mode with modified scroll and character;					  output routines.;			        8/25/82 - Add icons along with routines to display;					  during test and for errors.;			        8/27/82 - Add routines for displaying and using;					  boot icon menu.;			        8/30/82 - Add auto boot from Applenet.;			        8/31/82 - Add minor additions to Service mode;					  for Set and Loop options.;;			        8/31/82 - Create and do internal release of;					  2716 (0.24), 2732 (1.15) and 2764 (2.00);					  ROM versions.;;			        9/8/82  - Add fixes for I/O slot icon display;					  and Profile icon display.;			        9/9/82  - Add fix for reboot problem in 2716 ROM.;					  Add serial # read routine and test for;					  2732 and 2764 ROM versions.  Expand;					  stack for serial read routine.;			        9/10/82 - Add fix for device code display for ROM;					  versions 0.24 and 1.15.;;			        9/10/82 - Create and do internal release of new;					  ROM versions 0.25, 1.16 and 2.01.;;			        9/13/82 - Add fixes for memory sizing and I/O;					  slot booting.;;			        9/14/82 - Create and release ROM versions 0.26,;					  1.17 and 2.02.;;			        9/22/82 - Add fixes and code for:;					   1)Default video latch setting;					   2)Mask for I/O and exception errors;					   3)Message display on external calls;					      to ROM monitor;					   4)Contrast setting before screen test;					   5)Disable of NMI key on power-up;					   6)Boot failure after first load;					   7)Error tones for failures;					   8)Loop mode setting of NMI key;			        9/23/82 - Add;					   1)Power cycling;					   2)Full service mode menu;					   3)Loop mode test choice display;			        9/24/82 - Add dump memory option to service mode;			        9/25/82 - Modify display memory option to allow;					  count and address data on same line;			        9/29/82 - Add jump table entry for READMMU;			        9/30/82 - Add:;					   1)"No reset" feature;					   2)Verify Disk option for service mode;					   3)Optimize cursor routines and;					     remove unused CursorShield routine.;					   4)Invert rectangles when selected from;					     keyboard.;					   5)Display boot menu only if down keycode;					     detected.;			        10/5/82 - Add:;					   1)Memory error decoding to board level;					   2)New size and position for alert box;					   3)New test icon display;					   4)Diskette # for Twiggy errors;			        10/6/82 - Add:;					   1)Continue keyboard scan after COPS;					     errors;					   2)Set extended memory test bit for;					     loop on memory test option;					   3)Display I/O slot card # on errors;					   4)Change boot menu to "pull-down" format;					   5)Change to new icons;			        10/7/82 - Add:;					   1)SCC test;					   2)Error if no serial # (allow continue);					   3)Two passes of memory tests for extended;					     mode, one for regular mode;			        10/9/82 - Create version 2.03;			        10/10/82 - Add bug fixes and I/O slot ROM check in;					   config scan.;;			        10/12/82 - Create and release version 2.04.;;			        10/13/82 - Make following changes:;					    1)Add keyboard reset code;					    2)Remove SCC test;					    3)Add bug fixes for making alert box;					      and displaying bad keyboard;			        10/14/82 - Add display of check marks for test icons;			        10/18/82 - Add fixes for Monitor entry, Profile boot,;					   looping on diag tests;			        10/20/82 - Add message translations;			        10/21/82 - 1)Adjust alert box and button dimensions;					   2)Add boot from all ports on I/O slots;					   3)Add fix for CMD key detection in monitor;					   4)Change powercycle window to alert box;					   5)Extend verify timeout to 4 minutes;			        10/22/82 - 1)Add keyboard reset on external entry to ROM;					     monitor;					   2)Make Dump Memory routine conditional on;					     final LISA ROM;			        10/25/82 - 1)Change wait for disk error to branch to;					     monitor - CONTINUE option then continues;					     with the same boot device;					   2)Change RETRY phrase to RESTART;			        10/27/82 - Made following changes:;					    1)RESET instruction on startup;					    2)Jump table entries for access to memory;					      test and display decimal routines;					    3)Optimize warm start reset check and;					      MMU error loop routines;					    4)Change default video page to $2F for;					      no memory found.;					    5)Rewrite screen memory test. Change main;					      memory test to go from low memory;					      to base of screen memory.;					    6)Move inverse video check to after screen;					      test, doing rewrite only of screen page.;					    7)Add new boot failure code, with hooks to;					      catch booting errors after ROM has;					      released control to boot loader for Twiggy;					      and Profile booting.;			        10/29/82 - Add display for uncompressed slot card icons.;					   Modify TONE routine to init PCR reg.;			        11/1/82	 - Change external entry to monitor interface;					   so that error code displayed on same line as;					   message if no icon displayed;			        11/3/82	 - Made following changes:;					    1)Move creation of test icon display till;					      after keyboard reset so translation can;					      be done if necessary;					    2)Do cursor, mouse init only once so;					      cursor posn not reset;					    3)Optimize mouse, cursor routines;					    4)Correct COPSCMD routine;					    5)Upgrade check for Profile routine and;					      optimize Profile read code;			        11/8/82	 - Conditionally add check for keyboard connected;					   routine.;			        11/9/82	 - Create version 2.07;			        11/11/82 - Modify ROM checksum algorithm;			        11/12/82 - Add diskette eject on power-off;			        11/13/82 - 1)Remove Dump Memory/Verify Disk from Service;					     mode menu;					   2)Add speaker beep and specific read/write;					     loop for memory sizing and lo mem errors;			        11/15/82 - 1)Add keyboard/mouse disconnect check;					   2)Remove memory "clear" from sizing test - now;					     done after memory testing;			        11/16/82 - 1)Change power-cycle invoking to CMD/SHIFT/P;					     key sequence.;					   2)Change customer monitor mode invoking to;					     CMD/ENTER (on key pad) key sequence.;					   3)Add wait for profile loop in boot menu;					     display routine;					   4)Add timeout to general wait for clock;					     input routine;					   5)Increase delay for poweroff wait loop;					   6)Optimize character display routine;			        11/18/82 - 1)Add save of error code to special parameter;					     memory area for use during burnin.;					   2)Add context check for MMU testing;					   3)Create version 2.08 for internal release;			        11/19/82 - 1)Change initial position of cursor to center;					     of screen.;;			        11/19/82 -  Release versions 2.08 (internal) and;					    2.09 (for manufacturing);;			        12/15/82 -  Add:;					    1)Setting of VIA PCR reg for later use;					    2)Reset of keyboard before boot;					    3)Fix for slot 3 card check for boot menu;			        12/16/82 -  Add:;					    1)Move Profile cmd buffer to location $304;					    2)Change default boot device to Profile;					    3)Remove support for third boot port on;					      each slot;					    4)Expand id range for test card search;					    5)Don't display Restart button after boot;					      error;					    6)New icons;			        12/18/82 -  Fix memory test bug;;				 1/3/83	 -  Fix bug in reporting parity circuitry;					    failure.  Change version to 2.10.;				 1/7/83	 -  Make following changes:;					    1)Change keyboard sequences for I/O slot;					      booting;					    2)Extend timeout for inital Profile check;				 1/11/83 -  Change SCC test to use max baud rate for;					    loopback test;				 1/12/83 -  Add running of expansion card status routines;					    when configuration check is done;				 1/18/83 -  Add fixes for:;					    1)Continuing after memory error;					    2)Checking for no reset function;					    3)Memory sizing - search entire possible 2 meg;					    4)Read of I/O slot ROM for icon data -;					      ensure odd address for icon count;					    5)Default boot setting when loop on memory;					      test selected;				 1/21/83 -  Add save of disk controller self-test status;;				 1/28/83 -  Create and release ROM version 2.11;;				 3/15/83 -  Extend Profile timeout for case where drive;					    may be parking head. (bug RM016);				 4/20/83 -  Add fixes for:;					     1)Memory sizing (bug RM015).;					     2)Garbage sent out serial port (RM014).;					     3)Removed 6504 (bug RM013).;					     4)Never ready Profile (bug RM011).;					    Also do some code optimization in icon;					    routines to make room for fixes. (RM000);				 4/22/83 -  Do code optimization for setting bus error;					    vector (labeled as RM000).;					    Add changes for following requests:;					     1)Display ROM id's on bootup  (CHG001);					     2)Loop on address 1Meg-2 if sizing error  (CHG002);					     3)Turn off contrast before doing poweroff (CHG003);					     4)Change copyright notice.	 (CHG005);					       Also modify alert msg display routine (CHG005).;				 4/26/83 -  Add loop on CPU diags if no memory or I/O;					    board installed.  Also toggle LED. (CHG004);				 4/27/83 -  Do only basic memory test on warm-start. (CHG006);					    Add fix for NMI bug (RM010).;				 5/9/83	 -  Made following changes:;					     1)Change ROM id display to rev # (D) (CHG001);					     2)Change ROM test failure to loop at fixed address;					       $00FE00C8  (end of jump table)  (CHG007);					     3)Make correction for screen not cleared when;					       continuing from I/O slot error to boot menu.;					       (CHG008);				 5/10/83 -  Add change to enable display of uncompressed icons;					    upon external entry to ROM Monitor (CHG008).;;				 5/12/83 -  Create and release rev D of boot ROM.;;				 8/8/83	 -  Add changes for Pepsi system:   (CHG009);					    1) New icons.;					    2) Display of icons with id #'s.;				 8/9/83	 -  Add save of disk ROM id in low memory. (CHG010);					    Add fixes for:;					    1) SCC init for Applebus.  (CHG011);					    2) Test card boot search.  (CHG012);				 8/10/83 -  Delete inverse video check. (CHG013);					    Add fix to beep routine.    (CHG014);				 8/16/83 -  Delete memory address and ping pong routines,;					    add routines to decode parity error to;					    chip.       (CHG015);				 9/1/83	 -  Add retry for hard disk booting.  (CHG016);					    Add jump table entry for write to;					    parameter memory routine.   (CHG017);				 9/2/83	 -  Add new font, modify display routines. (CHG018);					    Add wait for hard disk ready when;					    power-cycling.  (CHG019);				 9/6/83	 -  Add setting of video latch whenever boot;					    error causes jump to ROM low memory default;					    vectors. (CHG020);					    Add fix for memory test/initialization;					    bug. (CHG021);				 9/7/83	 -  Add read of disk controller ROM self-test;					    results.  (CHG022);					    Add skip of disk eject on power-off if any;					    disk controller errors occurred.  (CHG023);;				 9/8/83	 -  Release for testing (rev 3B) with Pepsi systems.;;				 10/10/83 - 1)Make Pepsi icon changes.  (CHG024);					    2)Add fix for proper setting of carry bit;					      on floppy or hard disk boots. (CHG025);					    3)Add fix for video reset on boot from not ready;					      Profile. (CHG026);				 10/12/83 - Add change to reset SCC for Applebus before;					    doing memory test.  (CHG027);				 10/20/83 - Add fix for service mode bus error problem. (CHG028);;;				 10/20/83 - Release as rev E for Lisa and Pepsi systems.;;				 12/15/83 - 1)Add new code to determine system type. (CHG029);					    2)Change default boot device for Lisa 2;					       system if no hard disk connected. (CHG030);					    3)Extend timeout for hard disk ready. (CHG031);					    4)Add bug fix for wrong icon display on Lisa 2.;					       (CHG032);					    5)Add bug fix for menu display when mouse or;					      keyboard not connected. (CHG033);					    6)Remove save of error code in parameter memory.;					      (CHG034);				 12/16/83 - Release as rev 'X' for testing;;				 12/21/83 - Release as official rev 'F' for all systems;;				 1/25/84  - 1)Add code to properly initialize Profile-reset;					      and parity-reset lines for Profile booting    (CHG036);;				 2/7/84	  - 1)Extend hard disk default read timeout to 16;					      seconds for Widget systems. (CHG037);					    2)Add delay after hard disk reset for Widget;					      systems. (CHG038);				 2/8/84	  - Release as rev G for testing;;				 2/24/84  - Release as official rev H;;-----------------------------------------------------------------------------------------------------        .PAGE;-----------------------------------------------------------------------------------------------------;  Macro definitions;-----------------------------------------------------------------------------------------------------        .MACRO  BSR6        LEA     @1,A6        BRA     %1@1        .ENDM        .MACRO  BSRS6        LEA     @1,A6        BRA.S   %1@1        .ENDM        .MACRO  RTS6        JMP     (A6)        .ENDM        .MACRO  BSR4        LEA     @1,A4        BRA     %1@1        .ENDM        .MACRO  BSRS4        LEA     @1,A4        BRA.S   %1@1        .ENDM        .MACRO  RTS4        JMP     (A4)        .ENDM        .MACRO  BSR2        LEA     @1,A2        BRA     %1@1        .ENDM        .MACRO  BSRS2        LEA     @1,A2        BRA.S   %1@1        .ENDM        .MACRO  RTS2        JMP     (A2)        .ENDM        .MACRO  DISABLE        MOVE    SR,-(SP)        ORI     #$0700,SR        .ENDM        .MACRO  ENABLE        MOVE    (SP)+,SR        .ENDM        .PAGE;--------------------------------------------------------------------------;       Conditionals for assembly;--------------------------------------------------------------------------DIAGS	        .EQU    1	        ;controls assembly of selected diagsNEWLISA	        .EQU    1	        ;controls extra code for new LISA'sBURNIN	        .EQU    1	        ;controls code for burnin cyclingNORESET	        .EQU    1	        ;controls code for reset featureEXTERNAL        .EQU    0	        ;controls listing of externally                                        ; callable routines only (w/ EQU's)ROM16K	        .EQU    1	        ;controls code to be added when 16K                                        ; ROM's availableNEWTWIG	        .EQU    1	        ;controls code for new Twiggy firmware                                        ; interfaceFINLISA	        .EQU    0	        ;controls code for final LISA'sFINKBD	        .EQU    1	        ;controls check for final keyboardAAPL	        .EQU    0	        ;controls Apple monitor codeUSERINT	        .EQU    1	        ;controls code for new user interfaceDEBUG	        .EQU    0	        ;controls global equate allocationROM4K	        .EQU    0	        ;controls code for 2716 versionROM8K	        .EQU    0	        ;controls code for 2732 versionBMENU	        .EQU    1	        ;controls format of boot menu                                        ;  1 = pull down menuFULLSCC	        .EQU    1	        ;controls code for SCC testsINVERTCK        .EQU    0	        ;controls code for inverse video check	        CHG013        .IF     EXTERNAL = 1        .LIST;-----------------------------------------------------------------------------;  This is a listing of LISA boot ROM routines which are externally callable;  by other programs.  Calls are made via a jump table resident at a fixed;  location in the ROM (see listing).  Also listed are equates used by these;  routines.  If you have any questions/comments/suggestions, please call Rich;  Castro, x2504.;-----------------------------------------------------------------------------        .ENDC        .PAGE;--------------------------------------------------------------------------;       GENERAL EQUATES;--------------------------------------------------------------------------ROMBASE	        .EQU    $00FE0000       ;BASE ADDRESS FOR ROMROMSLCT	        .EQU    $00FE	        ;MSB'S OF ROM ADDRESSIOSPACE	        .EQU    $00FC0000       ;START OF IO SPACEVIDLTCH	        .EQU    $00FCE800       ;VIDEO ADDRESS LATCHDEFVID	        .EQU    $2F	        ;default setting for video latch                                        ; (end of 512K board in slot 1)DEFVID2	        .EQU    $AF	        ;default video latch setting and LED on        .IF  DEBUG = 0SCRNBASE        .EQU    $110	        ;ptr to base address for video page        .ELSESCRNBASE        .EQU    $160	        ;ptr to base address for video page        .ENDC        .IF  USERINT = 0RBYTES	        .EQU    900	        ;BYTES FOR EACH DISPLAY ROW        .ELSERBYTES	        .EQU    90	        ;BYTES FOR EACH DISPLAY ROW        .ENDCTOPOFFSET       .EQU    270	        ;offset for first row from top of screenRLONGS	        .EQU    225	        ;longs for each rowR0	        .EQU    0	        ;ROW 0 OFFSETR1	        .EQU    R0+90	        ;ROW 1 OFFSET, ETC.R2	        .EQU    R1+90R3	        .EQU    R2+90R4	        .EQU    R3+90R5	        .EQU    R4+90R6	        .EQU    R5+90R7	        .EQU    R6+90BUSVCTR	        .EQU    $0008	        ;BUS EXCEPTION VECTORADRVCTR	        .EQU    $000C	        ;ADDRESS EXCEPTION VECTORILLVCTR	        .EQU    $0010	        ;ILLEGAL INSTRUCTION VECTORL10VCTR	        .EQU    $0028	        ;line 1010 trapL11VCTR	        .EQU    $002C	        ;line 1111 trapNMIVCT	        .EQU    $007C	        ;NMI VECTOR LOCATIONTRPVCT0	        .EQU    $0080	        ; TRAP 0 VECTOR LOCATIONMAXADR	        .EQU    $00200000       ; MAX RAM ADDRESS + 1 (2 meg)ONEMEG	        .EQU    $00100000       ; 1 meg in hexHALFMEG	        .EQU    $00080000       ; 1/2 megQTRMEG	        .EQU    $00040000       ; 256KROW2ADR	        .EQU    $00020000       ; 128K - START OF 2ND MEMORY ROWSTKBASE	        .EQU    $0480	        ; DEFAULT BASE FOR STACKCALLBASE        .EQU    $0480	        ; STACK BASE FOR USE BY CALL ROUTINESETUP	        .EQU    $00FCE012       ; ADDRESS TO TURN SETUP BIT OFFSETUPON	        .EQU    $00FCE010       ; ADDRESS TO TURN SETUP ONPATRN	        .EQU    $AA55A55A       ; PATTERN FOR MEMORY TESTINGPATRN2	        .EQU    $A55A	        ; PATTERN FOR MMU TESTPARON	        .EQU    $00FCE01E       ;PARITY ENABLEPAROFF	        .EQU    $00FCE01C       ;PARITY DISABLEMEALTCH	        .EQU    $00FCF000       ;MEMORY ERROR ADDRESS LATCHSTATREG	        .EQU    $00FCF801       ;ERROR STATUS REGISTERSFER	        .EQU    0	        ; SOFT ERROR BITPBIT	        .EQU    1	        ; HARD ERROR (PARITY) BITVRBIT	        .EQU    2	        ; VR BIT LOCATIONVIDBIT	        .EQU    4	        ; VID BITCSBIT	        .EQU    5	        ; CSYNC BITINVIDBIT        .EQU    6	        ; INVERSE VIDEO BITRETRYCNT        .EQU    32	        ;RETRY COUNT FOR MEMORY SIZINGVTIRDIS	        .EQU    $00FCE018       ;VERTICAL RETRACE DISABLEVTIRENB	        .EQU    $00FCE01A       ;VERTICAL RETRACE ENABLEHEX512K	        .EQU    $80000	        ;512K in hexHEX128K	        .EQU    $20000	        ;128K in hexHEX96K	        .EQU    $18000	        ;96K in hexHEX32K	        .EQU    $8000	        ;32K in hexHEX8K	        .EQU    $2000	        ;8K in hexHEX2K	        .EQU    $0800	        ;2K in hexLOMEM	        .EQU    HEX2K	        ;amount of memory initially testedDG2ON	        .EQU    $00FCE006       ;WRITE WRONG PARITY ENABLEDG2OFF	        .EQU    $00FCE004       ;WRITE WRONG PARITY DISABLEONESEC	        .EQU    $3D090	        ;1 second delay constantTWOSEC	        .EQU    ONESEC*2        ;2 second delayFIVESEC	        .EQU    ONESEC*5        ;5 second delayQTRSEC	        .EQU    ONESEC/4        ;0.25 second delayTNTHSEC	        .EQU    ONESEC/10       ;0.1 second delayKBDDLY	        .EQU    <ONESEC*17>/10  ;1.7 second delayHALFSEC	        .EQU    ONESEC/2        ;0.5 second delay;  Equates for memory parity error routineMSRCHSZ	        .EQU    64	        ;main memory error range	        CHG015VSRCHSZ	        .EQU    32768	        ;video memory error range	        CHG015VMSK	        .EQU    $FFFF8000       ;mask for video errors		        CHG015ADRMSK	        .EQU    $03	        ;mask for error byte address	        CHG015PHYTOLOG        .EQU    $80000	        ;physical to logical address offset     CHG015        .IF     EXTERNAL = 1        .NOLIST        .ENDC;  Equates for VIA registers (offsets from $XXD181 or $XXD101)VIA1BASE        .EQU    $00FCDD81       ;BASE ADDRESS FOR COPS 6522ORB1	        .EQU    $0	        ;PORT B OUTPUT REGORA1	        .EQU    $2	        ;PORT A OUTPUT REGDDRB1	        .EQU    $4	        ;PORT B DATA DIRECTION REGDDRA1	        .EQU    $6	        ;PORT A DATA DIRECTION REGT1LL1	        .EQU    $C	        ;LOW ORDER T1 LATCHT1LH1	        .EQU    $E	        ;HIGH ORDER T1 LATCHT2CL1	        .EQU    $10	        ;LOW ORDER T2 COUNTERT2CH1	        .EQU    $12	        ;HIGH ORDER T2 COUNTERSHR1	        .EQU    $14	        ;SHIFT REGACR1	        .EQU    $16	        ;AUXILIARY CONTROL REGPCR1	        .EQU    $18	        ;PERIPHERAL CONTROL REGIFR1	        .EQU    $1A	        ;INTERRUPT FLAG REGIER1	        .EQU    $1C	        ;INTRPT ENABLE REGPORTA1	        .EQU    $1E	        ;PORT A WITH NO HANDSHAKEFDIR	        .EQU    4	        ;PORT B, BIT 4 HAS FDIR STATEVIA2BASE        .EQU    $00FCD901       ;BASE ADDRESS FOR OTHER 6522ORB2	        .EQU    $0	        ;PORT B OUTPUT REGIRB2	        .EQU    $0	        ;PORT B INPUT REGORA2	        .EQU    $8	        ;PORT A OUTPUT REGIRA2	        .EQU    $8	        ;PORT A INPUT REGDDRB2	        .EQU    $10	        ;PORT B DATA DIRECTION REGDDRA2	        .EQU    $18	        ;PORT A DATA DIRECTION REGT1LL2	        .EQU    $30	        ;LOW ORDER T1 LATCHT1LH2	        .EQU    $38	        ;HIGH ORDER T1 LATCHT2CL2	        .EQU    $40	        ;LOW ORDER T2 COUNTERT2CH2	        .EQU    $48	        ;HIGH ORDER T2 COUNTERPCR2	        .EQU    $60	        ;PERIPHERAL CONTROL REGPORTA2	        .EQU    $78	        ;PORT A WITH NO HANDSHAKEDSKDIAG	        .EQU    6	        ;port B, bit 6 is disk alive indicatorCSTRB	        .EQU    $00FCD01C       ;STROBE FOR CONTRAST LATCH;  Equates for PIA registers (offsets from $XXA001) (SLOT 2)PIABASE	        .EQU    $00FCA001       ;BASE ADDRESS FOR PIA CARD IN SLOT 2INDATA	        .EQU    $0OUTDATA	        .EQU    $2INCSR	        .EQU    $4OUTCSR	        .EQU    $6;  Equates for SCCSCCBCTL	        .EQU    $FCD241	        ;SCC channel B controlACTL	        .EQU    2	        ;offset to SCC channel A controlSCCDATA	        .EQU    4	        ;offset to SCC data regsRXBF	        .EQU    0	        ;receive buffer full bitTXBE	        .EQU    2	        ;transmit buffer empty bit        .PAGE        .IF  USERINT = 0;  The following equates are used as error indicatorsCPUSEL	        .EQU    0	        ;CPU selection logic errorMMU	        .EQU    1	        ;MMU ERRORVID	        .EQU    2	        ;CPU VIDEO LOGIC ERRORPAR	        .EQU    3	        ;CPU PARITY LOGIC ERRORCPUINTR	        .EQU    4	        ;UNEXPECTED INTERRUPT OCCURREDBUSEXCP	        .EQU    5	        ;BUS ERRORADREXCP	        .EQU    6	        ;ADDRESS ERRORMISEXCP	        .EQU    7	        ;MISC EXCEPTIONILLEXCP	        .EQU    8	        ;ILLEGAL INSTRUCTION ERRORTRPEXCP	        .EQU    9	        ;line 1111 or 1010 trapVIA1	        .EQU    10	        ;COPS VIA ERRORVIA2	        .EQU    11	        ;PARALLEL PORT VIA ERRORIOCOPS	        .EQU    12	        ;IO BOARD COPS ERRORKBDCOPS	        .EQU    13	        ;KEYBOARD COPS ERRORCLK	        .EQU    14	        ;CLOCK ERRORRS232A	        .EQU    15	        ;RS232 PORT A ERRORRS232B	        .EQU    16	        ;RS232 PORT B ERRORDISK	        .EQU    17	        ;DISK ERRORIOEXCP	        .EQU    18	        ;UNEXPECTED IO EXCEPTION OCCURREDIOCOPS2	        .EQU    19	        ;COPS reset code errorMEM	        .EQU    20	        ;MEMORY ERRORMPAR	        .EQU    21	        ;memory parity errorIOKBD	        .EQU    23	        ;I/O or keyboard failureKBDOUT	        .EQU    24	        ;KEYBOARD DISCONNECTEDMOUSOUT	        .EQU    25	        ;MOUSE DISCONNECTEDIO1ERR	        .EQU    26	        ;I/O slot 1 failureIO2ERR	        .EQU    27	        ;I/O slot 2 failureIO3ERR	        .EQU    28	        ;I/O slot 3 failureALTBOOT	        .EQU    29	        ;alternate boot key requestWRMSTRT	        .EQU    30	        ;warm-start indicatorLOOP	        .EQU    31	        ;loop on testERRMSK	        .EQU    $00FFFFFF       ;MASK FOR ERROR CHECKINGCPUMSK	        .EQU    $0000000F       ;MASK FOR CPU ERROR CHECKINGEXMSK	        .EQU    $000003F0       ;mask for exception error checkingMEMMSK	        .EQU    $00700000       ;mask for memory error checkingIOMSK	        .EQU    $008FDC00       ;MASK FOR I/O ERROR CHECKINGOTHRMSK	        .EQU    $03000000       ;mask for keyboard/mouse checkCONTMSK	        .EQU    $00CE3FFC       ;mask for CONTINUE option        .ELSEMMU	        .EQU    0	        ;MMU ERRORCPUSEL	        .EQU    1	        ;CPU selection logic errorVID	        .EQU    2	        ;CPU VIDEO LOGIC ERRORPAR	        .EQU    3	        ;CPU PARITY LOGIC ERRORCPUINTR	        .EQU    4	        ;UNEXPECTED INTERRUPT OCCURREDBUSEXCP	        .EQU    5	        ;BUS ERRORADREXCP	        .EQU    6	        ;ADDRESS ERRORMISEXCP	        .EQU    7	        ;MISC EXCEPTIONILLEXCP	        .EQU    8	        ;ILLEGAL INSTRUCTION ERRORTRPEXCP	        .EQU    9	        ;line 1111 or 1010 trapVIA1	        .EQU    10	        ;COPS VIA ERRORVIA2	        .EQU    11	        ;PARALLEL PORT VIA ERRORIOCOPS	        .EQU    12	        ;IO BOARD COPS ERRORKBDCOPS	        .EQU    13	        ;KEYBOARD COPS ERRORCLK	        .EQU    14	        ;CLOCK ERRORRS232A	        .EQU    15	        ;RS232 PORT A ERRORRS232B	        .EQU    16	        ;RS232 PORT B ERRORDISK	        .EQU    17	        ;DISK ERRORIOEXCP	        .EQU    18	        ;UNEXPECTED IO EXCEPTION OCCURREDIOCOPS2	        .EQU    19	        ;COPS reset code errorIOKBD	        .EQU    20	        ;I/O or keyboard failureMEM	        .EQU    21	        ;MEMORY ERRORMPAR	        .EQU    22	        ;memory parity errorKBDOUT	        .EQU    23	        ;KEYBOARD DISCONNECTEDMOUSOUT	        .EQU    24	        ;MOUSE DISCONNECTEDIO1ERR	        .EQU    25	        ;I/O slot 1 failureIO2ERR	        .EQU    26	        ;I/O slot 2 failureIO3ERR	        .EQU    27	        ;I/O slot 3 failureALTBOOT	        .EQU    28	        ;alternate boot key requestBTMENU	        .EQU    29	        ;boot menu requestWRMSTRT	        .EQU    30	        ;warm-start indicatorLOOP	        .EQU    31	        ;loop on testERRMSK	        .EQU    $0E7FFFFF       ;MASK FOR ERROR CHECKINGCPUMSK	        .EQU    $0000000F       ;MASK FOR CPU ERROR CHECKINGEXMSK	        .EQU    $000003F0       ;mask for exception error checkingIOMSK	        .EQU    $001FDC00       ;MASK FOR I/O ERROR CHECKINGMEMMSK	        .EQU    $00600000       ;mask for memory error checkingOTHRMSK	        .EQU    $01800000       ;mask for keyboard/mouse checkIOSMSK	        .EQU    $0E000000       ;mask for I/O slot error checkingCONTMSK	        .EQU    $001E3FFA       ;mask for CONTINUE option - allow continue                                        ; for MMU,VIDEO,CLK,RS232,MEM,MPAR,KBDOUT,                                        ; MOUSOUT,and IO slot errorsSCANMSK	        .EQU    $00183000       ;mask for results of initial keyboard scanALTBMSK	        .EQU    $70000000       ;mask for D7 when CONTINUE option invokedBOOTMSK	        .EQU    $008FFFFF       ;mask for errors that continue to boot attemptCPIOMSK	        .EQU    $001FFFFF       ;mask for checking for CPU and IO errors        .ENDC;  Equates for error codes displayed to user        .IF  NEWTWIG = 0ECPUSEL	        .EQU    0	        ;CPU selection logic errorEMMU	        .EQU    1	        ;MMU ERROREVID	        .EQU    2	        ;CPU VIDEO LOGIC ERRORECPAR	        .EQU    3	        ;CPU PARITY LOGIC ERRORECPUINTR        .EQU    4	        ;UNEXPECTED INTERRUPT OCCURREDEBUSEXCP        .EQU    5	        ;BUS ERROREADREXCP        .EQU    6	        ;ADDRESS ERROREMISEXCP        .EQU    7	        ;MISC EXCEPTIONEILLEXCP        .EQU    8	        ;ILLEGAL INSTRUCTION ERRORETRPEXCP        .EQU    9	        ;line 1111 or 1010 trapEVIA1	        .EQU    $10	        ;COPS VIA ERROREVIA2	        .EQU    $11	        ;PARALLEL PORT VIA ERROREIOCOP	        .EQU    $12	        ;IO BOARD COPS ERROREKBDCOP	        .EQU    $13	        ;KEYBOARD COPS ERRORECLK	        .EQU    $14	        ;CLOCK ERRORERS232A	        .EQU    $15	        ;RS232 PORT A ERRORERS232B	        .EQU    $16	        ;RS232 PORT B ERROREDISK	        .EQU    $17	        ;DISK ERROREIOEXCP	        .EQU    $18	        ;UNEXPECTED IO EXCEPTION OCCURREDEIOCOP2	        .EQU    $19	        ;IO board COPS code errorEMEM	        .EQU    $20	        ;R/W MEMORY ERROREPAR	        .EQU    $21	        ;PARITY ERROREIOKBD	        .EQU    $23	        ;I/O or keyboard error;  Special COPS error codes for burnin cyclingSERR1	        .EQU    $32	        ;error setting initial timeSERR2	        .EQU    $33	        ;error setting alarm        .ELSEEMMU	        .EQU    40	        ;MMU ERRORECPUSEL	        .EQU    41	        ;CPU selection logic errorEVID	        .EQU    42	        ;CPU VIDEO LOGIC ERRORECPAR	        .EQU    43	        ;CPU PARITY LOGIC ERRORECPUINTR        .EQU    44	        ;UNEXPECTED INTERRUPT OCCURREDEBUSEXCP        .EQU    45	        ;BUS ERROREADREXCP        .EQU    46	        ;ADDRESS ERROREMISEXCP        .EQU    47	        ;MISC EXCEPTIONEILLEXCP        .EQU    48	        ;ILLEGAL INSTRUCTION ERRORETRPEXCP        .EQU    49	        ;line 1111 or 1010 trapEVIA1	        .EQU    50	        ;COPS VIA ERROREVIA2	        .EQU    51	        ;PARALLEL PORT VIA ERROREIOCOP	        .EQU    52	        ;IO BOARD COPS ERROREKBDCOP	        .EQU    53	        ;KEYBOARD COPS ERRORECLK	        .EQU    54	        ;CLOCK ERRORERS232A	        .EQU    55	        ;RS232 PORT A ERRORERS232B	        .EQU    56	        ;RS232 PORT B ERROREDISK	        .EQU    57	        ;DISK ERROREIOEXCP	        .EQU    58	        ;UNEXPECTED IO EXCEPTION OCCURREDEIOCOP2	        .EQU    59	        ;IO board COPS code errorEIOKBD	        .EQU    60	        ;I/O or keyboard errorEMEM	        .EQU    70	        ;R/W MEMORY ERROREPAR	        .EQU    71	        ;PARITY ERROREBOOT	        .EQU    75	        ;general boot failure error code;  Special COPS error codes for burnin cyclingSERR1	        .EQU    61	        ;error setting initial timeSERR2	        .EQU    62	        ;error setting alarm        .ENDC;  Secondary status flag (STATFLGS) equatesNORSTRT	        .EQU    0	        ;governs display of restart buttonNOCONT	        .EQU    1	        ;error disallows Monitor CONTINUE optionMSBUTN	        .EQU    2	        ;mouse button detectedCMDFLG	        .EQU    3	        ;cmd button up/downMOUSE	        .EQU    4	        ;mouse button up/downCHKCMD	        .EQU    5	        ;if =1 user input from keyboard must                                        ; be prefaced by CMD keyBTN	        .EQU    6	        ;flag for button useMENU	        .EQU    7	        ;flag for menu use;  MMU equatesMMUSADRL        .EQU    $00008000       ;STARTING MMU LIMIT ADDRESSMMUSADRB        .EQU    $00008008       ;STARTING MMU BASE ADDRESSMMUEADRL        .EQU    $00FE8000       ;ENDING MMU LIMIT ADDRESSMMUEADRB        .EQU    $00FE8008       ;ENDING MMU BASE ADDRESSADR128K	        .EQU    $00020000       ;128K IN HEX - INCR FOR MMU REGS PTRSPAG128K	        .EQU    $00000100       ;128K PAGE INCREMENT FOR ORG REGSMEMLMT	        .EQU    $0700	        ;LIMIT VALUE FOR MEMORY SEGMENTSNMEMLMT	        .EQU    $08FF	        ;INVERSE OF VALUE (HIGH NIBBLE IGNORED)        .IF  ROM4K = 0IOLMT	        .EQU    $0900	        ;LIMIT VALUE FOR I/O SEGMENTNIOLMT	        .EQU    $06FF	        ;INVERSEIOLMT2	        .EQU    $0901	        ;limit value for no reset featureRSTLMT	        .EQU    $0FFE	        ;inverse mask for no reset feature        .ELSEIOLMT	        .EQU    $0800	        ;LIMIT VALUE FOR I/O SEGMENTNIOLMT	        .EQU    $07FF	        ;INVERSE        .ENDCSPLMT	        .EQU    $0F00	        ;LIMIT VALUE FOR SPECIAL I/O SPACENSPLMT	        .EQU    $00FF	        ;INVERSEINVPAG	        .EQU    $0C00	        ;INVALID PAGE LIMITMMU0B	        .EQU    $00008008       ;ADRESS OF ORG REG 0 (FOR LOW MEMORY)MMU0L	        .EQU    $00008000       ;ADDRESS OF LIMIT REG 0MMU126B	        .EQU    $00FC8008       ;ADDRESS OF ORG REG 126 (FOR I/O SPACE)MMU126L	        .EQU    $00FC8000       ;ADDRESS OF LIMIT REG 126MMU127B	        .EQU    $00FE8008       ;ADDRESS OF BASE REG 127 (FOR ROM SPACE)MMU127L	        .EQU    $00FE8000       ;ADDRESS OF LIMIT REG 127SEG1ON	        .EQU    $00FCE00A       ;CONTEXT SELECTION BIT 1 ENABLESEG1OFF	        .EQU    $00FCE008       ;CONTEXT SELECTION BIT 1 DISABLESEG2ON	        .EQU    $00FCE00E       ;CONTEXT SELECTION BIT 2 ENABLESEG2OFF	        .EQU    $00FCE00C       ;CONTEXT SELECTION BIT 2 DISABLE; Equates for serial number read routineDlycnst	        .equ    9	        ;constant for delay loopTKiller	        .equ    172	        ;time killer constantBytesPerRead    .equ    7	        ;bytes per readWordsPerRead    .equ    BytesPerRead*2  ;during reading one byte fits into one wordHalfSize        .equ    WordsPerRead*8  ;half the size of ScrachSizeScrachSize      .equ    HalfSize*2      ;size of the scrach array                                        ;I/O segment 126Snum	        .equ    $0fe8000        ;location of SN1 & SN2                                        ;special I/O segment 127dLcnt	        .equ    -4	        ;displacement for local variable LOOP COUNTERdSavArry        .equ    dLcnt-4	        ;disp. for Save Array pointerdScrach	        .equ    dSavArry-ScrachSize                                        ;disp. for pointer to local array SCRACHdStack	        .equ    dScrach	        ;disp. for the Link; Equates for COPS and keyboard scanMOUSDWN	        .EQU    $86	        ;MOUSE BUTTON PRESSEDCMDKEY	        .EQU    $FF	        ;LEFT COMMAND KEYALPHKEY	        .EQU    $FD	        ;ALPHA LOCK KEY "DOWN"        .IF NEWTWIG = 0AKEY	        .EQU    $F0	        ;'A' key - for boot from Apple ][MKEY	        .EQU    $D8	        ;'M' key - for abort to monitorFKEY	        .EQU    $E9	        ;'F' key - for Twiggy #1 bootGKEY	        .EQU    $EA	        ;'G' key - for Twiggy #2 bootHKEY	        .EQU    $EB	        ;'H' key - for Hard disk bootPKEY	        .EQU    $C4	        ;'P' key - for Power-cyclingKEY1	        .EQU    $F4	        ;'1' key - for I/O slot #1KEY2	        .EQU    $F1	        ;'2' key - for I/O slot #2KEY3	        .EQU    $F2	        ;'3' key - for I/O slot #3        .ELSEKEY1	        .EQU    $F4	        ;'1' key - for Twiggy #1 bootKEY2	        .EQU    $F1	        ;'2' key - for Twiggy #2 bootKEY3	        .EQU    $F2	        ;'3' key - for Profile bootAKEY	        .EQU    $F0	        ;'A' key - for I/O slot #3, port 1BKEY	        .EQU    $EE	        ;'B' key - for I/O slot #3, port 2CKEY	        .EQU    $ED	        ;'C' key - for I/O slot #3, port 3;DKEY		 .EQU	 $FB		 ;'D' key - for I/O slot #1, port 4;EKEY		 .EQU	 $E0		 ;'E' key - for I/O slot #2, port 4;FKEY		 .EQU	 $E9		 ;'F' key - for I/O slot #3, port 4ENTRKEY	        .EQU    $AF	        ;Right ENTER key - for Monitor invokingSHFTKEY	        .EQU    $FE	        ;Shift key - used for power-cyclingPKEY	        .EQU    $C4	        ;'P' key - for Power-cycling        .ENDCRSTCODE	        .EQU    $80	        ;reset codeKUNPLG	        .EQU    $FD	        ;keyboard unpluggedICERR	        .EQU    $FE	        ;I/O board COPS RAM errorKCERR	        .EQU    $FF	        ;keyboard COPS RAM errorMSUNPLG	        .EQU    $07	        ;mouse unpluggedMSPLG	        .EQU    $87	        ;mouse plugged in        .IF     EXTERNAL = 1        .LIST        .PAGE        .ENDC; Equates for Boot device id's        .IF     NEWTWIG = 0TWIG1	        .EQU    FKEY		  ;TWIGGY DRIVE #1TWIG2	        .EQU    GKEY		  ;TWIGGY DRIVE #2PROFILE	        .EQU    HKEY		  ;PROFILE HARD DISKIO1PORT1        .EQU    KEY1		  ;I/O SLOT 1, port 1IO2PORT1        .EQU    KEY2		  ;I/O SLOT 2, port 1IO3PORT1        .EQU    KEY3		  ;I/O SLOT 3, port 1PC	        .EQU    PKEY		  ;power-cycle idMON	        .EQU    MKEY		  ;abort boot, go to monitor idAPPLE	        .EQU    AKEY		  ;abort boot, go to Apple id        .ELSETWIG1	        .EQU    $0	        ;TWIGGY DRIVE #1TWIG2	        .EQU    $1	        ;TWIGGY DRIVE #2PROFILE	        .EQU    $2	        ;PROFILE HARD DISKIO1PORT1        .EQU    $3	        ;I/O SLOT 1, port 1IO1PORT2        .EQU    $4	        ;I/O SLOT 1, port 2IO2PORT1        .EQU    $6	        ;I/O SLOT 2, port 1IO2PORT2        .EQU    $7	        ;I/O SLOT 2, port 2IO3PORT1        .EQU    $9	        ;I/O SLOT 3, port 1IO3PORT2        .EQU    $A	        ;I/O SLOT 3, port 2PC	        .EQU    $F	        ;power cycle modeMON	        .EQU    $10	        ;abort boot, go to monitor id        .ENDC        .IF USERINT = 0PC	        .EQU    $C	        ;power-cycle idAPPLE	        .EQU    $E	        ;abort boot, go to Apple id        .ENDC; Equates for device code display (ASCII codes)        .IF  NEWTWIG = 0IOS1	        .EQU    $31	        ;I/O slot 1IOS2	        .EQU    $32	        ;I/O slot 2IOS3	        .EQU    $33	        ;I/O slot 3TWG1	        .EQU    $46	        ;Twiggy drive #1TWG2	        .EQU    $47	        ;Twiggy drive #2PRO	        .EQU    $48	        ;Profile        .ELSETWG1	        .EQU    $31	        ;Twiggy drive #1TWG2	        .EQU    $32	        ;Twiggy drive #2PRO	        .EQU    $33	        ;ProfileIOS1	        .EQU    $34	        ;I/O slot 1IOS2	        .EQU    $37	        ;I/O slot 2IOS3	        .EQU    $41	        ;I/O slot 3        .ENDC;----------------------------------------------------------------------------------; Equates for Disk controller shared memory/Twiggy boot;----------------------------------------------------------------------------------TWIGGY	        .EQU    1	        ;controls Twiggy code assembly (1 = YES)DISKMEM	        .EQU    $00FCC001       ;base address of shared memoryCMD	        .EQU    2	        ;offset for command byteDRV	        .EQU    CMD+2	        ;offset for drive #SIDE	        .EQU    DRV+2	        ;side #SCTR	        .EQU    SIDE+2	        ;sector #TRAK	        .EQU    SCTR+2	        ;track #        .IF  NEWTWIG = 0STAT	        .EQU    TRAK+2	        ;ERROR STATUSCHKCNT	        .EQU    STAT+2	        ;CHECKSUM ERROR COUNTHDR	        .EQU    CHKCNT+2        ;HEADER BYTESROMV	        .EQU    $30	        ;ROM VERSION #INTSTAT	        .EQU    $74	        ;INTERRUPT STATUSDSKSTAT	        .EQU    $7A	        ;DISK STATUSDISKROM	        .EQU    $00FCC031       ;absolute address for disk ROM #HDRSTRT	        .EQU    $FCC4BB	        ;ADDRESS OF HEADER BUFFERDSKBFR	        .EQU    $FCC601	        ;DISK BUFFER ADDRESSSEEK	        .EQU    0	        ;FOLLOWING ARE COMMAND BYTESREADS	        .EQU    1	        ;READ SECTORCLAMP	        .EQU    3	        ;CLAMP DISKETTESTATS	        .EQU    4	        ;STATUS REQUEST CMDUNCLAMP	        .EQU    5	        ;UNCLAMP DISKETTEFORMAT	        .EQU    6	        ;format diskVERIFY	        .EQU    7	        ;verify disk        .ENDC        .IF  NEWTWIG = 1SPEED	        .EQU    TRAK+2	        ;motor speed controlCNFRM	        .EQU    SPEED+2	        ;confirm for format cmdSTAT	        .EQU    CNFRM+2	        ;error statusINTLV	        .EQU    STAT+2	        ;interleave factor		        CHG022TYPE	        .EQU    INTLV+2	        ;drive type id			        CHG009STST	        .EQU    TYPE+2	        ;self-test result		        CHG022ROMV	        .EQU    $30	        ;ROM version #RTRYCNT	        .EQU    $58	        ;retry countINTSTAT	        .EQU    $5E	        ;interrupt statusCHKCNT	        .EQU    $BA	        ;data checksum error countCHKCNT2	        .EQU    $C4	        ;address checksum error countDSKBUFF	        .EQU    $3E8	        ;start of disk bufferDSKDATA	        .EQU    DSKBUFF+24      ;first 12 bytes are headerDISKROM	        .EQU    $FCC031	        ;absoulte address for disk ROM idSLOTMR	        .EQU    5	        ;id bit for slow timers		        CHG029FASTMR	        .EQU    6	        ;id bit for fast timers		        CHG029READS	        .EQU    0	        ;read sector w/checksumWRT	        .EQU    1UNCLAMP	        .EQU    2	        ;unclamp disketteFMT	        .EQU    3VFY	        .EQU    4	        ;verify diskCLAMP	        .EQU    9	        ;clamp diskOK	        .EQU    $FF	        ;confirmation for formatSEEK	        .EQU    $83	        ;seek cmd        .ENDCEXRW	        .EQU    $81	        ;execute cmdCLRSTAT	        .EQU    $85	        ;clear status cmdENBLINT	        .EQU    $86	        ;enable intrptDSABLINT        .EQU    $87	        ;disable intrptSLEEP	        .EQU    $88	        ;loop in RAM cmdDIE	        .EQU    $89	        ;loop in ROM cmdDRV1	        .EQU    0	        ;drive #1 IDDRV2	        .EQU    $80	        ;drive #2 IDTRK1	        .EQU    1	        ;track 1TOPSIDE	        .EQU    0	        ;top side of diskBOTSIDE	        .EQU    1	        ;bottom side of disk        .IF NEWTWIG = 0HDRLEN	        .EQU    12	        ;LENGTH OF HEADER ON TWIGGYSECLEN	        .EQU    256	        ;LENGTH OF 1 SECTORTWGHDR	        .EQU    $1FFE8	        ;ADDRESS TO LOAD BOOT HEADERTWGDATA	        .EQU    $20000	        ;ADDRESS TO LOAD BOOT DATA        .ENDC        .IF NEWTWIG = 1HDRLEN	        .EQU    12	        ;length of Twiggy headerSECLEN	        .EQU    512	        ;length of one sectorTWGHDR	        .EQU    $1FFF4	        ;address to load boot headerTWGDATA	        .EQU    $20000	        ;address to load boot dataLASTBLK	        .EQU    1702	        ;last block #DSKSIZE	        .EQU    1702	        ;total amount of blocks        .ENDC;  Equates for parameter memory used by boot ROMSTATSTRT        .EQU    $FCC161	        ;start of special parameter memory area for boot ROMSTATSAV	        .EQU    STATSTRT        ;save of error codeSTATSUM	        .EQU    $FCC17D	        ;checksum word for special areaSTATWRDS        .EQU    8	        ;length in words (16 bytes)PMSTRT	        .EQU    $FCC181	        ;start of system paramter memoryDVCCODE	        .EQU    $FCC189	        ;boot device codeMEMCODE	        .EQU    $FCC18D	        ;mouse/memory test indicator byteMOUSEON	        .EQU    7	        ;bit for mouse attached (1=yes)EXMEM	        .EQU    6	        ;bit for extended memory test (1=yes)PMCHKSM	        .EQU    $FCC1FD	        ;checksum wordPMWRDS	        .EQU    32	        ;length in words (64 bytes);  Equates for disk errors        .IF  NEWTWIG = 0TIMOUT	        .EQU    $10	        ;TIMEOUT ERRORWRPERR	        .EQU    $20	        ;WRITE PROTECT ERRORDRVERR	        .EQU    $40	        ;DRIVE ERROR (NO DISK IN PLACE)FMTERR	        .EQU    $60	        ;FORMAT ERRORRDWRERR	        .EQU    $80	        ;READ/WRITE ERRORCMDTIME	        .EQU    $100000	        ;TIMEOUT FOR TAKING COMMAND (7 secs)FDIRTIME        .EQU    $C00000	        ;TIMEOUT FOR SETTING FDIR (2 mins)        .ENDC        .IF  NEWTWIG = 1	        ;new firmware, new error codesDRVERR	        .EQU    07	        ;no disk in driveNODISK	        .EQU    DRVERR	        ;another name for itWRPERR	        .EQU    20	        ;write protect errorCLMPERR	        .EQU    22	        ;clamp errorRDWRERR	        .EQU    23	        ;read errorUCLMPERR        .EQU    25	        ;unclamp errorBADTHDR	        .EQU    38	        ;bad header (not a boot file id)TIMOUT	        .EQU    39	        ;timeout errorCMDTIME	        .EQU    $120000	        ;timeout for taking command (15 secs)FDIRTIME        .EQU    $C00000	        ;timeout for setting FDIR (2 mins)VFYTIME	        .EQU    <FDIRTIME*2>    ;timeout for verify disk operation (4 mins)EJCTTIME        .EQU    $180000	        ;timeout for ejecting disk (15 secs)DSKTMOUT        .EQU    $1C8000	        ;timeout for initial speed check (15 secs)INSRTTIM        .EQU    FDIRTIME        ;timeout for disk to be inserted (2 mins)FMTTIME	        .EQU    VFYTIME	        ;timeout for format operation        .ENDC;  Equates for disk interrupt statusDSK1IN	        .EQU    0	        ;drive #1 disk in placeBUTN1	        .EQU    1	        ;drive #1 button pushedRWF1	        .EQU    2	        ;read/write/format done on drive #1DSK2IN	        .EQU    4	        ;drive #2 disk in placeBUTN2	        .EQU    5	        ;drive #2 button pushedRWF2	        .EQU    6	        ;read/write/format done on drive #2;  Equates for disk status command responseDSKIN	        .EQU    2	        ;disk insertedBUTN	        .EQU    3	        ;button pressedDRVTYPE	        .EQU    $FCC015	        ;drive type id (0 = Twiggy,		        CHG009                                        ; 1 = single SONY, 2 = double SONY)	        CHG009        .PAGE;----------------------------------------------------------------------------;  Equates for use with Profile boot;----------------------------------------------------------------------------PROFLE	        .EQU    1	        ;controls assembly of Profile codeOCD	        .EQU    0	        ;OPEN CABLE DETECT INPUTBSY	        .EQU    1	        ;BUSY LINE INPUTCMDBUFR	        .EQU    $304	        ;BUFFER FOR COMMAND BYTESSTATBFR	        .EQU    $1B4	        ;STATUS BYTE BUFFER (uses BOOTDATA area)STAT1	        .EQU    $1B4	        ;STATUS BYTE 1STAT2	        .EQU    $1B5	        ;STATUS BYTE 2STAT3	        .EQU    $1B6	        ;STATUS BYTE 3STAT4	        .EQU    $1B6	        ;STATUS BYTE 4STATMSK	        .EQU    $C140C000       ;MASK FOR DON'T CARE STATUS BITS	        CHG016PCMDSZ	        .EQU    5	        ;BYTES FOR READ CMD - 1PCMD	        .EQU    0	        ; COMMAND CODEBLKH	        .EQU    1	        ; HIGH BLOCK ADDRESSBLKM	        .EQU    2	        ; MID BLOCK ADDRESSBLKL	        .EQU    3	        ; LOW BLOCK ADDRESSRETRY	        .EQU    4	        ; RETRY COUNTTHRESH	        .EQU    5	        ; THRESHOLD COUNTHDRBUFR	        .EQU    $1FFEC	        ;BUFFER FOR HEADERFILEID	        .EQU    4	        ; OFFSET TO FILEIDBOOTPAT	        .EQU    $AAAA	        ;FILEID FOR BOOT PATTERNDATABFR	        .EQU    $20000	        ;BUFFER FOR DATAHDRSIZE	        .EQU    20	        ;HEADER LENGTHBLKSIZE	        .EQU    512	        ;BLOCK SIZESTRTIME	        .EQU    $1200000        ;STARTUP TIMEOUT after power-up = about 3 minutesRSTRTIME        .EQU    $900000	        ;STARTUP TIMEOUT after reset = ABOUT 100 SECSRDTIME	        .EQU    $180000	        ;READ TIMEOUT = ABOUT 16 SECS		        CHG037BSYTIME	        .EQU    $0500	        ;Wait for busy high = about 10 msRSPTIME	        .EQU    $FFFF	        ;RESPONSE TIMEOUT = ABOUT 500 msRCNT	        .EQU    10	        ;BOOT RETRY COUNTTCNT	        .EQU    3	        ;THRESHOLD COUNT FOR 30% SPARING;  Equates for Profile boot error conditions        .IF  NEWTWIG = 0TMOUT	        .EQU    $10	        ;TIMEOUT ERRORNODSK	        .EQU    $11	        ;NO DISK ATTACHEDDSKBSY	        .EQU    $12	        ;DISK NOT READYBADRSP	        .EQU    $14	        ;UNEXPECTED RESPONSESTATNZ	        .EQU    $15	        ;NONZERO STATUS BYTEBADHDR	        .EQU    $16	        ;INCORRECT HEADER        .ELSENODSK	        .EQU    80	        ;DISK NOT ATTACHEDDSKBSY	        .EQU    81	        ;DISK NOT READYBADRSP	        .EQU    82	        ;UNEXPECTED RESPONSESTATNZ	        .EQU    83	        ;NONZERO STATUS BYTEBADHDR	        .EQU    84	        ;INCORRECT HEADERTMOUT	        .EQU    85	        ;TIMEOUT ERROR        .ENDC        .PAGE;----------------------------------------------------------------------------;  Equates for I/O slot booting;----------------------------------------------------------------------------SLOT1L	        .EQU    $FC0001	        ;I/O slot 1 SL addressSLOT2L	        .EQU    $FC4001	        ;I/O slot 2 SL addressSLOT3L	        .EQU    $FC8001	        ;I/O slot 3 SL addressSTBIT	        .EQU    14	        ;status bit in idICBIT	        .EQU    13	        ;icon bit in idTSTBIT	        .EQU    12	        ;test card bit in idSTENTRY	        .EQU    $20000	        ;entry point for status routineBTENTRY	        .EQU    $20002	        ;boot routine entry pointICONPTR	        .EQU    $20004	        ;pointer to icons, if anyAPPLENET        .EQU    $8001	        ;id for Applenet cardAPPLQUAL        .EQU    $9FFF	        ;qualifier for Applenet searchTSTCRD	        .EQU    $1000	        ;id for test cardTSTQUAL	        .EQU    $1800	        ;qualifier for test card search;  Error codes for I/O slot booting        .IF NEWTWIG = 0NOC	        .EQU    $30	        ;no card installedINV	        .EQU    $31	        ;not bootable cardBADSM	        .EQU    $32	        ;invalid checksumBADST	        .EQU    $33	        ;bad status returned        .ELSENOC	        .EQU    90	        ;no card installedINV	        .EQU    91	        ;not bootable cardBADSM	        .EQU    92	        ;invalid checksumBADST	        .EQU    93	        ;bad status returned        .ENDC        .PAGE        .IF     BURNIN = 1;----------------------------------------------------------------------------;  Special equates for burnin cylcing code;----------------------------------------------------------------------------INITFLG	        .EQU    $FCC191	        ;first pass flag (01 = no)HOURSAV	        .EQU    $FCC193	        ;save of last hour value from clockLCNTHI	        .EQU    $FCC195	        ;loop countLCNTLO	        .EQU    $FCC197TIMFLG	        .EQU    $FCC199	        ;flag to indicate hour save neededMINSAV	        .EQU    $FCC19B	        ;save of minute value for Twiggy testDSKCNTH	        .EQU    $FCC19D	        ;disk read error count - high byteDSKCNTL	        .EQU    $FCC19F	        ;disk read error count - low byteCLKSAVE	        .EQU    $FCC1A1	        ;saved clock valueALRMSAV	        .EQU    $FCC1B1	        ;saved alarm value last setCYCLCNT	        .EQU    $FCC1C1	        ;count of minutes for power cyclingCYCLVAL	        .EQU    $FCC1C3	        ;# of mins between power cyclesMINCNT	        .EQU    $FCC1C5	        ;count of minutes for debug modeENDPM	        .EQU    $FCC1FF	        ;end of parameter memorySET1	        .EQU    $0	        ;initial alarm/year/dd settingSET2	        .EQU    $10000000       ;d/hh/mm/ss/t settingHOUR	        .EQU    $1BC	        ;location of latest hour value readMINUTE	        .EQU    $1BD	        ;location of latest minute value readONEHOUR	        .EQU    $00E0F000       ;one hour setting for alarmONEMIN	        .EQU    $0003C000       ;one minute setting for alarmTENSECS	        .EQU    $00009000       ;ten secondsDLYTIME	        .EQU    $100000	        ;delay for screen display        .ENDC        .PAGE;----------------------------------------------------------------------------;  Equates for Monitor code and screen handling;----------------------------------------------------------------------------;  Ascii code equatesQUESTN	        .EQU    $3F	        ; ?RET	        .EQU    $0D	        ; CRBS	        .EQU    $08	        ; backspace;  Keyboard code equatesKEY4	        .EQU    $F3	        ;'4'KEY5	        .EQU    $E4	        ;'5'KEY6	        .EQU    $E1	        ;'6'KEY7	        .EQU    $E2	        ;'7'KEY8	        .EQU    $E3	        ;'8'KEY9	        .EQU    $D0	        ;'9'SKEY	        .EQU    $F6	        ;'S'CmdDwn	        .EQU    CMDKEY	        ;Command key downCmdUp	        .EQU    $7F	        ;Command key upMousUp	        .EQU    $06	        ;Mouse button up;  Low memory usageKBDBFR	        .EQU    $2C0	        ;keyboard buffer startKBDEND	        .EQU    $300	        ; and end (64 chars max)        .IF  USERINT = 0CRTROW	        .EQU    $300	        ;display row ptrCRTCOL	        .EQU    $301	        ;display col ptr        .ELSECRTROW	        .EQU    $300	        ;display row ptrCRTCOL	        .EQU    $302	        ;display col ptr        .ENDCMAXTEST	        .EQU    12	        ;max test # for LOOP option        .IF  USERINT = 0FIRSTROW        .EQU    3	        ;first row for display of msgsFIRSTCOL        .EQU    1	        ;first columnLASTROW	        .EQU    32	        ;last row for displayLASTCOL	        .EQU    88	        ;last column        .ELSE;  Equates for new user interface codeROWBYTES        .EQU    90	        ;width of screen in bytesMaxX	        .EQU    720	        ;width in pixelsMaxY	        .EQU    364	        ;length in pixelsMENULINE        .EQU    1440	        ;bottom line loc for menuDESKLINE        .EQU    1530	        ;top line loc for desktopDESKLMT	        .EQU    32760	        ;bottom line loc for desktopDESKPATRN       .EQU    $AAAA5555       ;pattern for "grey" desktopWROW	        .EQU    20		        ;window rowWCOL	        .EQU    2		        ;starting window colWINDWIDTH       .EQU    86		        ;width of window in bytesWINDHIGH        .EQU    320		        ;heigth of window in pixel linesWMIDROW	        .EQU    <WINDHIGH/2>+WROW       ;middle row in windowWMIDCOL	        .EQU    <WINDWIDTH/2>+WCOL      ;middle col in windowW14COL	        .EQU    <WINDWIDTH/4>+WCOL      ;col 1/4 across windowW34COL	        .EQU    <WINDWIDTH/4>*3+WCOL    ;col 3/4 across windowWINDSTRT        .EQU    <WROW*ROWBYTES>+WCOL    ;start of windowALBOXROW        .EQU    49			     ;starting row for alert boxALBOXCOL        .EQU    6			     ;starting col for alert boxALRTWIDTH       .EQU    78			     ;width of alert boxALRTHIGH        .EQU    164			     ;heigth of alert boxALRTSTRT        .EQU    <ALBOXROW*ROWBYTES>+ALBOXCOL ;upper left corner of alert boxMIDALROW        .EQU    ALBOXROW+<ALRTHIGH/2>	     ;middle row of alert boxMIDALCOL        .EQU    ALBOXCOL+<ALRTWIDTH/2>	     ;middle col of alert boxBTNWIDTH        .EQU    10		        ;width of buttonBTNHIGH	        .EQU    28		        ;heigth of buttonBTNSPC	        .EQU    48*ROWBYTES	        ;space between upper left corner of buttonsBTNMSPC	        .EQU    <10*ROWBYTES>+BTNWIDTH+4 ;position of button label relative to buttonBTNROW	        .EQU    ALBOXROW+20	        ;starting display row for buttonsBTNCOL	        .EQU    52		        ;starting display col for buttonsBTN1STRT        .EQU    <BTNROW*ROWBYTES>+BTNCOL ;location of first buttonBTN2STRT        .EQU    BTN1STRT+BTNSPC	        ;location of second buttonBTN3STRT        .EQU    BTN2STRT+BTNSPC	        ;location of third buttonBTN1MSG	        .EQU    BTN1STRT+BTNMSPC        ;location of button descriptionsBTN2MSG	        .EQU    BTN2STRT+BTNMSPCBTN3MSG	        .EQU    BTN3STRT+BTNMSPCMENUSTRT        .EQU    MENULINE+2      ;start of pull down menuMENULEN	        .EQU    11	        ;length of menu per entryMENUSPC	        .EQU    990	        ;vertical space between menu entriesMENUWIDTH       .EQU    18	        ;width of pull down menuMENULOC	        .EQU    273	        ;start pt for menu headingMENU1MSG        .EQU    MENUSTRT+182    ;location of first menu entryMBARLEN	        .EQU    16	        ;heigth of menu barMITEMS	        .EQU    7			   ;number of menu itemsMENUEND	        .EQU    MENUSTRT+<MITEMS*MENUSPC>  ;bottom of menu        .IF  BMENU = 1BMENUWIDTH      .EQU    MENUWIDTH       ;width of pull down menuBMENULEN        .EQU    34	        ;length of each boot menu entryBMENUSPC        .EQU    <BMENULEN*90>   ;vertical space between boot menu entries        .ENDCDBOXWIDTH       .EQU    84-MENUWIDTH		   ;width of dialog boxDBOXHIGH        .EQU    20			   ;heigth of dialog boxDBOXTOP	        .EQU    4*ROWBYTES		   ;dialog box spacing down from menu lineDBOXLEFT        .EQU    MENUWIDTH+2		   ;dialog box spacing left from menuDBOXSTRT        .EQU    MENUSTRT+DBOXLEFT+DBOXTOP  ;start of dialog boxDBOXROW	        .EQU    <DBOXSTRT/90>+4		   ;pixel row for dialog msgDBOXCOL	        .EQU    MENUWIDTH+6		   ;byte col for dialog msgSVCTOP	        .EQU    <DBOXHIGH+2>*ROWBYTES	   ;service window spacing down                                                   ; from top of dialog boxSVCLEFT	        .EQU    MENUWIDTH+2		   ;service window spacing left from menuSVCSTRT	        .EQU    DBOXSTRT+SVCTOP		   ;left corner for service windowSVCWIDTH        .EQU    84-MENUWIDTH		   ;width of service windowSVCHIGH	        .EQU    320			   ;length of service windowFIRSTROW        .EQU    <SVCSTRT/90>+20		   ;first row for display of msgsFIRSTCOL        .EQU    MENUWIDTH+6		   ;first columnROWSLEFT        .EQU    SVCHIGH-20		   ;pixel rows to bottom of service windowCHARROWS        .EQU    <ROWSLEFT/10>-3		   ;rows used for character displayLASTROW	        .EQU    <CHARROWS*10>+FIRSTROW	   ;last pixel row for displayLASTCOL	        .EQU    FIRSTCOL+SVCWIDTH-2	   ;last columnROWLINES        .EQU    10			   ;pixel row lines per characterROWLEN	        .EQU    <LASTCOL-FIRSTCOL>|1+1	   ;bytes per pixel row (must be even!)NROWS	        .EQU    <LASTROW-FIRSTROW>/ROWLINES ;number of character rowsCHRHIGH	        .EQU    8			   ;character heigth in pixel linesCHRWIDTH        .EQU    1			   ;width of char in bytesCHRSPC	        .EQU    CHRHIGH+2		   ;vert pixel lines between charsICONWIDTH       .EQU    6		        ;width in bytes of iconsICONHIGH        .EQU    32		        ;heigth of icons in pixel rowsTSTROW	        .EQU    ALBOXROW	        ;starting row for test alert boxTSTCOL	        .EQU    10			 ;starting col for test alert boxTSTWSTRT        .EQU    <TSTROW*ROWBYTES>+TSTCOL ;test alert box startTSTWWIDTH       .EQU    70			 ;width for test alert boxTSTWHIGH        .EQU    84		        ;heigth for test alert boxTSTMROW	        .EQU    TSTROW+15	        ;row for test message displayTSTMCOL	        .EQU    TSTCOL+4	        ;col for test message displayMIDTSTROW       .EQU    TSTROW+<TSTWHIGH/2>     ;middle row of test boxCHKROW	        .EQU    MIDTSTROW-<ICONHIGH/2>  ;row for check mark displayTSTIROW	        .EQU    CHKROW+10	        ;row for test icon displayTSTICOL	        .EQU    TSTCOL+10	        ;col for test icon displayTSTISPC	        .EQU    ICONWIDTH+8	        ;space between test iconsCPUSTRT	        .EQU    <TSTIROW*ROWBYTES>+TSTICOL ;upper left corner for CPU iconMEMSTRT	        .EQU    CPUSTRT+TSTISPC		   ;upper left corner for MEM iconIOSTRT	        .EQU    MEMSTRT+TSTISPC		   ;upper left corner for I/O iconXCRDSTRT        .EQU    IOSTRT+TSTISPC		   ;upper left corner for slot iconERRROW	        .EQU    MIDALROW-<ICONHIGH/2>   ;row for error icon displayERRCOL	        .EQU    ALBOXCOL+10	        ;col for error icon displayERRSTRT	        .EQU    <ERRROW*ROWBYTES>+ERRCOL ;start address for error icon displayALRTROW	        .EQU    ERRROW		        ;row for alert icon displayALRTCOL	        .EQU    ERRCOL		        ;col for alert icon displayCODEROW	        .EQU    ERRROW+36	        ;row for error code displayCODECOL	        .EQU    ERRCOL+2	        ;col for error code displayMSGROW	        .EQU    ALRTROW+11	        ;row for alert/error message displayMSGCOL	        .EQU    ALRTCOL+8	        ;col for alert/error message displayMEMROW	        .EQU    16		        ;offset row for memory board id # displayMEMCOL	        .EQU    4		        ;offset col for memory board id # displayDISKROW	        .EQU    18		        ;offset row for diskette id # displayDISKCOL	        .EQU    4		        ;offset col for diskette id # display	 CHG024SLOTROW	        .EQU    22		        ;offset row for slot card id # displaySLOTCOL	        .EQU    3		        ;offset col for slot card id # displayDRVROW	        .EQU    6		        ;offset row for drive id # display	 CHG009DRVCOL	        .EQU    3		        ;offset col for drive id # display	 CHG009INSRTROW        .EQU    5		        ;offset row for insert rqst id # display CHG009/CHG024INSRTCOL        .EQU    4		        ;offset col for insert rqst id # display CHG009DEFROW	        .EQU    WMIDROW-<ICONHIGH/2>	  ;row for default boot icon displayDEFCOL	        .EQU    W34COL-<ICONWIDTH/2>	  ;col for default boot icon displayDEFSTRT	        .EQU    <DEFROW*ROWBYTES>+DEFCOL  ;start address for default boot iconALTCOL	        .EQU    W14COL-<ICONWIDTH/2>	  ;col for alternate boot icon displayCOL1STRT        .EQU    <78*ROWBYTES>+6		  ;start for first column of boot iconsCOL2STRT        .EQU    COL1STRT+12		  ;start for second col of boot iconsCOL2MID	        .EQU    <DEFROW*ROWBYTES>+ALTCOL  ;middle of second colCOL3STRT        .EQU    COL2STRT+12		  ;start for third col of boot iconsICONCSPC        .EQU    <64*ROWBYTES>		  ;space between left corner of icons in colICONMSPC        .EQU    <12*ROWBYTES>+6+2	  ;start addr offset for boot icon alternate keycodeICONRSPC        .EQU    12			  ;space in between cols in same rowALTKYADDR       .EQU    ICONMSPC+5      ;address offset for display of alternate keycode in menu barPCWIDTH	        .EQU    86	        ;width of window for power cycling msgsPCHIGH	        .EQU    192	        ;height of windowPCSTRT	        .EQU    WINDSTRT        ;upper left corner of windowPCROW	        .EQU    ALBOXROW+40     ;first row for power cycle msgsPCCOL	        .EQU    ALBOXCOL+6      ;first col for power cycle msgsROMIDROW        .EQU    3	        ;cursor row ptr for ROM id display	        CHG001ROMIDCOL        .EQU    80	        ;cursor col ptr for ROM id display	        CHG001        .IF  DEBUG = 0GLOBALS	        .EQU    STKBASE	        ;start of global area for mouse/cursor        .ELSEGLOBALS	        .EQU    $900	        ;place here in debug mode        .ENDCClockBytes      .EQU    Globals	        ;clock data save areaMousX	        .EQU    ClockBytes+6    ;mouse X-coordinate (word)MousY	        .EQU    MousX+2	        ;mouse Y-coordinate (word)MousDx	        .EQU    MousY+2	        ;mouse delta-x (byte)MousDy	        .EQU    MousDx+1        ;mouse delta-y (byte)MousScaling     .EQU    MousDy+1        ;0=disabled, else=enabled (byte)MousThresh      .EQU    MousScale|1+1   ;mouse movement threshold (word)CrsrHotx        .EQU    MousThresh+2    ;hotspot X-coordinate (word)CrsrHoty        .EQU    CrsrHotX+2      ;hotspot Y-coordinate (word)CrsrHeight      .EQU    CrsrHotY+2      ;cursor height, 0-32 (word)CrsrX	        .EQU    CrsrHeight+2    ;cursor X-coordinate (word)CrsrY	        .EQU    CrsrX+2	        ;cursor Y-coordinate (word)CrsrTracking    .EQU    CrsrY+2	        ;0=disabled, else=enabled (byte)CrsrBusy        .EQU    CrsrTracking+1  ;0=not busy, else=busy (byte)CrsrVisible     .EQU    CrsrBusy+1      ;0=not visible, else=visible (byte)CrsrHidden      .EQU    CrsrVisible|1+1 ;<=0 implies hiddden (word)CrsrObscured    .EQU    CrsrHidden+2    ;0=not obscured, else=obscured (byte)SavedData       .EQU    CrsrObscured+2  ;data from under cursor (128 bytes)SavedX	        .EQU    SavedData+128   ;saved data X-coordinate (word)SavedY	        .EQU    SavedX+2        ;saved data Y-coordinate (word)SavedRows       .EQU    SavedY+2        ;rows of saved data (word)SavedAddr       .EQU    SavedRows+2     ;saved data screen address (long)LwrRight        .EQU    SavedAddr+4     ;saved lower right corner address (word)MsgLen	        .EQU    LwrRight+2      ;length of dialog box msg (word)        .IF  BMENU = 0IconBase        .EQU    Msglen+2        ;base address for first alternate boot icon (word)IconAddr        .EQU    IconBase+2      ;address for last boot icon displayed (word)        .ELSEMenuBase        .EQU    Msglen+2        ;address of last boot menu "box" (word)IconAddr        .EQU    MenuBase+2      ;address for last boot icon displayed (word)        .ENDCIconCnt	        .EQU    IconAddr+2      ;count of boot icons displayed (byte)DRIVE	        .EQU    IconCnt+1       ;drive id for dump/verify options (byte)BLKNUM	        .EQU    DRIVE+1	        ;block # for dump option (word)CONTXT	        .EQU    BLKNUM+2        ;context for dump of MMU contents (byte)RectCnt	        .EQU    CONTXT+2        ;count for active rect table (word)RectTable       .EQU    RectCnt	        ;active rectangle table (same start)        .ENDC        .PAGE;----------------------------------------------------------------------------; The following memory locations are reserved for ROM use to save test data;----------------------------------------------------------------------------STATUS	        .EQU    $0180	        ;POWER-UP STATUS (0=OK)SIZRSLT	        .EQU    STATUS+4        ;memory sizing test resultsMEMRSLT	        .EQU    SIZRSLT+2       ;MEMORY TEST RESULTSBOOTMEM	        .EQU    MEMRSLT+2       ;result for boot area of memory (128K)PEADDR	        .EQU    MEMRSLT+32      ;PARITY ERROR ADDRESSADRLTCH	        .EQU    PEADDR+4        ;CONTENTS OF MEMORY ADDRESS LATCHD7SAV	        .EQU    ADRLTCH+2       ;save for D7 when exception occursMMURSLT	        .EQU    $01B0	        ;MMU TEST RESULTSKEYID	        .EQU    $01B2	        ;Keyboard IDBOOTDVCE        .EQU    $01B3	        ;BOOT DEVICE CODEBOOTDATA        .EQU    $01B4	        ;BOOT FAILURE DATACLKDATA	        .EQU    $01BA	        ;CLOCK SETTING READDATARGS	        .EQU    $01C0	        ;DATA REG SAVE AREAADRREGS	        .EQU    $01E0	        ;ADDRESS REG SAVE AREAA6SAV	        .EQU    $01F8	        ;SAVE AREA FOR REG A6USPSAV	        .EQU    $01FC	        ;SAVE AREA FOR USER STACK PTRSERNUM	        .EQU    $0240	        ;saved serial number (28 bytes)KBDQPTR	        .EQU    $0260	        ;ptr for keyboard queueXPCTADDR        .EQU    $0268	        ;memory test address for parity error	        CHG015XPCTDATA        .EQU    $026C	        ;memory test expected data		        CHG015ACTADDR	        .EQU    $0270	        ;parity error address, phase 2		        CHG015ACTDATA	        .EQU    $0274	        ;actual data read on parity error, phase 2      CHG015PEADR2	        .EQU    $0278	        ;address read from error latch		        CHG015PCHPROW	        .EQU    $027C	        ;parity chip row			        CHG015PCHIP	        .EQU    $027D	        ;parity chip id				        CHG015EXCFC	        .EQU    $0280	        ; bus function codeEXCADR	        .EQU    $0282	        ; address of errorEXCIR	        .EQU    $0286	        ; instruction regEXCSR	        .EQU    $0288	        ; status regEXCPC	        .EQU    $028A	        ; PC at time of exceptionEXCTYPE	        .EQU    $028E	        ; exception typeSUPSTK	        .EQU    $0290	        ;SUPERVISOR STACK PTRMAXMEM	        .EQU    $0294	        ;MAX MEMORY ADDRESS + 1IO1ID	        .EQU    $0298	        ;I/O SLOT 1 IDIO2ID	        .EQU    $029A	        ;I/O SLOT 2 IDIO3ID	        .EQU    $029C	        ;I/O SLOT 3 IDIO1STAT	        .EQU    $029E	        ;I/O SLOT 1 STATUSIO2STAT	        .EQU    $029F	        ;I/O SLOT 2 STATUSIO3STAT	        .EQU    $02A0	        ;I/O SLOT 3 STATUSIOROM	        .EQU    $02A1	        ;I/O ROM VERSION #STATFLGS        .EQU    $02A2	        ;additional status indicatorsMINMEM	        .EQU    $02A4	        ;MINIMUM PHYSICAL ADDRESSTOTLMEM	        .EQU    $02A8	        ;total amount of memorySCCRSLT	        .EQU    $02AC	        ;SCC test resultsMEMSLOT	        .EQU    $02AD	        ;Slot # for memory board if memory errorDSKRSLT	        .EQU    $02AE	        ;Disk controller self-test status byte (0=no error)SYSTYPE	        .EQU    $02AF	        ;System type (0 = Lisa 1; 1, 2, 3 = Lisa 2)	   CHG029KBDQ	        .EQU    $02B0	        ;KEYBOARD QUEUEQEND	        .EQU    $02C0	        ;END OF Q        .INCLUDE RM248.K.TEXT        .INCLUDE RM248.S.TEXT        .INCLUDE RM248.B.TEXT        .INCLUDE RM248.M.TEXT        .INCLUDE RM248.G.TEXT