-
-
Save M-S-H/7666493 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#************************************************** | |
# | |
# ECE 344L - Microprocessors - Fall 2013 | |
# | |
# Name: Esteban Martinez Due Date:2013-12-11 | |
# Lab Number: 5 | |
# | |
# Lab Group: Esteban Martinez | |
# Michael Hickman | |
# | |
#************************************************** | |
# | |
# | |
# | |
#************************************************** | |
# ------------------------------------------------- | |
# Definitions | |
.set UART, 0x8400 | |
.set RX, 0x00 | |
.set TX, 0x04 | |
.set CTRL, 0x0C | |
.set STAT, 0x08 | |
.set INTC, 0x8180 | |
.set ISR, 0x00 | |
.set IER, 0x08 | |
.set IAR, 0x0C | |
.set MER, 0x1C | |
.set TIMER0, 0x83C2 | |
.set TCSR0, 0x00 | |
.set TLR0, 0x04 | |
.set BTNS, 0x8140 | |
.set NORTH, 0b00001 | |
.set EAST, 0b00010 | |
.set SOUTH, 0b00100 | |
.set WEST, 0b01000 | |
.set CENTER, 0b10000 | |
.set GIE, 0x11C | |
.set IPIER, 0x128 | |
.set HEAD, 0x3FFC | |
.set HSEC, 50000000 # Half second | |
# ------------------------------------------------- | |
# Registers | |
# r0 0 | |
# r1 UART pointer | |
# r2 PIT | |
# r3 Timer0 | |
# r4 Interrupt Controller | |
# r5 Temp | |
# r6 Temp | |
# r7 Temp | |
# r8 Temp | |
# r9 Buttons | |
# r10 Snake Tail Pointer | |
# r11 Draw Flag | |
# r12 snake size | |
# r13 Food x | |
# r14 Food y | |
# r15 Food number | |
# r16 Food pointer | |
# r17 Food Flag | |
# r18 Grow Flag | |
# r19 Stack Pointer | |
# r20 tail ascii value | |
# r21 | |
# r22 | |
# r23 | |
# r24 | |
# r25 | |
# r26 | |
# r27 Shift amount (Use ASCII value) | |
# r28 Row | |
# r29 Column | |
# r30 Context Switch Pointer | |
# r31 Reserved for Context Switch 0 | |
# ------------------------------------------------- | |
# Interrupts | |
.org 0x500 | |
# context switch TEMP registers | |
stw r5, 0(r30) | |
stw r6, 4(r30) | |
stw r7, 8(r30) | |
stw r8, 12(r30) | |
lwz r5, ISR(r4) | |
andi. r5, r5, 0b0010 | |
bf 2, Timer0 | |
lwz r5,ISR(r4) | |
andi. r5,r5,0b0100 | |
bf 2,Button | |
lwz r5, ISR(r4) | |
andi. r5,r5,0b1000 | |
bf 2,Uart | |
b r | |
Timer0: li r11, 1 # set draw snake flag | |
li r5,0x1d6 | |
stw r5,TCSR0(r3) | |
li r5,0b0010 | |
stw r5,IAR(r4) | |
b r | |
Uart: | |
li r5, 0b1000 | |
stw r5, IAR(r4) | |
lwz r5,STAT(r1) | |
andi. r6, r5,0b0011 | |
bt 2, r | |
lwz r5, RX(r1) | |
cmpi 0, r5, 0x68 # h left | |
bt 2, curl | |
cmpi 0, r5, 0x6a # j down | |
bt 2, curd | |
cmpi 0, r5, 0x6b # k up | |
bt 2, curu | |
cmpi 0, r5, 0x6c # l right | |
bt 2, curr | |
b r | |
Button: | |
li r7, 1 | |
stw r7, 0x120(r9) | |
lwz r5, 0(r9) | |
lwz r5,0(r9) | |
andi. r6,r5,NORTH | |
bf 2,curu | |
andi. r6,r5,EAST | |
bf 2,curr | |
andi. r6,r5,SOUTH | |
bf 2,curd | |
andi. r6,r5,WEST | |
bf 2,curl | |
andi. r6,r5,CENTER | |
wrteei 0 | |
bf 2,hardreset | |
b btndone | |
curu: li r7, 0x3FFC | |
li r6, 12 | |
stb r6, 2(r7) | |
#stb r6, 10(r7) | |
b btndone | |
curr: li r7, 0x3FFC | |
li r6, 3 | |
stb r6, 2(r7) | |
#stb r6, 10(r7) | |
b btndone | |
curd: li r7, 0x3FFC | |
li r6, 6 | |
stb r6, 2(r7) | |
#stb r6, 10(r7) | |
b btndone | |
curl: li r7, 0x3FFC | |
li r6, 9 | |
stb r6, 2(r7) | |
#stb r6, 10(r7) | |
btndone: | |
li r5,0b0100 | |
stw r5,IAR(r4) | |
b r | |
r: lwz r5, 0(r30) | |
lwz r6, 4(r30) | |
lwz r7, 8(r30) | |
lwz r8, 12(r30) | |
rfi | |
# ------------------------------------------------- | |
# Setup | |
.org 0x3000 | |
hardreset: | |
#clear registers | |
bl clreg | |
li r30, 0x4100 | |
# UART & INTC pointers | |
lis r1, UART | |
lis r4, INTC | |
lis r3, TIMER0 | |
lis r9, BTNS | |
# Interrupt Enable | |
mtevpr r0 | |
li r5, 0b0011 | |
stw r5, MER(r4) | |
li r5, 0b1110 | |
stw r5, IER(r4) | |
li r5, 0x0013 | |
stw r5, CTRL(r1) | |
# Clear Interrupts | |
li r5, 0b1111 | |
stw r5,IAR(r4) | |
# Enable Buttons Tristate | |
li r5,0x1f | |
stw r5,4(r9) | |
# Enable GPIO | |
lis r5,0x8000 | |
stw r5,GIE(r9) | |
li r5,1 | |
stw r5,IPIER(r9) | |
# Fill Timer0 | |
lis r5, HSEC@h | |
ori r5,r5,HSEC@l | |
stw r5,TLR0(r3) | |
# Enable Timer0 via TCSR0 | |
li r5, 0x1f6 | |
stw r5, TCSR0(r3) | |
li r5, 0x7d6 | |
stw r5, TCSR0(r3) | |
#clear screen | |
li r5, 0x1B # ESC | |
stw r5, TX(r1) | |
li r5, 0x5B # [ | |
stw r5, TX(r1) | |
li r5, 0x32 # 2 | |
stw r5, TX(r1) | |
li r5, 0x4A # J | |
stw r5, TX(r1) | |
# Draw Border | |
li r28, 1 # move to top left corner | |
li r29, 1 | |
bl moveto | |
li r5, 0x0a | |
stw r5, TX(r1) | |
li r5, 77 | |
mtctr r5 | |
li r5, 0x20 | |
stw r5, TX(r1) # write <space> | |
top: bl uwait | |
li r5, 0x58 | |
stw r5, TX(r1) # write X | |
bdnz top | |
li r5, 0x20 | |
stw r5, TX(r1) # write <space> | |
li r26, 0 # move back to top left | |
li r27, 2 | |
li r28, 0 | |
li r29, 2 | |
bl moveto | |
li r5, 21 | |
mtctr r5 | |
li r27, 0x31 # Shift amount in ASCII | |
left: bl uwait | |
bl shiftd # shift cursor down | |
li r5, 0x58 # write X | |
stw r5, TX(r1) | |
bl shiftl # shift cursor left | |
bdnz left | |
li r5, 78 | |
mtctr r5 | |
bottom: bl uwait | |
li r5, 0x58 # write X | |
stw r5, TX(r1) | |
bdnz bottom | |
bl shiftl # shift left once | |
li r5, 20 | |
mtctr r5 | |
right: bl uwait | |
bl shiftu # shift cursor up | |
li r5, 0x58 # write X | |
stw r5, TX(r1) | |
bl shiftl # shift cursor left | |
bdnz right | |
#generate random numbers | |
li r5, 0x6000 | |
li r6, 60 # results in 80 food | |
mtctr r6 | |
mftbl r6 | |
#li r6, 10 | |
numgen: srawi r7, r6, 18 # generate words | |
andi. r7, r7, 1 | |
srawi r8, r6, 5 | |
andi. r8, r8, 1 | |
xor r8, r7, r8 | |
li r7, 1 | |
slw r6, r6, r7 | |
or r6, r6, r8 | |
stw r6, 0(r5) | |
addi r5, r5, 4 | |
bdnz numgen | |
li r31, 0x33 | |
li r5, 0x6000 # make values usable | |
li r6, 240 | |
mtctr r6 | |
fnum: | |
frow: lbz r6, 0(r5) # make row | |
li r7, 18 | |
divw r8, r6, r7 | |
mullw r8, r8, r7 | |
subf r8, r8, r6 | |
addi r8, r8, 3 | |
stb r8, 0(r5) | |
fcol: lbz r6, 1(r5) | |
li r7, 75 | |
divw r8, r6, r7 | |
mullw r8, r8, r7 | |
subf r8, r8, r6 | |
addi r8, r8, 3 | |
stb r8, 1(r5) | |
ffd: lbz r6, 2(r5) | |
li r7, 8 | |
divw r8, r6, r7 | |
mullw r8, r8, r7 | |
subf r8, r8, r6 | |
addi r8, r8, 1 | |
stb r8, 2(r5) | |
addi r5, r5, 3 | |
bdnz fnum | |
# init food | |
li r16, 0x6060 # food pointer | |
lbz r28, 0(r16) # row | |
lbz r29, 1(r16) # col | |
mr r14, r28 | |
mr r13, r29 | |
bl uwait | |
bl moveto | |
lbz r15, 2(r16) | |
addi r5, r15, 0x30 | |
#b . | |
#bl uwait | |
stw r5, TX(r1) | |
addi r16, r16, 3 | |
li r17, 0 | |
#init snake | |
li r10, 0x3FE4 | |
li r11, 0 | |
li r12, 3 | |
bl sinit | |
li r20, 0x78 # x | |
# clear score | |
li r8, 0x4400 | |
stw r0, 0(r8) | |
stw r0, 4(r8) | |
stw r0, 8(r8) | |
# ------------------------------------------------- | |
# Interrupt Enable | |
wrteei 1 | |
# ------------------------------------------------- | |
# ------------------------------------------------- | |
# Main Loop | |
main: cmpi 1, r11, 1 # check draw flag | |
bf 6, main | |
mr r7, r10 # move tail pointer to r7 | |
# check for grow | |
cmpwi 0, r18, 0x0 | |
bt 2, mc | |
addi r10, r10, -8 # decrement tail pointer | |
lwz r5, 0(r7) # copy values | |
stw r5, 0(r10) | |
stb r20, 3(r7) # sets ascii value | |
stw r7, 4(r10) # copy pointer to new tail | |
bl chas # | |
lbz r28, 1(r10) | |
lbz r29, 0(r10) | |
bl uwait | |
bl moveto | |
addi r18, r18, -1 | |
addi r12, r12, 1 | |
mr r7, r10 | |
b draw | |
# move cursor to tail | |
mc: bl upcoor # update tail coordinate | |
lbz r28, 1(r7) # get tail row | |
lbz r29, 0(r7) # get tail col | |
bl uwait | |
bl moveto # move to tail position | |
mr r7, r10 # move tail pointer to r7 | |
# draw snake | |
draw: lbz r5, 3(r7) # get segment ascii char | |
bl uwait | |
stw r5, TX(r1) # write to UART | |
bl shiftl | |
mr r6, r7 # move current seg pointer to r6 | |
lwz r7, 4(r7) # get pointer to next segment | |
cmpwi 0, r7, 0x0 # check if head | |
bt 2, df | |
lbz r5, 2(r7) # get direction of next | |
stb r5, 2(r6) # copy direction | |
bl upcoor | |
lbz r5, 2(r7) # get direction | |
cmpi 0, r5, 12 # move cursor in appropriate direction | |
btl 2, shiftu | |
cmpi 0, r5, 3 | |
btl 2, shiftr | |
cmpi 0, r5, 6 | |
btl 2, shiftd | |
cmpi 0, r5, 9 | |
btl 2, shiftl | |
b draw | |
# draw food | |
df: cmpi 0, r17, 1 | |
bf 2, check | |
lbz r28, 0(r16) # row | |
lbz r29, 1(r16) # col | |
mr r14, r28 | |
mr r13, r29 | |
bl uwait | |
bl moveto | |
lbz r15, 2(r16) # number value | |
addi r5, r15, 0x30 | |
stw r5, TX(r1) | |
addi r16, r16, 3 | |
li r17, 0 | |
# collision detection | |
check: bl chb # check if in border | |
bl chfd # check if ate food | |
bl chsn #check snake | |
# display score | |
li r28, 24 | |
li r29, 2 | |
bl uwait | |
bl moveto | |
bl uwait | |
bl disps | |
li r28, 0 | |
li r29, 0 | |
bl uwait | |
bl moveto | |
li r11, 0 # set draw flag | |
b main | |
# ------------------------------------------------- | |
# Subroutines | |
# snake grow routine | |
grow: mr r7, r10 # copy tail pointer | |
addi r7, r7, -8 # pointer to new segment | |
lwz r5, 0(r10) # copy segment values | |
stw r5, 0(r7) | |
stw r10, 4(r7) # copy pointer | |
stb r20, 3(r10) # make ascii value | |
addi r18, r18, -1 # decrement grow flag | |
blr | |
#change ascii value for segments | |
chas: cmpi 0, r20, 0x78 | |
bt 2, cho | |
li r20, 0x78 | |
blr | |
cho: li r20, 0x6F | |
blr | |
# display score | |
disps: li r5, 0x53 # S | |
stw r5, TX(r1) | |
li r5, 0x63 # c | |
stw r5, TX(r1) | |
li r5, 0x6F # o | |
stw r5, TX(r1) | |
li r5, 0x72 # r | |
stw r5, TX(r1) | |
li r5, 0x65 # e | |
stw r5, TX(r1) | |
li r5, 0x3a # : | |
stw r5, TX(r1) | |
li r5, 0x20 # space | |
stw r5, TX(r1) | |
li r8, 0x4400 | |
lwz r5, 8(r8) | |
addi r5, r5, 0x30 | |
stw r5, TX(r1) | |
lwz r5, 4(r8) | |
addi r5, r5, 0x30 | |
stw r5, TX(r1) | |
lwz r5, 0(r8) | |
addi r5, r5, 0x30 | |
stw r5, TX(r1) | |
blr | |
# update coordinates | |
upcoor: lbz r5, 2(r7) # get direction | |
cmpi 1, r5, 3 | |
bt 6, ir | |
cmpi 1, r5, 6 | |
bt 6, id | |
cmpi 1, r5, 9 | |
bt 6, il | |
cmpi 1, r5, 12 | |
bt 6, iu | |
blr | |
ir: lbz r6, 0(r7) | |
addi r6, r6, 1 | |
stb r6, 0(r7) | |
blr | |
id: lbz r6, 1(r7) | |
addi r6, r6, 1 | |
stb r6, 1(r7) | |
blr | |
il: lbz r6, 0(r7) | |
addi r6, r6, -1 | |
stb r6, 0(r7) | |
blr | |
iu: lbz r6, 1(r7) | |
addi r6, r6, -1 | |
stb r6, 1(r7) | |
blr | |
# move cursor to row/col | |
moveto: li r7, 10 # convert to ascii | |
divw r5, r28, r7 | |
mr r6, r5 | |
mullw r5, r5, r7 | |
subf r5, r5, r28 | |
addi r5, r5, 0x30 | |
li r7, 0x4004 | |
stw r5, 4(r7) | |
mr r28, r6 | |
li r7, 10 | |
divw r5, r28, r7 | |
mr r6, r5 | |
mullw r5, r5, r7 | |
subf r5, r5, r28 | |
addi r5, r5, 0x30 | |
li r7, 0x4004 | |
stw r5, 0(r7) | |
# convert col to ascii | |
li r7, 10 | |
divw r5, r29, r7 | |
mr r6, r5 | |
mullw r5, r5, r7 | |
subf r5, r5, r29 | |
addi r5, r5, 0x30 | |
li r7, 0x4004 | |
stw r5, 12(r7) | |
mr r29, r6 | |
li r7, 10 | |
divw r5, r28, r7 | |
mr r6, r5 | |
mullw r5, r5, r7 | |
subf r5, r5, r29 | |
addi r5, r5, 0x30 | |
li r7, 0x4004 | |
stw r5, 8(r7) | |
li r5, 0x1B # ESC | |
stw r5, TX(r1) | |
li r5, 0x5B # [ | |
stw r5, TX(r1) | |
lwz r5, 0(r7) # row0 | |
stw r5, TX(r1) | |
lwz r5, 4(r7) # row1 | |
stw r5, TX(r1) | |
li r5, 0x3B # ; | |
stw r5, TX(r1) | |
lwz r5, 8(r7) # col0 | |
stw r5, TX(r1) | |
lwz r5, 12(r7) # col1 | |
stw r5, TX(r1) | |
li r5, 0x48 # H | |
stw r5, TX(r1) | |
blr | |
# move cursor up | |
shiftu: | |
uwaitu: lwz r6, STAT(r1) | |
andi. r6,r6, 0x4 | |
bt 2, uwaitu | |
li r5, 0x1b # ESC | |
stw r5, TX(r1) | |
li r5, 0x5b # [ | |
stw r5, TX(r1) | |
stw r27, TX(r1) # amount | |
li r5, 0x41 # A | |
stw r5, TX(r1) | |
blr | |
# move cursor down | |
shiftd: | |
uwaitd: lwz r6, STAT(r1) | |
andi. r6,r6, 0x4 | |
bt 2, uwaitd | |
li r5, 0x1b # ESC | |
stw r5, TX(r1) | |
li r5, 0x5b # [ | |
stw r5, TX(r1) | |
stw r27, TX(r1) # amount | |
li r5, 0x42 # Bbp: b bp | |
stw r5, TX(r1) | |
blr | |
# move cursor right | |
shiftr: | |
uwaitr: lwz r6, STAT(r1) | |
andi. r6,r6, 0x4 | |
bt 2, uwaitr | |
li r5, 0x1b # ESC | |
stw r5, TX(r1) | |
li r5, 0x5b # [ | |
stw r5, TX(r1) | |
stw r27, TX(r1) # amount | |
li r5, 0x43 # C | |
stw r5, TX(r1) | |
blr | |
# shift cursor left | |
shiftl: | |
uwaitl: lwz r6, STAT(r1) | |
andi. r6,r6, 0x4 | |
bt 2, uwaitl | |
li r5, 0x1b # ESC | |
stw r5, TX(r1) | |
li r5, 0x5b # [ | |
stw r5, TX(r1) | |
stw r27, TX(r1) # amount | |
li r5, 0x44 # B | |
stw r5, TX(r1) | |
blr | |
#check food | |
chfd: li r7, 0x3FFC # pointer to head | |
lbz r5, 0(r7) # get x pos | |
lbz r6, 1(r7) # get y pos | |
cmp 0, r5, r13 # compare x | |
bflr 2 | |
cmp 0, r6, r14 # compare y | |
bflr 2 | |
eatf: addi r17, r17, 1 | |
mr r18, r15 | |
#update score | |
li r8, 0x4400 # pointer to score | |
lwz r5, 0(r8) # get fist digit | |
add r5, r5, r15 # add score | |
stw r5, 0(r8) | |
cmpi 0, r5, 9 # compare with 9 | |
bflr 1 | |
li r7, 10 | |
subf r5, r7, r5 | |
stw r5, 0(r8) | |
lwz r5, 4(r8) | |
addi r5, r5, 1 | |
stw r5, 4(r8) | |
cmpi 0, r5, 9 | |
bflr 1 | |
subf r5, r7, r5 | |
stw r5, 4(r8) | |
lwz r5, 8(r8) | |
addi r5, r5, 1 | |
stw r5, 8(r8) | |
blr | |
# check border | |
chb: li r7, 0x3FFC # pointer to head | |
lbz r5, 0(r7) # get x pos | |
lbz r6, 1(r7) # get y pos | |
cmpi 0, r5, 2 # compare left | |
bt 2, go | |
cmpi 0, r5, 79 # compare right | |
bt 2, go | |
cmpi 0, r6, 2 # compare top | |
bt 2, go | |
cmpi 0, r6, 22 # compare bottom | |
bt 2, go | |
blr | |
#check snake | |
chsn: li r7, 0x3FFC # pointer to head | |
lbz r5, 0(r7) # get x pos | |
lbz r6, 1(r7) # get y pos | |
lwz r7, 4(r10) | |
chsnl: lbz r8, 0(r7) # get x pos of seg | |
cmp 0, r8, r5 # compare x position | |
bf 2, chn | |
lbz r8, 1(r7) # get y pos of seg | |
cmp 0, r8, r6 # compare y position | |
bt 2, go | |
chn: lwz r7, 4(r7) | |
cmpwi 0, r7, 0x3FFC | |
btlr 2 | |
b chsnl | |
#game over | |
go: li r28, 11 | |
li r29, 4 | |
bl uwait | |
bl moveto | |
bl uwait | |
li r5, 0x47 # G | |
stw r5, TX(r1) | |
li r5, 0x41 # A | |
stw r5, TX(r1) | |
li r5, 0x4d # M | |
stw r5, TX(r1) | |
li r5, 0x45 # E | |
stw r5, TX(r1) | |
li r5, 0x20 | |
stw r5, TX(r1) | |
li r5, 0x4f # O | |
stw r5, TX(r1) | |
li r5, 0x56 # V | |
stw r5, TX(r1) | |
li r5, 0x45 # E | |
stw r5, TX(r1) | |
li r5, 0x52 # R | |
stw r5, TX(r1) | |
stop: b stop | |
# wait for UART | |
uwait: lwz r6, STAT(r1) | |
andi. r6,r6, 0x4 | |
bt 2, uwait | |
blr | |
# initialize snake in memory | |
sinit: li r5, 0x3FE4 | |
lis r6, 0x2C0C | |
ori r6, r6, 0x0920 | |
stw r6, 0(r5) | |
li r6, 0x3FEC | |
stw r6, 4(r5) | |
addi r5, r5, 8 | |
lis r6, 0x2B0C | |
ori r6, r6, 0x096F | |
stw r6, 0(r5) | |
li r6, 0x3FF4 | |
stw r6, 4(r5) | |
addi r5, r5, 8 | |
lis r6, 0x2A0C | |
ori r6, r6, 0x0978 | |
stw r6, 0(r5) | |
li r6, 0x3FFC | |
stw r6, 4(r5) | |
addi r5, r5, 8 | |
lis r6, 0x290C | |
ori r6, r6, 0x0923 | |
stw r6, 0(r5) | |
li r6, 0 | |
stw r6, 4(r5) | |
blr | |
clreg: li r0,0 # clear R0 | |
li r1,0 # clear R1 | |
li r2,0 # clear R2 | |
li r3,0 # clear R3 | |
li r4,0 # clear R4 | |
li r5,0 # clear R5 | |
li r6,0 # clear R6 | |
li r7,0 # clear R7 | |
li r8,0 # clear R8 | |
li r9,0 # clear R9 | |
li r10,0 # clear R10 | |
li r11,0 # clear R11 | |
li r12,0 # clear R12 | |
li r13,0 # clear R13 | |
li r14,0 # clear R14 | |
li r15,0 # clear R15 | |
li r16,0 # clear R16 | |
li r17,0 # clear R17 | |
li r18,0 # clear R18 | |
li r19,0 # clear R19 | |
li r20,0 # clear R20 | |
li r21,0 # clear R21 | |
li r22,0 # clear R22 | |
li r23,0 # clear R23 | |
li r24,0 # clear R24 | |
li r25,0 # clear R25 | |
li r26,0 # clear R26 | |
li r27,0 # clear R27 | |
li r28,0 # clear R28 | |
li r29,0 # clear R29 | |
li r30,0 # clear R30 | |
li r31,0 # clear R31 | |
mtctr r31 # clear CTR | |
#mtlr r31 # clear link reg | |
mtcr r31 # clear condition reg | |
mtspr 256,r31 # clear USPRG0 | |
mtsprg0 r31 # clear SPRG0 | |
mtsprg1 r31 # clear SPRG1 | |
mtsprg2 r31 # clear SPRG2 | |
mtsprg3 r31 # clear SPRG3 | |
mtsprg4 r31 # clear SPRG4 | |
mtsprg5 r31 # clear SPRG5 | |
mtsprg6 r31 # clear SPRG6 | |
mtsprg7 r31 # clear SPRG7 | |
mtsrr0 r31 # clear SRR0 | |
mtsrr1 r31 # clear SRR1 | |
mtsrr2 r31 # clear SRR2 | |
mtsrr3 r31 # clear SRR3 | |
mtesr r31 # clear ESR | |
mtdear r31 # clear DEAR | |
mtevpr r31 # clear EVPR | |
lis r31,0xFC00 # set up to clear TSR | |
mttsr r31 # clear the bits | |
li r31,0 # reset r31 back to 0 | |
mttcr r31 # clear TCR | |
mtpit r31 # clear PIT | |
mtxer r0 # clear XER | |
blr | |
# ------------------------------------------------- | |
# Snake Location | |
# mem for snake segments | |
.org 0x3FE4 | |
.long 0, 0, 0, 0, 0, 0, 0, 0 | |
# mem for moveto function | |
.org 0x4004 | |
.long 0, 0, 0, 0 | |
# mem for context switch | |
.org 0x4100 | |
# mem for score | |
.org 0x4400 | |
.long 0, 0, 0 | |
# mem for btn movement | |
.org 0x5000 | |
.byte 0 # Flag: has btn been pressed? | |
.org 0x6000 | |
.long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 | |
.long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 | |
.long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 | |
.long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 | |
.long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 | |
.long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 | |
.long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 | |
.long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment