Subversion Repositories NedoOS

Rev

Rev 1628 | Rev 1645 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <oscalls.h>
  5. #include <intrz80.h>
  6. #include <terminal.c>
  7. unsigned char key;
  8. #define datareg 179
  9. #define cmdreg 187
  10. #include <booter.c>
  11.  
  12. unsigned char getStat(void)
  13. {
  14.     // Принять данные из регистра статуса
  15.     unsigned char dataread;
  16.     dataread = input(cmdreg);
  17.     return dataread;
  18. }
  19.  
  20. unsigned char getDat(void)
  21. {
  22.     // Принять данные из регистра данных
  23.     unsigned char dataread;
  24.     dataread = input(datareg);
  25.     return dataread;
  26. }
  27.  
  28. void sendDat(unsigned char data)
  29. {
  30.     // Послать код команды в регистр команд
  31.     unsigned char dataread2;
  32.     output(datareg, data);
  33.     dataread2 = 128;
  34.     while (dataread2 != 0)
  35.     {
  36.         dataread2 = (input(cmdreg) & 128);
  37.     }
  38. }
  39.  
  40. void sendDatnv(unsigned char data)
  41. {
  42.     // Послать данные в регистр данных, без ожидания готовности
  43.     output(datareg, data);
  44. }
  45.  
  46. void sendCmd(unsigned char command)
  47. {
  48.     // Послать код команды в регистр команд
  49.     unsigned char dataread2;
  50.     output(cmdreg, command);
  51.     dataread2 = 1;
  52.     while (dataread2 == 1)
  53.     {
  54.         dataread2 = input(cmdreg) & 1;
  55.     }
  56. }
  57.  
  58. void resetGS(void)
  59. {
  60.     sendCmd(0xF4);
  61. }
  62.  
  63. unsigned long getMem(void)
  64. {
  65.     unsigned char ramL, ramM, RamH;
  66.     sendCmd(0x20);
  67.     ramL = getDat();
  68.     ramM = getDat();
  69.     RamH = getDat();
  70.     return (65536 * RamH + 256 * ramM + ramL);
  71. }
  72.  
  73. C_task main(void)
  74. {
  75.     unsigned char dataread, modHandle, q;
  76.     unsigned long loadloop;
  77.     os_initstdio();
  78.  
  79.     BOX(1, 1, 80, 25, 40);
  80.     AT(1, 1);
  81.     ATRIB(92);
  82.     printf("GENERAL SOUND LOW LEVEL TESTER \r\n\r\n");
  83.  
  84.     printf("Testing  status register 0xBB \r\n");
  85.     q = getStat() & 129; // 10000001
  86.  
  87.     switch (q)
  88.     {
  89.  
  90.     case 0:
  91.         printf("Data bit and Command bit are reset, OK. \r\n\r\n");
  92.         break;
  93.     case 129:
  94.         printf("Data bit and Command bit are set, FAIL. Port is accessible? \r\n\r\n");
  95.         break;
  96.     case 128:
  97.         printf("Data bit are set, FAIL. \r\n\r\n");
  98.         break;
  99.     case 1:
  100.         printf("Command bit are set, FAIL. \r\n\r\n");
  101.     default:
  102.         printf("Error detecting status. RAW data(10000001): %u\r\n\r\n", q);
  103.     }
  104.  
  105.     printf("Resetting GS... \r\n");
  106.     resetGS();
  107.     printf("Reset OK. Internal memory test...\r\n\r\n");
  108.  
  109.     dataread = 0;
  110.     while (dataread == 0)
  111.     {
  112.         dataread = input(datareg);
  113.     }
  114.  
  115.     printf("Reported by  boot: %u pages\r\n", dataread);
  116.     printf("Reported by 0x20 : %lu bytes\r\n\r\n", getMem());
  117.  
  118.     /*
  119.         sendDat(255);
  120.         printf("sendDat(255);\r\n");
  121.         sendCmd(0x16);
  122.         printf("sendCmd(0x17);\r\n");
  123.         sendDat(255);
  124.         dataread = getDat();
  125.         printf("04: %u\r\n", dataread);
  126.     */
  127.     /*
  128.         sendDat(0x00);
  129.         sendCmd(0x18);
  130.         sendDat(0x5b);
  131.         waitDATbit();
  132.         printf("ld de, 5b00\r\n");
  133.  
  134.         sendCmd(0x1A);
  135.         dataread = getDat();
  136.         printf("Memory at (de): %#x\r\n", dataread);
  137.  
  138.         sendDat(0x55);
  139.         sendCmd(0x19);
  140.         printf("ld (de), 0x55\r\n");
  141.  
  142.         sendCmd(0x1A);
  143.         dataread = getDat();
  144.         printf("Memory at (de): %#x\r\n", dataread);
  145.         printf("-------------------------------------------\r\n");
  146.  
  147.     */
  148.  
  149.     sendCmd(0xFA);
  150.     printf("sendCmd (0xFA) - test mode on;\r\n");
  151.     sendCmd(11);
  152.     printf("sendCmd (11)   - sound in chanel #1;\r\n");
  153.     sendCmd(12);
  154.     printf("sendCmd (12)   - sound in chanel #2;\r\n");
  155.     sendCmd(13);
  156.     printf("sendCmd (13)   - sound in chanel #3;\r\n");
  157.     sendCmd(14);
  158.     printf("sendCmd (14)   - sound in chanel #4;\r\n\r\n");
  159.  
  160.     printf("Uploading test tune, bytes...");
  161.     sendCmd(0x30);
  162.     modHandle = getDat();
  163.     sendCmd(0xD1);
  164.     for (loadloop = 0; loadloop < sizeof(rawData); loadloop++)
  165.     {
  166.         sendDat(rawData[loadloop]);
  167.         if ((loadloop % 5000) == 0)
  168.             printf("%lu, ", loadloop);
  169.     }
  170.     sendCmd(0xD2);
  171.     loadloop = sizeof(rawData);
  172.     printf("%lu. ", loadloop);
  173.  
  174.     printf("\r\nLoaded...\r\n");
  175.     sendDatnv(modHandle);
  176.     sendCmd(0x31);
  177.     printf("Playing handle %u...\r\n", modHandle);
  178.  
  179.     do
  180.     {
  181.         key = _low_level_get();
  182.     } while (key == 0);
  183.     sendCmd(0xf3);
  184.     return 0;
  185. }
  186.