70 lines
1.7 KiB
NASM
70 lines
1.7 KiB
NASM
|
org 100h
|
|||
|
cpu 8086
|
|||
|
|
|||
|
jmp start
|
|||
|
|
|||
|
; Variablen
|
|||
|
divider db 0
|
|||
|
|
|||
|
; Konstanten
|
|||
|
tc equ 18432 ; Zeitkonstante (1,8432 MHz Takt)
|
|||
|
intab equ 20h ; Adresse Interrupttabelle PIT, K1
|
|||
|
eoi equ 20h ; End Of Interrupt (EOI)
|
|||
|
clrscr equ 0 ; Clear Screen
|
|||
|
ascii equ 1 ; Funktion ASCII-Zeichenausgabe
|
|||
|
hexbyte equ 4 ; HEX-Byte Ausgabe
|
|||
|
conin equ 5 ; Console IN
|
|||
|
conout equ 6 ; Console OUT
|
|||
|
pitc equ 0a6h ; Steuerkanal PIT (Intervaltimer)
|
|||
|
pit1 equ 0a2h ; Kanal 1 PIT
|
|||
|
pic23 equ 0c0h ; PIC (Interruptcontroller), OCW2,3
|
|||
|
pic1 equ 0c2h ; PIC (Interruptcontroller), OCW1
|
|||
|
|
|||
|
start:
|
|||
|
|
|||
|
; Initialisierungen (Display, Uhr stellen etc.) erfolgen hier
|
|||
|
; ........
|
|||
|
; ........
|
|||
|
|
|||
|
call tinit ; Initialisierung PIT 8253 (Kanal 1)
|
|||
|
; und Interruptsystem
|
|||
|
|
|||
|
; Hintergrundprogramm
|
|||
|
|
|||
|
again:
|
|||
|
|
|||
|
; Der hier einzuf<75>gende Programmcode wird immer dann ausgef<65>hrt, wenn
|
|||
|
; die Interruptserviceroutine nicht l<>uft (Hintergrundprogramm).
|
|||
|
; Das w<>re z.B. die Abfrage der Tastatur und die Manipulation der Statusbits.
|
|||
|
|
|||
|
jmp again
|
|||
|
|
|||
|
|
|||
|
tinit: cli ; Interrupts aus
|
|||
|
mov al, 01110110b ; Kanal 1, Mode 3, 16-Bit ZK
|
|||
|
out pitc, al ; Steuerkanal
|
|||
|
mov al, tc & 0ffh ; Low-Teil Zeitkonstante
|
|||
|
out pit1, al
|
|||
|
mov al, tc >> 8 ; High-Teil Zeitkonstante
|
|||
|
out pit1, al
|
|||
|
mov al, 11111110b ; Kanal 0 am PIC demaskieren
|
|||
|
out pic1, al
|
|||
|
mov word [intab], isr ; Interrupttabelle initialisieren
|
|||
|
mov [intab + 2], cs
|
|||
|
sti ; ab jetzt Interrupts
|
|||
|
ret
|
|||
|
|
|||
|
isr: push ax
|
|||
|
inc byte [divider] ; Vorteiler durch 100
|
|||
|
cmp byte [divider], 100 ; fertig?
|
|||
|
jne isr1
|
|||
|
mov byte [divider], 0 ; von vorne
|
|||
|
|
|||
|
; Hier ist z.B. der Programmcode einzuf<75>gen, der f<>r die Zeitz<74>hlung und
|
|||
|
; Anzeige zust<73>ndig ist. Der gemeinsame Ausgang aus der ISR ist "isr1".
|
|||
|
|
|||
|
isr1: mov al, eoi ; EOI an PIC
|
|||
|
out pic23, al ; OCW
|
|||
|
pop ax
|
|||
|
iret
|