Lisa_Boot_ROM_RM248
.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 /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 ;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 +WROW ;middle row in window
WMIDCOL .EQU +WCOL ;middle col in window
W14COL .EQU +WCOL ;col 1/4 across window
W34COL .EQU *3+WCOL ;col 3/4 across window
WINDSTRT .EQU +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 +ALBOXCOL ;upper left corner of alert box
MIDALROW .EQU ALBOXROW+ ;middle row of alert box
MIDALCOL .EQU ALBOXCOL+ ;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 +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+ ;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 ;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 +4 ;pixel row for dialog msg
DBOXCOL .EQU MENUWIDTH+6 ;byte col for dialog msg
SVCTOP .EQU *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 +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 -3 ;rows used for character display
LASTROW .EQU +FIRSTROW ;last pixel row for display
LASTCOL .EQU FIRSTCOL+SVCWIDTH-2 ;last column
ROWLINES .EQU 10 ;pixel row lines per character
ROWLEN .EQU |1+1 ;bytes per pixel row (must be even!)
NROWS .EQU /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 +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+ ;middle row of test box
CHKROW .EQU MIDTSTROW- ;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 +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- ;row for error icon display
ERRCOL .EQU ALBOXCOL+10 ;col for error icon display
ERRSTRT .EQU +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- ;row for default boot icon display
DEFCOL .EQU W34COL- ;col for default boot icon display
DEFSTRT .EQU +DEFCOL ;start address for default boot icon
ALTCOL .EQU W14COL- ;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 +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