home *** CD-ROM | disk | FTP | other *** search
- (c) Copyright 1989-1999 Amiga, Inc. All rights reserved.
- The information contained herein is subject to change without notice, and
- is provided "as is" without warranty of any kind, either expressed or implied.
- The entire risk as to the use of this information is assumed by the user.
-
-
-
- Using Byte-Wide Autoboot ROMs
- Under Amiga OS V1.3
-
- by Steve Beats
-
-
- With V1.3 of the Amiga operating system, an expansion board can autoboot
- the Amiga if it has autoboot ROMs. Autoboot ROMs can be configured in
- one of three ways - word-wide, byte-wide or nybble-wide - however, ROMs
- configured as byte-wide will NOT function correctly.
-
- This is due to a bug in the expansion library that causes memory corruption
- while copying the DiagArea to RAM from the expansion ROM. Specifically,
- an RTS instruction was omitted which allows the code to drop through to the
- nybble-wide copy routine after the byte-wide copy has completed. Because of
- this, system lists that have been established prior to the expansion
- initialization are overwritten.
-
- There is a work-around which you can implement for this problem. Instead of
- marking your ROM as DAC_BYTEWIDE, set the da_Config field to DAC_NYBBLEWIDE.
- Burn the ROM such that the DiagArea structure, Resident structure and the
- initialization code are stored in nybbles at the beginning of the ROM. The
- remainder of the code should follow this information and can be stored in
- the normal byte-wide format (ie. just burn the code "as is").
-
- The code that is normally used to relocate the Resident structure will now
- be required to copy the rest of the code from the ROM into an appropriately
- allocated area of memory. Of course, Resident will still have to be
- relocated in the normal manner, but the pointers will be adjusted to point at
- the RAM copy of your driver. The following figure should clarify this point.
- It represents a block diagram of how a byte-wide expansion ROM should be
- burned.
-
-
- +---------------------------------+ The first three blocks should be
- | | burned such that the data is only
- | DiagArea marking the ROM | stored in the UPPER nybble of each
- | as being DAC_NYBBLEWIDE | BYTE in the ROM. This will appear
- | | in the Amiga memory space as data
- +---------------------------------+ in the UPPER nybble of consecutive
- | | WORD addresses. Note: all addresses
- | DiagArea initialization code | will be relative to the boards base
- | to allocate memory, copy ROM | address.
- | code into it and relocate all |
- | absolute references in the |
- | Resident structure. |
- +---------------------------------+
- | |
- | Resident structure describing |
- | device name and location of |
- | the initialization code. |
- | |
- +---------------------------------+ The rest of the code can be burned
- | | straight into the ROM. This data
- . The rest of the driver code . will appear in the memory map as
- . . the upper BYTE of consecutive WORD
- . . addresses. The ROM copy code should
- | | take this into account.
- +---------------------------------+
-
-
- This bug has already been fixed for 1.4 ROMs but your code will function in
- exactly the same manner on both 1.3 and 1.4 systems in the future if you use
- this method.
-
-
-