Title: | AMIGA NOTES |
Notice: | Join us in the *NEW* conference - HYDRA::AMIGA_V2 |
Moderator: | HYDRA::MOORE |
Created: | Sat Apr 26 1986 |
Last Modified: | Wed Feb 05 1992 |
Last Successful Update: | Fri Jun 06 1997 |
Number of topics: | 5378 |
Total number of notes: | 38326 |
Recently, I was looking over the Lattice C initial startup procedure for AmigaDOS in an attempt to gain some familiarity with 68000 assembly code. I came across something that I do not quite understand... The bit of offending code occurs during the CLI startup section, when the command name is searched for. I have reproduced the code fragment below: *------- find command name clr.l -(sp) jsr _FindTask addq.l #4,sp move.l d0,a0 move.l pr_CLI(a0),a0 add.l a0,a0 * bcpl pointer conversion add.l a0,a0 Why the BCPL conversion? Is this something that a person using assembly language on the amiga should be aware of? Also, why a JSR to _FindTask? The same code uses the _LVOFindTask(a6) call in an early part of the program; why does it not do the same here? (_FindTask is declared as XREF) Thanks beforehand... ;^} Ken
T.R | Title | User | Personal Name | Date | Lines |
---|---|---|---|---|---|
338.1 | BCPL Pointers | TLE::RMEYERS | Randy Meyers | Fri Feb 20 1987 11:17 | 17 |
Re: .0 Most of the Exec and CLI commands are written in the language BCPL. BCPL is a typeless language that looks a lot like BLISS. In fact, BCPL is the common ancestor of C and BLISS. In BCPL, or at least the version of BCPL used to write AmigaDOS, pointers always point to a longword. Since the pointers point to a longword, the pointers are also shifted right by 2 bits. Thus, to transform a BCPL pointer to a machine address, you must multiply by four. This is something that an assembler language programmer or even a C programmer needs to keep in mind. Some Exec data structures and AmigaDOS calls use BCPL pointers. (Intuition, on the other hand, was written in C and uses real address as pointers.) The documentation mentions if something wants a "BPTR" or a "APTR". A BPTR is a BCPL pointer; an APTR is a actual address. |