Advertisement
cyruswachong

FINAL LAB 254

Jul 20th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.58 KB | None | 0 0
  1. .global asm_main
  2. .align 4
  3. Zmemory: .space 2000000
  4. .align 4
  5.  
  6. asm_main:
  7.  
  8. LDR R12, =# 0xE000102C
  9. LDR R0, =# 0xE0001004
  10. LDR R9, =# 0x020
  11. STR R9, [R0]
  12. LDR R1, =# 0xE0001018
  13. LDR R9, =# 62
  14. STR R9, [R1]
  15. LDR R2, =# 0xE0001034
  16. LDR R9, =# 6
  17. STR R9, [R2]
  18. LDR R3, =# 0xE0001000
  19. LDR R9, =# 0x117
  20. STR R9, [R3]
  21. LDR R5, =# 0xE0001030
  22. MOV R0, #0
  23. MOV R1, #0
  24. MOV R2, #0
  25. MOV R3, #0
  26. LDR R9, = Zmemory
  27.  
  28. LDR R4,=#0x41220000
  29.  
  30.  
  31. initialdelete:
  32. MOV R0, #0
  33. MOV R1, #0
  34. MOV R6, #0
  35. MOV R7, #0
  36. MOV R10, #0
  37. BL deleteMem
  38. B switch7On
  39.  
  40. switch7On:
  41. LDR R1, [R4] ;@ loads switch values
  42. BL debouncer
  43. TST R1, #128 ;@ tests if SW7 on on
  44. BNE check ;@ if SW7 on, check UART status
  45. ;@MOV R1, #0
  46. ;@STR R1, [R5]
  47. BEQ ResetRegisters ;@ if SW7 off, reset registers and go to switch off mode
  48.  
  49. check:
  50. LDR R7, [R12] ;@ Loads Status Reg. into R7
  51. LSR R7, #1 ;@ LSR to get bit that matters
  52. TST R7, #1 ;@ if bit is 0, there is mem to be read, if 1, it is empty
  53. BNE switch7On ;@ If UART empty, recheck switch value
  54. BEQ read ;@ If not empty, store byte into Zmem
  55.  
  56. read:
  57. LDRB R6, [R5] ;@ Load value from UART into R6
  58. STRB R6, [R9, R10] ;@ Store byte into offset of Zmem
  59.  
  60. ADD R10, R10, #1 ;@ R10 will be amount of bytes stored
  61. B switch7On ;@ Check Switches
  62.  
  63. ResetRegisters:
  64. MOV R7, #0
  65. MOV R6, #0
  66. B Switch7Off
  67.  
  68. Switch7Off:
  69. LDR R1, [R4] ;@ Load Switch value
  70. BL debouncer
  71. TST R1, #128
  72. BNE zeroZmem ;@ If switch goes back on, zero out mem, restart
  73. BEQ executeZmem ;@ If switch still zero, execute code
  74.  
  75. executeZmem:
  76. LDRB R11, [R9,R7] ;@ Execute values in Zmem
  77. BL CheckUART
  78. STRB R11, [R5] ;@ Push stored value onto UART
  79. CMP R7, R10 ;@ Compares new counter to total bytes, if equal, Zmem done executing
  80. BEQ DoneExecuting
  81. ADD R7, R7, #1
  82. BNE Switch7Off
  83.  
  84. CheckUART:
  85. LDR R6, [R12] ;@ Checks if UART
  86. LSR R6, #13
  87. TST R6, #1
  88. BNE CheckUART
  89. MOV R15, R14
  90.  
  91.  
  92. DoneExecuting:
  93. LDR R1, [R4] ;@ Load Switch value
  94. BL debouncer
  95. TST R1, #128
  96. BNE zeroZmem ;@ If switch goes back on, zero out mem, restart
  97. BEQ DoneExecuting ;@ If switch still zero, execute code
  98.  
  99. debouncer:
  100. LDR R0, =#2 ;@ CHANGE
  101. B debounce
  102. debounce:
  103. SUBS R0, R0, #1
  104. BNE debounce
  105. MOV R0, #0
  106. MOV R15, R14
  107. zeroZmem:
  108. MOV R0, #0
  109. MOV R1, #0
  110. MOV R6, #0
  111. MOV R7, #0
  112. MOV R10, #0
  113. BL deleteMem
  114. B switch7On
  115. deleteMem:
  116. LDRB R0, =#0
  117. STRB R0, [R9, R1]
  118. ADD R1, #1
  119. LDR R2, =#1 ;@ CHANGE TO 2MILLION
  120. CMP R1, R2
  121. BNE deleteMem
  122. MOV R15, R14
  123. -------------------------------------------------------------------------------------------------------------------------------
  124. .global asm_main
  125. .align 4
  126. Zmemory: .space 2000000
  127. .align 4
  128.  
  129. asm_main:
  130.  
  131. LDR R12, =# 0xE000102C
  132. LDR R0, =# 0xE0001004
  133. LDR R9, =# 0x020
  134. STR R9, [R0]
  135. LDR R1, =# 0xE0001018
  136. LDR R9, =# 62
  137. STR R9, [R1]
  138. LDR R2, =# 0xE0001034
  139. LDR R9, =# 6
  140. STR R9, [R2]
  141. LDR R3, =# 0xE0001000
  142. LDR R9, =# 0x117
  143. STR R9, [R3]
  144. LDR R5, =# 0xE0001030
  145. MOV R0, #0
  146. MOV R1, #0
  147. MOV R2, #0
  148. MOV R3, #0
  149. LDR R7, = Zmemory
  150.  
  151. LDR R9,=#0x41220000
  152.  
  153.  
  154. initialdelete:
  155. MOV R0, #0
  156. MOV R1, #0
  157. MOV R6, #0
  158. MOV R10, #0
  159. BL deleteMem
  160. B switch7On
  161.  
  162. switch7On:
  163. LDR R9,=#0x41220000
  164. LDR R8, [R9] ;@ loads switch values
  165. BL debouncer
  166. TST R8, #128 ;@ tests if SW7 on on
  167. BNE check ;@ if SW7 on, check UART status
  168. ;@MOV R1, #0
  169. ;@STR R1, [R5]
  170. BEQ ResetRegisters ;@ if SW7 off, reset registers and go to switch off mode
  171.  
  172. check:
  173. LDR R8, [R12] ;@ Loads Status Reg. into R7
  174. LSR R8, #1 ;@ LSR to get bit that matters
  175. TST R8, #1 ;@ if bit is 0, there is mem to be read, if 1, it is empty
  176. BNE switch7On ;@ If UART empty, recheck switch value
  177. BEQ read ;@ If not empty, store byte into Zmem
  178.  
  179. read:
  180. LDRB R8, [R5] ;@ Load value from UART into R6
  181. STRB R8, [R7, R10] ;@ Store byte into offset of Zmem
  182.  
  183. ADD R10, R10, #1 ;@ R10 will be amount of bytes stored
  184. B switch7On ;@ Check Switches
  185.  
  186. ResetRegisters:
  187. MOV R7, #0
  188. MOV R6, #0
  189. B Switch7Off
  190.  
  191. Switch7Off:
  192. LDR R9,=#0x41220000
  193. LDR R8, [R9] ;@ Load Switch value
  194. BL debouncer
  195. TST R8, #128
  196. BNE zeroZmem ;@ If switch goes back on, zero out mem, restart
  197. BEQ executeZmem ;@ If switch still zero, execute code
  198.  
  199. executeZmem:
  200. LDRB R8, [R7,R11] ;@ Execute values in Zmem
  201. BL CheckUART
  202. STRB R11, [R5] ;@ Push stored value onto UART
  203. CMP R7, R10 ;@ Compares new counter to total bytes, if equal, Zmem done executing
  204. BEQ DoneExecuting
  205. ADD R11, R11, #1
  206. BNE Switch7Off
  207.  
  208. CheckUART:
  209. PUSH{R8, R9}
  210. LDR R8, [R12] ;@ Checks if UART
  211. LSR R8, #13
  212. TST R8, #1
  213. BNE CheckUART
  214. POP{R8, R9}
  215. MOV R15, R14
  216.  
  217.  
  218. DoneExecuting:
  219. LDR R1, [R4] ;@ Load Switch value
  220. BL debouncer
  221. TST R1, #128
  222. BNE zeroZmem ;@ If switch goes back on, zero out mem, restart
  223. BEQ DoneExecuting ;@ If switch still zero, execute code
  224.  
  225. debouncer:
  226. PUSH {R8}
  227. LDR R8, =#2 ;@ CHANGE
  228. B debounce
  229. debounce:
  230. SUBS R8, R8, #1
  231. BNE debounce
  232. MOV R8, #0
  233. POP {R8}
  234. MOV R15, R14
  235.  
  236. zeroZmem:
  237. MOV R10, #0
  238. BL deleteMem
  239. B switch7On
  240.  
  241. deleteMem:
  242. LDRB R0, =#0
  243. STRB R0, [R9, R1]
  244. ADD R1, #1
  245. LDR R2, =#1 ;@ CHANGE TO 2MILLION
  246. CMP R1, R2
  247. BNE deleteMem
  248. MOV R15, R14
  249. ------------------------------------------------------------------------------------------------------------------------------------
  250. .global asm_main
  251. .align 4
  252. Zmemory: .space 2000000
  253. .align 4
  254.  
  255. asm_main:
  256. LDR R0, =# 0xE0001004
  257. LDR R9, =# 0x020
  258. STR R9, [R0]
  259. LDR R1, =# 0xE0001018
  260. LDR R9, =# 62
  261. STR R9, [R1]
  262. LDR R2, =# 0xE0001034
  263. LDR R9, =# 6
  264. STR R9, [R2]
  265. LDR R3, =# 0xE0001000
  266. LDR R9, =# 0x117
  267. STR R9, [R3]
  268. LDR R5, =# 0xE0001030
  269. MOV R0, #0
  270. MOV R1, #0
  271. MOV R2, #0
  272. MOV R3, #0
  273. MOV R11, #0
  274. LDR R7, = Zmemory
  275.  
  276. LDR R9,=#0x41220000
  277.  
  278.  
  279. initialdelete:
  280. BL deleteMem
  281. B switch7On
  282.  
  283. switch7On:
  284. LDR R9,=#0x41220000
  285. LDR R8, [R9] ;@ loads switch values
  286. BL debouncer
  287. TST R8, #128 ;@ tests if SW7 on on
  288. BNE check ;@ if SW7 on, check UART status
  289. ;@MOV R1, #0
  290. ;@STR R1, [R5]
  291. BEQ ResetRegisters ;@ if SW7 off, reset registers and go to switch off mode
  292.  
  293. check:
  294. LDR R9, =# 0xE000102C
  295. LDR R8, [R9] ;@ Loads Status Reg. into R7
  296. LSR R8, #1 ;@ LSR to get bit that matters
  297. TST R8, #1 ;@ if bit is 0, there is mem to be read, if 1, it is empty
  298. BNE switch7On ;@ If UART empty, recheck switch value
  299. BEQ read ;@ If not empty, store byte into Zmem
  300.  
  301. read:
  302. LDRB R8, [R5] ;@ Load value from UART into R6
  303. STRB R8, [R7, R10] ;@ Store byte into offset of Zmem
  304. ADD R10, R10, #1 ;@ R10 will be amount of bytes stored
  305. B switch7On ;@ Check Switches
  306.  
  307. ResetRegisters:
  308. MOV R7, #0
  309. MOV R8, #0
  310. B Switch7Off
  311.  
  312. Switch7Off:
  313. LDR R9,=#0x41220000
  314. LDR R8, [R9] ;@ Load Switch value
  315. BL debouncer
  316. TST R8, #128
  317. BNE zeroZmem ;@ If switch goes back on, zero out mem, restart
  318. BEQ executeZmem ;@ If switch still zero, execute code
  319.  
  320. executeZmem:
  321. LDR R7, = Zmemory
  322. LDRB R8, [R7,R11] ;@ Execute values in Zmem
  323. BL CheckUART
  324. STRB R8, [R5] ;@ Push stored value onto UART
  325. CMP R10, R11 ;@ Compares new counter to total bytes, if equal, Zmem done executing
  326. BEQ DoneExecuting
  327. ADD R11, R11, #1
  328. BNE Switch7Off
  329.  
  330. CheckUART:
  331. PUSH {R8, R9}
  332. LDR R9, =# 0xE000102C
  333. LDR R8, [R9] ;@ Checks if UART
  334. LSR R8, #13
  335. TST R8, #1
  336. BNE CheckUART
  337. POP {R8, R9}
  338. MOV R15, R14
  339.  
  340.  
  341. DoneExecuting:
  342. LDR R9,=#0x41220000
  343. LDR R8, [R9] ;@ Load Switch value
  344. BL debouncer
  345. TST R8, #128
  346. BNE zeroZmem ;@ If switch goes back on, zero out mem, restart
  347. BEQ DoneExecuting ;@ If switch still zero, execute code
  348.  
  349. debouncer:
  350. PUSH {R8}
  351. LDR R8, =#2 ;@ CHANGE
  352. B debounce
  353. debounce:
  354. SUBS R8, R8, #1
  355. BNE debounce
  356. MOV R8, #0
  357. POP {R8}
  358. MOV R15, R14
  359.  
  360. zeroZmem:
  361. BL deleteMem
  362. B switch7On
  363.  
  364. deleteMem:
  365. PUSH {R8, R10, R11}
  366. LDR R7, = Zmemory
  367. LDRB R8, =0
  368. STRB R8, [R7, R11]
  369. ADD R11, R11, #1
  370. LDR R10, =#1 ;@ CHANGE to 2mill
  371. CMP R10, R11
  372. BNE deleteMem
  373. POP {R8, R10, R11}
  374. MOV R15, R14
  375.  
  376.  
  377. --------------------------------------------------------------------------------------------------------------------------------
  378. .global asm_main
  379. .align 4
  380. Zmemory: .space 2000000
  381. .align 4
  382.  
  383. asm_main:
  384. LDR R0, =# 0xE0001004
  385. LDR R9, =# 0x020
  386. STR R9, [R0]
  387. LDR R1, =# 0xE0001018
  388. LDR R9, =# 62
  389. STR R9, [R1]
  390. LDR R2, =# 0xE0001034
  391. LDR R9, =# 6
  392. STR R9, [R2]
  393. LDR R3, =# 0xE0001000
  394. LDR R9, =# 0x117
  395. STR R9, [R3]
  396. LDR R5, =# 0xE0001030
  397. MOV R0, #0
  398. MOV R1, #0
  399. MOV R2, #0
  400. MOV R3, #0
  401. MOV R11, #0
  402. LDR R7, = Zmemory
  403.  
  404. LDR R9,=#0x41220000
  405.  
  406.  
  407. /*initialdelete:
  408. BL deleteMem
  409. B switch7On*/
  410.  
  411. switch7On:
  412. LDR R9,=#0x41220000
  413. LDR R8, [R9] ;@ loads switch values
  414. BL debouncer
  415. TST R8, #128 ;@ tests if SW7 on on
  416. BNE check ;@ if SW7 on, check UART status
  417. ;@MOV R1, #0
  418. ;@STR R1, [R5]
  419. BEQ ResetRegisters ;@ if SW7 off, reset registers and go to switch off mode
  420.  
  421. check:
  422. LDR R9, =# 0xE000102C
  423. LDR R8, [R9] ;@ Loads Status Reg. into R7
  424. LSR R8, #1 ;@ LSR to get bit that matters
  425. TST R8, #1 ;@ if bit is 0, there is mem to be read, if 1, it is empty
  426. BNE switch7On ;@ If UART empty, recheck switch value
  427. BEQ read ;@ If not empty, store byte into Zmem
  428.  
  429. read:
  430. LDRB R8, [R5] ;@ Load value from UART into R6
  431. STRB R8, [R7, R10] ;@ Store byte into offset of Zmem
  432. ADD R10, R10, #1 ;@ R10 will be amount of bytes stored
  433. B switch7On ;@ Check Switches
  434.  
  435. ResetRegisters:
  436. MOV R7, #0
  437. MOV R8, #0
  438. MOV R11,#0
  439. B Switch7Off
  440.  
  441. Switch7Off:
  442. LDR R9,=#0x41220000
  443. LDR R8, [R9] ;@ Load Switch value
  444. BL debouncer
  445. TST R8, #128
  446. BNE zeroZmem ;@ If switch goes back on, zero out mem, restart
  447. BEQ executeZmem ;@ If switch still zero, execute code
  448.  
  449. executeZmem:
  450. LDR R7, = Zmemory
  451. LDRB R8, [R7,R11] ;@ Execute values in Zmem
  452. BL CheckUART
  453. STRB R8, [R5] ;@ Push stored value onto UART
  454. CMP R10, R11 ;@ Compares new counter to total bytes, if equal, Zmem done executing
  455. BEQ DoneExecuting
  456. ADD R11, R11, #1
  457. BNE Switch7Off
  458.  
  459. CheckUART:
  460. PUSH {R8, R9}
  461. LDR R9, =# 0xE000102C
  462. LDR R8, [R9] ;@ Checks if UART
  463. LSR R8, #13
  464. TST R8, #1
  465. BNE CheckUART
  466. POP {R8, R9}
  467. MOV R15, R14
  468.  
  469.  
  470. DoneExecuting:
  471. LDR R9,=#0x41220000
  472. LDR R8, [R9] ;@ Load Switch value
  473. BL debouncer
  474. TST R8, #128
  475. BNE zeroZmem ;@ If switch goes back on, zero out mem, restart
  476. BEQ DoneExecuting ;@ If switch still zero, execute code
  477.  
  478. debouncer:
  479. PUSH {R8}
  480. LDR R8, =#10 ;@ CHANGE
  481. B debounce
  482. debounce:
  483. SUBS R8, R8, #1
  484. BNE debounce
  485. MOV R8, #0
  486. POP {R8}
  487. MOV R15, R14
  488.  
  489. zeroZmem:
  490. MOV R11, #0
  491. LDR R10, =#4 ;@ CHANGE to 2mill
  492. BL deleteMem
  493. MOV R11, #0
  494. MOV R10, #0
  495. MOV R8, #0
  496. B switch7On
  497.  
  498. deleteMem:
  499. PUSH {R8, R10, R11}
  500. LDR R7, = Zmemory
  501. LDRB R8, =0
  502. STRB R8, [R7, R11]
  503. ADD R11, R11, #1
  504. CMP R10, R11
  505. BNE deleteMem
  506. POP {R8, R10, R11}
  507. MOV R15, R14
  508.  
  509. ---------------------------------------------------------------------------------------------------------------------------------------
  510. .global asm_main
  511. .align 4
  512. Zmemory: .space 2000000
  513. .align 4
  514.  
  515. asm_main:
  516. LDR R0, =# 0xE0001004
  517. LDR R9, =# 0x020
  518. STR R9, [R0]
  519. LDR R1, =# 0xE0001018
  520. LDR R9, =# 62
  521. STR R9, [R1]
  522. LDR R2, =# 0xE0001034
  523. LDR R9, =# 6
  524. STR R9, [R2]
  525. LDR R3, =# 0xE0001000
  526. LDR R9, =# 0x117
  527. STR R9, [R3]
  528. LDR R5, =# 0xE0001030
  529. MOV R0, #0
  530. MOV R1, #0
  531. MOV R2, #0
  532. MOV R3, #0
  533. MOV R11, #0
  534. LDR R7, = Zmemory
  535.  
  536. LDR R9,=#0x41220000
  537.  
  538.  
  539. /*initialdelete:
  540. BL deleteMem
  541. B switch7On*/
  542.  
  543. switch7On:
  544. LDR R9,=#0x41220000
  545. LDR R8, [R9] ;@ loads switch values
  546. BL debouncer
  547. TST R8, #128 ;@ tests if SW7 on on
  548. BNE check ;@ if SW7 on, check UART status
  549. ;@MOV R1, #0
  550. ;@STR R1, [R5]
  551. BEQ ResetRegisters ;@ if SW7 off, reset registers and go to switch off mode
  552.  
  553. check:
  554. LDR R9, =# 0xE000102C
  555. LDR R8, [R9] ;@ Loads Status Reg. into R7
  556. LSR R8, #1 ;@ LSR to get bit that matters
  557. TST R8, #1 ;@ if bit is 0, there is mem to be read, if 1, it is empty
  558. BNE switch7On ;@ If UART empty, recheck switch value
  559. BEQ read ;@ If not empty, store byte into Zmem
  560.  
  561. read:
  562. LDRB R8, [R5] ;@ Load value from UART into R6
  563. STRB R8, [R7, R4] ;@ Store byte into offset of Zmem
  564. ADD R4, R4, #1 ;@ R10 will be amount of bytes stored
  565. B switch7On ;@ Check Switches
  566.  
  567. ResetRegisters:
  568. MOV R7, #0
  569. MOV R8, #0
  570. MOV R11,#0
  571. B Switch7Off
  572.  
  573. Switch7Off:
  574. LDR R9,=#0x41220000
  575. LDR R8, [R9] ;@ Load Switch value
  576. BL debouncer
  577. TST R8, #128
  578. BNE zeroZmem ;@ If switch goes back on, zero out mem, restart
  579. BEQ executeZmem ;@ If switch still zero, execute code
  580.  
  581. executeZmem:
  582. LDR R7, = Zmemory
  583. LDRB R8, [R7,R11] ;@ Execute values in Zmem
  584. BL CheckUART
  585. STRB R8, [R5] ;@ Push stored value onto UART
  586. CMP R4, R11 ;@ Compares new counter to total bytes, if equal, Zmem done executing
  587. BEQ DoneExecuting
  588. ADD R11, R11, #1
  589. BNE Switch7Off
  590.  
  591. CheckUART:
  592. PUSH {R8, R9}
  593. LDR R9, =# 0xE000102C
  594. LDR R8, [R9] ;@ Checks if UART is able to take bits of memory, or if its full
  595. LSR R8, #13
  596. TST R8, #1
  597. BNE CheckUART
  598. POP {R8, R9}
  599. MOV R15, R14
  600.  
  601.  
  602. DoneExecuting:
  603. LDR R9,=#0x41220000
  604. LDR R8, [R9] ;@ Load Switch value
  605. BL debouncer
  606. TST R8, #128
  607. BNE zeroZmem ;@ If switch goes back on, zero out mem, restart
  608. BEQ DoneExecuting ;@ If switch still zero, execute code
  609.  
  610. debouncer:
  611. PUSH {R8}
  612. LDR R8, =#300 ;@ CHANGE
  613. B debounce
  614. debounce:
  615. SUBS R8, R8, #1
  616. BNE debounce
  617. MOV R8, #0
  618. POP {R8}
  619. MOV R15, R14
  620.  
  621. zeroZmem:
  622. MOV R11, #0
  623. LDR R10, =#2000 ;@ CHANGE to 2mill
  624. BL deleteMem
  625. MOV R11, #0
  626. MOV R10, #0
  627. MOV R8, #0
  628. B switch7On
  629.  
  630. deleteMem:
  631. PUSH {R8, R10, R11}
  632. LDR R7, = Zmemory
  633. LDRB R8, =0
  634. STRB R8, [R7, R11]
  635. ADD R11, R11, #1
  636. CMP R10, R11
  637. BNE deleteMem
  638. POP {R8, R10, R11}
  639. MOV R15, R14
  640. ----------------------------------------------------------------------------------------------------------------------------
  641. .global asm_main
  642. .align 4
  643. Zmemory: .space 2000000
  644. .align 4
  645.  
  646. asm_main:
  647. LDR R0, =# 0xE0001004
  648. LDR R9, =# 0x020
  649. STR R9, [R0]
  650. LDR R1, =# 0xE0001018
  651. LDR R9, =# 62
  652. STR R9, [R1]
  653. LDR R2, =# 0xE0001034
  654. LDR R9, =# 6
  655. STR R9, [R2]
  656. LDR R3, =# 0xE0001000
  657. LDR R9, =# 0x117
  658. STR R9, [R3]
  659. LDR R5, =# 0xE0001030
  660. MOV R0, #0
  661. MOV R1, #0
  662. MOV R2, #0
  663. MOV R3, #0
  664. MOV R11, #0
  665. LDR R7, = Zmemory
  666.  
  667. LDR R9,=#0x41220000
  668.  
  669.  
  670. /*initialdelete:
  671. BL deleteMem
  672. B switch7On*/
  673.  
  674. switch7On:
  675. LDR R9,=#0x41220000
  676. LDR R8, [R9] ;@ loads switch values
  677. BL debouncer
  678. TST R8, #128 ;@ tests if SW7 on on
  679. BNE check ;@ if SW7 on, check UART status
  680. ;@MOV R1, #0
  681. ;@STR R1, [R5]
  682. BEQ ResetRegisters ;@ if SW7 off, reset registers and go to switch off mode
  683.  
  684. check:
  685. LDR R9, =# 0xE000102C
  686. LDR R8, [R9] ;@ Loads Status Reg. into R7
  687. LSR R8, #1 ;@ LSR to get bit that matters
  688. TST R8, #1 ;@ if bit is 0, there is mem to be read, if 1, it is empty
  689. BNE switch7On ;@ If UART empty, recheck switch value
  690. BEQ read ;@ If not empty, store byte into Zmem
  691.  
  692. read:
  693. LDRB R8, [R5] ;@ Load value from UART into R6
  694. STRB R8, [R7, R4] ;@ Store byte into offset of Zmem
  695. ADD R4, R4, #1 ;@ R10 will be amount of bytes stored
  696. B switch7On ;@ Check Switches
  697.  
  698. ResetRegisters:
  699. MOV R7, #0
  700. MOV R8, #0
  701. MOV R11,#0
  702. B Switch7Off
  703.  
  704. Switch7Off:
  705. LDR R9,=#0x41220000
  706. LDR R8, [R9] ;@ Load Switch value
  707. BL debouncer
  708. TST R8, #128
  709. BNE zeroZmem ;@ If switch goes back on, zero out mem, restart
  710. BEQ executeZmem ;@ If switch still zero, execute code
  711.  
  712. executeZmem:
  713. LDR R7, = Zmemory
  714. LDRB R8, [R7,R11] ;@ Execute values in Zmem
  715. BL CheckUART
  716.  
  717.  
  718.  
  719.  
  720. ;@ this is where we decide what to output
  721. STRB R8, [R5] ;@ Push stored value onto UART
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728. CMP R4, R11 ;@ Compares new counter to total bytes, if equal, Zmem done executing
  729. BEQ DoneExecuting
  730. ADD R11, R11, #1
  731. BNE Switch7Off
  732.  
  733. CheckUART:
  734. PUSH {R8, R9}
  735. LDR R9, =# 0xE000102C
  736. LDR R8, [R9] ;@ Checks if UART is able to take bits of memory, or if its full
  737. LSR R8, #13
  738. TST R8, #1
  739. BNE CheckUART
  740. POP {R8, R9}
  741. MOV R15, R14
  742.  
  743.  
  744. DoneExecuting:
  745. LDR R9,=#0x41220000
  746. LDR R8, [R9] ;@ Load Switch value
  747. BL debouncer
  748. TST R8, #128
  749. BNE zeroZmem ;@ If switch goes back on, zero out mem, restart
  750. BEQ DoneExecuting ;@ If switch still zero, execute code
  751.  
  752. debouncer:
  753. PUSH {R8}
  754. LDR R8, =#25000 ;@ CHANGE
  755. B debounce
  756. debounce:
  757. SUBS R8, R8, #1
  758. BNE debounce
  759. MOV R8, #0
  760. POP {R8}
  761. LDR R9,=#0x41220000
  762. LDR R8, [R9] ;@ Load Switch value
  763. MOV R15, R14
  764.  
  765. zeroZmem:
  766. MOV R11, #0
  767. LDR R10, =#2000 ;@ CHANGE to 2mill
  768. BL deleteMem
  769. MOV R11, #0
  770. MOV R10, #0
  771. MOV R8, #0
  772. MOV R4, #0
  773. B switch7On
  774.  
  775. deleteMem:
  776. PUSH {R8, R10, R11}
  777. LDR R7, = Zmemory
  778. LDRB R8, =0
  779. STRB R8, [R7, R11]
  780. ADD R11, R11, #1
  781. CMP R10, R11
  782. BNE deleteMem
  783. POP {R8, R10, R11}
  784. MOV R15, R14
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement