feat: ajout de fonction permettant de gérer les interruptions, création d'une ligne de commande. Gestion de la souris.
This commit is contained in:
parent
163064bbb7
commit
6b08464f51
|
@ -0,0 +1,53 @@
|
||||||
|
.model tiny
|
||||||
|
.486
|
||||||
|
smart
|
||||||
|
.code
|
||||||
|
org 0100h
|
||||||
|
start:
|
||||||
|
jmp tsr
|
||||||
|
db '8253'
|
||||||
|
Tsr:
|
||||||
|
cli
|
||||||
|
cmp ax,1234h
|
||||||
|
jne nomore
|
||||||
|
mov ax,4321h
|
||||||
|
jmp itsok
|
||||||
|
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 readirr
|
||||||
|
dw readisr
|
||||||
|
dw installhandler
|
||||||
|
dw replacehandler
|
||||||
|
dw getint
|
||||||
|
dw setint
|
||||||
|
dw seteoi
|
||||||
|
|
2
asm.bat
2
asm.bat
|
@ -11,6 +11,8 @@ echo Copying file %1...
|
||||||
if "%1"=="video" goto video
|
if "%1"=="video" goto video
|
||||||
if "%1"=="lpt" goto system
|
if "%1"=="lpt" goto system
|
||||||
if "%1"=="keyboard" goto system
|
if "%1"=="keyboard" goto system
|
||||||
|
if "%1"=="mouse" goto system
|
||||||
|
if "%1"=="pic8259a" goto system
|
||||||
if "%1"=="timer" goto system
|
if "%1"=="timer" goto system
|
||||||
if "%1"=="drive" goto system
|
if "%1"=="drive" goto system
|
||||||
if "%1"=="system" goto system
|
if "%1"=="system" goto system
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
@echo off
|
||||||
|
call asm video
|
||||||
|
call asm system
|
||||||
|
call asm lpt
|
||||||
|
call asm keyboard
|
||||||
|
call asm pic8259a
|
||||||
|
call asm timer
|
||||||
|
call asm drive
|
||||||
|
call asm mouse
|
14
boot.asm
14
boot.asm
|
@ -8,17 +8,17 @@ start:
|
||||||
jmp boot
|
jmp boot
|
||||||
|
|
||||||
|
|
||||||
bootdb db 'COS2000A' ;ID Formatage
|
bootdb db 'COS2000A' ;Fabricant + n°série Formatage
|
||||||
sizec dw 512 ;octet/secteur
|
sizec dw 512 ;octet/secteur
|
||||||
db 1 ;secteur/cluster
|
db 1 ;secteur/cluster
|
||||||
reserv dw 1 ;secteur reserv‚
|
reserv dw 1 ;secteur reserv‚
|
||||||
nbfat db 1 ;nb de FAT
|
nbfat db 1 ;nb de copie de la FAT
|
||||||
nbfit dw 25 ;nb secteur rep racine
|
nbfit dw 25 ;taille rep racine
|
||||||
allclu dw 2880 ;nb secteur du volume
|
allclu dw 2880 ;nb secteur du volume si < 32 még
|
||||||
db 0F0h ;ID support
|
db 0F0h ;Descripteur de média
|
||||||
fatsize dw 12 ;secteur/FAT
|
fatsize dw 12 ;secteur/FAT
|
||||||
nbtrack dw 18 ;secteur/piste
|
nbtrack dw 18 ;secteur/piste
|
||||||
head dw 2 ;nb de tˆte
|
head dw 2 ;nb de tˆteb de lecture/écriture
|
||||||
hidden dd 0 ;nombre de secteur cach‚s
|
hidden dd 0 ;nombre de secteur cach‚s
|
||||||
dd 0 ;si nbsecteur = 0 nbsect ; the number of sectors
|
dd 0 ;si nbsecteur = 0 nbsect ; the number of sectors
|
||||||
bootdrv db 0 ;Lecteur de d‚marrage
|
bootdrv db 0 ;Lecteur de d‚marrage
|
||||||
|
@ -119,7 +119,7 @@ oksystem:
|
||||||
mov si,offset syst
|
mov si,offset syst
|
||||||
call showstr
|
call showstr
|
||||||
mov cx,[di+BX+26]
|
mov cx,[di+BX+26]
|
||||||
mov bx,1000h
|
mov bx,200h
|
||||||
mov es,bx
|
mov es,bx
|
||||||
push bx
|
push bx
|
||||||
mov bx,0100h
|
mov bx,0100h
|
||||||
|
|
164
drive.asm
164
drive.asm
|
@ -5,6 +5,7 @@ smart
|
||||||
|
|
||||||
org 0100h
|
org 0100h
|
||||||
|
|
||||||
|
|
||||||
start:
|
start:
|
||||||
jmp tsr
|
jmp tsr
|
||||||
db 'DRIVE'
|
db 'DRIVE'
|
||||||
|
@ -47,10 +48,12 @@ tables dw readsector
|
||||||
dw verifysector2
|
dw verifysector2
|
||||||
dw loadfatway
|
dw loadfatway
|
||||||
dw loadfile
|
dw loadfile
|
||||||
|
dw compressrle
|
||||||
|
dw decompressrle
|
||||||
|
|
||||||
;cx entr‚e -> fatway chemin
|
;cx entr‚e -> fatway chemin
|
||||||
getfatway:
|
getfatway:
|
||||||
push bx cx es
|
push bx cx
|
||||||
mov bx,offset fatway
|
mov bx,offset fatway
|
||||||
fatagain:
|
fatagain:
|
||||||
mov cs:[bx],cx
|
mov cs:[bx],cx
|
||||||
|
@ -60,48 +63,50 @@ jae finishload
|
||||||
call getfat
|
call getfat
|
||||||
jnc fatagain
|
jnc fatagain
|
||||||
finishload:
|
finishload:
|
||||||
pop es cx bx
|
pop cx bx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;Charge le fichier de chemin cx
|
;Charge le fichier de chemin cx -> taille dx
|
||||||
loadfatway:
|
loadfatway:
|
||||||
push ax bx cx di
|
push ax bx cx di
|
||||||
call getfatway
|
call getfatway
|
||||||
jc endload
|
jc endload
|
||||||
mov di,offset fatway
|
mov di,offset fatway
|
||||||
|
xor dx,dx
|
||||||
loadagain:
|
loadagain:
|
||||||
mov cx,cs:[di]
|
mov cx,cs:[di]
|
||||||
cmp cx,0FFF0h
|
cmp cx,0FFF0h
|
||||||
jae endload
|
jae endload
|
||||||
add di,2
|
add di,2
|
||||||
xor al,al
|
mov al,1
|
||||||
call readsector
|
call readsector
|
||||||
jc endload
|
jc endload
|
||||||
add bx,cs:sizec
|
add bx,cs:sizec
|
||||||
|
add dx,cs:sizec
|
||||||
jmp loadagain
|
jmp loadagain
|
||||||
endload:
|
endload:
|
||||||
pop di cx bx ax
|
pop di cx bx ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
sizec dw 512
|
|
||||||
reserv dw 1
|
|
||||||
|
|
||||||
;<-cx nøsecteur ->cx code FAT
|
;<-cx nøsecteur ->cx code FAT
|
||||||
getfat:
|
getfat:
|
||||||
push es ax bx dx
|
push es ax bx dx
|
||||||
mov ax,cx
|
push cs
|
||||||
xor dx,dx
|
pop ds
|
||||||
div cs:sizec
|
|
||||||
mov cx,ax
|
|
||||||
add cx,cs:reserv
|
|
||||||
mov bx,offset buffer
|
|
||||||
push cs
|
push cs
|
||||||
pop es
|
pop es
|
||||||
|
mov ax,cx
|
||||||
|
xor dx,dx
|
||||||
|
div sizec
|
||||||
|
mov cx,ax
|
||||||
|
add cx,reserv
|
||||||
|
mov bx,offset buffer
|
||||||
call readsector
|
call readsector
|
||||||
jc errorgetfat
|
jc errorgetfat
|
||||||
shl dx,1
|
shl dx,1
|
||||||
add bx,dx
|
add bx,dx
|
||||||
mov cx,cs:[bx]
|
mov cx,[bx]
|
||||||
errorgetfat:
|
errorgetfat:
|
||||||
pop dx bx ax es
|
pop dx bx ax es
|
||||||
ret
|
ret
|
||||||
|
@ -140,7 +145,7 @@ TryAgain:
|
||||||
jnc Done
|
jnc Done
|
||||||
dec SI
|
dec SI
|
||||||
jnz TryAgain
|
jnz TryAgain
|
||||||
mov word ptr cs:lastread,0ffffh
|
mov word ptr cs:lastread,0ffffh
|
||||||
Done:
|
Done:
|
||||||
pop si dx cx ax
|
pop si dx cx ax
|
||||||
ret
|
ret
|
||||||
|
@ -229,13 +234,16 @@ or byte ptr [bp+6],10b
|
||||||
nook:
|
nook:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;Charge le fichier Ds:si en es:di
|
;Charge le fichier Ds:si en es:di taille-> cx
|
||||||
loadfile:
|
loadfile:
|
||||||
push bx cx
|
push bx
|
||||||
call searchfile
|
call searchfile
|
||||||
|
jc errorloadfile
|
||||||
mov bx,di
|
mov bx,di
|
||||||
call loadfatway
|
call loadfatway
|
||||||
pop cx bx
|
mov cx,dx
|
||||||
|
errorloadfile:
|
||||||
|
pop bx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;Recherche le fichier et retourne sont path et en cx sont debut
|
;Recherche le fichier et retourne sont path et en cx sont debut
|
||||||
|
@ -243,13 +251,15 @@ Searchfile:
|
||||||
push bx dx si di ds es
|
push bx dx si di ds es
|
||||||
push cs
|
push cs
|
||||||
pop es
|
pop es
|
||||||
|
xor dx,dx
|
||||||
mov di,offset temp
|
mov di,offset temp
|
||||||
call asciiztofit
|
call asciiztofit
|
||||||
mov bx,offset buffer
|
|
||||||
push cs
|
push cs
|
||||||
pop ds
|
pop ds
|
||||||
mov cx,13
|
mov cx,13
|
||||||
check:
|
check:
|
||||||
|
mov al,1
|
||||||
|
mov bx,offset buffer
|
||||||
call readsector
|
call readsector
|
||||||
jc errorboot
|
jc errorboot
|
||||||
xor di,di
|
xor di,di
|
||||||
|
@ -261,6 +271,7 @@ mov si,di
|
||||||
add si,bx
|
add si,bx
|
||||||
mov di,offset temp
|
mov di,offset temp
|
||||||
mov cx,12+4
|
mov cx,12+4
|
||||||
|
cld
|
||||||
rep cmpsb
|
rep cmpsb
|
||||||
pop cx di si
|
pop cx di si
|
||||||
je oksystem
|
je oksystem
|
||||||
|
@ -274,7 +285,11 @@ inc cx
|
||||||
jmp Check
|
jmp Check
|
||||||
oksystem:
|
oksystem:
|
||||||
mov cx,[di+BX+26]
|
mov cx,[di+BX+26]
|
||||||
|
cld
|
||||||
|
jmp goodboot
|
||||||
errorboot:
|
errorboot:
|
||||||
|
stc
|
||||||
|
goodboot:
|
||||||
pop es ds di si dx bx
|
pop es ds di si dx bx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
@ -345,15 +360,15 @@ isSystchar:
|
||||||
push di
|
push di
|
||||||
mov di,offset exeptchar
|
mov di,offset exeptchar
|
||||||
isexcept:
|
isexcept:
|
||||||
cmp al,[di]
|
cmp al,cs:[di]
|
||||||
je nogood
|
je nogood
|
||||||
inc di
|
inc di
|
||||||
cmp byte ptr [di],0
|
cmp byte ptr cs:[di],0
|
||||||
jne isexcept
|
jne isexcept
|
||||||
endanal:
|
endanal:
|
||||||
|
clc
|
||||||
pop di
|
pop di
|
||||||
ret
|
ret
|
||||||
exeptchar db '/\<>:|.',01,0,0
|
|
||||||
nogood:
|
nogood:
|
||||||
stc
|
stc
|
||||||
jmp endanal
|
jmp endanal
|
||||||
|
@ -380,19 +395,110 @@ clc
|
||||||
pop ax cx di si
|
pop ax cx di si
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
;decompress ds:si en es:di taille bp d‚compress‚ cx compress‚
|
||||||
|
DecompressRle:
|
||||||
|
push cx dx si di
|
||||||
|
mov dx,cx
|
||||||
|
mov bp,di
|
||||||
|
decompression:
|
||||||
|
mov eax,[si]
|
||||||
|
cmp al,'/'
|
||||||
|
jne nocomp
|
||||||
|
cmp si,07FFFh-6
|
||||||
|
jae thenen
|
||||||
|
mov ecx,eax
|
||||||
|
ror ecx,16
|
||||||
|
cmp cl,'*'
|
||||||
|
jne nocomp
|
||||||
|
cmp byte ptr [si+4],'/'
|
||||||
|
jne nocomp
|
||||||
|
mov al,ch
|
||||||
|
mov cl,ah
|
||||||
|
xor ah,ah
|
||||||
|
xor ch,ch
|
||||||
|
rep stosb
|
||||||
|
add si,5
|
||||||
|
sub dx,5
|
||||||
|
jnz decompression
|
||||||
|
jmp thenen
|
||||||
|
nocomp:
|
||||||
|
mov es:[di],al
|
||||||
|
inc si
|
||||||
|
inc di
|
||||||
|
dec dx
|
||||||
|
jnz decompression
|
||||||
|
thenen:
|
||||||
|
mov ax,dx
|
||||||
|
sub bp,di
|
||||||
|
neg bp
|
||||||
|
pop di si dx cx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;compress ds:si en es:di taille cx d‚compress‚ BP compress‚
|
||||||
|
CompressRle:
|
||||||
|
push ax bx cx dx si di ds es
|
||||||
|
mov bp,di
|
||||||
|
xchg si,di
|
||||||
|
push es
|
||||||
|
push ds
|
||||||
|
pop es
|
||||||
|
pop ds
|
||||||
|
mov dx,cx
|
||||||
|
;mov bp,cx
|
||||||
|
againcomp:
|
||||||
|
mov bx,di
|
||||||
|
mov al,es:[di]
|
||||||
|
mov cx,dx
|
||||||
|
cmp ch,0
|
||||||
|
je poo
|
||||||
|
mov cl,0ffh
|
||||||
|
;mov cx,bp
|
||||||
|
;sub cx,di
|
||||||
|
;mov ah,cl
|
||||||
|
poo:
|
||||||
|
mov ah,cl
|
||||||
|
inc di
|
||||||
|
xor ch,ch
|
||||||
|
repe scasb
|
||||||
|
sub cl,ah
|
||||||
|
neg cl
|
||||||
|
cmp cl,6
|
||||||
|
jbe nocomp2
|
||||||
|
mov dword ptr [si],' * /'
|
||||||
|
mov byte ptr [si+4],'/'
|
||||||
|
mov [si+1],cl
|
||||||
|
mov [si+3],al
|
||||||
|
add si,5
|
||||||
|
dec di
|
||||||
|
xor ch,ch
|
||||||
|
sub dx,cx
|
||||||
|
jnz againcomp
|
||||||
|
jmp fini
|
||||||
|
nocomp2:
|
||||||
|
mov [si],al
|
||||||
|
inc si
|
||||||
|
inc bx
|
||||||
|
mov di,bx
|
||||||
|
dec dx
|
||||||
|
jnz againcomp
|
||||||
|
fini:
|
||||||
|
sub bp,si
|
||||||
|
neg bp
|
||||||
|
pop es ds di si dx cx bx ax
|
||||||
|
ret
|
||||||
|
|
||||||
nbfit equ 255
|
nbfit equ 255
|
||||||
namesize equ 12
|
namesize equ 12
|
||||||
extsize equ 5
|
extsize equ 5
|
||||||
|
exeptchar db '/\<>:|.',01,0,0
|
||||||
|
temp db 12+5+1+90 dup (0)
|
||||||
temp db 12+5+1 dup (0)
|
|
||||||
|
|
||||||
DiskSectorsPerTrack dw 18
|
DiskSectorsPerTrack dw 18
|
||||||
DiskTracksPerHead dw 80
|
DiskTracksPerHead dw 80
|
||||||
DiskHeads dw 2
|
DiskHeads dw 2
|
||||||
|
sizec dw 512
|
||||||
fatway equ $
|
reserv dw 1
|
||||||
|
buffer equ $
|
||||||
buffer equ $+3000
|
|
||||||
buffer2 equ $+512
|
buffer2 equ $+512
|
||||||
|
fatway equ $+512
|
||||||
|
|
||||||
end start
|
end start
|
||||||
|
|
77
editor.asm
77
editor.asm
|
@ -367,83 +367,6 @@ pope db 'VUE ',0
|
||||||
spaces db ' ³ ',0
|
spaces db ' ³ ',0
|
||||||
|
|
||||||
showbuffer db 35 dup (0FFh)
|
showbuffer db 35 dup (0FFh)
|
||||||
Lastread dw 0FFFFh
|
|
||||||
|
|
||||||
ReadSector:
|
|
||||||
push ax cx dx si
|
|
||||||
cmp cx,cs:lastread
|
|
||||||
je done
|
|
||||||
mov cs:LastRead,cx
|
|
||||||
mov AX, CX
|
|
||||||
xor DX, DX
|
|
||||||
div cs:DiskSectorsPerTrack
|
|
||||||
mov CL, DL ;{ Set the sector }
|
|
||||||
and CL, 63 ;{ Top two bits are bits 8&9 of the cylinder }
|
|
||||||
xor DX, DX
|
|
||||||
div cs:DiskTracksPerHead
|
|
||||||
mov CH, DL ;{ Set the track bits 0-7 }
|
|
||||||
mov AL, DH
|
|
||||||
ror AL, 1
|
|
||||||
ror AL, 1
|
|
||||||
and AL, 11000000b
|
|
||||||
or CL, AL ;{ Set bits 8&9 of track }
|
|
||||||
xor dX, DX
|
|
||||||
div cs:DiskHeads
|
|
||||||
mov DH, DL ;{ Set the head }
|
|
||||||
inc CL
|
|
||||||
mov SI, 4
|
|
||||||
TryAgain:
|
|
||||||
mov AL, 1
|
|
||||||
mov DL, 0
|
|
||||||
mov AH, 2
|
|
||||||
int 13h
|
|
||||||
jnc Done
|
|
||||||
dec SI
|
|
||||||
jnz TryAgain
|
|
||||||
mov word ptr cs:lastread,0ffffh
|
|
||||||
Done:
|
|
||||||
pop si dx cx ax
|
|
||||||
ret
|
|
||||||
|
|
||||||
WriteSector:
|
|
||||||
push ax cx dx si
|
|
||||||
cmp cs:Lastread,cx
|
|
||||||
jne nodestruct
|
|
||||||
mov cs:Lastread,0ffffh
|
|
||||||
nodestruct:
|
|
||||||
mov AX, CX
|
|
||||||
xor DX, DX
|
|
||||||
div cs:DiskSectorsPerTrack
|
|
||||||
mov CL, DL ;{ Set the sector }
|
|
||||||
and CL, 63 ;{ Top two bits are bits 8&9 of the cylinder }
|
|
||||||
xor DX, DX
|
|
||||||
div cs:DiskTracksPerHead
|
|
||||||
mov CH, DL ;{ Set the track bits 0-7 }
|
|
||||||
mov AL, DH
|
|
||||||
ror AL, 1
|
|
||||||
ror AL, 1
|
|
||||||
and AL, 11000000b
|
|
||||||
or CL, AL ;{ Set bits 8&9 of track }
|
|
||||||
xor DX, DX
|
|
||||||
div cs:DiskHeads
|
|
||||||
mov DH, DL ;{ Set the head }
|
|
||||||
inc CL
|
|
||||||
mov SI, 4
|
|
||||||
TryAgain2:
|
|
||||||
mov AL, 1
|
|
||||||
mov DL, 0
|
|
||||||
mov AH, 3
|
|
||||||
int 13h
|
|
||||||
jnc Done2
|
|
||||||
dec SI
|
|
||||||
jnz TryAgain2
|
|
||||||
Done2:
|
|
||||||
pop si dx cx ax
|
|
||||||
ret
|
|
||||||
|
|
||||||
DiskSectorsPerTrack dw 18
|
|
||||||
DiskTracksPerHead dw 80
|
|
||||||
DiskHeads dw 2
|
|
||||||
oldmode db 0
|
oldmode db 0
|
||||||
infos db 10 dup (0)
|
infos db 10 dup (0)
|
||||||
end start
|
end start
|
||||||
|
|
111
keyboard.asm
111
keyboard.asm
|
@ -15,18 +15,28 @@ tsr:
|
||||||
db 2eh,0ffh,1eh
|
db 2eh,0ffh,1eh
|
||||||
dw offsets
|
dw offsets
|
||||||
cli
|
cli
|
||||||
pusha
|
mov cs:feax,eax
|
||||||
in al,60h
|
in al,60h
|
||||||
cmp cs:isstate,1
|
cmp cs:isstate,1
|
||||||
jne nostate
|
jne nostate
|
||||||
cmp al,57
|
cmp al,57
|
||||||
jne nof12
|
jne endof
|
||||||
mov cs:isstate,0
|
mov cs:isstate,0
|
||||||
jmp noF12
|
jmp endof
|
||||||
nostate:
|
nostate:
|
||||||
cmp al,87
|
cmp al,87
|
||||||
jne NoF11
|
je F11
|
||||||
push es
|
cmp al,88
|
||||||
|
je F12
|
||||||
|
endof:
|
||||||
|
mov eax,cs:feax
|
||||||
|
sti
|
||||||
|
iret
|
||||||
|
isstate db 0
|
||||||
|
infos db 10 dup (0)
|
||||||
|
|
||||||
|
F11:
|
||||||
|
push ax di es
|
||||||
push cs
|
push cs
|
||||||
pop es
|
pop es
|
||||||
mov di,offset infos
|
mov di,offset infos
|
||||||
|
@ -36,42 +46,40 @@ tsr:
|
||||||
inc al
|
inc al
|
||||||
and ax,111b
|
and ax,111b
|
||||||
int 47h
|
int 47h
|
||||||
pop es
|
pop es di ax
|
||||||
nof11:
|
jmp endof
|
||||||
cmp al,88
|
|
||||||
jne NoF12
|
|
||||||
mov ah,26
|
|
||||||
int 47h
|
|
||||||
call showstate
|
|
||||||
mov cs:isstate,1
|
|
||||||
sti
|
|
||||||
waitt:
|
|
||||||
cmp cs:isstate,0
|
|
||||||
jne waitt
|
|
||||||
mov ah,27
|
|
||||||
int 47h
|
|
||||||
noF12:
|
|
||||||
popa
|
|
||||||
sti
|
|
||||||
iret
|
|
||||||
isstate db 0
|
|
||||||
infos db 10 dup (0)
|
|
||||||
|
|
||||||
showstate:
|
|
||||||
|
f12:
|
||||||
|
mov cs:isstate,1
|
||||||
|
pop word ptr cs:fip
|
||||||
|
pop word ptr cs:fcs
|
||||||
|
pop dword ptr cs:ffl
|
||||||
|
mov cs:fesp,esp
|
||||||
push ds es
|
push ds es
|
||||||
push ss
|
pusha
|
||||||
|
push word ptr cs:fip
|
||||||
push gs
|
push gs
|
||||||
push fs
|
push fs
|
||||||
|
push ss
|
||||||
push es
|
push es
|
||||||
push ds
|
push ds
|
||||||
push cs
|
push word ptr cs:fcs
|
||||||
pushad
|
push dword ptr cs:fesp
|
||||||
pushfd
|
push ebp
|
||||||
|
push edi
|
||||||
|
push esi
|
||||||
|
push edx
|
||||||
|
push ecx
|
||||||
|
push ebx
|
||||||
|
push eax
|
||||||
|
push dword ptr cs:ffl
|
||||||
push cs
|
push cs
|
||||||
push cs
|
push cs
|
||||||
pop es
|
pop es
|
||||||
pop ds
|
pop ds
|
||||||
|
mov ah,26
|
||||||
|
int 47h
|
||||||
mov ah,2
|
mov ah,2
|
||||||
int 47h
|
int 47h
|
||||||
mov ah,21
|
mov ah,21
|
||||||
|
@ -97,16 +105,17 @@ tsr:
|
||||||
mov ah,10
|
mov ah,10
|
||||||
int 47h
|
int 47h
|
||||||
mov si,offset regs
|
mov si,offset regs
|
||||||
mov bx,8+6
|
mov bx,8+7
|
||||||
mov ah,21
|
mov ah,21
|
||||||
mov cl,6
|
mov cl,6
|
||||||
int 47h
|
int 47h
|
||||||
showallREG:
|
showallREG:
|
||||||
mov ah,6
|
mov ah,6
|
||||||
int 47h
|
int 47h
|
||||||
cmp bx,7
|
cmp bx,8
|
||||||
jb nodr
|
jb nodr
|
||||||
pop edx
|
pop edx
|
||||||
|
mov cx,32
|
||||||
jmp popo
|
jmp popo
|
||||||
nodr:
|
nodr:
|
||||||
mov ah,21
|
mov ah,21
|
||||||
|
@ -114,11 +123,11 @@ showallREG:
|
||||||
int 47h
|
int 47h
|
||||||
xor edx,edx
|
xor edx,edx
|
||||||
pop dx
|
pop dx
|
||||||
|
mov cx,16
|
||||||
popo:
|
popo:
|
||||||
mov ah,13
|
mov ah,13
|
||||||
int 47h
|
int 47h
|
||||||
mov ah,10
|
mov ah,10
|
||||||
mov cx,32
|
|
||||||
int 47h
|
int 47h
|
||||||
mov ah,5
|
mov ah,5
|
||||||
int 47h
|
int 47h
|
||||||
|
@ -154,26 +163,42 @@ showallREG:
|
||||||
mov cl,116
|
mov cl,116
|
||||||
int 47h
|
int 47h
|
||||||
pop es ds
|
pop es ds
|
||||||
ret
|
sti
|
||||||
|
waitt:
|
||||||
|
cmp cs:isstate,0
|
||||||
|
jne waitt
|
||||||
|
mov ah,27
|
||||||
|
int 47h
|
||||||
|
popa
|
||||||
|
pop es ds
|
||||||
|
push dword ptr cs:ffl
|
||||||
|
push word ptr cs:fcs
|
||||||
|
push word ptr cs:fip
|
||||||
|
jmp endof
|
||||||
|
|
||||||
reg db 'State of registers',0
|
reg db ' State of registers',0
|
||||||
fla db 'Flags:',0
|
fla db 'Eflags:',0
|
||||||
regs db 'EDI:',0
|
regs db 'EAX:',0
|
||||||
|
db 'EBX:',0
|
||||||
|
db 'ECX:',0
|
||||||
|
db 'EDX:',0
|
||||||
db 'ESI:',0
|
db 'ESI:',0
|
||||||
|
db 'EDI:',0
|
||||||
db 'EBP:',0
|
db 'EBP:',0
|
||||||
db 'ESP:',0
|
db 'ESP:',0
|
||||||
db 'EBX:',0
|
|
||||||
db 'EDX:',0
|
|
||||||
db 'ECX:',0
|
|
||||||
db 'EAX:',0
|
|
||||||
db ' CS:',0
|
db ' CS:',0
|
||||||
db ' DS:',0
|
db ' DS:',0
|
||||||
db ' ES:',0
|
db ' ES:',0
|
||||||
db ' FS:',0
|
db ' FS:',0
|
||||||
db ' GS:',0
|
db ' GS:',0
|
||||||
db ' SS:',0
|
db ' SS:',0
|
||||||
|
db ' IP:',0
|
||||||
gr db '(',0
|
gr db '(',0
|
||||||
dr db ')',0
|
dr db ')',0
|
||||||
app db 'Press space to quit...',0
|
app db 'Press space to quit...',0
|
||||||
|
ffl dd 0
|
||||||
|
fcs dw 0
|
||||||
|
fip dw 0
|
||||||
|
fesp dd 0
|
||||||
|
feax dd 0
|
||||||
end start
|
end start
|
||||||
|
|
152
logo.asm
152
logo.asm
|
@ -17,146 +17,28 @@ mov bx,5000h
|
||||||
mov es,bx
|
mov es,bx
|
||||||
xor si,si
|
xor si,si
|
||||||
xor di,di
|
xor di,di
|
||||||
xor bx,bx
|
mov ah,6
|
||||||
call DecompressRle
|
int 48h
|
||||||
push es
|
push es
|
||||||
pop ds
|
pop ds
|
||||||
call loadbmp
|
mov ax,0006h
|
||||||
xor ax,ax
|
int 47h
|
||||||
|
mov ah,38
|
||||||
|
int 47h
|
||||||
|
mov ah,35
|
||||||
|
int 47h
|
||||||
|
mov ah,37
|
||||||
|
int 47h
|
||||||
|
xor cx,cx
|
||||||
xor bx,bx
|
xor bx,bx
|
||||||
call showbmp
|
mov ah,36
|
||||||
|
int 47h
|
||||||
mov ax,0
|
mov ax,0
|
||||||
int 16h
|
int 16h
|
||||||
db 0CBH
|
mov ah,39
|
||||||
|
|
||||||
loadbmp:
|
|
||||||
push ax bx cx dx bp ds
|
|
||||||
mov ax,6
|
|
||||||
int 47h
|
int 47h
|
||||||
mov ax,ds:[18]
|
mov ax,0004
|
||||||
mov si,ax
|
int 47h
|
||||||
shr ax,2
|
db 0CBH
|
||||||
and si,11b
|
|
||||||
cmp si,0
|
|
||||||
je is4x
|
|
||||||
add ax,1
|
|
||||||
is4x:
|
|
||||||
mov cs:sizeh,ax
|
|
||||||
mov ax,ds:[22]
|
|
||||||
mov cs:sizev,ax
|
|
||||||
mov di,0FFFFh-1024
|
|
||||||
mov si,54
|
|
||||||
mov cl, 0ffh
|
|
||||||
paletteload:
|
|
||||||
lodsb
|
|
||||||
shr al, 2
|
|
||||||
mov [di+2], al
|
|
||||||
lodsb
|
|
||||||
shr al, 2
|
|
||||||
mov [di+1], al
|
|
||||||
lodsb
|
|
||||||
shr al, 2
|
|
||||||
mov [di+0], al
|
|
||||||
inc si
|
|
||||||
add di, 3
|
|
||||||
dec cl
|
|
||||||
jnz paletteload
|
|
||||||
mov si,0FFFFh-1024
|
|
||||||
mov dx, 3c8h
|
|
||||||
cld
|
|
||||||
mov cl, 0ffh
|
|
||||||
xor bx, bx
|
|
||||||
palettemake:
|
|
||||||
mov al, bl
|
|
||||||
out dx, al
|
|
||||||
inc dx
|
|
||||||
lodsb
|
|
||||||
out dx, al
|
|
||||||
lodsb
|
|
||||||
out dx, al
|
|
||||||
lodsb
|
|
||||||
out dx, al
|
|
||||||
dec dx
|
|
||||||
inc bl
|
|
||||||
dec cl
|
|
||||||
jnz palettemake
|
|
||||||
pop ds bp dx cx bx ax
|
|
||||||
ret
|
|
||||||
sizeh dw 0
|
|
||||||
sizev dw 0
|
|
||||||
|
|
||||||
showbmp:
|
|
||||||
push ax bx cx dx si di ds es
|
|
||||||
mov cx,cs:sizeh
|
|
||||||
mov dx,cs:sizev
|
|
||||||
add bx,dx
|
|
||||||
mov di,ax
|
|
||||||
mov ax,bx
|
|
||||||
shl ax,6
|
|
||||||
shl bx,8
|
|
||||||
add di,bx
|
|
||||||
add di,ax
|
|
||||||
mov bx,di
|
|
||||||
mov ax,0A000H
|
|
||||||
mov es,ax
|
|
||||||
mov si,1024+54
|
|
||||||
mov ax,cx
|
|
||||||
bouclebmp:
|
|
||||||
cmp di,64000
|
|
||||||
jae nopp
|
|
||||||
cld
|
|
||||||
rep movsd
|
|
||||||
no:
|
|
||||||
mov cx,ax
|
|
||||||
sub bx,320
|
|
||||||
mov di,bx
|
|
||||||
dec dx
|
|
||||||
jnz bouclebmp
|
|
||||||
fin:
|
|
||||||
pop es ds di si dx cx bx ax
|
|
||||||
ret
|
|
||||||
nopp:
|
|
||||||
shl cx,2
|
|
||||||
add si,cx
|
|
||||||
jmp no
|
|
||||||
|
|
||||||
DecompressRle:
|
|
||||||
push cx dx si di
|
|
||||||
mov dx,cx
|
|
||||||
mov bp,di
|
|
||||||
decompression:
|
|
||||||
mov eax,[si]
|
|
||||||
cmp al,'/'
|
|
||||||
jne nocomp
|
|
||||||
cmp si,07FFFh-6
|
|
||||||
jae thenen
|
|
||||||
mov ecx,eax
|
|
||||||
ror ecx,16
|
|
||||||
cmp cl,'*'
|
|
||||||
jne nocomp
|
|
||||||
cmp byte ptr [si+4],'/'
|
|
||||||
jne nocomp
|
|
||||||
mov al,ch
|
|
||||||
mov cl,ah
|
|
||||||
xor ah,ah
|
|
||||||
xor ch,ch
|
|
||||||
rep stosb
|
|
||||||
add si,5
|
|
||||||
sub dx,5
|
|
||||||
jnz decompression
|
|
||||||
jmp thenen
|
|
||||||
nocomp:
|
|
||||||
mov es:[di],al
|
|
||||||
inc si
|
|
||||||
inc di
|
|
||||||
dec dx
|
|
||||||
jnz decompression
|
|
||||||
thenen:
|
|
||||||
mov ax,dx
|
|
||||||
sub bp,di
|
|
||||||
neg bp
|
|
||||||
pop di si dx cx
|
|
||||||
ret
|
|
||||||
|
|
||||||
logo db 'cos.rip',0
|
logo db 'cos.rip',0
|
||||||
end start
|
end start
|
||||||
|
|
211
lpt.asm
211
lpt.asm
|
@ -5,7 +5,7 @@ smart
|
||||||
org 0100h
|
org 0100h
|
||||||
start:
|
start:
|
||||||
jmp tsr
|
jmp tsr
|
||||||
db 'LPT'
|
drv db 'LPT ',0
|
||||||
Tsr:
|
Tsr:
|
||||||
cli
|
cli
|
||||||
cmp ax,1234h
|
cmp ax,1234h
|
||||||
|
@ -13,7 +13,17 @@ jne nomore
|
||||||
mov ax,4321h
|
mov ax,4321h
|
||||||
jmp itsok
|
jmp itsok
|
||||||
nomore:
|
nomore:
|
||||||
push bx
|
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
|
mov bl,ah
|
||||||
xor bh,bh
|
xor bh,bh
|
||||||
shl bx,1
|
shl bx,1
|
||||||
|
@ -37,8 +47,12 @@ mov bp,sp
|
||||||
and byte ptr [bp+6],0FEh
|
and byte ptr [bp+6],0FEh
|
||||||
pop bp
|
pop bp
|
||||||
endofint:
|
endofint:
|
||||||
|
mov cs:isact,0
|
||||||
sti
|
sti
|
||||||
iret
|
iret
|
||||||
|
nottest:
|
||||||
|
pop bx
|
||||||
|
jmp endofint
|
||||||
current dw 0
|
current dw 0
|
||||||
tables dw getlptin
|
tables dw getlptin
|
||||||
dw getlptout
|
dw getlptout
|
||||||
|
@ -59,6 +73,127 @@ tables dw getlptin
|
||||||
dw receivecommand
|
dw receivecommand
|
||||||
dw sendcommand
|
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
|
;envois une commande al
|
||||||
sendcommand:
|
sendcommand:
|
||||||
push ax bx cx di
|
push ax bx cx di
|
||||||
|
@ -84,31 +219,63 @@ pop ds
|
||||||
mov si,bx
|
mov si,bx
|
||||||
mov cx,6
|
mov cx,6
|
||||||
call sendlptblock
|
call sendlptblock
|
||||||
|
jc endofget
|
||||||
call receivelptblock
|
call receivelptblock
|
||||||
|
endofget:
|
||||||
pop ds cx bx ax
|
pop ds cx bx ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;Re‡ois une commande et l'execute
|
;Re‡ois une commande et l'execute
|
||||||
Receivecommand:
|
Receivecommand:
|
||||||
push ax bx cx di es
|
push ax bx cx di ds es
|
||||||
push cs
|
push cs
|
||||||
pop es
|
pop es
|
||||||
|
push cs
|
||||||
|
pop ds
|
||||||
mov di,offset command
|
mov di,offset command
|
||||||
call receivelptblock
|
call receivelptblock
|
||||||
|
jc endofno
|
||||||
mov bl,al
|
mov bl,al
|
||||||
xor bh,bh
|
xor bh,bh
|
||||||
shl bx,1
|
shl bx,1
|
||||||
add bx,offset cmd
|
add bx,offset cmd
|
||||||
call cs:[bx]
|
call cs:[bx]
|
||||||
pop es di cx bx ax
|
clc
|
||||||
|
endofno:
|
||||||
|
pop es ds di cx bx ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
command db 25 dup (0)
|
command db 25 dup (0)
|
||||||
cmd dw nothings
|
cmd dw nothings
|
||||||
dw sendram
|
dw sendram
|
||||||
|
dw receiveram
|
||||||
|
dw sendreg
|
||||||
|
dw receivereg
|
||||||
|
dw sendport
|
||||||
|
dw receiveport
|
||||||
|
dw letexecute
|
||||||
nothings:
|
nothings:
|
||||||
ret
|
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:
|
Sendram:
|
||||||
push ax cx si ds
|
push ax cx si ds
|
||||||
mov si,es:[di]
|
mov si,es:[di]
|
||||||
|
@ -119,6 +286,30 @@ call sendlptblock
|
||||||
pop ds si cx ax
|
pop ds si cx ax
|
||||||
ret
|
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-----------
|
;---------Segment Adress-----------
|
||||||
Bios equ 040h
|
Bios equ 040h
|
||||||
|
@ -131,17 +322,11 @@ tensec equ 182
|
||||||
Ack equ 00
|
Ack equ 00
|
||||||
Nack equ 0FFh
|
Nack equ 0FFh
|
||||||
maxtry equ 10
|
maxtry equ 10
|
||||||
tokenstart equ 0
|
|
||||||
tokennext equ 1
|
|
||||||
tokenstop equ 2
|
|
||||||
tokenbad equ 3
|
|
||||||
tokenresend equ 4
|
|
||||||
|
|
||||||
|
|
||||||
Initlpt:
|
Initlpt:
|
||||||
push ax ecx
|
push ax ecx
|
||||||
call StartTimer
|
call StartTimer
|
||||||
cmp emettor,0
|
cmp cs:emettor,0
|
||||||
je receptinit
|
je receptinit
|
||||||
mov al,10000b
|
mov al,10000b
|
||||||
call SetLptOut
|
call SetLptOut
|
||||||
|
@ -320,7 +505,6 @@ mov ax,Bios
|
||||||
mov ds,ax
|
mov ds,ax
|
||||||
mov ecx,ds:[timer]
|
mov ecx,ds:[timer]
|
||||||
sub ecx,cs:times
|
sub ecx,cs:times
|
||||||
mov ecx,0
|
|
||||||
pop ds ax
|
pop ds ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
@ -511,4 +695,5 @@ xor bh,bh
|
||||||
cmp bp,bx
|
cmp bp,bx
|
||||||
pop bp si dx bx
|
pop bp si dx bx
|
||||||
ret
|
ret
|
||||||
|
video db 0
|
||||||
end start
|
end start
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
.model tiny
|
||||||
|
.486
|
||||||
|
smart
|
||||||
|
.code
|
||||||
|
|
||||||
|
org 0100h
|
||||||
|
|
||||||
|
start:
|
||||||
|
mov ah,2
|
||||||
|
int 74h
|
||||||
|
jc error
|
||||||
|
mov si,offset dnoerror
|
||||||
|
jmp noerror
|
||||||
|
error:
|
||||||
|
mov si,offset derror
|
||||||
|
noerror:
|
||||||
|
mov ah,20
|
||||||
|
mov bx,1010h
|
||||||
|
int 47h
|
||||||
|
mov ax,0
|
||||||
|
int 16h
|
||||||
|
xor edx,edx
|
||||||
|
popr:
|
||||||
|
mov ah,3
|
||||||
|
int 74h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov si,bx
|
||||||
|
mov di,cx
|
||||||
|
mov ah,11
|
||||||
|
mov cx,8
|
||||||
|
int 47H
|
||||||
|
mov ah,5
|
||||||
|
int 47H
|
||||||
|
mov dx,si
|
||||||
|
mov ah,10
|
||||||
|
mov cx,16
|
||||||
|
int 47H
|
||||||
|
mov ah,5
|
||||||
|
int 47h
|
||||||
|
mov dx,di
|
||||||
|
mov ah,10
|
||||||
|
mov cx,16
|
||||||
|
int 47H
|
||||||
|
jmp popr
|
||||||
|
db 0CBh
|
||||||
|
|
||||||
|
dnoerror db 'Souris d‚tect‚e en PS/2',0
|
||||||
|
derror db 'Souris non d‚tect‚e',0
|
||||||
|
|
||||||
|
|
||||||
|
end start
|
|
@ -0,0 +1,257 @@
|
||||||
|
.model tiny
|
||||||
|
.486
|
||||||
|
smart
|
||||||
|
.code
|
||||||
|
org 0100h
|
||||||
|
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
|
||||||
|
|
||||||
|
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 bl,cs:vx
|
||||||
|
xor bh,bh
|
||||||
|
mov cl,cs:vy
|
||||||
|
xor ch,ch
|
||||||
|
mov dl,cs:button
|
||||||
|
;sub dl,8
|
||||||
|
;and dl,0Fh
|
||||||
|
clc
|
||||||
|
ret
|
||||||
|
|
||||||
|
Button db 0
|
||||||
|
rx dw 0
|
||||||
|
ry dw 0
|
||||||
|
VX db 0
|
||||||
|
VY db 0
|
||||||
|
X dw 0
|
||||||
|
Y dw 0
|
||||||
|
count db 0
|
||||||
|
error db 0
|
||||||
|
xy dw 0
|
||||||
|
old dw 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:
|
||||||
|
mov bl,VY
|
||||||
|
xor bh,bh
|
||||||
|
mov al,button
|
||||||
|
shr al,5
|
||||||
|
and al,1
|
||||||
|
cmp al,0
|
||||||
|
je addy
|
||||||
|
add y,bx
|
||||||
|
jmp hadsuby
|
||||||
|
addy:
|
||||||
|
sub y,bx
|
||||||
|
hadsuby:
|
||||||
|
mov bl,VX
|
||||||
|
xor bh,bh
|
||||||
|
mov al,button
|
||||||
|
shr al,8
|
||||||
|
and al,1
|
||||||
|
cmp al,0
|
||||||
|
je addx
|
||||||
|
sub x,bx
|
||||||
|
jmp hadsubx
|
||||||
|
addx:
|
||||||
|
add x,bx
|
||||||
|
hadsubx:
|
||||||
|
push cs
|
||||||
|
pop es
|
||||||
|
mov di,offset infos
|
||||||
|
mov ah,34
|
||||||
|
int 47h
|
||||||
|
mov ax,x
|
||||||
|
mov bx,0FFFFh
|
||||||
|
xor ch,ch
|
||||||
|
mov cl,[di+1]
|
||||||
|
mul cx
|
||||||
|
div bx
|
||||||
|
mov rx,ax
|
||||||
|
mov ax,y
|
||||||
|
mov cl,[di]
|
||||||
|
mul cx
|
||||||
|
div bx
|
||||||
|
mov ry,ax
|
||||||
|
mul byte ptr [di+1]
|
||||||
|
add ax,rx
|
||||||
|
shl ax,1
|
||||||
|
mov di,ax
|
||||||
|
mov ax,0B800h
|
||||||
|
mov es,ax
|
||||||
|
mov bx,xy
|
||||||
|
mov ax,old
|
||||||
|
mov word ptr es:[bx],ax
|
||||||
|
mov xy,di
|
||||||
|
mov ax,es:[di]
|
||||||
|
mov old,ax
|
||||||
|
mov word ptr es:[di],0FF70h
|
||||||
|
mov al, 20h
|
||||||
|
out 0a0h, al
|
||||||
|
out 20h, al
|
||||||
|
pop es ds di dx cx bx ax
|
||||||
|
mov cs:isact,0
|
||||||
|
pop bx
|
||||||
|
iret
|
||||||
|
infos db 10 dup (0)
|
||||||
|
|
||||||
|
end start
|
|
@ -0,0 +1,237 @@
|
||||||
|
.model tiny
|
||||||
|
.486
|
||||||
|
smart
|
||||||
|
.code
|
||||||
|
org 0100h
|
||||||
|
start:
|
||||||
|
jmp tsr
|
||||||
|
db 'PIC8259A'
|
||||||
|
Tsr:
|
||||||
|
cli
|
||||||
|
cmp ax,1234h
|
||||||
|
jne nomore
|
||||||
|
mov ax,4321h
|
||||||
|
jmp itsok
|
||||||
|
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 readirr
|
||||||
|
dw readisr
|
||||||
|
dw installhandler
|
||||||
|
dw replacehandler
|
||||||
|
dw getint
|
||||||
|
dw setint
|
||||||
|
dw seteoi
|
||||||
|
|
||||||
|
;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 : AL - Num‚ro de l'interruption (0-15) … autoriser 0-7 = MASTERPIC , 8-15 = SLAVEPIC
|
||||||
|
EnableIRQ:
|
||||||
|
push ax cx dx
|
||||||
|
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
|
||||||
|
pop dx cx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Desactive une interruption ‚lectronique
|
||||||
|
;Entr‚e : AL - Num‚ro de l'interruption (0-15) … desactiver 0-7 = MASTERPIC , 8-15 = SLAVEPIC
|
||||||
|
DisableIRQ:
|
||||||
|
push ax cx dx
|
||||||
|
mov dx,MASTERPIC+IRQMASK
|
||||||
|
cmp al,7
|
||||||
|
jbe master2
|
||||||
|
mov dx,SLAVEPIC+IRQMASK
|
||||||
|
master2:
|
||||||
|
mov cl,al
|
||||||
|
and cl,7
|
||||||
|
mov al,1
|
||||||
|
shl al,cl
|
||||||
|
mov ah,al
|
||||||
|
in al,dx
|
||||||
|
or al,ah
|
||||||
|
out dx,al
|
||||||
|
pop dx cx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Signale "End Of Interrupt" de l'interruption al
|
||||||
|
SetEOI:
|
||||||
|
push ax dx
|
||||||
|
cmp al,7
|
||||||
|
jbe master3
|
||||||
|
mov al,EOI
|
||||||
|
out SLAVEPIC,al
|
||||||
|
master3:
|
||||||
|
mov al,EOI
|
||||||
|
out MASTERPIC,al
|
||||||
|
pop dx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Lit les masques d'un contr“leur IRQ dans al, 0 master ou slave 1 ds bh
|
||||||
|
ReadmaskIrq:
|
||||||
|
push dx
|
||||||
|
mov dx,MASTERPIC+ IRQMASK
|
||||||
|
cmp bh,0
|
||||||
|
jne Master5
|
||||||
|
mov dx,SLAVEPIC+ IRQMASK
|
||||||
|
master5:
|
||||||
|
in al,dx
|
||||||
|
pop dx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Lit le registre d'‚tat d'un contr“leur IRQ dans al, 0 master ou slave 1 ds bh
|
||||||
|
ReadISR:
|
||||||
|
push dx
|
||||||
|
mov dx,MASTERPIC
|
||||||
|
cmp bh,0
|
||||||
|
jne Master6
|
||||||
|
mov dx,SLAVEPIC
|
||||||
|
master6:
|
||||||
|
mov al,isr
|
||||||
|
out dx,al
|
||||||
|
in al,dx
|
||||||
|
pop dx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Lit le registre d'‚tat d'un contr“leur IRQ dans al, 0 master ou slave 1 ds bh
|
||||||
|
ReadIRR:
|
||||||
|
push dx
|
||||||
|
mov dx,MASTERPIC
|
||||||
|
cmp bh,0
|
||||||
|
jne Master7
|
||||||
|
mov dx,SLAVEPIC
|
||||||
|
master7:
|
||||||
|
mov al,irr
|
||||||
|
out dx,al
|
||||||
|
in al,dx
|
||||||
|
pop dx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;remplace le handler pointer par ds:si en bx:100h interruption ax
|
||||||
|
replacehandler:
|
||||||
|
push ax bx si di ds es
|
||||||
|
mov es,bx
|
||||||
|
mov di,0100h
|
||||||
|
mov ah,4
|
||||||
|
int 48h
|
||||||
|
mov bx,ax
|
||||||
|
call getint
|
||||||
|
mov es:[102h],si
|
||||||
|
mov es:[104h],ds
|
||||||
|
call setint
|
||||||
|
pop es ds di si bx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;install le handler pointer par ds:si en bx:100h interruption ax
|
||||||
|
installhandler:
|
||||||
|
push bx di es
|
||||||
|
mov es,bx
|
||||||
|
mov di,100h
|
||||||
|
mov ah,4
|
||||||
|
int 48h
|
||||||
|
mov bx,ax
|
||||||
|
call setint
|
||||||
|
pop es di bx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;met es:di le handle de l'int al
|
||||||
|
setint:
|
||||||
|
push ax bx ds
|
||||||
|
call disableirq
|
||||||
|
cli
|
||||||
|
xor ah,ah
|
||||||
|
mov bx,ax
|
||||||
|
shl bx,2
|
||||||
|
xor ax,ax
|
||||||
|
mov ds,ax
|
||||||
|
mov ds:[bx],di
|
||||||
|
mov ds:[bx+2],es
|
||||||
|
pop ds bx ax
|
||||||
|
sti
|
||||||
|
call enableirq
|
||||||
|
ret
|
||||||
|
|
||||||
|
;met ds:si le handle de l'int al
|
||||||
|
getint:
|
||||||
|
push ax bx es
|
||||||
|
xor ah,ah
|
||||||
|
mov bx,ax
|
||||||
|
shl bx,2
|
||||||
|
xor ax,ax
|
||||||
|
mov es,ax
|
||||||
|
mov si,es:[bx]
|
||||||
|
mov ds,es:[bx+2]
|
||||||
|
pop es bx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
end start
|
||||||
|
|
|
@ -0,0 +1,233 @@
|
||||||
|
.model tiny
|
||||||
|
.486
|
||||||
|
smart
|
||||||
|
.code
|
||||||
|
|
||||||
|
org 0100h
|
||||||
|
|
||||||
|
start:
|
||||||
|
mov ah,2
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov ah,13
|
||||||
|
mov si,offset msg
|
||||||
|
int 47h
|
||||||
|
replay:
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov ah,13
|
||||||
|
mov si,offset prompt
|
||||||
|
int 47h
|
||||||
|
mov di,offset buffer
|
||||||
|
waitchar:
|
||||||
|
mov ax,0
|
||||||
|
int 16h
|
||||||
|
mov dl,al
|
||||||
|
mov [di],al
|
||||||
|
cmp al,0Dh
|
||||||
|
je entere
|
||||||
|
inc di
|
||||||
|
mov ah,7
|
||||||
|
int 47h
|
||||||
|
jmp waitchar
|
||||||
|
entere:
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov byte ptr [di],0
|
||||||
|
mov si,offset buffer
|
||||||
|
call uppercasestr0
|
||||||
|
mov bx,offset commands
|
||||||
|
tre:
|
||||||
|
mov di,[bx]
|
||||||
|
add bx,4
|
||||||
|
cmp di,0
|
||||||
|
je error
|
||||||
|
push cs
|
||||||
|
pop es
|
||||||
|
call cmpstr0
|
||||||
|
jne tre
|
||||||
|
mov bx,[bx-2]
|
||||||
|
call bx
|
||||||
|
jmp replay
|
||||||
|
error:
|
||||||
|
push cs
|
||||||
|
pop es
|
||||||
|
mov dl,'.'
|
||||||
|
call searchcharstr0
|
||||||
|
je noaddext
|
||||||
|
mov di,offset buffer
|
||||||
|
mov si,offset extcom
|
||||||
|
call concatstr0
|
||||||
|
noaddext:
|
||||||
|
mov si,offset buffer
|
||||||
|
push cs
|
||||||
|
mov ax,offset arrive
|
||||||
|
push ax
|
||||||
|
mov di,offset vga
|
||||||
|
mov ah,40
|
||||||
|
int 47h
|
||||||
|
mov ax,6000h
|
||||||
|
mov es,ax
|
||||||
|
push ax
|
||||||
|
mov di,0100h
|
||||||
|
push di
|
||||||
|
mov ah,4
|
||||||
|
int 48h
|
||||||
|
jc reallyerror
|
||||||
|
push es
|
||||||
|
push es
|
||||||
|
push es
|
||||||
|
pop ds
|
||||||
|
pop fs
|
||||||
|
pop gs
|
||||||
|
push 7202h
|
||||||
|
popf
|
||||||
|
db 0CBh
|
||||||
|
arrive:
|
||||||
|
push cs
|
||||||
|
push cs
|
||||||
|
push cs
|
||||||
|
push cs
|
||||||
|
pop ds
|
||||||
|
pop es
|
||||||
|
pop fs
|
||||||
|
pop gs
|
||||||
|
mov si,offset vga
|
||||||
|
mov ah,41
|
||||||
|
int 47h
|
||||||
|
jmp replay
|
||||||
|
reallyerror:
|
||||||
|
pop ax
|
||||||
|
pop ax
|
||||||
|
pop ax
|
||||||
|
pop ax
|
||||||
|
mov ah,13
|
||||||
|
mov si,offset Error_Syntax
|
||||||
|
int 47h
|
||||||
|
jmp replay
|
||||||
|
|
||||||
|
;met en majuscule la string ds:si
|
||||||
|
uppercasestr0:
|
||||||
|
push si ax
|
||||||
|
uppercaser:
|
||||||
|
mov al,ds:[si]
|
||||||
|
inc si
|
||||||
|
cmp al,0
|
||||||
|
je enduppercase
|
||||||
|
cmp al,'a'
|
||||||
|
jb uppercaser
|
||||||
|
cmp al,'z'
|
||||||
|
ja uppercaser
|
||||||
|
sub byte ptr [si-1],'a'-'A'
|
||||||
|
jmp uppercaser
|
||||||
|
enduppercase:
|
||||||
|
clc
|
||||||
|
pop ax si
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Cherche dl dans la str ds:si -> di
|
||||||
|
SearchCharStr0:
|
||||||
|
push ax cx si di es
|
||||||
|
mov di,si
|
||||||
|
push ds
|
||||||
|
pop es
|
||||||
|
mov cx,0FFh
|
||||||
|
mov al,0
|
||||||
|
cld
|
||||||
|
repne scasb
|
||||||
|
neg cx
|
||||||
|
dec cx
|
||||||
|
xor ch,ch
|
||||||
|
mov di,si
|
||||||
|
mov al,dl
|
||||||
|
repne scasb
|
||||||
|
pop es di si cx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;concatŠne la chaine str ds:si avec es:di
|
||||||
|
concatstr0:
|
||||||
|
push ax cx dx si di
|
||||||
|
push es di
|
||||||
|
mov di,si
|
||||||
|
push ds
|
||||||
|
pop es
|
||||||
|
mov al,0
|
||||||
|
mov cx,255
|
||||||
|
cld
|
||||||
|
repne scasb
|
||||||
|
neg cx
|
||||||
|
dec cx
|
||||||
|
xor ch,ch
|
||||||
|
mov dx,cx
|
||||||
|
pop di es
|
||||||
|
mov cx,0FFh
|
||||||
|
repne scasb
|
||||||
|
dec di
|
||||||
|
mov cx,dx
|
||||||
|
rep movsb
|
||||||
|
pop di si dx cx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;compare la chaine es:di avec ds:si
|
||||||
|
cmpstr0:
|
||||||
|
push cx dx si di
|
||||||
|
push di
|
||||||
|
mov al,0
|
||||||
|
mov cx,255
|
||||||
|
cld
|
||||||
|
repne scasb
|
||||||
|
neg cx
|
||||||
|
mov dx,cx
|
||||||
|
pop di
|
||||||
|
push es di
|
||||||
|
mov di,si
|
||||||
|
push ds
|
||||||
|
pop es
|
||||||
|
mov cx,255
|
||||||
|
repne scasb
|
||||||
|
neg cx
|
||||||
|
cmp dx,cx
|
||||||
|
pop di es
|
||||||
|
jne notequal
|
||||||
|
dec cx
|
||||||
|
xor ch,ch
|
||||||
|
rep cmpsb
|
||||||
|
notequal:
|
||||||
|
pop di si dx cx
|
||||||
|
ret
|
||||||
|
|
||||||
|
Code_Exit:
|
||||||
|
pop ax
|
||||||
|
db 0CBh
|
||||||
|
|
||||||
|
Code_Version:
|
||||||
|
mov ah,13
|
||||||
|
mov si,offset Version_Text
|
||||||
|
int 47h
|
||||||
|
ret
|
||||||
|
|
||||||
|
Version_Text db 'Cos 2000 version 1.1.1B by Nico',0
|
||||||
|
extcom db '.EXE',0
|
||||||
|
|
||||||
|
commands dw Str_Exit ,Code_Exit
|
||||||
|
dw Str_Version,Code_Version
|
||||||
|
dw 0
|
||||||
|
|
||||||
|
|
||||||
|
Str_Exit db 'EXIT',0
|
||||||
|
Str_Version db 'VERSION',0
|
||||||
|
|
||||||
|
Error_Syntax db 'The command doesn''t exit !',0
|
||||||
|
prompt db 'COS>',0
|
||||||
|
msg db 'Cos command interpretor V1.0',0
|
||||||
|
buffer db 255 dup (0)
|
||||||
|
|
||||||
|
vga db 0
|
||||||
|
end start
|
81
system.asm
81
system.asm
|
@ -7,25 +7,81 @@ org 0100h
|
||||||
|
|
||||||
start:
|
start:
|
||||||
mov si,offset video
|
mov si,offset video
|
||||||
mov bx,8400h
|
mov bx,400h
|
||||||
mov ax,47h
|
mov ax,47h
|
||||||
call installhandler
|
call installhandler
|
||||||
mov si,offset lpt
|
|
||||||
mov bx,7400h
|
|
||||||
mov ax,49h
|
|
||||||
call installhandler
|
|
||||||
mov si,offset keyboard
|
|
||||||
mov bx,7000h
|
|
||||||
mov ax,9h
|
|
||||||
call replacehandler
|
|
||||||
mov si,offset timer
|
mov si,offset timer
|
||||||
mov bx,7800h
|
mov bx,900h
|
||||||
mov ax,8h
|
mov ax,8h
|
||||||
call replacehandler
|
call replacehandler
|
||||||
|
mov si,offset pic
|
||||||
|
mov bx,950h
|
||||||
|
mov ax,50h
|
||||||
|
call installhandler
|
||||||
mov si,offset drive
|
mov si,offset drive
|
||||||
mov bx,9000h
|
mov bx,1020h
|
||||||
mov ax,48h
|
mov ax,48h
|
||||||
call installhandler
|
call installhandler
|
||||||
|
mov si,offset keyboard
|
||||||
|
mov bx,1400h
|
||||||
|
mov ax,9h
|
||||||
|
call replacehandler
|
||||||
|
mov ax,40h
|
||||||
|
mov es,ax
|
||||||
|
mov dx,es:[8]
|
||||||
|
cmp dx,0
|
||||||
|
je nolpt1
|
||||||
|
mov al,0FFh
|
||||||
|
add dx,2
|
||||||
|
out dx,al
|
||||||
|
mov si,offset lpt
|
||||||
|
mov bx,1500h
|
||||||
|
mov ax,0Fh
|
||||||
|
call installhandler
|
||||||
|
mov es,bx
|
||||||
|
sub al,8
|
||||||
|
xor ah,ah
|
||||||
|
int 50h
|
||||||
|
mov byte ptr es:[105h],'1'
|
||||||
|
nolpt1:
|
||||||
|
push es
|
||||||
|
mov ax,40h
|
||||||
|
mov es,ax
|
||||||
|
mov dx,es:[10]
|
||||||
|
pop es
|
||||||
|
cmp dx,0
|
||||||
|
je nolpt2
|
||||||
|
mov al,0FFh
|
||||||
|
add dx,2
|
||||||
|
out dx,al
|
||||||
|
mov si,offset lpt
|
||||||
|
mov bx,1700h
|
||||||
|
mov ax,0Dh
|
||||||
|
call installhandler
|
||||||
|
sub al,8
|
||||||
|
xor ah,ah
|
||||||
|
int 50h
|
||||||
|
mov es,bx
|
||||||
|
mov byte ptr es:[105h],'2'
|
||||||
|
nolpt2:
|
||||||
|
mov si,offset mouse
|
||||||
|
mov bx,1900h
|
||||||
|
mov ax,74h
|
||||||
|
call installhandler
|
||||||
|
mov ax,0012
|
||||||
|
int 50h
|
||||||
|
;mov ah, 00010000b
|
||||||
|
;not ah
|
||||||
|
;in al, 0a1h
|
||||||
|
;and al, ah
|
||||||
|
;out 0a1h, al
|
||||||
|
mov ah,2
|
||||||
|
int 74h
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
start2:
|
start2:
|
||||||
push cs
|
push cs
|
||||||
push cs
|
push cs
|
||||||
|
@ -398,6 +454,7 @@ ret
|
||||||
;Recherchele fichier et retourne sont path et en cx sont debut
|
;Recherchele fichier et retourne sont path et en cx sont debut
|
||||||
Searchfile:
|
Searchfile:
|
||||||
push bx dx si di ds es
|
push bx dx si di ds es
|
||||||
|
xor dx,dx
|
||||||
push cs
|
push cs
|
||||||
pop es
|
pop es
|
||||||
mov di,offset temp
|
mov di,offset temp
|
||||||
|
@ -540,6 +597,8 @@ extsize equ 5
|
||||||
|
|
||||||
|
|
||||||
nbfit equ 255
|
nbfit equ 255
|
||||||
|
mouse db 'mouse.sys',0
|
||||||
|
pic db 'pic8259a.sys',0
|
||||||
drive db 'drive.sys',0
|
drive db 'drive.sys',0
|
||||||
timer db 'timer.sys',0
|
timer db 'timer.sys',0
|
||||||
lpt db 'lpt.sys',0
|
lpt db 'lpt.sys',0
|
||||||
|
|
|
@ -0,0 +1,330 @@
|
||||||
|
.model tiny
|
||||||
|
.486
|
||||||
|
smart
|
||||||
|
.code
|
||||||
|
org 0100h
|
||||||
|
|
||||||
|
|
||||||
|
start:
|
||||||
|
mov ah,26
|
||||||
|
int 47h
|
||||||
|
mov ax,0001
|
||||||
|
int 47h
|
||||||
|
mov ah,2
|
||||||
|
int 47h
|
||||||
|
|
||||||
|
mov si,offset text1 ;titre
|
||||||
|
mov ah,13
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
int 47h
|
||||||
|
|
||||||
|
mov ah,21
|
||||||
|
mov cl,3
|
||||||
|
int 47h
|
||||||
|
mov ah,13
|
||||||
|
mov si,offset text2
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov edx,2612182686
|
||||||
|
mov ah,8
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov edx,7576534
|
||||||
|
mov ah,8
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
|
||||||
|
mov ah,21
|
||||||
|
mov cl,4
|
||||||
|
int 47h
|
||||||
|
mov si,offset text3
|
||||||
|
mov ah,13
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov edx,-6876253
|
||||||
|
mov ah,9
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov edx,-311212323
|
||||||
|
mov ah,9
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
|
||||||
|
mov ah,21
|
||||||
|
mov cl,5
|
||||||
|
int 47h
|
||||||
|
mov ah,13
|
||||||
|
mov si,offset text4
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov edx,0892325457
|
||||||
|
mov cx,16
|
||||||
|
mov ah,10
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov edx,0236514
|
||||||
|
mov ah,10
|
||||||
|
mov cx,32
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
|
||||||
|
mov ah,21
|
||||||
|
mov cl,6
|
||||||
|
int 47h
|
||||||
|
mov ah,13
|
||||||
|
mov si,offset text5
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov edx,3762182686
|
||||||
|
mov ah,11
|
||||||
|
mov cx,32
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov edx,2182686
|
||||||
|
mov ah,11
|
||||||
|
mov cx,16
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
|
||||||
|
mov ah,21
|
||||||
|
mov cl,7
|
||||||
|
int 47h
|
||||||
|
mov ah,13
|
||||||
|
mov si,offset text6
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov dl,'h'
|
||||||
|
mov ah,7
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov dl,'@'
|
||||||
|
mov ah,7
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
|
||||||
|
mov ah,21
|
||||||
|
mov cl,8
|
||||||
|
int 47h
|
||||||
|
mov ah,13
|
||||||
|
mov si,offset text7
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov si,offset textt
|
||||||
|
mov ah,13
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov si,offset texttt
|
||||||
|
mov ah,13
|
||||||
|
int 47h
|
||||||
|
|
||||||
|
mov ax,0
|
||||||
|
int 16h
|
||||||
|
|
||||||
|
mov ah,2
|
||||||
|
int 47h
|
||||||
|
mov ah,30
|
||||||
|
int 47h
|
||||||
|
mov ah,2
|
||||||
|
int 47h
|
||||||
|
|
||||||
|
mov ah,21
|
||||||
|
mov cl,5
|
||||||
|
int 47h
|
||||||
|
mov cx,200
|
||||||
|
go1:
|
||||||
|
mov ah,30
|
||||||
|
int 47h
|
||||||
|
mov ah,33
|
||||||
|
int 47
|
||||||
|
mov ah,20
|
||||||
|
xor bh,bh
|
||||||
|
inc bl
|
||||||
|
mov si,offset text8
|
||||||
|
int 47h
|
||||||
|
call put
|
||||||
|
mov ah,30
|
||||||
|
int 47h
|
||||||
|
mov ah,33
|
||||||
|
int 47h
|
||||||
|
dec cx
|
||||||
|
jnz go1
|
||||||
|
|
||||||
|
mov ah,21
|
||||||
|
mov cl,7
|
||||||
|
int 47h
|
||||||
|
mov cx,200
|
||||||
|
go2:
|
||||||
|
mov si,offset text9
|
||||||
|
mov ah,30
|
||||||
|
int 47h
|
||||||
|
mov ah,33
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov ah,13
|
||||||
|
int 47h
|
||||||
|
call put
|
||||||
|
mov ah,30
|
||||||
|
int 47h
|
||||||
|
mov ah,33
|
||||||
|
int 47h
|
||||||
|
dec cx
|
||||||
|
jnz go2
|
||||||
|
|
||||||
|
mov ah,21
|
||||||
|
mov cl,9
|
||||||
|
int 47h
|
||||||
|
mov cx,200
|
||||||
|
go3:
|
||||||
|
mov si,offset text10
|
||||||
|
mov ah,30
|
||||||
|
int 47h
|
||||||
|
mov ah,33
|
||||||
|
int 47h
|
||||||
|
xor bh,bh
|
||||||
|
inc bl
|
||||||
|
mov ah,20
|
||||||
|
int 47h
|
||||||
|
call put
|
||||||
|
mov ah,30
|
||||||
|
int 47h
|
||||||
|
mov ah,33
|
||||||
|
int 47h
|
||||||
|
dec cx
|
||||||
|
jnz go3
|
||||||
|
|
||||||
|
mov ah,30
|
||||||
|
int 47h
|
||||||
|
mov ah,2
|
||||||
|
int 47h
|
||||||
|
mov bx,040Dh
|
||||||
|
mov si,offset texte1
|
||||||
|
mov ah,20
|
||||||
|
int 47h
|
||||||
|
mov si,offset texte2
|
||||||
|
inc bl
|
||||||
|
mov ah,20
|
||||||
|
int 47h
|
||||||
|
mov ah,30
|
||||||
|
int 47h
|
||||||
|
mov ah,2
|
||||||
|
int 47h
|
||||||
|
mov ah,30
|
||||||
|
int 47h
|
||||||
|
|
||||||
|
mov cl,12
|
||||||
|
mov ah,21
|
||||||
|
int 47h
|
||||||
|
mov bp,255
|
||||||
|
xor edx,edx
|
||||||
|
go4:
|
||||||
|
mov ah,30
|
||||||
|
int 47h
|
||||||
|
mov ah,33
|
||||||
|
int 47h
|
||||||
|
inc edx
|
||||||
|
mov ah,11
|
||||||
|
mov cx,16
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov ah,30
|
||||||
|
int 47h
|
||||||
|
mov ah,33
|
||||||
|
int 47h
|
||||||
|
dec bp
|
||||||
|
jnz go4
|
||||||
|
mov ah,27
|
||||||
|
int 47h
|
||||||
|
xor bx,bx
|
||||||
|
mov si,offset texte3
|
||||||
|
mov ah,20
|
||||||
|
int 47h
|
||||||
|
mov ax,0
|
||||||
|
int 16h
|
||||||
|
db 0CBh
|
||||||
|
|
||||||
|
put:
|
||||||
|
call random
|
||||||
|
mov di,dx
|
||||||
|
and di,4096-2
|
||||||
|
mov si,offset text11
|
||||||
|
call showstring2
|
||||||
|
ret
|
||||||
|
|
||||||
|
Random:
|
||||||
|
push ax
|
||||||
|
MOV AX,cs:[RandSeed]
|
||||||
|
MOV DX,8405h
|
||||||
|
MUL DX
|
||||||
|
INC AX
|
||||||
|
MOV cs:[RandSeed],AX
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
randseed dw 1234h
|
||||||
|
|
||||||
|
Randomize:
|
||||||
|
push ax cx dx
|
||||||
|
mov ah,0
|
||||||
|
int 1ah
|
||||||
|
mov cs:randseed,dx
|
||||||
|
pop dx cx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
texttt db 'Texte',0
|
||||||
|
textt db 'Divers',0
|
||||||
|
text1 db ' D‚monstration de l''utilisation de la bibliothŠque VIDEO',0
|
||||||
|
text2 db 'Nombre entier :',0
|
||||||
|
text3 db 'Nombre sign‚ :',0
|
||||||
|
text4 db 'Nombre h‚xad‚cimal :',0
|
||||||
|
text5 db 'Nombre binaire :',0
|
||||||
|
text6 db 'CaractŠres :',0
|
||||||
|
text7 db 'Texte :',0
|
||||||
|
text8 db 'Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling',0
|
||||||
|
text9 db 'Vertical Vertical Vertical Vertical Vertical Vertical Vertical Vertical',0
|
||||||
|
text10 db 'Rapide Rapide Rapide Rapide Rapide Rapide Rapide Rapide',0
|
||||||
|
text11 db 'Echange rapide de pages Vid‚o',0
|
||||||
|
texte1 db 'Routine d''affichage Ultra Rapide Agissant sur le Mat‚riel',0
|
||||||
|
texte2 db 'Possibilit‚ de r‚aliser des effets de superposition',0
|
||||||
|
texte3 db 'Sauvegarde et restauration de l''ecran',0
|
||||||
|
|
||||||
|
showstring2:
|
||||||
|
push es bx cx si di
|
||||||
|
add di,4000
|
||||||
|
mov bx,0B800h
|
||||||
|
mov es,bx
|
||||||
|
mov bl,[si]
|
||||||
|
mov ch,3
|
||||||
|
strinaize4:
|
||||||
|
inc si
|
||||||
|
mov cl,[si]
|
||||||
|
mov es:[di],cx
|
||||||
|
add di,2
|
||||||
|
dec bl
|
||||||
|
jnz strinaize4
|
||||||
|
pop di si cx bx es
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
end start
|
59
timer.asm
59
timer.asm
|
@ -24,6 +24,65 @@ tsr:
|
||||||
mov ax,0B800h
|
mov ax,0B800h
|
||||||
mov es,ax
|
mov es,ax
|
||||||
mov es:[0],bl
|
mov es:[0],bl
|
||||||
|
push ds es
|
||||||
|
pusha
|
||||||
|
mov ax,40h
|
||||||
|
mov es,ax
|
||||||
|
mov ax,0B800h
|
||||||
|
mov ds,ax
|
||||||
|
mov word ptr dx,es:[8]
|
||||||
|
|
||||||
|
in al,dx
|
||||||
|
mov di,158
|
||||||
|
decompose:
|
||||||
|
mov cl,al
|
||||||
|
and cl,1
|
||||||
|
cmp cl,1
|
||||||
|
je un
|
||||||
|
mov byte ptr ds:[di],'0'
|
||||||
|
jmp errr
|
||||||
|
un:
|
||||||
|
mov byte ptr ds:[di],'1'
|
||||||
|
errr:
|
||||||
|
shr al,1
|
||||||
|
dec di
|
||||||
|
dec di
|
||||||
|
cmp di,142
|
||||||
|
jne decompose
|
||||||
|
|
||||||
|
inc dx
|
||||||
|
in al,dx
|
||||||
|
mov di,318
|
||||||
|
decompose2:
|
||||||
|
mov cl,al
|
||||||
|
and cl,1
|
||||||
|
cmp cl,1
|
||||||
|
je un2
|
||||||
|
mov byte ptr ds:[di],'0'
|
||||||
|
jmp errr2
|
||||||
|
un2:
|
||||||
|
mov byte ptr ds:[di],'1'
|
||||||
|
errr2:
|
||||||
|
cmp di,314
|
||||||
|
jb errrr
|
||||||
|
mov byte ptr ds:[di],'X'
|
||||||
|
errrr:
|
||||||
|
shr al,1
|
||||||
|
dec di
|
||||||
|
dec di
|
||||||
|
cmp di,302
|
||||||
|
jne decompose2
|
||||||
|
popa
|
||||||
|
pop es ds
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
pop es bx ax
|
pop es bx ax
|
||||||
sti
|
sti
|
||||||
iret
|
iret
|
||||||
|
|
491
video.asm
491
video.asm
|
@ -77,6 +77,58 @@ tables dw setvideomode
|
||||||
dw changelineattr
|
dw changelineattr
|
||||||
dw waitretrace
|
dw waitretrace
|
||||||
dw getinfos
|
dw getinfos
|
||||||
|
dw loadbmp
|
||||||
|
dw showbmp
|
||||||
|
dw clearscr
|
||||||
|
dw savedac
|
||||||
|
dw restoredac
|
||||||
|
dw savestate
|
||||||
|
dw restorestate
|
||||||
|
|
||||||
|
;sauve le DAC
|
||||||
|
savedac:
|
||||||
|
push ax cx dx di
|
||||||
|
mov dx,3C7h
|
||||||
|
xor ax,ax
|
||||||
|
out dx,al
|
||||||
|
mov cx,256*3
|
||||||
|
inc dx
|
||||||
|
inc dx
|
||||||
|
mov di,offset dac
|
||||||
|
save:
|
||||||
|
in al,dx
|
||||||
|
mov cs:[di],al
|
||||||
|
inc di
|
||||||
|
dec cx
|
||||||
|
jne save
|
||||||
|
pop di dx cx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;restore le DAC
|
||||||
|
restoredac:
|
||||||
|
push ax cx dx si
|
||||||
|
xor ax,ax
|
||||||
|
cli
|
||||||
|
mov dx,3DAh
|
||||||
|
in al,dx
|
||||||
|
mov dx,0
|
||||||
|
out dx,al
|
||||||
|
mov dx,3C8h
|
||||||
|
out dx,al
|
||||||
|
mov cx,256*3
|
||||||
|
mov si,offset dac
|
||||||
|
save2:
|
||||||
|
mov al,cs:[si]
|
||||||
|
inc si
|
||||||
|
out dx,al
|
||||||
|
dec cx
|
||||||
|
jne save2
|
||||||
|
mov dx,3DAh
|
||||||
|
in al,dx
|
||||||
|
mov dx,32
|
||||||
|
out dx,al
|
||||||
|
pop si dx cx ax
|
||||||
|
ret
|
||||||
|
|
||||||
;Change la police a CL
|
;Change la police a CL
|
||||||
changefont:
|
changefont:
|
||||||
|
@ -186,7 +238,7 @@ mode1 DB 67H,00H, 03H,00H,03H,00H,02H
|
||||||
db 80,25
|
db 80,25
|
||||||
|
|
||||||
;80*50 16 couleurs
|
;80*50 16 couleurs
|
||||||
mode1b DB 63H, 00H, 03H,01H,03H,01H,02H
|
mode2 DB 63H, 00H, 03H,01H,03H,01H,02H
|
||||||
DB 5FH,4FH,50H,82H,55H,81H,0BFH,1FH,00H,47H,06H,07H,00H,00H,00H
|
DB 5FH,4FH,50H,82H,55H,81H,0BFH,1FH,00H,47H,06H,07H,00H,00H,00H
|
||||||
DB 00H,9CH,8EH,8FH,28H,1FH,96H,0B9H,0A3H,0FFH
|
DB 00H,9CH,8EH,8FH,28H,1FH,96H,0B9H,0A3H,0FFH
|
||||||
DB 00H,00H,00H,00H,00H,10H,0EH,00H,0FFH
|
DB 00H,00H,00H,00H,00H,10H,0EH,00H,0FFH
|
||||||
|
@ -204,7 +256,7 @@ mode3 DB 067H,00H,03H,01H,03H,01H,02H
|
||||||
db 100,50
|
db 100,50
|
||||||
|
|
||||||
;100*60 16 couleurs
|
;100*60 16 couleurs
|
||||||
mode4b DB 067H,00H,03H,01H,03H,01H,02H
|
mode4 DB 0A7H,00H,03H,01H,03H,01H,02H
|
||||||
DB 70H,63H,64H,85H,68H,84H,0FFH,1FH,00H,47H,06H,07H,00H,00H,00H
|
DB 70H,63H,64H,85H,68H,84H,0FFH,1FH,00H,47H,06H,07H,00H,00H,00H
|
||||||
DB 00H,0E7H,8EH,0DFH,32H,1FH,0DFH,0E5H,0A3H,0FFH
|
DB 00H,0E7H,8EH,0DFH,32H,1FH,0DFH,0E5H,0A3H,0FFH
|
||||||
DB 00H,00H,00H,00H,00H,10H,0EH,00H,0FFH
|
DB 00H,00H,00H,00H,00H,10H,0EH,00H,0FFH
|
||||||
|
@ -212,9 +264,8 @@ mode4b DB 067H,00H,03H,01H,03H,01H,02H
|
||||||
DB 0CH,00H,0FH,00H,00H
|
DB 0CH,00H,0FH,00H,00H
|
||||||
db 100,60
|
db 100,60
|
||||||
|
|
||||||
|
|
||||||
;320*200 16 couleurs
|
;320*200 16 couleurs
|
||||||
mode4 DB 63H,00H, 03H,09H,0FH,00H,06H
|
mode5 DB 63H,00H, 03H,09H,0FH,00H,06H
|
||||||
DB 2DH,27H,28H,90H,2BH,080H,0BFH,01FH,00H,0C0H,00H,00H,00H,00H,00H,00H
|
DB 2DH,27H,28H,90H,2BH,080H,0BFH,01FH,00H,0C0H,00H,00H,00H,00H,00H,00H
|
||||||
DB 9CH,8EH,8FH,14H,00H,96H,0B9H,0E3H,0FFH
|
DB 9CH,8EH,8FH,14H,00H,96H,0B9H,0E3H,0FFH
|
||||||
DB 00H,00H,00H,00H,00H,00H,05H,0FH,0FFH
|
DB 00H,00H,00H,00H,00H,00H,05H,0FH,0FFH
|
||||||
|
@ -223,7 +274,7 @@ mode4 DB 63H,00H, 03H,09H,0FH,00H,06H
|
||||||
db 40,25
|
db 40,25
|
||||||
|
|
||||||
;320*200 256 couleurs
|
;320*200 256 couleurs
|
||||||
mode5 DB 63H, 00H, 03H,01H,0FH,00H,0EH
|
mode6 DB 63H, 00H, 03H,01H,0FH,00H,0EH
|
||||||
DB 5FH,4FH,50H,82H,54H,80H,0BFH,1FH,00H,41H,00H,00H,00H,00H,00H,00H
|
DB 5FH,4FH,50H,82H,54H,80H,0BFH,1FH,00H,41H,00H,00H,00H,00H,00H,00H
|
||||||
DB 9CH,0EH,8FH,28H,40H,96H,0B9H,0A3H,0FFH
|
DB 9CH,0EH,8FH,28H,40H,96H,0B9H,0A3H,0FFH
|
||||||
DB 00H,00H,00H,00H,00H,40H,05H,0FH,0FFH
|
DB 00H,00H,00H,00H,00H,40H,05H,0FH,0FFH
|
||||||
|
@ -231,8 +282,17 @@ mode5 DB 63H, 00H, 03H,01H,0FH,00H,0EH
|
||||||
DB 41H,00H,0FH,00H,00H
|
DB 41H,00H,0FH,00H,00H
|
||||||
db 00,00
|
db 00,00
|
||||||
|
|
||||||
|
;320*400 256 couleurs chain4
|
||||||
|
mode7 DB 63H, 00H, 03H,01H,0FH,00H,06H
|
||||||
|
DB 5FH,4FH,50H,82H,54H,80H,0BFH,1FH,00H,40H,00H,00H,00H,00H,00H,00H
|
||||||
|
DB 9CH,8EH,8FH,28H,00H,96H,0B9H,0E3H,0FFH
|
||||||
|
DB 00H,00H,00H,00H,00H,40H,05H,0FH,0FFH
|
||||||
|
DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH,0BH,0CH,0DH,0EH,0FH
|
||||||
|
DB 41H,00H,0FH,00H,00H
|
||||||
|
db 00,00
|
||||||
|
|
||||||
;640*400 16 couleurs
|
;640*400 16 couleurs
|
||||||
mode6 DB 63H, 00H, 03H,01H,0FH,00H,0EH
|
mode8 DB 63H, 00H, 03H,01H,0FH,00H,0EH
|
||||||
DB 5FH,4FH,50H,82H,54H,80H,0BFH,1FH,00H,41H,00H,00H,00H,00H,00H,00H
|
DB 5FH,4FH,50H,82H,54H,80H,0BFH,1FH,00H,41H,00H,00H,00H,00H,00H,00H
|
||||||
DB 9CH,0EH,8FH,28H,40H,96H,0B9H,0A3H,0FFH
|
DB 9CH,0EH,8FH,28H,40H,96H,0B9H,0A3H,0FFH
|
||||||
DB 00H,00H,00H,00H,00H,10H,05H,0FH,0FFH
|
DB 00H,00H,00H,00H,00H,10H,05H,0FH,0FFH
|
||||||
|
@ -241,7 +301,7 @@ mode6 DB 63H, 00H, 03H,01H,0FH,00H,0EH
|
||||||
db 00,00
|
db 00,00
|
||||||
|
|
||||||
;640*400 256 couleurs
|
;640*400 256 couleurs
|
||||||
mode7 DB 63H, 00H, 03H,01H,0FH,00H,0EH
|
mode9 DB 63H, 00H, 03H,01H,0FH,00H,0EH
|
||||||
DB 2DH,27H,27H,91H,2AH,9FH,0BFH,1FH,00H,0C0H,00H,00H,00H,00H,00H,00H
|
DB 2DH,27H,27H,91H,2AH,9FH,0BFH,1FH,00H,0C0H,00H,00H,00H,00H,00H,00H
|
||||||
DB 9CH,0EH,8FH,50H,00H,8FH,0C0H,0E3H,0FFH
|
DB 9CH,0EH,8FH,50H,00H,8FH,0C0H,0E3H,0FFH
|
||||||
DB 00H,00H,00H,00H,00H,40H,05H,0FH,0FFH
|
DB 00H,00H,00H,00H,00H,40H,05H,0FH,0FFH
|
||||||
|
@ -453,6 +513,7 @@ mov bl,cs:y
|
||||||
xor bh,bh
|
xor bh,bh
|
||||||
mov cl,cs:lines
|
mov cl,cs:lines
|
||||||
dec cl
|
dec cl
|
||||||
|
dec cl
|
||||||
cmp bl,cl
|
cmp bl,cl
|
||||||
jne scro
|
jne scro
|
||||||
dec bl
|
dec bl
|
||||||
|
@ -572,6 +633,19 @@ SaveScreen:
|
||||||
pop es ds di si cx
|
pop es ds di si cx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
;===================================sauve l'ecran rapidement en es:di================
|
||||||
|
SaveScreento:
|
||||||
|
push cx si di ds
|
||||||
|
mov cx,0B800H
|
||||||
|
mov ds,cx
|
||||||
|
mov cx,cs:pagesize
|
||||||
|
shr cx,2
|
||||||
|
xor si,si
|
||||||
|
cld
|
||||||
|
rep movsd
|
||||||
|
pop ds di si cx
|
||||||
|
ret
|
||||||
|
|
||||||
;===================================sauve l'ecran rapidement================
|
;===================================sauve l'ecran rapidement================
|
||||||
Savepage1:
|
Savepage1:
|
||||||
push cx si di ds es
|
push cx si di ds es
|
||||||
|
@ -604,6 +678,19 @@ RestoreScreen:
|
||||||
pop es ds di si cx
|
pop es ds di si cx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
;===================================restore l'ecran rapidement de ds:si================
|
||||||
|
RestoreScreenfrom:
|
||||||
|
push cx si di ds es
|
||||||
|
mov cx,0B800H
|
||||||
|
mov es,cx
|
||||||
|
mov cx,cs:pagesize
|
||||||
|
shr cx,2
|
||||||
|
xor di,di
|
||||||
|
cld
|
||||||
|
rep movsd
|
||||||
|
pop es ds di si cx
|
||||||
|
ret
|
||||||
|
|
||||||
;===============================Page2to1============================
|
;===============================Page2to1============================
|
||||||
Page2to1:
|
Page2to1:
|
||||||
push cx si di ds es
|
push cx si di ds es
|
||||||
|
@ -912,6 +999,392 @@ rep movsb
|
||||||
pop ds di si cx
|
pop ds di si cx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
clearscr:
|
||||||
|
push eax cx
|
||||||
|
mov cx,320*200/4
|
||||||
|
mov eax,0
|
||||||
|
rep movsd
|
||||||
|
pop cx eax
|
||||||
|
|
||||||
|
loadbmp:
|
||||||
|
push ax bx cx dx bp ds
|
||||||
|
mov ax,ds:[18]
|
||||||
|
mov si,ax
|
||||||
|
shr ax,2
|
||||||
|
and si,11b
|
||||||
|
cmp si,0
|
||||||
|
je is4x
|
||||||
|
add ax,1
|
||||||
|
is4x:
|
||||||
|
mov cs:sizeh,ax
|
||||||
|
mov ax,ds:[22]
|
||||||
|
mov cs:sizev,ax
|
||||||
|
mov di,0FFFFh-1024
|
||||||
|
mov si,54
|
||||||
|
mov cl, 0ffh
|
||||||
|
paletteload:
|
||||||
|
lodsb
|
||||||
|
shr al, 2
|
||||||
|
mov [di+2], al
|
||||||
|
lodsb
|
||||||
|
shr al, 2
|
||||||
|
mov [di+1], al
|
||||||
|
lodsb
|
||||||
|
shr al, 2
|
||||||
|
mov [di+0], al
|
||||||
|
inc si
|
||||||
|
add di, 3
|
||||||
|
dec cl
|
||||||
|
jnz paletteload
|
||||||
|
mov si,0FFFFh-1024
|
||||||
|
mov dx, 3c8h
|
||||||
|
cld
|
||||||
|
mov cl, 0ffh
|
||||||
|
xor bx, bx
|
||||||
|
palettemake:
|
||||||
|
mov al, bl
|
||||||
|
out dx, al
|
||||||
|
inc dx
|
||||||
|
lodsb
|
||||||
|
out dx, al
|
||||||
|
lodsb
|
||||||
|
out dx, al
|
||||||
|
lodsb
|
||||||
|
out dx, al
|
||||||
|
dec dx
|
||||||
|
inc bl
|
||||||
|
dec cl
|
||||||
|
jnz palettemake
|
||||||
|
pop ds bp dx cx bx ax
|
||||||
|
ret
|
||||||
|
sizeh dw 0
|
||||||
|
sizev dw 0
|
||||||
|
|
||||||
|
showbmp:
|
||||||
|
push ax bx cx dx si di ds es
|
||||||
|
mov dx,cs:sizev
|
||||||
|
add bx,dx
|
||||||
|
mov di,cx
|
||||||
|
mov ax,bx
|
||||||
|
shl ax,6
|
||||||
|
shl bx,8
|
||||||
|
add di,bx
|
||||||
|
add di,ax
|
||||||
|
mov bx,di
|
||||||
|
mov ax,0A000H
|
||||||
|
mov es,ax
|
||||||
|
mov si,1024+54
|
||||||
|
mov ax,cs:sizeh
|
||||||
|
bouclebmp:
|
||||||
|
cmp di,64000
|
||||||
|
jae nopp
|
||||||
|
cld
|
||||||
|
rep movsd
|
||||||
|
no:
|
||||||
|
mov cx,ax
|
||||||
|
sub bx,320
|
||||||
|
mov di,bx
|
||||||
|
dec dx
|
||||||
|
jnz bouclebmp
|
||||||
|
fin:
|
||||||
|
pop es ds di si dx cx bx ax
|
||||||
|
ret
|
||||||
|
nopp:
|
||||||
|
shl cx,2
|
||||||
|
add si,cx
|
||||||
|
jmp no
|
||||||
|
|
||||||
|
fire:
|
||||||
|
push ax cx dx si di
|
||||||
|
xor si,si
|
||||||
|
xor di,di
|
||||||
|
mov cx,64000
|
||||||
|
makefire:
|
||||||
|
xor ax,ax
|
||||||
|
mov al,[si]
|
||||||
|
add al,[si+321]
|
||||||
|
adc ah,0
|
||||||
|
add al,[si-321]
|
||||||
|
adc ah,0
|
||||||
|
add al,[si+320]
|
||||||
|
adc ah,0
|
||||||
|
shr ax,2
|
||||||
|
cmp al,191
|
||||||
|
jb pp
|
||||||
|
mov al,191
|
||||||
|
pp:
|
||||||
|
cmp al,0
|
||||||
|
je p
|
||||||
|
dec ax
|
||||||
|
p:
|
||||||
|
mov es:[di],al
|
||||||
|
inc si
|
||||||
|
inc di
|
||||||
|
dec cx
|
||||||
|
jnz makefire
|
||||||
|
pop di si dx cx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
fireflamme:
|
||||||
|
push ax cx dx si di
|
||||||
|
xor si,si
|
||||||
|
xor di,di
|
||||||
|
mov cx,64000
|
||||||
|
makefire2:
|
||||||
|
xor ax,ax
|
||||||
|
mov al,[si]
|
||||||
|
add al,[si+1]
|
||||||
|
adc ah,0
|
||||||
|
add al,[si-1]
|
||||||
|
adc ah,0
|
||||||
|
add al,[si+320]
|
||||||
|
adc ah,0
|
||||||
|
shr ax,2
|
||||||
|
cmp al,191
|
||||||
|
jb ppp
|
||||||
|
mov al,191
|
||||||
|
ppp:
|
||||||
|
cmp al,0
|
||||||
|
je pppp
|
||||||
|
dec ax
|
||||||
|
pppp:
|
||||||
|
mov es:[di],al
|
||||||
|
inc si
|
||||||
|
inc di
|
||||||
|
dec cx
|
||||||
|
jnz makefire2
|
||||||
|
pop di si dx cx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
gauss:
|
||||||
|
push ax cx dx si di
|
||||||
|
xor si,si
|
||||||
|
xor di,di
|
||||||
|
mov cx,64000
|
||||||
|
makegauss:
|
||||||
|
xor ax,ax
|
||||||
|
mov al,[si+1]
|
||||||
|
add al,[si-1]
|
||||||
|
adc ah,0
|
||||||
|
add al,[si+321]
|
||||||
|
adc ah,0
|
||||||
|
add al,[si+320]
|
||||||
|
adc ah,0
|
||||||
|
add al,[si+319]
|
||||||
|
adc ah,0
|
||||||
|
add al,[si-321]
|
||||||
|
adc ah,0
|
||||||
|
add al,[si-320]
|
||||||
|
adc ah,0
|
||||||
|
add al,[si-319]
|
||||||
|
adc ah,0
|
||||||
|
shr ax,3
|
||||||
|
mov es:[di],al
|
||||||
|
inc si
|
||||||
|
inc di
|
||||||
|
dec cx
|
||||||
|
jnz makegauss
|
||||||
|
pop di si dx cx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
lowgauss:
|
||||||
|
push ax cx dx si di
|
||||||
|
xor si,si
|
||||||
|
xor di,di
|
||||||
|
mov cx,64000
|
||||||
|
makegausss:
|
||||||
|
xor ax,ax
|
||||||
|
mov al,[si+1]
|
||||||
|
add al,[si-1]
|
||||||
|
adc ah,0
|
||||||
|
add al,[si+320]
|
||||||
|
adc ah,0
|
||||||
|
add al,[si-320]
|
||||||
|
adc ah,0
|
||||||
|
shr ax,2
|
||||||
|
mov es:[di],al
|
||||||
|
inc si
|
||||||
|
inc di
|
||||||
|
dec cx
|
||||||
|
jnz makegausss
|
||||||
|
pop di si dx cx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
firepalett:
|
||||||
|
push ax cx dx
|
||||||
|
mov dx,03C8h
|
||||||
|
xor ax,ax
|
||||||
|
out dx,al
|
||||||
|
inc dx
|
||||||
|
mov cx,64
|
||||||
|
rouge1:
|
||||||
|
out dx,al
|
||||||
|
push ax
|
||||||
|
xor al,al
|
||||||
|
out dx,al
|
||||||
|
out dx,al
|
||||||
|
pop ax
|
||||||
|
inc ax
|
||||||
|
loop rouge1
|
||||||
|
mov cx,64
|
||||||
|
jaune1:
|
||||||
|
push ax
|
||||||
|
mov al,63
|
||||||
|
out dx,al
|
||||||
|
pop ax
|
||||||
|
out dx,al
|
||||||
|
push ax
|
||||||
|
xor al,al
|
||||||
|
out dx,al
|
||||||
|
pop ax
|
||||||
|
inc ax
|
||||||
|
loop jaune1
|
||||||
|
mov cx,63
|
||||||
|
blanc1:
|
||||||
|
push ax
|
||||||
|
mov al,63
|
||||||
|
out dx,al
|
||||||
|
out dx,al
|
||||||
|
pop ax
|
||||||
|
out dx,al
|
||||||
|
loop blanc1
|
||||||
|
pop dx cx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
allfirepalett:
|
||||||
|
push ax cx dx
|
||||||
|
mov dx,03C8h
|
||||||
|
xor ax,ax
|
||||||
|
out dx,al
|
||||||
|
inc dx
|
||||||
|
mov cx,64
|
||||||
|
rouge:
|
||||||
|
push ax
|
||||||
|
shr ax,1
|
||||||
|
out dx,al
|
||||||
|
xor al,al
|
||||||
|
out dx,al
|
||||||
|
out dx,al
|
||||||
|
pop ax
|
||||||
|
inc ax
|
||||||
|
loop rouge
|
||||||
|
mov cx,64
|
||||||
|
rouge2:
|
||||||
|
push ax
|
||||||
|
shr ax,1
|
||||||
|
out dx,al
|
||||||
|
xor al,al
|
||||||
|
out dx,al
|
||||||
|
out dx,al
|
||||||
|
pop ax
|
||||||
|
inc ax
|
||||||
|
loop rouge2
|
||||||
|
mov cx,64
|
||||||
|
Jaune:
|
||||||
|
push ax
|
||||||
|
mov al,63
|
||||||
|
out dx,al
|
||||||
|
pop ax
|
||||||
|
out dx,al
|
||||||
|
push ax
|
||||||
|
xor al,al
|
||||||
|
out dx,al
|
||||||
|
pop ax
|
||||||
|
inc ax
|
||||||
|
loop jaune
|
||||||
|
mov cx,64
|
||||||
|
blanc:
|
||||||
|
push ax
|
||||||
|
mov al,63
|
||||||
|
out dx,al
|
||||||
|
out dx,al
|
||||||
|
pop ax
|
||||||
|
out dx,al
|
||||||
|
loop blanc
|
||||||
|
pop dx cx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
gaussscreen:
|
||||||
|
push ax ds es
|
||||||
|
mov ax,0A000h
|
||||||
|
mov ds,ax
|
||||||
|
push fs
|
||||||
|
pop es
|
||||||
|
call gauss
|
||||||
|
push ds
|
||||||
|
pop es
|
||||||
|
push fs
|
||||||
|
pop ds
|
||||||
|
call Copyscreen
|
||||||
|
pop es ds ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
lowgaussscreen:
|
||||||
|
push ax ds es
|
||||||
|
mov ax,0A000h
|
||||||
|
mov ds,ax
|
||||||
|
push fs
|
||||||
|
pop es
|
||||||
|
call lowgauss
|
||||||
|
push ds
|
||||||
|
pop es
|
||||||
|
push fs
|
||||||
|
pop ds
|
||||||
|
call Copyscreen
|
||||||
|
pop es ds ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
firescreen:
|
||||||
|
push ax ds es
|
||||||
|
mov ax,0A000h
|
||||||
|
mov ds,ax
|
||||||
|
push fs
|
||||||
|
pop es
|
||||||
|
call fire
|
||||||
|
push ds
|
||||||
|
pop es
|
||||||
|
push fs
|
||||||
|
pop ds
|
||||||
|
call Copyscreen
|
||||||
|
pop es ds ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
copyscreen:
|
||||||
|
push si di cx
|
||||||
|
xor si,si
|
||||||
|
xor di,di
|
||||||
|
mov cx,64000/4
|
||||||
|
rep movsd
|
||||||
|
pop cx di si
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Sauve l'‚tat de la carte en es:di
|
||||||
|
savestate:
|
||||||
|
push cx si di ds
|
||||||
|
push cs
|
||||||
|
pop ds
|
||||||
|
mov cx,10
|
||||||
|
mov si,offset lines
|
||||||
|
cld
|
||||||
|
rep movsb
|
||||||
|
call savescreento
|
||||||
|
pop ds di si cx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;R‚cupŠre l'‚tat de la carte en ds:si
|
||||||
|
restorestate:
|
||||||
|
push cx si di es
|
||||||
|
push cs
|
||||||
|
pop es
|
||||||
|
mov cx,10
|
||||||
|
mov di,offset lines
|
||||||
|
cld
|
||||||
|
rep movsb
|
||||||
|
call restorescreenfrom
|
||||||
|
pop es di si cx
|
||||||
|
ret
|
||||||
|
|
||||||
lines db 0
|
lines db 0
|
||||||
columns db 0
|
columns db 0
|
||||||
x db 0
|
x db 0
|
||||||
|
@ -923,7 +1396,7 @@ pagesize dw 0
|
||||||
font equ $
|
font equ $
|
||||||
copy equ $+4000
|
copy equ $+4000
|
||||||
copy2 equ $+8000
|
copy2 equ $+8000
|
||||||
|
dac equ $+12000
|
||||||
endofme equ $ +12000
|
endofme equ $ +12768
|
||||||
|
|
||||||
end start
|
end start
|
||||||
|
|
Loading…
Reference in New Issue