.context h.default
.context h.contents
.context sysp
.context @L8000
:l15
:n⥪ ⥬ ணࠬ
Ŀ
⥪ ⥬ ணࠬ                                
ࠢ筠  , (C)஫ .., ஫ .., V1.0, 1991   

 
\a\b  1,  1,2 (ୠ ⠡ 裡, ࠩ)\vsysp11\v\p
\a\b  1,  3 (᪮ ⥬)\vsysp13\v\p
\a\b  2, (⭮ ᯥ祭 IBM PC/XT/AT)\vsysp2\v\p
\a\b  3, ( CGA/EGA/VGA)\vsysp3\v\p
\a\b  4, (㬥⠫ ।⢠)\vsysp4\v\p
\a\b 㣨 ⮬\vsysp5x\v\p
 
.context sysp11
.context @L8001
:l15
:nᠭ 㭪権
   ⥪ ⥬ ணࠬ, ⮬1,  1, 2. \a<  >\vsysp\v

  ⠢ FAR-㪠⥫                         \a FP_MAKE\vfp_make\v
  ୮ ⠡ 裡                      \a get_cvt\vget_cvt\v
  DDCB  ᪠                         \a get_ddcb\vget_ddcb\v
  EXE-䠩                               \a get_exeh\vget_exeh\v
  ࢮ DDCB                                 \a get_fddcb\vget_fddcb\v
  ࢮ DTF                                   \a get_fdft\vget_fdft\v
  ࢮ MCB                                  \a get_fmcb\vget_fmcb\v
  ୮ ⠡ 裡                      \a get_mcvt\vget_mcvt\v
  ᫥饣 DDCB                              \a get_nddcb\vget_nddcb\v
  ᫥饩 DTF                                \a get_ndft\vget_ndft\v
  ᫥饣 MCB                               \a get_nmcb\vget_nmcb\v
 ࠢ   ⥪                     \a help\vhelp\v
 

.context FP_MAKE
.context @L8002
:l15
:n㭪 FP_MAKE
\a\u<  >\vsysp11\v \a<  >\vsysp\v \a< ਬ >\vshow_psp.c\v\p

 
\b⨯ 㭪樨:\p
          FP_MAKE(seg,off)
 
\bࠬ 㭪樨:\p
             seg - ᥣ;
             off - ᬥ饭
 
\bᠭ 㭪樨:\p
           ⠢ FAR-㪠⥫, 
          祭ﬨ ᥣ  ᬥ饭
 
\b頥 祭:\p
          FAR-㪠⥫ seg:off
 
 
 
.context get_cvt
.context @L8003
:l15
:n㭪 get_cvt
\a\u<  >\vsysp11\v \a<  >\vsysp\v \a< ਬ >\vshow_cvt.c\v\p

 
\b⨯ 㭪樨:\p
          void far *get_cvt(void);
 
\bࠬ 㭪樨:\p
          
 
\bᠭ 㭪樨:\p
          㭪 頥  ୮ ⠡ 裡
           DOS ᨩ 2., 3., 4.00, 4.01
 
\b頥 祭:\p
          ⥫   ⠡ 裡
 
 
 
.context get_ddcb
.context @L8004
:l15
:n㭪 get_ddcb
\a\u<  >\vsysp11\v \a<  >\vsysp\v \a< ਬ >\vshowddcb.c\v\p

 
\b⨯ 㭪樨:\p
          DDCB far *get_ddcb(int device_number)
 
\bࠬ 㭪樨:\p
          device_number -  ᪠,  ண
                          ॡ  DDCB
                            ⠪:
                          0 - ⥪騩 , 1 -   ..
 
\bᠭ 㭪樨:\p
          㭪 頥   ࠢ
          ன⢮ DOS DDCB
 
\b頥 祭:\p
          ⥫  DDCB  ᪠
 
 
 
.context get_exeh
.context @L8005
:l15
:n㭪 get_exeh
\a\u<  >\vsysp11\v \a<  >\vsysp\v \a< ਬ >\vshow_exe.c\v\p

 
\b⨯ 㭪樨:\p
          int get_exeh(EXE_HDR *exeh,RELOC_TAB **rtb,FILE *exe_file)
 
\bࠬ 㭪樨:\p
             exeh -  㪠⥫  , 
                        ଠ樥
                       EXE-䠩
 
             rtb  -  㪠⥫  㪠⥫  ⠡
                     ࠧ饭 ᥣ⮢ ணࠬ
 
             exe_file - 㪠⥫   EXE-䠩
                     ( 맮 㭪樨  
                      ⮬ 䠩, .. ⠥, 
                     㪠⥫ ⥪饣 ᬥ饭 ⠭
                      砫 䠩)
 
\bᠭ 㭪樨:\p
          㭪 ⠥  EXE-䠩 
           ⨯ EXE_HDR, 뢠 
           ⠡ ࠧ饭 ᥣ⮢  뢠
          ⠡   .   
          頥  , ।  rtb.
          ᫨ ⠡ ࠧ饭 ,  
            뢠.
 
\b頥 祭:\p
          0  ᯥ譮 뢠 ;
          -1  砥 ࠢ쭮 ଠ 
 
 
 
.context get_fddcb
.context @L8006
:l15
:n㭪 get_fddcb
\a\u<  >\vsysp11\v \a<  >\vsysp\v \a< ਬ >\vshow_ddc.c\v\p

 
\b⨯ 㭪樨:\p
          DDCB far *get_fddcb(CVT far *cvt)
 
\bࠬ 㭪樨:\p
              cvt -  ୮ ⠡ 裡
 
\bᠭ 㭪樨:\p
          㭪 頥  ࢮ  DDCB
 
\b頥 祭:\p
          ⥫    DDCB
 
 
 
.context get_fdft
.context @L8007
:l15
:n㭪 get_fdft
\a\u<  >\vsysp11\v \a<  >\vsysp\v \a< ਬ >\vshow_dfc.c\v\p

 
\b⨯ 㭪樨:\p
          DTF far *get_fdtf(CVT far *cvt)
 
\bࠬ 㭪樨:\p
              cvt -  ୮ ⠡ 裡
 
\bᠭ 㭪樨:\p
          㭪 頥  ࢮ ⠡ 䠩 DOS
 
\b頥 祭:\p
          ⥫    DDCB
 
 
 
.context get_fmcb
.context @L8008
:l15
:n㭪 get_fmcb
\a\u<  >\vsysp11\v \a<  >\vsysp\v \a< ਬ >\vshow_mcb.c\v\p

 
\b⨯ 㭪樨:\p
          MCB far *get_fmcb(CVT far *cvt)
 
\bࠬ 㭪樨:\p
             cvt -  ୮ ⠡ 裡
 
\bᠭ 㭪樨:\p
          㭪 頥  ࢮ  MCB
 
\b頥 祭:\p
          ⥫    MCB
 
 
 
.context get_mcvt
.context @L8009
:l15
:n㭪 get_mcvt
\a\u<  >\vsysp11\v \a<  >\vsysp\v \a< ਬ >\vshow_ddc.c\v\p

 
\b⨯ 㭪樨:\p
          CVT far *get_mcvt(void);
 
\bࠬ 㭪樨:\p
          
 
\bᠭ 㭪樨:\p
          㭪 頥  ୮ ⠡ 裡
           DOS ᨩ 2., 3., 4.00, 4.01
 
\b頥 祭:\p
          ⥫   ⠡ 裡
 
 
 
.context get_nddcb
.context @L800a
:l15
:n㭪 get_nddcb
\a\u<  >\vsysp11\v \a<  >\vsysp\v \a< ਬ >\vshow_ddc.c\v\p

 
\b⨯ 㭪樨:\p
          DDCB far *get_nddcb(DDCB far *ddcb);
 
\bࠬ 㭪樨:\p
             ddcb -  ।饣 DDCB
 
\bᠭ 㭪樨:\p
          㭪 頥  ᫥饣  DDCB
           0, ᫨  ᫥   楯窥
 
\b頥 祭:\p
          ⥫  ᫥騩  DDCB
           0, ᫨  ᫥   楯窥
 
 
 
.context get_ndft
.context @L800b
:l15
:n㭪 get_ndft
\a\u<  >\vsysp11\v \a<  >\vsysp\v \a< ਬ >\vshow_dfc.c\v\p

 
\b⨯ 㭪樨:\p
          DFT far *get_ndft(DFT far *dft)
 
\bࠬ 㭪樨:\p
             dft -  ।饩 ⠡ DFT
 
\bᠭ 㭪樨:\p
          㭪 頥  ᫥饩
          ⠡ 䠩 DOS  0, ᫨  ᫥ ⠡
 
\b頥 祭:\p
          ⥫  ᫥ DFT,  0, ᫨ ᫥
 
 
 
.context get_nmcb
.context @L800c
:l15
:n㭪 get_nmcb
\a\u<  >\vsysp11\v \a<  >\vsysp\v \a< ਬ >\vshow_mcb.c\v\p

 
\b⨯ 㭪樨:\p
          MCB far *get_fmcb(MCB far *mcb)
 
\bࠬ 㭪樨:\p
             mcb -  ।饣 MCB
 
\bᠭ 㭪樨:\p
          㭪 頥  ᫥饣  MCB
           0, ᫨  ᫥ .  ⢥
          ࠬ ᯮ 㪠⥫  ।騩
           MCB
 
\b頥 祭:\p
          ⥫  ᫥騩  MCB  0, ᫨
           ᫥ MCB
 
 
 
.context help
.context @L800d
:l15
:n㭪 help
\a\u<  >\vsysp11\v \a<  >\vsysp\v \a< ਬ >\vqhrun.c\v\p

 
\b⨯ 㭪樨:\p
          int help(char *help_file, char *help_topic);
 
\bࠬ 㭪樨:\p
             help_file  - ६ ।, 㪠뢠
                             ࠢ筮 
 
             help_topic - ⥪  ᪠  
 
 
\bᠭ 㭪樨:\p
          㭪 砥  ⢥ ࠬ஢
          ६ ।, 㪠뢠  
           ࠢ筮    㪠⥫
           ப ⥪  ᪠  .
          ⥬ ᪠  ୨ 
          ⨫ Microsoft Quick Help QH.EXE, 
          ன ନ ।  ࠬ.
 
\b頥 祭:\p
          0  ᯥ譮 ᪥ 
          -1  㤠  
 
 
 
.context show_psp.c
.context @L800e
\a\u<  >\vsysp11\v \a<  >\vsysp\v\p

#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include "sysp.h"
 
void main(void);
 
void main(void) {
 
  PSP far *psp_ptr;
 
 
  psp_ptr = FP_MAKE(_psp,0);  // 㥬 㪠⥫
                              //   PSP
  printf("PSP ᯮ  :   %Fp\\n"
         "㯭 , :       %ld\\n"
         "PSP த⥫᪮ ணࠬ:  %Fp\\n"
         "\\n",
         psp_ptr,
         (long)(psp_ptr->mem_top)*16L,
         FP_MAKE(psp_ptr->parn_psp,0));
  exit(0);
 
}

.context show_cvt.c
.context @L800f
\a\u<  >\vsysp11\v \a<  >\vsysp\v\p

#include <dos.h>
#include <stdio.h>
#include "sysp.h"
 
void main(void);
 
void main(void)
{
    void far *cvt;
 
    cvt=get_cvt();
    printf(" ୮ ⠡ 裡: %Fp\\n",cvt);
 
    exit(0);
}

.context showddcb.c
.context @L8010
\a\u<  >\vsysp11\v \a<  >\vsysp\v\p

#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#include "sysp.h"
 
void main(void);
 
void main(void)
{
    DDCB far *ddcb;
    unsigned char dr;
 
    for(dr=1;;dr++) {
 
      ddcb=get_ddcb(dr);
      if(ddcb == (DDCB far *)0) break;
      printf("%Fp\\n",ddcb);
    }
    exit(0);
}

.context show_exe.c
.context @L8011
\a\u<  >\vsysp11\v \a<  >\vsysp\v\p

#include <stdio.h>
#include <stdlib.h>
#include "sysp.h"
 
void main(int, char *[]);
 
void main(int argc, char *argv[]) {
 
   printf("ᯥ⪠  EXE-䠩\\n"
          "Copyright (C)Frolov A., 1990\\n\\n");
 
   if( argc != 2 ) {
      printf( "    EXE-䠩  ⢥ ࠬ\\n" );
      exit(0);
   }
 
   if( gethdr( argv[1]) != 0) {
         printf( "訡  ଠ 䠩   ⠪ 䠩\\n" );
         exit(0);
   }
   exit(0);
}
 
int gethdr( char *path) {
 
   EXE_HDR     header;
   RELOC_TAB   *reloc;
   FILE        *inpfile;
   int         i;
 
   if((inpfile = fopen(path,"rb")) == 0) return(-1);
 
   if(get_exeh(&header,&reloc,inpfile) != 0) {
      fclose(inpfile);
      return(-1);
   }
   printf("᪮ ᫮:                    %04X\\n"
          " ᫥ ࠭ 䠩:      %d\\n"
          "⢮ ࠭  䠩:          %d\\n"
          ". ⮢ ⠡. ६饭:    %d\\n"
          "   ࠣ:       %d\\n"
          "쭠   ணࠬ:    %04X\\n"
          "ᨬ쭠   ணࠬ:   %04X\\n"
          "祭  ⥪ SS:SP:         %04X:%04X\\n"
          "஫쭠 㬬:                   %04X\\n"
          "祭  ॣ஢ CS:IP:        %04X:%04X\\n"
          "饭 ⠡. ६饭:          %02X\\n"
          " ૥:                       %d\\n",
          header.signature,
          header.part_pag,
          header.file_size,
          header.rel_item,
          header.hdr_size,
          header.min_mem,
          header.max_mem,
          header.ss_reg,
          header.sp_reg,
          header.chk_summ,
          header.cs_reg,
          header.ip_reg,
          header.relt_off,
          header.overlay);
 
 
   if(reloc != 0) {
      printf("\\nন ⠡ ६饭:\\n\\n");
 
      for(i=0;i < header.rel_item; i++) {
         printf("%04X:%04X\\n",
         (reloc+i)->segment,
         (reloc+i)->offset);
 
      }
      free(reloc);
   }
   fclose(inpfile);
   return(0);
}

.context show_ddc.c
.context @L8012
\a\u<  >\vsysp11\v \a<  >\vsysp\v\p

#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#include "sysp.h"
 
void main(void);
 
void main(void)
{
    CVT far *cvt;
    DDCB far *ddcb;
 
    printf("\\n ࠢ ᪮묨 ன⢠ (DDCB)"
           "\\nCopyright (C)Frolov A., 1990\\n"
           "\\n");
 
    cvt=get_mcvt();
 
    ddcb=get_fddcb(cvt);
 
    for(;;) {
 
      if(ddcb == (DDCB far *)0) break;
 
      printf(" DDCB:                          %Fp\\n"
             " ன⢠:                    %d\\n"
             "⥫ :                %d\\n"
             " ᥪ:                      %d\\n"
             "   ᥪ:          %d\\n"
             " ࠧ :               %d\\n"
             "१ࢨ஢ ᥪ஢:            %d\\n"
             "᫮  FAT:                     %d\\n"
             ". 䠩  ୥ ⠫ :   %d\\n"
             "  :               %d\\n"
             "ᥣ ஢:                     %d\\n"
             " FAT  ᥪ:               %d\\n"
             " ᥪ ୥ ⠫:    %d\\n"
             " reserv1:                        %01X\\n"
             " ࠩ:                      %Fp\\n"
             " ⥫ । ⥫:       %01X\\n"
             " 㯠:                        %01X\\n"
             " ᫥饣 DDCB:               %Fp\\n"
             " reserv2:                        %04X\\n"
             " ஥:                       %04X\\n"
             "----------------------------------------------------\\n\\n",
             ddcb,
             ddcb->drv_num,
             ddcb->drv_numd,
             ddcb->sec_size,
             ddcb->clu_size,
             ddcb->clu_base,
             ddcb->boot_siz,
             ddcb->fat_num,
             ddcb->max_dir,
             ddcb->data_sec,
             ddcb->hi_clust,
             ddcb->fat_size,
             ddcb->root_sec,
             ddcb->reserv1,
             ddcb->drv_addr,
             ddcb->media,
             ddcb->acc_flag,
             ddcb->next,
             ddcb->reserv2,
             ddcb->built);
 
      ddcb=get_nddcb(ddcb);
 
    }
 
    exit(0);
}

.context show_dfc.c
.context @L8013
\a\u<  >\vsysp11\v \a<  >\vsysp\v\p

#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#include "sysp.h"
 
void main(void);
 
void main(void)
{
 
    CVT far *cvt;
    DFT far *dft;
    unsigned i,j,k;
    DFCB far *dfcb;
    FILE *list;
 
    printf("ଠ   䠩 DOS\\n"
           "Copyright Frolov A. (C),1990\\n");
 
    // 뢠 䠩  뢮 ଠ樨  䠩
 
    list=fopen("!dfcb.lst","w+");
 
    fprintf(list,"ଠ   䠩 DOS\\n"
           "Copyright Frolov A. (C),1990\\n\\n");
 
    cvt=get_mcvt();     //  ୮ ⠡ 裡
    dft=get_fdft(cvt);  //  砫 ⠡ 䠩
 
    for(;;) {
      if(dft == (DDCB far *)0) break;  //  ⠡ 䠩
 
      i=dft->file_count;
      fprintf(list," 䠩 DFT: %Fp,   %d 䠩\\n"
                   "===========================================\\n",
                   dft,i);
 
      for(j=0;j<i;j++) {   //   䠩 ࠢ騬 
 
         dfcb=(&(dft->dfcb))+j; //  DFCB 䠩
 
         fprintf(list,"\\nDFCB 䠩: %Fp\\n\\n",dfcb);
 
         fprintf(list," 䠩: ");
         for(k=0;k<11;k++) {
            fputc(dfcb->filename[k],list);
         }
 
         fprintf(list,"\\n⢮ file handles:       %d\\n"
                " 㯠:                 %d\\n"
                " reserv1:                  %04X\\n"
                "ଠ  ன⢥:      %04X\\n"
                " ࠩ:                %Fp\\n"
                "砫 :             %d\\n"
                "६:                         %04X\\n"
                ":                          %04X\\n"
                " 䠩  :         %ld\\n"
                "饥 ᬥ饭  䠩:      %ld\\n"
                " reserv2:                  %04X\\n"
                "᫥ ⠭ : %d\\n"
                " PSP  䠩:   %04X\\n"
                " reserv7:                  %d\\n"
                "--------------------------------------\\n\\n",
                dfcb->handl_num,
                dfcb->access_mode,
                dfcb->reserv1,
                dfcb->dev_info,
                dfcb->driver,
                dfcb->first_clu,
                dfcb->time,
                dfcb->date,
                dfcb->fl_size,
                dfcb->offset,
                dfcb->reserv2,
                dfcb->last_clu,
                dfcb->ownr_psp,
                dfcb->reserv7);
 
      }
      dft=get_ndft(dft);
    }
    fclose(list);
    exit(0);
}

.context show_mcb.c
.context @L8014
\a\u<  >\vsysp11\v \a<  >\vsysp\v\p

#include <dos.h>
#include <stdio.h>
#include "sysp.h"
 
void main(void);
 
void main(void)
{
    CVT far *cvt;
    MCB far *mcb;
 
    printf("\\n ࠢ  (MCB)"
           "\\nCopyright (C)Frolov A., 1990\\n"
           "\\n MCB   "
           "\\n--------- --- -------- ------"
           "\\n");
    cvt=get_mcvt();
    mcb=get_fmcb(cvt);
    for(;;) {
 
      if(mcb == (MCB far *)0) break;
      printf("%Fp %c   %04X     %04X\\n",
         mcb,
         mcb->type,
         mcb->owner,
         mcb->size);
      mcb=get_nmcb(mcb);
 
    }
    exit(0);
}

.context qhrun.c
.context @L8015
\a\u<  >\vsysp11\v \a<  >\vsysp\v\p

#include <stdio.h>
#include <conio.h>
#include <process.h>
 
main()
{
    int r;
 
    // 砥 ࠢ  㭪樨 printf,
    //  ࠢ筠   ᯮ
    //   ⠫ d:\\qc2\\bin
 
    r = help("HELPFILES=d:\\\\qc2\\\\bin;","printf");
 
    if( r == -1 )
        printf( "  " );
    else
        printf( "\\n 襭" );
    exit(r);
}
 

.context sysp13
.context @L8016
:l15
:nᠭ 㭪権
   ⥪ ⥬ ணࠬ, ⮬1,  3. \a<  >\vsysp\v

। 䨣 ᪮ ⥬                 \a disk_cfg\vdisk_cfg\v
   FAT                                      \a fat\vfat\v
 ଠ  ன⢥                           \a get_devi\vget_devi\v
᫨  ⠡ ࠬ஢ ᪥                  \a get_dpt\vget_dpt\v
᫨  ⠡ ࠬ஢ ᪠ 1                  \a get_hdp1\vget_hdp1\v
᫨  ⠡ ࠬ஢ ᪠ 2                  \a get_hdp2\vget_hdp2\v
  䨪 BIOS                          \a getbiosi\vgetbiosi\v
 㧮                                   \a getboot\vgetboot\v
  㧮                           \a getmboot\vgetmboot\v
஢ ᫮ " 䠩"                             \a heof\vheof\v
।                                  \a pc_model\vpc_model\v
 

.context disk_cfg
.context @L8017
:l15
:n㭪 disk_cfg
\a\u<  >\vsysp13\v \a<  >\vsysp\v \a< ਬ >\vdiscshow.c\v\p

 
\b⨯ 㭪樨:\p
          void disk_cfg(DISK_CONFIG* cfg);
 
\bࠬ 㭪樨:\p
              DISK_CONFIG* cfg - 㪠⥫  塞
                                 
 
\bᠭ 㭪樨:\p
          㭪  , 뢠
          䨣 ᪮ ⥬:
 
             typedef struct _DISK_CONFIG_ {
                int  n_floppy;
                int  n_hard;
                int  t_floppy1;
                int  t_floppy2;
                int  t_hard1;
                int  t_hard2;
             } DISK_CONFIG;
 
\b頥 祭:\p
          祣
 
 
 
.context fat
.context @L8018
:l15
:n㭪 fat
\a\u<  >\vsysp13\v \a<  >\vsysp\v \a< ਬ >\vdirlist.c\v\p

 
\b⨯ 㭪樨:\p
          int fat(b_fat, t_fat, idx);
 
\bࠬ 㭪樨:\p
          char _far *b_fat  - , ᮤঠ騩 FAT
 
          int t_fat         - ଠ FAT,  
                              ࠢ 12  16
 
          int idx           -   FAT, 
                                ࠭
 
\bᠭ 㭪樨:\p
          㭪 롨ࠥ    ஬  ⠡
          ࠧ饭 䠩 FAT. ଠ FAT ।
          㭪樨  ࠬ.
 
\b頥 祭:\p
          ন 祩 FAT  㪠 ஬
 
 
 
.context get_devi
.context @L8019
:l15
:n㭪 get_devi
\a\u<  >\vsysp13\v \a<  >\vsysp\v \a< ਬ >\vshow_di.c\v\p

 
\b⨯ 㭪樨:\p
          int get_devi(int handle, int *info);
 
\bࠬ 㭪樨:\p
          handle      - 䠩  (奭) 
                        ண 室 
                        
 
          info        - 㪠⥫  ᫮,  ஥
                          ᠭ ଠ
 
\bᠭ 㭪樨:\p
          㭪 砥 ଠ  䠩
            ன⢥   䠩 .
 
 
\b頥 祭:\p
          0          - ᫨  訡;
           訡 - ᫨ ந諠 訡.
 
 
 
.context get_dpt
.context @L801a
:l15
:n㭪 get_dpt
\a\u<  >\vsysp13\v \a<  >\vsysp\v \a< ਬ >\vdiscshow.c\v\p

 
\b⨯ 㭪樨:\p
          DPT _far *get_dpt(void);
 
\bࠬ 㭪樨:\p
          
 
\bᠭ 㭪樨:\p
          㭪 頥 㪠⥫  ⠡
          ࠬ஢ ᪥
 
\b頥 祭:\p
          ⥫  ⠡ ࠬ஢ ᪥ DPT
 
 
 
.context get_hdp1
.context @L801b
:l15
:n㭪 get_hdp1
\a\u<  >\vsysp13\v \a<  >\vsysp\v \a< ਬ >\vdiscshow.c\v\p

 
\b⨯ 㭪樨:\p
          HDPT _far *get_hdp1(void);
 
\bࠬ 㭪樨:\p
          
 
\bᠭ 㭪樨:\p
          㭪 頥 㪠⥫  ⠡
          ࠬ஢ ᪠ 1
 
\b頥 祭:\p
          ⥫  ⠡ ࠬ஢ ᪠ 1 HDPT
 
 
 
.context get_hdp2
.context @L801c
:l15
:n㭪 get_hdp2
\a\u<  >\vsysp13\v \a<  >\vsysp\v \a< ਬ >\vdiscshow.c\v\p

 
\b⨯ 㭪樨:\p
          HDPT _far *get_hdp2(void);
 
\bࠬ 㭪樨:\p
          
 
\bᠭ 㭪樨:\p
          㭪 頥 㪠⥫  ⠡
          ࠬ஢ ᪠ 2
 
\b頥 祭:\p
          ⥫  ⠡ ࠬ஢ ᪠ 2 HDPT
 
 
 
.context getbiosi
.context @L801d
:l15
:n㭪 getbiosi
\a\u<  >\vsysp13\v \a<  >\vsysp\v \a< ਬ >\vshowbios.c\v\p

 
\b⨯ 㭪樨:\p
          BIOS_ID _far *getbiosi(void);
 
\bࠬ 㭪樨:\p
          
 
\bᠭ 㭪樨:\p
          㭪 頥  䨪 BIOS,
          饣 ᫥ :
 
                 typedef struct _BIOS_ID_ {
 
                    char date[8];
                    unsigned reserve;
                    char pc_type;
 
                 } BIOS_ID;
 
           ⮩ :
 
             date    -  ⮢ BIOS;
             reserve - १ࢨ஢;
             pc_type -  ⨯ .
 
\b頥 祭:\p
           䨪 BIOS
 
 
 
.context getboot
.context @L801e
:l15
:n㭪 getboot
\a\u<  >\vsysp13\v \a<  >\vsysp\v \a< ਬ >\vbootshow.c\v\p

 
\b⨯ 㭪樨:\p
          int getboot(BOOT _far *boot, int drive);
 
\bࠬ 㭪樨:\p
          boot        - 㪠⥫  ,  
                        㤥 ⠭ 㧮筠
                        
 
          drive       -  䨧᪮ 
                        (0 -  , 1 - ன,...)
 
\bᠭ 㭪樨:\p
          㭪 뢠 㧮 
           㪠 .
 
\b頥 祭:\p
          0 - ᫨ 㧮筠  ⠭
              ᯥ譮;
          1 - ந諠 訡
 
 
 
.context getmboot
.context @L801f
:l15
:n㭪 getmboot
\a\u<  >\vsysp13\v \a<  >\vsysp\v \a< ਬ >\vpartshow.c\v\p

 
\b⨯ 㭪樨:\p
          int getmboot(MBOOT *master_boot, int drive);
 
\bࠬ 㭪樨:\p
          master_boot - 㪠⥫  ,  
                        㤥 ⠭  㧮筠
                        
 
          drive       -  䨧᪮ 
                        (0 -  , 1 - ன,...)
 
\bᠭ 㭪樨:\p
          㭪 뢠  㧮 
           㪠 .
 
\b頥 祭:\p
          0 - ᫨  㧮筠  ⠭
              ᯥ譮;
           訡, 祭  㭪樨 BIOS "⥭
              ᥪ" - ᫨ ⥭  㧮筮
               믮 .
 
 
 
.context heof
.context @L8020
:l15
:n㭪 heof
\a\u<  >\vsysp13\v \a<  >\vsysp\v \a< ਬ >\vcopyf1.c\v\p

 
\b⨯ 㭪樨:\p
          int heof(int handle);
 
\bࠬ 㭪樨:\p
          handle      - 䠩  (奭) 
                        ண 室 
                          ﭨ
 
\bᠭ 㭪樨:\p
          㭪  ஢ 䠪 ⨦
           䠩  ⮢ ன⢠
 
\b頥 祭:\p
          0           -  䠩  ⨣ ( 䠩),
                        ன⢮ ⮢ ( ன⢠);
 
          1           - ⨣  䠩 ( 䠩),
                        ன⢮  ⮢ ( ன⢠);
 
         -1           - ந諠 訡.
 
 
 
.context pc_model
.context @L8021
:l15
:n㭪 pc_model
\a\u<  >\vsysp13\v \a<  >\vsysp\v \a< ਬ >\vdisk_ctl.c\v\p

 
\b⨯ 㭪樨:\p
          char unsigned pc_model(void);
 
\bࠬ 㭪樨:\p
          
 
\bᠭ 㭪樨:\p
          㭪 頥 , 騩
           ᮭ쭮 
 
\b頥 祭:\p
            ᮭ쭮 :
 
             0xff - ਣ PC;
             0xfe - XT, Portable PC;
             0xfd - PCjr;
             0xfc - AT;
             0xfb - XT   640;
             0xf9 - Convertible PC.
 
 
 
.context discshow.c
.context @L8022
\a\u<  >\vsysp13\v \a<  >\vsysp\v\p

#include <stdio.h>
#include <dos.h>
#include "sysp.h"
 
void main(void);
void main(void) {
 
  DISK_CONFIG cfg;
  DPT  _far *dpt_ptr;
  HDPT _far *hdpt1_ptr;
  HDPT _far *hdpt2_ptr;
 
  printf("\\n"
         "\\n䨣 ᪮ ⥬"
         "\\n  (C)஫ ., 1991"
         "\\n");
 
// ।塞 䨣 ᪮ ⥬
 
  disk_cfg(&cfg);
 
  printf("\\n⠭:"
         "\\n   -᪮: %d"
         "\\n   ᪮:        %d",
         cfg.n_floppy,
         cfg.n_hard);
 
  printf("\\n 䫮-᪮:  A: - %d, B: - %d"
         "\\n ᪮:         C: - %d, D: - %d",
         cfg.t_floppy1, cfg.t_floppy2,
         cfg.t_hard1,   cfg.t_hard2);
 
// 砥  ⠡ ࠬ஢ ᪥
 
  dpt_ptr = get_dpt();
 
  printf("\\n"
         "\\n ࠧ ᥪ ᪥:                   %d"
         "\\n騩 ᨬ  ଠ஢ ᪥: %2.2X",
         dpt_ptr->sec_size,
         dpt_ptr->fill_char);
 
// 砥  ࢮ  ன ⠡
// ࠬ஢ ⪮ ᪠
 
  hdpt1_ptr = get_hdp1();
  hdpt2_ptr = get_hdp2();
 
  printf("\\n"
         "\\nࠬ ࢮ ᪠:"
         "\\n   ⢮ 樫஢:     %d"
         "\\n   ⢮ :       %d"
         "\\n"
         "\\nࠬ ண ᪠:"
         "\\n   ⢮ 樫஢:     %d"
         "\\n   ⢮ :       %d",
         hdpt1_ptr->max_cyl,
         hdpt1_ptr->max_head,
         hdpt2_ptr->max_cyl,
         hdpt2_ptr->max_head);
 
}

.context dirlist.c
.context @L8023
\a\u<  >\vsysp13\v \a<  >\vsysp\v\p

#include <stdio.h>
#include <malloc.h>
#include <dos.h>
#include "sysp.h"
 
void main(void);
void main(void) {
 
  BOOT _far *boot_rec;
  int i,j, k, status, fat_sectors;
  unsigned total_sectors;
  int ffat, root_begin, root_sectors;
  char drive;
  unsigned _far *fat_buffer;
  FITEM _far *root_buffer, _far *rptr;
  char cbuf[128];
  char _far *clust_buffer;
  int cur_clust;
 
  union REGS reg;
  struct SREGS segreg;
 
 
  printf("\\n"
         "\\n⥭ ⠫ ᪮ ᪠"
         "\\n  (C)஫ ., 1991"
         "\\n");
 
 
// 뢠   ⥭ BOOT-.
//   ᢠ FAR-㪠⥫.
 
  boot_rec = _fmalloc(sizeof(*boot_rec));
 
// 訢 ,  ண 室
// 믮 ⥭ 㧮筮 .
 
  printf("\\n"
         "\\n 祭 ᪠ (A, B, ...):");
 
  drive = getche();
 
// 塞  ᪮
 
  drive = toupper(drive) - 'A';
 
// ⠥ 㧮   
 
  status = getboot((BOOT _far*)boot_rec, drive);
 
// ᫨ ந諠 訡 (ਬ, ࠢ쭮 㪠
// 祭 ᪠), 蠠 ࠡ ணࠬ
 
  if(status) {
      printf("\\n訡  ⥭ BOOT-ᥪ");
      exit(-1);
  }
 
// ।塞 ଠ ⠡ FAT
 
  total_sectors = boot_rec->bpb.totsecs;
 
// ᫨  ࠡ⠥  ७ ࠧ ᪠,
// 饥 ⢮ ᥪ஢  ᪠ ६ 
// ७ PBP
 
  if(total_sectors == 0) total_sectors = boot_rec->bpb.drvsecs;
 
// ଠ FAT ।塞 室  饣
// ⢠ ᥪ஢  ᪮ ᪥
 
  if(total_sectors > 20740) {
      printf("\\nFAT  16-⮢ ଠ");
      ffat=16;
  }
  else {
      printf("\\nFAT  12-⮢ ଠ");
      ffat=12;
  }
 
// ।塞 ⢮ ᥪ஢,  FAT
 
  fat_sectors = boot_rec->bpb.fatsize;
 
// 뢠   FAT
 
  fat_buffer = _fmalloc(fat_sectors * boot_rec->bpb.sectsize);
 
// 塞  ࢮ ᥪ FAT
 
  j = boot_rec->bpb.ressecs;
 
// ⠥ FAT   fat_buffer
 
// 塞 ॣ஢   맮
// 뢠 DOS INT 25h
 
    reg.x.ax = drive;
    reg.x.bx = FP_OFF(fat_buffer);
    segreg.ds = FP_SEG(fat_buffer);
    reg.x.cx = fat_sectors;
    reg.x.dx = j;
    int86x(0x25, &reg, &reg, &segreg);
 
//   ⥪ ⠢襥 ⠬ ᫥
// 맮 뢠 ᫮
 
    _asm pop ax
 
// 塞  ࢮ ᥪ ୥ ⠫
 
   root_begin = j + fat_sectors * boot_rec->bpb.fatcnt;
 
// 塞  ୥ ⠫
 
   root_sectors = (boot_rec->bpb.rootsize * 32) /
                  boot_rec->bpb.sectsize;
 
// 뢠   ୥ ⠫
 
   root_buffer = _fmalloc(root_sectors * boot_rec->bpb.sectsize);
 
// ⠥ ୥ ⠫   root_buffer
 
    reg.x.ax = drive;
    reg.x.bx = FP_OFF(root_buffer);
    segreg.ds = FP_SEG(root_buffer);
    reg.x.cx = root_sectors;
    reg.x.dx = root_begin;
    int86x(0x25, &reg, &reg, &segreg);
    _asm pop ax
 
// 뢠 ᮤন ୥ ⠫
 
   printf("\\n"
          "\\n 䠩    .         ६      "
          "\\n------------ ----- ----------  --------  ------- ------");
 
   for(rptr = root_buffer;;rptr++) {
      printf("\\n");
 
// ਧ  ⠫ - 㫥   砫
//  䠩
 
      if(rptr->name[0] == 0) break;
 
// 뢮 ᮤন ਯ 䠩
 
      for(i=0; i<8; i++) printf("%c",rptr->name[i]);
      printf(".");
      for(i=0; i<3; i++) printf("%c",rptr->ext[i]);
      printf(" %02X    %02d-%02d-%02d  %02d:%02d:%02d ",
         rptr->attr,
         rptr->date.day,
         rptr->date.month,
         rptr->date.year + 1980,
         rptr->time.hour,
         rptr->time.min,
         rptr->time.sec * 2);
      printf(" %-5d   %lu",
         rptr->cluster_nu,
         rptr->size);
 
   }
 
// 砥   ⥭ ஢ ⠫
 
   clust_buffer = _fmalloc(boot_rec->bpb.clustsize
                  * boot_rec->bpb.sectsize);
 
   printf("\\n ࢮ  ⠫:");
   gets(cbuf);
   cur_clust = atoi(cbuf);
 
// ६ k ᯮ  ⢥ 䫠.
//  ࢮ ᬮ ⠫  祭 ࠢ 0,
// ⥬  ६ ⠭  1.
 
   k=0;
 
   for(;;) {
 
// ࠭塞   ⠫
 
      j=cur_clust;
 
// 塞  ᫥饣 , ।
// ⠫
 
      cur_clust = fat(fat_buffer, ffat, cur_clust);
      printf("%d ",cur_clust);
 
// ⠥    clust_buffer
 
       reg.x.ax = drive;
       reg.x.bx = FP_OFF(clust_buffer);
       segreg.ds = FP_SEG(clust_buffer);
       reg.x.cx = boot_rec->bpb.clustsize;
       reg.x.dx = root_begin + root_sectors
                  + ((j-2)*boot_rec->bpb.clustsize);
       int86x(0x25, &reg, &reg, &segreg);
       _asm pop ax
 
// 뢠 ᮤন ⠫
 
       rptr = (FITEM _far *)clust_buffer;
 
//  ਯ  ⠫ 㪠뢠 
//   ⠫.    ࢮ ਯ
// 室 ப ".       ".  䠪  ᯮ짮
//  ஢ન ⠫. ᫨   訡 㪠
//  ,  ਭ饣 ⠫,
// ணࠬ  ࠡ  ᮮ饭  訡.
 
       if(k == 0) {
         k=1;
         if(strncmp(rptr->name,".       ",8) != 0) {
            printf("\\n  ⠫ !");
            exit(-1);
         }
       }
 
       printf("\\n"
          "\\n 䠩    .         ६      "
          "\\n------------ ----- ----------  --------  ------- ------");
 
       for(;;rptr++) {
         printf("\\n");
 
// ਧ  ⠫ - 㫥   砫
//  䠩
 
         if(rptr->name[0] == 0) break;
 
// 뢮 ᮤন ਯ 䠩
 
         for(i=0; i<8; i++) printf("%c",rptr->name[i]);
         printf(".");
         for(i=0; i<3; i++) printf("%c",rptr->ext[i]);
         printf(" %02X    %02d-%02d-%02d  %02d:%02d:%02d ",
            rptr->attr,
            rptr->date.day,
            rptr->date.month,
            rptr->date.year + 1980,
            rptr->time.hour,
            rptr->time.min,
            rptr->time.sec * 2);
         printf(" %-5d   %lu",
            rptr->cluster_nu,
            rptr->size);
 
      }
 
// ᫨   - ᫥  । ⠫,
// 蠥 ࠡ ணࠬ
 
      if((cur_clust == 0xfff) || (cur_clust == 0xffff)) break;
 
   }
 
// ᢮ 
 
  _ffree(root_buffer);
  _ffree(boot_rec);
  _ffree(fat_buffer);
  _ffree(clust_buffer);
}

.context show_di.c
.context @L8024
\a\u<  >\vsysp13\v \a<  >\vsysp\v\p

#include <dos.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
 
void main(int argc, char *argv[]);
 
void main(int argc, char *argv[]) {
 
    int handle;
    int info;
    int rc;
 
// 뢠 䠩  ன⢮   
 
    handle = open(argv[1], O_RDONLY);
 
// ᫨  , 뢮 ᮮ饭
//  蠥 ࠡ ணࠬ
 
    if(handle == -1) {
      printf("   䠩!\\n");
      exit(-1);
    }
 
// 砥 ଠ  奭 handle
 
    rc = get_devi(handle, &info);
 
    if(rc != 0) {
      printf("訡   %d\\n", rc);
      exit(-1);
    }
 
    printf("\\n ଠ樨  ன⢥: %04X",info);
 
}
 

.context showbios.c
.context @L8025
\a\u<  >\vsysp13\v \a<  >\vsysp\v\p

#include <stdio.h>
#include <stdlib.h>
#include "sysp.h"
 
void main(void);
 
void main(void) {
 
    BIOS_ID _far *id;
    int i;
 
    id = getbiosi();
 
    printf("\\n䨪 BIOS:"
           "\\n"
           "\\n ⮢: ");
 
    for(i=0; i<8; i++) {
      putch(id->date[i]);
    }
 
    printf("\\nࢭ :    %04.4X"
           "\\n :    %02.2X"
           "\\n",
           id->reserve,
           (unsigned char)id->pc_type);
 
    exit(0);
}
 

.context bootshow.c
.context @L8026
\a\u<  >\vsysp13\v \a<  >\vsysp\v\p

#include <stdio.h>
#include <malloc.h>
#include <dos.h>
#include "sysp.h"
 
void main(void);
void main(void) {
 
  BOOT _far *boot_rec;
  int i,j, k, status;
  char drive;
 
  printf("\\n"
         "\\n⥭ 㧮筮  ᪮ ᪠"
         "\\n  (C)஫ ., 1991"
         "\\n");
 
 
// 뢠   ⥭ BOOT-.
//   ᢠ FAR-㪠⥫.
 
  boot_rec = _fmalloc(sizeof(*boot_rec));
 
// 訢 ,  ண 室
// 믮 ⥭ 㧮筮 .
 
  printf("\\n"
         "\\n 祭 ᪠,  ᬮ"
         "\\n㧮筮  (A, B, ...):");
 
  drive = getche();
 
// 塞  ᪮
 
  drive = toupper(drive) - 'A';
 
// ⠥ 㧮   
 
  status = getboot((BOOT _far*)boot_rec, drive);
 
// ᫨ ந諠 訡 (ਬ, ࠢ쭮 㪠
// 祭 ᪠), 蠠 ࠡ ணࠬ
 
  if(status) {
      printf("\\n訡  ⥭ BOOT-ᥪ");
      exit(-1);
  }
 
  printf("\\nন BOOT-ᥪ  ᪠ %c",drive+'A');
  printf("\\n"
         "\\nOEM -     DOS - ");
 
  for(i=0;i<8;i++) printf("%c",boot_rec->oem[i]);
 
  printf("\\n ᪠                       - %x"
         "\\nਧ ७ BOOT-   - %c"
         "\\n਩  ᪠              - %04X-%04X"
         "\\n⪠ ᪠                       - ",
         (unsigned char)boot_rec->drive,
         boot_rec->signature,
         boot_rec->volser_hi,
         boot_rec->volser_lo);
 
  for(i=0;i<11;i++) printf("%c",boot_rec->label[i]);
 
  printf("\\nଠ FAT                        - ");
  for(i=0;i<8;i++) printf("%c",boot_rec->fat_format[i]);
 
  printf("\\n\\nଠ  BPB:\\n");
 
  printf("\\n⢮ ⮢  ᥪ       - %d"
         "\\n⢮ ᥪ஢      - %d"
         "\\n१ࢨ஢ ᥪ஢          - %d"
         "\\n⢮  FAT              - %d"
         "\\n. ⢮ 䠩  ୥ ⠫ - %d"
         "\\n饥 ⢮ ᥪ஢  ᪥          - %d"
         "\\n-⥫ ।              - %x"
         "\\n⢮ ᥪ஢  FAT         - %d",
         boot_rec->bpb.sectsize,
         boot_rec->bpb.clustsize,
         boot_rec->bpb.ressecs,
         boot_rec->bpb.fatcnt,
         boot_rec->bpb.rootsize,
         boot_rec->bpb.totsecs,
         (unsigned char)boot_rec->bpb.media,
         boot_rec->bpb.fatsize);
 
  printf("\\n\\nଠ  ७ BPB:\\n");
 
  printf("\\n஢  ஦               - %d"
         "\\n⢮                 - %d"
         "\\n ᥪ஢  ᪠ < 32M  - %d"
         "\\n ᥪ஢  ᪠ >= 32M - %d"
         "\\nᥣ ᥪ஢  ᪥           - %u",
         boot_rec->bpb.seccnt,
         boot_rec->bpb.headcnt,
         boot_rec->bpb.hiddensec_low,
         boot_rec->bpb.hiddensec_hi,
         boot_rec->bpb.totsecs);
 
// ᢮ 
 
  _ffree(boot_rec);
}

.context partshow.c
.context @L8027
\a\u<  >\vsysp13\v \a<  >\vsysp\v\p

#include <stdio.h>
#include <dos.h>
#include "sysp.h"
 
void main(void);
void main(void) {
 
  DISK_CONFIG cfg;
  MBOOT mb;
  int i,j, k, status;
 
  printf("\\n"
         "\\n ࠧ ᪠"
         "\\n  (C)஫ ., 1991"
         "\\n");
 
// ।塞 䨣 ᪮ ⥬
 
  disk_cfg(&cfg);
 
// 뢠  ६ i ⢮
// ⠭  ⥬ 
 
  j = cfg.n_hard;
  printf("\\n⠭ ᪮: %d", j);
 
//    뢮 ᮤন
// ⠡ ࠧ
 
  for(i=0;i<j;i++) {
 
// ⠥  㧮 
 
      status = getmboot(&mb,i);
      if(status != 0) {
         printf("\\n訡 ⥭ ᪠ %d,  訡: %d",
               i, status);
         exit(1);
      }
 
      printf("\\n\\n ࠧ ᪠ %d",i);
      printf("\\n"
 
"\\n------------------------------------------------------------"
"\\n||砫 ࠧ | ࠧ  |  | |.   |"
"\\n|    |---------------|---------------|.|ࠧ|  |"
"\\n|    |.|.|.|.|.|.|     |       |ᥪ|"
"\\n|----|----|-----|----|----|-----|----|-----|-------|-------|"
"\\n");
 
      for(k=0; k<4; k++) {
         printf("|%3d |%4d|%4d |%4d|%4d|%4d |%4d|%5d|%7u|",
         mb.part_table[k].flag,
         mb.part_table[k].beg_head,
         mb.part_table[k].beg_sec_cyl & 0x3f,
         (mb.part_table[k].beg_sec_cyl >> 6) & 0x3ff,
         mb.part_table[k].end_head,
         mb.part_table[k].end_sec_cyl & 0x3f,
         (mb.part_table[k].end_sec_cyl >> 6) & 0x3ff,
         mb.part_table[k].sys,
         mb.part_table[k].size);
         printf("%7u|\\n",
            mb.part_table[k].rel_sec);
      }
      printf("------------------------------------------------------------");
  }
}

.context copyf1.c
.context @L8028
\a\u<  >\vsysp13\v \a<  >\vsysp\v\p

#include <io.h>
#include <conio.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys\\types.h>
#include <sys\\stat.h>
#include <malloc.h>
#include <errno.h>
 
void main(int, char *[]);
void main(int argc, char *argv[]) {
 
    int source, taget, i;
    char *buffer;
    unsigned count;
 
    if(argc == 3) {
 
// 뢠 室 㥬 䠩
 
       if((source = open(argv[1], O_BINARY | O_RDONLY)) == - 1) {
 
           printf("\\n訡  ⨨ 室 䠩: %d",
           errno);
           exit(-1);
 
       }
 
// 뢠 室 䠩.  室 ᮧ
// . ᫨ 䠩 㦥 , 뢮  ࠭
//   १ ᮤন 饣 䠩
 
      taget = open(argv[2], O_BINARY | O_WRONLY | O_CREAT | O_EXCL,
                            S_IREAD | S_IWRITE);
      if(errno == EEXIST) {
 
         printf("\\n . १? (Y,N)\\n");
 
//  ⢥   㥬 
 
         i = getch();
         if((i == 'y') || (i == 'Y'))
            taget = open(argv[2], O_BINARY | O_WRONLY | O_CREAT | O_TRUNC,
                                  S_IREAD | S_IWRITE);
 
      }
 
// ᫨ 室 䠩  , 뢮
// ᮮ饭  訡  蠥 ࠡ ணࠬ
 
      if(taget == -1){
           printf("\\n訡  ⨨ 室 䠩: %d",
           errno);
           exit(-1);
      }
 
// 㤥      ࠧ 10000 ⮢
 
      count = 10000;
 
// 뢠   । 
 
      if((buffer = (char *)malloc(count)) == NULL) {
           printf("\\n筮 ⨢ ");
           exit(-1);
      }
 
 
// 㥬 室 䠩
 
      while(!heof(source)) {
 
// ⠥ count ⮢   buffer
 
         if((count = read(source, buffer, count)) == -1) {
           printf("\\n訡  ⥭: %d",
           errno);
           exit(-1);
         }
 
// 믮塞  count ⮢    室 䠩
 
         if((count = write(taget, buffer, count)) == - 1) {
           printf("\\n訡  : %d",
           errno);
           exit(-1);
         }
      }
 
// 뢠 室  室 䠩
 
      close(source);
      close(taget);
 
// ᢮ ,   
 
      free(buffer);
    }
 
// ᫨  ᪥ ணࠬ  뫨 㪠
//   室  室 䠩,
// 뢮 ᮮ饭  訡
 
    else
        printf("\\n"
               "   室"
               "  १饣 䠩!\\n");
}
 

.context disk_ctl.c
.context @L8029
\a\u<  >\vsysp13\v \a<  >\vsysp\v\p

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include "sysp.h"
 
#define CYL 0
 
void main(void);
void fdc_out(unsigned char byte);
int  fdc_inp(void);
void int_wait(void);
void dma_init(char *);
 
void main(void) {
 
   unsigned i;
   long l;
   char buffer[512];
   char status[7], main_status;
   DPT _far *fdpt;
   FILE *sect;
 
   printf("\\n"
          "\\n  ஫஬ "
          "\\n  (C)஫ ., 1991"
          "\\n");
 
 
//  ணࠬ ।祭 ⮫쪮  IBM AT
 
   if(pc_model() != 0xfc) {
      printf(" ணࠬ ।祭 ⮫쪮  IBM AT\\n");
      exit(-1);
   }
 
// 뢠 䠩,   㤥 뢠
// ᮤন ᠬ ࢮ   ᪥
 
   sect = fopen("!sector.dat","wb+");
 
// ⠭ 㪠⥫  ⠡
// ࠬ஢ ᪥
 
   fdpt = get_dpt();
 
// 砥  ᪮ :
// । ⨬ ࠧ蠥 뢠
 
//   _enable();
   outp(0x3F2, 0x1C);
 
// 믮塞 প  ࠧ ⥫
 
   for(l=0;l<200000;l++);
 
// 뢠 ᮤন ॣ ᭮
// ﭨ ஫
 
   printf(" 祭.\\t\\t");
   printf("᭮ ﭨ: %02.2X\\n",inp(0x3F4));
 
// । ⥭ ᥪ 室 ⠭
//   㦭 ஦,  襬 砥 
// ஦  ஬ CYL.
 
// 뤠 ஫  ""
 
   fdc_out(0xf);
 
//   "" ॡ   ࠬ஢:
//  / ⥫   ஦.
//  ࠡ⠥  㫥  ⥫ :,
// ⮬  ࠬ ࠢ 0, ன - CYL
 
   fdc_out(0);
   fdc_out(CYL);
 
// 뢠 ᮤন ॣ ᭮
// ﭨ ஫
 
   printf("\\n<<<>>> \\t\\t");
   printf("᭮ ﭨ: %02.2X\\n",inp(0x3F4));
 
//  뢠  襭 樨
 
   int_wait();
 
// প  樮஢ 
 
   for(l=0;l<20000;l++);
 
//  ஢ન १ 믮 
// "" 뤠 ஫ 
// "⥭ ﭨ 뢠"
 
// 뢮 ᮤন ॣ ﭨ
// ST0    ஦ ᫥ 믮 
// "" PCN
 
   fdc_out(0x8);
   printf("ﭨ 뢠:\\t");
   printf(" ST0: %02.2X, \\t", fdc_inp());
   printf("PCN: %02.2X\\n", fdc_inp());
 
//   㡮 ⨪ ﭨ
// ஫ 뤠 ஫ 
// "⥭ ﭨ ⥫", 뢮
// ᮤন ॣ ﭨ ST3
 
   fdc_out(4);
   fdc_out(0);
   printf("ﭨ ⥫:\\t ST3: %02.2X\\n",fdc_inp());
 
// ⠭ ᪮ ।  500 ⮢/,
//  祭  ࠧ  ࠧ ⨯ ᪥
 
   outp(0x3F7, 0);
 
// 樠  אַ
// 㯠  
 
   dma_init(buffer);
 
// 뤠  "⥭ "
 
   fdc_out(0x66);
   fdc_out(0x0);     // ⥫ 0,  0
 
   fdc_out(CYL);     // 樫 CYL
   fdc_out(0);       //  0
   fdc_out(1);       //  ᥪ - 1
 
// । ஫ 孨᪨ ࠬ
// ᪮, ६   ⠡ ࠬ஢ ᪥.
//  ⠪ ࠬ:
//    - ࠧ ᥪ;
//    -  ᫥ ᥪ  ஦;
//    - ࠧ ஬⪠;
//    - ᫮ 뢠/뢠 ⮢
 
   fdc_out(fdpt->sec_size);
   fdc_out(fdpt->eot);
   fdc_out(fdpt->gap_rw);
   fdc_out(fdpt->dtl);
 
//  뢠  襭 樨
 
   int_wait();
 
// 뢠  뢮  ࠭  १
// 樨 "⥭ "
 
   printf("\\n<<<⥭ ᥪ>>> \\n");
   printf("    ﭨ (ST0,ST1,ST2,C,H,R,N):\\n");
 
   for(i=0; i<7; i++) printf("%02.2X\\t", (char) fdc_inp());
   printf("\\n");
 
// 뢮 ᮤন ⠭ ᥪ  䠩
 
   for(i=0; i<512; i++) fputc(buffer[i],sect);
   fclose(sect);
 
// 몫砥 
 
   outp(0x3F2, 0xC);
}
 
 
// 뢮   ஫ ᪮
 
void fdc_out(unsigned char parm) {
 
   _asm {
      mov   dx,3F4h     //  ᭮ ﭨ
loop_fdc_out:
 
      in    al,dx
      test  al,80h      // ஢塞 ⮢
      jz loop_fdc_out   //   ஫
 
      inc   dx          // 뢮    
      mov   al, parm    //   ஫
      out   dx, al
   }
}
 
//      ஫ ᪮
 
int fdc_inp(void) {
 
   _asm {
      mov   dx,3F4h     //  ᭮ ﭨ
loop_fdc_inp:
      in    al,dx
      test  al,80h      // ஢塞 ⮢
      jz loop_fdc_inp   //   ஫
 
      inc   dx          //   뢠
      in    al, dx      //  ॣ AX
   }
}
 
//  뢠  ஫
 
void int_wait(void) {
 
// 蠥 뢠
 
   _enable();
   _asm {
      mov   ax,40h         // ᫥ 室 뢠
      mov   es,ax          // ணࠬ ࠡ⪨ 뢠
      mov   bx,3Eh         // ⠭  1 訩 
wait_loop:                 //     BIOS
      mov   dl,es:[bx]     //   0040:003E.
      test  dl,80h         //  ,    㤥
      jz    wait_loop      // ⠭  1,  ⥬
                           // 뢠 .
      and   dl,01111111b
      mov   es:[bx],dl
   }
}
 
// 樠  אַ 㯠  
 
void dma_init(char *buf) {
 
   unsigned long f_adr;
   unsigned sg, of;
 
// 塞 24-ࠧ來    
 
   f_adr = ((unsigned long)_psp << 4)
            + (((unsigned long)buf) & 0xffff);
 
// 饯塞    ࠭
//  ᬥ饭
 
   sg = (f_adr >> 16) & 0xff;
   of = f_adr & 0xffff;
 
//  ६ ணࠬ஢ ஫ אַ
// 㯠 頥 뢠
 
   _disable();
 
   _asm {
      mov   al,46h   //  ⥭  
                     // ஫ .
 
      out   12,al    //  ਣ-㪠⥫ 
                     //  ࠡ  16-ࠧ來묨 ⠬.
                     // 騩 , 뢮  16-ࠧ來
                     //  㤥 ஢
                     //  訩.
 
      out   11,al    // ⠭ ० ஫ 
 
      mov   ax,of    // 饭 , 訩 
      out   4,al
      mov   al,ah    // 饭 , 訩 
      out   4,al
 
      mov   ax,sg    //  ࠭
      out   81h,al
 
      mov   ax,511   //  । 
      out   5,al
      mov   al,ah
      out   5,al
 
      mov   al,2     // ஢  2 ஫ 
      out   10,al
   }
 
// 樠 ஫ 祭,
// ࠧ蠥 뢠.
 
   _enable();
}

 

 
