.ORIG x0000 ; the TRAP vector table .FILL BAD_TRAP ; x00 .FILL BAD_TRAP ; x01 .FILL BAD_TRAP ; x02 .FILL BAD_TRAP ; x03 .FILL BAD_TRAP ; x04 .FILL BAD_TRAP ; x05 .FILL BAD_TRAP ; x06 .FILL BAD_TRAP ; x07 .FILL BAD_TRAP ; x08 .FILL BAD_TRAP ; x09 .FILL BAD_TRAP ; x0A .FILL BAD_TRAP ; x0B .FILL BAD_TRAP ; x0C .FILL BAD_TRAP ; x0D .FILL BAD_TRAP ; x0E .FILL BAD_TRAP ; x0F .FILL BAD_TRAP ; x10 .FILL BAD_TRAP ; x11 .FILL BAD_TRAP ; x12 .FILL BAD_TRAP ; x13 .FILL BAD_TRAP ; x14 .FILL BAD_TRAP ; x15 .FILL BAD_TRAP ; x16 .FILL BAD_TRAP ; x17 .FILL BAD_TRAP ; x18 .FILL BAD_TRAP ; x19 .FILL BAD_TRAP ; x1A .FILL BAD_TRAP ; x1B .FILL BAD_TRAP ; x1C .FILL BAD_TRAP ; x1D .FILL BAD_TRAP ; x1E .FILL BAD_TRAP ; x1F .FILL BAD_TRAP ; x20 .FILL BAD_TRAP ; x21 .FILL BAD_TRAP ; x22 .FILL BAD_TRAP ; x23 .FILL BAD_TRAP ; x24 .FILL TRAP_HALT ; x25 .FILL BAD_TRAP ; x26 .FILL BAD_TRAP ; x27 .FILL BAD_TRAP ; x28 .FILL BAD_TRAP ; x29 .FILL BAD_TRAP ; x2A .FILL BAD_TRAP ; x2B .FILL BAD_TRAP ; x2C .FILL BAD_TRAP ; x2D .FILL BAD_TRAP ; x2E .FILL BAD_TRAP ; x2F .FILL BAD_TRAP ; x30 .FILL BAD_TRAP ; x31 .FILL BAD_TRAP ; x32 .FILL BAD_TRAP ; x33 .FILL BAD_TRAP ; x34 .FILL BAD_TRAP ; x35 .FILL BAD_TRAP ; x36 .FILL BAD_TRAP ; x37 .FILL BAD_TRAP ; x38 .FILL BAD_TRAP ; x39 .FILL BAD_TRAP ; x3A .FILL BAD_TRAP ; x3B .FILL BAD_TRAP ; x3C .FILL BAD_TRAP ; x3D .FILL BAD_TRAP ; x3E .FILL BAD_TRAP ; x3F .FILL DRAW_BLOCK ; x40 .FILL GET_BLOCK_COLOR ; x41 .FILL GET_EVENT ; x42 .FILL RANDOM_NUMBER ; x43 .FILL BAD_TRAP ; x44 .FILL BAD_TRAP ; x45 .FILL BAD_TRAP ; x46 .FILL BAD_TRAP ; x47 .FILL BAD_TRAP ; x48 .FILL BAD_TRAP ; x49 .FILL BAD_TRAP ; x4A .FILL BAD_TRAP ; x4B .FILL BAD_TRAP ; x4C .FILL BAD_TRAP ; x4D .FILL BAD_TRAP ; x4E .FILL BAD_TRAP ; x4F .FILL BAD_TRAP ; x50 .FILL BAD_TRAP ; x51 .FILL BAD_TRAP ; x52 .FILL BAD_TRAP ; x53 .FILL BAD_TRAP ; x54 .FILL BAD_TRAP ; x55 .FILL BAD_TRAP ; x56 .FILL BAD_TRAP ; x57 .FILL BAD_TRAP ; x58 .FILL BAD_TRAP ; x59 .FILL BAD_TRAP ; x5A .FILL BAD_TRAP ; x5B .FILL BAD_TRAP ; x5C .FILL BAD_TRAP ; x5D .FILL BAD_TRAP ; x5E .FILL BAD_TRAP ; x5F .FILL BAD_TRAP ; x60 .FILL BAD_TRAP ; x61 .FILL BAD_TRAP ; x62 .FILL BAD_TRAP ; x63 .FILL BAD_TRAP ; x64 .FILL BAD_TRAP ; x65 .FILL BAD_TRAP ; x66 .FILL BAD_TRAP ; x67 .FILL BAD_TRAP ; x68 .FILL BAD_TRAP ; x69 .FILL BAD_TRAP ; x6A .FILL BAD_TRAP ; x6B .FILL BAD_TRAP ; x6C .FILL BAD_TRAP ; x6D .FILL BAD_TRAP ; x6E .FILL BAD_TRAP ; x6F .FILL BAD_TRAP ; x70 .FILL BAD_TRAP ; x71 .FILL BAD_TRAP ; x72 .FILL BAD_TRAP ; x73 .FILL BAD_TRAP ; x74 .FILL BAD_TRAP ; x75 .FILL BAD_TRAP ; x76 .FILL BAD_TRAP ; x77 .FILL BAD_TRAP ; x78 .FILL BAD_TRAP ; x79 .FILL BAD_TRAP ; x7A .FILL BAD_TRAP ; x7B .FILL BAD_TRAP ; x7C .FILL BAD_TRAP ; x7D .FILL BAD_TRAP ; x7E .FILL BAD_TRAP ; x7F .FILL BAD_TRAP ; x80 .FILL BAD_TRAP ; x81 .FILL BAD_TRAP ; x82 .FILL BAD_TRAP ; x83 .FILL BAD_TRAP ; x84 .FILL BAD_TRAP ; x85 .FILL BAD_TRAP ; x86 .FILL BAD_TRAP ; x87 .FILL BAD_TRAP ; x88 .FILL BAD_TRAP ; x89 .FILL BAD_TRAP ; x8A .FILL BAD_TRAP ; x8B .FILL BAD_TRAP ; x8C .FILL BAD_TRAP ; x8D .FILL BAD_TRAP ; x8E .FILL BAD_TRAP ; x8F .FILL BAD_TRAP ; x90 .FILL BAD_TRAP ; x91 .FILL BAD_TRAP ; x92 .FILL BAD_TRAP ; x93 .FILL BAD_TRAP ; x94 .FILL BAD_TRAP ; x95 .FILL BAD_TRAP ; x96 .FILL BAD_TRAP ; x97 .FILL BAD_TRAP ; x98 .FILL BAD_TRAP ; x99 .FILL BAD_TRAP ; x9A .FILL BAD_TRAP ; x9B .FILL BAD_TRAP ; x9C .FILL BAD_TRAP ; x9D .FILL BAD_TRAP ; x9E .FILL BAD_TRAP ; x9F .FILL BAD_TRAP ; xA0 .FILL BAD_TRAP ; xA1 .FILL BAD_TRAP ; xA2 .FILL BAD_TRAP ; xA3 .FILL BAD_TRAP ; xA4 .FILL BAD_TRAP ; xA5 .FILL BAD_TRAP ; xA6 .FILL BAD_TRAP ; xA7 .FILL BAD_TRAP ; xA8 .FILL BAD_TRAP ; xA9 .FILL BAD_TRAP ; xAA .FILL BAD_TRAP ; xAB .FILL BAD_TRAP ; xAC .FILL BAD_TRAP ; xAD .FILL BAD_TRAP ; xAE .FILL BAD_TRAP ; xAF .FILL BAD_TRAP ; xB0 .FILL BAD_TRAP ; xB1 .FILL BAD_TRAP ; xB2 .FILL BAD_TRAP ; xB3 .FILL BAD_TRAP ; xB4 .FILL BAD_TRAP ; xB5 .FILL BAD_TRAP ; xB6 .FILL BAD_TRAP ; xB7 .FILL BAD_TRAP ; xB8 .FILL BAD_TRAP ; xB9 .FILL BAD_TRAP ; xBA .FILL BAD_TRAP ; xBB .FILL BAD_TRAP ; xBC .FILL BAD_TRAP ; xBD .FILL BAD_TRAP ; xBE .FILL BAD_TRAP ; xBF .FILL BAD_TRAP ; xC0 .FILL BAD_TRAP ; xC1 .FILL BAD_TRAP ; xC2 .FILL BAD_TRAP ; xC3 .FILL BAD_TRAP ; xC4 .FILL BAD_TRAP ; xC5 .FILL BAD_TRAP ; xC6 .FILL BAD_TRAP ; xC7 .FILL BAD_TRAP ; xC8 .FILL BAD_TRAP ; xC9 .FILL BAD_TRAP ; xCA .FILL BAD_TRAP ; xCB .FILL BAD_TRAP ; xCC .FILL BAD_TRAP ; xCD .FILL BAD_TRAP ; xCE .FILL BAD_TRAP ; xCF .FILL BAD_TRAP ; xD0 .FILL BAD_TRAP ; xD1 .FILL BAD_TRAP ; xD2 .FILL BAD_TRAP ; xD3 .FILL BAD_TRAP ; xD4 .FILL BAD_TRAP ; xD5 .FILL BAD_TRAP ; xD6 .FILL BAD_TRAP ; xD7 .FILL BAD_TRAP ; xD8 .FILL BAD_TRAP ; xD9 .FILL BAD_TRAP ; xDA .FILL BAD_TRAP ; xDB .FILL BAD_TRAP ; xDC .FILL BAD_TRAP ; xDD .FILL BAD_TRAP ; xDE .FILL BAD_TRAP ; xDF .FILL BAD_TRAP ; xE0 .FILL BAD_TRAP ; xE1 .FILL BAD_TRAP ; xE2 .FILL BAD_TRAP ; xE3 .FILL BAD_TRAP ; xE4 .FILL BAD_TRAP ; xE5 .FILL BAD_TRAP ; xE6 .FILL BAD_TRAP ; xE7 .FILL BAD_TRAP ; xE8 .FILL BAD_TRAP ; xE9 .FILL BAD_TRAP ; xEA .FILL BAD_TRAP ; xEB .FILL BAD_TRAP ; xEC .FILL BAD_TRAP ; xED .FILL BAD_TRAP ; xEE .FILL BAD_TRAP ; xEF .FILL BAD_TRAP ; xF0 .FILL BAD_TRAP ; xF1 .FILL BAD_TRAP ; xF2 .FILL BAD_TRAP ; xF3 .FILL BAD_TRAP ; xF4 .FILL BAD_TRAP ; xF5 .FILL BAD_TRAP ; xF6 .FILL BAD_TRAP ; xF7 .FILL BAD_TRAP ; xF8 .FILL BAD_TRAP ; xF9 .FILL BAD_TRAP ; xFA .FILL BAD_TRAP ; xFB .FILL BAD_TRAP ; xFC .FILL BAD_TRAP ; xFD .FILL BAD_TRAP ; xFE .FILL BAD_TRAP ; xFF ; the interrupt vector table .FILL BAD_INT ; x00 .FILL BAD_INT ; x01 .FILL BAD_INT ; x02 .FILL BAD_INT ; x03 .FILL BAD_INT ; x04 .FILL BAD_INT ; x05 .FILL BAD_INT ; x06 .FILL BAD_INT ; x07 .FILL BAD_INT ; x08 .FILL BAD_INT ; x09 .FILL BAD_INT ; x0A .FILL BAD_INT ; x0B .FILL BAD_INT ; x0C .FILL BAD_INT ; x0D .FILL BAD_INT ; x0E .FILL BAD_INT ; x0F .FILL BAD_INT ; x10 .FILL BAD_INT ; x11 .FILL BAD_INT ; x12 .FILL BAD_INT ; x13 .FILL BAD_INT ; x14 .FILL BAD_INT ; x15 .FILL BAD_INT ; x16 .FILL BAD_INT ; x17 .FILL BAD_INT ; x18 .FILL BAD_INT ; x19 .FILL BAD_INT ; x1A .FILL BAD_INT ; x1B .FILL BAD_INT ; x1C .FILL BAD_INT ; x1D .FILL BAD_INT ; x1E .FILL BAD_INT ; x1F .FILL BAD_INT ; x20 .FILL BAD_INT ; x21 .FILL BAD_INT ; x22 .FILL BAD_INT ; x23 .FILL BAD_INT ; x24 .FILL BAD_INT ; x25 .FILL BAD_INT ; x26 .FILL BAD_INT ; x27 .FILL BAD_INT ; x28 .FILL BAD_INT ; x29 .FILL BAD_INT ; x2A .FILL BAD_INT ; x2B .FILL BAD_INT ; x2C .FILL BAD_INT ; x2D .FILL BAD_INT ; x2E .FILL BAD_INT ; x2F .FILL BAD_INT ; x30 .FILL BAD_INT ; x31 .FILL BAD_INT ; x32 .FILL BAD_INT ; x33 .FILL BAD_INT ; x34 .FILL BAD_INT ; x35 .FILL BAD_INT ; x36 .FILL BAD_INT ; x37 .FILL BAD_INT ; x38 .FILL BAD_INT ; x39 .FILL BAD_INT ; x3A .FILL BAD_INT ; x3B .FILL BAD_INT ; x3C .FILL BAD_INT ; x3D .FILL BAD_INT ; x3E .FILL BAD_INT ; x3F .FILL BAD_INT ; x40 .FILL BAD_INT ; x41 .FILL BAD_INT ; x42 .FILL BAD_INT ; x43 .FILL BAD_INT ; x44 .FILL BAD_INT ; x45 .FILL BAD_INT ; x46 .FILL BAD_INT ; x47 .FILL BAD_INT ; x48 .FILL BAD_INT ; x49 .FILL BAD_INT ; x4A .FILL BAD_INT ; x4B .FILL BAD_INT ; x4C .FILL BAD_INT ; x4D .FILL BAD_INT ; x4E .FILL BAD_INT ; x4F .FILL BAD_INT ; x50 .FILL BAD_INT ; x51 .FILL BAD_INT ; x52 .FILL BAD_INT ; x53 .FILL BAD_INT ; x54 .FILL BAD_INT ; x55 .FILL BAD_INT ; x56 .FILL BAD_INT ; x57 .FILL BAD_INT ; x58 .FILL BAD_INT ; x59 .FILL BAD_INT ; x5A .FILL BAD_INT ; x5B .FILL BAD_INT ; x5C .FILL BAD_INT ; x5D .FILL BAD_INT ; x5E .FILL BAD_INT ; x5F .FILL BAD_INT ; x60 .FILL BAD_INT ; x61 .FILL BAD_INT ; x62 .FILL BAD_INT ; x63 .FILL BAD_INT ; x64 .FILL BAD_INT ; x65 .FILL BAD_INT ; x66 .FILL BAD_INT ; x67 .FILL BAD_INT ; x68 .FILL BAD_INT ; x69 .FILL BAD_INT ; x6A .FILL BAD_INT ; x6B .FILL BAD_INT ; x6C .FILL BAD_INT ; x6D .FILL BAD_INT ; x6E .FILL BAD_INT ; x6F .FILL BAD_INT ; x70 .FILL BAD_INT ; x71 .FILL BAD_INT ; x72 .FILL BAD_INT ; x73 .FILL BAD_INT ; x74 .FILL BAD_INT ; x75 .FILL BAD_INT ; x76 .FILL BAD_INT ; x77 .FILL BAD_INT ; x78 .FILL BAD_INT ; x79 .FILL BAD_INT ; x7A .FILL BAD_INT ; x7B .FILL BAD_INT ; x7C .FILL BAD_INT ; x7D .FILL BAD_INT ; x7E .FILL BAD_INT ; x7F .FILL BAD_INT ; x80 .FILL BAD_INT ; x81 .FILL BAD_INT ; x82 .FILL BAD_INT ; x83 .FILL BAD_INT ; x84 .FILL BAD_INT ; x85 .FILL BAD_INT ; x86 .FILL BAD_INT ; x87 .FILL BAD_INT ; x88 .FILL BAD_INT ; x89 .FILL BAD_INT ; x8A .FILL BAD_INT ; x8B .FILL BAD_INT ; x8C .FILL BAD_INT ; x8D .FILL BAD_INT ; x8E .FILL BAD_INT ; x8F .FILL BAD_INT ; x90 .FILL BAD_INT ; x91 .FILL BAD_INT ; x92 .FILL BAD_INT ; x93 .FILL BAD_INT ; x94 .FILL BAD_INT ; x95 .FILL BAD_INT ; x96 .FILL BAD_INT ; x97 .FILL BAD_INT ; x98 .FILL BAD_INT ; x99 .FILL BAD_INT ; x9A .FILL BAD_INT ; x9B .FILL BAD_INT ; x9C .FILL BAD_INT ; x9D .FILL BAD_INT ; x9E .FILL BAD_INT ; x9F .FILL BAD_INT ; xA0 .FILL BAD_INT ; xA1 .FILL BAD_INT ; xA2 .FILL BAD_INT ; xA3 .FILL BAD_INT ; xA4 .FILL BAD_INT ; xA5 .FILL BAD_INT ; xA6 .FILL BAD_INT ; xA7 .FILL BAD_INT ; xA8 .FILL BAD_INT ; xA9 .FILL BAD_INT ; xAA .FILL BAD_INT ; xAB .FILL BAD_INT ; xAC .FILL BAD_INT ; xAD .FILL BAD_INT ; xAE .FILL BAD_INT ; xAF .FILL BAD_INT ; xB0 .FILL BAD_INT ; xB1 .FILL BAD_INT ; xB2 .FILL BAD_INT ; xB3 .FILL BAD_INT ; xB4 .FILL BAD_INT ; xB5 .FILL BAD_INT ; xB6 .FILL BAD_INT ; xB7 .FILL BAD_INT ; xB8 .FILL BAD_INT ; xB9 .FILL BAD_INT ; xBA .FILL BAD_INT ; xBB .FILL BAD_INT ; xBC .FILL BAD_INT ; xBD .FILL BAD_INT ; xBE .FILL BAD_INT ; xBF .FILL BAD_INT ; xC0 .FILL BAD_INT ; xC1 .FILL BAD_INT ; xC2 .FILL BAD_INT ; xC3 .FILL BAD_INT ; xC4 .FILL BAD_INT ; xC5 .FILL BAD_INT ; xC6 .FILL BAD_INT ; xC7 .FILL BAD_INT ; xC8 .FILL BAD_INT ; xC9 .FILL BAD_INT ; xCA .FILL BAD_INT ; xCB .FILL BAD_INT ; xCC .FILL BAD_INT ; xCD .FILL BAD_INT ; xCE .FILL BAD_INT ; xCF .FILL BAD_INT ; xD0 .FILL BAD_INT ; xD1 .FILL BAD_INT ; xD2 .FILL BAD_INT ; xD3 .FILL BAD_INT ; xD4 .FILL BAD_INT ; xD5 .FILL BAD_INT ; xD6 .FILL BAD_INT ; xD7 .FILL BAD_INT ; xD8 .FILL BAD_INT ; xD9 .FILL BAD_INT ; xDA .FILL BAD_INT ; xDB .FILL BAD_INT ; xDC .FILL BAD_INT ; xDD .FILL BAD_INT ; xDE .FILL BAD_INT ; xDF .FILL BAD_INT ; xE0 .FILL BAD_INT ; xE1 .FILL BAD_INT ; xE2 .FILL BAD_INT ; xE3 .FILL BAD_INT ; xE4 .FILL BAD_INT ; xE5 .FILL BAD_INT ; xE6 .FILL BAD_INT ; xE7 .FILL BAD_INT ; xE8 .FILL BAD_INT ; xE9 .FILL BAD_INT ; xEA .FILL BAD_INT ; xEB .FILL BAD_INT ; xEC .FILL BAD_INT ; xED .FILL BAD_INT ; xEE .FILL BAD_INT ; xEF .FILL BAD_INT ; xF0 .FILL BAD_INT ; xF1 .FILL BAD_INT ; xF2 .FILL BAD_INT ; xF3 .FILL BAD_INT ; xF4 .FILL BAD_INT ; xF5 .FILL BAD_INT ; xF6 .FILL BAD_INT ; xF7 .FILL BAD_INT ; xF8 .FILL BAD_INT ; xF9 .FILL BAD_INT ; xFA .FILL BAD_INT ; xFB .FILL BAD_INT ; xFC .FILL BAD_INT ; xFD .FILL BAD_INT ; xFE .FILL BAD_INT ; xFF ;;; OS_START - operating system entry point (always starts at x0200) OS_START: ;; set MPR LD R0, MPR_INIT STI R0, OS_MPR ;; start running user code (clear Privilege bit w/ JMPT) LD R7, USER_CODE_ADDR JMPT R7 OS_MPR: .FILL xFE12 ; memory protection register OS_MCR: .FILL xFFFE ; machine control register MASK_HI: .FILL x7FFF MPR_INIT: .FILL x0FF8 ; user can access only x3000 to xbfff USER_CODE_ADDR: .FILL x3000 ; user code starts at x3000 ;;; TRAP_HALP - trap handler for halting machine TRAP_HALT: ; clear run bit in MCR LDI R0,OS_MCR ; halt the machine LD R1,MASK_HI AND R0,R0,R1 STI R0,OS_MCR ; halt! BRnzp OS_START ; restart machine ;;; BAD_TRAP - code to execute for undefined trap BAD_TRAP: BRnzp TRAP_HALT ; execute HALT ;;; BAD_INT - code to execute for undefined interrupt; there won't ;;; actually be any interrupts, so this will never actually get called BAD_INT: BRnzp TRAP_HALT ; execute HALT ;;; *************************************************************************** ;;; DRAW_BLOCK - your code for drawing blocks ;;; Input ;;; r0 - column in field (x) ;;; r1 - row in field (y) ;;; r2 - color ;;; Output ;;; video memory will be updated to place block of approriate color ; Register Saves DB_R0: .FILL x0 DB_R1: .FILL x0 DB_R2: .FILL x0 DB_R3: .FILL x0 DB_R4: .FILL x0 DB_R5: .FILL x0 DB_R6: .FILL x0 DB_R7: .FILL x0 DRAW_BLOCK: ; Register Saving ST R0,DB_R0 ST R1,DB_R1 ST R2,DB_R2 ST R3,DB_R3 ST R4,DB_R4 ST R5,DB_R5 ST R6,DB_R6 ST R7,DB_R7 ; *** INSERT CODE FOR PART 1 HERE *** ;; ~25 lines of code or so ; Register Restoring LD R0,DB_R0 LD R1,DB_R1 LD R2,DB_R2 LD R3,DB_R3 LD R4,DB_R4 LD R5,DB_R5 LD R6,DB_R6 LD R7,DB_R7 RTT ; Video Memory Constants VIDEO_MEM_BEGIN: .FILL xC000 VIDEO_ROW_SIZE: .FILL #128 ; You may want to add some variables here ;;; *************************************************************************** ;;; GET_BLOCK_COLOR - your code for getting a block's color ;;; Input ;;; r0 - column in game field (x) ;;; r1 - row in game field (y) ;;; Output ;;; r5 - color of block at the position specified by r0 and r1 ; Register Saves GBC_R0: .FILL x0 GBC_R1: .FILL x0 GBC_R2: .FILL x0 GBC_R3: .FILL x0 GBC_R4: .FILL x0 ;no r5 GBC_R6: .FILL x0 GBC_R7: .FILL x0 GET_BLOCK_COLOR: ; Register Saving ST R0,GBC_R0 ST R1,GBC_R1 ST R2,GBC_R2 ST R3,GBC_R3 ST R4,GBC_R4 ;; don't save R5 because it holds the return value ST R6,GBC_R6 ST R7,GBC_R7 ; *** INSERT CODE FOR PART 2 HERE *** ;; ~10 lines of code or so ; Register Restoring LD R0,GBC_R0 LD R1,GBC_R1 LD R2,GBC_R2 LD R3,GBC_R3 LD R4,GBC_R4 ;; don't restore R5 because it holds the return value LD R6,GBC_R6 LD R7,GBC_R7 RTT ; You may want to add some variables here ;;; *************************************************************************** ;;; RANDOM_NUMBER ;;; Register Input ;;; None ;;; Register Output ;;; r5: pseudo-random number RN_R0: .FILL x0 RN_R1: .FILL x0 RN_R2: .FILL x0 RN_R3: .FILL x0 RN_R4: .FILL x0 ;no r5 RN_R6: .FILL x0 RN_R7: .FILL x0 RANDOM_NUMBER: ; Register Saving ST R0, RN_R0 ST R1, RN_R1 ST R2, RN_R2 ST R3, RN_R3 ST R4, RN_R4 ;; don't save R5 because it holds the return value ST R6, RN_R6 ST R7, RN_R7 ; *** INSERT CODE FOR PART 3 HERE *** ;; ~15 lines of code or so ; Register Restoring LD R0, RN_R0 LD R1, RN_R1 LD R2, RN_R2 LD R3, RN_R3 LD R4, RN_R4 ;; don't restore R5 because it holds the return value LD R6, RN_R6 LD R7, RN_R7 RTT ; RANDOM_NUMBER local variables R_POS: .FILL 0 ; initially zero R_SIZE: .FILL x19 R_START: .FILL x35FE ; Array of "random" numbers .FILL x342D .FILL x26D3 .FILL xDE45 .FILL xF56E .FILL xBFD4 .FILL xDE31 .FILL x25DE .FILL xFF45 .FILL x34ED .FILL x12E9 .FILL x82AB .FILL x08E4 .FILL x5400 .FILL xED25 .FILL x346E .FILL x2300 .FILL x3644 .FILL x1AE4 .FILL x85D4 .FILL xED48 .FILL x347D .FILL x1234 .FILL x4842 .FILL xADEF ;;; *************************************************************************** ;;; GET_EVENT - your code for getting a keyboard or timer event ;;; Input ;;; none ;;; Output ;;; r5 - an integer indicating what event has happened ;;; 0 (timer), -1 (quit), 1 (left), 2 (up), 3 (right), 4 (down) ; Register Saves GE_R0: .FILL x0 GE_R1: .FILL x0 GE_R2: .FILL x0 GE_R3: .FILL x0 GE_R4: .FILL x0 ;no r5 GE_R6: .FILL x0 GE_R7: .FILL x0 GET_EVENT: ; Register Saving ST R0,GE_R0 ST R1,GE_R1 ST R2,GE_R2 ST R3,GE_R3 ST R4,GE_R4 ;; don't save R5 because it holds the return value ST R6,GE_R6 ST R7,GE_R7 ; *** INSERT CODE FOR PART 4 HERE *** ;; ~50 lines of code or so ; Register Restoring LD R0,GE_R0 LD R1,GE_R1 LD R2,GE_R2 LD R3,GE_R3 LD R4,GE_R4 ;; don't restore R5 because it holds the return value LD R6,GE_R6 LD R7,GE_R7 RTT ; Input key ASCII codes LEFT_KEY: .FILL x0061 ; Left - 'a' UP_KEY: .FILL x0077 ; Up - 'w' RIGHT_KEY: .FILL x0064 ; Right - 'd' DOWN_KEY: .FILL x0073 ; Down - 's' QUIT_KEY: .FILL x002A ; Quit - '*' ; Addresses of various registers OS_KBSR: .FILL xFE00 ; keyboard status register OS_KBDR: .FILL xFE02 ; keyboard data register OS_TSR: .FILL xFE08 ; timer status register OS_TIR: .FILL xFE0A ; timer interval register ; You may want to add some variables here .END