st010.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #include <../base.hpp>
  2. #define ST010_CPP
  3. #include "st010.hpp"
  4. #include "st010_data.hpp"
  5. #include "st010_op.cpp"
  6. int16 ST010::sin(int16 theta) {
  7. return sin_table[(theta >> 8) & 0xff];
  8. }
  9. int16 ST010::cos(int16 theta) {
  10. return sin_table[((theta + 0x4000) >> 8) & 0xff];
  11. }
  12. uint8 ST010::readb(uint16 addr) {
  13. return ram[addr & 0xfff];
  14. }
  15. uint16 ST010::readw(uint16 addr) {
  16. return (readb(addr + 0) << 0) |
  17. (readb(addr + 1) << 8);
  18. }
  19. uint32 ST010::readd(uint16 addr) {
  20. return (readb(addr + 0) << 0) |
  21. (readb(addr + 1) << 8) |
  22. (readb(addr + 2) << 16) |
  23. (readb(addr + 3) << 24);
  24. }
  25. void ST010::writeb(uint16 addr, uint8 data) {
  26. ram[addr & 0xfff] = data;
  27. }
  28. void ST010::writew(uint16 addr, uint16 data) {
  29. writeb(addr + 0, data);
  30. writeb(addr + 1, data >> 8);
  31. }
  32. void ST010::writed(uint16 addr, uint32 data) {
  33. writeb(addr + 0, data);
  34. writeb(addr + 1, data >> 8);
  35. writeb(addr + 2, data >> 16);
  36. writeb(addr + 3, data >> 24);
  37. }
  38. //
  39. void ST010::init() {
  40. }
  41. void ST010::enable() {
  42. }
  43. void ST010::power() {
  44. reset();
  45. }
  46. void ST010::reset() {
  47. memset(ram, 0x00, sizeof ram);
  48. }
  49. //
  50. uint8 ST010::read(unsigned addr) {
  51. return readb(addr);
  52. }
  53. void ST010::write(unsigned addr, uint8 data) {
  54. writeb(addr, data);
  55. if((addr & 0xfff) == 0x0021 && (data & 0x80)) {
  56. switch(ram[0x0020]) {
  57. case 0x01: op_01(); break;
  58. case 0x02: op_02(); break;
  59. case 0x03: op_03(); break;
  60. case 0x04: op_04(); break;
  61. case 0x05: op_05(); break;
  62. case 0x06: op_06(); break;
  63. case 0x07: op_07(); break;
  64. case 0x08: op_08(); break;
  65. }
  66. ram[0x0021] &= ~0x80;
  67. }
  68. }