home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 2 / FreeSoftwareCollection2pd199x-jp.img / fbasic / inout / inout.c < prev    next >
Text File  |  1990-06-14  |  2KB  |  79 lines

  1. /************************************************************************
  2.  *                                                                        *
  3.  *    F-BASIC386用拡張モジュール << MODULE-NAME : INOUT >>                *
  4.  *                                                                        *
  5.  *                COPYRIGHT (C) FUJITSU PERSONAL COMPUTER SYSTEMS 1990    *
  6.  *                                                                        *
  7.  *        (AUTHOR)    : 吉村 宰    ( FPS)第一技術 )                        *
  8.  *                                                                        *
  9.  *        (FUNCTION)    : I/O IN,OUT Program                                *
  10.  *                      (use loadm)                                        *
  11.  *                                                                        *
  12.  *    (UPDATE HISTORY)                                                    *
  13.  *    Ver    Level    Date        修正内容            Module            Name    *
  14.  *----------------------------------------------------------------------*
  15.  *                                                                        *
  16.  ************************************************************************/
  17.  
  18. extern    int    inp();
  19. extern    int    inpw();
  20. extern    int    outp();
  21. extern    int    outpw();
  22.  
  23. /************************************************************************
  24.  *                                                                        *
  25.  *   <<     FUNCTION-NAME : bs_io() >>                                        *
  26.  *                                                                        *
  27.  *    (機能\)    fb386上でloadmされ、I/Oへの入出力をする                        *
  28.  *                                                                        *
  29.  *    (入力)    unsigned int io_adr    I/O address                                *
  30.  *            unsigned int mode    下位4bit..byte数                        *
  31.  *                                bit7......0:read 1:write                *
  32.  *            unsigned char *data    データの入った(返す)文字列の            *
  33.  *                                    ディスクリプタ                        *
  34.  *                                                                        *
  35.  *    (出力)    戻り値    0:正常    1:ERROR                                        *
  36.  *    (注)    *data --> アドレス(4byte) + 長さ(2byte)                        *
  37.  *                                                                        *
  38.  *                                                                        *
  39.  *    (UPDATE    HISTORY)                                                    *
  40.  *    Ver    Level    Date        修正内容            Module            Name    *
  41.  *----------------------------------------------------------------------*
  42.  *    0    0.0        90/01/14    first generate                        O.Y.    *
  43.  *                                                                        *
  44.  ************************************************************************/
  45. int    bs_io(io_adr,mode,data)
  46. unsigned int    io_adr;
  47. unsigned int    mode;
  48. unsigned char    *data;
  49. {
  50.     unsigned int    bw;
  51.     unsigned short    len;
  52.     unsigned char    *d_adr;
  53.  
  54.     /*    error check    */
  55.     if(io_adr >= 0x10000)
  56.         return(1);
  57.     bw = mode & 0x7f;
  58.     if(!(bw == 2 || bw == 1))
  59.         return(1);
  60.     d_adr = *(unsigned char    **)data;
  61.     len = *(unsigned short *)(data+4);
  62.     if(len != bw)
  63.         return(1);
  64.  
  65.     /*    io read/write    */
  66.     switch(mode){
  67.         case 0x01:
  68.             *d_adr = (unsigned char)inp(io_adr);
  69.         case 0x02:
  70.             *(unsigned short *)d_adr = (unsigned short)inpw(io_adr);
  71.         case 0x81:
  72.             outp(io_adr,*d_adr);
  73.         case 0x82:
  74.             outpw(io_adr,*(unsigned short *)d_adr);
  75.     }
  76.     return(0);
  77. }
  78. /*  << end of source >>     */
  79.