Fantasy 8Bit system (F8), is a fantasy 8bit console and a set of libraries for creating fantasy 8bit consoles.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
2.1KB

  1. const expect = require('chai').expect;
  2. const MOSCIA = require('../src/MOSCIA.js');
  3. describe("MOSCIA Tests...", function(){
  4. //var cia = new MOSCIA();
  5. it("PD*/DD* Masking", function(){
  6. let cia = new MOSCIA();
  7. let pdaVal = 0x3C;
  8. let pdbVal = 0xC3;
  9. cia.onRead("PDA", (name, dda) => {
  10. if (dda < 255)
  11. cia.setPDA(pdaVal);
  12. });
  13. cia.onRead("PDB", (name, ddb) => {
  14. if (ddb < 255)
  15. cia.setPDB(pdbVal);
  16. });
  17. cia.RS = 0x02;
  18. cia.DATA = 0x00;
  19. cia.RS = 0x00;
  20. expect(cia.DATA).to.be.equal(pdaVal);
  21. cia.RS = 0x03;
  22. cia.DATA = 0x00;
  23. cia.RS = 0x01;
  24. expect(cia.DATA).to.be.equal(pdbVal);
  25. cia.RS = 0x02;
  26. cia.DATA = pdbVal;
  27. cia.RS = 0x00;
  28. cia.DATA = pdbVal;
  29. expect(cia.DATA).to.be.equal(0xFF);
  30. cia.RS = 0x03;
  31. cia.DATA = pdaVal;
  32. cia.RS = 0x01;
  33. cia.DATA = pdaVal;
  34. expect(cia.DATA).to.be.equal(0xFF);
  35. });
  36. it("Serial IO", function(){
  37. let cia = new MOSCIA();
  38. let Input = (i) => {
  39. cia.SP = i;
  40. cia.CNT = 1;
  41. cia.phi2 = 1;
  42. };
  43. var outval = 0;
  44. let Output = () => {
  45. cia.CNT = 1;
  46. cia.phi2 = 1;
  47. outval = (outval << 1) | cia.SP;
  48. }
  49. cia.RS = 0x0C;
  50. Input(1);
  51. expect(cia.DATA).to.be.equal(1);
  52. Input(1);
  53. expect(cia.DATA).to.be.equal(3);
  54. Input(0);
  55. expect(cia.DATA).to.be.equal(6);
  56. Input(0);
  57. Input(1);
  58. Input(1);
  59. Input(0);
  60. Input(1);
  61. expect(cia.DATA).to.be.equal(0xCD);
  62. cia.RS = 0x0D;
  63. expect((cia.DATA & 0x08) >> 3).to.be.equal(1);
  64. // Reading from RS = 0x0D should clear the interrupt values. Checking this
  65. expect(cia.DATA).to.be.equal(0);
  66. cia.RS = 0x0E;
  67. cia.DATA = 0x40; // Enable serial output.
  68. Output();
  69. expect(outval).to.be.equal(1);
  70. Output();
  71. expect(outval).to.be.equal(3);
  72. Output();
  73. expect(outval).to.be.equal(6);
  74. Output();
  75. Output();
  76. Output();
  77. Output();
  78. Output();
  79. expect(outval).to.be.equal(0xCD);
  80. cia.RS = 0x0C;
  81. expect(cia.DATA).to.be.equal(0);
  82. cia.RS = 0x0D;
  83. expect((cia.DATA & 0x08) >> 3).to.be.equal(1);
  84. expect(cia.DATA).to.be.equal(0);
  85. });
  86. });