Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- randu LDR R0,seed
- LDR R1,magic
- MUL R0,R0,R1
- LDR R2,mask
- AND R0,R0,R2
- STR R0,seed
- MOV R0, R0 ASR #8 ; shift R0 right by 8 bits
- AND R0, R0, #0x3f ; take the modulo by 64
- MOV PC,R14
- ; R1 is mine counter
- ; R2 will be for temp values
- ; R3 is board
- ; R4 will hold offset
- ; R5 will hold value at that location
- generatestart STMFD R13!, { R4, R5, R6, R7, R8, R14 }
- MOV R1,#0
- MOV R2,#66
- MOV R3,R0
- B generate
- generate CMP R1,#8
- BEQ endgenerate
- STMFD R13!, { R1 }
- BL randu
- LDMFD R13!, { R1 }
- MOV R4,#4
- MUL R4,R0,R4
- LDRB R5,[R4,R3]
- CMP R5,#66
- BEQ generate
- ADD R1,R1,#1
- MOV R2,#66
- STR R2,[R4,R3]
- ;initialise flag registers
- MOV R5,#0
- MOV R6,#0
- MOV R7,#0
- MOV R8,#0
- ;setting flags
- ;top
- CMP R0,#8
- MOVLT R5,#1
- ;left
- AND R4,R0,#7
- CMP R4,#0
- MOVEQ R6,#1
- ;bot
- CMP R0,#55
- MOVGT R7,#1
- ;right
- AND R4,R0,#7
- CMP R4,#7
- MOVEQ R8,#1
- B checktopleft
- ; R5 true if M on top
- ; R6 true if M on left
- ; R7 true if M on bot
- ; R8 true if M on right
- checktopleft CMP R5,#1
- BEQ checktopmid
- CMP R6,#1
- BEQ checktopmid
- MOV R4,R0
- SUB R4,R4,#9
- LDRB R2,[R3, R4 LSL #2]
- CMP R2,#66
- BEQ checktopmid
- ADD R2,R2,#1
- STR R2,[R3, R4 LSL #2]
- B checktopmid
- checktopmid CMP R5,#1
- BEQ checktopright
- MOV R4,R0
- SUB R4,R4,#8
- LDRB R2,[R3, R4 LSL #2]
- CMP R2,#66
- BEQ checktopright
- ADD R2,R2,#1
- STR R2,[R3, R4 LSL #2]
- B checktopright
- checktopright CMP R5,#1
- BEQ checkleftmid
- CMP R8,#1
- BEQ checkleftmid
- MOV R4,R0
- SUB R4,R4,#7
- LDRB R2,[R3, R4 LSL #2]
- CMP R2,#66
- BEQ checkleftmid
- ADD R2,R2,#1
- STR R2,[R3, R4 LSL #2]
- B checkleftmid
- checkleftmid CMP R6,#1
- BEQ checkrightmid
- MOV R4,R0
- SUB R4,R4,#1
- LDRB R2,[R3, R4 LSL #2]
- CMP R2,#66
- BEQ checkrightmid
- ADD R2,R2,#1
- STR R2,[R3, R4 LSL #2]
- B checkrightmid
- checkrightmid CMP R8,#1
- BEQ checkbotleft
- MOV R4,R0
- ADD R4,R4,#1
- LDRB R2,[R3, R4 LSL #2]
- CMP R2,#66
- BEQ checkbotleft
- ADD R2,R2,#1
- STR R2,[R3, R4 LSL #2]
- B checkbotleft
- checkbotleft CMP R7,#1
- BEQ checkbotmid
- CMP R6,#1
- BEQ checkbotmid
- MOV R4,R0
- ADD R4,R4,#7
- LDRB R2,[R3, R4 LSL #2]
- CMP R2,#66
- BEQ checkbotmid
- ADD R2,R2,#1
- STR R2,[R3, R4 LSL #2]
- B checkbotmid
- checkbotmid CMP R7,#1
- BEQ checkbotright
- MOV R4,R0
- ADD R4,R4,#8
- LDRB R2,[R3, R4 LSL #2]
- CMP R2,#66
- BEQ checkbotright
- ADD R2,R2,#1
- STR R2,[R3, R4 LSL #2]
- B checkbotright
- checkbotright CMP R7,#1
- BEQ generate
- CMP R8,#1
- BEQ generate
- MOV R4,R0
- ADD R4,R4,#9
- LDRB R2,[R3, R4 LSL #2]
- CMP R2,#66
- BEQ generate
- ADD R2,R2,#1
- STR R2,[R3, R4 LSL #2]
- B generate
- endgenerate LDMFD R13!, { R4, R5, R6, R7, R8, PC }
- MOV PC,R14
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement