]> rtime.felk.cvut.cz Git - fpga/virtex2/plasma.git/commitdiff
Added two Plasma MIPS test applications from original project.
authorVladimir Burian <buriavl2@fel.cvut.cz>
Tue, 15 Feb 2011 19:56:24 +0000 (20:56 +0100)
committerVladimir Burian <buriavl2@fel.cvut.cz>
Tue, 15 Feb 2011 19:56:24 +0000 (20:56 +0100)
software/opcodes.asm [new file with mode: 0644]
software/test.c [new file with mode: 0644]

diff --git a/software/opcodes.asm b/software/opcodes.asm
new file mode 100644 (file)
index 0000000..1482219
--- /dev/null
@@ -0,0 +1,1108 @@
+##################################################################
+# TITLE: Opcode Tester
+# AUTHOR: Steve Rhoads (rhoadss@yahoo.com)
+# DATE CREATED: 1/10/02
+# FILENAME: opcodes.asm
+# PROJECT: Plasma CPU core
+# COPYRIGHT: Software placed into the public domain by the author.
+#    Software 'as is' without warranty.  Author liable for nothing.
+# DESCRIPTION:
+#    This assembly file tests all of the opcodes supported by the
+#    Plasma core.
+#    This test assumes that address 0x20000000 is the UART write register
+#    Successful tests will print out "A" or "AB" or "ABC" or ....
+#    Missing letters or letters out of order indicate a failure.
+##################################################################
+       .text
+       .align  2
+       .globl  entry
+       .ent    entry
+entry:
+   .set noreorder
+
+   la    $gp, _gp           #initialize stack pointer
+   la    $4, __bss_start    #$4 = .sbss_start
+   la    $5, _end           #$5 = .bss_end
+   nop                      #no stack needed
+   nop
+
+   b     StartTest
+   nop                      #nops required to place ISR at 0x3c
+   nop
+
+OS_AsmPatchValue:
+   #Code to place at address 0x3c
+   lui   $26, 0x1000
+   ori   $26, $26, 0x3c
+   jr    $26
+   nop
+
+InterruptVector:            #Address=0x3c
+   mfc0  $26,$14            #C0_EPC=14 (Exception PC)
+   jr    $26
+   add   $4,$4,5
+   
+StartTest:
+   mtc0  $0,$12             #disable interrupts
+   lui   $20,0x2000         #serial port write address
+   ori   $21,$0,'\n'        #<CR> letter
+   ori   $22,$0,'X'         #'X' letter
+   ori   $23,$0,'\r'
+   ori   $24,$0,0x0f80      #temp memory
+
+   sb    $23,0($20)
+   sb    $21,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #Patch interrupt vector to 0x1000003c
+   la    $5, OS_AsmPatchValue
+   sub   $6,$5,0x1000
+   blez  $6,NoPatch
+   
+   lw    $6, 0($5)
+   sw    $6, 0x3c($0)
+   lw    $6, 4($5)
+   sw    $6, 0x40($0)
+   lw    $6, 8($5)
+   sw    $6, 0x44($0)
+   lw    $6, 12($5)
+   sw    $6, 0x48($0)
+NoPatch:
+
+   ######################################
+   #Arithmetic Instructions
+   ######################################
+ArthmeticTest:
+   ori   $2,$0,'A'
+   sb    $2,0($20)
+   ori   $2,$0,'r'
+   sb    $2,0($20)
+   ori   $2,$0,'i'
+   sb    $2,0($20)
+   ori   $2,$0,'t'
+   sb    $2,0($20)
+   ori   $2,$0,'h'
+   sb    $2,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #a: ADD
+   ori   $2,$0,'a'
+   sb    $2,0($20)
+   ori   $3,$0,5
+   ori   $4,$0,60
+   add   $2,$3,$4
+   sb    $2,0($20)    #A
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #b: ADDI
+   ori   $2,$0,'b'
+   sb    $2,0($20)
+   ori   $4,$0,60
+   addi  $2,$4,5
+   sb    $2,0($20)    #A
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #c: ADDIU
+   ori   $2,$0,'c'
+   sb    $2,0($20)
+   ori   $4,$0,50
+   addiu $5,$4,15
+   sb    $5,0($20)    #A
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #d: ADDU
+   ori   $2,$0,'d'
+   sb    $2,0($20)
+   ori   $3,$0,5
+   ori   $4,$0,60
+   add   $2,$3,$4
+   sb    $2,0($20)    #A
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #e: DIV
+   ori   $2,$0,'e'
+   sb    $2,0($20)
+   ori   $2,$0,65*117+41
+   ori   $3,$0,117
+   div   $2,$3
+   nop
+   mflo  $4
+   sb    $4,0($20)    #A
+   mfhi  $4
+   addi  $4,$4,66-41
+   sb    $4,0($20)    #B
+   li    $2,-67*19
+   ori   $3,$0,19
+   div   $2,$3
+   nop
+   mflo  $4
+   sub   $4,$0,$4
+   sb    $4,0($20)    #C
+   ori   $2,$0,68*23
+   li    $3,-23
+   div   $2,$3
+   nop
+   mflo  $4
+   sub   $4,$0,$4
+   sb    $4,0($20)    #D
+   li    $2,-69*13
+   li    $3,-13
+   div   $2,$3
+   mflo  $4
+   sb    $4,0($20)    #E
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #f: DIVU
+   ori   $2,$0,'f'
+   sb    $2,0($20)
+   ori   $2,$0,65*13
+   ori   $3,$0,13
+   divu  $2,$3
+   nop
+   mflo  $4
+   sb    $4,0($20)    #A
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #g: MULT
+   ori   $2,$0,'g'
+   sb    $2,0($20)
+   ori   $2,$0,5
+   ori   $3,$0,13
+   mult  $2,$3
+   nop
+   mflo  $4
+   sb    $4,0($20)    #A
+   li    $2,-5
+   ori   $3,$0,13
+   mult  $2,$3
+   mfhi  $5
+   mflo  $4
+   sub   $4,$0,$4
+   addu  $4,$4,$5
+   addi  $4,$4,2
+   sb    $4,0($20)    #B
+   ori   $2,$0,5
+   li    $3,-13
+   mult  $2,$3
+   mfhi  $5
+   mflo  $4
+   sub   $4,$0,$4
+   addu  $4,$4,$5
+   addi  $4,$4,3
+   sb    $4,0($20)    #C
+   li    $2,-5
+   li    $3,-13
+   mult  $2,$3
+   mfhi  $5
+   mflo  $4
+   addu  $4,$4,$5
+   addi  $4,$4,3
+   sb    $4,0($20)    #D
+   lui   $4,0xfe98
+   ori   $4,$4,0x62e5
+   lui   $5,0x6
+   ori   $5,0x8db8
+   mult  $4,$5
+   mfhi  $6
+   addiu $7,$6,2356+1+'E' #E
+   sb    $7,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #h: MULTU
+   ori   $2,$0,'h'
+   sb    $2,0($20)
+   ori   $2,$0,5
+   ori   $3,$0,13
+   multu $2,$3
+   nop
+   mflo  $4
+   sb    $4,0($20)    #A
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #i: SLT
+   ori   $2,$0,'i'
+   sb    $2,0($20)
+   ori   $2,$0,10
+   ori   $3,$0,12
+   slt   $4,$2,$3
+   addi  $5,$4,64
+   sb    $5,0($20)    #A
+   slt   $4,$3,$2
+   addi  $5,$4,66
+   sb    $5,0($20)    #B
+   li    $2,0xfffffff0
+   slt   $4,$2,$3
+   addi  $5,$4,66
+   sb    $5,0($20)    #C
+   slt   $4,$3,$2
+   addi  $5,$4,68
+   sb    $5,0($20)    #D
+   li    $3,0xffffffff
+   slt   $4,$2,$3
+   addi  $5,$4,68
+   sb    $5,0($20)    #E
+   slt   $4,$3,$2
+   addi  $5,$4,70
+   sb    $5,0($20)    #F
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #j: SLTI
+   ori   $2,$0,'j'
+   sb    $2,0($20)
+   ori   $2,$0,10
+   slti  $4,$2,12
+   addi  $5,$4,64
+   sb    $5,0($20)    #A
+   slti  $4,$2,8
+   addi  $5,$4,66
+   sb    $5,0($20)    #B
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #k: SLTIU
+   ori   $2,$0,'k'
+   sb    $2,0($20)
+   ori   $2,$0,10
+   sltiu $4,$2,12
+   addi  $5,$4,64
+   sb    $5,0($20)    #A
+   sltiu $4,$2,8
+   addi  $5,$4,66
+   sb    $5,0($20)    #B
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #l: SLTU
+   ori   $2,$0,'l'
+   sb    $2,0($20)
+   ori   $2,$0,10
+   ori   $3,$0,12
+   slt   $4,$2,$3
+   addi  $5,$4,64
+   sb    $5,0($20)    #A
+   slt   $4,$3,$2
+   addi  $5,$4,66
+   sb    $5,0($20)    #B
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #m: SUB
+   ori   $2,$0,'m'
+   sb    $2,0($20)
+   ori   $3,$0,70
+   ori   $4,$0,5
+   sub   $2,$3,$4
+   sb    $2,0($20)    #A
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #n: SUBU
+   ori   $2,$0,'n'
+   sb    $2,0($20)
+   ori   $3,$0,70
+   ori   $4,$0,5
+   sub   $2,$3,$4
+   sb    $2,0($20)    #A
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   ######################################
+   #Branch and Jump Instructions
+   ######################################
+BranchTest:
+   ori   $2,$0,'B'
+   sb    $2,0($20)
+   ori   $2,$0,'r'
+   sb    $2,0($20)
+   ori   $2,$0,'a'
+   sb    $2,0($20)
+   ori   $2,$0,'n'
+   sb    $2,0($20)
+   ori   $2,$0,'c'
+   sb    $2,0($20)
+   ori   $2,$0,'h'
+   sb    $2,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #a: B
+   ori   $2,$0,'a'
+   sb    $2,0($20)
+   ori   $10,$0,'A'
+   ori   $11,$0,'B'
+   b     $B1
+   sb    $10,0($20)
+   sb    $22,0($20)
+$B1:
+   sb    $11,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #b: BAL
+   ori   $2,$0,'b'
+   sb    $2,0($20)
+   ori   $10,$0,'A'
+   ori   $11,$0,'B'
+   ori   $12,$0,'C'
+   ori   $13,$0,'D'
+   ori   $14,$0,'E'
+   ori   $15,$0,'X'
+   bal   $BAL1
+   sb    $10,0($20)
+   sb    $13,0($20)
+   b     $BAL2
+   sb    $14,0($20)
+   sb    $15,0($20)
+$BAL1:
+   sb    $11,0($20)
+   jr    $31
+   sb    $12,0($20)
+   sb    $22,0($20)
+$BAL2:
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #c: BEQ
+   ori   $2,$0,'c'
+   sb    $2,0($20)
+   ori   $10,$0,'A'
+   ori   $11,$0,'B'
+   ori   $12,$0,'C'
+   ori   $13,$0,'D'
+   ori   $2,$0,100
+   ori   $3,$0,123
+   ori   $4,$0,123
+   beq   $2,$3,$BEQ1
+   sb    $10,0($20)
+   sb    $11,0($20)
+   beq   $3,$4,$BEQ1
+   sb    $12,0($20)
+   sb    $22,0($20)
+$BEQ1:
+   sb    $13,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #d: BGEZ
+   ori   $2,$0,'d'
+   sb    $2,0($20)
+   ori   $10,$0,'A'
+   ori   $11,$0,'B'
+   ori   $12,$0,'C'
+   ori   $13,$0,'D'
+   or    $15,$0,'X'
+   ori   $2,$0,100
+   li    $3,0xffff1234
+   ori   $4,$0,123
+   bgez  $3,$BGEZ1
+   sb    $10,0($20)
+   sb    $11,0($20)
+   bgez  $2,$BGEZ1
+   sb    $12,0($20)
+   sb    $22,0($20)
+$BGEZ1:
+   bgez  $0,$BGEZ2
+   nop
+   sb    $15,0($20)
+$BGEZ2:
+   sb    $13,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #e: BGEZAL
+   ori   $2,$0,'e'
+   sb    $2,0($20)
+   ori   $10,$0,'A'
+   ori   $11,$0,'B'
+   ori   $12,$0,'C'
+   ori   $13,$0,'D'
+   ori   $14,$0,'E'
+   ori   $15,$0,'X'
+   li    $3,0xffff1234
+   bgezal $3,$BGEZAL1
+   nop
+   sb    $10,0($20)
+   bgezal $0,$BGEZAL1
+   nop
+   sb    $13,0($20)
+   b     $BGEZAL2
+   sb    $14,0($20)
+   sb    $15,0($20)
+$BGEZAL1:
+   sb    $11,0($20)
+   jr    $31
+   sb    $12,0($20)
+   sb    $22,0($20)
+$BGEZAL2:
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #f: BGTZ
+   ori   $2,$0,'f'
+   sb    $2,0($20)
+   ori   $10,$0,'A'
+   ori   $11,$0,'B'
+   ori   $12,$0,'C'
+   ori   $13,$0,'D'
+   ori   $2,$0,100
+   li    $3,0xffff1234
+   bgtz  $3,$BGTZ1
+   sb    $10,0($20)
+   sb    $11,0($20)
+   bgtz  $2,$BGTZ1
+   sb    $12,0($20)
+   sb    $22,0($20)
+$BGTZ1:
+   sb    $13,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #g: BLEZ
+   ori   $2,$0,'g'
+   sb    $2,0($20)
+   ori   $10,$0,'A'
+   ori   $11,$0,'B'
+   ori   $12,$0,'C'
+   ori   $13,$0,'D'
+   ori   $2,$0,100
+   li    $3,0xffff1234
+   blez  $2,$BLEZ1
+   sb    $10,0($20)
+   sb    $11,0($20)
+   blez  $3,$BLEZ1
+   sb    $12,0($20)
+   sb    $22,0($20)
+$BLEZ1:
+   blez  $0,$BLEZ2
+   nop
+   sb    $22,0($20)
+$BLEZ2:
+   sb    $13,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #h: BLTZ
+   ori   $2,$0,'h'
+   sb    $2,0($20)
+   ori   $10,$0,'A'
+   ori   $11,$0,'B'
+   ori   $12,$0,'C'
+   ori   $13,$0,'D'
+   ori   $14,$0,'E'
+   ori   $2,$0,100
+   li    $3,0xffff1234
+   ori   $4,$0,0
+   bltz  $2,$BLTZ1
+   sb    $10,0($20)
+   sb    $11,0($20)
+   bltz  $3,$BLTZ1
+   sb    $12,0($20)
+   sb    $22,0($20)
+$BLTZ1:
+   bltz  $4,$BLTZ2
+   nop
+   sb    $13,0($20)
+$BLTZ2:
+   sb    $14,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #i: BLTZAL
+   ori   $2,$0,'i'
+   sb    $2,0($20)
+   ori   $10,$0,'A'
+   ori   $11,$0,'B'
+   ori   $12,$0,'C'
+   ori   $13,$0,'D'
+   ori   $14,$0,'E'
+   ori   $15,$0,'X'
+   li    $3,0xffff1234
+   bltzal $0,$BLTZAL1
+   nop
+   sb    $10,0($20)
+   bltzal $3,$BLTZAL1
+   nop
+   sb    $13,0($20)
+   b     $BLTZAL2
+   sb    $14,0($20)
+   sb    $15,0($20)
+$BLTZAL1:
+   sb    $11,0($20)
+   jr    $31
+   sb    $12,0($20)
+   sb    $22,0($20)
+$BLTZAL2:
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #j: BNE
+   ori   $2,$0,'j'
+   sb    $2,0($20)
+   ori   $10,$0,'A'
+   ori   $11,$0,'B'
+   ori   $12,$0,'C'
+   ori   $13,$0,'D'
+   ori   $2,$0,100
+   ori   $3,$0,123
+   ori   $4,$0,123
+   bne   $3,$4,$BNE1
+   sb    $10,0($20)
+   sb    $11,0($20)
+   bne   $2,$3,$BNE1
+   sb    $12,0($20)
+   sb    $22,0($20)
+$BNE1:
+   sb    $13,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #k: J
+   ori   $2,$0,'k'
+   sb    $2,0($20)
+   ori   $10,$0,'A'
+   ori   $11,$0,'B'
+   ori   $15,$0,'X'
+   j     $J1
+   sb    $10,0($20)
+   sb    $15,0($20)
+$J1:
+   sb    $11,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #l: JAL
+   ori   $2,$0,'l'
+   sb    $2,0($20)
+   ori   $10,$0,'A'
+   ori   $11,$0,'B'
+   ori   $12,$0,'C'
+   ori   $13,$0,'D'
+   ori   $14,$0,'E'
+   ori   $15,$0,'X'
+   jal   $JAL1
+   sb    $10,0($20)
+   sb    $13,0($20)
+   b     $JAL2
+   sb    $14,0($20)
+   sb    $15,0($20)
+$JAL1:
+   sb    $11,0($20)
+   jr    $31
+   sb    $12,0($20)
+   sb    $22,0($20)
+$JAL2:
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #m: JALR
+   ori   $2,$0,'m'
+   sb    $2,0($20)
+   ori   $10,$0,'A'
+   ori   $11,$0,'B'
+   ori   $12,$0,'C'
+   ori   $13,$0,'D'
+   ori   $14,$0,'E'
+   ori   $15,$0,'X'
+   la    $3,$JALR1
+   jalr  $3
+   sb    $10,0($20)
+   sb    $13,0($20)
+   b     $JALR2
+   sb    $14,0($20)
+   sb    $15,0($20)
+$JALR1:
+   sb    $11,0($20)
+   jr    $31
+   sb    $12,0($20)
+   sb    $22,0($20)
+$JALR2:
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #n: JR
+   ori   $2,$0,'n'
+   sb    $2,0($20)
+   ori   $10,$0,'A'
+   ori   $11,$0,'B'
+   ori   $15,$0,'X'
+   la    $3,$JR1
+   jr    $3
+   sb    $10,0($20)
+   sb    $15,0($20)
+$JR1:
+   sb    $11,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #o: NOP
+   ori   $2,$0,'o'
+   sb    $2,0($20)
+   ori   $2,$0,65
+   nop
+   sb    $2,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+#   b     LoadTest
+
+BreakTest:
+   #p: BREAK
+   ori   $2,$0,'p'
+   sb    $2,0($20)
+   ori   $2,$0,'z'
+   ori   $4,$0,59
+   break 0
+   addi  $4,$4,1
+   sb    $4,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #q: SYSCALL
+   ori   $2,$0,'q'
+   sb    $2,0($20)
+   ori   $4,$0,61
+   syscall 0
+   addi  $4,$4,-1
+   sb    $4,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+
+   ######################################
+   #Load, Store, and Memory Control Instructions
+   ######################################
+LoadTest:
+   ori   $2,$0,'L'
+   sb    $2,0($20)
+   ori   $2,$0,'o'
+   sb    $2,0($20)
+   ori   $2,$0,'a'
+   sb    $2,0($20)
+   ori   $2,$0,'d'
+   sb    $2,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #a: LB
+   ori   $2,$0,'a'
+   sb    $2,0($20)
+   or    $2,$0,$24
+   li    $3,0x414243fc
+   sw    $3,16($2)
+   lb    $4,16($2)
+   sb    $4,0($20)
+   lb    $4,17($2)
+   sb    $4,0($20)
+   lb    $4,18($2)
+   sb    $4,0($20)
+   lb    $2,19($2)
+   sra   $3,$2,8
+   addi  $3,$3,0x45
+   sb    $3,0($20)
+   addi  $2,$2,0x49
+   sb    $2,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #b: LBU
+   ori   $2,$0,'b'
+   sb    $2,0($20)
+   or    $2,$0,$24
+   li    $3,0x41424344
+   sw    $3,16($2)
+   lb    $4,16($2)
+   sb    $4,0($20)
+   lb    $4,17($2)
+   sb    $4,0($20)
+   lb    $4,18($2)
+   sb    $4,0($20)
+   lb    $2,19($2)
+   sb    $2,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #c: LH
+   ori   $2,$0,'c'
+   sb    $2,0($20)
+   or    $2,$0,$24
+   li    $3,0x00410042
+   sw    $3,16($2)
+   lh    $4,16($2)
+   sb    $4,0($20)
+   lh    $2,18($2)
+   sb    $2,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #d: LHU
+   ori   $2,$0,'d'
+   sb    $2,0($20)
+   or    $2,$0,$24
+   li    $3,0x00410042
+   sw    $3,16($2)
+   lh    $4,16($2)
+   sb    $4,0($20)
+   lh    $2,18($2)
+   sb    $2,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #e: LW
+   ori   $2,$0,'e'
+   sb    $2,0($20)
+   or    $2,$0,$24
+   li    $3,'A'
+   sw    $3,16($2)
+   ori   $3,$0,0
+   lw    $2,16($2)
+   sb    $2,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #f: LWL & LWR
+   ori   $2,$0,'f'
+   sb    $2,0($20)
+   or    $2,$0,$24
+   li    $3,'A'
+   sw    $3,16($2)
+   ori   $3,$0,0
+   lwl   $2,16($2)
+   lwr   $2,16($2)
+   sb    $2,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #g: SB
+   ori   $2,$0,'g'
+   sb    $2,0($20)
+   ori   $2,$0,'A'
+   sb    $2,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #h: SH
+   ori   $2,$0,'h'
+   sb    $2,0($20)
+   or    $4,$0,$24
+   ori   $2,$0,0x4142
+   sh    $2,16($4)
+   lb    $3,16($4)
+   sb    $3,0($20)
+   lb    $2,17($4)
+   sb    $2,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #i: SW
+   ori   $2,$0,'i'
+   sb    $2,0($20)
+   or    $2,$0,$24
+   li    $3,0x41424344
+   sw    $3,16($2)
+   lb    $4,16($2)
+   sb    $4,0($20)
+   lb    $4,17($2)
+   sb    $4,0($20)
+   lb    $4,18($2)
+   sb    $4,0($20)
+   lb    $2,19($2)
+   sb    $2,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #j: SWL & SWR
+   ori   $2,$0,'j'
+   sb    $2,0($20)
+   or    $2,$0,$24
+   li    $3,0x41424344
+   swl   $3,16($2)
+   swr   $3,16($2)
+   lb    $4,16($2)
+   sb    $4,0($20)
+   lb    $4,17($2)
+   sb    $4,0($20)
+   lb    $4,18($2)
+   sb    $4,0($20)
+   lb    $2,19($2)
+   sb    $2,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+
+   ######################################
+   #Logical Instructions
+   ######################################
+LogicalTest:
+   ori   $2,$0,'L'
+   sb    $2,0($20)
+   ori   $2,$0,'o'
+   sb    $2,0($20)
+   ori   $2,$0,'g'
+   sb    $2,0($20)
+   ori   $2,$0,'i'
+   sb    $2,0($20)
+   ori   $2,$0,'c'
+   sb    $2,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #a: AND
+   ori   $2,$0,'a'
+   sb    $2,0($20)
+   ori   $2,$0,0x0741
+   ori   $3,$0,0x60f3
+   and   $4,$2,$3
+   sb    $4,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #b: ANDI
+   ori   $2,$0,'b'
+   sb    $2,0($20)
+   ori   $2,$0,0x0741
+   andi  $4,$2,0x60f3
+   sb    $4,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #c: LUI
+   ori   $2,$0,'c'
+   sb    $2,0($20)
+   lui   $2,0x41
+   srl   $3,$2,16
+   sb    $3,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #d: NOR
+   ori   $2,$0,'d'
+   sb    $2,0($20)
+   li    $2,0xf0fff08e
+   li    $3,0x0f0f0f30
+   nor   $4,$2,$3
+   sb    $4,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #e: OR
+   ori   $2,$0,'e'
+   sb    $2,0($20)
+   ori   $2,$0,0x40
+   ori   $3,$0,0x01
+   or    $4,$2,$3
+   sb    $4,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #f: ORI
+   ori   $2,$0,'f'
+   sb    $2,0($20)
+   ori   $2,$0,0x40
+   ori   $4,$2,0x01
+   sb    $4,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #g: XOR
+   ori   $2,$0,'g'
+   sb    $2,0($20)
+   ori   $2,$0,0xf043
+   ori   $3,$0,0xf002
+   xor   $4,$2,$3
+   sb    $4,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #h: XORI
+   ori   $2,$0,'h'
+   sb    $2,0($20)
+   ori   $2,$0,0xf043
+   xor   $4,$2,0xf002
+   sb    $4,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   ######################################
+   #Move Instructions
+   ######################################
+MoveTest:
+   ori   $2,$0,'M'
+   sb    $2,0($20)
+   ori   $2,$0,'o'
+   sb    $2,0($20)
+   ori   $2,$0,'v'
+   sb    $2,0($20)
+   ori   $2,$0,'e'
+   sb    $2,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #a: MFHI
+   ori   $2,$0,'a'
+   sb    $2,0($20)
+   ori   $2,$0,65
+   mthi  $2
+   mfhi  $3
+   sb    $3,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #b: MFLO
+   ori   $2,$0,'b'
+   sb    $2,0($20)
+   ori   $2,$0,65
+   mtlo  $2
+   mflo  $3
+   sb    $3,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #c: MTHI
+   ori   $2,$0,'c'
+   sb    $2,0($20)
+   ori   $2,$0,65
+   mthi  $2
+   mfhi  $3
+   sb    $3,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #d: MTLO
+   ori   $2,$0,'d'
+   sb    $2,0($20)
+   ori   $2,$0,65
+   mtlo  $2
+   mflo  $3
+   sb    $3,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+
+   ######################################
+   #Shift Instructions
+   ######################################
+ShiftTest:
+   ori   $2,$0,'S'
+   sb    $2,0($20)
+   ori   $2,$0,'h'
+   sb    $2,0($20)
+   ori   $2,$0,'i'
+   sb    $2,0($20)
+   ori   $2,$0,'f'
+   sb    $2,0($20)
+   ori   $2,$0,'t'
+   sb    $2,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #a: SLL
+   ori   $2,$0,'a'
+   sb    $2,0($20)
+   li    $2,0x40414243
+   sll   $3,$2,8
+   srl   $3,$3,24
+   sb    $3,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #b: SLLV
+   ori   $2,$0,'b'
+   sb    $2,0($20)
+   li    $2,0x40414243
+   ori   $3,$0,8
+   sllv  $3,$2,$3
+   srl   $3,$3,24
+   sb    $3,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #c: SRA
+   ori   $2,$0,'c'
+   sb    $2,0($20)
+   li    $2,0x40414243
+   sra   $3,$2,16
+   sb    $3,0($20)
+   li    $2,0x84000000
+   sra   $3,$2,25
+   sub   $3,$3,0x80
+   sb    $3,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #d: SRAV
+   ori   $2,$0,'d'
+   sb    $2,0($20)
+   li    $2,0x40414243
+   ori   $3,$0,16
+   srav  $3,$2,$3
+   sb    $3,0($20)
+   ori   $3,$0,25
+   li    $2,0x84000000
+   srav  $3,$2,$3
+   sub   $3,$3,0x80
+   sb    $3,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #e: SRL
+   ori   $2,$0,'e'
+   sb    $2,0($20)
+   li    $2,0x40414243
+   srl   $3,$2,16
+   sb    $3,0($20)
+   li    $2,0x84000000
+   srl   $3,$2,25
+   sb    $3,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+   #f: SRLV
+   ori   $2,$0,'f'
+   sb    $2,0($20)
+   li    $2,0x40414243
+   ori   $3,$0,16
+   srlv  $4,$2,$3
+   sb    $4,0($20)
+   ori   $3,$0,25
+   li    $2,0x84000000
+   srlv  $3,$2,$3
+   sb    $3,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+
+   ori   $2,$0,'D'
+   sb    $2,0($20)
+   ori   $2,$0,'o'
+   sb    $2,0($20)
+   ori   $2,$0,'n'
+   sb    $2,0($20)
+   ori   $2,$0,'e'
+   sb    $2,0($20)
+   sb    $23,0($20)
+   sb    $21,0($20)
+
+
+$DONE:
+   j     $DONE
+   nop
+
+   .set reorder
+       .end    entry
+
diff --git a/software/test.c b/software/test.c
new file mode 100644 (file)
index 0000000..d1fa625
--- /dev/null
@@ -0,0 +1,237 @@
+/*-------------------------------------------------------------------\r
+-- TITLE: Plasma CPU test code\r
+-- AUTHOR: Steve Rhoads (rhoadss@yahoo.com)\r
+-- DATE CREATED: 4/21/01\r
+-- FILENAME: test.c\r
+-- PROJECT: Plasma CPU core\r
+-- COPYRIGHT: Software placed into the public domain by the author.\r
+--    Software 'as is' without warranty.  Author liable for nothing.\r
+-- DESCRIPTION:\r
+--   The executable image of this file is used as input to the VHDL.\r
+--\r
+--   This file must not contain any global or static data since\r
+--   there isn't a loader to relocate the .data segment and since\r
+--   having static data causes the opcodes to begin at a different\r
+--   location in the resulting executable file.\r
+--\r
+--   Save the opcodes in "code.txt".\r
+--\r
+--   Testing subversion.\r
+--------------------------------------------------------------------*/\r
+#ifndef WIN32\r
+#undef putchar\r
+#define putchar(C) *(volatile unsigned char*)0x20000000=(unsigned char)(C)\r
+#endif\r
+\r
+void print_hex(unsigned long num);\r
+\r
+char text[]="Testing the Plasma core.\n";\r
+char buf[20];\r
+int xyz=0xbadbeef;\r
+int abc;\r
+\r
+char *strcpy2(char *s, const char *t)\r
+{\r
+   char *tmp=s;\r
+   while((int)(*s++=*t++)) ;\r
+   return(tmp);\r
+}\r
+\r
+static void itoa2(long n, char *s, int base, long *digits)\r
+{\r
+   long i,j,sign;\r
+   unsigned long n2;\r
+   char number[20];\r
+   for(i=0;i<15;++i) {\r
+      number[i]=' ';\r
+   }\r
+   number[15]=0;\r
+   if(n>=0||base!=10) {\r
+      sign=1;\r
+   } else {\r
+      sign=-1;\r
+   }\r
+   n2=n*sign;\r
+   for(j=14;j>=0;--j) {\r
+      i=n2%base;\r
+      n2/=base;\r
+      number[j]=i<10?'0'+i:'a'+i-10;\r
+      if(n2==0&&15-j>=*digits) break;\r
+   } \r
+   if(sign==-1) {\r
+      number[--j]='-';\r
+   }\r
+   if(*digits==0||*digits<15-j) {\r
+      strcpy2(s,&number[j]);\r
+      *digits=15-j;\r
+   } else {\r
+      strcpy2(s,&number[15-*digits]);\r
+   }\r
+}\r
+\r
+void print(long num,long base,long digits)\r
+{\r
+   char *ptr,buffer[128];\r
+   itoa2(num,buffer,base,&digits);\r
+   ptr=buffer;\r
+   while(*ptr) {\r
+      putchar(*ptr++);          /* Put the character out */\r
+      if(ptr[-1]=='\n') *--ptr='\r';\r
+   }\r
+}              \r
+\r
+void print_string(char *p)\r
+{\r
+   int i;\r
+   for(i=0;p[i];++i) {\r
+      putchar(p[i]);\r
+   }\r
+}\r
+\r
+int prime()\r
+{\r
+   int i,j;\r
+   //show all prime numbers less than 1000\r
+   for(i=3;i<1000;i+=2) {\r
+      for(j=3;j<i;j+=2) {\r
+         if(i%j==0) {\r
+            j=0;\r
+            break;\r
+         }\r
+      }\r
+      if(j) {\r
+         print(i,10,0);\r
+         putchar(' ');\r
+      }\r
+   }\r
+   putchar('\n');\r
+   return 0;\r
+}\r
+\r
+int main(void)\r
+{\r
+   long i,j;\r
+   char char_buf[16];\r
+   short short_buf[16];\r
+   long long_buf[16];\r
+\r
+#if 1 \r
+   //test shift\r
+   j=0x12345678;\r
+   for(i=0;i<32;++i) {\r
+      print_hex(j>>i);\r
+      putchar(' ');\r
+   }\r
+   putchar('\n');\r
+   j=0x92345678;\r
+   for(i=0;i<32;++i) {\r
+      print_hex(j>>i);\r
+      putchar(' ');\r
+   }\r
+   putchar('\n');\r
+   j=0x12345678;\r
+   for(i=0;i<32;++i) {\r
+      print_hex(j<<i);\r
+      putchar(' ');\r
+   }\r
+   putchar('\n');\r
+   putchar('\n');\r
+#endif\r
+  \r
+#if 1 \r
+   //test multiply and divide\r
+   j=7;\r
+   for(i=0;i<=10;++i) {\r
+      print(j*i,10,0);\r
+      putchar(' ');\r
+   }\r
+   putchar('\n');\r
+   j=0x321;\r
+   for(i=0;i<=5;++i) {\r
+      print_hex(j*(i+0x12345));\r
+      putchar(' ');\r
+   }\r
+   putchar('\n');\r
+   j=0x54321;\r
+   for(i=0;i<=5;++i) {\r
+      print_hex(j*(i+0x123));\r
+      putchar(' ');\r
+   }\r
+   putchar('\n');\r
+   j=0x12345;\r
+   for(i=1;i<10;++i) {\r
+      print_hex(j/i);\r
+      putchar(' ');\r
+   }\r
+   putchar('\n');\r
+   for(i=1;i<10;++i) {\r
+      print_hex(j%i);\r
+      putchar(' ');\r
+   }\r
+   putchar('\n');\r
+   putchar('\n');\r
+#endif\r
+\r
+#if 1\r
+   //test addition and subtraction\r
+   j=0x1234;\r
+   for(i=0;i<10;++i) {\r
+      print_hex(j+i);\r
+      putchar(' ');\r
+   }\r
+   putchar('\n');\r
+   for(i=0;i<10;++i) {\r
+      print_hex(j-i);\r
+      putchar(' ');\r
+   }\r
+   putchar('\n');\r
+   putchar('\n');\r
+#endif\r
+  \r
+#if 1 \r
+   //test bit operations\r
+   i=0x1234;\r
+   j=0x4321;\r
+   print_hex(i&j);\r
+   putchar(' ');\r
+   print_hex(i|j);\r
+   putchar(' ');\r
+   print_hex(i^j);\r
+   putchar(' ');\r
+   print_hex(~i);\r
+   putchar(' ');\r
+   print_hex(i+0x12);\r
+   putchar(' ');\r
+   print_hex(i-0x12);\r
+   putchar('\n');\r
+   putchar('\n');\r
+#endif\r
+  \r
+#if 1 \r
+   //test memory access\r
+   for(i=0;i<10;++i) {\r
+      char_buf[i]=i;\r
+      short_buf[i]=i;\r
+      long_buf[i]=i;\r
+   }\r
+   for(i=0;i<10;++i) {\r
+      j=char_buf[i];\r
+      print(j,10,0);\r
+      putchar(' ');\r
+      j=short_buf[i];\r
+      print(j,10,0);\r
+      putchar(' ');\r
+      j=long_buf[i];\r
+      print(j,10,0);\r
+      putchar('\n');\r
+   }\r
+   putchar('\n');\r
+#endif\r
+   \r
+   prime();\r
+   \r
+   putchar('d'); putchar('o'); putchar('n'); putchar('e'); putchar('\n');\r
+\r
+   for(;;) ;\r
+}\r
+\r