home *** CD-ROM | disk | FTP | other *** search
- ;//////////////////////////////////////////////////////////////////////////
- ;/// ///
- ;/// Turbo-Pascal V24-Interruptunterstützung V2.00 ///
- ;/// ///
- ;/// (c) Christian Philipps, Moers ///
- ;/// im Juni 1988 ///
- ;/// ///
- ;/// Dieses System erfordert Turbo-Pascal V4.0 oder höher ///
- ;/// ///
- ;//////////////////////////////////////////////////////////////////////////
-
- ; Dieses Modul stelle ich hiermit allen interessierten Turbo-Pascal
- ; Programmierern zur Verfügung. Es steht jedem frei, diese Module in
- ; seinen eigenen Programmen zu verwenden oder in ihrer ursprünglichen
- ; und unveränderten Form an andere Interessenten weiterzugeben.
- ; Die einzige Auflage von Seiten des Autors ist, daß der Copyright-
- ; vermerk und dieser Text nicht verändert oder entfernt werden dürfen.
- ; Jede gewerbliche Nutzung bleibt ausschließlich dem Autor vorbehalten!
-
- ;─────────────────────────────────────────────────────────────────────────
- ; Datensegment
- ;─────────────────────────────────────────────────────────────────────────
-
- DATA SEGMENT BYTE PUBLIC
-
- ; Turbo-Pascal Variable
- EXTRN V24HP : WORD
- EXTRN V24TP : WORD
- EXTRN V24BuffEnd : WORD
- EXTRN V24Buff : BYTE
- EXTRN ComBase : WORD
-
- DATA ENDS
-
- ;─────────────────────────────────────────────────────────────────────────
- ; Codesegment
- ;─────────────────────────────────────────────────────────────────────────
-
- CODE SEGMENT BYTE PUBLIC
-
- ASSUME CS:CODE, DS:DATA
-
- PUBLIC V24Int
-
- ;─────────────────────────────────────────────────────────────────────────
-
- ;CS-relative Daten
-
- _Turbo_DS DW DATA ; Turbo-Datensegment (wird
- ; vom Linker eingetragen)
-
- ;─────────────────────────────────────────────────────────────────────────
- ; Codebereich
- ;─────────────────────────────────────────────────────────────────────────
- ;PROCEDURE V24Int; interrupt;
- ; Diese Routine wird für jedes über die Schnittstelle hereinkommende Zei-
- ; chen ausgeführt.
-
- V24Int PROC FAR ; Interrupt-Routine
-
-
- V24Int ENDP
-
- push ds ; Register sichern
- push ax
- push bx
- push dx
- mov ds,CS:_Turbo_DS ; Turbo-DS einstellen
-
- mov bx,V24TP ; ds:bx -> nächster freier Slot
- mov dx,ComBase ; dx = Port-Basisadresse
- in al,dx ; RBR -> al
- mov byte ptr [bx],al ; Byte in Puffer
- inc bx ; Zeiger auf nächsten Slot
- cmp bx,V24BuffEnd ; Rinpufferende überschritten?
- jle L1 ; nein
- mov bx,OFFSET V24Buff ; ja, also am Anfang aufsetzen
-
- L1: cmp bx,V24HP ; TP=HP --> Überlauf ?
- jz L2 ; ja, Zeichen ignorieren
- mov V24TP,bx ; nein, neuen TP sichern
-
- L2: mov al,20H ; EOI -> 8259
- out 20H,al
- pop dx ; Register restaurieren
- pop bx
- pop ax
- pop ds
- iret
-
- CODE ENDS
-
- END
-