home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / documentation / documents / a252eur2 < prev    next >
Text File  |  1999-04-27  |  42KB  |  930 lines

  1.  
  2.  EEEEEEEE                        K          A  |
  3.  EE                  R R    EE   K         AA  | The BITS ArcSIG
  4.  EE         U   U   RR RR  E  E  K K      A A  | Newsletter
  5.  EEEEEEE    U   U   R      EEEE  KK      AA A  |
  6.  EE         U   U   R      E     K K    A  AA  | Issue #02 
  7.  EEEEEEEE    UUUU   R       EEE  K  K  A    A  | Compiled and Linked by Dave
  8.  
  9. ----------------------------------------------------------------------------
  10.  
  11.  *INFO
  12.  ~~~~~
  13. First of all, a little home news; Rob Wheeler has set up an Archimedes forum on
  14. seqa; many thanks Rob, and I hope you get some lively debates and hack
  15. interchanges going. I'll have to get myself a seqa account one of these
  16. days.... Also, the planned instalment of "Down to the Metal" has been
  17. postponed, as we present instead, after much hackification and scouring of
  18. docs, the first release of the Assembler Programmer's Pocket Guide.
  19.  
  20. For those of you who don't know already (yes, both of you), RISC OS 3.10 has
  21. been released, priced #40 for the full set including User Guide, and a mere #20
  22. for the "A5000 Upgrade," which doesn't include the docs. This leaves me with
  23. the impression that 3.10 is basically 3.00 with most of the major bugs fixed,
  24. but I will reserve full judgement until my copy shows up. 
  25.  
  26. Latest news from the AU show is that the RISC OS 3 Programmer's Reference
  27. Manual is on release, in draft (beta test) form; it's rather shorter than I'd
  28. heard (5 volumes instead of the expected 7), although this may change in the
  29. final release version. Purchasers of the draft will get a free copy of the
  30. production version when it has been completed. Price is #120; time for a nice
  31. talk with my bank manager, I think. 
  32.  
  33. As stated in the last issue of EurekA, the new ARM250 based A3010, 3020 and
  34. 4000 have arrived; this represents an interesting move by Acorn, in that they
  35. are now attacking the price bracket currently held, and very successfully so,
  36. by the 16 bit "home" machines. The ARM250 itself is a major exercise in IC
  37. integration, as it contains the standard 4-chip ARM set (ARM, MEMC, VIDC, IOC),
  38. crunched down onto a single wafer. Among other things (like a reduction in
  39. production costs), this squeezes another 2 MIPS out of the processor, as
  40. compared to the standard ARM2 around which it is based. The number of discrete
  41. components on the motherboard has been dramatically reduced; I hear that the
  42. 3010 only has about 6 ICs in it, total. Although this move throws upgradability
  43. options clean out the window (with the honourable exception of a 3000-like
  44. half-size podule slot), the speed increase could be very interesting if
  45. applied to a hypothetical "ARM350." 
  46.  
  47. Rumours still abound about the possibility of a new top-end Archimedes to
  48. replace the now aging A540, obviously fuelled by the fact that RISC OS 3.10 is
  49. aware of the new ARM610 chip, based on the 600 design macro and coming into
  50. circulation soon inside Apple's Newton palmtop. Whether this will mean an
  51. entirely new machine, a drop-in processor board replacement for the 540 or
  52. maybe even both remains to be seen, but as the 610 may be built into a parallel
  53. architecture, the 4-processor ARM610 Hypercube is not an impossibility. Also
  54. (tear, rend) the FPA, promised for this month, still hasn't shown up. Please
  55. correct me if I'm wrong on this, as I want one!
  56.  
  57. *OBEY !RUN
  58. ~~~~~~~~~
  59.  
  60. Marginal Hacks (Part 10 of 1<<31)
  61. ~~~~~~~~~~~~~
  62. Further to the discussion in the last issue on undocumented device
  63. streams,three more have surfaced. These are:
  64.  
  65. kbd:         Keyboard (input only), returned by OS_ReadLine  
  66. rawkbd:      Keyboard (input only), returned by OS_ReadC
  67. rawvdu:      VDU output, issued via OS_WriteC In addition, the vdu: stream
  68.              described previously is processed by GS_Read before being
  69.              directed to OS_WriteC.
  70.  
  71.  Also, some interesting but so far unverified hacks have come to me via the
  72.  bush telegraph:
  73.  
  74.  First, from Rob Wheeler, an easter egg in RISC OS 3.10:
  75.  
  76. let !formed be seen by the filer.
  77. open Resources::resources.$.resources.fileswitch (might be filer)
  78. load in the template file - have a look at 'report' or some similar file 
  79. see an interesting message.
  80.  
  81.  
  82. And from Graham Willmott, a way to get anti-aliased fonts as default on the
  83. Desktop under RISC OS 2.00:
  84.  
  85. Save the WindowManager module to disk and reload at &8000. Turn the
  86. conditional branch at &10534 to a NOP (ie E1A00000 since Acorn don't want
  87. us to use the NV condition code any more). Resave and make it a module.
  88. You will have to load it from outside the desktop, after setting Wimp$Path
  89. to a suitable templates directory.
  90.  
  91. What is does is this - since the WIMP templates are loaded by all sorts of
  92. different modules, I decided that the only way to force it to load the fonts
  93. without an "Unable to bind..." error was to make it look for fonts in all
  94. template files; ie to ignore the font flag in the LoadTemplate SWI (assuming
  95. that it is a font flag; I have no manual, remember.) At least I think that's
  96. how it works.
  97.  
  98. Features
  99. ~~~~~~~
  100.  
  101. Trials and Tribulations of the PCM (Part 2)
  102. ----------------------------------                                 
  103. Since EurekA #01, I've upgraded to the 1.81 version of the PCM; although it's
  104. nice to have VGA graphics at last, I feel obliged to issue the following
  105. warning:
  106.  
  107. When you install the new PCEm on your hard drive and configure a partition, you
  108. may have to do a complete DOS reformat and reinstall; especially if you decide
  109. to use the VGA driver set. I found out (by playing around with MultiFS) that
  110. the new emulator stores the PC data differently, so be certain that your
  111. virtual PC drive is fully backed up before making the upgrade. Also, the old
  112. (1.60) MultiFS doesn't work with the new emulator's storage format, so be sure
  113. to install the new version of this, too.
  114.  
  115. I recently acquired a DOS-based program from Compu$erve, which is designed to
  116. give full information about the system it is running on; this is what it made
  117. of the Acorn virtual PC.
  118.  
  119.            Advanced Personal Systems  SYSCHK Information Printout 
  120.                  Tuesday,  Oct. 27, 1992  Version: 2.34 
  121. PROCESSOR-------------------------------------------------------------------
  122. Model: IBM PC                           Processor: 8088     Coprocessor:Unknwn
  123. SYSTEM BIOS-----------------------------------------------------------------
  124. Source: Unknown                                Date: 11/08/82                  
  125. BIOS Extentsions:(none)
  126. INPUT/OUTPUT----------------------------------------------------------------
  127. Keyboard: 101 Key Enhanced                     Mouse Installed: No           
  128. Parallel Ports: 1                                      Device  Base Address    
  129.                  
  130.                                                         LPT1     378h
  131.   Serial Ports: 1                                     
  132.                                                        Device  Base Address
  133.                                                         UART     3F8h         
  134.                                                         COM1     8250
  135. HARD DISKS------------------------------------------------------------------ 
  136. Tracks: 863       Heads: 6   Sectors Per Track: 17
  137.                                 Size: 42.98 MB                    
  138. Logical Drives: A: B: C: 
  139.  
  140. FLOPPY DISKS----------------------------------------------------------------
  141.    Floppy Disk 1: 720 KB 3+"                       Floppy Disk 2: 720 KB 3+"
  142. VIDEO----------------------------------------------------------------------- 
  143. Active Video: VGA + Analog Color Monitor                         BIOS Source:
  144. No Copyright found  
  145. MEMORY----------------------------------------------------------------------
  146.                 Conventional Memory: 640 KB  (572 KB Free)                    
  147.  Extended Memory: None                 Expanded Memory: RESIDENT
  148. PROGRAMS----------------------------------------------------------- 
  149.                   
  150. Program Name Size    Program Interfaces 
  151. ------------ ------------------------------
  152. DOS Kernel     0k                   
  153. DOS Config    17k (Files = 30, Buffers = 0)
  154. COMMAND.COM    5k Microsoft DOS 5.0 
  155. SPEED-----------------------------------------------------------------------
  156.                        Throughput Speed: 71.74MHz
  157.                         CPU Clock Speed: 9 MHz   
  158.  
  159. Interesting results, these. The first thing to note is that the program reports
  160. the machine as being based on the 8088, as opposed to the Acorn-claimed 80188.
  161. Apparently, this is because the 188 was never actually used as a PC main
  162. processor, its main circulation being as a microcontroller. Very surprisingly,
  163. the program failed to identify the emulated 8087 math co-pro. Looking at the
  164. BIOS, it is clear that Acorn either fudged the date or paid licence fees to
  165. legitimately copy someone else's BIOS; probably IBM's own. However, the program
  166. cannot find a copyright, which is a point for concern.
  167.  
  168. I/O: Bang on right. I didn't have AMOUSE.COM installed at the time I ran the
  169. prog, but I'll check on this at a later date. Having run the program on a
  170. friend's 386SX clone, I noted that his UART maps in at 16450, but this is
  171. probably a side effect of the different virtual architecture.
  172.  
  173. Drives: I could have sworn (and indeed I do) that I never set a second floppy.
  174. However, I like the emulation of the hard drive partition right down to the
  175. number of heads, but this may just be either a function of the program or the
  176. real drive may be a 6-header (as it's a 120Mb Conner, about 2 cm thick, I doubt
  177. this latter possibility).
  178.  
  179. Video: Same again; no copyright. However, it's interesting that the VGA drivers
  180. actually register the Arc monitor type, as opposed to just driving a virtual
  181. display which the Arc then interprets transparently. 
  182.  
  183. One of the more useful features in the 1.81 is the ability to use expanded
  184. memory; for those of you who don't know PCs, memory is split into conventional,
  185. high, extended and/or expanded, ie a right mess compared with our flat model.
  186. The latter two types require extra software drivers to enable the processor to
  187. map them. Unfortunately, expanded is the slower of the two, as it operates by
  188. swapping pages with a page designated in processor-mappable me mory. Needless
  189. to say, some PC programs need this flavour of memory, despite the fact that
  190. most current PCs are now equipped with extended instead. This requires a patch
  191. for extended to emulate expanded...pity it's not possible to produce one the
  192. other way around.
  193.  
  194. Speed: A bit lost for words here. From what I can gather, the CPU clock speed
  195. is about right. However, the processor throughput appears to be "leaking" into
  196. native ARM-like speeds (my friend's 20 MHz 386 clocked a throughput of 25.72
  197. MHz).  Either this is the correct case, or it's the rest of the surrounding
  198. emulated chippery which loses us all the speed on the emulator. This is
  199. definitely worth looking into.
  200.  
  201. BAU Show Review: Courtesy of Rob Wheeler
  202. ---------------------------------------- 
  203. This is a list of vendors present at the recent Acorn User show, and their
  204. latest products. However, some of the hoped-for major products proved to be
  205. still unavailable, the most notable case being the Floating Point Accelerator
  206. chip from Acorn, designed to go into the A5000 and A540. Many thanks to Rob
  207. for this list, and the accompanying brief reviews.
  208.  
  209. Acorn:
  210.         all new machines on display, staff wearing technicolour 'dream'coats 
  211.         riscos3.1 prms available in draft - cash or cheque not plastic 
  212.         loads of interest in pocket book and a4.
  213.  
  214. Aleph One / Atomwide:
  215.         new cyrix 486slx card 1-4Mb RAM - 700quid
  216.         prices down on 386 cards - new windows driver software claims to make
  217.         an arm/386slx faster at windows than a true 33MHz486dx
  218.         plenty of 8Mb upgrades for machines with upper limits of 4Mb 
  219.         new AUN / Ethernet cards available.
  220.  
  221. Archimedes World / BBC Acorn User / Micro User (under new name):
  222.         usual stuff - old mags at no discount
  223.  
  224. Beebug/ Risc Developements:
  225.         nothing new - just a wide selection from their store at minimal show
  226.         discount.
  227.  
  228. BirdTech:
  229.         various packages for high quality colour printing
  230.  
  231. Calligraph:
  232.         new 12ppm 600dpi laser printer for under a grand
  233.  
  234. Clares:
  235.         Rhapsody3, other new music stuff, csv data plotter
  236.  
  237. Colton:
  238.         Pipedream4 - no new stuff
  239.  
  240. CC & Wild Vision:
  241.         Artworks - looks nice'n'fast as promissed - _very_ fast seller
  242.         Colour Card - 512k onboard ram, 24bit palette, 65536 max colours on
  243.         screen, 256 colour desktop up to 1024x768 - nice bar price - 300quid
  244.         Impression 2.18 - less bugs
  245.         Compression - now riscos 3 compatible
  246.  
  247. Digital Services:
  248.         new version of squirrel - better parser and inter-system compatibility
  249.  
  250. EMR:
  251.         Usual musical stuff.
  252.  
  253. EFF:
  254.         Loads of new fonts.
  255.  
  256. ICS:
  257.         ColourSep - 24bit cmyk splitting software for arcs, full review follows
  258.         (when i get it) but it looks very good.
  259.  
  260. Icon:
  261.         Easiwriter2 and Techwriter - set to hit CC very hard if they dont
  262.         improve impression/equasor very soon.
  263.  
  264. Integrex:
  265.         more colour printers.
  266.  
  267. Irlam Instruments:
  268.         i-Mage. Proi-Mage - realtime video digitisers and flatbed colour
  269.         scanners - all run in desktop 
  270.         Moving i-Mage - real time video in a window 
  271.  
  272. Krisalis:
  273.         Loads of new 16bit conversions:
  274.         Populous - port of Bulfrogs game where you play one of two gods trying
  275.         to gain total control of a world by defeating non-believers and
  276.         increasing your own 'flock' - well worth getting, (populousII next
  277.         year) Lotus turbo espriteII - 1 or 2 player car racing game - like
  278.         outrun but _much_ better - looks very good when played on two machines.
  279.         Omar Sharif's Bridge - samples of the man himself on the game, good
  280.         tutorial section, but the computer does play some _very strange_ cards
  281.         sound effects are really irritating after a while, the manual is lousy
  282.         sections for pc, atari, amiga but not arc - extra features not easy to
  283.         get - not worth getting unless you want to have fun - not really for 
  284.         serious play (unless you play as four humans and no computer players)
  285.  
  286. Millipede:
  287.         videographics boards - realtime image manipulation.
  288.  
  289. Minerva:
  290.         nothing amazing but plenty of good software.
  291.  
  292. Morley:
  293.         loads of reasonably priced scsi addons ruined by an expensive card, the
  294.         card can be got for half their price at cj computing - westbury 
  295.         new back up software for streamers/ floppies.
  296.  
  297. TDK:
  298.         buy a tdk colour 5 pack of disks and try to win an a4 - offer still
  299.         valid.
  300.  
  301. 4th dimension:
  302.         loads of new games:
  303.         chopper force (at last): good but if you've ever played gunship2000
  304.         on the pcs leave this one out and get gunship and an aleph one pc card
  305.         black angel, dungeon and galactic dan! also released.
  306.  
  307. Serial port:
  308.         floptical drives on sale, arcterm 7 - new comms software
  309.         !sparkfs - new archive file system from david pilling _very_ good
  310.         will read almost any archive except !cfs - faster than arcfs and
  311.         more compatible with unix/pc/mac systems 
  312.  
  313. Turcan Research:
  314.         Dreadnoughts - WWI naval warfare system - _very_ good gameplay,
  315.         graphics are slowish and it returns to mode 12 on the desktop  but
  316.         is very well thought out and well worth getting.
  317.  
  318. Watford Electronics:
  319.         the usual over priced under supported stuff (unbiassed honest)
  320.  
  321. State Machine:
  322.         g8 graphics card - more of a vidc1a booster than a separate card like
  323.         cc's colour card - dont buy either untill full reviews have been done
  324.         comparing the two.
  325.  
  326. Guile:
  327.         wierd flight-sim-in-a-dungeon-adventure type game.
  328.  
  329.  
  330. ARM Assembler Programmer's Pocket Reference
  331. ------------------------------------------- 
  332. After many problems trying to get the text to print sideways on a sheet of A4
  333. small enough to fit, while remaining legible, I've decided to issue the first
  334. release as part of EurekA in the hope that those who want copies can assemble
  335. their own until I can get things working properly. Read, enjoy, hardcopy and
  336. have fun with photo-reducing so it'll actually go in a pocket. If there are
  337. _ANY_ errors, please get back to me ASAP.
  338.  
  339. -----------------------------------------------------------------------------
  340.         
  341.              ARM ASSEMBLER PROGRAMMER'S POCKET REFERENCE (v.0.1A)
  342.                            
  343.                              A BITS PUBLICATION
  344.  
  345.    WRITTEN AND ENTERED INTO THE PUBLIC DOMAIN BY DAVE WALKER NOVEMBER 1992
  346.                  (CORRECTIONS FOR VER A BY GRAHAM WILLMOTT)
  347.  
  348. Memory Assignment, Parameter Passing and Assembly Directives
  349. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  350. Memory is reserved with DIM &<code length> ; set P% to start of code as normal.
  351. P% acts as (usual) load address, and then execute address. O% may be used for
  352. offset assembly, as with the Acorn Proton; however this is now redundant as RMs
  353. are NOT paged, but sent to the Heap Manager. Range checking has now been
  354. implemented, so program assembly aborts if reserved memory is exceeded. This is
  355. done using L%, and produces a listing like:
  356.  
  357.   DIM code% 256
  358.   P%=code% 
  359.   L%=P%+256
  360.   [.... 
  361.  
  362. Parameters may be passed to an assembler program either by assigning integers
  363. to variables A% to H % which are then copied into R0-R7, or by using 
  364.  
  365. CALL <address> {<parameters>}
  366.  
  367.  The parameter set may be decoded by examining R9 and R10 on entry to the
  368. routine; R9 contains a pointer to the parameter descriptor block, and R10
  369. contains the number of parameters passed.
  370.  The memory block indicated by R9 has a 2-word entry in it for each parameter,
  371. the entries being set up in reverse order (last parameter passed is described
  372. by first 2 words of block). The first word of an entry is a pointer to the
  373. address where the variable itself is stored (or, in the case of a string, to
  374. where a pointer to it is stored), and the second word indicates the type of the
  375. variable.
  376.  
  377. Type number   First word points to     Example of possible BASIC var passed
  378. -----------   --------------------     ------------------------------------
  379.     0         Single-byte number       ?var
  380.     4         4-byte integer           !var,var%,var%(n)
  381.     5         5-byte real              var, var(n)
  382.    128        String info block        var$, var$(n)
  383.    129        Terminated char string   $var
  384.    256+4      Integer array block      var%()
  385.    256+5      Real array block         var()
  386.    256+128    String array block       var$
  387.  
  388.  The locations pointed to by the first word are not guaranteed to be
  389. word-aligned.
  390.  In the case of types 4, 5 and 129, the first word points directly to the
  391. variable; otherwise, it points to a further information block. For the case of
  392. strings, the first word points to a word-aligned string information block,
  393. which has the format
  394.  
  395. Bytes 0-3:  Pointer to the characters comprising the string
  396. Byte 4:     Current number of characters in the string.
  397.  
  398.  The value of R0 produced by a routine may be read back into a BASIC variable
  399. using the command
  400.  
  401.      <var>=USR(<routine entry point>)
  402.  
  403. Registers and Processor Modes
  404. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  405. User Mode
  406. --------- 
  407. 16 registers, R0-R15, visible. Conventionally:
  408.                    R13 used as primary stack pointer
  409.                    R14 used as link register
  410.                           
  411. R0-R12 are general and available. R15 used as program counter (PC) and is also
  412. location of status flags:
  413.  
  414.              Bits 2-25 used as PC; "current" memory location is 2 instructions
  415.                                    (8 bytes) past instruction being executed,
  416.                                    as a result of pipelining. Need subtraction
  417.                                    to compensate when writing interrupt
  418.                                    routines.
  419.  
  420.              Bits 26-31 are the main status flags:
  421.  
  422.             Bit     Letter            Description
  423.             ---     ------            -----------
  424.             26        F           Fast Interrupt disable
  425.             27        I           Interrupt disable
  426.             28        V           Arithmetic overflow
  427.             29        C           Carry
  428.             30        Z           Zero
  429.             31        N           Negative
  430.  
  431.              Bits 0 and 1 set processor status mode:
  432.  
  433.             Bit 1 (S1)     Bit 0 (S0)       Mode
  434.             ----------     ----------       ----
  435.                 0              0            User (default)
  436.                 0              1            Fast interrupt (FIQ)
  437.                 1              0            Interrupt (IRQ)
  438.                 1              1            Supervisor (SVC)
  439.  
  440. Interrupts may NOT be disabled by directly writing masked bits to R15 in User
  441. Mode, but SWI"IntOn" and SWI"IntOff" may be used to toggle IRQ (bit 27).
  442.  
  443. FIQ Mode
  444. --------
  445.         R8-R14 are replaced by private R8_FIQ - R14_FIQ
  446.  
  447. IRQ Mode
  448. --------
  449.         R13 and R14 replaced by private R13_IRQ and R14_IRQ
  450.  
  451. SVC Mode
  452. --------
  453.         R13 and R14 replaced by private R13_SVC and R14_SVC. Direct writing to
  454. writable support hardware is permitted. All hardware devices are memory mapped.
  455.  
  456. Interrupts and SVC Mode
  457. -----------------------
  458.                        SWI calls WILL corrupt R14_SVC. When executing an SWI 
  459. from IRQ or FIQ, the code supplied by Acorn to get round this is:
  460.  
  461.    MOV R9,PC         ; Preserve current processor mode  
  462.    ORR R8,R9,#3      ; Move to R8, selecting SVC mode
  463.    TEQP R8,#0        ; Enter SVC mode
  464.    MOVNV R0,R0       ; No-op to sync internal registers
  465.    STMFD R13!,{R14}  ; Preserve R14_SVC on SVC stack
  466.  
  467.    <Insert necessary SWI calls here>
  468.  
  469.    LDMFD R13!,{R14}  ; Restore R14_SVC from SVC stack
  470.    TEQP R9,#0        ; Back to original processor mode
  471.    MOVNV R0,R0       ; No-op to sync internal registers
  472.  
  473. In IRQ and FIQ modes, it is necessary to set bits 26 and 27 of R15, and then
  474. reset them before re-entering User mode.
  475.  
  476. Assembler Mnemonics
  477. ~~~~~~~~~~~~~~~~~~
  478. Register Loading
  479. ----------------
  480.  
  481. MOV <reg>,<expr> Loads register with absolute value of expression; ie if
  482.                  expression is a label, the absolute address of same at
  483.                  compile time. Affects N,Z.
  484.  
  485. MVN <reg>,<op1>  Loads NOT(op1) into reg. As 2's complement is -n=NOT(n)+1,
  486.                  use MVN <reg>,(n-1) to load reg with -n.
  487.  
  488. ADR <reg>,<expr> Loads register with address given as offset from P%,
  489.                  giving relocatable code. For expr=label, the offset      
  490.                  calculations are user-transparent.
  491.  
  492. Shift Instructions
  493. ------------------
  494.  
  495. LSL#n or Rx Shifts the operated register left by n places, or by the no.       
  496.             of places indicated by Rx. Zeroes are inserted into bit 0,       
  497.             successive bit 31s are shifted into the carry, overflow is lost.
  498.  
  499. ASL #n or Rx Use is exactly the same as LSL.
  500.  
  501. LSR #n or Rx Zeroes inserted at bit 31; data shifted right and through bit 0. 
  502.              Data overflow at least significant end is lost.
  503.  
  504. ASR #n or Rx As LSR, but bit 31 (sign) is preserved and bit 0 moves into the
  505.              carry. For a shift of 1 place, bit 31 is copied to bit 30;
  506.              afterwards treat as an LSR on a 31 bit word, bit 32 remaining
  507.              signed.
  508.  
  509. ROR #n or Rx Barrel shift right n places; bits move from bit 0 to bit 31. A
  510.              copy of the initial bit 0 is preserved in the carry flag.
  511.  
  512. RRX          Rotate right by one place, using the carry as a "bit 32." Bit 0
  513.              goes to the carry, the carry goes to bit 31 etc. Essentially, a
  514.              33 bit rotate.
  515.  
  516. Logical Processing Instructions
  517. -------------------------------
  518.  
  519. ADD <dest>,<op1>,<op2> Add operand 1 to operand 2, store in destination.
  520.                        N,Z,C,V are updated.
  521.  
  522. ADC <dest>,<op1>,<op2> As ADD, but accounts for the initial status of the
  523.                        carry flag. N,Z,C,V affected if S suffix used.
  524.  
  525. SUB <dest>,<op1>,<op2> Subtract operand 2 from operand 1, store in
  526.                        destination. Valid if op1 and op2 are both unsigned 
  527.                        or both 2's complement. Affects N,Z,C,V if S suffix
  528.                        used.
  529.  
  530. SBC <dest>,<op1>,<op2> Subtract with carry; ie dest=op1-op2-NOT(carry).
  531.                        Affects N,Z,C,V if S suffix used.
  532.  
  533. RSB <dest>,<op1>,<op2> Subtract op1 from op2, so shift ops can be done on
  534.                        op2. Affects N,Z,C,V.
  535.  
  536. RSC <dest>,<op1>,<op2> dest=op2-op1-NOT(carry). Affects N,Z,C,V.
  537.  
  538. CMP <op1>,<op2>        Reflect notional result of op1-op2 in N,Z,C,V flags. 
  539.                        S suffix is implicitly assumed.
  540.  
  541. CMN <op1>,<op2>        Reflect notional result of op1-(-op2). Note not 
  542.                        NOT(op2)! Sets Z if op1=op2. Affects N,Z,C,V. S suffix
  543.                        implicitly assumed.
  544.  
  545. AND <dest>,<op1>,<op2> dest=op1 AND op2. Affects N,Z.
  546.  
  547. ORR <dest>,<op1>,<op2> dest=op1 OR op2. Affects N,Z.
  548.  
  549. EOR <dest>,<op1>,<op2> dest=op1 EOR op2. Affects N,Z.
  550.  
  551. BIC <dest>,<op1>,<op2> dest=op1 AND (NOT (op2)). If we take op1 and treat
  552.                        op2 as a mask, a set bit in op2 will cause the
  553.                        corresponding bit in op1 to clear. Perform for all 32
  554.                        bits, then store the modified op1 in dest. Affects
  555.                        N,Z.
  556.  
  557. TST <op1>,<op2>        Bitwise notional AND of op1 and op2. Either op can be
  558.                        the bit mask; Z sets if the a bit set in the mask is
  559.                        set in the op. Affects N,Z. S suffix is implicitly
  560.                        assumed.
  561.  
  562. TEQ <op1>,<op2>        Notional bitwise OR, used to test equivalence.   
  563.                        Affects N,Z. S suffix implicitly assumed.
  564.  
  565. MUL <dest>,<op1>,<op2> dest=op1*op2. Restrictions: op1 and op2 must be simple
  566.                        registers, must be different, and must not be R15. N 
  567.                        and Z reflect the result, V is unchanged and C becomes
  568.                        ill-defined.
  569.  
  570. MLA <dest>,<op1>,<op2>,<op3> dest=(op1*op2)+op3. Useful for running totals.
  571.                              Permissible for dest to be the same as op3. Flags
  572.                              set as with MUL.
  573.  
  574. Block Data Transfer
  575. -------------------
  576.  
  577. LDM<options><base>{!},<list> ]
  578.                              ]  See "Stack Implementation" section
  579. STM<options><base>{!},<list> ]
  580.  
  581. Miscellany
  582. ----------
  583.  
  584. B <addr>       Direct branch to routine at addr; wasteful on pipeline.
  585.  
  586. BL <addr>      Copies pipeline-corrected PC to R14 and branches to routine at 
  587.                addr; return may be affected by MOV PC,R14 at end of subroutine.
  588.  
  589. SWI <expr>     Executes an SWI routine. See available list of routines.
  590.  
  591. Conditional Execution Suffixes
  592. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  593. All ARM assembler operations may be executed conditionally; the conditions are
  594. defined by a two-letter extension appended to the mnemonic to be executed
  595. subject to the conditions. In the table below, "flag status" refers to the
  596. conditions required for a command extended by the suffix to be executed.
  597.  
  598. Suffix  Literal Meaning       Flag Status             Comments
  599. ------  ---------------       -----------             --------
  600.  
  601.   EQ      Equal                  Z set          eg from CMPS with equal args
  602.  
  603.   NE      Not equal              Z clear        
  604.  
  605.   VS      Overflow set           V set
  606.  
  607.   VC      Overflow clear         V clear
  608.  
  609.   AL      Always                                Default, implicit
  610.  
  611.   NV      Never                                 Only workable in a large chunk 
  612.                                                 of Boolean; use now prohibited
  613.                                                 by Acorn
  614.  
  615.   HI      Higher (unsigned)      C set AND      arg1>arg2 ]
  616.                                   Z clear                 ]Use after a CMP or
  617.                                                           ]CPN
  618.   LS      Less than or same as   C clear OR Z   arg1<=arg2]
  619.           (unsigned)                set
  620.  
  621.   PL      Plus                   N clear        Zero is positive
  622.  
  623.   MI      Minus                  N set          Bit 31 of prev. result is 1
  624.  
  625.   CS      Carry set              C set          prev. instruction carried or
  626.                                                 overflowed
  627.   
  628.   CC      Carry clear            C clear
  629.  
  630.   GE      Greater than or equal (N set AND V clear)OR(N clear AND V clear)
  631.           (signed)
  632.  
  633.   LT      Less than (signed)    (N set AND V clear)OR(N clear AND V set)
  634.  
  635.   GT      Greater than (signed) ((N set AND V set)OR(N clear AND V clear))AND
  636.                                 Z clear
  637.  
  638.   LE      Less than or equal    ((N set AND V clear)OR(N clear AND V set))AND
  639.           (signed)              Z clear
  640.  
  641.  For signed suffixes, signing convention is 2's complement (ie NOT and add 1)
  642.  
  643. Other Mnemonic Extenders
  644. ------------------------
  645.  
  646.  B        Byte flag            Operator only operates on 8-bit operand; word
  647.                                alignment not necessary 
  648.  S        Status flag          Reflect result of operation in status flags.
  649.                                Beware; this is implicit in 6502, but must be
  650.                                specified in ARM unless otherwise stated (above)
  651.  P        Pipeline suspend     Disable pipelining to allow writing to R15;
  652.                                result of operand (usually TEQ) is written back
  653.                               _directly_ to status bits (26-31) of R15. 
  654.  
  655. Stack Implementation
  656. --------------------
  657.                      Stacks are most easily implemented using STM and LDM. Both
  658. of these instructions take the syntax
  659.  
  660.  <mnemonic><extender> <base>{!},<list>
  661.  
  662. where <mnemonic> is either STM (store multiple)
  663.                         or LDM (load multiple)
  664.  
  665.       <extender> is        I Increment address after storing each register
  666.                            D Decrement address after storing each register
  667.                            A Modify address after storing each register
  668.                            B Modify address before storing each register
  669.                    
  670.                       FA     Operate on full ascending stack
  671.                       FD     Operate on full descending stack
  672.                       EA     Operate on empty ascending stack
  673.                       ED     Operate on empty descending stack
  674.  
  675.       <base> is the address of the stack pointer; usually held in R13
  676.  
  677.         {!}  specifies write-back of the modified address to the stack pointer
  678.              (to prevent data being accidentally overwritten)
  679.  
  680.       <list> is a comma-separated list of arguments, enclosed in braces {}, to
  681.              be pushed to the stack. First entry in the list goes on first.
  682.  
  683.  The FA-ED extenders save the problem of having to reverse the usual extenders
  684. when pushing and pulling; to pull from a stack which had been pushed to using
  685. STMIA, it was necessary to use LDMDB. Now we can just use STMEA and LDMEA, for
  686. example.
  687.  
  688. Floating Point Model
  689. ~~~~~~~~~~~~~~~~~~~
  690.                     The following instructions are _NOT_ included in the
  691. standard ARM BASIC assembler; however, for those of you who may have
  692. cross-assemblers or the Acorn Object Assembler, or are prepared to hand-code
  693. the instructions in hex, here goes.
  694.  
  695.  The FP model complies with the IEEE specification, and provides a further 8
  696. registers, F0-F7. Numbers may be stored in the following 4 formats:
  697.  
  698. IEEE Single Precision (S)
  699.                  32 bits: 1 sign bit
  700.                           23 bit mantissa
  701.                           8 bit exponent
  702.  
  703. IEEE Double Precision (D)
  704.    64 bits (double word): 1 sign bit
  705.                           52 bit mantissa
  706.                           11 bit exponent
  707.  
  708. Double Extended Prec. (E)
  709.    96 bits (triple word): 1 sign bit
  710.                           64 bit mantissa
  711.                           15 bit exponent
  712.                           16 bits unused
  713.  
  714. Packed decimal BCD    (P)
  715.    96 bits (triple word): 1 sign digit
  716.                           19 digit mantissa
  717.                           4 digit exponent
  718.  
  719.  The FP status register has separate flags for Overflow, Underflow, Division by
  720. Zero, Inexact result and Invalid operation; a subset of the flags indicating
  721. these is copied into the ARM status register (R15) by the co-processor
  722. interface.
  723.  
  724.  In brief, the instructions are:
  725.  
  726. LDF<suffix><precision> <reg>,<address>
  727. STF<suffix><precision> <reg>,<address>
  728. where:
  729.  
  730. <suffix> is one of S,D,F,P
  731. <reg> is F0-F7
  732. <Address> is either [Rn]{,#offset} or [Rn,#offset]{!}
  733.           and is defined as an offset from the ARM base register specified; the
  734.           offset is in the range -1020 to +1020. The offset is added to the
  735.           base register when write-back {!} is specified with pre-indexed
  736.           addressing, and is always added with post-indexed.
  737.  
  738.  
  739. FLT       Change integer to FP
  740. FIX       Change FP to integer
  741. WPS       Write FP status to FP status reg.
  742. RFS       Read FP status from FP status reg.
  743. WFC       Write FP control   ] Processor SVC mode only
  744. RFC       Read FP control    ]
  745.  
  746. This set uses the general form
  747.  
  748. eg  FLT<suffix><precision>{rounding mode} <Freg>,(<reg> #value)
  749.  
  750. Unary Operations
  751. ----------------
  752.  
  753. Command format:
  754.  
  755. <unaryop><suffix><precision>{rounding mode} <Fdest>,(<Fop> #val)
  756.  
  757.  Mnemonic      Effect               Calculation
  758.  --------      ------               -----------
  759.    MVF         Move                   Fdest=Fop
  760.    MNF         Move negated           Fdest=-Fop
  761.    ABS         Absolute value         Fdest=ABS(Fop)
  762.    RND         Round to integer       Fdest=INT(Fop)
  763.    SQT         Square root            Fdest=SQR(Fop)
  764.    LOG         Log to base #10d       Fdest=LOG(Fop)
  765.    LGN         Natural log            Fdest=LN(Fop)
  766.    EXP         Exponent               Fdest=EXP(Fop)
  767.    SIN         Obvious                Fdest=SIN(Fop)
  768.    COS         Equally obvious        Fdest=COS(Fop)
  769.    TAN         Ditto                  Fdest=TAN(Fop)
  770.    ASN         ]                      Fdest=ASN(Fop)
  771.    ACS         ] (Obvious)^-1         Fdest=ACS(Fop)
  772.    ATN         ]                      Fdest=ATN(Fop)
  773.  
  774. Binary Operations
  775. -----------------
  776.                 
  777. Command format:  
  778.  
  779. <binaryop><suffix><precision>{rounding mode} <Fdest>,<Fop1>,(<Fop2> #value)
  780.  
  781.  Mnemonic      Effect               Calculation
  782.  --------      ------               -----------
  783.  
  784.    ADF         Add                    Fdest=Fop1+Fop2
  785.    MUF         Multiply               Fdest=Fop1*Fop2
  786.    SUB         subtract               Fdest=Fop1-Fop2
  787.    RSF         Reverse subtract       Fdest=Fop2-Fop1
  788.    DVF         Divide                 Fdest=Fop1/Fop2
  789.    RDF         Reverse divide         Fdest=Fop2/Fop1
  790.    POW         Raise to power         Fdest=Fop1^Fop2
  791.    RPW         Reverse raise...       Fdest=Fop2^Fop1
  792.    RMF         Remainder              Fdest=Fop1 MOD Fop2
  793.    FML         Fast multiply          Fdest=Fop1*Fop2
  794.    FDV         Fast divide            Fdest=Fop1/Fop2
  795.    FRD         Fast reverse divide    Fdest=Fop2/Fop1
  796.    POL         Polar angle            Fdest=angle between Fop1 and Fop2
  797.  
  798.  Note that the "fast" instructionsonly produce single-figure accuracy,
  799. regardless of the precision specified in the mnemonic.
  800.  
  801. System Memory Map
  802. ~~~~~~~~~~~~~~~~
  803.  Please note that this is the provisional version of the memory map details;
  804. the master table (at the top) is for an A540/R200 series machine (the addresses
  805. are the same on the entire Archimedes range, but there are no Acorn-endorsed
  806. RAM expansions to take you over the 4Mb), whereas the logically-mapped RAM area
  807. was assigned from much hacking on an A310. The addresses in this latter table
  808. are, of course, affected directly by machine configuration, and the data thus
  809. given is merely representative of the setup of that machine at that time.
  810.  
  811.  Read           Write               Addr
  812.  ----           -----               ----
  813.  
  814. --------------------------------   3FFFFFF
  815. ROM (high) | Logical to Physical
  816.            | address translator                     -------------------
  817. --------------------------------   3800000        /  4Mb daughter card
  818. ROM (low)  | DMA Address                         /   3rd slot MEMC (z)
  819.            | generators                         /   -------------------
  820.            |--------------------   3600000     /     4Mb daughter card
  821.            | Video Controller                 /      2nd slot MEMC (y)
  822. --------------------------------   3400000   /      -------------------
  823.    Input/Output Controllers                 /        4Mb daughter card
  824. --------------------------------   3000000 /         Ist slot MEMC (x)
  825.     Physically mapped RAM                           -------------------
  826. --------------------------------   2000000 \         4Mb on motherboard
  827.     Logically mapped RAM                    \         Master MEMC (w)
  828. --------------------------------   0000000   \----- -------------------
  829.      0  ----------------------             \   
  830.              ARM Reset         \            \    
  831.      4  ----------------------  \            \    
  832.         Undefined instruction    \            \    
  833.      8  ----------------------    \            \
  834.         Software Interrupt (SWI)   \            \
  835.      C  ----------------------      \ 0  ---------------------------------
  836.           Abort (pre-fetch)              Bootstrap and hardware exception
  837.     10  ----------------------                        vectors
  838.             Abort (data)           / 1C  ---------------------------------     
  839.     14  ----------------------    /         System and BASIC workspace
  840.           Address exception      / 8000  ---------------------------------
  841.     18  ----------------------  /                Application RAM               
  842.               IRQ_Vec          /        (RISC OS Desktop Tasks map to here)    
  843.     1C  --------------------- /   A7FFF  ---------------------------------  
  844.               FIQ_Vec        /               Unassigned address space
  845.         ---------------------   1800000  ---------------------------------
  846.                                            RAM-based Relocatable Modules       
  847.                                        (incl. those downloaded from podules)  
  848.                                           Font definitions grow downwards      
  849.                                 1825FFF  ---------------------------------
  850.                                              Unassigned address space
  851.                                 1C00000  ---------------------------------
  852.                                                    System Heap                 
  853.                                 1C03FFF  ---------------------------------
  854.                                              Unassigned address space
  855.                                 1F00000  ---------------------------------
  856.                                          Cursor data and Desktop scratchpad    
  857.                                 1F07FFF  ---------------------------------
  858.                                              Unassigned address space
  859.                                 1FEC000  ---------------------------------
  860.                                                    Screen RAM                  
  861.                                                 (grows downwards)              
  862.                                 1FFFFFF  ---------------------------------
  863.      
  864.  In addition, the RAM disk maps in at &1000000.
  865. IOC
  866. ---
  867. The I/O controller is mapped into RAM from &3000000 to &3400000, and _ALL_ I/O
  868. devices are also thus memory mapped. The chip has 4 operation modes; sync,
  869. fast, medium and slow. It therefore follows that a good many operations will be
  870. duplicated in different modes. A (necessarily incomplete) list of some device
  871. entry points follows:
  872.  
  873.              Device             Addr       
  874.              ------             ----
  875.  
  876.                Serial         &3200004       
  877.      Parallel printer         &3250010 (slow mode)
  878. Podule IRQ (mask reg)         &3360000
  879.  
  880.  IOC base (slow mode)         &3250000
  881.  
  882. NB
  883. -- When writing to a device via IOC, the data must be on the top 16 bits of the
  884. data word. Data to be read appears on the bottom 16 bits.
  885.  
  886. -----------------------------------------------------------------------------
  887.  Needless to say, there could be much, much more included here. Please let me
  888. know what you'd like to see covered; however, bear in mind that this is meant
  889. to be a brief pocket guide, not the PRM set!   
  890.  
  891. *LIB
  892. ~~~
  893. Further texts now available for perusal from your friendly neighbourhood SIG
  894. Leader:
  895.  
  896. Archimedes Operating System: A. & N. van Someren, Dabs Press
  897. ---------------------------
  898.   Some rather good internal stuff here. However, stops short of direct chip
  899. addressing; I need to get the ARM data book. Good section on MEMC, though,
  900. and probably the de-facto guide to writing modules. Interesting sections on
  901. the sound system.
  902.  
  903. Acorn A540/R200 Technical Reference Manual
  904. ------------------------------------------
  905.   If you've got a 540 or R series machine, this should be top of your "must
  906. read" list. Much stuff in the first couple of sections which covers the entire
  907. Archimedes range, however. Also covers the SCSI podule, and has exhaustive
  908. info (down to timing diagrams) on the Ethernet podules. Includes blueprints!
  909.  
  910.  Further plans are to get hold of the VLSI ARM Data Book (I have the ISBN),
  911. and the full schematic and timing diagrams to the backplane (Acorn will supply
  912. free;strange they weren't included in the Tech Ref). Also, I don't think my
  913. willpower can stop me delving into my bank account for a 3.1 PRM set...
  914.  
  915. *SHUTDOWN
  916. ~~~~~~~~
  917. Well, another issue; don't worry, I don't envisage another one being this big
  918. for a _LONG_ time (although I'm perfectly willing to lay this down as a
  919. challenge to those of you who want to contribute articles)! I'm delighted to
  920. see some reader contributions at this early stage in EurekA's life; having had
  921. experience last year editing Cassini (the HP48 SIG Newsletter), where it turned
  922. out that, with the exception of one piece of feedback the entire year's
  923. newsletters were written by Tony Duell and myself, I think we may well make a
  924. real success out of this newsletter. Remember, Cassini went international
  925. within six months of the first issue..
  926.  
  927. Meantime, editor keels over....<thud>
  928.  
  929.  
  930.