CHAPTER 1 INTRODUCTION The Amiga family of computers consists of several models, each of which has been designed on the same premise to provide the user with a low cost computer that features high cost performance. The Amiga does this through the use of custom silicon hardware that yields advanced graphics and sound features. There are three distinct models that make up the Amiga computer family: the A500, A1000, and A2000. Though the models differ in price and features, they have a common hardware nucleus that makes them software compatible with one another. This chapter describes the Amiga's hardware components and gives a brief overview of its graphics and sound features. - Introduction 1 - COMPONENTS OF THE AMIGA These are the hardware components of the Amiga: o Motorola MC68000 16/32 bit main processor. The Amiga also supports the 68010, 68020, and 68030 processors as an option. o 512K bytes of intemal RAM, expandable to 1 MB on the A500 and A2000. o 256K bytes of ROM containing a real time, multitasking operating system with sound, graphics, and animation support routines. o Built-in 3.5 inch double sided disk drive. o Expansion disk port for connecting up to three additional disk drives, which may be either 3.5 inch or 5.25 inch, double sided. o Fully programmable RS-232-C serial port. o Fully prograrnmable parallel porl. o Two button opto-mechanical mouse. o Two reconfigurable controller ports (for mice, joysticks, light pens, paddles, or custom controllers). o A professional keyboard with numeric keypad, 10 function keys, and cursor keys. A variety of international keyboards are also supported. o Ports for simultaneous composite video, and analog or digital RGB output. o Ports for left and right stereo audio from four special purpose audio channels. o Expansion options that allow you to add RAM, additional disk drives (floppy or hard), peripherals, or co-processors. THE MC6X000 AND THE AMIGA CUSTOM CHIPS Thc Motorola 68000 is a 16/32 bit microprocessor. The system clock speed for NTSC Amigas is 7.15909 megahertz (PAL 7.09379 MHz). These speeds may vary when using an extemal system clock, such as from a genlock. The 68000 has an address space of 16 megabytes. In the Amiga, thc 68000 can address over 8 megabytes of continuous random access memory (RAM). - 2 Introduction - In addition to the 68000, the Amiga contains special purpose hardware known as the "custom chips" that greatly enhance system performance. The term "custom chips" refers to the 3 intergrated circuits which were designed specifically for the Amiga computer. These three custom chips (called Agnus, Paula, and Denise) each contain the logic to handle a specific set of tasks, such as video, sound, direct memory access (DMA), or graphics. Among other functions, the custom chips provide the following: o Bitplane generated, high resolution graphics capable of supporting both PAL and NTSC video standards. - On NTSC systems the Amiga typically produces a 320 by 200 non-interlaced or 320 by 400 interlaced display in 32 colors and a 640 by 200 non- interlaced or 640 by 400 interlaced display in 16 colors. - On PAL systems, thc Amiga typically produces a 320 by 256 non-interlaced or 320 by 512 interlaced display in 32 colors, and a 640 by 256 non- interlaced or 640 by 512 interlaced display in 16 colors. Additional video modes allow for the display of up to 4,096 colors on screen simultaneously (hold-and-modify) or provide for larger, higher resolution displays (overscan). o A custom display co-processor that allows changes to most of the special purpose registers in synchronization with the position of the video beam. This allows such special effects as mid-screen changes to the color palette, splitting the screen into multiple horizontal slices each having different video resolutions and color depths, beam synchronized interrupt generation for the 68000 and more. The co-processor can trigger many times per screen, in the middle of lines, and at the beginning or during the blanking interval. The co-processor itself can directly affect most of the registers in the other custom chips, freeing the 68000 for general computing tasks. o 32 system color registers, each of which contains a twelve bit number as four bits of RED, four bits of GREEN, and four bits of BLUE intensity information. This allows a system color palette of 4,096 different choices of color for each register. o Eight reusable 16 bit wide sprites with up to 15 color choices per sprite pixel (when sprites arc paired). A sprite is an easily movable graphics object whose display is entirely independent of the background (called a playfield); sprites can be displayed over or under this background. A sprite is 16 low resolution pixels wide and an arbitrary number of lines tall. After producing the last line of a sprite on the screen, a sprite DMA channel may be used to produce yet another sprite image elsewhere on screen (with at least one horizontal line between each reuse of a sprite processor). Thus, many small sprites can be produced by simply reusing the sprite processors appropriately. o Dynamically controllable inter-object priority, with collision detection. This means that the system can dynamically control the video priority between the sprite objects and the bitplane backgrounds (playfields). You can control which object or objects appear over or under the background at any time. - Introduction 3 - Additionally, you can use system hardware to detect collisions between objects and have your program react to such collisions. o Custom bit blitter used for high speed data movement, adaptable to bitplane animation. The blitter has been designed to efficiently retrieve data from up to three sources, combine the data in one of 256 different possible ways, and optionally store the combined data in a destination area. This is one of the situations where the 68000 gives up memory cycles to a DMA channel that can do the job more efficiently (see below). The bit blitter, in a special mode, draws pattemed lines into rectangularly organized memory regions at a speed of about 1 million dots per second; and it can efficiently handle area fill. o Audio consisting of four digital channels with independently programmable volume and sampling rate. The audio channels retrieve their control and data via direct memory access. Once started, each channel can automatically play a specified waveform without further processor interaction. Two channels are directed into each of the two stereo audio outputs. The audio channels may be linked together to provide amplitude or frequency modulation or both forms of modulation simultaneously. o DMA controlled floppy disk read and write on a full track basis. This means that the built-in disk can read over 5600 bytes of data in a single disk revolution (11 sectors of 512 bytes each). The interal memory shared by the custom chips and the 68000 CPU is also called "chip memory". The original custom chips in the Amiga were designed to be able to physically access up to 512K bytes of shared memory. The new version of the Agnus custom chip was created which allows the graphics and audio hardware to access up to a full megabyte of memory. The Amiga 500 and 2000 models were designed to be able to accept the new Agnus custom chip, called "Fat Agnus", due to its square shape. Hence, the A500 and A2000 have allocated a chip memory space of 1 MB. This entire 1 MB space is subject to thc arbitration logic that controls the CPU and custom chip accesses. On the A1000, only the first 512K bytes of memory space is shared, chip memory. These custom chips and the 68000 share memory on a fully interleaved basis. Since the 68000 only needs to access the memory bus during each altemate clock cycle in order to run full speed, the rest of the time the memory bus is free for other activities. The custom chips use the memory bus during thcse free cycles, effectivcly allowing thc 68000 to run at full rated spced most of the time. We say "most of the time" because there are some occasions when the special purpose hardware steals memory cycles from the 68000, but with good reason. Specifically, the coprocessor and the data moving DMA channel called the blitter can each steal time from the 68000 for jobs they can do bctter than the 68000. Thus, the system DMA channels are designed with maximum performance in mind. The job to be done is performcd by the most efficient hardware element available. Even when such cycle stealing occurs, it only blocks the 68000's access to the internal, shared memory. When using ROM or extemal memory, the 68000 always runs at full speed. - 4 Introduction - Another primary feature of the Amiga hardware is the ability to dynamically control which part of the chip memory is used for the background display. audio, and sprites. The Amiga is not limited to a small, specific area of RAM for a frame buffer. Instead, the system allows display bitplanes, spritc processor control lists, coprocessor instruction lists, or audio channel control lists to be located anywhere within chip memory. This same region of memory can be accessed by the bit blitter. This means, for example, that the user can store partial images at scattered areas of chip memory and use these images for animation effects by rapidly replacing on screen material while saving and restoring background images. In fact, the Amiga includes firmware support for display definition and control as well as support for animated objects embedded within playfields. VCR AND DIRECT CAMERA INTERFACE In addition to the connectors for monochrome composite, and analog or digital RGB monitors, the Amiga can be expanded to include a VCR or camera interface. This system is capable of synchronizing with an external video source and replacing the system background color with the extemal image. This allows development of fully integrated video images with computer generated graphics. Laser disk input is accepted in the same manner. PERIPHERALS Floppy disk storage is provided by a built in, 3.5 inch floppy disk drive. Disks are 80 track, double sided, and formatted as 11 sectors per track, 512 bytes per sector (over 900,000 bytes per disk). The disk controller can read and write 320/360K IBM PCTM (MS-DOSTM) fommatted 3.5 or 5.25 inch disks, and 640/720K IBM PC (MS-DOS) fommatted 3.5 inch disks. Extemal 3.5 inch or 5.25 inch disk drives can be added to the system through the expansion connector. Circuitry for some of the peripherals resides on Paula. Other chips handle various signals not specifically assigned to any of the custom chips, including modem controls, disk status sensing, disk motor and stepping controls, ROM enable, parallel input/output interface, and keyboard interface. The Amiga includes a standard RS-232-C serial port for extemal serial input/output devices. A keyboard with numeric keypad, cursor controls and 10 function keys is included in the base system. For maximum flexibility, both key-down and key-up signals are sent. The Amiga also supports a variety of intemational keyboards. Many other types of controllers can be attached through thc two controller ports on the base unit. You can use a mouse, joystick, keypad, track-ball, light pen, or steering wheel controller in either of the controller ports. - Introduction 5 - SYSTEM EXPANDABILITY AND ADAPTABILITY New peripheral devices may be easily added to all Amiga models. These devices are automatically recognized and used by system software through a well defined, well documented linking procedure called AUTOCONFIG. On the A500 and A1000 models, peripheral devices can be added to the Amiga's 86 pin expansion connector, including additional extemal RAM. Extra disk units may be added from a connector at the rear of the unit. The A2000 model provides the user with the same features as the A500 or A1000, but with the added convenicnce of simple and extensive expandability. The 86 pin, external connector of the A1000 and A500 is not extemally accessible on the A2000. Instead, the A2000 contains 7 internal slots that allow many types of expansion boards to be quickly and easily added inside the machine. These expansion boards may contain coprocessors, RAM expansion, hard disk controllers, video or I/O ports. There is also room to mount both floppy and hard disks intemally. The A2000 also supports the special Bridgeboard coprocessor card. This provides a complete IBM PC on a card and allows the Amiga to run MS-DOS compatible software, while simultaneously running native Amiga software. - 6 Introduction - ABOUT THE EXAMPLES The examples in this book all demonstrate direct manipulation of the Amiga hardware. However, as a general rule, it is not permissible to directly access the hardware in the Amiga unless your software either has full control of the system, or has arbitrated via the OS for exclusive access to the panicular parts of the hardware you wish to control. Almost all of the hardware discussed in this manual, most notably the Blitter, Copper, playfield, sprite, CIA, trackdisk, and system control hardware, are in either exclusive or arbitrated use by portions of the Amiga OS in any running Amiga system. Additional hardware, such as the audio, parallel, and serial hardware, may be in use by applications which have allocated their use through the system software. Before attempting to directly manipulate any part of the hardware in the Amiga's multitasking environment, your application must first be granted exclusive access to that hardware by the operating system library, device, or resource which arbitrates its ownership. The operating system functions for requesting and receiving control of parts of the Amiga hardware are varied and are not within the scope of this manual. Generally such functions, when available, will be found in the library, device, or resource which manages that portion of the Amiga hardware in the multitasking environment. The following list will help you to find the appropriate operating system functions or mechanisms which may exist for arbitrated access to the hardware discussed in this manual. Copper, Playfield, Sprite, Blitter - graphics.library Audio - audio.device Trackdisk - trackdisk.device, disk.resource Serial - serial.device, misc.resource Parallel - parallel.device, cia.resource, misc.resource Gameport - input.device, gameport.device, potgo.resource Keyboard - input.device, keyboard.device System Control - graphics.library, exec.library (interrupts) Most of the examples in this book use the hw examples.i file (see Appendix J) to define the chip register names. Hw_examples.i uses the system include file hardware/custom.i to define the chip structures and relative addresses. The values defined in hardware/custom.i and how examples.i are offsets from the base chip register address space. In general, this base value is defined as _custom and is resolved during linking from amiga.lib. (_ciaa and _ciab are also resolved in this way.) Normally, the base address is loaded into an address register and the offsets given by hardware/custom.i and hw_examples.i are then used to address the correct register. - Introduction 7 - NOTE The offset values of the registers are the addresses that the Copper must use to talk to the registers. for example, in assembler: INCLUDE "exec/types.i" INCLUDE "hardware/custom.i" XREF custom ; External reference Start: lea _custom,a0 ; Use a0 as base register move.w #$7FFF,intena(a0) ; Disable all interupts In C, you would use the structure definitions in hardware/custom.h For example: #lnclude "exec/types.h" #include "hardware/custom.h" extern struct Custom custom; /* You may need to define the above external as ** extern struct Custom far custom; ** Check you compiler manual. */ main() { custom.intena = 0x7FFF; /* Disable all interupts */ } The Amiga hardware include files are generally supplicd with your compiler or assembler. Listings of lhc hardware include files may also be found in the Addison-Wesley Amiga ROM Kemel Manual "Includes and Autodocs". Generally, the include file label names are very similar to the equivalent hardware register list names with the following typical differences. o Address registers which have low word and high word components are generally listed as two word sized registers in the hardware register list, with each register name containing either a suffix or embedded "L" or "H" for low and high. The include file label for the same register will generally treat the whole register as a longword (32 bit) register, and therefore will not contain the "L" or "H" distinction. o Related sequential registers which are given individual names with number suffixes in the hardware register list, are generally referenced from a single base register definition in the include files. For example, the color registers in the hardware list (COLOR00, COLOR01, etc.) would be referenced from the "color" label defined in "hardware/custom.i" (color+0, color+2, etc.). o Examples of how to define the correct register offset can be found in the hw_examples.i file listed in Appendix J. - 8 Introduction - SOME CAVEATS TO HARDWARE LEVEL PROGRAMMERS The Amiga is available in a variety of models and configurations, and is further diversified by a wealth of add-on expansion peripherals and processor replacements. In addition, even standard Amiga hardware such as the keyboard and floppy disks, are supplied by a number of different manufacturers and may vary subtly in both their timing and in their ability to perform outside of their specified capabilities. The Amiga operating system is designed to operate the Amiga hardware within spec, adapt to different hardware and RAM configurations, and generally provide upward compatibility with any future hardware upgrades or "add ons" envisioned by the designers. For maximum upward compatibility, it is strongly suggested that programmers deal with the hardware through the commands and functions provided by the Amiga operating system. If you find it necessary to program the hardware directly, then it is your responsibility to write code which will work properly on various models and configurations. Be sure to properly request and gain control of the hardware you are manipulating, and be especially careful in the following areas: Do not jump into ROM. Beware of any example code that calls routines in the $F80000 to $FFFFFF range. These are ROM addresses and the ROM routines WILL move with every OS revision. The only supported interface to system ROM code is through the provided library, device, and resource calls. Do not modify or depend on the format of any private system structures. This includes the poking of copper lists, memory lists, and library bases. Do not depend on any address containing any particular system structure or type of memory. The system modules dynamically allocate their memory space when they are initialized. The addresses of system structures and buffers differ with every OS, every model, and every configuration, as does the amount of free memory and system stack usage. Remember that all data for direct custom chip access must be in CHIP RAM. This includes bit images (bitplanes, sprites, etc), sound samples, trackdisk buffers, and copper lists. Do not write spurious data to, or interpret undefined data from currently unused bits or addresses in the custom chip space. All undefined bits must be set to zero for writes, and ignored on reads. Do not write data past the current end of custom chip space. Custom chips may be extended or enhaneed to provide additional registers, or to use currently undefined bits in existing registers. All custom chip registers are read only OR write only. Do not read write only registers, and do not write to read only registers. - Introduction 9 - Do not read, write, or use any currently undefined address ranges. The current and future usage of such areas is reserved by Commodore and is definitely subject to change. If you are using the system libraries, devices, and resources, you must follow the defined interface. Assembler programmers (and compiler writers) must enter functions through the liberary base jump tables, with arguments passed as longs and library base address in A6. Results returned in D0 must be tested, and the contents of D0-D1/A0-A1 must be assumed gone after a system call. NOTE The assembler TAS instruction should not be used in any Amiga program. The TAS instruction assumes an indivisible read-modify-write but this can be defeated by system DMA. Instead use BSET and BCLR. These instructions perform a test and set operation which cannot be interrupted. TAS is only needed for a multiple CPU system. On a single CPU system, the BSET and BCLR instructions are identical to TAS, as the 68000 does not interrupt instructions in the middle. BSET and BCLR first test, then set bits. Do not use assembler instructions which are privileged on any 68000 family processor, most notably MOVE SR, which is privileged on the 68010/20/30. Use the Exec function GetCC() instead of MOVE SR, or use the appropriate non-privileged instruction as shown below: CPU User Mode Super Mode 68000 MOVE SR, MOVE SR, 68010/20/30 MOVE CCR, MOVE SR, All addresses must be 32 bits. Do not use the upper 8 bits for other data, and do not use signed variables or signed math for addresses. Do not execute code on your stack or use self-modifying code since such code can be defeated by the caching capabilities of some 68xxx processors. And never use processor or clock speed dependent software loops for timing delays. See Appendix F for information on using an 8520 timer for delays. NOTE When strobing any register which responds to either a read or a write, (for example copjmp2) be sure to use a MOVE.W #$00, not CLR.W. The CLR instruction causes a read and a clear (two accesses) on a 68000, but only a single access on 68020 and above. This will give different results on different processors. If you are programming at the hardware level, you must follow hardware interfacing specifications. All hardware is NOT the same. Do not assume that low level hacks for speed or copy protection will work on all drives, or all keyboards, or all systems, or future systems. Test your software on many different systems, with different processors, OS, hardware, and RAM configurations. - 10 Introduction - See FIGURE 1-1: Block Diagram for the Amiga Computer Family. - 11 Introduction - End.