Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!utgpu!water!watmath!clyde!cbosgd!ucbvax!COGSCI.BERKELEY.EDU!bryce From: bryce@COGSCI.BERKELEY.EDU.UUCP Newsgroups: comp.sys.amiga Subject: Pulling hardware address (eg. $BFF001) from thin bits. Message-ID: <8705282335.AA06415@cogsci.berkeley.edu> Date: Thu, 28-May-87 19:35:12 EDT Article-I.D.: cogsci.8705282335.AA06415 Posted: Thu May 28 19:35:12 1987 Date-Received: Sat, 30-May-87 04:59:39 EDT Sender: daemon@ucbvax.BERKELEY.EDU Lines: 75 Recently there was a discussion about absolute hardware address. The conclusion was -> don't pollute the Amiga software base with them <-. If you need to use a hardware address think about why. Now think again. And when your are done with that try to get your job done another way. If you still need to use the hardware take a look at using the resources. Now think again. Still need to use the hardware? Well don't count on it being at the same address. -> In all your Amiga programming you should be using ONE absolute address, -> location 4, _AbsExecBase, the pointer to the exec.library. To derive the location of CIAA or CIAB ($BFF001, BFD000 on an Amiga 1000) use this code: ------- 68000 --------- move.l 4,a6 ;exec library lea.l CIAAName(pc),a1 jsr _LVOOpenResource(a6) tst.l d0 ;grrr... bah, humbug gritch gripe. beq.s e_nociaa move.l d0,a1 move.l CR_HWADDR(a1),CIAABASE ;This is it! jsr _LVOCloseLibrary(a6) tst.l CIAABASE beq.s e_nociaa ;no cia? incompatible machine... ... CIAAName dc.b 'ciaa.resource',0 -------- C ----------- struct Library *MyCIAbase MyCIAbase=(struct Library*)OpenResouce("ciaa.resource"); if(MyCIAbase==NULL) goto diehorribly; ciaaaddr=MyCIAbase->CR_HWADDR; CloseLibrary(myCIAbase); if(ciaaaddr==NULL) goto croak; ---------------------- This only has to be done once. (unless someone removes/adds a CIA while the machine in running :-) :-) :-) :-) Now if you tried to assemble/compile this you would get a undefined symbol on CR_HWADDR. You need a structure, (68000 flavor only): STRUCTURE CIAR,LIB_SIZE APTR CR_HWADDR ;Hardware address UWORD CR_IntMask UBYTE CR_IEnable UBYTE CR_IActive STRUCT CR_INTNODE,IS_SIZE STRUCT CR_ITVA,IS_SIZE STRUCT CR_ITVB,IS_SIZE STRUCT CR_IVALRM,IS_SIZE STRUCT CR_IVFLAG,IS_SIZE LABEL CR_SIZE (Or just replace CR_HWADDR in the examples with LIB_SIZE, they are the same) --- Documentation bug #1 --- This structure IS NOT on any of the Gamma 1 include files disks. It was probably an accident that it was printed out on page E-72 of the RKM. --- Documentation bug #2 --- The autodocs for the OpenResource function direct ones attention to the CloseResource function. 'Taint so, there is no such beast. --- Documentation bug #3 --- How to derive the base address of CIAA, CIAB and CUSTOM is NOT documented ANYWHERE. ^^^^^^ --- Documentation bug #4 --- Include file exec/memory.i. "APTR MC_SIZE" should read "LABEL MC_SIZE". ------------- Ack! (NAK,EOT,SOH) |\ /| . {o O} . bryce@cogsci.berkeley.EDU -or- ucbvax!cogsci!bryce ( " ) U Single tasking? Just say *NO!*