home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / multtsk / cpmult / source / v24.asm < prev    next >
Encoding:
Assembly Source File  |  1990-04-07  |  3.9 KB  |  94 lines

  1. ;//////////////////////////////////////////////////////////////////////////
  2. ;///                                                                    ///
  3. ;///           Turbo-Pascal V24-Interruptunterstützung V2.00            ///
  4. ;///                                                                    ///
  5. ;///                 (c) Christian Philipps, Moers                      ///
  6. ;///                         im Juni 1988                               ///
  7. ;///                                                                    ///
  8. ;///              Dieses System erfordert Turbo-Pascal V4.0 oder höher  ///
  9. ;///                                                                    ///
  10. ;//////////////////////////////////////////////////////////////////////////
  11.  
  12. ;   Dieses Modul stelle ich hiermit allen interessierten Turbo-Pascal
  13. ;   Programmierern zur Verfügung. Es steht jedem frei, diese Module in
  14. ;   seinen eigenen Programmen zu verwenden oder in ihrer ursprünglichen
  15. ;   und unveränderten Form an andere Interessenten weiterzugeben.
  16. ;   Die einzige Auflage von Seiten des Autors ist, daß der Copyright-
  17. ;   vermerk und dieser Text nicht verändert oder entfernt werden dürfen.
  18. ;   Jede gewerbliche Nutzung bleibt ausschließlich dem Autor vorbehalten!
  19.  
  20. ;─────────────────────────────────────────────────────────────────────────
  21. ;                    Datensegment
  22. ;─────────────────────────────────────────────────────────────────────────
  23.  
  24. DATA     SEGMENT BYTE PUBLIC
  25.  
  26.          ; Turbo-Pascal Variable
  27.          EXTRN V24HP      : WORD
  28.          EXTRN V24TP      : WORD
  29.          EXTRN V24BuffEnd : WORD
  30.          EXTRN V24Buff    : BYTE
  31.          EXTRN ComBase    : WORD
  32.  
  33. DATA     ENDS
  34.  
  35. ;─────────────────────────────────────────────────────────────────────────
  36. ;                        Codesegment
  37. ;─────────────────────────────────────────────────────────────────────────
  38.  
  39. CODE     SEGMENT BYTE PUBLIC
  40.  
  41.          ASSUME CS:CODE, DS:DATA
  42.  
  43.          PUBLIC V24Int
  44.  
  45. ;─────────────────────────────────────────────────────────────────────────
  46.  
  47. ;CS-relative Daten
  48.  
  49. _Turbo_DS DW  DATA                              ; Turbo-Datensegment (wird
  50.                                                 ; vom Linker eingetragen)
  51.  
  52. ;─────────────────────────────────────────────────────────────────────────
  53. ;                    Codebereich
  54. ;─────────────────────────────────────────────────────────────────────────
  55. ;PROCEDURE V24Int; interrupt;
  56. ;  Diese Routine wird für jedes über die Schnittstelle hereinkommende Zei-
  57. ;  chen ausgeführt.
  58.  
  59. V24Int   PROC  FAR                               ; Interrupt-Routine
  60.  
  61.  
  62. V24Int   ENDP
  63.  
  64.          push ds                                 ; Register sichern
  65.          push ax
  66.          push bx
  67.          push dx
  68.          mov  ds,CS:_Turbo_DS                    ; Turbo-DS einstellen
  69.  
  70.          mov  bx,V24TP                           ; ds:bx -> nächster freier Slot
  71.          mov  dx,ComBase                         ; dx = Port-Basisadresse
  72.          in   al,dx                              ; RBR -> al
  73.          mov  byte ptr [bx],al                   ; Byte in Puffer
  74.          inc  bx                                 ; Zeiger auf nächsten Slot
  75.          cmp  bx,V24BuffEnd                      ; Rinpufferende überschritten?
  76.          jle  L1                                 ; nein
  77.          mov  bx,OFFSET V24Buff                  ; ja, also am Anfang aufsetzen
  78.  
  79. L1:      cmp  bx,V24HP                           ; TP=HP --> Überlauf ?
  80.          jz   L2                                 ; ja, Zeichen ignorieren
  81.          mov  V24TP,bx                           ; nein, neuen TP sichern
  82.  
  83. L2:      mov  al,20H                             ; EOI -> 8259
  84.          out  20H,al                             
  85.          pop  dx                                 ; Register restaurieren
  86.          pop  bx
  87.          pop  ax
  88.          pop  ds
  89.          iret
  90.  
  91. CODE     ENDS
  92.  
  93. END
  94.