Advertisement
Guest User

Untitled

a guest
Dec 3rd, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 38.54 KB | None | 0 0
  1. #include <msp430.h>
  2. ;-------------------------------------------------------------------------------
  3. ORG 0C000h ; Program Start
  4. ;-------------------------------------------------------------------------------
  5. RESET mov #400h , SP ; Initialize stackpointer
  6. StopWDT mov #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT
  7. ; Code For Setting PIN input and outputs
  8. SetupP1 bis.b #0xFF,&P1DIR ; ALL P1 as output for LCD
  9. bic.b #0xFF,P1OUT
  10. SetupP2 bis.b #00000011b,&P2DIR ; ALL P2 as output
  11. bic.b #00000011b,P2OUT
  12. bis.b #00011000b,&P2IE ; Enable Interupt on
  13. ; P2.4 and P2.3
  14. bis.b #0x38,&P1OUT ;Setup 8-bit mode
  15. call #SETENABLE ;Enable pulse
  16. bic.b #0xFF,&P1OUT ;Clear P1
  17.  
  18. bis.b #0x01,&P1OUT ;Clear LCD
  19. call #SETENABLE ;Enable Pulse
  20. bic.b #0xFF,&P1OUT ;Clear
  21.  
  22. bis.b #0x10,&P1OUT ;Set Cursor
  23. call #SETENABLE ;Enable Pulse
  24. bic.b #0xFF,&P1OUT ;Clear
  25. ;
  26. bis.b #0x0C,&P1OUT ;Display ON
  27. call #SETENABLE ;Enable Pulse
  28. bic.b #0xFF,&P1OUT ;Clear
  29. jmp Game
  30.  
  31. ;-------------------------------------------------------------------------------
  32. ; GameOver State
  33. ; Logic that prints the game over texts and restarts the game
  34. ;-------------------------------------------------------------------------------
  35. GameOver call #ClrLine2
  36. bis.b #0x47,&P1OUT
  37. call #SETENABLE
  38. bic.b #0xFF,&P1OUT
  39. ;--------------------------a
  40. bis.b #0x61,&P1OUT
  41. call #SETENABLE
  42. bic.b #0xFF,&P1OUT
  43. ;--------------------------m
  44. bis.b #0x6D,&P1OUT
  45. call #SETENABLE
  46. bic.b #0xFF,&P1OUT
  47. ;--------------------------e
  48. bis.b #0x65,&P1OUT
  49. call #SETENABLE
  50. bic.b #0xFF,&P1OUT
  51. ;--------------------------space
  52. bis.b #0x20,&P1OUT
  53. call #SETENABLE
  54. bic.b #0xFF,&P1OUT
  55. ;--------------------------O
  56. bis.b #0x4F,&P1OUT
  57. call #SETENABLE
  58. bic.b #0xFF,&P1OUT
  59. ;--------------------------w
  60. bis.b #0x76,&P1OUT
  61. call #SETENABLE
  62. bic.b #0xFF,&P1OUT
  63. ;--------------------------e
  64. bis.b #0x65,&P1OUT
  65. call #SETENABLE
  66. bic.b #0xFF,&P1OUT
  67. ;--------------------------r
  68. bis.b #0x72,&P1OUT
  69. call #SETENABLE
  70. bic.b #0xFF,&P1OUT
  71. mov #20,R15
  72. GameOverLoop call #Delay
  73. dec R15
  74. jnz GameOverLoop
  75. jmp RESET
  76. ;-------------------------------------------------------------------------------
  77. ; Victory State
  78. ; Displays you win message in LCD and resets game
  79. ;-------------------------------------------------------------------------------
  80. Victory call #ClrLine2
  81. ;--------------------------Y
  82. bis.b #0x59,&P1OUT
  83. call #SETENABLE
  84. bic.b #0xFF,&P1OUT
  85. ;--------------------------o
  86. bis.b #0x6F,&P1OUT
  87. call #SETENABLE
  88. bic.b #0xFF,&P1OUT
  89. ;--------------------------u
  90. bis.b #0x75,&P1OUT
  91. call #SETENABLE
  92. bic.b #0xFF,&P1OUT
  93. ;--------------------------space
  94. bis.b #0x20,&P1OUT
  95. call #SETENABLE
  96. bic.b #0xFF,&P1OUT
  97. ;--------------------------w
  98. bis.b #0x77,&P1OUT
  99. call #SETENABLE
  100. bic.b #0xFF,&P1OUT
  101. ;--------------------------i
  102. bis.b #0x69,&P1OUT
  103. call #SETENABLE
  104. bic.b #0xFF,&P1OUT
  105. ;--------------------------n
  106. bis.b #0x6E,&P1OUT
  107. call #SETENABLE
  108. bic.b #0xFF,&P1OUT
  109. ;--------------------------!
  110. bis.b #0x21,&P1OUT
  111. call #SETENABLE
  112. bic.b #0xFF,&P1OUT
  113. mov #10,R6
  114. mov #20,R15
  115. VictoryLoop call #Delay
  116. dec R15
  117. jnz VictoryLoop
  118. jmp RESET
  119. ;-------------------------------------------------------------------------------
  120. ; Game Initial State
  121. ; Logic that configures the registers that will be used in
  122. ; the rest of the code and initiates Difficulty toggle
  123. ; Return 0 to R6
  124. ; Return 7 to R7--Default Reference Value--
  125. ; Return 0 to R15--Counter for difficulty toggle--
  126. ; Return Multiplier to R4
  127. ;-------------------------------------------------------------------------------
  128. Game clr R6
  129. mov #7,R7 ; Initial Game Setup
  130. clr R8
  131. clr R5
  132. mov #0xFF,R9 ; Clr Game Start Flag
  133. clr R11 ;Setup Win Lose Value
  134. clr R15
  135. eint
  136. LSelect mov #1,R6
  137. bic.b #0x2,&P2OUT ;EnableIR
  138. call #FirstLine
  139. bis.b #0x2,&P2OUT ;Enable Data Register
  140. call #DiffTextPrint
  141. DefaultDiff call #ClrLine2
  142. call #EasyText
  143. mov #4, R4 ; Set Easy Level Multiplier
  144. inc R15
  145. MainLoop cmp #1, R9
  146. jne MainLoop
  147. ;-------------------------------------------------------------------------------
  148. ; Level0 Transistor
  149. ; Configure R6 as a status flag for button usage, configures R10
  150. ; with the losing difference, sets R9 as active game flag
  151. ; displays current state namein the LCD.
  152. ;-------------------------------------------------------------------------------
  153. LTRANSISTOR mov #1,R6
  154. mov #4,R10
  155. mov #0,R9
  156. call #ClrLine2
  157. call #ClrLine1
  158. ;---------------------------T
  159. bis.b #0x54,&P1OUT
  160. call #SETENABLE
  161. bic.b #0xFF,&P1OUT
  162. ;--------------------------a
  163. bis.b #0x61,&P1OUT
  164. call #SETENABLE
  165. bic.b #0xFF,&P1OUT
  166. ;---------------------------r
  167. bis.b #0x72,&P1OUT
  168. call #SETENABLE
  169. bic.b #0xFF,&P1OUT
  170. ;--------------------------i
  171. bis.b #0x69,&P1OUT
  172. call #SETENABLE
  173. bic.b #0xFF,&P1OUT
  174. ;--------------------------K
  175. bis.b #0x6B,&P1OUT
  176. call #SETENABLE
  177. bic.b #0xFF,&P1OUT
  178. call #GameCounter
  179. call #GameController
  180. cmp #1,R11
  181. jeq ToL1
  182. call #GameOver
  183. ToL1 jmp LNAND
  184. ;-------------------------------------------------------------------------------
  185. ; Level1 NAND
  186. ; Configure R6 as a status flag for button usage, configures R10
  187. ; with the losing difference, sets R9 as active game flag
  188. ; displays current state namein the LCD.
  189. ;-------------------------------------------------------------------------------
  190. LNAND mov #1,R6
  191. mov #4,R10
  192. mov #0,R9
  193. call #ClrLine1
  194. ;--------------------------N
  195. bis.b #0x4E,&P1OUT
  196. call #SETENABLE
  197. bic.b #0xFF,&P1OUT
  198. ;--------------------------A
  199. bis.b #0x41,&P1OUT
  200. call #SETENABLE
  201. bic.b #0xFF,&P1OUT
  202. ;--------------------------N
  203. bis.b #0x4E,&P1OUT
  204. call #SETENABLE
  205. bic.b #0xFF,&P1OUT
  206. ;--------------------------D
  207. bis.b #0x44,&P1OUT
  208. call #SETENABLE
  209. bic.b #0xFF,&P1OUT
  210.  
  211. call #GameCounter
  212. call #GameController
  213. cmp #1,R11
  214. jeq ToL2
  215. call #GameOver
  216. ToL2 jmp LFLIPFLOP
  217. ;-------------------------------------------------------------------------------
  218. ; Level2 FLIP FLOP
  219. ; Configure R6 as a status flag for button usage, configures R10
  220. ; with the losing difference, sets R9 as active game flag
  221. ; displays current state namein the LCD.
  222. ;-------------------------------------------------------------------------------
  223. LFLIPFLOP mov #1,R6
  224. mov #3,R10
  225. mov #0,R9
  226. call #ClrLine1
  227. ;--------------------------F
  228. bis.b #0x46,&P1OUT
  229. call #SETENABLE
  230. bic.b #0xFF,&P1OUT
  231. ;--------------------------l
  232. bis.b #0x6C,&P1OUT
  233. call #SETENABLE
  234. bic.b #0xFF,&P1OUT
  235. ;--------------------------i
  236. bis.b #0x69,&P1OUT
  237. call #SETENABLE
  238. bic.b #0xFF,&P1OUT
  239. ;--------------------------p
  240. bis.b #0x70,&P1OUT
  241. call #SETENABLE
  242. bic.b #0xFF,&P1OUT
  243. ;--------------------------space
  244. bis.b #0x10,&P1OUT
  245. call #SETENABLE
  246. bic.b #0xFF,&P1OUT
  247. ;--------------------------F
  248. bis.b #0x46,&P1OUT
  249. call #SETENABLE
  250. bic.b #0xFF,&P1OUT
  251. ;--------------------------l
  252. bis.b #0x6C,&P1OUT
  253. call #SETENABLE
  254. bic.b #0xFF,&P1OUT
  255. ;--------------------------o
  256. bis.b #0x6F,&P1OUT
  257. call #SETENABLE
  258. bic.b #0xFF,&P1OUT
  259. ;--------------------------p
  260. bis.b #0x70,&P1OUT
  261. call #SETENABLE
  262. bic.b #0xFF,&P1OUT
  263.  
  264. call #GameCounter
  265. call #GameController
  266.  
  267. cmp #1,R11
  268. jne LNAND
  269. jmp LCOUNTER
  270. ;-------------------------------------------------------------------------------
  271. ; Level3 REGISTER
  272. ; Configure R6 as a status flag for button usage, configures R10
  273. ; with the losing difference, sets R9 as active game flag
  274. ; displays current state namein the LCD.
  275. ;-------------------------------------------------------------------------------
  276. LREGISTER mov #1,R6
  277. mov #3,R10
  278. mov #0,R9
  279. call #ClrLine1
  280. ;--------------------------R
  281. bis.b #0x52,&P1OUT
  282. call #SETENABLE
  283. bic.b #0xFF,&P1OUT
  284. ;--------------------------e
  285. bis.b #0x65,&P1OUT
  286. call #SETENABLE
  287. bic.b #0xFF,&P1OUT
  288. ;--------------------------g
  289. bis.b #0x67,&P1OUT
  290. call #SETENABLE
  291. bic.b #0xFF,&P1OUT
  292. ;--------------------------i
  293. bis.b #0x69,&P1OUT
  294. call #SETENABLE
  295. bic.b #0xFF,&P1OUT
  296. ;--------------------------s
  297. bis.b #0x73,&P1OUT
  298. call #SETENABLE
  299. bic.b #0xFF,&P1OUT
  300. ;--------------------------t
  301. bis.b #0x74,&P1OUT
  302. call #SETENABLE
  303. bic.b #0xFF,&P1OUT
  304. ;--------------------------e
  305. bis.b #0x65,&P1OUT
  306. call #SETENABLE
  307. bic.b #0xFF,&P1OUT
  308. ;--------------------------r
  309. bis.b #0x72,&P1OUT
  310. call #SETENABLE
  311. bic.b #0xFF,&P1OUT
  312.  
  313. call #GameCounter
  314. call #GameController
  315. cmp #1,R11
  316. jne LFLIPFLOP
  317. jmp LCOUNTER
  318. ;-------------------------------------------------------------------------------
  319. ; Level4 COUNTER
  320. ; Configure R6 as a status flag for button usage, configures R10
  321. ; with the losing difference, sets R9 as active game flag
  322. ; displays current state namein the LCD.
  323. ;-------------------------------------------------------------------------------
  324. LCOUNTER mov #1,R6
  325. mov #3,R10
  326. mov #0,R9
  327. call #ClrLine1
  328. ;--------------------------C
  329. bis.b #0x43,&P1OUT
  330. call #SETENABLE
  331. bic.b #0xFF,&P1OUT
  332. ;--------------------------o
  333. bis.b #0x6F,&P1OUT
  334. call #SETENABLE
  335. bic.b #0xFF,&P1OUT
  336. ;--------------------------u
  337. bis.b #0x75,&P1OUT
  338. call #SETENABLE
  339. bic.b #0xFF,&P1OUT
  340. ;--------------------------n
  341. bis.b #0x6E,&P1OUT
  342. call #SETENABLE
  343. bic.b #0xFF,&P1OUT
  344. ;--------------------------t
  345. bis.b #0x74,&P1OUT
  346. call #SETENABLE
  347. bic.b #0xFF,&P1OUT
  348. ;--------------------------e
  349. bis.b #0x65,&P1OUT
  350. call #SETENABLE
  351. bic.b #0xFF,&P1OUT
  352. ;--------------------------r
  353. bis.b #0x72,&P1OUT
  354. call #SETENABLE
  355. bic.b #0xFF,&P1OUT
  356.  
  357. call #GameCounter
  358. call #GameController
  359. cmp #1,R11
  360. jne LREGISTER
  361. jmp LALU
  362. ;-------------------------------------------------------------------------------
  363. ; Level5 ALU
  364. ; Configure R6 as a status flag for button usage, configures R10
  365. ; with the losing difference, sets R9 as active game flag
  366. ; displays current state namein the LCD.
  367. ;-------------------------------------------------------------------------------
  368. LALU mov #1,R6
  369. mov #2,R10
  370. mov #0,R9
  371. call #ClrLine1
  372. ;--------------------------A
  373. bis.b #0x41,&P1OUT
  374. call #SETENABLE
  375. bic.b #0xFF,&P1OUT
  376. ;--------------------------L
  377. bis.b #0x4C,&P1OUT
  378. call #SETENABLE
  379. bic.b #0xFF,&P1OUT
  380. ;--------------------------U
  381. bis.b #0x55,&P1OUT
  382. call #SETENABLE
  383. bic.b #0xFF,&P1OUT
  384.  
  385. call #GameCounter
  386. call #GameController
  387. cmp #1,R11
  388. jne LREGISTER
  389. jmp LCPU
  390. ;-------------------------------------------------------------------------------
  391. ; Level6 CPU
  392. ; Configure R6 as a status flag for button usage, configures R10
  393. ; with the losing difference, sets R9 as active game flag
  394. ; displays current state namein the LCD.
  395. ;-------------------------------------------------------------------------------
  396. LCPU mov #1,R6
  397. mov #0,R10
  398. mov #0,R9
  399. call #ClrLine1
  400. ;--------------------------C
  401. bis.b #0x43,&P1OUT
  402. call #SETENABLE
  403. bic.b #0xFF,&P1OUT
  404. ;--------------------------P
  405. bis.b #0x50,&P1OUT
  406. call #SETENABLE
  407. bic.b #0xFF,&P1OUT
  408. ;--------------------------U
  409. bis.b #0x55,&P1OUT
  410. call #SETENABLE
  411. bic.b #0xFF,&P1OUT
  412.  
  413. call #GameCounter
  414. call #GameController
  415. cmp #1,R11
  416. jne LCOUNTER
  417. jmp LMCU
  418. ;-------------------------------------------------------------------------------
  419. ; Level7 MCU
  420. ; Print MCU text in LCD
  421. ;-------------------------------------------------------------------------------
  422. LMCU nop
  423. ;--------------------------M
  424. bis.b #0x4D,&P1OUT
  425. call #SETENABLE
  426. bic.b #0xFF,&P1OUT
  427. ;--------------------------C
  428. bis.b #0x43,&P1OUT
  429. call #SETENABLE
  430. bic.b #0xFF,&P1OUT
  431. ;--------------------------U
  432. bis.b #0x55,&P1OUT
  433. call #SETENABLE
  434. bic.b #0xFF,&P1OUT
  435. call #Victory
  436. ;-------------------------------------------------------------------------------
  437. ; Interrupt Service Rutine
  438. ; Performs logic for verifying if either red or white button
  439. ; was pressed the counter and selecting defficulty
  440. ; while in toggle difficulty mode.
  441. ; Returns a 0 to R6 meaning that red button was pressed and
  442. ; game counter should stop. Also stores the number currently
  443. ; displayed in the LCD in R5 for GameController subroutine use
  444. ;-------------------------------------------------------------------------------
  445. PBISR call #Delay
  446. RedButton bit.b #00010000b,&P2IFG
  447. jnc WhiteBtn
  448. clr R6
  449. mov #1,R9
  450. ; mov R8,R5
  451. clr R15
  452. jmp INTEROUT
  453. WhiteBtn call #SelectButton
  454. INTEROUT bic.b #00011000b,&P2IFG ; clear interrupt flag
  455. reti ; return from ISR
  456. ;-------------------------------------------------------------------------------
  457. ; Select Button Logic
  458. ; Logic for toggling between difficulties. Sets R6 to 0 for
  459. ;-------------------------------------------------------------------------------
  460. SelectButton clr R6
  461. cmp #0,R9
  462. jne StartToggle
  463. DoReset call #RESET
  464. StartToggle cmp #0,R15
  465. jeq TextPrint1
  466. cmp #1,R15
  467. jeq TextPrint2
  468. cmp #2,R15
  469. jeq TextPrint3
  470. TextPrint1 call #ClrLine2
  471. call #EasyText
  472. mov #8, R4 ; Set Easy Level Multiplier
  473. inc R15
  474. jmp IFELOUT
  475. TextPrint2 call #ClrLine2
  476. call #MediumText
  477. mov #2, R4 ; Set Medium Level Multiplier
  478. inc R15
  479. jmp IFELOUT
  480. TextPrint3 call #ClrLine2
  481. call #HardText
  482. mov #1, R4 ; Set Hard Level Multiplier
  483. mov #0,R15
  484. jmp IFELOUT
  485. IFELOUT ret
  486. ;-------------------------------------------------------------------------------
  487. ; Subroutine GameCounter
  488. ; Logic for Incrementing the game counter and displayin the text
  489. ; in the LCD. Receives R6 value as flag for breaking out of the
  490. ; counter loop. Recieves a value stored in R4 which determines the
  491. ; difficulty multiplier for the delay.
  492. ; R4 value is set in the WhiteButton subroutine.
  493. ; Returns value to be printed in LCD in R12
  494. ;-------------------------------------------------------------------------------
  495. GameCounter bic.b #0x2,&P2OUT ;Enable Instruction Register
  496. call #SecondLine
  497. bis.b #0x2,&P2OUT ;Enable Data Register
  498. mov.b #0, R8
  499. mov.b #0x2F,R12
  500. Print0_9 bic.b #0x2,&P2OUT
  501. call #SecondLine
  502. bis.b #0x2,&P2OUT
  503. mov.b R4,R13
  504. call #LCDNumberPrint
  505. bit R6,R6
  506. jz LoopOut
  507. inc R8
  508. cmp #10,R8
  509. jne Print0_9
  510. mov.b #0x40, R12
  511. PrintA_F bic.b #0x2,&P2OUT
  512. call #SecondLine
  513. bis.b #0x2,&P2OUT
  514. mov.b R4,R13
  515. call #LCDNumberPrint
  516. bit R6,R6
  517. jz LoopOut
  518. inc R8
  519. cmp #12, R8
  520. jne PrintA_F
  521. jmp GameCounter
  522. LoopOut dec R5
  523. ret
  524. ;--------------------------------------------------------
  525. ; Subroutine LCDNumberPrint
  526. ; Receives byte value of text to be displayed in LCD
  527. ;--------------------------------------------------------
  528. LCDNumberPrint add.b #1b,R12
  529. mov.b R12, P1OUT
  530. call #CounterDataEn
  531. bic.b #0xFF,&P1OUT
  532. PrintOut ret
  533. ;--------------------------------------------------------
  534. ; Subroutine Counter Data Enable
  535. ;--------------------------------------------------------
  536. CounterDataEn bis.b #1,&P2OUT
  537. call #LevelDelay
  538. bic.b #1,&P2OUT
  539. ret
  540. ;--------------------------------------------------------
  541. ; Subroutine LevelDelay
  542. ; Receives level multiplier in R13 and performs delay based on the
  543. ; multiplier provided by the selected difficulty
  544. ;--------------------------------------------------------
  545. LevelDelay mov #10000, R14
  546. DelayLoop nop
  547. nop
  548. mov R8,R5
  549. bit R6,R6
  550. jz DelayLoopOut
  551. dec R14
  552. jnz DelayLoop
  553. dec R13 ; Perform delay x times to achieve Diifculty Delay
  554. jnz LevelDelay
  555. DelayLoopOut ret
  556. ;--------------------------------------------------------
  557. ; Subroutine GameController
  558. ; Performs Absolute value logic and determines if player wins or
  559. ; loses in the current level
  560. ; Receives default reference value in R7
  561. ; Recieves user input value from R5
  562. ; Return 1 to R11 if user wins else 0
  563. ;--------------------------------------------------------
  564. GameController cmp R7,R5
  565. jnc CMPELSE
  566. sub R7,R5
  567. mov R5,R9
  568. jmp WINCHECK
  569. CMPELSE mov R7,R9
  570. sub R5,R9
  571. WINCHECK cmp R10,R9
  572. jc ZEROCHECK
  573. mov #1,R11
  574. jmp ControllerEnd
  575. ZEROCHECK cmp R10,R9
  576. jne LOSE
  577. mov #1,R11
  578. jmp ControllerEnd
  579. LOSE mov #0,R11
  580. ControllerEnd ret
  581. ;--------------------------------------------------------
  582. ; Subroutine Set LCD to First Line
  583. ;--------------------------------------------------------
  584. FirstLine bis.b #0x80,&P1OUT ;Set first Character of first line
  585. call #SETENABLE ;Enable Pulse
  586. bic.b #0xFF,&P1OUT ;Clear
  587. ret
  588.  
  589. ;--------------------------------------------------------
  590. ; Subroutine Set LCD to Second Line
  591. ;--------------------------------------------------------
  592. SecondLine bis.b #0xC0,&P1OUT ;Set first Character of Second line
  593. call #SETENABLE ;Enable Pulse
  594. bic.b #0xFF,&P1OUT ;Clear
  595. ret
  596. ;--------------------------------------------------------
  597. ; Subroutine Call EasyText
  598. ;--------------------------------------------------------
  599. ;-------------------------E
  600. EasyText bis.b #0x45,&P1OUT
  601. call #SETENABLE
  602. bic.b #0xFF,&P1OUT
  603. ;-------------------------a
  604. bis.b #0x61,&P1OUT
  605. call #SETENABLE
  606. bic.b #0xFF,&P1OUT
  607. ;-------------------------S
  608. mov.b #0x73,&P1OUT
  609. call #SETENABLE
  610. bic.b #0xFF,&P1OUT
  611. ;-------------------------y
  612. bis.b #0x79,&P1OUT
  613. call #SETENABLE
  614. bic.b #0xFF,&P1OUT
  615. ret
  616.  
  617. ;--------------------------------------------------------
  618. ; Subroutine Call MediumText
  619. ;--------------------------------------------------------
  620.  
  621. ;-------------------------M
  622. MediumText bis.b #0x4D,&P1OUT
  623. call #SETENABLE
  624. bic.b #0xFF,&P1OUT
  625. ;-------------------------e
  626. bis.b #0x65,&P1OUT
  627. call #SETENABLE
  628. bic.b #0xFF,&P1OUT
  629. ;-------------------------d
  630. mov.b #0x64,&P1OUT
  631. call #SETENABLE
  632. bic.b #0xFF,&P1OUT
  633. ;-------------------------i
  634. bis.b #0x69,&P1OUT
  635. call #SETENABLE
  636. bic.b #0xFF,&P1OUT
  637. ;-------------------------u
  638. bis.b #0x75,&P1OUT
  639. call #SETENABLE
  640. bic.b #0xFF,&P1OUT
  641. ;-------------------------m
  642. bis.b #0x6D,&P1OUT
  643. call #SETENABLE
  644. bic.b #0xFF,&P1OUT
  645. ret
  646. ;--------------------------------------------------------
  647. ; Subroutine Call HardText
  648. ;--------------------------------------------------------
  649. ;-------------------------H
  650. HardText bis.b #0x48,&P1OUT
  651. call #SETENABLE
  652. bic.b #0xFF,&P1OUT
  653. ;-------------------------a
  654. bis.b #0x61,&P1OUT
  655. call #SETENABLE
  656. bic.b #0xFF,&P1OUT
  657. ;-------------------------r
  658. mov.b #0x72,&P1OUT
  659. call #SETENABLE
  660. bic.b #0xFF,&P1OUT
  661. ;-------------------------d
  662. bis.b #0x64,&P1OUT
  663. call #SETENABLE
  664. bic.b #0xFF,&P1OUT
  665. ret
  666. ;-------------------------------------------------------------------------------
  667. ; ClrLine1
  668. ;-------------------------------------------------------------------------------
  669. ClrLine1 bic.b #0x2,&P2OUT ;Enable Instruction Register
  670. call #FirstLine
  671. bis.b #0x2,&P2OUT ;Enable Data Register
  672. call #ClearLine
  673. bic.b #0x2,&P2OUT ;Enable Instruction Register
  674. call #FirstLine
  675. bis.b #0x2,&P2OUT ;Enable Data Register
  676. ret
  677. ;-------------------------------------------------------------------------------
  678. ; ClrLine2
  679. ;-------------------------------------------------------------------------------
  680. ClrLine2 bic.b #0x2,&P2OUT ;Enable Instruction Register
  681. call #SecondLine
  682. bis.b #0x2,&P2OUT ;Enable Data Register
  683. call #ClearLine
  684. bic.b #0x2,&P2OUT ;Enable Instruction Register
  685. call #SecondLine
  686. bis.b #0x2,&P2OUT ;Enable Data Register
  687. ret
  688. ;--------------------------------------------------------
  689. ; Subroutine Clear Line
  690. ;--------------------------------------------------------
  691. ClearLine nop
  692. ;-------------------------space
  693. bis.b #0x20,&P1OUT
  694. call #SETENABLE
  695. bic.b #0xFF,&P1OUT
  696. ;-------------------------space
  697. bis.b #0x20,&P1OUT
  698. call #SETENABLE
  699. bic.b #0xFF,&P1OUT
  700. ;-------------------------space
  701. bis.b #0x20,&P1OUT
  702. call #SETENABLE
  703. bic.b #0xFF,&P1OUT
  704. ;-------------------------space
  705. bis.b #0x20,&P1OUT
  706. call #SETENABLE
  707. bic.b #0xFF,&P1OUT
  708. ;-------------------------space
  709. bis.b #0x20,&P1OUT
  710. call #SETENABLE
  711. bic.b #0xFF,&P1OUT
  712. ;-------------------------space
  713. bis.b #0x20,&P1OUT
  714. call #SETENABLE
  715. bic.b #0xFF,&P1OUT
  716. ;-------------------------space
  717. bis.b #0x20,&P1OUT
  718. call #SETENABLE
  719. bic.b #0xFF,&P1OUT
  720. ;-------------------------space
  721. bis.b #0x20,&P1OUT
  722. call #SETENABLE
  723. bic.b #0xFF,&P1OUT
  724. ;-------------------------space
  725. bis.b #0x20,&P1OUT
  726. call #SETENABLE
  727. bic.b #0xFF,&P1OUT
  728. ;-------------------------space
  729. bis.b #0x20,&P1OUT
  730. call #SETENABLE
  731. bic.b #0xFF,&P1OUT
  732. ;-------------------------space
  733. bis.b #0x20,&P1OUT
  734. call #SETENABLE
  735. bic.b #0xFF,&P1OUT
  736. ;-------------------------space
  737. bis.b #0x20,&P1OUT
  738. call #SETENABLE
  739. bic.b #0xFF,&P1OUT
  740. ;-------------------------space
  741. bis.b #0x20,&P1OUT
  742. call #SETENABLE
  743. bic.b #0xFF,&P1OUT
  744. ;-------------------------space
  745. bis.b #0x20,&P1OUT
  746. call #SETENABLE
  747. bic.b #0xFF,&P1OUT
  748. ;-------------------------space
  749. bis.b #0x20,&P1OUT
  750. call #SETENABLE
  751. bic.b #0xFF,&P1OUT
  752. ;-------------------------space
  753. bis.b #0x20,&P1OUT
  754. call #SETENABLE
  755. bic.b #0xFF,&P1OUT
  756. ret
  757.  
  758. ;--------------------------------------------------------
  759. ; Subroutine Call Difficulty Text
  760. ;--------------------------------------------------------
  761. DiffTextPrint nop
  762. ;-------------------------S
  763. mov.b #0x53,&P1OUT
  764. call #SETENABLE
  765. bic.b #0xFF,&P1OUT
  766. ;-------------------------e
  767. bis.b #0x65,&P1OUT
  768. call #SETENABLE
  769. bic.b #0xFF,&P1OUT
  770. ;-------------------------l
  771. bis.b #0x6C,&P1OUT
  772. call #SETENABLE
  773. bic.b #0xFF,&P1OUT
  774. ;-------------------------e
  775. bis.b #0x65,&P1OUT
  776. call #SETENABLE
  777. bic.b #0xFF,&P1OUT
  778. ;-------------------------c
  779. bis.b #0x63,&P1OUT
  780. call #SETENABLE
  781. bic.b #0xFF,&P1OUT
  782.  
  783. ;-------------------------t
  784. bis.b #0x74,&P1OUT
  785. call #SETENABLE
  786. bic.b #0xFF,&P1OUT
  787.  
  788. ;-------------------------space
  789. bis.b #0x20,&P1OUT
  790. call #SETENABLE
  791. bic.b #0xFF,&P1OUT
  792.  
  793. ;-------------------------M
  794. bis.b #0x4D,&P1OUT
  795. call #SETENABLE
  796. bic.b #0xFF,&P1OUT
  797.  
  798. ;-------------------------o
  799. bis.b #0x6F,&P1OUT
  800. call #SETENABLE
  801. bic.b #0xFF,&P1OUT
  802.  
  803. ;-------------------------d
  804. bis.b #0x64,&P1OUT
  805. call #SETENABLE
  806. bic.b #0xFF,&P1OUT
  807.  
  808. ;-------------------------e
  809. bis.b #0x65,&P1OUT
  810. call #SETENABLE
  811. bic.b #0xFF,&P1OUT
  812.  
  813. ;-------------------------:
  814. bis.b #0x3A,&P1OUT
  815. call #SETENABLE
  816. bic.b #0xFF,&P1OUT
  817. ret
  818. ;--------------------------------------------------------
  819. ; Subroutine Enable Pulse
  820. ;--------------------------------------------------------
  821. SETENABLE xor.b #1,&P2OUT
  822. mov #2000, R14
  823. DELAY dec R14 ; Decrement R15
  824. jnz DELAY ; Delay over?
  825. CLEARENABLE xor.b #1,&P2OUT
  826. ret
  827. ;--------------------------------------------------------
  828. ; Subroutine Delay
  829. ;--------------------------------------------------------
  830. Delay mov #50000,R14
  831. L2 dec R14 ; Decrement R15
  832. jnz L2 ; Delay over?
  833. ret ; Go
  834. ;--------------------------------------------------------
  835. ; Interrupt Vectors
  836. ;--------------------------------------------------------
  837. ORG 0FFFEh ; MSP430 RESET Vector
  838. DW RESET ;
  839. ORG 0FFE6h ; interrupt vector 2
  840. DW PBISR ; address of label PBISR
  841. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement