OpenCores
URL https://opencores.org/ocsvn/risc5x/risc5x/trunk

Subversion Repositories risc5x

[/] [risc5x/] [trunk/] [jumptest.asm] - Diff between revs 2 and 3

Show entire file | Details | Blame | View Log

Rev 2 Rev 3
?rev1line?
?rev2line?
 
;
 
        LIST    p=16C58 ; PIC16C58 is the target processor
 
 
 
 
 
;
 
; Core Sanity Test
 
;
 
; JUMPTEST.ASM
 
;
 
; test some jumps
 
; NEW in rev 1.1, test indirect addressing
 
; test some inc & decs
 
; sit in loop multiplying port A with a constant
 
; output 16 bit result on ports C & B
 
;
 
 
 
CARRY   equ     H'00'   ; Carry bit in STATUS register
 
DC      equ     H'01'   ; DC    bit in STATUS register
 
ZERO    equ     H'02'   ; Zero  bit in STATUS register
 
W       equ     H'00'   ; W indicator for many instruction (not the address!)
 
 
 
INDF    equ     H'00'   ; Magic register that uses INDIRECT register
 
TIMER0  equ     H'01'   ; Timer register
 
PC      equ     H'02'   ; PC
 
STATUS  equ     H'03'   ; STATUS register F3
 
FSR     equ     H'04'   ; INDIRECT Pointer Register
 
porta   equ     H'05'   ; I/O register F5
 
portb   equ     H'06'   ; I/O register F6
 
portc   equ     H'07'   ; I/O register F7
 
x       equ     H'09'   ; scratch
 
y       equ     H'0A'   ; scratch
 
rh      equ     H'0B'   ; result h
 
rl      equ     H'0C'   ; result l
 
 
 
mult    MACRO   bit
 
        btfsc   y,bit
 
        addwf   rh,1
 
        rrf     rh,1
 
        rrf     rl,1
 
        ENDM
 
 
 
start:  movlw   H'ff'
 
        tris    porta   ; PORTA is Input
 
        clrw
 
        tris    portb   ; PORTB is Output
 
        tris    portc   ; PORTC is Output
 
        movwf   portb   ; PORTB <= 00
 
 
 
        movlw   h'0B'
 
        movwf   PC      ; move to pc (jump1)
 
 
 
        movlw   h'F0'   ; fail 0
 
        movwf   portb
 
        goto fail
 
 
 
jump1:  movlw   h'05'
 
        addwf   PC,f   ; jump forward to jump2
 
        movlw   h'F1'   ; fail 1
 
        movwf   portb
 
        goto fail
 
 
 
jump3:  goto    jump4   ; continue
 
        nop
 
 
 
jump2:  movlw   h'04'
 
        subwf   PC, f   ; jump back to jump 3
 
 
 
        movlw   h'F2'   ; fail 2
 
        movwf   portb
 
        goto fail
 
 
 
jump4:
 
        movlw   h'10'   ; set locations 10-1F to xFF
 
        movwf   FSR
 
        movlw   h'ff'
 
clrlp:  movwf   INDF
 
        incf    FSR,F
 
        btfsc   FSR,4
 
        goto clrlp
 
 
 
        movlw   h'10'
 
        movwf   x
 
        movlw   h'20'
 
        movwf   y
 
 
 
        movlw   x
 
        movwf   FSR     ; point FSR at x
 
 
 
        movf    FSR,w
 
        xorlw   h'89'   ; check its x (note bit 7 set always)
 
        btfss   STATUS,ZERO
 
        goto    fail
 
        movf    INDF,w
 
        xorlw   h'10'   ; check its 10
 
        btfss   STATUS,ZERO
 
        goto    fail
 
 
 
        movlw   h'15'   ; write 15 to x using INDF
 
        movwf   INDF
 
        movf    x,w     ; read x
 
        xorlw   h'15'   ; check its 15
 
        btfss   STATUS,ZERO
 
        goto    fail
 
 
 
        incf    FSR,F
 
        movf    INDF,w
 
        xorlw   h'20'   ; check its 20
 
        btfss   STATUS,ZERO
 
        goto    fail
 
 
 
        movlw   h'00'
 
        movwf   FSR
 
        movlw   h'A5'   ; paranoid !
 
        movf    INDF,w  ; reading INDR itself should = 0
 
        xorlw   h'00'   ; check
 
        btfss   STATUS,ZERO
 
        goto    fail
 
 
 
        ; check banking
 
        ; locations 20-2F, 40-4F, 60-6F all map to 0-0F
 
        ; locations 10-1F, 30-3F, 50-5F, 70-7F are real
 
 
 
 
 
        movlw   h'00'
 
        movwf   FSR     ; set bank 0
 
        movlw   h'1F'
 
        movwf   h'1F'
 
 
 
        movlw   h'20'
 
        movwf   FSR     ; set bank 1
 
        movlw   h'3F'
 
        movwf   h'1F'
 
 
 
        movlw   h'40'
 
        movwf   FSR     ; set bank 2
 
        movlw   h'5F'
 
        movwf   h'1F'
 
 
 
        movlw   h'60'
 
        movwf   FSR     ; set bank 3
 
        movlw   h'7F'
 
        movwf   h'1F'
 
        ; check
 
 
 
        movlw   h'00'
 
        movwf   FSR     ; set bank 0
 
        movf    h'1F',w
 
        xorlw   h'1F'
 
        btfss   STATUS,ZERO
 
        goto    fail
 
 
 
        movlw   h'20'
 
        movwf   FSR     ; set bank 1
 
        movf    h'1F',w
 
        xorlw   h'3F'
 
        btfss   STATUS,ZERO
 
        goto    fail
 
 
 
        movlw   h'40'
 
        movwf   FSR     ; set bank 2
 
        movf    h'1F',w
 
        xorlw   h'5F'
 
        btfss   STATUS,ZERO
 
        goto    fail
 
 
 
        movlw   h'60'
 
        movwf   FSR     ; set bank 3
 
        movf    h'1F',w
 
        xorlw   h'7F'
 
        btfss   STATUS,ZERO
 
        goto    fail
 
 
 
        movlw   h'00'
 
        movwf   FSR     ; set bank 0
 
 
 
        movlw   h'45'
 
        movwf   h'0F'
 
 
 
        movlw   h'60'
 
        movwf   FSR     ; set bank 3
 
        movlw   h'54'
 
        movwf   h'0F'
 
 
 
        movlw   h'40'
 
        movwf   FSR     ; set bank 2
 
        movf    h'0f',w ; w should contain 54
 
 
 
        xorlw   h'54'
 
        btfsc   STATUS,ZERO
 
        goto test1
 
 
 
        movlw   h'F3'   ; fail 3
 
        movwf   portb
 
 
 
        goto fail
 
 
 
test1:  movlw   h'00'
 
        movwf   FSR     ; set bank 0
 
        movlw   h'04'   ; w <= 04
 
        movwf   x
 
        decf    x,f     ; x <= 03
 
        decf    x,f     ; x <= 02
 
        decf    x,f     ; x <= 01
 
        decf    x,f     ; x <= 00
 
        decf    x,f     ; x <= FF
 
        movf    x,w
 
        xorlw   h'FF'   ; does w = ff ?
 
        btfss   STATUS,ZERO ; skip if clear
 
        goto    fail
 
        incf    x,f     ; x <= 00
 
        incf    x,f     ; x <= 01
 
        movf    x,w
 
        xorlw   h'01'   ; does w = 01
 
        btfss   STATUS,ZERO
 
        goto    fail
 
 
 
        ; test logic
 
 
 
        clrf    x       ; x <= 00
 
        movlw   h'a5'
 
        iorwf   x,f     ; x <= a5
 
        swapf   x,f     ; x <= 5a
 
        movlw   h'f0'
 
        andwf   x,f     ; x <= 50
 
        comf    x,f     ; x <= af
 
        movlw   h'5a'
 
        xorwf   x,f     ; x <= f5
 
 
 
        ;check
 
        movfw   x
 
        xorlw   h'f5'
 
        btfsc   STATUS,ZERO
 
        goto test2
 
        movlw   h'F4'   ; fail 4
 
        movwf   portb
 
        goto fail
 
 
 
test2:  movlw   h'23'
 
        movwf   x       ; x <= 23
 
        movlw   h'e1'   ; w <= e1
 
        addwf   x,f     ; x <= 04
 
        btfss   STATUS,CARRY
 
        goto    fail    ; carry should be set
 
        movlw   h'02'   ; w <= 02
 
        subwf   x,f     ; x <= 02
 
        btfss   STATUS,CARRY
 
        goto    fail    ; borrow should be clear
 
 
 
        movlw   h'34'   ; w <= 34
 
        subwf   x,f     ; x <= ce
 
        btfsc   STATUS,CARRY
 
        goto    fail    ; borrow should be set
 
 
 
        movf    x,w
 
        xorlw   h'CE'
 
        btfss   STATUS,ZERO
 
        goto    fail    ; x /= ce
 
 
 
test3:  movlw   h'34'   ; test dc flag
 
        movwf   x
 
        movlw   h'0F'
 
        addwf   x,f     ; x <= 43
 
        btfsc   STATUS,CARRY
 
        goto    fail    ; carry should be clear
 
        btfss   STATUS,DC
 
        goto    fail    ; dc should be set
 
        movlw   h'01'
 
        subwf   x,f     ; x <= 42
 
        btfss   STATUS,CARRY
 
        goto    fail    ; borrow should be clear
 
        btfss   STATUS,DC
 
        goto    fail    ; dc borrow should be clear
 
        movlw   h'FF'
 
        subwf   x,f
 
        btfsc   STATUS,CARRY
 
        goto    fail    ; borrow should be set
 
        btfsc  STATUS,DC
 
        goto    fail    ; dc borrow should be set
 
 
 
        movf    x,w
 
        xorlw   h'43'   ; final check
 
        btfss   STATUS,ZERO
 
        goto    fail    ; x /= 43
 
        movlw   h'E0'   ; ok
 
        movwf   portb
 
 
 
loop1:                  ; mult x by y
 
        movf    porta,W
 
        movwf   x
 
        movlw   h'23'
 
        movwf   y
 
 
 
        clrf    rh
 
        clrf    rl
 
        movf    x,w
 
        bcf     STATUS,CARRY
 
        mult    0
 
        mult    1
 
        mult    2
 
        mult    3
 
        mult    4
 
        mult    5
 
        mult    6
 
        mult    7
 
 
 
        movf    rl,w
 
        movwf   portb   ; on port b low result
 
        movf    rh,w
 
        movwf   portc   ; on port c high result
 
        goto    loop1
 
 
 
fail:   goto    fail
 
        end

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.