.equ IO_BASE, 0xff200000
.equ LED, 0x00
.equ SWITCH, 0x40
.equ SEG1, 0x20
.equ SEG2, 0x30
.equ TIME, 0x2000
.equ TIME1, 0x2000
.equ TIME2, 0x2020
.equ TIME_CTRL, TIME+0x4
.equ TIME_LO, TIME+0x8
.equ TIME_HI, TIME+0xc
.equ TIME_START, 400000000 # time
.equ TOS, 0x03000000
.macro push reg
subi sp, sp, 4
stw \reg, 0(sp)
.endm
.macro pop reg
ldw \reg, 0(sp)
addi sp, sp, 4
.endm
.global _start
_start:
movia sp, TOS
movia r23, IO_BASE
movi r2, 1 # start LED bit
movi r3, 0 # move LED
movi r4, rand_numb #random numb
movi r5, 0 #initalize switch
movi r6, 0 #initalize 7 seg display
loop:
call start_timer
call random # generate random number
ldw r4, rand_numb(r0)# load it from memory
or r2, r8, r2
stwio r2, LED(r23)
movi r8, 1 # bitmsk for conversion
check_timer:
ldwio r7, TIME(r23) # check if timer is on
cmpeqi r7, r7, 0b10 # if not branch to add_LED
bne r7, r0, check_timer #
br check_switch
check_switch:
ldwio r5, SWITCH(r23) #\
ldwio r2, LED(r23) # compare switch position to LED
cmpeq r6, r5, r2 #/
beq r5, r2, add_point # if equal add point
br add_LED # else add another LED
add_LED:
beq r4,r0, loop
slli r8,r8,1
subi r4,r4, 1
br add_LED
add_point:
#code here
start_timer:
push r2 # stack
stwio r0, TIME(r23) # reset timer
movi r2, %lo(TIME_START)
sthio r2, TIME_LO(r23) # low half start value
movi r2, %hi(TIME_START)
sthiO r2, TIME_HI(r23) # high half start value
movi r2, 0b0100 # start mask
sthio r2, TIME_CTRL(r23) # start timer
pop r2 # unstack
ret
random:
push r16 # stack
push r17 #
ldw r16, rand_seed(r0) # / fetch seed
addi r16, r16, 1 # /
movia r17, 3141592621 #| make new seed
mul r16, r16, r17 # \
stw r16, rand_seed(r0) # \ store new seed
ldw r17, rand_max(r0) # generate number
mulxuu r16, r16, r17 # by pulling the hi 32-bits
stw r16, rand_numb(r0) # random number stored in "rand"
pop r17 # unstack
pop r16 #
ret
.org 0x1000
.data
rand_max: .word 10 # maximum number (e.g. 100 gets 0-99)
rand_seed: .word 07252000 # seed for random number generator
rand_numb: .word 0 # store random number here
seg7_numbers: .byte 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x6f
# 0 1 2 3 4 5 6 7 8 9
DescriptionIn this final assignment, the students will demonstrate their ability to apply two ma
Path finding involves finding a path from A to B. Typically we want the path to have certain properties,such as being the shortest or to avoid going t
Develop a program to emulate a purchase transaction at a retail store. Thisprogram will have two classes, a LineItem class and a Transaction class. Th
1 Project 1 Introduction - the SeaPort Project series For this set of projects for the course, we wish to simulate some of the aspects of a number of
1 Project 2 Introduction - the SeaPort Project series For this set of projects for the course, we wish to simulate some of the aspects of a number of