⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dac.lis

📁 用VC编辑的一个MD5算法
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0080           bHIGHBITS: equ 80h              ; Setting for FCap and ClockPhase
 00C0           bHBMASK:   equ C0h              ; Mask for FCap and ClockPhase
 0000           
 0000           
 0000           ;;---------------------------
 0000                   macro Stall
 0000           ;;---------------------------
 0000                   mov reg[ASY_CR], 1
 0000                   macro UnStall
 0000           ;;---------------------------
 0000                   mov reg[ASY_CR], 0
 0000            DAC_Start:
 0000           _DAC_Start:
 0000            DAC_SetPower:
 0000           _DAC_SetPower:
 0000 2103          and   A, bPWRMASK       ; trim input to bits of interest
 0002 4F            mov   X, SP             ; Set stack frame pointer
 0003 08            push  A
 0004               ;; read CR3 registers, modify power bits & write back
 0004 5D83          mov   A, reg[DAC_MSB_CR3]
 0006 21FC          and   a, ~bPWRMASK      ; clear old setting
 0008 2B00          or    A, [X]            ; set power in MSB register image
 000A 6083          mov   reg[DAC_MSB_CR3], A
 000C 5D93          mov   A, reg[DAC_LSB_CR3]
 000E 21FC          and   a, ~bPWRMASK      ; clear old setting
 0010 2B00          or    A, [X]            ; set power in LSB register image
 0012 6093          mov   reg[DAC_LSB_CR3], A
 0014 18            pop   A
 0015 7F            ret
 0016           
 0016           ;;---------------------------------------------------------------------------
 0016           ;; WriteBlind
 0016           ;;
 0016           ;; Modify the DAC's update value without worrying about the clocks.
 0016           ;;   Lowest overhead, but may cause glitches on the output.
 0016           ;;
 0016           ;; INPUTS: A contains the update value if data format is offset binary or
 0016           ;;   For      offset binary format: A contains the low byte; X the high byte.
 0016           ;;   For    twos complement format: A contains the low byte; X the high byte.
 0016           ;;   For two-byte sign-and-magnitude format:
 0016           ;;      A contains the LSB as 00smmmmm; X contains the MSB as 00tmmm00,
 0016           ;;      where t=s\ (the inverted sign).
 0016           ;;
 0016           ;; OUTPUTS: Analog output voltage reflects input value
 0016           ;;---------------------------------------------------------------------------
 0016            DAC_WriteBlind:
 0016           _DAC_WriteBlind:
 0016           
                  IF DAC_OFFSETBINARY
                    ;; Data is an unsigned byte value in [0..510] (511 unique values).
                    ;; Following converts it to 2's complement:
                    sub   A, iOFFSET
                    swap  A, X                  ;  A <- upper, X <- lower
                    sbb   A, 0
                    swap  A, X                  ;  A <- lower, X <- upper
                  ENDIF
                
                  IF DAC_OFFSETBINARY | DAC_TWOSCOMPLEMENT
                    swap  A, X                  ;  A <- upper, X <- lower
                    push A                      ; Save Sign on stack     1
                                                ; Sign is either FFh or 00h
                    dec  A                      ; set or clear Carry Flag
                                                ; A is now FEh(CF=0) or FFh(CF=1)
                    mov  A,X                    ; MSB: 76543210
                    jc   DAC9_WriteBlind_dont_cpl_positive_mag
                    cpl  A                      ; change negative magnitude to positive
                DAC9_WriteBlind_dont_cpl_positive_mag:
                    push A                      ; MSB: 76543210 (mag)    2
                    asr  A                      ; MSB: 77654321
                    asr  A                      ; MSB: 77765432
                    asr  A                      ; MSB: 77776543
                    and  A,bMAGMASK             ; MSB: 00076543
                    mov  X,SP
                    and  [X-2],bSIGNMASK
                    or   A,[X-2]                ; MSB: 00s76543
                    mov  X,A                    ; MSB
                
                    pop  A                      ; LSB: 76543210 (mag)    1
                    push X                      ; MSB                    2
                
                    asl  A                      ; LSB: 65432100
                    asl  A                      ; LSB: 54321000
                    and  A,bMAGMASK             ; LSB: 00021000
                    mov  X,SP
                    or   A,[X-2]                ; LSB: 00s21000
                    xor  A,bSIGNMASK            ; LSB: 00t21000
                                                ; LSB in A
                    pop  X                      ; MSB in X               1
                  ENDIF
                
                ; IF DAC_SIGNANDMAGNITUDE
 0016 2980          or   A,bHIGHBITS            ; LSB: 10t21000
 0018 4B            swap A,X                    ; LSB in X, MSB in A
 0019 2980          or   A,bHIGHBITS            ; MSB: 10s76543
 001B 6080          mov  reg[DAC_MSB_CR0],A
 001D 5B            mov  A,X                    ; LSB in A
 001E 6090          mov  reg[DAC_LSB_CR0],A
 0020 18            pop A                       ; stack cleanup          0
 0021           ; ENDIF
 0021           
 0021 7F          ret
 0022           
 0022           
 0022            DAC_WriteBlind2B:
 0022           _DAC_WriteBlind2B:
 0022 2980          or   A,bHIGHBITS            ; LSB: 10t21000
 0024 4B            swap A,X                    ; LSB in X, MSB in A
 0025 2980          or   A,bHIGHBITS            ; MSB: 10s76543
 0027 6080          mov  reg[DAC_MSB_CR0],A
 0029 5B            mov  A,X                    ; LSB in A
 002A 6090          mov  reg[DAC_LSB_CR0],A
 002C 7F            ret    
 002D           
 002D           ;;---------------------------------------------------------------------------
 002D           ;; WriteStall
 002D           ;;
 002D           ;; Modify the DAC's update value, stalling the CPU if necessary.
 002D           ;;   This routine should be used with faster analog clocks or when the
 002D           ;;   effect of prolonging interrupt latencies can be safely tolerated.
 002D           ;;
 002D           ;; INPUTS: A contains the update value if data format is offset binary or
 002D           ;;   For      offset binary format: A contains the low byte; X the high byte.
 002D           ;;   For    twos complement format: A contains the low byte; X the high byte.
 002D           ;;   For two-byte sign-and-magnitude format:
 002D           ;;      A contains the LSB as 00smmmmm; X contains the MSB as 00tmmm00,
 002D           ;;      where t=s\ (the inverted sign).
 002D           ;;
 002D           ;; OUTPUTS: Analog output voltage reflects input value
 002D           ;;---------------------------------------------------------------------------
 002D            DAC_WriteStall:
 002D           _DAC_WriteStall:
 002D           
                  IF DAC_OFFSETBINARY
                    ;; Data is an unsigned byte value in [0..510] (511 unique values).
                    ;; Following converts it to 2's complement:
                    sub   A, iOFFSET
                    swap  A, X                  ;  A <- upper, X <- lower
                    sbb   A, 0
                    swap  A, X                  ;  A <- lower, X <- upper
                  ENDIF
                
                  IF DAC_OFFSETBINARY | DAC_TWOSCOMPLEMENT
                    swap  A, X                  ;  A <- upper, X <- lower
                    push A                      ; Save Sign on stack     1
                                                ; Sign is either FFh or 00h
                    dec  A                      ; set or clear Carry Flag
                                                ; A is now FEh(CF=0) or FFh(CF=1)
                    mov  A,X                    ; MSB: 76543210
                    jc   DAC9_WriteStall_dont_cpl_positive_mag
                    cpl  A                      ; change negative magnitude to positive
                DAC9_WriteStall_dont_cpl_positive_mag:
                    push A                      ; MSB: 76543210 (mag)    2
                    asr  A                      ; MSB: 77654321
                    asr  A                      ; MSB: 77765432
                    asr  A                      ; MSB: 77776543
                    and  A,bMAGMASK             ; MSB: 00076543
                    mov  X,SP
                    and  [X-2],bSIGNMASK
                    or   A,[X-2]                ; MSB: 00s76543
                    mov  X,A                    ; MSB
                
                    pop  A                      ; LSB: 76543210 (mag)    1
                    push X                      ; MSB                    2
                
                    asl  A                      ; LSB: 65432100
                    asl  A                      ; LSB: 54321000
                    and  A,bMAGMASK             ; LSB: 00021000
                    mov  X,SP
                    or   A,[X-2]                ; LSB: 00s21000
                    xor  A,bSIGNMASK            ; LSB: 00t21000
                                                ; LSB in A
                    pop  X                      ; MSB in X               1
                  ENDIF
                
                ; IF DAC_SIGNANDMAGNITUDE
 002D 2980          or   A,bHIGHBITS            ; LSB: 10t21000
 002F 4B            swap A,X                    ; LSB in X, MSB in A
 0030 2980          or   A,bHIGHBITS            ; MSB: 10s76543
 0032 436501        or    reg[ASY_CR], ASY_CR_SYNCEN
 0035 6080          mov  reg[DAC_MSB_CR0],A
 0037 4165FE        and   reg[ASY_CR], ~ASY_CR_SYNCEN
 003A 5B            mov  A,X                    ; LSB in A
 003B 6090          mov  reg[DAC_LSB_CR0],A
 003D 18            pop A                       ; stack cleanup          0
 003E           ; ENDIF
 003E           
 003E 7F          ret
 003F           
 003F            DAC_WriteStall2B:
 003F           _DAC_WriteStall2B:
 003F 2980          or   A,bHIGHBITS            ; LSB: 10t21000
 0041 4B            swap A,X                    ; LSB in X, MSB in A
 0042 2980          or   A,bHIGHBITS            ; MSB: 10s76543
 0044 436501        or    reg[ASY_CR], ASY_CR_SYNCEN
 0047 6080          mov  reg[DAC_MSB_CR0],A
 0049 4165FE        and   reg[ASY_CR], ~ASY_CR_SYNCEN
 004C 5B            mov  A,X                    ; LSB in A
 004D 6090          mov  reg[DAC_LSB_CR0],A
 004F 7F            ret
 0050           
 0050           ;;-------------------------------------------------------------------------
 0050           ;; Stop: Cuts power to the user module.
 0050           ;; INPUTS:  None
 0050           ;; OUTPUTS: None
 0050           ;;-------------------------------------------------------------------------
 0050            DAC_Stop:
 0050           _DAC_Stop:
 0050 4183FC        and  reg[DAC_MSB_CR3], ~bPWRMASK
 0053 4193FC        and  reg[DAC_LSB_CR3], ~bPWRMASK
 0056 7F            ret
 0057           

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -