Advertisement
Guest User

Untitled

a guest
Aug 18th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.52 KB | None | 0 0
  1. package arm7
  2.  
  3. import "log"
  4.  
  5. // SysRegisters define the registers for the SYS
  6. type SysRegisters struct {
  7. // General Purpose Registers
  8. R0 uint32
  9. R1 uint32
  10. R2 uint32
  11. R3 uint32
  12. R4 uint32
  13. R5 uint32
  14. R6 uint32
  15. R7 uint32
  16. R8 uint32
  17. R9 uint32
  18. R10 uint32
  19. R11 uint32
  20. R12 uint32
  21. // Stack Pointer - SP
  22. R13 uint32
  23. // Link Register - LP
  24. R14 uint32
  25. // Program Counter - PC
  26. R15 uint32
  27. // Current Program Status Register - CPSR
  28. Cpsr uint32
  29. }
  30.  
  31. func (sysRegisters *SysRegisters) getRegister(register uint32) uint32 {
  32. switch register {
  33. case 0:
  34. return sysRegisters.R0
  35. case 1:
  36. return sysRegisters.R1
  37. case 2:
  38. return sysRegisters.R2
  39. case 3:
  40. return sysRegisters.R3
  41. case 4:
  42. return sysRegisters.R4
  43. case 5:
  44. return sysRegisters.R5
  45. case 6:
  46. return sysRegisters.R6
  47. case 7:
  48. return sysRegisters.R7
  49. case 8:
  50. return sysRegisters.R8
  51. case 9:
  52. return sysRegisters.R9
  53. case 10:
  54. return sysRegisters.R10
  55. case 11:
  56. return sysRegisters.R11
  57. case 12:
  58. return sysRegisters.R12
  59. case 13:
  60. return sysRegisters.R13
  61. case 14:
  62. return sysRegisters.R14
  63. case 15:
  64. return sysRegisters.R15
  65. default:
  66. log.Println("You're are trying to access a non-existent SYS mode register!")
  67. return 0x0
  68. }
  69. }
  70.  
  71. func (sysRegisters *SysRegisters) setRegister(register uint32, value uint32) {
  72. switch register {
  73. case 0:
  74. sysRegisters.R0 = value
  75. case 1:
  76. sysRegisters.R1 = value
  77. case 2:
  78. sysRegisters.R2 = value
  79. case 3:
  80. sysRegisters.R3 = value
  81. case 4:
  82. sysRegisters.R4 = value
  83. case 5:
  84. sysRegisters.R5 = value
  85. case 6:
  86. sysRegisters.R6 = value
  87. case 7:
  88. sysRegisters.R7 = value
  89. case 8:
  90. sysRegisters.R8 = value
  91. case 9:
  92. sysRegisters.R9 = value
  93. case 10:
  94. sysRegisters.R10 = value
  95. case 11:
  96. sysRegisters.R11 = value
  97. case 12:
  98. sysRegisters.R12 = value
  99. case 13:
  100. sysRegisters.R13 = value
  101. case 14:
  102. sysRegisters.R14 = value
  103. case 15:
  104. sysRegisters.R15 = value
  105. default:
  106. log.Println("You're are trying to overwrite a non-existent SYS mode register!")
  107. }
  108. }
  109.  
  110. func (sysRegisters *SysRegisters) reset(usingBIOS bool) {
  111. sysRegisters.R0, sysRegisters.R1, sysRegisters.R2, sysRegisters.R3, sysRegisters.R4, sysRegisters.R5 = 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
  112. sysRegisters.R6, sysRegisters.R7, sysRegisters.R8, sysRegisters.R9, sysRegisters.R10 = 0x0, 0x0, 0x0, 0x0, 0x0
  113. sysRegisters.R11, sysRegisters.R12, sysRegisters.R14 = 0x0, 0x0, 0x0
  114.  
  115. // If not booting from the BIOS
  116. if !usingBIOS {
  117. sysRegisters.R13 = 0x03007F00
  118. sysRegisters.R15 = 0x8000000
  119. sysRegisters.Cpsr = 0x5F
  120. } else {
  121. sysRegisters.R13, sysRegisters.R15 = 0x0, 0x0
  122. sysRegisters.Cpsr = 0xD3
  123. }
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement