Fantasy 8Bit system (F8), is a fantasy 8bit console and a set of libraries for creating fantasy 8bit consoles.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

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. });