home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ARM Club 3
/
TheARMClub_PDCD3.iso
/
hensa
/
documentation
/
documents
/
a252eur2
< prev
next >
Wrap
Text File
|
1999-04-27
|
42KB
|
930 lines
EEEEEEEE K A |
EE R R EE K AA | The BITS ArcSIG
EE U U RR RR E E K K A A | Newsletter
EEEEEEE U U R EEEE KK AA A |
EE U U R E K K A AA | Issue #02
EEEEEEEE UUUU R EEE K K A A | Compiled and Linked by Dave
----------------------------------------------------------------------------
*INFO
~~~~~
First of all, a little home news; Rob Wheeler has set up an Archimedes forum on
seqa; many thanks Rob, and I hope you get some lively debates and hack
interchanges going. I'll have to get myself a seqa account one of these
days.... Also, the planned instalment of "Down to the Metal" has been
postponed, as we present instead, after much hackification and scouring of
docs, the first release of the Assembler Programmer's Pocket Guide.
For those of you who don't know already (yes, both of you), RISC OS 3.10 has
been released, priced #40 for the full set including User Guide, and a mere #20
for the "A5000 Upgrade," which doesn't include the docs. This leaves me with
the impression that 3.10 is basically 3.00 with most of the major bugs fixed,
but I will reserve full judgement until my copy shows up.
Latest news from the AU show is that the RISC OS 3 Programmer's Reference
Manual is on release, in draft (beta test) form; it's rather shorter than I'd
heard (5 volumes instead of the expected 7), although this may change in the
final release version. Purchasers of the draft will get a free copy of the
production version when it has been completed. Price is #120; time for a nice
talk with my bank manager, I think.
As stated in the last issue of EurekA, the new ARM250 based A3010, 3020 and
4000 have arrived; this represents an interesting move by Acorn, in that they
are now attacking the price bracket currently held, and very successfully so,
by the 16 bit "home" machines. The ARM250 itself is a major exercise in IC
integration, as it contains the standard 4-chip ARM set (ARM, MEMC, VIDC, IOC),
crunched down onto a single wafer. Among other things (like a reduction in
production costs), this squeezes another 2 MIPS out of the processor, as
compared to the standard ARM2 around which it is based. The number of discrete
components on the motherboard has been dramatically reduced; I hear that the
3010 only has about 6 ICs in it, total. Although this move throws upgradability
options clean out the window (with the honourable exception of a 3000-like
half-size podule slot), the speed increase could be very interesting if
applied to a hypothetical "ARM350."
Rumours still abound about the possibility of a new top-end Archimedes to
replace the now aging A540, obviously fuelled by the fact that RISC OS 3.10 is
aware of the new ARM610 chip, based on the 600 design macro and coming into
circulation soon inside Apple's Newton palmtop. Whether this will mean an
entirely new machine, a drop-in processor board replacement for the 540 or
maybe even both remains to be seen, but as the 610 may be built into a parallel
architecture, the 4-processor ARM610 Hypercube is not an impossibility. Also
(tear, rend) the FPA, promised for this month, still hasn't shown up. Please
correct me if I'm wrong on this, as I want one!
*OBEY !RUN
~~~~~~~~~
Marginal Hacks (Part 10 of 1<<31)
~~~~~~~~~~~~~
Further to the discussion in the last issue on undocumented device
streams,three more have surfaced. These are:
kbd: Keyboard (input only), returned by OS_ReadLine
rawkbd: Keyboard (input only), returned by OS_ReadC
rawvdu: VDU output, issued via OS_WriteC In addition, the vdu: stream
described previously is processed by GS_Read before being
directed to OS_WriteC.
Also, some interesting but so far unverified hacks have come to me via the
bush telegraph:
First, from Rob Wheeler, an easter egg in RISC OS 3.10:
let !formed be seen by the filer.
open Resources::resources.$.resources.fileswitch (might be filer)
load in the template file - have a look at 'report' or some similar file
see an interesting message.
And from Graham Willmott, a way to get anti-aliased fonts as default on the
Desktop under RISC OS 2.00:
Save the WindowManager module to disk and reload at &8000. Turn the
conditional branch at &10534 to a NOP (ie E1A00000 since Acorn don't want
us to use the NV condition code any more). Resave and make it a module.
You will have to load it from outside the desktop, after setting Wimp$Path
to a suitable templates directory.
What is does is this - since the WIMP templates are loaded by all sorts of
different modules, I decided that the only way to force it to load the fonts
without an "Unable to bind..." error was to make it look for fonts in all
template files; ie to ignore the font flag in the LoadTemplate SWI (assuming
that it is a font flag; I have no manual, remember.) At least I think that's
how it works.
Features
~~~~~~~
Trials and Tribulations of the PCM (Part 2)
----------------------------------
Since EurekA #01, I've upgraded to the 1.81 version of the PCM; although it's
nice to have VGA graphics at last, I feel obliged to issue the following
warning:
When you install the new PCEm on your hard drive and configure a partition, you
may have to do a complete DOS reformat and reinstall; especially if you decide
to use the VGA driver set. I found out (by playing around with MultiFS) that
the new emulator stores the PC data differently, so be certain that your
virtual PC drive is fully backed up before making the upgrade. Also, the old
(1.60) MultiFS doesn't work with the new emulator's storage format, so be sure
to install the new version of this, too.
I recently acquired a DOS-based program from Compu$erve, which is designed to
give full information about the system it is running on; this is what it made
of the Acorn virtual PC.
Advanced Personal Systems SYSCHK Information Printout
Tuesday, Oct. 27, 1992 Version: 2.34
PROCESSOR-------------------------------------------------------------------
Model: IBM PC Processor: 8088 Coprocessor:Unknwn
SYSTEM BIOS-----------------------------------------------------------------
Source: Unknown Date: 11/08/82
BIOS Extentsions:(none)
INPUT/OUTPUT----------------------------------------------------------------
Keyboard: 101 Key Enhanced Mouse Installed: No
Parallel Ports: 1 Device Base Address
LPT1 378h
Serial Ports: 1
Device Base Address
UART 3F8h
COM1 8250
HARD DISKS------------------------------------------------------------------
Tracks: 863 Heads: 6 Sectors Per Track: 17
Size: 42.98 MB
Logical Drives: A: B: C:
FLOPPY DISKS----------------------------------------------------------------
Floppy Disk 1: 720 KB 3+" Floppy Disk 2: 720 KB 3+"
VIDEO-----------------------------------------------------------------------
Active Video: VGA + Analog Color Monitor BIOS Source:
No Copyright found
MEMORY----------------------------------------------------------------------
Conventional Memory: 640 KB (572 KB Free)
Extended Memory: None Expanded Memory: RESIDENT
PROGRAMS-----------------------------------------------------------
Program Name Size Program Interfaces
------------ ------------------------------
DOS Kernel 0k
DOS Config 17k (Files = 30, Buffers = 0)
COMMAND.COM 5k Microsoft DOS 5.0
SPEED-----------------------------------------------------------------------
Throughput Speed: 71.74MHz
CPU Clock Speed: 9 MHz
Interesting results, these. The first thing to note is that the program reports
the machine as being based on the 8088, as opposed to the Acorn-claimed 80188.
Apparently, this is because the 188 was never actually used as a PC main
processor, its main circulation being as a microcontroller. Very surprisingly,
the program failed to identify the emulated 8087 math co-pro. Looking at the
BIOS, it is clear that Acorn either fudged the date or paid licence fees to
legitimately copy someone else's BIOS; probably IBM's own. However, the program
cannot find a copyright, which is a point for concern.
I/O: Bang on right. I didn't have AMOUSE.COM installed at the time I ran the
prog, but I'll check on this at a later date. Having run the program on a
friend's 386SX clone, I noted that his UART maps in at 16450, but this is
probably a side effect of the different virtual architecture.
Drives: I could have sworn (and indeed I do) that I never set a second floppy.
However, I like the emulation of the hard drive partition right down to the
number of heads, but this may just be either a function of the program or the
real drive may be a 6-header (as it's a 120Mb Conner, about 2 cm thick, I doubt
this latter possibility).
Video: Same again; no copyright. However, it's interesting that the VGA drivers
actually register the Arc monitor type, as opposed to just driving a virtual
display which the Arc then interprets transparently.
One of the more useful features in the 1.81 is the ability to use expanded
memory; for those of you who don't know PCs, memory is split into conventional,
high, extended and/or expanded, ie a right mess compared with our flat model.
The latter two types require extra software drivers to enable the processor to
map them. Unfortunately, expanded is the slower of the two, as it operates by
swapping pages with a page designated in processor-mappable me mory. Needless
to say, some PC programs need this flavour of memory, despite the fact that
most current PCs are now equipped with extended instead. This requires a patch
for extended to emulate expanded...pity it's not possible to produce one the
other way around.
Speed: A bit lost for words here. From what I can gather, the CPU clock speed
is about right. However, the processor throughput appears to be "leaking" into
native ARM-like speeds (my friend's 20 MHz 386 clocked a throughput of 25.72
MHz). Either this is the correct case, or it's the rest of the surrounding
emulated chippery which loses us all the speed on the emulator. This is
definitely worth looking into.
BAU Show Review: Courtesy of Rob Wheeler
----------------------------------------
This is a list of vendors present at the recent Acorn User show, and their
latest products. However, some of the hoped-for major products proved to be
still unavailable, the most notable case being the Floating Point Accelerator
chip from Acorn, designed to go into the A5000 and A540. Many thanks to Rob
for this list, and the accompanying brief reviews.
Acorn:
all new machines on display, staff wearing technicolour 'dream'coats
riscos3.1 prms available in draft - cash or cheque not plastic
loads of interest in pocket book and a4.
Aleph One / Atomwide:
new cyrix 486slx card 1-4Mb RAM - 700quid
prices down on 386 cards - new windows driver software claims to make
an arm/386slx faster at windows than a true 33MHz486dx
plenty of 8Mb upgrades for machines with upper limits of 4Mb
new AUN / Ethernet cards available.
Archimedes World / BBC Acorn User / Micro User (under new name):
usual stuff - old mags at no discount
Beebug/ Risc Developements:
nothing new - just a wide selection from their store at minimal show
discount.
BirdTech:
various packages for high quality colour printing
Calligraph:
new 12ppm 600dpi laser printer for under a grand
Clares:
Rhapsody3, other new music stuff, csv data plotter
Colton:
Pipedream4 - no new stuff
CC & Wild Vision:
Artworks - looks nice'n'fast as promissed - _very_ fast seller
Colour Card - 512k onboard ram, 24bit palette, 65536 max colours on
screen, 256 colour desktop up to 1024x768 - nice bar price - 300quid
Impression 2.18 - less bugs
Compression - now riscos 3 compatible
Digital Services:
new version of squirrel - better parser and inter-system compatibility
EMR:
Usual musical stuff.
EFF:
Loads of new fonts.
ICS:
ColourSep - 24bit cmyk splitting software for arcs, full review follows
(when i get it) but it looks very good.
Icon:
Easiwriter2 and Techwriter - set to hit CC very hard if they dont
improve impression/equasor very soon.
Integrex:
more colour printers.
Irlam Instruments:
i-Mage. Proi-Mage - realtime video digitisers and flatbed colour
scanners - all run in desktop
Moving i-Mage - real time video in a window
Krisalis:
Loads of new 16bit conversions:
Populous - port of Bulfrogs game where you play one of two gods trying
to gain total control of a world by defeating non-believers and
increasing your own 'flock' - well worth getting, (populousII next
year) Lotus turbo espriteII - 1 or 2 player car racing game - like
outrun but _much_ better - looks very good when played on two machines.
Omar Sharif's Bridge - samples of the man himself on the game, good
tutorial section, but the computer does play some _very strange_ cards
sound effects are really irritating after a while, the manual is lousy
sections for pc, atari, amiga but not arc - extra features not easy to
get - not worth getting unless you want to have fun - not really for
serious play (unless you play as four humans and no computer players)
Millipede:
videographics boards - realtime image manipulation.
Minerva:
nothing amazing but plenty of good software.
Morley:
loads of reasonably priced scsi addons ruined by an expensive card, the
card can be got for half their price at cj computing - westbury
new back up software for streamers/ floppies.
TDK:
buy a tdk colour 5 pack of disks and try to win an a4 - offer still
valid.
4th dimension:
loads of new games:
chopper force (at last): good but if you've ever played gunship2000
on the pcs leave this one out and get gunship and an aleph one pc card
black angel, dungeon and galactic dan! also released.
Serial port:
floptical drives on sale, arcterm 7 - new comms software
!sparkfs - new archive file system from david pilling _very_ good
will read almost any archive except !cfs - faster than arcfs and
more compatible with unix/pc/mac systems
Turcan Research:
Dreadnoughts - WWI naval warfare system - _very_ good gameplay,
graphics are slowish and it returns to mode 12 on the desktop but
is very well thought out and well worth getting.
Watford Electronics:
the usual over priced under supported stuff (unbiassed honest)
State Machine:
g8 graphics card - more of a vidc1a booster than a separate card like
cc's colour card - dont buy either untill full reviews have been done
comparing the two.
Guile:
wierd flight-sim-in-a-dungeon-adventure type game.
ARM Assembler Programmer's Pocket Reference
-------------------------------------------
After many problems trying to get the text to print sideways on a sheet of A4
small enough to fit, while remaining legible, I've decided to issue the first
release as part of EurekA in the hope that those who want copies can assemble
their own until I can get things working properly. Read, enjoy, hardcopy and
have fun with photo-reducing so it'll actually go in a pocket. If there are
_ANY_ errors, please get back to me ASAP.
-----------------------------------------------------------------------------
ARM ASSEMBLER PROGRAMMER'S POCKET REFERENCE (v.0.1A)
A BITS PUBLICATION
WRITTEN AND ENTERED INTO THE PUBLIC DOMAIN BY DAVE WALKER NOVEMBER 1992
(CORRECTIONS FOR VER A BY GRAHAM WILLMOTT)
Memory Assignment, Parameter Passing and Assembly Directives
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Memory is reserved with DIM &<code length> ; set P% to start of code as normal.
P% acts as (usual) load address, and then execute address. O% may be used for
offset assembly, as with the Acorn Proton; however this is now redundant as RMs
are NOT paged, but sent to the Heap Manager. Range checking has now been
implemented, so program assembly aborts if reserved memory is exceeded. This is
done using L%, and produces a listing like:
DIM code% 256
P%=code%
L%=P%+256
[....
Parameters may be passed to an assembler program either by assigning integers
to variables A% to H % which are then copied into R0-R7, or by using
CALL <address> {<parameters>}
The parameter set may be decoded by examining R9 and R10 on entry to the
routine; R9 contains a pointer to the parameter descriptor block, and R10
contains the number of parameters passed.
The memory block indicated by R9 has a 2-word entry in it for each parameter,
the entries being set up in reverse order (last parameter passed is described
by first 2 words of block). The first word of an entry is a pointer to the
address where the variable itself is stored (or, in the case of a string, to
where a pointer to it is stored), and the second word indicates the type of the
variable.
Type number First word points to Example of possible BASIC var passed
----------- -------------------- ------------------------------------
0 Single-byte number ?var
4 4-byte integer !var,var%,var%(n)
5 5-byte real var, var(n)
128 String info block var$, var$(n)
129 Terminated char string $var
256+4 Integer array block var%()
256+5 Real array block var()
256+128 String array block var$
The locations pointed to by the first word are not guaranteed to be
word-aligned.
In the case of types 4, 5 and 129, the first word points directly to the
variable; otherwise, it points to a further information block. For the case of
strings, the first word points to a word-aligned string information block,
which has the format
Bytes 0-3: Pointer to the characters comprising the string
Byte 4: Current number of characters in the string.
The value of R0 produced by a routine may be read back into a BASIC variable
using the command
<var>=USR(<routine entry point>)
Registers and Processor Modes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
User Mode
---------
16 registers, R0-R15, visible. Conventionally:
R13 used as primary stack pointer
R14 used as link register
R0-R12 are general and available. R15 used as program counter (PC) and is also
location of status flags:
Bits 2-25 used as PC; "current" memory location is 2 instructions
(8 bytes) past instruction being executed,
as a result of pipelining. Need subtraction
to compensate when writing interrupt
routines.
Bits 26-31 are the main status flags:
Bit Letter Description
--- ------ -----------
26 F Fast Interrupt disable
27 I Interrupt disable
28 V Arithmetic overflow
29 C Carry
30 Z Zero
31 N Negative
Bits 0 and 1 set processor status mode:
Bit 1 (S1) Bit 0 (S0) Mode
---------- ---------- ----
0 0 User (default)
0 1 Fast interrupt (FIQ)
1 0 Interrupt (IRQ)
1 1 Supervisor (SVC)
Interrupts may NOT be disabled by directly writing masked bits to R15 in User
Mode, but SWI"IntOn" and SWI"IntOff" may be used to toggle IRQ (bit 27).
FIQ Mode
--------
R8-R14 are replaced by private R8_FIQ - R14_FIQ
IRQ Mode
--------
R13 and R14 replaced by private R13_IRQ and R14_IRQ
SVC Mode
--------
R13 and R14 replaced by private R13_SVC and R14_SVC. Direct writing to
writable support hardware is permitted. All hardware devices are memory mapped.
Interrupts and SVC Mode
-----------------------
SWI calls WILL corrupt R14_SVC. When executing an SWI
from IRQ or FIQ, the code supplied by Acorn to get round this is:
MOV R9,PC ; Preserve current processor mode
ORR R8,R9,#3 ; Move to R8, selecting SVC mode
TEQP R8,#0 ; Enter SVC mode
MOVNV R0,R0 ; No-op to sync internal registers
STMFD R13!,{R14} ; Preserve R14_SVC on SVC stack
<Insert necessary SWI calls here>
LDMFD R13!,{R14} ; Restore R14_SVC from SVC stack
TEQP R9,#0 ; Back to original processor mode
MOVNV R0,R0 ; No-op to sync internal registers
In IRQ and FIQ modes, it is necessary to set bits 26 and 27 of R15, and then
reset them before re-entering User mode.
Assembler Mnemonics
~~~~~~~~~~~~~~~~~~
Register Loading
----------------
MOV <reg>,<expr> Loads register with absolute value of expression; ie if
expression is a label, the absolute address of same at
compile time. Affects N,Z.
MVN <reg>,<op1> Loads NOT(op1) into reg. As 2's complement is -n=NOT(n)+1,
use MVN <reg>,(n-1) to load reg with -n.
ADR <reg>,<expr> Loads register with address given as offset from P%,
giving relocatable code. For expr=label, the offset
calculations are user-transparent.
Shift Instructions
------------------
LSL#n or Rx Shifts the operated register left by n places, or by the no.
of places indicated by Rx. Zeroes are inserted into bit 0,
successive bit 31s are shifted into the carry, overflow is lost.
ASL #n or Rx Use is exactly the same as LSL.
LSR #n or Rx Zeroes inserted at bit 31; data shifted right and through bit 0.
Data overflow at least significant end is lost.
ASR #n or Rx As LSR, but bit 31 (sign) is preserved and bit 0 moves into the
carry. For a shift of 1 place, bit 31 is copied to bit 30;
afterwards treat as an LSR on a 31 bit word, bit 32 remaining
signed.
ROR #n or Rx Barrel shift right n places; bits move from bit 0 to bit 31. A
copy of the initial bit 0 is preserved in the carry flag.
RRX Rotate right by one place, using the carry as a "bit 32." Bit 0
goes to the carry, the carry goes to bit 31 etc. Essentially, a
33 bit rotate.
Logical Processing Instructions
-------------------------------
ADD <dest>,<op1>,<op2> Add operand 1 to operand 2, store in destination.
N,Z,C,V are updated.
ADC <dest>,<op1>,<op2> As ADD, but accounts for the initial status of the
carry flag. N,Z,C,V affected if S suffix used.
SUB <dest>,<op1>,<op2> Subtract operand 2 from operand 1, store in
destination. Valid if op1 and op2 are both unsigned
or both 2's complement. Affects N,Z,C,V if S suffix
used.
SBC <dest>,<op1>,<op2> Subtract with carry; ie dest=op1-op2-NOT(carry).
Affects N,Z,C,V if S suffix used.
RSB <dest>,<op1>,<op2> Subtract op1 from op2, so shift ops can be done on
op2. Affects N,Z,C,V.
RSC <dest>,<op1>,<op2> dest=op2-op1-NOT(carry). Affects N,Z,C,V.
CMP <op1>,<op2> Reflect notional result of op1-op2 in N,Z,C,V flags.
S suffix is implicitly assumed.
CMN <op1>,<op2> Reflect notional result of op1-(-op2). Note not
NOT(op2)! Sets Z if op1=op2. Affects N,Z,C,V. S suffix
implicitly assumed.
AND <dest>,<op1>,<op2> dest=op1 AND op2. Affects N,Z.
ORR <dest>,<op1>,<op2> dest=op1 OR op2. Affects N,Z.
EOR <dest>,<op1>,<op2> dest=op1 EOR op2. Affects N,Z.
BIC <dest>,<op1>,<op2> dest=op1 AND (NOT (op2)). If we take op1 and treat
op2 as a mask, a set bit in op2 will cause the
corresponding bit in op1 to clear. Perform for all 32
bits, then store the modified op1 in dest. Affects
N,Z.
TST <op1>,<op2> Bitwise notional AND of op1 and op2. Either op can be
the bit mask; Z sets if the a bit set in the mask is
set in the op. Affects N,Z. S suffix is implicitly
assumed.
TEQ <op1>,<op2> Notional bitwise OR, used to test equivalence.
Affects N,Z. S suffix implicitly assumed.
MUL <dest>,<op1>,<op2> dest=op1*op2. Restrictions: op1 and op2 must be simple
registers, must be different, and must not be R15. N
and Z reflect the result, V is unchanged and C becomes
ill-defined.
MLA <dest>,<op1>,<op2>,<op3> dest=(op1*op2)+op3. Useful for running totals.
Permissible for dest to be the same as op3. Flags
set as with MUL.
Block Data Transfer
-------------------
LDM<options><base>{!},<list> ]
] See "Stack Implementation" section
STM<options><base>{!},<list> ]
Miscellany
----------
B <addr> Direct branch to routine at addr; wasteful on pipeline.
BL <addr> Copies pipeline-corrected PC to R14 and branches to routine at
addr; return may be affected by MOV PC,R14 at end of subroutine.
SWI <expr> Executes an SWI routine. See available list of routines.
Conditional Execution Suffixes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
All ARM assembler operations may be executed conditionally; the conditions are
defined by a two-letter extension appended to the mnemonic to be executed
subject to the conditions. In the table below, "flag status" refers to the
conditions required for a command extended by the suffix to be executed.
Suffix Literal Meaning Flag Status Comments
------ --------------- ----------- --------
EQ Equal Z set eg from CMPS with equal args
NE Not equal Z clear
VS Overflow set V set
VC Overflow clear V clear
AL Always Default, implicit
NV Never Only workable in a large chunk
of Boolean; use now prohibited
by Acorn
HI Higher (unsigned) C set AND arg1>arg2 ]
Z clear ]Use after a CMP or
]CPN
LS Less than or same as C clear OR Z arg1<=arg2]
(unsigned) set
PL Plus N clear Zero is positive
MI Minus N set Bit 31 of prev. result is 1
CS Carry set C set prev. instruction carried or
overflowed
CC Carry clear C clear
GE Greater than or equal (N set AND V clear)OR(N clear AND V clear)
(signed)
LT Less than (signed) (N set AND V clear)OR(N clear AND V set)
GT Greater than (signed) ((N set AND V set)OR(N clear AND V clear))AND
Z clear
LE Less than or equal ((N set AND V clear)OR(N clear AND V set))AND
(signed) Z clear
For signed suffixes, signing convention is 2's complement (ie NOT and add 1)
Other Mnemonic Extenders
------------------------
B Byte flag Operator only operates on 8-bit operand; word
alignment not necessary
S Status flag Reflect result of operation in status flags.
Beware; this is implicit in 6502, but must be
specified in ARM unless otherwise stated (above)
P Pipeline suspend Disable pipelining to allow writing to R15;
result of operand (usually TEQ) is written back
_directly_ to status bits (26-31) of R15.
Stack Implementation
--------------------
Stacks are most easily implemented using STM and LDM. Both
of these instructions take the syntax
<mnemonic><extender> <base>{!},<list>
where <mnemonic> is either STM (store multiple)
or LDM (load multiple)
<extender> is I Increment address after storing each register
D Decrement address after storing each register
A Modify address after storing each register
B Modify address before storing each register
FA Operate on full ascending stack
FD Operate on full descending stack
EA Operate on empty ascending stack
ED Operate on empty descending stack
<base> is the address of the stack pointer; usually held in R13
{!} specifies write-back of the modified address to the stack pointer
(to prevent data being accidentally overwritten)
<list> is a comma-separated list of arguments, enclosed in braces {}, to
be pushed to the stack. First entry in the list goes on first.
The FA-ED extenders save the problem of having to reverse the usual extenders
when pushing and pulling; to pull from a stack which had been pushed to using
STMIA, it was necessary to use LDMDB. Now we can just use STMEA and LDMEA, for
example.
Floating Point Model
~~~~~~~~~~~~~~~~~~~
The following instructions are _NOT_ included in the
standard ARM BASIC assembler; however, for those of you who may have
cross-assemblers or the Acorn Object Assembler, or are prepared to hand-code
the instructions in hex, here goes.
The FP model complies with the IEEE specification, and provides a further 8
registers, F0-F7. Numbers may be stored in the following 4 formats:
IEEE Single Precision (S)
32 bits: 1 sign bit
23 bit mantissa
8 bit exponent
IEEE Double Precision (D)
64 bits (double word): 1 sign bit
52 bit mantissa
11 bit exponent
Double Extended Prec. (E)
96 bits (triple word): 1 sign bit
64 bit mantissa
15 bit exponent
16 bits unused
Packed decimal BCD (P)
96 bits (triple word): 1 sign digit
19 digit mantissa
4 digit exponent
The FP status register has separate flags for Overflow, Underflow, Division by
Zero, Inexact result and Invalid operation; a subset of the flags indicating
these is copied into the ARM status register (R15) by the co-processor
interface.
In brief, the instructions are:
LDF<suffix><precision> <reg>,<address>
STF<suffix><precision> <reg>,<address>
where:
<suffix> is one of S,D,F,P
<reg> is F0-F7
<Address> is either [Rn]{,#offset} or [Rn,#offset]{!}
and is defined as an offset from the ARM base register specified; the
offset is in the range -1020 to +1020. The offset is added to the
base register when write-back {!} is specified with pre-indexed
addressing, and is always added with post-indexed.
FLT Change integer to FP
FIX Change FP to integer
WPS Write FP status to FP status reg.
RFS Read FP status from FP status reg.
WFC Write FP control ] Processor SVC mode only
RFC Read FP control ]
This set uses the general form
eg FLT<suffix><precision>{rounding mode} <Freg>,(<reg> #value)
Unary Operations
----------------
Command format:
<unaryop><suffix><precision>{rounding mode} <Fdest>,(<Fop> #val)
Mnemonic Effect Calculation
-------- ------ -----------
MVF Move Fdest=Fop
MNF Move negated Fdest=-Fop
ABS Absolute value Fdest=ABS(Fop)
RND Round to integer Fdest=INT(Fop)
SQT Square root Fdest=SQR(Fop)
LOG Log to base #10d Fdest=LOG(Fop)
LGN Natural log Fdest=LN(Fop)
EXP Exponent Fdest=EXP(Fop)
SIN Obvious Fdest=SIN(Fop)
COS Equally obvious Fdest=COS(Fop)
TAN Ditto Fdest=TAN(Fop)
ASN ] Fdest=ASN(Fop)
ACS ] (Obvious)^-1 Fdest=ACS(Fop)
ATN ] Fdest=ATN(Fop)
Binary Operations
-----------------
Command format:
<binaryop><suffix><precision>{rounding mode} <Fdest>,<Fop1>,(<Fop2> #value)
Mnemonic Effect Calculation
-------- ------ -----------
ADF Add Fdest=Fop1+Fop2
MUF Multiply Fdest=Fop1*Fop2
SUB subtract Fdest=Fop1-Fop2
RSF Reverse subtract Fdest=Fop2-Fop1
DVF Divide Fdest=Fop1/Fop2
RDF Reverse divide Fdest=Fop2/Fop1
POW Raise to power Fdest=Fop1^Fop2
RPW Reverse raise... Fdest=Fop2^Fop1
RMF Remainder Fdest=Fop1 MOD Fop2
FML Fast multiply Fdest=Fop1*Fop2
FDV Fast divide Fdest=Fop1/Fop2
FRD Fast reverse divide Fdest=Fop2/Fop1
POL Polar angle Fdest=angle between Fop1 and Fop2
Note that the "fast" instructionsonly produce single-figure accuracy,
regardless of the precision specified in the mnemonic.
System Memory Map
~~~~~~~~~~~~~~~~
Please note that this is the provisional version of the memory map details;
the master table (at the top) is for an A540/R200 series machine (the addresses
are the same on the entire Archimedes range, but there are no Acorn-endorsed
RAM expansions to take you over the 4Mb), whereas the logically-mapped RAM area
was assigned from much hacking on an A310. The addresses in this latter table
are, of course, affected directly by machine configuration, and the data thus
given is merely representative of the setup of that machine at that time.
Read Write Addr
---- ----- ----
-------------------------------- 3FFFFFF
ROM (high) | Logical to Physical
| address translator -------------------
-------------------------------- 3800000 / 4Mb daughter card
ROM (low) | DMA Address / 3rd slot MEMC (z)
| generators / -------------------
|-------------------- 3600000 / 4Mb daughter card
| Video Controller / 2nd slot MEMC (y)
-------------------------------- 3400000 / -------------------
Input/Output Controllers / 4Mb daughter card
-------------------------------- 3000000 / Ist slot MEMC (x)
Physically mapped RAM -------------------
-------------------------------- 2000000 \ 4Mb on motherboard
Logically mapped RAM \ Master MEMC (w)
-------------------------------- 0000000 \----- -------------------
0 ---------------------- \
ARM Reset \ \
4 ---------------------- \ \
Undefined instruction \ \
8 ---------------------- \ \
Software Interrupt (SWI) \ \
C ---------------------- \ 0 ---------------------------------
Abort (pre-fetch) Bootstrap and hardware exception
10 ---------------------- vectors
Abort (data) / 1C ---------------------------------
14 ---------------------- / System and BASIC workspace
Address exception / 8000 ---------------------------------
18 ---------------------- / Application RAM
IRQ_Vec / (RISC OS Desktop Tasks map to here)
1C --------------------- / A7FFF ---------------------------------
FIQ_Vec / Unassigned address space
--------------------- 1800000 ---------------------------------
RAM-based Relocatable Modules
(incl. those downloaded from podules)
Font definitions grow downwards
1825FFF ---------------------------------
Unassigned address space
1C00000 ---------------------------------
System Heap
1C03FFF ---------------------------------
Unassigned address space
1F00000 ---------------------------------
Cursor data and Desktop scratchpad
1F07FFF ---------------------------------
Unassigned address space
1FEC000 ---------------------------------
Screen RAM
(grows downwards)
1FFFFFF ---------------------------------
In addition, the RAM disk maps in at &1000000.
IOC
---
The I/O controller is mapped into RAM from &3000000 to &3400000, and _ALL_ I/O
devices are also thus memory mapped. The chip has 4 operation modes; sync,
fast, medium and slow. It therefore follows that a good many operations will be
duplicated in different modes. A (necessarily incomplete) list of some device
entry points follows:
Device Addr
------ ----
Serial &3200004
Parallel printer &3250010 (slow mode)
Podule IRQ (mask reg) &3360000
IOC base (slow mode) &3250000
NB
-- When writing to a device via IOC, the data must be on the top 16 bits of the
data word. Data to be read appears on the bottom 16 bits.
-----------------------------------------------------------------------------
Needless to say, there could be much, much more included here. Please let me
know what you'd like to see covered; however, bear in mind that this is meant
to be a brief pocket guide, not the PRM set!
*LIB
~~~
Further texts now available for perusal from your friendly neighbourhood SIG
Leader:
Archimedes Operating System: A. & N. van Someren, Dabs Press
---------------------------
Some rather good internal stuff here. However, stops short of direct chip
addressing; I need to get the ARM data book. Good section on MEMC, though,
and probably the de-facto guide to writing modules. Interesting sections on
the sound system.
Acorn A540/R200 Technical Reference Manual
------------------------------------------
If you've got a 540 or R series machine, this should be top of your "must
read" list. Much stuff in the first couple of sections which covers the entire
Archimedes range, however. Also covers the SCSI podule, and has exhaustive
info (down to timing diagrams) on the Ethernet podules. Includes blueprints!
Further plans are to get hold of the VLSI ARM Data Book (I have the ISBN),
and the full schematic and timing diagrams to the backplane (Acorn will supply
free;strange they weren't included in the Tech Ref). Also, I don't think my
willpower can stop me delving into my bank account for a 3.1 PRM set...
*SHUTDOWN
~~~~~~~~
Well, another issue; don't worry, I don't envisage another one being this big
for a _LONG_ time (although I'm perfectly willing to lay this down as a
challenge to those of you who want to contribute articles)! I'm delighted to
see some reader contributions at this early stage in EurekA's life; having had
experience last year editing Cassini (the HP48 SIG Newsletter), where it turned
out that, with the exception of one piece of feedback the entire year's
newsletters were written by Tony Duell and myself, I think we may well make a
real success out of this newsletter. Remember, Cassini went international
within six months of the first issue..
Meantime, editor keels over....<thud>