Skip to content

Instantly share code, notes, and snippets.

@ryandhubbard
Created August 17, 2016 16:34
Show Gist options
  • Save ryandhubbard/a2477dea12b68029f98656b4ef7fb9fb to your computer and use it in GitHub Desktop.
Save ryandhubbard/a2477dea12b68029f98656b4ef7fb9fb to your computer and use it in GitHub Desktop.
arm assembly lock control system
.equ SEG_A,0x80
.equ SEG_B,0x40
.equ SEG_C,0x20
.equ SEG_D,0x08
.equ SEG_E,0x04
.equ SEG_F,0x02
.equ SEG_G,0x01
.equ SEG_P,0x10
.global _start
.text
_start:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Unlocked:
mov r1,#00
bl Display8Segment
swi 0x202
cmp r0, #0x01
beq Program
cmp r0, #0x02
blt Unlocked
@beq ActOnLeftBlack
ldr r1, =codeValid
ldr r1, [r1]
cmp r1, #00
beq Unlocked
@bal Unlocked
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Locked:
mov r1, #01
bl Display8Segment
bl acceptUnlockCode
cmp r0, #00
beq Error
bal Unlocked
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Program:
mov r1, #02
bl Display8Segment
ldr r3, =codeP
ldr r5, =lengthP
bl ReceiveCode
ldr r1, =codeValid
ldr r1, [r1]
cmp r1, #00
bne Forget
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Confirm:
mov r1, #03
bl Display8Segment
ldr r3, =codeC
ldr r5, =lengthC
bl ReceiveCode
bl setCode
cmp r0, #01
beq Accept
bal Error
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Forget:
mov r1, #04
bl Display8Segment
ldr r3, =codeC
ldr r5, =lengthC
bl ReceiveCode
bl forgetCode
cmp r0, #01
beq Accept
bal Error
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Accept:
mov r1, #05
bl Display8Segment
bl waitProc
ldr r0, =codeValid
ldr r0, [r0]
cmp r0, #00
beq Unlocked
bal Locked
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Error:
mov r1, #06
bl Display8Segment
bl waitProc
ldr r0, =codeValid
ldr r0, [r0]
cmp r0, #00
beq Unlocked
bal Locked
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
setCode:
stmfa sp!,{r1-r6,lr}
ldr r1, =lengthP
ldr r2, =lengthC
ldr r1, [r1]
ldr r2, [r2]
cmp r1, r2
bne exitError
ldr r2, =codeP
ldr r3, =codeC
ldr r6, =codeStored
mov r0, #01
compareLoop:
ldr r4, [r2], #2
ldr r5, [r3], #2
cmp r4, r5
bne exitError
str r4, [r6], #2
subs r1, r1, #01
adds r2, r2, #2
adds r3, r3, #2
adds r6, r6, #2
cmp r1, #00
bne compareLoop
ldr r3, =lengthP
str r3, =lengthStored
mov r0, #1
ldr r2, =codeValid
str r0, [r2]
bal returnSetCode
exitError:
mov r0, #00
returnSetCode:
ldmfa sp!,{r1-r6,pc}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
forgetCode:
stmfa sp!,{r1-r5,lr}
ldr r1, =lengthP
ldr r2, =lengthC
ldr r1, [r1]
ldr r2, [r2]
cmp r1, r2
bne exitError
ldr r2, =codeP
ldr r3, =codeC
mov r0, #01
compareLoop2:
ldr r4, [r2], #2
ldr r5, [r3], #2
cmp r4, r5
bne exitError2
str r4, [r6], #2
subs r1, r1, #01
adds r2, r2, #2
adds r3, r3, #2
adds r6, r6, #2
cmp r1, #00
bne compareLoop2
mov r0, #00
ldr r2, =codeValid
str r0, [r2]
mov r0, #01
bal returnForgetCode
exitError2:
mov r0, #00
returnForgetCode:
ldmfa sp!,{r1-r5,pc}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
waitProc:
stmfa sp!,{r0-r2,lr}
mov r0, #100
mov r1, #010000
waitLoop1:
mov r1, #010000
waitLoop2:
subs r1,r1, #01
cmp r1, #00
bne waitLoop2
subs r0, r0, #01
cmp r0,#00
bne waitLoop1
ldmfa sp!,{r0-r2,pc}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Display8Segment:
stmfa sp!,{r0-r2,lr}
ldr r2,=Letters
@add r2, r2, r1
ldr r0,[r2,r1,lsl#2]
@tst r1,#0x01 @if r1=1,
@orrne r0,r0,#SEG_P @then show “P”
swi 0x200
ldmfa sp!,{r0-r2,pc}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
acceptUnlockCode:
stmfa sp!,{r1-r6,lr}
ldr r3, =codeC
ldr r5, =lengthC
mov r4, #00
receiveCode2:
swi 0x202
cmp r0, #0x02
beq exitReceiveCode2
swi 0x203
cmp r0,#00
beq receiveCode2
mov r1, #0
decodeLooop2:
adds r1, r1 ,#01
mov r2, r0
mov r0, r0, lsr#01
and r2, r2, #01
cmp r2, #1
bne decodeLooop2
str r1, [r3], #2
adds r4, r4, #1
adds r3, r3, #2
mov r1, #0
bal receiveCode2
exitReceiveCode2:
str r4, [r5], #1
ldr r1, =lengthStored
ldr r2, =lengthC
ldr r1, [r1]
ldr r2, [r2]
cmp r1, r2
bne exitError
ldr r2, =codeStored
ldr r3, =codeC
mov r0, #01
compareLoop3:
ldr r4, [r2], #2
ldr r5, [r3], #2
cmp r4, r5
bne exitError3
str r4, [r6], #2
subs r1, r1, #01
adds r2, r2, #2
adds r3, r3, #2
adds r6, r6, #2
cmp r1, #00
bne compareLoop3
mov r0, #01
bal returnacceptUnlockCode
exitError3:
mov r0, #00
returnacceptUnlockCode:
ldmfa sp!,{r1-r6,pc}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ReceiveCode:
stmfa sp!,{r0-r5,lr}
mov r4, #00
receiveCode:
swi 0x202
cmp r0, #0x01
beq exitReceiveCode
swi 0x203
cmp r0,#00
beq receiveCode
mov r1, #0
decodeLooop:
adds r1, r1 ,#01
mov r2, r0
mov r0, r0, lsr#01
and r2, r2, #01
cmp r2, #1
bne decodeLooop
str r1, [r3], #2
adds r4, r4, #1
adds r3, r3, #2
mov r1, #0
bal receiveCode
exitReceiveCode:
str r4, [r5], #1
ldmfa sp!,{r0-r5,pc}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.data
.align
InFileName: .asciz "input.txt"
FileOpenInpErrMsg: .asciz "Failed to open input file \n"
EndOfFileMsg: .asciz "End of file reached\n"
ColonSpace: .asciz": "
NL: .asciz "\n " @ new line
Message1: .asciz "Hello World! \n"
.align
codeValid: .byte 0
.align
codeStored: .skip 100
codeP: .skip 100
codeC: .skip 100
.align
lengthStored: .skip 1
.align
lengthP: .skip 1
.align
lengthC: .skip 1
.align
InFileHandle: .skip 4
MyArray: .skip 100 * 4
length: .skip 4
Letters:
.word SEG_B|SEG_C|SEG_D|SEG_E|SEG_G @U
.word SEG_D|SEG_E|SEG_G @L
.word SEG_A|SEG_B|SEG_F|SEG_E|SEG_G @P
.word SEG_A|SEG_D|SEG_E|SEG_G @C
.word SEG_A|SEG_F|SEG_E|SEG_G @F
.word SEG_B|SEG_C|SEG_A|SEG_E|SEG_G|SEG_F @A
.word SEG_A|SEG_F|SEG_D|SEG_E|SEG_G @E
.end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment