home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / kaypro / trstatln.lbr / STATLN.CQ / STATLN.C
Text File  |  1986-07-13  |  4KB  |  139 lines

  1. /*==============================================================*/
  2. /*    statln.c enable/disable 25th line for '84 TurboROMs    */
  3. /*                                */    
  4. /*    this code compiles with Software Toolworks C/80 3.1    */
  5. /*    C compiler.                        */
  6. /*                                */
  7. /*    3/21/86  gsd    added comments               */
  8. /*    11/12/85 gsd    initial coding               */
  9. /*==============================================================*/
  10.                                 
  11. #define    TRUE     1
  12. #define FALSE    0
  13.  
  14. #define STDBDOS 0x0dfa        /* length of standard BDOS    */
  15. #define    SUMLN    8        /* number of bytes checksummed    */
  16. #define ESC \033        /* ascii escape character    */
  17. #define CLS \032        /* clear screen character    */
  18. #define EOL \030        /* erase to end of line        */
  19. char *id_match = "PPS";        /* Turbo ROM ID string        */
  20. char *en_25    = "   \033=8 \030\032\033B7Status Line: Enabled";
  21. char *dis_25   = "   \033=8 \030\032\033C7Status Line: Disabled";
  22.  
  23. /*==============================================================*/
  24. /* structure definintion for hard disk table variables        */
  25. /*==============================================================*/
  26. struct hd_tbl {
  27.     int    *badtr0;    /* pointer to first bad track    */
  28.     int    mxcyl0;        /* maximum cylinder phys drv 1    */
  29.     char    step0;        /* step rate phys drv 1        */
  30.     char    precp0;        /* precompensation drv 1    */
  31.     int    *badtr1;    /* pointer to first bad track    */
  32.     int    mxcyl1;        /* maximum cylinder phys drv 2    */
  33.     char    step1;        /* step rate phys drv 2        */
  34.     char    precp1;        /* precompensation drv 2    */
  35.     char    sltmsk;        /* drive select mask        */
  36.     char    wdflag;        /* HDC present flag        */
  37.     char    fstat;        /* drive track density status    */
  38.     char    muxflg;        /* 4 drive decoder flag        */
  39.     char    dmy1[12];    /* floppy drive constants    */
  40.     char    fstprt;        /* current floppy step rate    */
  41.     char    hlddly;        /* current floppy head load    */
  42.     char    stldly;        /* current haed delay time    */
  43.     char    smflag;        /* flag for K10 small sectors    */
  44. };
  45.  
  46. /*==============================================================*/
  47. /* structure definintion for fixed high memory objects        */
  48. /*==============================================================*/
  49. struct    hi_mem {
  50.     struct  hd_tbl *hrdptr;    /* pointer to hard disk tables    */
  51.     char    *extptr;    /* external translation area    */
  52.     char    *intptr;    /* interrupt vectors        */
  53.     char    *hstptr;    /* bottom of host buffer    */
  54.     char    *dpbptr;    /* DPB table            */
  55.     char    *dphptr;    /* DPH drive table        */
  56.     char    rom_id[3];    /* ROM ID string        */
  57.     char    rom_vers;    /* ROM version            */
  58.     char    dmy;        /* 8080 jmp opcode        */
  59.     int    (*xclrom)();    /* ROM entry point        */
  60.     char    rom_cks;    /* ROM checksum byte        */
  61. };
  62.  
  63. struct    hi_mem *ram = 0xffec;èstruct    hd_tbl *var;
  64. char    *bios, *bdos;
  65. int     on = 1;
  66.  
  67. main(argc, argv)
  68. int argc;
  69. char *argv[];
  70. {
  71.     /*
  72.         generate pointers to BIOS and BDOS entry points
  73.     */
  74.     bios = ((char *) (*((int *) 0x0001))) - 3;
  75.     bdos = bios - STDBDOS;
  76.  
  77.     if(isturbo() && (ram->rom_vers & 0x80)){
  78.         if(argc > 1){
  79.             if(on)
  80.                 on = strcmp(argv[1], "OFF");
  81.             if(on)
  82.                 on = strcmp(argv[1], "0");
  83.         }
  84.         puts((on) ? en_25 : dis_25);
  85.         exit();
  86.     }
  87.     puts("\nThis program requires the \'84 TurboROM");
  88. }
  89.  
  90. /*==============================================================*/
  91. /*    puts(str) output null terminated string to stdout    */
  92. /*==============================================================*/
  93. puts(str)
  94. char *str;
  95. {
  96.     while(*str)
  97.         putchar(*str++);
  98. }
  99.  
  100. /*==============================================================*/
  101. /*    isturbo() fuction to test if Turbo ROM installed    */
  102. /*                                */    
  103. /*    returns:  TRUE if Turbo ROM installed            */
  104. /*              FALSE if Turbo ROM not installed        */
  105. /*==============================================================*/
  106. isturbo()
  107. {
  108.     char *p, *id, sum;
  109.     int i;
  110.  
  111.     /*
  112.         verify ROM checksum
  113.     */
  114.     p = ram->rom_cks;
  115.     sum = 0;
  116.     i = SUMLN;
  117.     while(i--)
  118.         sum += *p--;
  119.  
  120.     if(sum){        
  121.     }
  122.     /*
  123.         verify ROM ID
  124.     */    
  125.     id = id_match;
  126.     p = ram->rom_id;
  127.     while(*id){
  128.         if(*p++ == *id++)
  129.             continue;
  130.     
  131.         return FALSE;
  132.     }
  133.     /*
  134.         Set up pointer to floating variables
  135.     */
  136.     var = ram->hrdptr;
  137.     return TRUE;
  138. }
  139.