feat: version bêta 1.3.2fr
This commit is contained in:
parent
9e47321c92
commit
8d0fd22134
|
@ -0,0 +1,266 @@
|
|||
;****************************************************************
|
||||
; *
|
||||
; Periph‚rique : DMA *
|
||||
; Plages Entr‚es-Sorties : 0000-000F *
|
||||
; 00C0-00DF *
|
||||
; 0080-0090 *
|
||||
; (0094-009F) *
|
||||
; Plages M‚moires : AUCUNES *
|
||||
; *
|
||||
DmaRead equ 044h ;I/O to memory, no autoinit, increment, single mode
|
||||
DmaWrite equ 048h ;Memory to I/O, no autoinit, increment, single mode
|
||||
|
||||
;Lecture des bits du registre d'‚tat (08, D0 )
|
||||
STATUS_REQ3 = 80h ;Bit actif: le canal DMA concern‚
|
||||
STATUS_REQ2 = 40h ;re‡oit une requˆte DMA
|
||||
STATUS_REQ1 = 20h ;Request
|
||||
STATUS_REQ0 = 10h
|
||||
STATUS_TC3 = 08h ;Bit actif: Un transfert DMA a ‚t‚
|
||||
STATUS_TC2 = 04h ;ex‚cut‚ depuis la derniŠre lecture
|
||||
STATUS_TC1 = 02h ;du registre d'‚tat.
|
||||
STATUS_TC0 = 01h ;Terminal Count
|
||||
|
||||
;Ecriture des bits du registre de commande (08, D0)
|
||||
COMMAND_DACKLEVEL = 80h ;Bit 7 actif: ligne DMA Acknowledge HIGH active
|
||||
COMMAND_DREQLEVEL = 40h ;Bit 6 actif: ligne REQ Acknowledge LOW active
|
||||
COMMAND_EXTWRITE = 20h ;Bit 5 actif: EXTENDED Write,sinon LATE Write
|
||||
COMMAND_FIXEDPRI = 10h ;Bit 4 actif: priorit‚ constante
|
||||
COMMAND_COMPRESS = 08h ;Bit 3 actif: compression
|
||||
COMMAND_INACTIVE = 04h ;Bit 2 actif: contr“leur d‚sactiv‚
|
||||
COMMAND_ADH0 = 02h ;Bit 1 actif: Adress Hold pour canal 0/4 d‚sactiv‚
|
||||
COMMAND_MEM2MEM = 01h ;Bit 0 actif: m‚moire/m‚moire, sinon m‚moire/p‚riph‚rie
|
||||
|
||||
;Ecriture des bits du registre de requˆte ( 09, D2 )
|
||||
REQUEST_RESERVED = 0F8h ;R‚glage des bits r‚serv‚s =0
|
||||
REQUEST_SET = 04h ;D‚finir requˆte DMA
|
||||
REQUEST_CLR = 00h ;Supprimer requˆte DMA
|
||||
REQUEST_MSK = 03h ;Indiquer le canal dans les deux bits du bas
|
||||
|
||||
;Ecriture des bits du registre de masquage de canal ( 0A, D4 )
|
||||
CHANNEL_RESERVED = 0F8h ;R‚glage des bits r‚serv‚s =0
|
||||
CHANNEL_SET = 04h ;Masquer/verrouiller canal DMA
|
||||
CHANNEL_CLR = 00h ;Lib‚rer canal DMA
|
||||
CHANNEL_MSK = 03h ;Indiquer le canal dans les deux bits du bas
|
||||
|
||||
;Ecriture des bits du registre de mode (0B,D6)
|
||||
MODE_DEMAND = 00h ;Transf‚rer … la demande
|
||||
MODE_SINGLE = 40h ;Transf‚rer valeurs uniques
|
||||
MODE_BLOCK = 80h ;Transf‚rer en bloc
|
||||
MODE_CASCADE = 0C0h ;Transf‚rer en cascade
|
||||
MODE_DECREMENT = 20h ;D‚cr‚menter
|
||||
MODE_AUTOINIT = 10h ;Autoinitialisation vers la fin
|
||||
MODE_VERIFY = 00h ;V‚rifier
|
||||
MODE_WRITE = 04h ;Ecrire dans la m‚moire
|
||||
MODE_READ = 08h ;Lire depuis la m‚moire
|
||||
MODE_INVALID = 0Ch ;Incorrect
|
||||
MODE_CHANNELMSK = 03h ;Indiquer le canal dans les deux bits du bas
|
||||
|
||||
;Ports du DMA esclave
|
||||
|
||||
DmaStatusS dw 08h ;R SLAVE Registre d'‚tat
|
||||
DmaCommandS dw 08h ;W SLAVE Registre de commande
|
||||
DmaRequestS dw 09h ;W SLAVE Ex‚cuter requˆte DMA
|
||||
DmachMaskS dw 0ah ;W SLAVE Masquer canaux
|
||||
DmaModeS dw 0bh ;W SLAVE Mode de transfert
|
||||
DmaFlipFlopS dw 0ch ;W SLAVE Flipflop adr/compteur
|
||||
DmaTempS dw 0dh ;R SLAVE Reset du contr“leur
|
||||
DmaClearS dw 0dh ;R SLAVE Registre temporaire
|
||||
DmaMaskClrS dw 0eh ;R SLAVE Lib‚rer canaux
|
||||
DmaMaskS dw 0fh ;R SLAVE Masquer canaux
|
||||
|
||||
;Ports du DMA esclave
|
||||
|
||||
DmaStatusM dw 0D0h ;R MASTER Registre d'‚tat
|
||||
DmaCommandM dw 0D0h ;W MASTER Registre de commande
|
||||
DmaRequestM dw 0D2h ;W MASTER Ex‚cuter requˆte DMA
|
||||
DmaMaskM dw 0D4h ;W MASTER Masquer canaux
|
||||
DmaModeM dw 0D6h ;W MASTER Mode de transfert
|
||||
DmaFlipFlopM dw 0D8h ;W MASTER Flipflop adr/compteur
|
||||
DmaTempM dw 0DAh ;R MASTER Reset du contr“leur
|
||||
DmaClearM dw 0DAh ;R MASTER Registre temporaire
|
||||
DmaMaskClrM dw 0DCh ;R MASTER Lib‚rer canaux
|
||||
DmaMaskM2 dw 0DEh ;R MASTER Masquer canaux
|
||||
|
||||
DmaAdress db 00h ;DMA address register 0
|
||||
db 002h ;DMA address register 1
|
||||
db 004h ;DMA address register 2
|
||||
db 006h ;DMA address register 3
|
||||
db 0c0h ;DMA address register 4
|
||||
db 0c4h ;DMA address register 5
|
||||
db 0c8h ;DMA address register 6
|
||||
db 0cch ;DMA address register 7
|
||||
|
||||
DmaCount db 001h ;DMA count registers 0
|
||||
db 003h ;DMA count registers 1
|
||||
db 005h ;DMA count registers 2
|
||||
db 007h ;DMA count registers 3
|
||||
db 0c2h ;DMA count registers 4
|
||||
db 0c6h ;DMA count registers 5
|
||||
db 0cah ;DMA count registers 6
|
||||
db 0ceh ;DMA count registers 7
|
||||
|
||||
DmaPage db 087h ;DMA page registers 0
|
||||
db 083h ;DMA page registers 1
|
||||
db 081h ;DMA page registers 2
|
||||
db 082h ;DMA page registers 3
|
||||
db 08fh ;DMA page registers 4
|
||||
db 08bh ;DMA page registers 5
|
||||
db 089h ;DMA page registers 6
|
||||
db 08ah ;DMA page registers 7
|
||||
|
||||
;verouille le canal AL
|
||||
DisableDma:
|
||||
push ax dx
|
||||
cmp al, 4
|
||||
jae MasterDisableDma
|
||||
mov dx, DmaMaskS
|
||||
or al, 00000100b
|
||||
out dx, al
|
||||
jmp EndDisableDma
|
||||
MasterDisableDma:
|
||||
mov dx, DmaMaskS
|
||||
and al, 00000011b
|
||||
or al, 00000100b
|
||||
out dx, al
|
||||
EndDisableDma:
|
||||
pop dx ax
|
||||
ret
|
||||
|
||||
;déverouille le canal AL
|
||||
EnableDma:
|
||||
push ax dx
|
||||
cmp al, 4
|
||||
jae MasterDisableDma
|
||||
mov dx, DmaMaskS
|
||||
out dx, al
|
||||
jmp EndEnableDma
|
||||
MasterEnableDma:
|
||||
mov dx, DmaMaskS
|
||||
and al, 00000011b
|
||||
out dx, al
|
||||
EndEnableDma:
|
||||
pop dx ax
|
||||
ret
|
||||
|
||||
;Efface le FlipFlop canal AL
|
||||
ClrDmaFlipFlop:
|
||||
push ax dx
|
||||
cmp al, 4
|
||||
jae MasterClrFlipFlopDma
|
||||
mov dx,DmaFlipFlopS
|
||||
xor ax, ax
|
||||
out dx, al
|
||||
jmp EndClrFlipFlopDma
|
||||
MasterClrFlipFlopDma:
|
||||
mov dx,DmaFlipFlopM
|
||||
xor ax, ax
|
||||
out dx, al
|
||||
EndClrFlipFlopDma:
|
||||
pop dx ax
|
||||
ret
|
||||
|
||||
;Met le mode du canal al à ah
|
||||
SetDmaMode:
|
||||
push ax dx
|
||||
cmp al, 4
|
||||
jae MasterSetDmaMode
|
||||
mov dx,DmaModeS
|
||||
or al, ah
|
||||
out dx, al
|
||||
jmp EndSetDmaMode
|
||||
MasterSetDmaMode:
|
||||
mov dx,DmaModeM
|
||||
and al, 00000011b
|
||||
or al, ah
|
||||
out dx, al
|
||||
EndSetDmaMode:
|
||||
pop dx ax
|
||||
ret
|
||||
|
||||
|
||||
;Met le page du canal al a ah
|
||||
SetDmaPage:
|
||||
push ax bx dx si
|
||||
cmp al, 4
|
||||
jae MasterSetDmaPage
|
||||
mov si, offset DmaPage
|
||||
xor dh, dh
|
||||
xor bh, bh
|
||||
mov bl, al
|
||||
mov dl, cs:[si+bx]
|
||||
xchg al, ah
|
||||
out dx, al
|
||||
jmp EndSetDmaPage
|
||||
MasterSetDmaPage:
|
||||
EndSetDmaPage:
|
||||
pop si dx bx ax
|
||||
ret
|
||||
|
||||
;Met l'adresse du canal al a DS:BX
|
||||
SetDmaAdress:
|
||||
push ax bx cx dx si
|
||||
push ax
|
||||
mov ax, ds
|
||||
and ax, 0000111111111111b
|
||||
shl ax,4
|
||||
add bx, ax
|
||||
mov ax, ds
|
||||
and ax, 1111000000000000b
|
||||
shr ax, 4
|
||||
mov cx,ax
|
||||
pop ax
|
||||
push ax
|
||||
add ax,cx
|
||||
call SetDmaPage
|
||||
pop ax
|
||||
call ClrDmaFlipFlop
|
||||
mov si, offset DmaAdress
|
||||
xor dh, dh
|
||||
push bx
|
||||
xor bh, bh
|
||||
mov bl, al
|
||||
mov dl, byte ptr cs:[si+bx]
|
||||
pop bx
|
||||
cmp al, 4
|
||||
jae MasterSetDmaAddress
|
||||
mov al, bh
|
||||
out dx, al
|
||||
mov al, bl
|
||||
out dx, al
|
||||
jmp EndSetDmaAddress
|
||||
MasterSetDmaAddress:
|
||||
mov al, bh
|
||||
out dx, al
|
||||
call ClrDmaFlipFlop
|
||||
mov al, bl
|
||||
out dx, al
|
||||
EndSetDmaAddress:
|
||||
pop si dx cx bx ax
|
||||
ret
|
||||
|
||||
;Spécifie au controleur DMA le nombre d'octets à transférer dans CX
|
||||
SetDmaCount:
|
||||
push ax bx dx si
|
||||
call ClrDmaFlipFlop
|
||||
mov si, offset DmaCount
|
||||
xor dh, dh
|
||||
xor bh, bh
|
||||
mov bl, al
|
||||
mov dl, byte ptr cs:[si+bx]
|
||||
cmp al, 4
|
||||
jae MasterSetDmaCount
|
||||
mov al, ch
|
||||
out dx, al
|
||||
mov al, cl
|
||||
out dx, al
|
||||
jmp EndSetDmaCount
|
||||
MasterSetDmaCount:
|
||||
mov al, ch
|
||||
out dx, al
|
||||
call ClrDmaFlipFlop
|
||||
mov al, cl
|
||||
out dx, al
|
||||
EndSetDmaCount:
|
||||
pop si dx bx ax
|
||||
ret
|
||||
|
|
@ -0,0 +1,415 @@
|
|||
;Adresses de port du contr“leur IRQ
|
||||
MASTERPIC = 020h ;Adresse de base du PIC maŒtre
|
||||
SLAVEPIC = 0A0h ;Adresse de base du PIC esclave
|
||||
IRQMASK = 001h ;Offset sur port de masquage
|
||||
|
||||
;Commandes IRQ OCW2
|
||||
DISABLEROTATION = 000h ;Desactiver la rotation de priorités en mode EOI automatique
|
||||
EOI = 020h ;End of Interrupt non sp‚cifi‚
|
||||
COMMANDEOI = 060h ;Commande EOI particulière
|
||||
ENABLEROTATION = 080h ;Activer la rotation de priorités en mode EOI automatique
|
||||
ROTATIONNOSPEC = 0A0h ;Rotation des priorités en mode EOI automatique
|
||||
SETPRIORITY = 0C0h ;Definir la priorité
|
||||
ROTATIONSPEC = 0E0h ;Rotation des priorités en mode EOI spécifié
|
||||
|
||||
;Position des vecteurs d'interruptions
|
||||
MASTERFIRSTVECTOR = 008h ;Vecteurs logiciels des interruptions
|
||||
SLAVEFIRSTVECTOR = 070h ;‚lectroniques
|
||||
|
||||
;OCW3 codes registres
|
||||
IRR = 002h ;Interrupt Request Register
|
||||
ISR = 003h ;In Service Register
|
||||
;OCW3 et modes
|
||||
OCW3 = 008h ;OCW3
|
||||
POLLING = 004h ;Polling bit
|
||||
|
||||
|
||||
ISR = 0Bh ; Pas d'op‚ration, pas de Poll, lire ISR OCW3
|
||||
IRR = 0Ah ; Pas d'op‚ration, pas de Poll, lire IRR
|
||||
|
||||
;Autorise une interruption ‚lectronique
|
||||
;Entr‚e : %1 - Num‚ro de l'interruption (0-15) … autoriser 0-7 = MASTERPIC , 8-15 = SLAVEPIC
|
||||
PROC enableirq FAR
|
||||
ARG @irq:word
|
||||
USES ax,cx,dx
|
||||
mov ax,[@irq]
|
||||
mov dx,MASTERPIC+IRQMASK
|
||||
cmp al,7
|
||||
jbe @@master
|
||||
mov dx,SLAVEPIC+IRQMASK
|
||||
@@master:
|
||||
mov cl,al
|
||||
and cl,7
|
||||
mov al,1
|
||||
shl al,cl
|
||||
not al
|
||||
mov ah,al
|
||||
in al,dx
|
||||
and al,ah
|
||||
out dx,al
|
||||
ret
|
||||
endp enableirq
|
||||
|
||||
;Desactive une interruption ‚lectronique
|
||||
;Entr‚e : %0 - Num‚ro de l'interruption (0-15) … desactiver 0-7 = MASTERPIC , 8-15 = SLAVEPIC
|
||||
PROC disableirq FAR
|
||||
ARG @irq:word
|
||||
USES ax,cx,dx
|
||||
mov ax,[@irq]
|
||||
mov dx,MASTERPIC+IRQMASK
|
||||
cmp al,7
|
||||
jbe @@master
|
||||
mov dx,SLAVEPIC+IRQMASK
|
||||
@@master:
|
||||
mov cl,al
|
||||
and cl,7
|
||||
mov al,1
|
||||
shl al,cl
|
||||
not al
|
||||
mov ah,al
|
||||
in al,dx
|
||||
or al,ah
|
||||
out dx,al
|
||||
ret
|
||||
endp disableirq
|
||||
|
||||
|
||||
;Signale "End Of Interrupt" de l'interruption %0
|
||||
PROC seteoi FAR
|
||||
ARG @irq:word
|
||||
USES ax,dx
|
||||
mov ax,[@irq]
|
||||
cmp al,7
|
||||
jbe @@master
|
||||
mov al,EOI
|
||||
out SLAVEPIC,al
|
||||
@@master:
|
||||
mov al,EOI
|
||||
out MASTERPIC,al
|
||||
ret
|
||||
endp seteoi
|
||||
|
||||
|
||||
;Lit les masques d'un contr“leur IRQ dans ax, 0 master ou slave 1 ds %1
|
||||
PROC readimr FAR
|
||||
ARG @controleur:word
|
||||
USES bx,dx
|
||||
mov bx,[@controleur]
|
||||
mov dx,MASTERPIC+ IRQMASK
|
||||
cmp bl,0
|
||||
jne @@master
|
||||
mov dx,SLAVEPIC+ IRQMASK
|
||||
@@master:
|
||||
xor ah,ah
|
||||
in al,dx
|
||||
pop dx
|
||||
ret
|
||||
endp readimr
|
||||
|
||||
;Lit le registre d'‚tat d'un contr“leur IRQ dans ax, 0 master ou slave 1 ds %1
|
||||
PROC readisr FAR
|
||||
ARG @controleur:word
|
||||
USES bx,dx
|
||||
mov bx,[@controleur]
|
||||
mov dx,MASTERPIC
|
||||
cmp bh,0
|
||||
jne @@master
|
||||
mov dx,SLAVEPIC
|
||||
@@master:
|
||||
mov al,ISR
|
||||
out dx,al
|
||||
xor ah,ah
|
||||
in al,dx
|
||||
ret
|
||||
endp readisr
|
||||
|
||||
|
||||
;Lit le registre d'‚tat d'un contr“leur IRQ dans al, 0 master ou slave 1 ds bh
|
||||
PROC readirr FAR
|
||||
ARG @controleur:word
|
||||
USES bx,dx
|
||||
mov bx,[@controleur]
|
||||
mov dx,MASTERPIC
|
||||
cmp bh,0
|
||||
jne @@master
|
||||
mov dx,SLAVEPIC
|
||||
@@master:
|
||||
mov al,IRR
|
||||
out dx,al
|
||||
xor ah,ah
|
||||
in al,dx
|
||||
ret
|
||||
endp readirr
|
||||
|
||||
;carry si enable et pas carry si pas enable
|
||||
PROC isenableirq FAR
|
||||
ARG @irq:word
|
||||
USES ax,cx,dx
|
||||
mov ax,[@irq]
|
||||
mov dx,MASTERPIC+IRQMASK
|
||||
cmp al,7
|
||||
jbe @@master
|
||||
mov dx,SLAVEPIC+IRQMASK
|
||||
@@master:
|
||||
mov cl,al
|
||||
and cx,7
|
||||
in al,dx
|
||||
neg al
|
||||
bt ax,cx
|
||||
ret
|
||||
endp isenableirq
|
||||
|
||||
|
||||
;carry si enable et pas carry si pas enable
|
||||
PROC isinserviceirq FAR
|
||||
ARG @irq:word
|
||||
USES ax,cx,dx
|
||||
mov ax,[@irq]
|
||||
mov dx,MASTERPIC
|
||||
cmp al,7
|
||||
jbe @@master
|
||||
mov dx,SLAVEPIC
|
||||
@@master:
|
||||
mov cl,al
|
||||
mov al,ISR
|
||||
out dx,al
|
||||
and cx,7
|
||||
in al,dx
|
||||
neg al
|
||||
bt ax,cx
|
||||
ret
|
||||
endp isinserviceirq
|
||||
|
||||
|
||||
;carry si enable et pas carry si pas enable
|
||||
PROC isrequestirq FAR
|
||||
ARG @irq:word
|
||||
USES ax,cx,dx
|
||||
mov ax,[@irq]
|
||||
mov dx,MASTERPIC
|
||||
cmp al,7
|
||||
jbe @@master
|
||||
mov dx,SLAVEPIC
|
||||
@@master:
|
||||
mov cl,al
|
||||
mov al,IRR
|
||||
out dx,al
|
||||
and cx,7
|
||||
in al,dx
|
||||
neg al
|
||||
bt ax,cx
|
||||
ret
|
||||
endp isrequestirq
|
||||
|
||||
|
||||
PROC installirqhandler FAR
|
||||
USES eax,bx,cx,edx,si,di,ds,es
|
||||
push fs
|
||||
call mbcreate,offset interruptionbloc,256*size ints
|
||||
mov es,ax
|
||||
mov ax,0x0000
|
||||
mov ds,ax
|
||||
xor si,si
|
||||
@@searchdummypointer:
|
||||
mov fs,[(vector si).data.seg]
|
||||
mov bx,[(vector si).data.off]
|
||||
cmp [byte ptr fs:bx],0xCF ;iret
|
||||
je @@founded
|
||||
add si,size vector
|
||||
cmp si,256*4
|
||||
jb @@searchdummypointer
|
||||
xor edx,edx
|
||||
jmp @@suite
|
||||
@@founded:
|
||||
mov edx,[(vector si).content]
|
||||
@@suite:
|
||||
xor cx,cx
|
||||
xor si,si
|
||||
xor di,di
|
||||
cli
|
||||
@@copy:
|
||||
mov [es:(ints di).number],cl
|
||||
mov [es:(ints di).locked],0
|
||||
mov [es:(ints di).vector1.content],0
|
||||
mov [es:(ints di).vector3.content],0
|
||||
mov [es:(ints di).vector4.content],0
|
||||
mov [es:(ints di).vector5.content],0
|
||||
mov [es:(ints di).vector6.content],0
|
||||
mov [es:(ints di).vector7.content],0
|
||||
mov [es:(ints di).vector8.content],0
|
||||
mov [es:(ints di).launchedlow],0
|
||||
mov [es:(ints di).launchedhigh],0
|
||||
mov [es:(ints di).calledlow],0
|
||||
mov [es:(ints di).calledhigh],0
|
||||
mov eax,[(vector si).content]
|
||||
cmp eax,edx
|
||||
je @@notarealvector
|
||||
mov [es:(ints di).vector1.content],eax
|
||||
mov [es:(ints di).activated],1
|
||||
jmp @@copynext
|
||||
@@notarealvector:
|
||||
mov [es:(ints di).vector1.content],0
|
||||
mov [es:(ints di).activated],0
|
||||
@@copynext:
|
||||
mov bx,cx
|
||||
shl bx,3
|
||||
sub bx,cx
|
||||
add bx,offset coupling
|
||||
mov [(vector si).data.seg],cs
|
||||
mov [(vector si).data.off],bx
|
||||
add si,size vector
|
||||
add di,size ints
|
||||
inc cl
|
||||
cmp cl,0
|
||||
jne @@copy
|
||||
@@end:
|
||||
pop fs
|
||||
sti
|
||||
ret
|
||||
endp installirqhandler
|
||||
|
||||
|
||||
interruptionbloc db '/interrupts',0
|
||||
|
||||
|
||||
PROC savecontext FAR
|
||||
ARG @pointer:word
|
||||
USES eax,si,ds
|
||||
pushfd
|
||||
push eax
|
||||
push ebx
|
||||
push ecx
|
||||
push edx
|
||||
push esi
|
||||
push edi
|
||||
push ds
|
||||
push es
|
||||
push fs
|
||||
push gs
|
||||
push ss
|
||||
mov si,[@pointer]
|
||||
mov ds,[ss:bp+4]
|
||||
mov eax,ebp
|
||||
mov ax,[word ptr ss:bp]
|
||||
push eax
|
||||
push [word ptr ss:bp+4]
|
||||
xor eax,eax
|
||||
mov ax,[word ptr ss:bp+2]
|
||||
push eax
|
||||
mov ax,bp
|
||||
add ax,4
|
||||
push eax
|
||||
pop [(regs si).sesp]
|
||||
pop [(regs si).seip]
|
||||
pop [(regs si).scs]
|
||||
pop [(regs si).sebp]
|
||||
pop [(regs si).sss]
|
||||
pop [(regs si).sgs]
|
||||
pop [(regs si).sfs]
|
||||
pop [(regs si).ses]
|
||||
pop [(regs si).sds]
|
||||
pop [(regs si).sedi]
|
||||
pop [(regs si).sesi]
|
||||
pop [(regs si).sedx]
|
||||
pop [(regs si).secx]
|
||||
pop [(regs si).sebx]
|
||||
pop [(regs si).seax]
|
||||
pop [(regs si).seflags]
|
||||
ret
|
||||
endp savecontext
|
||||
|
||||
PROC restorecontextg FAR
|
||||
ARG @pointer:word
|
||||
mov si,[@pointer]
|
||||
pushd [cs:(regs si).sesi]
|
||||
pushd [cs:(regs si).seflags]
|
||||
mov eax,[cs:(regs si).seax]
|
||||
mov ebx,[cs:(regs si).sebx]
|
||||
mov ecx,[cs:(regs si).secx]
|
||||
mov edx,[cs:(regs si).sedx]
|
||||
mov edi,[cs:(regs si).sedi]
|
||||
mov ebp,[cs:(regs si).sebp]
|
||||
mov es,[cs:(regs si).ses]
|
||||
mov fs,[cs:(regs si).sfs]
|
||||
mov gs,[cs:(regs si).sgs]
|
||||
mov ds,[cs:(regs si).sds]
|
||||
popfd
|
||||
pop esi
|
||||
pop [cs:dummy]
|
||||
db 0xCA,0x02,0x00 ;retf 2
|
||||
endp restorecontextg
|
||||
|
||||
|
||||
|
||||
coupling:
|
||||
counter = 0
|
||||
REPEAT 256
|
||||
push counter+256
|
||||
push offset irqhandlers
|
||||
ret
|
||||
counter = counter + 1
|
||||
ENDM
|
||||
|
||||
interrupt dw 0
|
||||
dummy dw 0
|
||||
calling_reg regs <>
|
||||
function_reg regs <>
|
||||
|
||||
irqhandlers:
|
||||
cli
|
||||
pop [cs:interrupt]
|
||||
call savecontext,offset calling_reg
|
||||
call irqhandler,[cs:interrupt]
|
||||
call restorecontextg,offset calling_reg
|
||||
sti
|
||||
iret
|
||||
|
||||
PROC irqhandler NEAR
|
||||
ARG @int:word
|
||||
push cs
|
||||
pop ds
|
||||
call mbfindsb,offset interruptionbloc,cs
|
||||
jc @@end
|
||||
mov es,ax
|
||||
mov ax,[@int]
|
||||
sub ax,256
|
||||
mov cx,size ints
|
||||
mul cx
|
||||
mov si,ax
|
||||
add [es:(ints si).calledlow],1
|
||||
adc [es:(ints si).calledhigh],0
|
||||
cmp [es:(ints si).activated],1
|
||||
jne @@end
|
||||
add [es:(ints si).launchedlow],1
|
||||
adc [es:(ints si).launchedhigh],0
|
||||
lea si,[es:(ints si).vector1]
|
||||
mov cl,8
|
||||
@@launchall:
|
||||
cmp [es:(vector si).content],0
|
||||
je @@end
|
||||
push [word ptr cs:calling_reg.seflags]
|
||||
push cs
|
||||
push offset @@back
|
||||
push [es:(vector si).data.seg]
|
||||
push [es:(vector si).data.off]
|
||||
call savecontext,offset function_reg
|
||||
call restorecontextg,offset calling_reg
|
||||
db 0xCB
|
||||
@@back:
|
||||
cli
|
||||
call savecontext,offset calling_reg
|
||||
call restorecontextg,offset function_reg
|
||||
@@next:
|
||||
add si,size vector
|
||||
dec cl
|
||||
jnz @@launchall
|
||||
@@end:
|
||||
ret
|
||||
endp irqhandler
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
asm= lzasm /z/t
|
||||
lnk= elink
|
||||
|
||||
all: systeme.sys boot.bin
|
||||
|
||||
systeme.sys: video.obj disque.obj systeme.obj
|
||||
$(lnk) systeme.obj systeme.sys
|
||||
|
||||
systeme.obj: ..\lib\detect.lib ..\lib\video.lib video.sys disque.sys
|
||||
$(asm) systeme.asm
|
||||
|
||||
disque.sys:
|
||||
$(lnk) disque.obj disque.sys
|
||||
|
||||
video.sys:
|
||||
$(lnk) video.obj video.sys
|
||||
|
||||
boot.bin: boot.obj
|
||||
$(lnk) boot.obj boot.bin /bs
|
||||
|
||||
video.obj:
|
||||
$(asm) video.asm
|
||||
|
||||
disque.obj:
|
||||
$(asm) disque.asm
|
||||
|
||||
boot.obj:
|
||||
$(asm) boot.asm
|
||||
|
||||
clean:
|
||||
del *.obj
|
||||
del *.exe
|
||||
del *.bak
|
||||
del *.lib
|
||||
del *.com
|
||||
del *.bin
|
||||
del *.sys
|
||||
del *.err
|
|
@ -0,0 +1,216 @@
|
|||
model tiny,stdcall
|
||||
p486
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\fat.h"
|
||||
include "..\include\divers.h"
|
||||
|
||||
org 7C00h
|
||||
|
||||
jmp boot
|
||||
|
||||
bootsec bootinfo <"COS2000A",512,1,1,2,224,2880,0F0h,9,18,2,0,0,0,0,0,29h,01020304h,"COS2000 ","FAT12 ">
|
||||
|
||||
errorloading db " [Erreur]",0dh,0ah,0
|
||||
okloading db "Recherche noyau ",0Dh,0ah," -"
|
||||
sys db "SYSTEME SYS",0
|
||||
syst db " [ Ok ]",0dh,0ah,"Chargement ",0
|
||||
dot db ".",0
|
||||
|
||||
|
||||
|
||||
errorboot:
|
||||
mov si,offset errorloading
|
||||
call showstr
|
||||
mov ah,0
|
||||
int 16h
|
||||
int 19h
|
||||
|
||||
boot:
|
||||
mov [bootsec.bootdrive],dl
|
||||
cli
|
||||
mov ax,09000h
|
||||
mov ss,ax
|
||||
mov sp,0FFFFh
|
||||
sti
|
||||
boot2:
|
||||
push cs
|
||||
push cs
|
||||
pop es
|
||||
pop ds
|
||||
xor ax,ax
|
||||
mov dl,[bootsec.bootdrive]
|
||||
int 13h
|
||||
jc errorboot
|
||||
mov si,offset okloading
|
||||
call showstr
|
||||
mov cx,[bootsec.reservedsectors]
|
||||
add cx,[bootsec.hiddensectorsh]
|
||||
adc cx,[bootsec.hiddensectorsl]
|
||||
push cx
|
||||
mov bx,[bootsec.sectorsperfat]
|
||||
mov di,offset bufferfat
|
||||
readfat:
|
||||
call readsector
|
||||
jc errorboot
|
||||
inc cx
|
||||
add di,[bootsec.sectorsize]
|
||||
dec bx
|
||||
jnz readfat
|
||||
pop cx
|
||||
xor ax,ax
|
||||
mov al,[bootsec.fatsperdrive]
|
||||
mov bx,[bootsec.sectorsperfat]
|
||||
mul bx
|
||||
add cx,ax
|
||||
mov ax,32
|
||||
mul [bootsec.directorysize]
|
||||
div [bootsec.sectorsize]
|
||||
add ax,cx
|
||||
sub ax,2
|
||||
mov [word ptr bootsec.reservedfornt],ax
|
||||
xor dx,dx
|
||||
checkroot:
|
||||
mov di,offset buffer
|
||||
call readsector
|
||||
jc errorboot
|
||||
xor bx,bx
|
||||
findnext:
|
||||
cmp [byte ptr di],0
|
||||
je errorboot
|
||||
cmp [byte ptr di],0E5h
|
||||
je no
|
||||
cmp [byte ptr di],041h
|
||||
je no
|
||||
mov si,offset dot
|
||||
call showstr
|
||||
push di cx
|
||||
mov si,offset sys
|
||||
mov cx,11
|
||||
rep cmpsb
|
||||
pop cx di
|
||||
je oksystem
|
||||
no:
|
||||
add di,32
|
||||
add bx,32
|
||||
inc dx
|
||||
cmp dx,[bootsec.directorysize]
|
||||
ja errorboot
|
||||
cmp bx,[bootsec.sectorsize]
|
||||
jb findnext
|
||||
inc cx
|
||||
jmp checkroot
|
||||
oksystem:
|
||||
mov si,offset syst
|
||||
call showstr
|
||||
mov cx,[di+26]
|
||||
mov ax,8000h
|
||||
mov es,ax
|
||||
push es
|
||||
mov di,0000h
|
||||
push 0010h
|
||||
mov si,offset dot
|
||||
xor ax,ax
|
||||
fatagain:
|
||||
cmp cx,0FF0h
|
||||
jae finishload
|
||||
push cx
|
||||
add cx,[word ptr bootsec.reservedfornt]
|
||||
call readsector
|
||||
pop cx
|
||||
jc errorboot
|
||||
inc ax
|
||||
call showstr
|
||||
add di,[bootsec.sectorsize]
|
||||
call getfat
|
||||
jnc fatagain
|
||||
finishload:
|
||||
retf
|
||||
|
||||
;=============READSECTOR (Fonction 01H)===============
|
||||
;Lit le secteur CX et le met en es:di
|
||||
;-> AH=1
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
readsector:
|
||||
push ax bx cx dx si
|
||||
mov ax,cx
|
||||
xor dx,dx
|
||||
div [bootsec.sectorspertrack]
|
||||
inc dl
|
||||
mov bl,dl
|
||||
xor dx,dx
|
||||
div [bootsec.headsperdrive]
|
||||
xchg dl,dh
|
||||
mov cx,ax
|
||||
xchg cl,ch
|
||||
shl cl,6
|
||||
or cl, bl
|
||||
mov bx,di
|
||||
mov si, 4
|
||||
mov al, 1
|
||||
tryagain:
|
||||
mov ah, 2
|
||||
mov dl,[bootsec.bootdrive]
|
||||
int 13h
|
||||
jnc done
|
||||
dec si
|
||||
jnz tryagain
|
||||
done:
|
||||
pop si dx cx bx ax
|
||||
ret
|
||||
|
||||
|
||||
getfat:
|
||||
push ax bx dx di
|
||||
mov di,offset bufferfat
|
||||
mov ax,cx
|
||||
mov bx,ax
|
||||
and bx,0000000000000001b
|
||||
shr ax,1
|
||||
mov cx,3
|
||||
mul cx
|
||||
add di,ax
|
||||
cmp bx,0h
|
||||
jnz evenfat
|
||||
oddfat:
|
||||
mov dx,[di]
|
||||
and dx,0FFFh
|
||||
mov cx,dx
|
||||
jmp endfat
|
||||
evenfat:
|
||||
mov dx,[di+1]
|
||||
and dx,0FFF0h
|
||||
shr dx,4
|
||||
mov cx,dx
|
||||
endfat:
|
||||
pop di dx bx ax
|
||||
ret
|
||||
|
||||
|
||||
showstr:
|
||||
push ax bx si
|
||||
again:
|
||||
lodsb
|
||||
or al,al
|
||||
jz fin
|
||||
mov ah,0Eh
|
||||
mov bx,07h
|
||||
int 10h
|
||||
jmp again
|
||||
fin:
|
||||
pop si bx ax
|
||||
ret
|
||||
|
||||
|
||||
db 055h,0AAh
|
||||
|
||||
endof:
|
||||
|
||||
buffer equ offset endof+2048
|
||||
bufferfat equ offset endof+4096
|
||||
|
|
@ -0,0 +1,261 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
|
||||
jmp tsr
|
||||
offsets dd 0
|
||||
db 'KEYBOARD'
|
||||
tsr:
|
||||
pushf
|
||||
db 2eh,0ffh,1eh
|
||||
dw offsets
|
||||
cli
|
||||
cmp cs:isstate,1
|
||||
je endofforce
|
||||
mov cs:isstate,1
|
||||
mov cs:eaxr,eax
|
||||
in al,60h
|
||||
cmp al,68
|
||||
je F10
|
||||
cmp al,87
|
||||
je F11
|
||||
cmp al,88
|
||||
je F12
|
||||
endof:
|
||||
mov cs:isstate,0
|
||||
mov eax,cs:eaxr
|
||||
endofforce:
|
||||
sti
|
||||
iret
|
||||
isstate db 0
|
||||
infos db 40 dup (0)
|
||||
feax dd 0
|
||||
|
||||
F10:
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset com
|
||||
mov ah,5
|
||||
int 49h
|
||||
pop ax
|
||||
pop ax
|
||||
pop ax
|
||||
push gs
|
||||
push gs
|
||||
push gs
|
||||
pop ds
|
||||
pop es
|
||||
pop fs
|
||||
push gs
|
||||
push size exe
|
||||
sti
|
||||
mov cs:[isstate],0
|
||||
retf
|
||||
|
||||
com db 'COMMANDE.CE',0
|
||||
|
||||
F11:
|
||||
push ax di es
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset infos
|
||||
mov ah,34
|
||||
int 47h
|
||||
mov al,cs:[di+7]
|
||||
inc al
|
||||
cmp al,9
|
||||
jbe notabove
|
||||
mov al,0
|
||||
notabove:
|
||||
mov ah,0
|
||||
int 47h
|
||||
pop es di ax
|
||||
jmp endof
|
||||
|
||||
|
||||
f12:
|
||||
pushad
|
||||
pushf
|
||||
push ds
|
||||
mov cs:[eaxr],eax
|
||||
mov cs:[ebxr],ebx
|
||||
mov cs:[ecxr],ecx
|
||||
mov cs:[edxr],edx
|
||||
mov cs:[esir],esi
|
||||
mov cs:[edir],edi
|
||||
mov cs:[espr],esp
|
||||
mov cs:[ebpr],ebp
|
||||
mov cs:[csr],cs
|
||||
mov cs:[dsr],ds
|
||||
mov cs:[esr],es
|
||||
mov cs:[fsr],fs
|
||||
mov cs:[gsr],gs
|
||||
mov cs:[ssr],ss
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset sep
|
||||
call Showstr
|
||||
mov si,offset reg
|
||||
mov di,offset regdata
|
||||
mov bx,7
|
||||
showregs:
|
||||
cmp byte ptr cs:[si+6],":"
|
||||
jne endshowregs
|
||||
call Showstr
|
||||
cmp byte ptr cs:[si+4]," "
|
||||
je segsss
|
||||
mov edx,cs:[di]
|
||||
mov cx,32
|
||||
call Showhex
|
||||
add di,4
|
||||
jmp showmax
|
||||
segsss:
|
||||
mov dx,cs:[di]
|
||||
mov cx,16
|
||||
call Showhex
|
||||
add di,2
|
||||
showmax:
|
||||
add si,9
|
||||
mov bp,dx
|
||||
push si
|
||||
mov si,offset beginds
|
||||
call showstr
|
||||
mov si,bp
|
||||
mov cx,8
|
||||
mov al,0
|
||||
letshow:
|
||||
mov dl,ds:[si]
|
||||
inc si
|
||||
call showhex
|
||||
inc al
|
||||
cmp al,10
|
||||
jb letshow
|
||||
mov si,offset ende
|
||||
call showstr
|
||||
mov si,offset begines
|
||||
call showstr
|
||||
mov si,bp
|
||||
mov cx,8
|
||||
mov al,0
|
||||
letshow2:
|
||||
mov dl,es:[si]
|
||||
inc si
|
||||
call showhex
|
||||
inc al
|
||||
cmp al,10
|
||||
jb letshow2
|
||||
mov si,offset ende
|
||||
call showstr
|
||||
pop si
|
||||
jmp showregs
|
||||
endshowregs:
|
||||
mov si,offset sep
|
||||
call Showstr
|
||||
xor ax,ax
|
||||
int 16h
|
||||
pop ds
|
||||
popf
|
||||
popad
|
||||
jmp endof
|
||||
begines db ' es[',0
|
||||
beginds db ' ds[',0
|
||||
ende db '] ',0
|
||||
|
||||
|
||||
;==============================Affiche le nombre nb hexa en EDX de taille CX et couleur BL==============
|
||||
ShowHex:
|
||||
push ax bx cx edx si di
|
||||
mov di,cx
|
||||
sub cx,32
|
||||
neg cx
|
||||
shl edx,cl
|
||||
shr di,2
|
||||
mov ah,09h
|
||||
and bx,1111b
|
||||
Hexaize:
|
||||
rol edx,4
|
||||
mov si,dx
|
||||
and si,1111b
|
||||
mov al,[si+offset tab]
|
||||
push cx
|
||||
mov cx,1
|
||||
cmp al,32
|
||||
jb control2
|
||||
mov ah,09h
|
||||
int 10h
|
||||
control2:
|
||||
mov ah,0Eh
|
||||
int 10h
|
||||
pop cx
|
||||
dec di
|
||||
jnz Hexaize
|
||||
pop di si edx cx bx ax
|
||||
ret
|
||||
Tab db '0123456789ABCDEF'
|
||||
|
||||
;==============================Affiche une chaine DS:SI de couleur BL==============
|
||||
showstr:
|
||||
push ax bx cx si
|
||||
mov cx,1
|
||||
again:
|
||||
lodsb
|
||||
or al,al
|
||||
jz fin
|
||||
and bx,0111b
|
||||
cmp al,32
|
||||
jb control
|
||||
mov ah,09h
|
||||
int 10h
|
||||
control:
|
||||
mov ah,0Eh
|
||||
int 10h
|
||||
jmp again
|
||||
fin:
|
||||
pop si cx bx ax
|
||||
ret
|
||||
|
||||
|
||||
;================================================
|
||||
;Routine de débogage
|
||||
;================================================
|
||||
regdata:
|
||||
eaxr dd 0
|
||||
ebxr dd 0
|
||||
ecxr dd 0
|
||||
edxr dd 0
|
||||
esir dd 0
|
||||
edir dd 0
|
||||
espr dd 0
|
||||
ebpr dd 0
|
||||
csr dw 0
|
||||
dsr dw 0
|
||||
esr dw 0
|
||||
fsr dw 0
|
||||
gsr dw 0
|
||||
ssr dw 0
|
||||
|
||||
reg db 0Dh,0Ah,"eax : ",0
|
||||
db 0Dh,0Ah,"ebx : ",0
|
||||
db 0Dh,0Ah,"ecx : ",0
|
||||
db 0Dh,0Ah,"edx : ",0
|
||||
db 0Dh,0Ah,"esi : ",0
|
||||
db 0Dh,0Ah,"edi : ",0
|
||||
db 0Dh,0Ah,"esp : ",0
|
||||
db 0Dh,0Ah,"ebp : ",0
|
||||
db 0Dh,0Ah,"cs : ",0
|
||||
db 0Dh,0Ah,"ds : ",0
|
||||
db 0Dh,0Ah,"es : ",0
|
||||
db 0Dh,0Ah,"fs : ",0
|
||||
db 0Dh,0Ah,"gs : ",0
|
||||
db 0Dh,0Ah,"ss : ",0
|
||||
|
||||
sep db 0Ah,0Dh,'********************',0Ah,0Dh,0
|
||||
|
||||
end start
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,81 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0h
|
||||
|
||||
start:
|
||||
|
||||
jmp tsr
|
||||
offsets dd 0
|
||||
db 'HOURS'
|
||||
tsr:
|
||||
pushf
|
||||
db 2eh,0ffh,1eh
|
||||
dw offsets
|
||||
cli
|
||||
pusha
|
||||
push ds es
|
||||
push cs
|
||||
push cs
|
||||
pop ds
|
||||
pop es
|
||||
mov ah,22h
|
||||
mov di,offset infos
|
||||
int 47h
|
||||
mov bl,[infos+1]
|
||||
xor bh,bh
|
||||
sub bl,8
|
||||
mov di,bx
|
||||
shl di,1
|
||||
mov dx,71h
|
||||
xor eax,eax
|
||||
mov cx,0B800h
|
||||
mov es,cx
|
||||
mov cl,4
|
||||
mov bp,8
|
||||
show:
|
||||
dec dx
|
||||
mov al,cl
|
||||
out dx,al
|
||||
inc dx
|
||||
in al,dx
|
||||
call showbcd
|
||||
cmp cl,0
|
||||
je finic
|
||||
mov byte ptr es:[di],':'
|
||||
add di,2
|
||||
sub cl,2
|
||||
jmp show
|
||||
finic:
|
||||
pop es ds
|
||||
popa
|
||||
sti
|
||||
iret
|
||||
|
||||
|
||||
;==============================Affiche le nombre nb hexa en EDX==============
|
||||
Showbcd:
|
||||
push ax bx cx edx
|
||||
mov edx,eax
|
||||
mov cx,bp
|
||||
sub cx,32
|
||||
neg cx
|
||||
shl edx,cl
|
||||
mov ax,bp
|
||||
shr ax,2
|
||||
bcdaize:
|
||||
rol edx,4
|
||||
mov bx,dx
|
||||
and bx,0fh
|
||||
add bl,'0'
|
||||
mov es:[di],bl
|
||||
add di,2
|
||||
dec al
|
||||
jnz bcdaize
|
||||
pop edx cx bx ax
|
||||
ret
|
||||
infos db 40 dup (0)
|
||||
|
||||
end start
|
|
@ -0,0 +1,32 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0h
|
||||
|
||||
start:
|
||||
|
||||
jmp tsr
|
||||
offsets dd 0
|
||||
db 'TIMER'
|
||||
tsr:
|
||||
pushf
|
||||
db 2eh,0ffh,1eh
|
||||
dw offsets
|
||||
cli
|
||||
push ax bx es
|
||||
mov bx,cs:compteur
|
||||
inc bx
|
||||
and bx,11b
|
||||
mov cs:compteur,bx
|
||||
mov bx,cs:[offset fig+bx]
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
mov es:[0],bl
|
||||
pop es bx ax
|
||||
sti
|
||||
iret
|
||||
compteur dw 0
|
||||
fig db 'Ä\³/'
|
||||
end start
|
|
@ -0,0 +1,298 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0h
|
||||
start:
|
||||
jmp tsr
|
||||
drv db 'JOYSTICK',0
|
||||
Tsr:
|
||||
cli
|
||||
cmp ax,1234h
|
||||
jne nomore
|
||||
mov ax,4321h
|
||||
jmp itsok
|
||||
nomore:
|
||||
push bx
|
||||
cmp byte ptr cs:isact,1
|
||||
je nottest
|
||||
mov cs:isact,1
|
||||
jmp react
|
||||
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:
|
||||
mov cs:isact,0
|
||||
sti
|
||||
iret
|
||||
nottest:
|
||||
pop bx
|
||||
jmp endofint
|
||||
current dw 0
|
||||
tables dw 0;detectjoystick
|
||||
;dw getjoystick
|
||||
;dw getjoystickscreen
|
||||
;dw configjoystick
|
||||
isact db 0
|
||||
|
||||
;envoie en bx,cx les coordonn‚es et en dl les boutons
|
||||
getjoystick:
|
||||
push ax cx
|
||||
mov bx,cs:rx
|
||||
mov cx,cs:ry
|
||||
mov al,cs:button
|
||||
not al
|
||||
mov cl,4
|
||||
shr al,cl
|
||||
mov dl,al
|
||||
pop cx ax
|
||||
ret
|
||||
|
||||
;envoie en di les coordonn‚es ecran et en dl les boutons
|
||||
getjoystickscreen:
|
||||
push ax cx
|
||||
mov di,cs:xy
|
||||
mov al,cs:button
|
||||
not al
|
||||
mov cl,4
|
||||
shr al,cl
|
||||
mov dl,al
|
||||
pop cx ax
|
||||
ret
|
||||
db 'button'
|
||||
Button db 0
|
||||
db 'rx'
|
||||
rx dw 0
|
||||
db 'ry'
|
||||
ry dw 0
|
||||
db 'vx'
|
||||
VX db 0
|
||||
db 'vy'
|
||||
VY db 0
|
||||
db 'x'
|
||||
X dw 7FFFh
|
||||
db 'y'
|
||||
Y dw 7FFFh
|
||||
speed db 6
|
||||
spherex db 0
|
||||
spherey db 0
|
||||
db 'count'
|
||||
count db 0
|
||||
db 'error'
|
||||
error db 0
|
||||
xy dw 0
|
||||
old db 0
|
||||
|
||||
calibrate db 0
|
||||
db 'ticks'
|
||||
ticks dw 0
|
||||
db 'state'
|
||||
state db 0
|
||||
db 'connard'
|
||||
connard db 1
|
||||
connard2 db 1
|
||||
;Gestionnaire de joystick
|
||||
react:
|
||||
push ax bx cx dx si di bp ds es
|
||||
push cs
|
||||
pop ds
|
||||
mov dx,201h
|
||||
cmp error, 1
|
||||
je gest1
|
||||
cmp count,1
|
||||
je gest1
|
||||
cmp count,2
|
||||
je gest2
|
||||
gest1:
|
||||
mov error,0
|
||||
mov count,2
|
||||
call getticks
|
||||
mov ticks,ax
|
||||
out dx,al
|
||||
in al,dx
|
||||
and al,00000011b
|
||||
mov state,al
|
||||
jmp endgest
|
||||
gest2:
|
||||
not connard
|
||||
call getticks
|
||||
sub ax,ticks
|
||||
cmp ax,1FF0h
|
||||
jb nofinish
|
||||
mov error,1
|
||||
jmp endgest
|
||||
nofinish:
|
||||
mov bx,ax
|
||||
in al,dx
|
||||
and al,00000011b
|
||||
cmp state,al
|
||||
je endgest
|
||||
xchg state,al
|
||||
xor al,state
|
||||
mov cl,4
|
||||
or bx,bx
|
||||
js noadj
|
||||
shr bx,cl
|
||||
noadj:
|
||||
test al,1
|
||||
je isy
|
||||
mov VX,bl
|
||||
jmp wasx
|
||||
isy:
|
||||
test al,2
|
||||
je endgest
|
||||
mov VY,bl
|
||||
wasx:
|
||||
mov connard2,0fh
|
||||
mov count,1
|
||||
endgest:
|
||||
in al,dx
|
||||
not al
|
||||
mov cl,4
|
||||
shr al,cl
|
||||
mov button,al
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset infos
|
||||
mov ah,34
|
||||
int 47h
|
||||
mov cl,speed
|
||||
movsx bx,VY
|
||||
shl bx,cl
|
||||
cmp spherey,0
|
||||
jne nolimity
|
||||
xor ah,ah
|
||||
mov al,[di]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text4
|
||||
shl ax,3
|
||||
text4:
|
||||
dec ax
|
||||
cmp bx,0
|
||||
jg decy
|
||||
cmp ry,ax
|
||||
jae noaddy
|
||||
jmp nolimity
|
||||
decy:
|
||||
cmp ry,0
|
||||
je noaddy
|
||||
nolimity:
|
||||
sub y,bx
|
||||
noaddy:
|
||||
movsx bx,VX
|
||||
shl bx,cl
|
||||
cmp spherex,0
|
||||
jne nolimitx
|
||||
xor ah,ah
|
||||
mov al,[di+1]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text5
|
||||
shl ax,3
|
||||
text5:
|
||||
dec ax
|
||||
cmp bx,0
|
||||
jl decx
|
||||
cmp rx,ax
|
||||
jae noaddx
|
||||
jmp nolimitx
|
||||
decx:
|
||||
cmp rx,0
|
||||
je noaddx
|
||||
nolimitx:
|
||||
add x,bx
|
||||
noaddx:
|
||||
mov ax,x
|
||||
mov bx,0FFFFh
|
||||
xor ch,ch
|
||||
mov cl,[di+1]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text1
|
||||
shl cx,3
|
||||
text1:
|
||||
mul cx
|
||||
div bx
|
||||
mov rx,ax
|
||||
mov ax,y
|
||||
xor ch,ch
|
||||
mov cl,[di]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text2
|
||||
shl cx,3
|
||||
text2:
|
||||
mul cx
|
||||
div bx
|
||||
mov ry,ax
|
||||
xor ch,ch
|
||||
mov cl,[di+1]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text3
|
||||
shl cx,3
|
||||
text3:
|
||||
mul cx
|
||||
add ax,rx
|
||||
cmp byte ptr [di+7],4
|
||||
mov di,ax
|
||||
jbe textpoint
|
||||
mov ax,0A000h
|
||||
mov es,ax
|
||||
jmp graphpoint
|
||||
textpoint:
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
shl di,1
|
||||
inc di
|
||||
graphpoint:
|
||||
mov bx,xy
|
||||
cmp byte ptr es:[bx],070h
|
||||
jne waschanged
|
||||
mov al,old
|
||||
mov byte ptr es:[bx],al
|
||||
waschanged:
|
||||
mov xy,di
|
||||
mov al,es:[di]
|
||||
mov old,al
|
||||
mov byte ptr es:[di],070h
|
||||
mov al, 20h
|
||||
out 0a0h, al
|
||||
out 20h, al
|
||||
errormouse:
|
||||
pop es ds bp di si dx cx bx ax
|
||||
mov cs:isact,0
|
||||
pop bx
|
||||
iret
|
||||
infos db 40 dup (0)
|
||||
|
||||
|
||||
getticks:
|
||||
mov al,0
|
||||
out 43h,al
|
||||
jmp wait1
|
||||
wait1:
|
||||
in al,40h
|
||||
mov ah,al
|
||||
jmp wait2
|
||||
wait2:
|
||||
in al,40h
|
||||
xchg ah,al
|
||||
ret
|
||||
|
||||
end start
|
|
@ -0,0 +1,749 @@
|
|||
|
||||
;Affiche le nombre hexa dans %0[dword]
|
||||
PROC biosprinth FAR
|
||||
ARG @num:dword
|
||||
USES ax,bx,cx,edx,si,di
|
||||
mov edx,[@num]
|
||||
mov ah,09h
|
||||
mov di,8
|
||||
@@hexaize:
|
||||
rol edx,4
|
||||
mov si,dx
|
||||
and si,1111b
|
||||
mov al,[cs:si+offset @@tab]
|
||||
mov cx,1
|
||||
cmp al,32
|
||||
jb @@control
|
||||
mov bx,7
|
||||
mov ah,09h
|
||||
int 10h
|
||||
@@control:
|
||||
mov ah,0Eh
|
||||
int 10h
|
||||
dec di
|
||||
jnz @@hexaize
|
||||
ret
|
||||
@@tab db '0123456789ABCDEF'
|
||||
endp biosprinth
|
||||
|
||||
;Affiche le texte ASCIIZ pointé par %0
|
||||
PROC biosprint FAR
|
||||
ARG @pointer:word
|
||||
USES ax,bx,cx,si
|
||||
mov si,[@pointer]
|
||||
mov cx,1
|
||||
mov bx,7
|
||||
@@again:
|
||||
lodsb
|
||||
or al,al
|
||||
jz @@fin
|
||||
cmp al,32
|
||||
jb @@control
|
||||
mov ah,09h
|
||||
int 10h
|
||||
@@control:
|
||||
mov ah,0Eh
|
||||
int 10h
|
||||
jmp @@again
|
||||
@@fin:
|
||||
ret
|
||||
endp biosprint
|
||||
|
||||
PROC enablea20 FAR
|
||||
USES ax
|
||||
mov al,0d1h
|
||||
out 64h,al
|
||||
call a20wait
|
||||
mov al,0dfh
|
||||
out 60h,al
|
||||
call a20wait
|
||||
;mov al,0ffh
|
||||
;out 64h,al
|
||||
;call a20wait
|
||||
ret
|
||||
endp enablea20
|
||||
|
||||
PROC disablea20 FAR
|
||||
USES ax
|
||||
mov al,0d1h
|
||||
out 64h,al
|
||||
call a20wait
|
||||
mov al,0DDh
|
||||
out 60h,al
|
||||
call a20wait
|
||||
;mov al,0ffh
|
||||
;out 64h,al
|
||||
;call a20wait
|
||||
ret
|
||||
endp disablea20
|
||||
|
||||
a20wait:
|
||||
in al,64h
|
||||
jmp @@suite
|
||||
@@suite:
|
||||
and al,2
|
||||
jnz a20wait
|
||||
ret
|
||||
;par le system control port A
|
||||
;in al,92h
|
||||
;or al,2
|
||||
;out 92h,al
|
||||
|
||||
;par le system control port A
|
||||
;in al,92h
|
||||
;and al,not 2
|
||||
;out 92h,al
|
||||
|
||||
PROC flatmode FAR
|
||||
USES eax,bx,ds
|
||||
push cs
|
||||
pop ds
|
||||
; first, calculate the linear address of GDT
|
||||
xor eax,eax
|
||||
mov ax,ds
|
||||
shl eax,4
|
||||
add [dword ptr offset @@gdt+2],eax ; store as GDT linear base addr
|
||||
; now load the GDT into the GDTR
|
||||
lgdt [fword ptr offset @@gdt] ; load GDT base
|
||||
mov bx,1 * size descriptor ; point to first descriptor
|
||||
cli ; turn off interrupts
|
||||
mov eax,cr0 ; prepare to enter protected mode
|
||||
or al,1 ; flip the PE bit
|
||||
mov cr0,eax ; we're now in protected mode
|
||||
jmp @@suite
|
||||
@@suite:
|
||||
mov fs,bx ; load the FS segment register
|
||||
and al,0FEh ; clear the PE bit again
|
||||
mov cr0,eax ; back to real mode
|
||||
jmp @@suite2
|
||||
@@suite2:
|
||||
sti ; resume handling interrupts
|
||||
ret ;
|
||||
|
||||
@@gdt descriptor <offset @@gdtend - offset @@gdt - 1, offset @@gdt, 0, 0, 0, 0> ; the GDT itself
|
||||
descriptor <0ffffh, 0, 0, 091h, 0cfh, 0> ; 4G data segment
|
||||
@@gdtend:
|
||||
endp flatmode
|
||||
|
||||
;Attend l'appuie sur une touche
|
||||
PROC bioswaitkey FAR
|
||||
USES ax
|
||||
xor ax,ax
|
||||
int 16h
|
||||
ret
|
||||
endp bioswaitkey
|
||||
|
||||
firstmb dw 0
|
||||
|
||||
|
||||
;Charge les sections du block %0
|
||||
PROC mbloadsection FAR
|
||||
ARG @blocks:word
|
||||
USES ax,bx,cx,si,di,ds,es
|
||||
LOCAL @@toresov:word:60
|
||||
mov ax,[@blocks]
|
||||
mov es,ax
|
||||
mov ds,ax
|
||||
cmp [word ptr 0],"EC"
|
||||
jne @@notace
|
||||
lea si,[@@toresov]
|
||||
mov [word ptr ss:si],0FFFFh
|
||||
mov bx,[ds:exe.sections]
|
||||
cmp bx,0
|
||||
je @@finishloading
|
||||
@@loading:
|
||||
cmp [dword ptr bx],0
|
||||
je @@finishloading
|
||||
mov ax,bx
|
||||
add ax,4
|
||||
pushad
|
||||
call biosprint,ax
|
||||
popad
|
||||
call mbcreate,ax,[word ptr bx+2]
|
||||
jc @@error
|
||||
inc si
|
||||
inc si
|
||||
mov [ss:si],ax
|
||||
push si
|
||||
mov si,[bx]
|
||||
xor di,di
|
||||
mov es,ax
|
||||
mov cx,[bx+2]
|
||||
cld
|
||||
rep movsb
|
||||
pop si
|
||||
add bx,4
|
||||
@@gonext:
|
||||
inc bx
|
||||
cmp [byte ptr bx],0
|
||||
jne @@gonext
|
||||
inc bx
|
||||
jmp @@loading
|
||||
@@finishloading:
|
||||
cmp [word ptr ss:si],0FFFFh
|
||||
je @@finishdepands
|
||||
call mbloadfuncs,[word ptr ss:si]
|
||||
jc @@depandserror
|
||||
dec si
|
||||
dec si
|
||||
jmp @@finishloading
|
||||
@@finishdepands:
|
||||
ret
|
||||
@@notace:
|
||||
stc
|
||||
ret
|
||||
@@error:
|
||||
stc
|
||||
ret
|
||||
@@depandserror:
|
||||
stc
|
||||
ret
|
||||
endp mbloadsection
|
||||
|
||||
|
||||
;Initialise les blocs de mémoire en prenant memorystart pour segment de base
|
||||
PROC mbinit FAR
|
||||
USES ax,cx,si,di,ds,es
|
||||
cmp [cs:firstmb],0
|
||||
jne @@alreadyok
|
||||
push cs
|
||||
pop ds
|
||||
mov [cs:firstmb],memorystart
|
||||
mov ax,memorystart-2
|
||||
mov es,ax
|
||||
mov si,offset afree
|
||||
xor di,di
|
||||
mov cx,size mb
|
||||
rep movsb
|
||||
clc
|
||||
ret
|
||||
@@alreadyok:
|
||||
stc
|
||||
ret
|
||||
endp mbinit
|
||||
|
||||
afree mb <"HN",0,0,0,0A000h-memorystart,"Libre">
|
||||
db 0
|
||||
|
||||
;Creér un bloc de nom %0 de taille %1 (octets) -> n°segment dans AX
|
||||
PROC mbcreate FAR
|
||||
ARG @blocks:word,@size:word
|
||||
USES bx,cx,dx,si,di,ds,es
|
||||
push gs
|
||||
mov ax,[ss:bp+4]
|
||||
mov dx,ax
|
||||
dec dx
|
||||
dec dx
|
||||
mov gs,dx
|
||||
cmp [word ptr gs:0x0],'NH'
|
||||
je @@oktoset
|
||||
mov ax,memorystart
|
||||
@@oktoset:
|
||||
mov gs,ax
|
||||
mov cx,[@size]
|
||||
shr cx,4
|
||||
inc cx
|
||||
mov bx,[cs:firstmb]
|
||||
dec bx
|
||||
dec bx
|
||||
mov dl,true
|
||||
@@searchfree:
|
||||
cmp dl,false
|
||||
je @@notenougtmem
|
||||
mov es,bx
|
||||
cmp [word ptr es:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
cmp [es:mb.isnotlast],true
|
||||
sete dl
|
||||
cmp [es:mb.reference],free
|
||||
jne @@notsogood
|
||||
mov ax,[es:mb.sizes]
|
||||
cmp cx,ax
|
||||
ja @@notsogood
|
||||
mov [word ptr es:mb.check],"NH"
|
||||
mov [es:mb.isnotlast],true
|
||||
mov [es:mb.reference],gs
|
||||
mov [es:mb.isresident],false
|
||||
lea di,[es:mb.names]
|
||||
push cx
|
||||
mov cx,24/4
|
||||
mov si,[@blocks]
|
||||
cld
|
||||
rep movsd
|
||||
pop cx
|
||||
inc bx
|
||||
inc bx
|
||||
sub ax,cx
|
||||
cmp ax,0
|
||||
je @@nofree
|
||||
dec ax
|
||||
dec ax
|
||||
mov [es:mb.sizes],cx
|
||||
add cx,bx
|
||||
mov es,cx
|
||||
mov si,offset afree
|
||||
xor di,di
|
||||
mov cx,size mb
|
||||
push cs
|
||||
pop ds
|
||||
cld
|
||||
rep movsb
|
||||
mov [es:mb.isnotlast],dl
|
||||
mov [es:mb.sizes],ax
|
||||
@@nofree:
|
||||
mov ax,bx
|
||||
pop gs
|
||||
clc
|
||||
ret
|
||||
@@notsogood:
|
||||
inc bx
|
||||
inc bx
|
||||
add bx,[es:mb.sizes]
|
||||
jmp @@searchfree
|
||||
@@memoryerror:
|
||||
pop gs
|
||||
stc
|
||||
ret
|
||||
@@notenougtmem:
|
||||
pop gs
|
||||
stc
|
||||
ret
|
||||
endp mbcreate
|
||||
|
||||
;Libère le bloc de mémoire %0 et ses sous blocs
|
||||
PROC mbfree FAR
|
||||
ARG @blocks:word
|
||||
USES ax,bx,cx,si,di,ds,es
|
||||
mov bx,[@blocks]
|
||||
mov ax,bx
|
||||
dec bx
|
||||
dec bx
|
||||
mov es,bx
|
||||
cmp [word ptr es:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
cmp [es:mb.reference],free
|
||||
je @@wasfree
|
||||
cmp [es:mb.isresident],true
|
||||
je @@wasresident
|
||||
mov [es:mb.reference],free
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset @@isfree
|
||||
lea di,[es:mb.names]
|
||||
mov cx,6
|
||||
cld
|
||||
rep movsb
|
||||
mov bx,[cs:firstmb]
|
||||
dec bx
|
||||
dec bx
|
||||
@@searchtofree:
|
||||
mov es,bx
|
||||
cmp [word ptr es:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
inc bx
|
||||
inc bx
|
||||
add bx,[es:mb.sizes]
|
||||
cmp [es:mb.sizes],0
|
||||
je @@nottofree
|
||||
cmp ax,[es:mb.reference]
|
||||
jne @@nottofree
|
||||
mov [es:mb.isresident],false
|
||||
mov [es:mb.reference],free
|
||||
mov si,offset @@isfree
|
||||
lea di,[es:mb.names]
|
||||
mov cx,6
|
||||
cld
|
||||
rep movsb
|
||||
@@nottofree:
|
||||
cmp [es:mb.isnotlast],true
|
||||
je @@searchtofree
|
||||
call mbclean
|
||||
ret
|
||||
@@memoryerror:
|
||||
stc
|
||||
ret
|
||||
@@wasfree:
|
||||
stc
|
||||
ret
|
||||
@@wasresident:
|
||||
stc
|
||||
ret
|
||||
|
||||
@@isfree db "libre",0
|
||||
endp mbfree
|
||||
|
||||
;Mise a nivo de la mémoire (jonction de blocs libre)
|
||||
PROC mbclean FAR
|
||||
USES ax,bx,dx,es,gs
|
||||
mov bx,[cs:firstmb]
|
||||
dec bx
|
||||
dec bx
|
||||
xor ax,ax
|
||||
xor dx,dx
|
||||
@@searchfree:
|
||||
mov gs,bx
|
||||
cmp [word ptr gs:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
inc bx
|
||||
inc bx
|
||||
add bx,[gs:mb.sizes]
|
||||
cmp [word ptr gs:mb.sizes],0
|
||||
je @@notenougtmem
|
||||
cmp [gs:mb.reference],free
|
||||
jne @@notfree
|
||||
cmp ax,0
|
||||
je @@notmeetfree
|
||||
add dx,[gs:mb.sizes]
|
||||
mov [word ptr gs:mb.check],0
|
||||
mov [dword ptr gs:mb.names],0
|
||||
inc dx
|
||||
inc dx
|
||||
jmp @@nottrigered
|
||||
@@notmeetfree:
|
||||
xor dx,dx
|
||||
mov ax,gs
|
||||
jmp @@nottrigered
|
||||
@@notfree:
|
||||
cmp ax,0
|
||||
je @@nottrigered
|
||||
mov es,ax
|
||||
add [es:mb.sizes],dx
|
||||
xor ax,ax
|
||||
@@nottrigered:
|
||||
cmp [gs:mb.isnotlast],true
|
||||
je @@searchfree
|
||||
cmp ax,0
|
||||
je @@reallyfinish
|
||||
mov es,ax
|
||||
add [es:mb.sizes],dx
|
||||
mov [es:mb.isnotlast],false
|
||||
@@reallyfinish:
|
||||
clc
|
||||
ret
|
||||
@@notenougtmem:
|
||||
stc
|
||||
ret
|
||||
@@memoryerror:
|
||||
stc
|
||||
ret
|
||||
endp mbclean
|
||||
|
||||
;Rend le segment %0 résident
|
||||
PROC mbresident FAR
|
||||
ARG @blocks:word
|
||||
USES bx,es
|
||||
mov bx,[@blocks]
|
||||
dec bx
|
||||
dec bx
|
||||
mov es,bx
|
||||
cmp [word ptr es:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
mov [es:mb.isresident],true
|
||||
ret
|
||||
@@memoryerror:
|
||||
stc
|
||||
ret
|
||||
endp mbresident
|
||||
|
||||
;Rend le segment %0 non résident
|
||||
PROC mbnonresident FAR
|
||||
ARG @blocks:word
|
||||
USES bx,es
|
||||
mov bx,[@blocks]
|
||||
dec bx
|
||||
dec bx
|
||||
mov es,bx
|
||||
cmp [word ptr es:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
mov [es:mb.isresident],false
|
||||
ret
|
||||
@@memoryerror:
|
||||
stc
|
||||
ret
|
||||
endp mbnonresident
|
||||
|
||||
|
||||
;Change le proprietaire de %0 a %1
|
||||
PROC mbchown FAR
|
||||
ARG @blocks:word,@owner:word
|
||||
USES bx,dx,es
|
||||
mov bx,[@blocks]
|
||||
dec bx
|
||||
dec bx
|
||||
mov es,bx
|
||||
cmp [word ptr es:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
cmp [es:mb.reference],free
|
||||
je @@wasfree
|
||||
mov dx,[@owner]
|
||||
mov [es:mb.reference],dx
|
||||
ret
|
||||
@@memoryerror:
|
||||
stc
|
||||
ret
|
||||
@@wasfree:
|
||||
stc
|
||||
ret
|
||||
endp mbchown
|
||||
|
||||
;Alloue un bloc /data de CX caractere pour le process appelant -> ax
|
||||
PROC mballoc FAR
|
||||
ARG @size:word
|
||||
USES si,ds
|
||||
push cs
|
||||
pop ds
|
||||
call mbcreate,offset @@data,[@size]
|
||||
call mbchown,ax,[word ptr ss:bp+4]
|
||||
ret
|
||||
|
||||
@@data db '/data',0
|
||||
endp mballoc
|
||||
|
||||
;Renvoie en AX le MB n° %0 carry quand terminé
|
||||
PROC mbget FAR
|
||||
ARG @num:word
|
||||
USES bx,dx,es
|
||||
mov bx,[cs:firstmb]
|
||||
dec bx
|
||||
dec bx
|
||||
xor dx,dx
|
||||
@@searchfree:
|
||||
mov es,bx
|
||||
cmp [word ptr es:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
inc bx
|
||||
inc bx
|
||||
add bx,[es:mb.sizes]
|
||||
cmp [es:mb.sizes],0
|
||||
je @@memoryerror
|
||||
cmp dx,[@num]
|
||||
je @@foundmcb
|
||||
ja @@notfound
|
||||
inc dx
|
||||
cmp [es:mb.isnotlast],true
|
||||
je @@searchfree
|
||||
@@memoryerror:
|
||||
stc
|
||||
ret
|
||||
@@foundmcb:
|
||||
mov ax,es
|
||||
inc ax
|
||||
inc ax
|
||||
clc
|
||||
ret
|
||||
@@notfound:
|
||||
stc
|
||||
ret
|
||||
endp mbget
|
||||
|
||||
;Renvoie en AX le MCB qui correspond a ds:%0
|
||||
PROC mbfind FAR
|
||||
ARG @blocks:word
|
||||
USES bx,si,di,es
|
||||
mov bx,[cs:firstmb]
|
||||
dec bx
|
||||
dec bx
|
||||
mov si,[@blocks]
|
||||
@@search:
|
||||
mov es,bx
|
||||
lea di,[es:mb.names]
|
||||
cmp [word ptr es:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
inc bx
|
||||
inc bx
|
||||
add bx,[es:mb.sizes]
|
||||
cmp [es:mb.sizes],0
|
||||
je @@memoryerror
|
||||
push si di
|
||||
@@cmpnames:
|
||||
mov al,[es:di]
|
||||
cmp al,[ds:si]
|
||||
jne @@ok
|
||||
cmp al,0
|
||||
je @@ok
|
||||
inc si
|
||||
inc di
|
||||
jmp @@cmpnames
|
||||
@@ok:
|
||||
pop di si
|
||||
je @@foundmcb
|
||||
cmp [es:mb.isnotlast],true
|
||||
je @@search
|
||||
@@notfound:
|
||||
stc
|
||||
ret
|
||||
@@memoryerror:
|
||||
stc
|
||||
ret
|
||||
@@foundmcb:
|
||||
mov ax,es
|
||||
inc ax
|
||||
inc ax
|
||||
clc
|
||||
ret
|
||||
endp mbfind
|
||||
|
||||
|
||||
;Renvoie en AX le sous mcb qui correspond a %0 et qui appartien a %1
|
||||
PROC mbfindsb FAR
|
||||
ARG @blocks:word,@owner:word
|
||||
USES bx,dx,si,di,es
|
||||
mov bx,[cs:firstmb]
|
||||
dec bx
|
||||
dec bx
|
||||
mov si,[@blocks]
|
||||
lea di,[es:mb.names]
|
||||
mov dx,[@owner]
|
||||
@@search:
|
||||
mov es,bx
|
||||
cmp [word ptr es:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
inc bx
|
||||
inc bx
|
||||
add bx,[es:mb.sizes]
|
||||
cmp [es:mb.sizes],0
|
||||
je @@memoryerror
|
||||
push si di
|
||||
@@cmpnames:
|
||||
mov al,[es:di]
|
||||
cmp al,[ds:si]
|
||||
jne @@ok
|
||||
cmp al,0
|
||||
je @@ok
|
||||
inc si
|
||||
inc di
|
||||
jmp @@cmpnames
|
||||
@@ok:
|
||||
pop di si
|
||||
jne @@notfoundmcb
|
||||
cmp [es:mb.reference],dx
|
||||
je @@foundmcb
|
||||
@@notfoundmcb:
|
||||
cmp [es:mb.isnotlast],true
|
||||
je @@search
|
||||
@@notfound:
|
||||
stc
|
||||
ret
|
||||
@@foundmcb:
|
||||
mov ax,es
|
||||
inc ax
|
||||
inc ax
|
||||
clc
|
||||
ret
|
||||
@@memoryerror:
|
||||
stc
|
||||
ret
|
||||
endp mbfindsb
|
||||
|
||||
;Resouds les dépendances du bloc de mémoire %0
|
||||
PROC mbloadfuncs FAR
|
||||
ARG @blocks:word
|
||||
USES ax,bx,cx,dx,si,ds
|
||||
mov ds,[@blocks]
|
||||
cmp [word ptr 0],"EC"
|
||||
jne @@notace
|
||||
mov si,[ds:exe.imports]
|
||||
cmp si,0
|
||||
je @@endofloading
|
||||
@@loadfuncs:
|
||||
cmp [word ptr si],0
|
||||
je @@endofloading
|
||||
call mbsearchfunc,si
|
||||
jnc @@toendoftext
|
||||
mov bx,si
|
||||
;pushad
|
||||
;call biosprint,si
|
||||
;popad
|
||||
@@findend:
|
||||
inc bx
|
||||
cmp [byte ptr bx], ':'
|
||||
jne @@findend
|
||||
mov [byte ptr bx],0
|
||||
call [cs:projfile],si
|
||||
jc @@erroronload
|
||||
mov [byte ptr bx],':'
|
||||
;pushad
|
||||
;call biosprint,si
|
||||
;popad
|
||||
call mbsearchfunc,si
|
||||
jc @@libnotexist
|
||||
@@toendoftext:
|
||||
mov cl,[si]
|
||||
cmp cl,0
|
||||
je @@oktonext
|
||||
inc si
|
||||
jmp @@toendoftext
|
||||
@@oktonext:
|
||||
inc si
|
||||
mov [si],ax
|
||||
mov [si+2],dx
|
||||
add si,4
|
||||
jmp @@loadfuncs
|
||||
@@endofloading:
|
||||
clc
|
||||
ret
|
||||
@@notace:
|
||||
stc
|
||||
ret
|
||||
@@libnotexist:
|
||||
stc
|
||||
ret
|
||||
@@erroronload:
|
||||
stc
|
||||
ret
|
||||
endp mbloadfuncs
|
||||
|
||||
|
||||
;Recherche une fonction pointé par DS:%0 en mémoire et renvoie son adresse en DX:AX
|
||||
PROC mbsearchfunc FAR
|
||||
ARG @func:word
|
||||
USES bx,si,di,es
|
||||
mov bx,[@func]
|
||||
mov si,bx
|
||||
@@findend:
|
||||
inc bx
|
||||
cmp [byte ptr bx], ':'
|
||||
jne @@findend
|
||||
mov [byte ptr bx],0
|
||||
call mbfind,si
|
||||
mov [byte ptr bx],':'
|
||||
jc @@notfoundattallthesb
|
||||
mov es,ax
|
||||
cmp [word ptr es:exe.checks],"EC"
|
||||
jne @@notfoundattallthesb
|
||||
mov di,[es:exe.exports]
|
||||
inc bx
|
||||
inc bx
|
||||
@@functions:
|
||||
cmp [word ptr es:di],0
|
||||
je @@notfoundattallthesb
|
||||
mov si,bx
|
||||
@@cmpnamesfunc:
|
||||
mov al,[es:di]
|
||||
cmp al,[ds:si]
|
||||
jne @@notfoundthesb
|
||||
cmp al,0
|
||||
je @@seemsok
|
||||
inc si
|
||||
inc di
|
||||
jmp @@cmpnamesfunc
|
||||
@@notfoundthesb:
|
||||
mov al,[es:di]
|
||||
cmp al,0
|
||||
je @@oktonext
|
||||
inc di
|
||||
jmp @@notfoundthesb
|
||||
@@oktonext:
|
||||
inc di
|
||||
inc di
|
||||
inc di
|
||||
jmp @@functions
|
||||
@@seemsok:
|
||||
mov dx,es
|
||||
mov ax,[es:di+1]
|
||||
clc
|
||||
ret
|
||||
@@notfoundattallthesb:
|
||||
stc
|
||||
ret
|
||||
endp mbsearchfunc
|
|
@ -0,0 +1,699 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0h
|
||||
start:
|
||||
jmp tsr
|
||||
drv db 'LPT ',0
|
||||
Tsr:
|
||||
cli
|
||||
cmp ax,1234h
|
||||
jne nomore
|
||||
mov ax,4321h
|
||||
jmp itsok
|
||||
nomore:
|
||||
push bx ax
|
||||
mov ah,4
|
||||
mov bh,1
|
||||
int 50h
|
||||
mov bl,al
|
||||
pop ax
|
||||
cmp byte ptr cs:isact,1
|
||||
je nottest
|
||||
mov cs:isact,1
|
||||
cmp bl,80h
|
||||
jae react
|
||||
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:
|
||||
mov cs:isact,0
|
||||
sti
|
||||
iret
|
||||
nottest:
|
||||
pop bx
|
||||
jmp endofint
|
||||
current dw 0
|
||||
tables dw getlptin
|
||||
dw getlptout
|
||||
dw getlptinout
|
||||
dw setlptin
|
||||
dw setlptout
|
||||
dw setlptinout
|
||||
dw getlpt
|
||||
dw getfirstlpt
|
||||
dw setemettor
|
||||
dw setreceptor
|
||||
dw settimeout
|
||||
dw gettimeout
|
||||
dw receivelpt
|
||||
dw sendlpt
|
||||
dw receivelptblock
|
||||
dw sendlptblock
|
||||
dw receivecommand
|
||||
dw sendcommand
|
||||
|
||||
react:
|
||||
push ds es
|
||||
mov cs:isact,1
|
||||
pushad
|
||||
push cs
|
||||
pop ds
|
||||
push cs
|
||||
pop es
|
||||
cmp byte ptr never,1
|
||||
je oknever
|
||||
mov bl,[drv+3]
|
||||
sub bl,'0'
|
||||
xor bh,bh
|
||||
call getlpt
|
||||
dec bl
|
||||
shl bl,1
|
||||
mov al,7
|
||||
sub al,bl
|
||||
mov ah,40
|
||||
mov di,offset video
|
||||
int 47h
|
||||
push ax
|
||||
mov ah,01h
|
||||
int 50h
|
||||
mov ah,21
|
||||
mov cl,4
|
||||
int 47h
|
||||
sti
|
||||
mov al,0111b
|
||||
call setlptout
|
||||
call setreceptor
|
||||
call initlpt
|
||||
jc errorie
|
||||
mov cx,0
|
||||
mov ah,20
|
||||
mov bx,1012h
|
||||
mov si,offset initok
|
||||
int 47h
|
||||
cmp byte ptr always,1
|
||||
je yes
|
||||
mov ah,20
|
||||
mov bx,1010h
|
||||
mov si,offset mdd
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset drv
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov ah,20
|
||||
mov bx,1011h
|
||||
mov si,offset msg
|
||||
int 47h
|
||||
waitkey:
|
||||
mov ax,0
|
||||
int 16h
|
||||
cmp al,'n'
|
||||
je no
|
||||
cmp al,'N'
|
||||
je no
|
||||
cmp al,'Y'
|
||||
je yes
|
||||
cmp al,'y'
|
||||
je yes
|
||||
cmp al,'e'
|
||||
je nev
|
||||
cmp al,'E'
|
||||
je nev
|
||||
cmp al,'a'
|
||||
je alw
|
||||
cmp al,'A'
|
||||
je alw
|
||||
jmp waitkey
|
||||
yes:
|
||||
call receivecommand
|
||||
jc errortimeout
|
||||
no:
|
||||
mov al,0111b
|
||||
call setlptout
|
||||
cli
|
||||
mov ah,41
|
||||
mov si,offset video
|
||||
int 47h
|
||||
pop ax
|
||||
mov ah,00h
|
||||
int 50h
|
||||
mov ah,09h
|
||||
int 50h
|
||||
oknever:
|
||||
popad
|
||||
pop es ds
|
||||
mov cs:isact,0
|
||||
pop bx
|
||||
jmp endofint
|
||||
errorie:
|
||||
mov si,offset inits
|
||||
jmp show
|
||||
errortimeout:
|
||||
mov si,offset timeouts
|
||||
show:
|
||||
mov ah,20
|
||||
mov bx,1012h
|
||||
int 47h
|
||||
mov ax,0
|
||||
int 16h
|
||||
jmp no
|
||||
nev:
|
||||
mov byte ptr never,1
|
||||
jmp no
|
||||
alw:
|
||||
mov byte ptr always,1
|
||||
jmp yes
|
||||
initok db 'Initialisation is realised !',0
|
||||
inits db 'Error on initialisation',0
|
||||
timeouts db 'Connection lost or timeout complete !!',0
|
||||
mdd db 'Connection demand on ',0
|
||||
msg db 'Accept connection ? (Y)es (N)o n(E)ver (A)lways',0
|
||||
isact db 0
|
||||
always db 0
|
||||
never db 0
|
||||
|
||||
;envois une commande al
|
||||
sendcommand:
|
||||
push ax bx cx di
|
||||
mov bl,al
|
||||
xor bh,bh
|
||||
shl bx,1
|
||||
add bx,offset cmde
|
||||
call cs:[bx]
|
||||
pop di cx bx ax
|
||||
ret
|
||||
cmde dw nothing
|
||||
dw getram
|
||||
|
||||
;recupŠre la ram en ds:si de cx distant caractŠres en es:di local
|
||||
getram:
|
||||
push ax bx cx ds
|
||||
mov bx,offset command
|
||||
mov cs:[bx+2],ds
|
||||
mov cs:[bx],si
|
||||
mov cs:[bx+4],cx
|
||||
push cs
|
||||
pop ds
|
||||
mov si,bx
|
||||
mov cx,6
|
||||
call sendlptblock
|
||||
jc endofget
|
||||
call receivelptblock
|
||||
endofget:
|
||||
pop ds cx bx ax
|
||||
ret
|
||||
|
||||
;Re‡ois une commande et l'execute
|
||||
Receivecommand:
|
||||
push ax bx cx di ds es
|
||||
push cs
|
||||
pop es
|
||||
push cs
|
||||
pop ds
|
||||
mov di,offset command
|
||||
call receivelptblock
|
||||
jc endofno
|
||||
mov bl,al
|
||||
xor bh,bh
|
||||
shl bx,1
|
||||
add bx,offset cmd
|
||||
call cs:[bx]
|
||||
clc
|
||||
endofno:
|
||||
pop es ds di cx bx ax
|
||||
ret
|
||||
|
||||
command db 25 dup (0)
|
||||
cmd dw nothings
|
||||
dw sendram
|
||||
dw receiveram
|
||||
dw sendreg
|
||||
dw receivereg
|
||||
dw sendport
|
||||
dw receiveport
|
||||
dw letexecute
|
||||
nothings:
|
||||
ret
|
||||
|
||||
letexecute:
|
||||
push ds es fs gs
|
||||
pushad
|
||||
push cs
|
||||
push offset suite
|
||||
mov ax,es:[di+2]
|
||||
mov ds,ax
|
||||
mov es,ax
|
||||
mov fs,ax
|
||||
mov gs,ax
|
||||
push ax
|
||||
mov ax,es:[di]
|
||||
push ax
|
||||
DB 0CBh
|
||||
suite:
|
||||
popad
|
||||
pop gs fs es ds
|
||||
ret
|
||||
|
||||
Sendram:
|
||||
push ax cx si ds
|
||||
mov si,es:[di]
|
||||
mov ax,es:[di+2]
|
||||
mov ds,ax
|
||||
mov cx,es:[di+4]
|
||||
call sendlptblock
|
||||
pop ds si cx ax
|
||||
ret
|
||||
|
||||
receiveram:
|
||||
sendreg:
|
||||
receivereg:
|
||||
|
||||
sendport:
|
||||
push ax cx dx si
|
||||
mov dx,es:[di]
|
||||
in ax,dx
|
||||
mov cx,2
|
||||
mov si,offset tempblock
|
||||
mov ds:[si],ax
|
||||
call sendlptblock
|
||||
pop si dx cx ax
|
||||
ret
|
||||
|
||||
receiveport:
|
||||
push ax dx
|
||||
mov dx,es:[di]
|
||||
mov ax,es:[di+2]
|
||||
out dx,ax
|
||||
pop dx ax
|
||||
ret
|
||||
|
||||
tempblock db 25 dup (0)
|
||||
|
||||
;---------Segment Adress-----------
|
||||
Bios equ 040h
|
||||
;---------Offset Adress------------
|
||||
Lptadr equ 008h
|
||||
Timer equ 06Ch
|
||||
;---------Constant-----------------
|
||||
onesec equ 18
|
||||
tensec equ 182
|
||||
Ack equ 00
|
||||
Nack equ 0FFh
|
||||
maxtry equ 10
|
||||
|
||||
Initlpt:
|
||||
push ax ecx
|
||||
call StartTimer
|
||||
cmp cs:emettor,0
|
||||
je receptinit
|
||||
mov al,10000b
|
||||
call SetLptOut
|
||||
waitinit1:
|
||||
call EndTimer
|
||||
cmp cx,cs:timeout
|
||||
ja errorinit
|
||||
call getlptIn
|
||||
cmp al,00000b
|
||||
jnz waitinit1
|
||||
jmp endinit
|
||||
receptinit:
|
||||
call EndTimer
|
||||
cmp cx,cs:timeout
|
||||
ja errorinit
|
||||
call getlptIn
|
||||
cmp al,00000b
|
||||
jnz receptinit
|
||||
mov al,10000b
|
||||
call SetLptOut
|
||||
endinit:
|
||||
clc
|
||||
pop ecx ax
|
||||
ret
|
||||
errorinit:
|
||||
stc
|
||||
pop ecx ax
|
||||
ret
|
||||
|
||||
|
||||
;-Envoie DL (dh) JNE si problŠme JNC error timeout
|
||||
Sendlpt:
|
||||
push ax bx ecx
|
||||
call StartTimer
|
||||
mov dh,dl
|
||||
mov al,dl
|
||||
and al,0Fh
|
||||
call SetLptOut
|
||||
waitSend:
|
||||
call EndTimer
|
||||
cmp cx,cs:timeout
|
||||
ja errorsend
|
||||
call getlptIn
|
||||
bt ax,4
|
||||
jnc waitsend
|
||||
and al,0Fh
|
||||
mov bl,al
|
||||
call StartTimer ;/////
|
||||
mov al,dh
|
||||
shr al,4
|
||||
or al,10000b
|
||||
call SetLptOut
|
||||
waitSend2:
|
||||
call EndTimer
|
||||
cmp cx,cs:timeout
|
||||
ja errorsend
|
||||
call getlptIn
|
||||
bt ax,4
|
||||
jc waitsend2
|
||||
and al,0Fh
|
||||
shl al,4
|
||||
add bl,al
|
||||
cmp dl,bl
|
||||
pop ecx bx ax
|
||||
clc
|
||||
ret
|
||||
errorsend:
|
||||
pop ecx bx ax
|
||||
stc
|
||||
ret
|
||||
|
||||
|
||||
;-Re‡ois DL (dh)
|
||||
Receivelpt:
|
||||
push ax bx ecx
|
||||
call StartTimer
|
||||
waitreceive:
|
||||
call EndTimer
|
||||
cmp cx,cs:timeout
|
||||
ja errorreceive
|
||||
call getlptIn
|
||||
bt ax,4
|
||||
jnc waitreceive
|
||||
and al,0Fh
|
||||
mov dl,al
|
||||
call SetLptOut
|
||||
call StartTimer ;/////
|
||||
waitreceive2:
|
||||
call EndTimer
|
||||
cmp cx,cs:timeout
|
||||
ja errorreceive
|
||||
call getlptIn
|
||||
bt ax,4
|
||||
jc waitreceive2
|
||||
and al,0Fh
|
||||
mov dh,al
|
||||
shl dh,4
|
||||
add dl,dh
|
||||
or al,10000b
|
||||
call SetlptOut
|
||||
clc
|
||||
pop ecx bx ax
|
||||
ret
|
||||
errorreceive:
|
||||
stc
|
||||
pop ecx bx ax
|
||||
ret
|
||||
|
||||
;-AX
|
||||
SetTimeout:
|
||||
mov cs:Timeout,dx
|
||||
ret
|
||||
|
||||
timeout dw tensec
|
||||
|
||||
getTimeout:
|
||||
mov dx,cs:Timeout
|
||||
ret
|
||||
|
||||
SetEmettor:
|
||||
mov cs:Emettor,1
|
||||
ret
|
||||
|
||||
Emettor db 0
|
||||
|
||||
SetReceptor:
|
||||
mov cs:Emettor,0
|
||||
ret
|
||||
|
||||
;->bx Nøport->Adresse dx
|
||||
GetLpt:
|
||||
push ax bx ds
|
||||
mov ax,bios
|
||||
mov ds,ax
|
||||
dec bx
|
||||
shl bx,1
|
||||
mov dx,ds:[Lptadr+bx]
|
||||
mov cs:lpt,dx
|
||||
pop ds bx ax
|
||||
ret
|
||||
lpt dw 0
|
||||
|
||||
;->bx Nøport->Adresse dx
|
||||
GetFirstLpt:
|
||||
push ax ds
|
||||
mov ax,bios
|
||||
mov ds,ax
|
||||
xor bx,bx
|
||||
findlpt:
|
||||
mov dx,ds:[Lptadr+bx]
|
||||
cmp dx,0
|
||||
jne oklpt
|
||||
add bx,2
|
||||
cmp bx,4
|
||||
jbe findlpt
|
||||
oklpt:
|
||||
mov cs:lpt,dx
|
||||
pop ds ax
|
||||
ret
|
||||
|
||||
;->
|
||||
StartTimer:
|
||||
push ax ecx ds
|
||||
mov ax,Bios
|
||||
mov ds,ax
|
||||
mov ecx,ds:[timer]
|
||||
mov cs:times,ecx
|
||||
pop ds ecx ax
|
||||
ret
|
||||
times dd 0
|
||||
|
||||
;->Ecx time elapsed
|
||||
EndTimer:
|
||||
push ax ds
|
||||
mov ax,Bios
|
||||
mov ds,ax
|
||||
mov ecx,ds:[timer]
|
||||
sub ecx,cs:times
|
||||
pop ds ax
|
||||
ret
|
||||
|
||||
;->
|
||||
GetLptOut:
|
||||
push dx
|
||||
mov dx,cs:lpt
|
||||
in al,dx
|
||||
pop dx
|
||||
ret
|
||||
|
||||
GetLptIn:
|
||||
push dx
|
||||
mov dx,cs:lpt
|
||||
inc dx
|
||||
in al,dx
|
||||
shr al,3
|
||||
pop dx
|
||||
ret
|
||||
|
||||
GetLptInOut:
|
||||
push dx
|
||||
mov dx,cs:lpt
|
||||
add dx,2
|
||||
in al,dx
|
||||
and al,11111b
|
||||
pop dx
|
||||
ret
|
||||
|
||||
SetLptOut:
|
||||
push dx
|
||||
mov dx,cs:lpt
|
||||
out dx,al
|
||||
pop dx
|
||||
ret
|
||||
|
||||
SetLptIn:
|
||||
push dx
|
||||
mov dx,cs:lpt
|
||||
inc dx
|
||||
out dx,al
|
||||
pop dx
|
||||
ret
|
||||
|
||||
SetLptInOut:
|
||||
push dx
|
||||
mov dx,cs:lpt
|
||||
add dx,2
|
||||
out dx,al
|
||||
pop dx
|
||||
ret
|
||||
|
||||
;R‚alise un checksum 8 bits sur donn‚es DS:SI, nb CX r‚sultat dans dl
|
||||
Checksum8:
|
||||
push cx si
|
||||
check:
|
||||
add dl,[si]
|
||||
inc si
|
||||
dec cx
|
||||
jnz check
|
||||
pop si cx
|
||||
ret
|
||||
|
||||
;DS:SI pointeur sur donn‚es, CX nombres de donn‚es, AL token
|
||||
SendLptBlock:
|
||||
push ax bx cx edx si edi bp
|
||||
mov dx,cx
|
||||
shl edx,16
|
||||
mov dh,al
|
||||
call checksum8
|
||||
mov edi,edx
|
||||
xor dh,dh
|
||||
mov bp,dx
|
||||
mov ah,maxtry
|
||||
retry:
|
||||
mov bl,4
|
||||
xor al,al
|
||||
header:
|
||||
mov dx,di
|
||||
call sendlpt
|
||||
setne al
|
||||
jc outt
|
||||
rol edi,8
|
||||
dec bl
|
||||
jnz header
|
||||
cmp al,0
|
||||
jne notgood
|
||||
mov dl,ACK
|
||||
jmp allsend
|
||||
notgood:
|
||||
mov dl,NACK
|
||||
allsend:
|
||||
call sendlpt
|
||||
setne al
|
||||
jc outt
|
||||
cmp al,0
|
||||
je okheader
|
||||
dec ah
|
||||
jnz retry
|
||||
jmp outt
|
||||
okheader:
|
||||
cmp cx,0
|
||||
je endoftrans
|
||||
mov di,maxtry
|
||||
retry2:
|
||||
mov bx,cx
|
||||
xor ax,ax
|
||||
body:
|
||||
mov dl,[si+bx-1]
|
||||
add ah,dl
|
||||
call sendlpt
|
||||
setne al
|
||||
jc outt
|
||||
dec bx
|
||||
jnz body
|
||||
cmp al,0
|
||||
jne notgood2
|
||||
mov dl,ACK
|
||||
jmp allisend
|
||||
notgood2:
|
||||
mov dl,NACK
|
||||
allisend:
|
||||
call sendlpt
|
||||
setne al
|
||||
jc outt
|
||||
cmp al,0
|
||||
je endoftrans
|
||||
dec di
|
||||
jnz retry2
|
||||
outt:
|
||||
stc
|
||||
endoftrans:
|
||||
mov al,ah
|
||||
xor ah,ah
|
||||
cmp bp,ax
|
||||
pop bp edi si edx cx bx ax
|
||||
ret
|
||||
|
||||
;Receptionne en es:di les donn‚es au nombres de CX token AL (AH) (ECX)
|
||||
receiveLptBlock:
|
||||
push bx dx si bp
|
||||
mov ah,maxtry
|
||||
retrye:
|
||||
mov bl,4
|
||||
headere:
|
||||
call receivelpt
|
||||
jc outte
|
||||
mov cl,dl
|
||||
rol ecx,8
|
||||
dec bl
|
||||
jnz headere
|
||||
call receivelpt
|
||||
jc outte
|
||||
cmp dl,ACK
|
||||
je okheadere
|
||||
dec ah
|
||||
jnz retrye
|
||||
jmp outte
|
||||
okheadere:
|
||||
mov al,ch
|
||||
xor ch,ch
|
||||
mov bp,cx
|
||||
rol ecx,16
|
||||
cmp cx,0
|
||||
je endoftranse
|
||||
mov si,maxtry
|
||||
retrye2:
|
||||
mov bx,cx
|
||||
xor ah,ah
|
||||
bodye:
|
||||
call receivelpt
|
||||
jc outte
|
||||
mov es:[di+bx-1],dl
|
||||
add ah,dl
|
||||
dec bx
|
||||
jnz bodye
|
||||
call receivelpt
|
||||
jc outte
|
||||
cmp dl,ACK
|
||||
je endoftranse
|
||||
dec si
|
||||
jnz retrye2
|
||||
outte:
|
||||
stc
|
||||
endoftranse:
|
||||
mov bl,ah
|
||||
xor bh,bh
|
||||
cmp bp,bx
|
||||
pop bp si dx bx
|
||||
ret
|
||||
video db 0
|
||||
end start
|
|
@ -0,0 +1,327 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0h
|
||||
start:
|
||||
jmp tsr
|
||||
drv db 'MOUSE',0
|
||||
Tsr:
|
||||
cli
|
||||
cmp ax,1234h
|
||||
jne nomore
|
||||
mov ax,4321h
|
||||
jmp itsok
|
||||
nomore:
|
||||
push bx ax
|
||||
mov ah,4
|
||||
mov bh,0
|
||||
int 50h
|
||||
mov bl,al
|
||||
pop ax
|
||||
cmp byte ptr cs:isact,1
|
||||
je nottest
|
||||
mov cs:isact,1
|
||||
and bl,10000b
|
||||
cmp bl,16
|
||||
jae react
|
||||
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:
|
||||
mov cs:isact,0
|
||||
sti
|
||||
iret
|
||||
nottest:
|
||||
pop bx
|
||||
jmp endofint
|
||||
current dw 0
|
||||
tables dw cmdmouse
|
||||
dw cmdmouse2
|
||||
dw detectmouse
|
||||
dw getmouse
|
||||
dw getmousescreen
|
||||
dw configmouse
|
||||
|
||||
isact db 0
|
||||
|
||||
;Envoie une commande AL … la souris via controleur clavier
|
||||
cmdmouse:
|
||||
push ax
|
||||
videbuff1:
|
||||
in al, 64h
|
||||
and al, 10b
|
||||
jne videbuff1
|
||||
mov al, 00d4h
|
||||
out 64h, al
|
||||
videbuff2:
|
||||
in al, 64h
|
||||
and al, 10b
|
||||
jne videbuff2
|
||||
pop ax
|
||||
out 60h, al
|
||||
in al, 60h
|
||||
ret
|
||||
|
||||
;Envoie une commande2 AL … la souris via controleur clavier carry=nomouse
|
||||
cmdmouse2:
|
||||
push ax
|
||||
videbuff21:
|
||||
in al, 64h
|
||||
and al, 10b
|
||||
jne videbuff21
|
||||
mov al, 0060h
|
||||
out 64h, al
|
||||
videbuff22:
|
||||
in al, 64h
|
||||
and al, 10b
|
||||
jne videbuff22
|
||||
pop ax
|
||||
out 60h, al
|
||||
in al, 60h
|
||||
ret
|
||||
|
||||
Detectmouse:
|
||||
push ax cx
|
||||
mov al, 0a8h ;AUX enable
|
||||
out 64h, al
|
||||
mov al, 0f3h ;Set sample
|
||||
call cmdmouse
|
||||
mov al, 100 ;Set sample
|
||||
call cmdmouse
|
||||
mov al, 0e8h ;Set resolution
|
||||
call cmdmouse
|
||||
mov al, 01 ;Set resolution
|
||||
call cmdmouse
|
||||
mov al, 0e7h ;Set scale 2:1
|
||||
call cmdmouse
|
||||
mov al, 0f4h ;Enable device
|
||||
call cmdmouse
|
||||
mov al, 47h ;Interruption ON
|
||||
call cmdmouse2
|
||||
mov cx, 1024
|
||||
testmouse:
|
||||
in al, 60h ;Lecture du port de donn‚es
|
||||
cmp al, 250 ;Test si il y a une souris
|
||||
je okmouse
|
||||
dec cx
|
||||
jnz testmouse
|
||||
stc
|
||||
jmp endoftest
|
||||
okmouse:
|
||||
clc
|
||||
endoftest:
|
||||
pop cx ax
|
||||
ret
|
||||
|
||||
;envoie en bx,cx les coordonn‚es et en dl les boutons
|
||||
getmouse:
|
||||
mov bx,cs:rx
|
||||
mov cx,cs:ry
|
||||
mov dl,cs:button
|
||||
sub dl,8
|
||||
and dl,0Fh
|
||||
clc
|
||||
ret
|
||||
|
||||
;envoie en di les coordonn‚es ecran et en dl les boutons
|
||||
getmousescreen:
|
||||
mov di,cs:xy
|
||||
mov dl,cs:button
|
||||
sub dl,8
|
||||
and dl,0Fh
|
||||
clc
|
||||
ret
|
||||
|
||||
|
||||
;configure la rapidit‚ dans cl et dans ah,al sphŠre x et y
|
||||
Configmouse:
|
||||
mov cs:speed,cl
|
||||
mov cs:spherex,ah
|
||||
mov cs:spherey,al
|
||||
ret
|
||||
|
||||
Button db 0
|
||||
rx dw 0
|
||||
ry dw 0
|
||||
VX db 0
|
||||
VY db 0
|
||||
X dw 7FFFh
|
||||
Y dw 7FFFh
|
||||
speed db 6
|
||||
spherex db 0
|
||||
spherey db 0
|
||||
count db 0
|
||||
error db 0
|
||||
xy dw 0
|
||||
old db 0
|
||||
;Gestionnaire de souris PS/2
|
||||
react:
|
||||
push ax bx cx dx di ds es
|
||||
push cs
|
||||
pop ds
|
||||
in al, 60h
|
||||
cmp error, 1
|
||||
je gest1
|
||||
cmp count, 1
|
||||
je gest1
|
||||
cmp count, 2
|
||||
je gest2
|
||||
cmp count, 3
|
||||
je gest3
|
||||
|
||||
gest1:
|
||||
mov count, 2
|
||||
mov Button, al
|
||||
and al, 00001000b
|
||||
cmp al, 8
|
||||
je gest1end
|
||||
mov error, 1
|
||||
jmp gest1end2
|
||||
gest1end:
|
||||
mov error, 0
|
||||
gest1end2:
|
||||
mov count, 2
|
||||
jmp endgest
|
||||
gest2:
|
||||
mov count, 3
|
||||
mov VX, al
|
||||
jmp endgest
|
||||
gest3:
|
||||
mov count, 1
|
||||
mov VY, al
|
||||
jmp endgest
|
||||
endgest:
|
||||
cmp error,1
|
||||
je errormouse
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset infos
|
||||
mov ah,34
|
||||
int 47h
|
||||
mov cl,speed
|
||||
movsx bx,VY
|
||||
shl bx,cl
|
||||
cmp spherey,0
|
||||
jne nolimity
|
||||
xor ah,ah
|
||||
mov al,[di]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text4
|
||||
shl ax,3
|
||||
text4:
|
||||
dec ax
|
||||
cmp bx,0
|
||||
jg decy
|
||||
cmp ry,ax
|
||||
jae noaddy
|
||||
jmp nolimity
|
||||
decy:
|
||||
cmp ry,0
|
||||
je noaddy
|
||||
nolimity:
|
||||
sub y,bx
|
||||
noaddy:
|
||||
movsx bx,VX
|
||||
shl bx,cl
|
||||
cmp spherex,0
|
||||
jne nolimitx
|
||||
xor ah,ah
|
||||
mov al,[di+1]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text5
|
||||
shl ax,3
|
||||
text5:
|
||||
dec ax
|
||||
cmp bx,0
|
||||
jl decx
|
||||
cmp rx,ax
|
||||
jae noaddx
|
||||
jmp nolimitx
|
||||
decx:
|
||||
cmp rx,0
|
||||
je noaddx
|
||||
nolimitx:
|
||||
add x,bx
|
||||
noaddx:
|
||||
mov ax,x
|
||||
mov bx,0FFFFh
|
||||
xor ch,ch
|
||||
mov cl,[di+1]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text1
|
||||
shl cx,3
|
||||
text1:
|
||||
mul cx
|
||||
div bx
|
||||
mov rx,ax
|
||||
mov ax,y
|
||||
xor ch,ch
|
||||
mov cl,[di]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text2
|
||||
shl cx,3
|
||||
text2:
|
||||
mul cx
|
||||
div bx
|
||||
mov ry,ax
|
||||
xor ch,ch
|
||||
mov cl,[di+1]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text3
|
||||
shl cx,3
|
||||
text3:
|
||||
mul cx
|
||||
add ax,rx
|
||||
cmp byte ptr [di+7],4
|
||||
mov di,ax
|
||||
jbe textpoint
|
||||
mov ax,0A000h
|
||||
mov es,ax
|
||||
jmp graphpoint
|
||||
textpoint:
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
shl di,1
|
||||
inc di
|
||||
graphpoint:
|
||||
mov bx,xy
|
||||
cmp byte ptr es:[bx],070h
|
||||
jne waschanged
|
||||
mov al,old
|
||||
mov byte ptr es:[bx],al
|
||||
waschanged:
|
||||
mov xy,di
|
||||
mov al,es:[di]
|
||||
mov old,al
|
||||
mov byte ptr es:[di],070h
|
||||
mov al, 20h
|
||||
out 0a0h, al
|
||||
out 20h, al
|
||||
errormouse:
|
||||
pop es ds di dx cx bx ax
|
||||
mov cs:isact,0
|
||||
pop bx
|
||||
iret
|
||||
infos db 40 dup (0)
|
||||
|
||||
end start
|
|
@ -0,0 +1,297 @@
|
|||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
include "..\include\cpu.h"
|
||||
include "..\include\pci.h"
|
||||
include "..\include\fat.h"
|
||||
|
||||
memorystart equ 0052h ;premier bloc de la mémoire
|
||||
|
||||
org 0h
|
||||
|
||||
mb0:
|
||||
header exe <"CE",1,0,0,offset exports,offset imports,offset section,offset start>
|
||||
|
||||
start:
|
||||
push cs
|
||||
push cs
|
||||
push cs
|
||||
push cs
|
||||
pop ds
|
||||
pop es
|
||||
pop fs
|
||||
pop gs
|
||||
call biosprint,offset return
|
||||
call biosprint,offset msg_memory
|
||||
call biosprint,offset return
|
||||
call biosprint,offset msg_memory_init
|
||||
call mbinit
|
||||
jc error
|
||||
call biosprint,offset msg_ok
|
||||
call biosprint,offset msg_memory_section
|
||||
mov ax,cs
|
||||
call mbloadsection,ax
|
||||
jc error
|
||||
call biosprint,offset msg_ok
|
||||
call biosprint,offset msg_memory_jumps
|
||||
jmp [dword ptr cs:pointer]
|
||||
pointer:
|
||||
dw suite
|
||||
dw memorystart
|
||||
suite:
|
||||
push cs
|
||||
push cs
|
||||
push cs
|
||||
push cs
|
||||
pop ds
|
||||
pop es
|
||||
pop fs
|
||||
pop gs
|
||||
call biosprint,offset msg_ok
|
||||
call biosprint,offset msg_video_init
|
||||
call [cs:setvideomode],2
|
||||
jc error
|
||||
call [cs:clearscreen]
|
||||
call [cs:print],offset msg_memory
|
||||
call [cs:print],offset msg_ok2
|
||||
call [cs:print],offset msg_memory_init
|
||||
call [cs:print],offset msg_ok2
|
||||
call [cs:print],offset msg_memory_section
|
||||
call [cs:print],offset msg_ok2
|
||||
call [cs:print],offset msg_memory_jumps
|
||||
call [cs:print],offset msg_ok2
|
||||
call [cs:print],offset msg_video_init
|
||||
call [cs:print],offset msg_ok2
|
||||
call [cs:print],offset msg_handler
|
||||
;call installirqhandler
|
||||
call [cs:print],offset msg_ok2
|
||||
call [cs:print],offset msg_cpu_detect
|
||||
call [cs:cpuinfo],offset thecpu
|
||||
call [cs:setinfo],offset thecpu,offset temp
|
||||
call [cs:print],offset msg_ok2
|
||||
push offset temp
|
||||
xor eax,eax
|
||||
mov al,[thecpu.family]
|
||||
push eax
|
||||
mov al,[thecpu.models]
|
||||
push eax
|
||||
mov al,[thecpu.stepping]
|
||||
push eax
|
||||
push offset thecpu.names
|
||||
push offset thecpu.vendor
|
||||
call [cs:print],offset msg_cpu_detect_inf
|
||||
call [cs:print],offset msg_pci
|
||||
call [cs:pciinfo],offset thepci
|
||||
jc nopci
|
||||
call [cs:print],offset msg_ok2
|
||||
xor eax,eax
|
||||
mov al,[thepci.maxbus]
|
||||
push eax
|
||||
mov al,[thepci.version_minor]
|
||||
push eax
|
||||
mov al,[thepci.version_major]
|
||||
push eax
|
||||
call [cs:print],offset msg_pci_info
|
||||
call [cs:print],offset msg_pci_enum
|
||||
xor bx,bx
|
||||
xor cx,cx
|
||||
xor si,si
|
||||
searchpci:
|
||||
call [cs:getcardinfo],bx,cx,si,offset temp
|
||||
jc stopthis
|
||||
mov al,[(pcidata offset temp).subclass]
|
||||
push ax
|
||||
mov al,[(pcidata offset temp).class]
|
||||
push ax
|
||||
call [cs:getpcisubclass]
|
||||
push dx
|
||||
push ax
|
||||
mov al,[(pcidata offset temp).class]
|
||||
xor ah,ah
|
||||
push ax
|
||||
call [cs:getpciclass]
|
||||
push dx
|
||||
push ax
|
||||
push 4
|
||||
push esi
|
||||
push 4
|
||||
push ecx
|
||||
push 4
|
||||
push ebx
|
||||
mov ax,[(pcidata offset temp).device]
|
||||
push eax
|
||||
mov ax,[(pcidata offset temp).vendor]
|
||||
push eax
|
||||
call [cs:print],offset msg_pci_card
|
||||
inc si
|
||||
cmp si,7
|
||||
jbe searchpci
|
||||
stopthis:
|
||||
xor si,si
|
||||
inc cx
|
||||
cmp cx,31
|
||||
jbe searchpci
|
||||
xor cx,cx
|
||||
inc bx
|
||||
cmp bx,16
|
||||
jbe searchpci
|
||||
jmp next
|
||||
nopci:
|
||||
call [cs:print],offset msg_echec2
|
||||
next:
|
||||
call [cs:detectvmware]
|
||||
jne novirtual
|
||||
call [cs:print],offset msg_vmware
|
||||
novirtual:
|
||||
call [cs:print],offset msg_flat
|
||||
call enablea20
|
||||
call flatmode
|
||||
xor ax,ax
|
||||
mov fs,ax
|
||||
mov esi,0100000h
|
||||
mov [dword ptr fs:esi],"OKIN"
|
||||
call [cs:print],offset msg_ok2
|
||||
call [cs:print],offset msg_disk_init
|
||||
call [cs:initdrive]
|
||||
jc error2
|
||||
call [cs:print],offset msg_ok2
|
||||
call [cs:execfile],offset shell
|
||||
|
||||
error2:
|
||||
call [cs:print],offset msg_error2
|
||||
call bioswaitkey
|
||||
jmp far 0FFFFh:0000h
|
||||
|
||||
error:
|
||||
call biosprint,offset msg_error
|
||||
call bioswaitkey
|
||||
jmp far 0FFFFh:0000h
|
||||
|
||||
shell find <"COMMANDE.CE",0,0,0,1,>
|
||||
thepci pciinf <>
|
||||
thecpu cpu <>
|
||||
temp db 256 dup (0)
|
||||
return db 0dh,0ah,0
|
||||
msg_memory db "Initialisation de la memoire",0
|
||||
msg_memory_init db " -Creation du bloc primordial",0
|
||||
msg_memory_section db " -Developpement des sections",0
|
||||
msg_memory_jumps db "Redirection du systeme",0
|
||||
msg_video_init db "Initialisation du pilote VIDEO",0
|
||||
msg_handler db "Initialisation du gestionnaire d'interruption",0
|
||||
msg_cpu_detect db "Dectection du processeur",0
|
||||
msg_cpu_detect_inf db " -Fondeur : %0\l -Modele : %0\l -Revision : %u\l -Version : %u\l -Famille : %u\l -Technologies: %0\l",0
|
||||
msg_pci db "Detection des systemes PCI",0
|
||||
msg_pci_info db " -Version : %yB.%yB\l -Numero bus max: %u\l",0
|
||||
msg_pci_enum db " -Enumeration des peripheriques PCI:\l"
|
||||
db " |Vendeur|Modele|Bus |Dev.|Func|Classe.Sous-classe\l",0
|
||||
msg_pci_card db " | %hW | %hW |%w|%w|%w|%0P.%0P\l",0
|
||||
msg_vmware db "\c04 VMWare a ete detecte !!!\c07\l",0
|
||||
msg_flat db "Initialisation du Flat Real Mode\l",0
|
||||
msg_disk_init db "Initialisation du pilote DISQUE\l",0
|
||||
|
||||
|
||||
msg_error db " [Erreur]",0dh,0ah,"<Pressez une touche pour redemarrer le systeme>",0
|
||||
msg_ok db " [ Ok ]",0dh,0ah,0
|
||||
msg_error2 db "\h70 [\c04Erreur\c07]\g00,49<Pressez une touche pour redemarrer le systeme>",0
|
||||
msg_ok2 db "\h70 [\c02 Ok \c07]\l",0
|
||||
msg_echec2 db "\h70 [\c0CPasser\c07]\l",0
|
||||
|
||||
|
||||
exporting
|
||||
declare biosprinth
|
||||
declare biosprint
|
||||
declare mbinit
|
||||
declare mbcreate
|
||||
declare mbfree
|
||||
declare mbclean
|
||||
declare mbresident
|
||||
declare mbnonresident
|
||||
declare mbchown
|
||||
declare mballoc
|
||||
declare mbfind
|
||||
declare mbfindsb
|
||||
declare mbget
|
||||
declare mbloadfuncs
|
||||
declare mbsearchfunc
|
||||
declare bioswaitkey
|
||||
declare mbloadsection
|
||||
declare enableirq
|
||||
declare enableirq
|
||||
declare readimr
|
||||
declare readirr
|
||||
declare readisr
|
||||
declare seteoi
|
||||
declare enablea20
|
||||
declare disablea20
|
||||
declare flatmode
|
||||
declare installirqhandler
|
||||
declare irqhandler
|
||||
declare isenableirq
|
||||
declare isrequestirq
|
||||
declare isinserviceirq
|
||||
declare savecontext
|
||||
declare restorecontextg
|
||||
ende
|
||||
|
||||
|
||||
importing
|
||||
use VIDEO,setvideomode
|
||||
use VIDEO,clearscreen
|
||||
use VIDEO.LIB,print
|
||||
use DETECT.LIB,cpuinfo
|
||||
use DETECT.LIB,setinfo
|
||||
use DETECT.LIB,pciinfo
|
||||
use DETECT.LIB,getcardinfo
|
||||
use DETECT.LIB,getpcisubclass
|
||||
use DETECT.LIB,getpciclass
|
||||
use DETECT.LIB,detectvmware
|
||||
use DISQUE,initdrive
|
||||
use DISQUE,projfile
|
||||
use DISQUE,execfile
|
||||
endi
|
||||
|
||||
include "mcb.asm"
|
||||
include "8259a.asm"
|
||||
|
||||
section:
|
||||
dw offset mb0
|
||||
dw offset mb1-offset mb0
|
||||
db "SYSTEME",0
|
||||
|
||||
dw offset mb1
|
||||
dw offset mb2-offset mb1
|
||||
db "VIDEO",0
|
||||
|
||||
dw offset mb2
|
||||
dw offset mb3-offset mb2
|
||||
db "VIDEO.LIB",0
|
||||
|
||||
dw offset mb3
|
||||
dw offset mb4-offset mb3
|
||||
db "DETECT.LIB",0
|
||||
|
||||
dw offset mb4
|
||||
dw offset mb5-offset mb4
|
||||
db "DISQUE",0
|
||||
|
||||
dd 0
|
||||
|
||||
mb1:
|
||||
includebin "video.sys"
|
||||
mb2:
|
||||
includebin "..\lib\video.lib"
|
||||
mb3:
|
||||
includebin "..\lib\detect.lib"
|
||||
mb4:
|
||||
includebin "disque.sys"
|
||||
mb5:
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
mcb.sys(49)
|
||||
video.sys(47)
|
||||
horloge.sys(8)
|
||||
8259a.sys(50)
|
||||
disque.sys(48)
|
||||
souris.sys(74)
|
||||
heure.sys(8)
|
||||
clavier.sys(9)
|
||||
port.sys(D)
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue