Advertisement
Guest User

Untitled

a guest
Mar 17th, 2013
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <wiringPi.h>
  3. #include <mcp23017.h>
  4.  
  5. int main(void)
  6. {
  7. printf("Sega rom dumper for raspberry pin");
  8. wiringPiSetup();
  9. mcp23017Setup(100, 0x20);
  10. mcp23017Setup(116, 0x21);
  11. mcp23017Setup(132, 0x22);
  12.  
  13. resetSegaAddressBus();
  14. for (int i = 0; i < 16; i++) {
  15. pinMode(dataPins[i], INPUT);
  16. }
  17.  
  18. //not actaly sure on this code
  19. for (byte i = 0; i < 8; i++) {
  20. writeAddress(0x90 + i);
  21. delay(5);
  22. word d = readData();
  23. byte d2 = d & 0xFF;
  24. byte d1 = (d & 0xFF00) >> 8;
  25.  
  26. }
  27.  
  28.  
  29. }
  30.  
  31. //Address pins
  32. int addressPins[23] = { 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 110, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122 };
  33.  
  34. //Data pins
  35. int dataPins[16] = { 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138 };
  36.  
  37. void resetSegaAddressBus()
  38. {
  39. for (byte i = 0; i < 23; i++) {
  40. pinMode(addressPins[i], OUTPUT);
  41. digitalWrite(addressPins[i], LOW);
  42. }
  43. }
  44.  
  45. void writeAddress(long addr)
  46. {
  47. long mask = 1;
  48. for (int i = 0; i < 23; i++) {
  49. long test = (mask & addr) >> i;
  50. digitalWrite(addressPins[i], LOW);
  51. mask = mask << 1;
  52. }
  53. }
  54.  
  55. word readData()
  56. {
  57. word d = 0;
  58. word mask2 = 0 b1;
  59. for (int i = 0; i < 16; i++) {
  60. int b = digitalRead(dataPins[i]);
  61. if (b == HIGH) {
  62. d = d | mask2;
  63. }
  64. mask2 = mask2 << 1;
  65. }
  66. return d;
  67. }
  68.  
  69. long readLong(long addr)
  70. {
  71. writeAddress(addr);
  72. delay(50);
  73. word msb = readData();
  74. writeAddress(addr + 1);
  75. delay(50);
  76. word lsb = readData();
  77.  
  78. long result = msb;
  79. result = (result << 16) | lsb;
  80. return result;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement