?login_element?

Subversion Repositories NedoOS

Rev

Rev 1644 | Rev 1928 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  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.     getDat();
  80.  
  81.     BOX(1, 1, 80, 25, 40);
  82.     AT(1, 1);
  83.     ATRIB(92);
  84.     printf("GENERAL SOUND LOW LEVEL TESTER \r\n\r\n");
  85.  
  86.     printf("Testing  status register 0xBB \r\n");
  87.     q = getStat() & 129; // 10000001
  88.  
  89.     switch (q)
  90.     {
  91.  
  92.     case 0:
  93.         printf("Data bit and Command bit are reset, OK. \r\n\r\n");
  94.         break;
  95.     case 129:
  96.         printf("Data bit and Command bit are set, FAIL. Port is accessible? \r\n\r\n");
  97.         break;
  98.     case 128:
  99.         printf("Data bit are set, FAIL. \r\n\r\n");
  100.         break;
  101.     case 1:
  102.         printf("Command bit are set, FAIL. \r\n\r\n");
  103.     default:
  104.         printf("Error detecting status. RAW data(10000001): %u\r\n\r\n", q);
  105.     }
  106.  
  107.     printf("Resetting GS... \r\n");
  108.     resetGS();
  109.     printf("Reset OK. Internal memory test...\r\n\r\n");
  110.  
  111.     dataread = 0;
  112.     while (dataread == 0)
  113.     {
  114.         dataread = input(datareg);
  115.     }
  116.  
  117.     printf("Reported by  boot: %u pages\r\n", dataread);
  118.     printf("Reported by 0x20 : %lu bytes\r\n\r\n", getMem());
  119.  
  120.     sendCmd(0xFA);
  121.     printf("sendCmd (0xFA) - test mode on;\r\n");
  122.     sendCmd(11);
  123.     printf("sendCmd (11)   - sound in chanel #1;\r\n");
  124.     sendCmd(12);
  125.     printf("sendCmd (12)   - sound in chanel #2;\r\n");
  126.     sendCmd(13);
  127.     printf("sendCmd (13)   - sound in chanel #3;\r\n");
  128.     sendCmd(14);
  129.     printf("sendCmd (14)   - sound in chanel #4;\r\n\r\n");
  130.  
  131.     printf("Uploading test tune...\r\n");
  132.     sendCmd(0x30);
  133.     modHandle = getDat();
  134.     sendCmd(0xD1);
  135.     for (loadloop = 0; loadloop < sizeof(rawData); loadloop++)
  136.     {
  137.         sendDat(rawData[loadloop]);
  138.     }
  139.     sendCmd(0xD2);
  140.     loadloop = sizeof(rawData);
  141.     printf("%lu bytes uploaded.\r\n", loadloop);
  142.     sendDatnv(modHandle);
  143.     sendCmd(0x31);
  144.     printf("Playing handle %u...\r\n", modHandle);
  145.  
  146.     do
  147.     {
  148.         key = _low_level_get();
  149.     } while (key == 0);
  150.     sendCmd(0xf3);
  151.     return 0;
  152. }
  153.