home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Developer CD v1.2
/
amidev_cd_12.iso
/
reference
/
amiga_mail_vol1
/
bootexpcon
/
bytewiderom
< prev
next >
Wrap
Text File
|
1990-01-26
|
3KB
|
74 lines
(c) Copyright 1989 Commodore-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.