home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / system / a249_1 / VIDCClock < prev   
Text File  |  1992-03-01  |  4KB  |  120 lines

  1. ; > VIDCClock
  2.  
  3. ; This software is Public Domain. It may be altered, included with other
  4. ; things, distributed in either source or binary form (or both), sold for
  5. ; profit, or whatever. The only condition is that you must acknowledge me
  6. ; (Owen Smith) as the original author of this code in anything including
  7. ; this code, regardless of whether it is source or binary, original or
  8. ; modified code.
  9.  
  10. ; Change List
  11.  
  12. ; 24 Apr 91  0.01  OSS  Module created.
  13.  
  14. ; 14 May 91  0.02  OSS  Made input list static data - smaller and faster.
  15.  
  16. ; 07 Jul 91  0.03  OSS  Changed name from VIDCSupprt to VIDCClock.
  17.  
  18. ; 22 Oct 91  0.04  OSS  Put NOP in after TEQP.
  19.  
  20. ; --------------------------------------------------------------------------
  21.  
  22.         GET     Hdr:ListOpts
  23.         GET     Hdr:Macros
  24.         GET     Hdr:System
  25.         GET     Hdr:ModHand
  26.         GET     Hdr:Services
  27.         GET     Hdr:Proc
  28.         GET     Hdr:VduExt
  29.         GET     Hdr:NewSpace
  30.  
  31. ; --------------------------------------------------------------------------
  32.  
  33. module_base
  34.         DCD     0                               ; No start entry
  35.         DCD     init_entry      - module_base   ; Initialisation entry
  36.         DCD     0                               ; No die entry
  37.         DCD     service_entry   - module_base   ; Service entry
  38.         DCD     title_string    - module_base   ; Title string
  39.         DCD     help_string     - module_base   ; Help string
  40.         DCD     0                               ; No * commands
  41.         DCD     0                               ; No SWI chunk
  42.  
  43. ; --------------------------------------------------------------------------
  44.  
  45. help_string
  46.         DCB     "VIDC Clock", 9, "0.04 (22 Oct 1991)"
  47.         DCB     " for AtomWide Turbo VIDC", 0
  48.  
  49. ; --------------------------------------------------------------------------
  50.  
  51. title_string
  52.         DCB     "VIDCClock", 0
  53.  
  54. ; --------------------------------------------------------------------------
  55.  
  56. service_entry ROUT
  57.         TEQ     r1, #Service_ModeChange
  58.         TEQNE   r1, #Service_Reset              ; Not actually necessary.
  59.         MOVNE   pc, lr                          ; Some other service call.
  60.  
  61. ; ** Drop through **
  62.  
  63. init_entry ENTRY "r0-r1", 4                     ; 4 bytes of stack.
  64.         ADR     r0, vidc_clock_speed_list       ; Input list is static data.
  65.         MOV     r1, sp                          ; Output list is on stack.
  66.         SWI     XOS_ReadVduVariables
  67.         EXIT    VS
  68.  
  69.         LDR     r1, [sp]                        ; Get speed (25175 etc.).
  70.         LDR     r0, =30000
  71.         CMP     r1, r0
  72.         MOVHS   r0, #1                          ; If >= 30000, go for 36MHz.
  73.         MOVLO   r0, #0                          ; Otherwise, go for 24 MHz.
  74.         BL      atomwide_on_off
  75.         EXIT
  76.  
  77. vidc_clock_speed_list
  78.         DCD     VduExt_VIDCClockSpeed
  79.         DCD     -1
  80.  
  81. ; --------------------------------------------------------------------------
  82.  
  83. ; Just because I am paranoid, a couple of assertions to make sure that things
  84. ; don't move around. Admittedly LatchB is unlikely to move (it's hardware!)
  85. ; but someone might take it into their heads to move the soft copy for some
  86. ; strange reason. Of course, if there was a SWI to read/write LatchB there
  87. ; wouldn't be a problem.
  88.  
  89.  ASSERT LatchBSoftCopy  = &105
  90.  ASSERT LatchB          = &03350018
  91.  
  92. ; --------------------------------------------------------------------------
  93.  
  94. ; Entry: r0 = 0 Set clock speed to 24 MHz
  95. ;        r0 = 1 Set clock speed to 36 MHz
  96.  
  97. ; Exit:  All registers preserved
  98.  
  99. atomwide_on_off ENTRY "r0-r5"
  100.         LDR     r3, =LatchBSoftCopy             ; Zero page location
  101.         LDR     r4, =LatchB                     ; Address for speed selection
  102.  
  103.         MOV     r2, pc
  104.         ORR     r1, r2, #(I_bit :OR: F_bit)
  105.         TEQP    r1, #0                          ; Disable IRQs and FIQs
  106.  
  107.         LDRB    r5, [r3, #0]                    ; Get zero page soft copy
  108.         BIC     r5, r5, #&20                    ; Clear existing bit value
  109.         ORR     r5, r5, r0, LSL #5              ; Set bit for on/off
  110.         STRB    r5, [r3, #0]                    ; Store zero page soft copy
  111.         STRB    r5, [r4, #0]                    ; Write new LatchB setting
  112.  
  113.         TEQP    r2, #0                          ; Restore IRQ and FIQ status
  114.         NOP                                     ; EXIT uses r13
  115.         EXIT
  116.  
  117. ; --------------------------------------------------------------------------
  118.  
  119.         END
  120.