home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 14 / CDACTUAL.iso / cdactual / demobin / share / program / asm / SIMPLE.ZIP / SIMPLE.ASM
Encoding:
Assembly Source File  |  1988-04-16  |  7.5 KB  |  187 lines

  1.  
  2.  
  3.  
  4.     ;***********************************************************************
  5.     ;*                     SIMPLE DEVICE DRIVER                            *
  6.     ;*                      BY JEFF CHANDLLER                              *
  7.     ;***********************************************************************
  8.  
  9.  
  10.  
  11.  
  12.     ;***********************************************************************
  13.     ;*                   INSTRUCTING THE ASSEBLER                          *
  14.     ;*                                                                     *
  15.     ;***********************************************************************
  16.  
  17.     CSEG        SEGMENT PARA    PUBLIC 'CODE'
  18.     SIMPLE      PROC    FAR
  19.                 ASSUME  CS:CSEG,ES:CSEG,DS:CSEG
  20.  
  21.  
  22.     ;***********************************************************************
  23.     ;*                        MAIN PROCEDURE CODE                          *
  24.     ;*                                                                     *
  25.     ;***********************************************************************
  26.                                                         
  27.     BEGIN:
  28.  
  29.  
  30.     ;***********************************************************************
  31.     ;*                    DEVICE HEADER REQUIRED BY DOS                    *
  32.     ;*                                                                     *
  33.     ;***********************************************************************
  34.                                                           
  35.     NEXT_DEV    DD      -1              ;NO OTHER DEVICE DRIVERS
  36.     ATTRIBUTE   DW      8000H           ;CHARACTER DEVICE
  37.     STRATEGY    DW      DEV_STRATEGY    ;ADDRESS OF 1ST DOS CALL
  38.     INTERRUPT   DW      DEV_INT         ;ADDRESS OF 2ND DOS CALL
  39.     DEV_NAME    DB      'SIMPLE$ '      ;NAME OF THE DRIVER
  40.  
  41.  
  42.  
  43.     ;***********************************************************************
  44.     ;*                   WORK SPACE FOR OUR DEVICE DRIVER                  *
  45.     ;*                                                                     *
  46.     ;***********************************************************************
  47.                                                                       
  48.     RH_OFF      DW      ?               ;REQUEST HEADER OFFSET
  49.     RH_SEG      DW      ?               ;REQUEST HEADER SEGMENT
  50.     MSGL        DB      07H
  51.                 DB      'THE WAITE GROUP SIMPLE DEVICE DRIVER! '
  52.                 DB      0DH,0AH,07H,'$'
  53.  
  54.  
  55.  
  56.     ;***********************************************************************
  57.     ;*                    THE STRATEGY PROCEDURE                           *
  58.     ;*                                                                     *
  59.     ;***********************************************************************
  60.                                                  
  61.     DEV_STRATEGY:                       ;FIRST CALL FROM DOS
  62.  
  63.         MOV     CS:RH_SEG,ES            ;SAVE REQUEST HEADER PTR SEGMENT
  64.         MOV     CS:RH_OFF,BX            ;SAVE REQUEST HEADER PTR OFFSET
  65.         RET
  66.  
  67.  
  68.     ;***********************************************************************
  69.     ;*                    INTERRUPT PROCEDURE                              *
  70.     ;*                                                                     *
  71.     ;***********************************************************************
  72.                                                 
  73.  
  74.     DEV_INT:                            ;SECOND CALL FROM DOS
  75.  
  76.         CLD                             ;SAVE MACHINE STATE ON ENTRY (CLEAR)
  77.         PUSH    DS
  78.         PUSH    ES
  79.         PUSH    AX
  80.         PUSH    BX
  81.         PUSH    CX
  82.         PUSH    DX
  83.         PUSH    DI
  84.         PUSH    SI
  85.  
  86.     ;PERFORM BRANCH BASED ON THE COMMAND PASSED IN THE REQUEST HEADER
  87.  
  88.         MOV     AL,ES:[BX]+2            ;GET COMMAND CODE
  89.         CMP     AL,0                    ;CHECK FOR 0
  90.         JNZ     EXIT3                   ;NO - EXIT GO TO ERROR EXIT
  91.         ROL     AL,1                    ;GET OFFSET INTO TABLE
  92.         LEA     DI,CMDTAB               ;GET ADDRESS OF COMMAND TABLE
  93.         MOV     AH,0                    ;CLEAR HI ORDER BYTE
  94.         ADD     DI,AX                   ;ADD OFFSET
  95.         JMP     WORD PTR[DI]            ;JUMP INDIRECT
  96.  
  97.     ;COMMAND TABLE
  98.     ;         THE COMMAND CODE FIELD OF THE STATIC REQUEST
  99.     ;         FIELD CONTAINS THE FUNCTION TO BE PERFORMED
  100.  
  101.  
  102.     CMDTAB      LABEL   BYTE            ;
  103.                 DW      INIT            ; INITIALIZATION
  104.  
  105.  
  106.     ;***********************************************************************
  107.     ;*                        LOCAL PROCEDURES                             *
  108.     ;*                                                                     *
  109.     ;***********************************************************************
  110.  
  111.     INITIAL     PROC    NEAR
  112.  
  113.         LEA     DX,MSGL                 ;INITIALIZATION
  114.         MOV     AH,9                    ;MESSAGE (PRINT STRING FUNCTION)
  115.         INT     21H                     ;CALL DOS
  116.         RET                             ;RETURN
  117.  
  118.     INITIAL     ENDP
  119.     
  120.  
  121.     ;***********************************************************************
  122.     ;*                     DOS COMMAND PROCESSING                          *
  123.     ;*                                                                     *
  124.     ;***********************************************************************
  125.  
  126.     ;COMMAND = 0        INITIALIZATION
  127.  
  128.     INIT:       CALL    INITIAL         ;DISPLAY A MESSAGE
  129.                 JMP     EXIT2
  130.  
  131.  
  132.     ;***********************************************************************
  133.     ;*                       ERROR EXIT                                    *
  134.     ;*                                                                     *
  135.     ;***********************************************************************
  136.  
  137.     ;SET THE DONE FLAG, ERROR FLAG, AND UNKNOWN COMAND ERROR CODE
  138.  
  139.     EXIT3:      MOV     ES:WORD PTR 3[BX],8103H
  140.  
  141.                 JMP     EXIT1           ;RESTORE ENVIRONMENT
  142.  
  143.  
  144.     ;***********************************************************************
  145.     ;*                      COMMON EXIT                                    *
  146.     ;*                                                                     *
  147.     ;***********************************************************************
  148.                                         
  149.     
  150.     ;COMMON EXITS       FALL THRU CODE
  151.     ;                   2 SETS STATUS TO DONE AN NOERROR
  152.     ;                   1 RESTORES CALLERS ES:BX
  153.     ;                   0 RESTORES MACHINE STATE AND EXIT
  154.  
  155.  
  156.     EXIT2:              ;SET DONE FLAG AND NO ERROR
  157.  
  158.                 MOV     ES:WORD PTR 3[BX],0100H
  159.  
  160.     EXIT1:      MOV     BX,CS:RH_OFF    ;RESTORE REQUEST HEADER OFFSET TO BX 
  161.                 MOV     ES,CS:RH_SEG    ;AND ES AS SAVED BY DEV_STRATEGY
  162.     
  163.     EXIT0:      POP     SI              ;RESTORE ALL REGISTERS
  164.                 POP     DI
  165.                 POP     DX
  166.                 POP     CX
  167.                 POP     BX
  168.                 POP     AX
  169.                 POP     ES
  170.                 POP     DS
  171.                 RET
  172.  
  173.     ;***********************************************************************
  174.     ;*                         END OF PROGRAM                              *
  175.     ;*                                                                     *
  176.     ;***********************************************************************
  177.                                                 
  178.  
  179.     SIMPLE ENDP     
  180.  
  181.     CSEG        ENDS
  182.  
  183.         END     BEGIN
  184.  
  185.  
  186.     ;THAT'S ALL FOLKS
  187.