Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;--------------------------------------------------------------------------
- ;- Programmer: Zach Bunce, Kaioli Bessert, and Garrett Maxon
- ;- Date: 2/12/17
- ;-
- ;- Experiment 8: LD, ST, CALL, RET, PUSH, POP Testing program
- ;- Lights up LED 0-6 for each case and LED 7 when successfully completed
- ;- Later cases may rely on earlier ones functioning correctly, so debug
- ;- from right to left.
- ;- CALL & RET tested simultaneously
- ;- Relies on MOV, CMP, BRNE, OR, BRN, WSP, LD
- ;--------------------------------------------------------------------------
- ;--------------------------------------------------------------------------
- ;-- Port Constants
- ;--------------------------------------------------------------------------
- .EQU SWITCH_PORT = 0x20
- .EQU LED_PORT = 0x40
- ;--------------------------------------------------------------------------
- ;-- Register Constants
- ;--------------------------------------------------------------------------
- .DEF LED = R21
- .DEF RgS = R2
- .DEF RgD = R3
- .DEF SPL = R30
- ;--------------------------------------------------------------------------
- ;-- Data Segment Initial memory values
- ;--------------------------------------------------------------------------
- .DSEG
- .ORG 0x08
- .DB 0x11, 0x12, 0xFF, 0xFF, 0x62
- ;--------------------------------------------------------------------------
- ;-- .ORG used in code segment
- ;--------------------------------------------------------------------------
- .CSEG
- .ORG 0x10
- ;--------------------------------------------------------------------------
- ;-- Code Segment
- ;--------------------------------------------------------------------------
- INIT: MOV LED, 0x00 ;Resets the LED register
- MOV RgS, 0x00 ;Clears the source register
- MOV RgD, 0x00 ;Clears the destination register
- MOV SPL, 0xF0 ;Sets up a known stack location
- CASE1: MOV RgS, 0x08
- LD RgD, (R2) ;Tests LD r-r (Relies on MOV, CMP, BRNE, OR, BRN)
- CMP RgD, 0x11
- BRNE CASE2
- OR LED, 0x01 ;If successful, LED0 lights up
- BRN CASE2
- CASE2: LD RgD, 0x09 ;Tests LD r-i (Relies on CMP, BRNE, OR, BRN)
- CMP RgD, 0x12
- BRNE CASE3
- OR LED, 0x02 ;If successful, LED1 lights up
- BRN CASE3
- CASE3: MOV RgD, 0x0A
- MOV RgS, 0x21
- ST RgS, (R3) ;Tests ST r-r (Relies on MOV, LD, CMP, BRNE, OR, BRN)
- LD R4, (R3)
- CMP R4, 0x21
- BRNE CASE4
- OR LED, 0x04 ;If successful, LED2 lights up
- BRN CASE4
- CASE4: MOV RgS, 0x22
- ST RgS, 0x0B ;Tests ST r-i (Relies on MOV, LD, CMP, BRNE, OR, BRN)
- LD RgD, 0x0B
- CMP RgD, 0x22
- BRNE CASE5
- OR LED, 0x08 ;If successful, LED3 lights up
- BRN CASE5
- CASE5: MOV RgS, 0x51
- CMP RgS, 0x00
- CALL TSTCR ;Tests CALL & RET (Relies on MOV, CMP, BRNE, OR, BRN)
- BRNE CASE6
- OR LED, 0X10 ;If successful, LED4 lights up
- BRN CASE6
- TSTCR: CMP RgS, 0x51
- RET
- BRN CASE6
- CASE6: MOV RgS, 0x61
- WSP SPL ;Insures known SP location
- PUSH RgS ;Tests PUSH (Uses MOV, WSP, LD, CMP, BRNE, OR, BRN)
- LD RgD, 0xEF
- CMP RgD, 0X61
- BRNE CASE7
- OR LED, 0x20 ;If successful, LED5 lights up
- BRN CASE7
- CASE7: MOV SPL, 0x0C
- WSP SPL ;Insures known SP location
- POP RgD ;Tests POP (Uses MOV, WSP, ST, CMP, BRNE, OR, BRN)
- CMP RgD, 0x62
- BRNE DONE
- OR LED, 0x40 ;If successful, LED6 lights up
- BRN DONE
- DONE: OR LED, 0x80 ;Lights up LED7 to indicate completion
- OUT R21, LED_PORT ;Outputs the test results
- BRN DONE ;Loops endlessly
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement