feat: passage a la convention d'appel stdcall

BREAKING CHANGE: attention modification majeure du code
This commit is contained in:
Nicolas Hordé 2005-12-05 08:16:09 +00:00
parent 8c1701b5af
commit 8db2a163d4
1 changed files with 139 additions and 135 deletions

View File

@ -1,55 +1,39 @@
.model tiny .model tiny,StdCall
.486 .486
smart
.code .code
Locals
jumps
org 0h org 0h
include ..\include\mem.h
include ..\include\bmp.h
start: start:
jmp tsr header exe <,1,0,,,,offset exports,>
db 'PIC8259A'
Tsr: exports:
cli db "enableirq",0
cmp ax,1234h dw enableirq
jne nomore db "disableirq",0
mov ax,4321h dw enableirq
jmp itsok db "readmaskirq",0
nomore:
push bx
mov bl,ah
xor bh,bh
shl bx,1
mov bx,cs:[bx].tables
mov cs:current,bx
pop bx
call cs:current
itsok:
jnc noerror
push bp
mov bp,sp
or byte ptr [bp+6],1b
pop bp
mov ax,cs
shl eax,16
mov ax,cs:current
jmp endofint
noerror:
push bp
mov bp,sp
and byte ptr [bp+6],0FEh
pop bp
endofint:
sti
iret
current dw 0
tables dw enableirq
dw disableirq
dw readmaskirq dw readmaskirq
db "readirr",0
dw readirr dw readirr
db "readisr",0
dw readisr dw readisr
db "installhandler",0
dw installhandler dw installhandler
db "replacehandler",0
dw replacehandler dw replacehandler
db "getint",0
dw getint dw getint
db "setint",0
dw setint dw setint
db "seteoi",0
dw seteoi dw seteoi
dw 0
;Adresses de port du contr“leur IRQ ;Adresses de port du contr“leur IRQ
MASTERPIC = 020h ;Adresse de base du PIC maŒtre MASTERPIC = 020h ;Adresse de base du PIC maŒtre
@ -82,14 +66,16 @@ IRR = 0Ah ; Pas d'op
;Autorise une interruption lectronique ;Autorise une interruption lectronique
;Entre : AL - Numro de l'interruption (0-15) … autoriser 0-7 = MASTERPIC , 8-15 = SLAVEPIC ;Entre : %1 - Numro de l'interruption (0-15) … autoriser 0-7 = MASTERPIC , 8-15 = SLAVEPIC
EnableIRQ: EnableIRQ PROC FAR
push ax cx dx ARG @irq:word
USES ax,cx,dx
mov ax,[@irq]
mov dx,MASTERPIC+IRQMASK mov dx,MASTERPIC+IRQMASK
cmp al,7 cmp al,7
jbe master jbe @@master
mov dx,SLAVEPIC+IRQMASK mov dx,SLAVEPIC+IRQMASK
master: @@master:
mov cl,al mov cl,al
and cl,7 and cl,7
mov al,1 mov al,1
@ -99,81 +85,99 @@ mov ah,al
in al,dx in al,dx
and al,ah and al,ah
out dx,al out dx,al
pop dx cx ax
ret ret
EnableIRQ endp
;Desactive une interruption lectronique ;Desactive une interruption lectronique
;Entre : AL - Numro de l'interruption (0-15) … desactiver 0-7 = MASTERPIC , 8-15 = SLAVEPIC ;Entre : %0 - Numro de l'interruption (0-15) … desactiver 0-7 = MASTERPIC , 8-15 = SLAVEPIC
DisableIRQ: DisableIRQ PROC FAR
push ax cx dx ARG @irq:word
USES ax,cx,dx
mov ax,[@irq]
mov dx,MASTERPIC+IRQMASK mov dx,MASTERPIC+IRQMASK
cmp al,7 cmp al,7
jbe master2 jbe @@master
mov dx,SLAVEPIC+IRQMASK mov dx,SLAVEPIC+IRQMASK
master2: @@master:
mov cl,al mov cl,al
and cl,7 and cl,7
mov al,1 mov al,1
shl al,cl shl al,cl
not al
mov ah,al mov ah,al
in al,dx in al,dx
or al,ah or al,ah
out dx,al out dx,al
pop dx cx ax
ret ret
DisableIRQ endp
;Signale "End Of Interrupt" de l'interruption al
SetEOI: ;Signale "End Of Interrupt" de l'interruption %0
push ax dx SetEOI PROC FAR
ARG @irq:word
USES ax,dx
mov ax,[@irq]
cmp al,7 cmp al,7
jbe master3 jbe @@master
mov al,EOI mov al,EOI
out SLAVEPIC,al out SLAVEPIC,al
master3: @@master:
mov al,EOI mov al,EOI
out MASTERPIC,al out MASTERPIC,al
pop dx ax
ret ret
DisableIRQ endp
;Lit les masques d'un contr“leur IRQ dans al, 0 master ou slave 1 ds bh
ReadmaskIrq: ;Lit les masques d'un contr“leur IRQ dans ax, 0 master ou slave 1 ds %1
push dx ReadmaskIrq PROC FAR
ARG @controleur:word
USES bx,dx
mov bx,[@controleur]
mov dx,MASTERPIC+ IRQMASK mov dx,MASTERPIC+ IRQMASK
cmp bh,0 cmp bl,0
jne Master5 jne @@master
mov dx,SLAVEPIC+ IRQMASK mov dx,SLAVEPIC+ IRQMASK
master5: @@master:
xor ah,ah
in al,dx in al,dx
pop dx pop dx
ret ret
ReadmaskIrq endp
;Lit le registre d'tat d'un contr“leur IRQ dans al, 0 master ou slave 1 ds bh ;Lit le registre d'tat d'un contr“leur IRQ dans ax, 0 master ou slave 1 ds %1
ReadISR: ReadISR PROC FAR
push dx ARG @controleur:word
USES bx,dx
mov bx,[@controleur]
mov dx,MASTERPIC mov dx,MASTERPIC
cmp bh,0 cmp bh,0
jne Master6 jne @@master
mov dx,SLAVEPIC mov dx,SLAVEPIC
master6: @@master:
mov al,isr mov al,isr
out dx,al out dx,al
xor ah,ah
in al,dx in al,dx
pop dx
ret ret
ReadISR endp
;Lit le registre d'tat d'un contr“leur IRQ dans al, 0 master ou slave 1 ds bh ;Lit le registre d'tat d'un contr“leur IRQ dans al, 0 master ou slave 1 ds bh
ReadIRR: ReadIRR PROC FAR
push dx ARG @controleur:word
USES bx,dx
mov bx,[@controleur]
mov dx,MASTERPIC mov dx,MASTERPIC
cmp bh,0 cmp bh,0
jne Master7 jne @@master
mov dx,SLAVEPIC mov dx,SLAVEPIC
master7: @@master:
mov al,irr mov al,irr
out dx,al out dx,al
xor ah,ah
in al,dx in al,dx
pop dx
ret ret
ReadIRR endp
;remplace le handler pointer par ds:si en bx:100h interruption ax ;remplace le handler pointer par ds:si en bx:100h interruption ax
replacehandler: replacehandler: