iplrom.hpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. //this is the IPLROM for the S-SMP coprocessor.
  2. //the S-SMP does not allow writing to the IPLROM.
  3. //all writes are instead mapped to the extended
  4. //RAM region, accessible when $f1.d7 is clear.
  5. const uint8_t SMP::iplrom[64] = {
  6. /*ffc0*/ 0xcd, 0xef, //mov x,#$ef
  7. /*ffc2*/ 0xbd, //mov sp,x
  8. /*ffc3*/ 0xe8, 0x00, //mov a,#$00
  9. /*ffc5*/ 0xc6, //mov (x),a
  10. /*ffc6*/ 0x1d, //dec x
  11. /*ffc7*/ 0xd0, 0xfc, //bne $ffc5
  12. /*ffc9*/ 0x8f, 0xaa, 0xf4, //mov $f4,#$aa
  13. /*ffcc*/ 0x8f, 0xbb, 0xf5, //mov $f5,#$bb
  14. /*ffcf*/ 0x78, 0xcc, 0xf4, //cmp $f4,#$cc
  15. /*ffd2*/ 0xd0, 0xfb, //bne $ffcf
  16. /*ffd4*/ 0x2f, 0x19, //bra $ffef
  17. /*ffd6*/ 0xeb, 0xf4, //mov y,$f4
  18. /*ffd8*/ 0xd0, 0xfc, //bne $ffd6
  19. /*ffda*/ 0x7e, 0xf4, //cmp y,$f4
  20. /*ffdc*/ 0xd0, 0x0b, //bne $ffe9
  21. /*ffde*/ 0xe4, 0xf5, //mov a,$f5
  22. /*ffe0*/ 0xcb, 0xf4, //mov $f4,y
  23. /*ffe2*/ 0xd7, 0x00, //mov ($00)+y,a
  24. /*ffe4*/ 0xfc, //inc y
  25. /*ffe5*/ 0xd0, 0xf3, //bne $ffda
  26. /*ffe7*/ 0xab, 0x01, //inc $01
  27. /*ffe9*/ 0x10, 0xef, //bpl $ffda
  28. /*ffeb*/ 0x7e, 0xf4, //cmp y,$f4
  29. /*ffed*/ 0x10, 0xeb, //bpl $ffda
  30. /*ffef*/ 0xba, 0xf6, //movw ya,$f6
  31. /*fff1*/ 0xda, 0x00, //movw $00,ya
  32. /*fff3*/ 0xba, 0xf4, //movw ya,$f4
  33. /*fff5*/ 0xc4, 0xf4, //mov $f4,a
  34. /*fff7*/ 0xdd, //mov a,y
  35. /*fff8*/ 0x5d, //mov x,a
  36. /*fff9*/ 0xd0, 0xdb, //bne $ffd6
  37. /*fffb*/ 0x1f, 0x00, 0x00, //jmp ($0000+x)
  38. /*fffe*/ 0xc0, 0xff //reset vector location ($ffc0)
  39. };