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"=="lpt" goto system
|
||||
if "%1"=="keyboard" goto system
|
||||
if "%1"=="mouse" goto system
|
||||
if "%1"=="pic8259a" goto system
|
||||
if "%1"=="timer" goto system
|
||||
if "%1"=="drive" 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
|
16
boot.asm
16
boot.asm
|
@ -8,17 +8,17 @@ start:
|
|||
jmp boot
|
||||
|
||||
|
||||
bootdb db 'COS2000A' ;ID Formatage
|
||||
bootdb db 'COS2000A' ;Fabricant + n°série Formatage
|
||||
sizec dw 512 ;octet/secteur
|
||||
db 1 ;secteur/cluster
|
||||
reserv dw 1 ;secteur reserv‚
|
||||
nbfat db 1 ;nb de FAT
|
||||
nbfit dw 25 ;nb secteur rep racine
|
||||
allclu dw 2880 ;nb secteur du volume
|
||||
db 0F0h ;ID support
|
||||
fatsize dw 12 ;secteur/FAT
|
||||
nbfat db 1 ;nb de copie de la FAT
|
||||
nbfit dw 25 ;taille rep racine
|
||||
allclu dw 2880 ;nb secteur du volume si < 32 még
|
||||
db 0F0h ;Descripteur de média
|
||||
fatsize dw 12 ;secteur/FAT
|
||||
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
|
||||
dd 0 ;si nbsecteur = 0 nbsect ; the number of sectors
|
||||
bootdrv db 0 ;Lecteur de d‚marrage
|
||||
|
@ -119,7 +119,7 @@ oksystem:
|
|||
mov si,offset syst
|
||||
call showstr
|
||||
mov cx,[di+BX+26]
|
||||
mov bx,1000h
|
||||
mov bx,200h
|
||||
mov es,bx
|
||||
push bx
|
||||
mov bx,0100h
|
||||
|
|
174
drive.asm
174
drive.asm
|
@ -5,6 +5,7 @@ smart
|
|||
|
||||
org 0100h
|
||||
|
||||
|
||||
start:
|
||||
jmp tsr
|
||||
db 'DRIVE'
|
||||
|
@ -47,10 +48,12 @@ tables dw readsector
|
|||
dw verifysector2
|
||||
dw loadfatway
|
||||
dw loadfile
|
||||
dw compressrle
|
||||
dw decompressrle
|
||||
|
||||
;cx entr‚e -> fatway chemin
|
||||
getfatway:
|
||||
push bx cx es
|
||||
push bx cx
|
||||
mov bx,offset fatway
|
||||
fatagain:
|
||||
mov cs:[bx],cx
|
||||
|
@ -60,48 +63,50 @@ jae finishload
|
|||
call getfat
|
||||
jnc fatagain
|
||||
finishload:
|
||||
pop es cx bx
|
||||
pop cx bx
|
||||
ret
|
||||
|
||||
;Charge le fichier de chemin cx
|
||||
;Charge le fichier de chemin cx -> taille dx
|
||||
loadfatway:
|
||||
push ax bx cx di
|
||||
push ax bx cx di
|
||||
call getfatway
|
||||
jc endload
|
||||
mov di,offset fatway
|
||||
xor dx,dx
|
||||
loadagain:
|
||||
mov cx,cs:[di]
|
||||
cmp cx,0FFF0h
|
||||
jae endload
|
||||
add di,2
|
||||
xor al,al
|
||||
mov al,1
|
||||
call readsector
|
||||
jc endload
|
||||
add bx,cs:sizec
|
||||
add dx,cs:sizec
|
||||
jmp loadagain
|
||||
endload:
|
||||
pop di cx bx ax
|
||||
ret
|
||||
|
||||
sizec dw 512
|
||||
reserv dw 1
|
||||
|
||||
;<-cx nøsecteur ->cx code FAT
|
||||
getfat:
|
||||
push es ax bx dx
|
||||
mov ax,cx
|
||||
xor dx,dx
|
||||
div cs:sizec
|
||||
mov cx,ax
|
||||
add cx,cs:reserv
|
||||
mov bx,offset buffer
|
||||
push cs
|
||||
pop ds
|
||||
push cs
|
||||
pop es
|
||||
mov ax,cx
|
||||
xor dx,dx
|
||||
div sizec
|
||||
mov cx,ax
|
||||
add cx,reserv
|
||||
mov bx,offset buffer
|
||||
call readsector
|
||||
jc errorgetfat
|
||||
shl dx,1
|
||||
add bx,dx
|
||||
mov cx,cs:[bx]
|
||||
mov cx,[bx]
|
||||
errorgetfat:
|
||||
pop dx bx ax es
|
||||
ret
|
||||
|
@ -140,7 +145,7 @@ TryAgain:
|
|||
jnc Done
|
||||
dec SI
|
||||
jnz TryAgain
|
||||
mov word ptr cs:lastread,0ffffh
|
||||
mov word ptr cs:lastread,0ffffh
|
||||
Done:
|
||||
pop si dx cx ax
|
||||
ret
|
||||
|
@ -176,7 +181,7 @@ TryAgain2:
|
|||
int 13h
|
||||
jnc Done2
|
||||
dec SI
|
||||
jnz TryAgain2
|
||||
jnz TryAgain2
|
||||
Done2:
|
||||
pop si dx cx ax
|
||||
ret
|
||||
|
@ -229,27 +234,32 @@ or byte ptr [bp+6],10b
|
|||
nook:
|
||||
ret
|
||||
|
||||
;Charge le fichier Ds:si en es:di
|
||||
;Charge le fichier Ds:si en es:di taille-> cx
|
||||
loadfile:
|
||||
push bx cx
|
||||
push bx
|
||||
call searchfile
|
||||
jc errorloadfile
|
||||
mov bx,di
|
||||
call loadfatway
|
||||
pop cx bx
|
||||
ret
|
||||
mov cx,dx
|
||||
errorloadfile:
|
||||
pop bx
|
||||
ret
|
||||
|
||||
;Recherche le fichier et retourne sont path et en cx sont debut
|
||||
Searchfile:
|
||||
push bx dx si di ds es
|
||||
push cs
|
||||
pop es
|
||||
xor dx,dx
|
||||
mov di,offset temp
|
||||
call asciiztofit
|
||||
mov bx,offset buffer
|
||||
push cs
|
||||
pop ds
|
||||
mov cx,13
|
||||
check:
|
||||
mov al,1
|
||||
mov bx,offset buffer
|
||||
call readsector
|
||||
jc errorboot
|
||||
xor di,di
|
||||
|
@ -261,6 +271,7 @@ mov si,di
|
|||
add si,bx
|
||||
mov di,offset temp
|
||||
mov cx,12+4
|
||||
cld
|
||||
rep cmpsb
|
||||
pop cx di si
|
||||
je oksystem
|
||||
|
@ -274,7 +285,11 @@ inc cx
|
|||
jmp Check
|
||||
oksystem:
|
||||
mov cx,[di+BX+26]
|
||||
cld
|
||||
jmp goodboot
|
||||
errorboot:
|
||||
stc
|
||||
goodboot:
|
||||
pop es ds di si dx bx
|
||||
ret
|
||||
|
||||
|
@ -345,15 +360,15 @@ isSystchar:
|
|||
push di
|
||||
mov di,offset exeptchar
|
||||
isexcept:
|
||||
cmp al,[di]
|
||||
cmp al,cs:[di]
|
||||
je nogood
|
||||
inc di
|
||||
cmp byte ptr [di],0
|
||||
cmp byte ptr cs:[di],0
|
||||
jne isexcept
|
||||
endanal:
|
||||
pop di
|
||||
clc
|
||||
pop di
|
||||
ret
|
||||
exeptchar db '/\<>:|.',01,0,0
|
||||
nogood:
|
||||
stc
|
||||
jmp endanal
|
||||
|
@ -380,19 +395,110 @@ clc
|
|||
pop ax cx di si
|
||||
ret
|
||||
|
||||
nbfit equ 255
|
||||
;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
|
||||
namesize equ 12
|
||||
extsize equ 5
|
||||
|
||||
|
||||
temp db 12+5+1 dup (0)
|
||||
|
||||
exeptchar db '/\<>:|.',01,0,0
|
||||
temp db 12+5+1+90 dup (0)
|
||||
DiskSectorsPerTrack dw 18
|
||||
DiskTracksPerHead dw 80
|
||||
DiskHeads dw 2
|
||||
|
||||
fatway equ $
|
||||
|
||||
buffer equ $+3000
|
||||
sizec dw 512
|
||||
reserv dw 1
|
||||
buffer equ $
|
||||
buffer2 equ $+512
|
||||
fatway equ $+512
|
||||
|
||||
end start
|
||||
|
|
77
editor.asm
77
editor.asm
|
@ -367,83 +367,6 @@ pope db 'VUE ',0
|
|||
spaces db ' ³ ',0
|
||||
|
||||
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
|
||||
infos db 10 dup (0)
|
||||
end start
|
||||
|
|
121
keyboard.asm
121
keyboard.asm
|
@ -15,63 +15,71 @@ tsr:
|
|||
db 2eh,0ffh,1eh
|
||||
dw offsets
|
||||
cli
|
||||
pusha
|
||||
mov cs:feax,eax
|
||||
in al,60h
|
||||
cmp cs:isstate,1
|
||||
jne nostate
|
||||
cmp al,57
|
||||
jne nof12
|
||||
jne endof
|
||||
mov cs:isstate,0
|
||||
jmp noF12
|
||||
jmp endof
|
||||
nostate:
|
||||
cmp al,87
|
||||
jne NoF11
|
||||
push es
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset infos
|
||||
mov ah,34
|
||||
int 47h
|
||||
mov al,cs:infos+7
|
||||
inc al
|
||||
and ax,111b
|
||||
int 47h
|
||||
pop es
|
||||
nof11:
|
||||
je F11
|
||||
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
|
||||
je F12
|
||||
endof:
|
||||
mov eax,cs:feax
|
||||
sti
|
||||
iret
|
||||
isstate db 0
|
||||
infos db 10 dup (0)
|
||||
|
||||
showstate:
|
||||
push ds es
|
||||
push ss
|
||||
F11:
|
||||
push ax di es
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset infos
|
||||
mov ah,34
|
||||
int 47h
|
||||
mov al,cs:infos+7
|
||||
inc al
|
||||
and ax,111b
|
||||
int 47h
|
||||
pop es di ax
|
||||
jmp endof
|
||||
|
||||
|
||||
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
|
||||
pusha
|
||||
push word ptr cs:fip
|
||||
push gs
|
||||
push fs
|
||||
push ss
|
||||
push es
|
||||
push ds
|
||||
push cs
|
||||
pushad
|
||||
pushfd
|
||||
|
||||
push word ptr cs:fcs
|
||||
push dword ptr cs:fesp
|
||||
push ebp
|
||||
push edi
|
||||
push esi
|
||||
push edx
|
||||
push ecx
|
||||
push ebx
|
||||
push eax
|
||||
push dword ptr cs:ffl
|
||||
push cs
|
||||
push cs
|
||||
pop es
|
||||
pop ds
|
||||
mov ah,26
|
||||
int 47h
|
||||
mov ah,2
|
||||
int 47h
|
||||
mov ah,21
|
||||
|
@ -97,16 +105,17 @@ tsr:
|
|||
mov ah,10
|
||||
int 47h
|
||||
mov si,offset regs
|
||||
mov bx,8+6
|
||||
mov bx,8+7
|
||||
mov ah,21
|
||||
mov cl,6
|
||||
int 47h
|
||||
showallREG:
|
||||
mov ah,6
|
||||
int 47h
|
||||
cmp bx,7
|
||||
cmp bx,8
|
||||
jb nodr
|
||||
pop edx
|
||||
mov cx,32
|
||||
jmp popo
|
||||
nodr:
|
||||
mov ah,21
|
||||
|
@ -114,11 +123,11 @@ showallREG:
|
|||
int 47h
|
||||
xor edx,edx
|
||||
pop dx
|
||||
mov cx,16
|
||||
popo:
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,10
|
||||
mov cx,32
|
||||
int 47h
|
||||
mov ah,5
|
||||
int 47h
|
||||
|
@ -153,27 +162,43 @@ showallREG:
|
|||
dec di
|
||||
mov cl,116
|
||||
int 47h
|
||||
pop es ds
|
||||
sti
|
||||
waitt:
|
||||
cmp cs:isstate,0
|
||||
jne waitt
|
||||
mov ah,27
|
||||
int 47h
|
||||
popa
|
||||
pop es ds
|
||||
ret
|
||||
push dword ptr cs:ffl
|
||||
push word ptr cs:fcs
|
||||
push word ptr cs:fip
|
||||
jmp endof
|
||||
|
||||
reg db 'State of registers',0
|
||||
fla db 'Flags:',0
|
||||
regs db 'EDI:',0
|
||||
reg db ' State of registers',0
|
||||
fla db 'Eflags:',0
|
||||
regs db 'EAX:',0
|
||||
db 'EBX:',0
|
||||
db 'ECX:',0
|
||||
db 'EDX:',0
|
||||
db 'ESI:',0
|
||||
db 'EDI:',0
|
||||
db 'EBP:',0
|
||||
db 'ESP:',0
|
||||
db 'EBX:',0
|
||||
db 'EDX:',0
|
||||
db 'ECX:',0
|
||||
db 'EAX:',0
|
||||
db ' CS:',0
|
||||
db ' DS:',0
|
||||
db ' ES:',0
|
||||
db ' FS:',0
|
||||
db ' GS:',0
|
||||
db ' SS:',0
|
||||
db ' IP:',0
|
||||
gr db '(',0
|
||||
dr db ')',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
|
||||
|
|
154
logo.asm
154
logo.asm
|
@ -17,146 +17,28 @@ mov bx,5000h
|
|||
mov es,bx
|
||||
xor si,si
|
||||
xor di,di
|
||||
xor bx,bx
|
||||
call DecompressRle
|
||||
mov ah,6
|
||||
int 48h
|
||||
push es
|
||||
pop ds
|
||||
call loadbmp
|
||||
xor ax,ax
|
||||
mov ax,0006h
|
||||
int 47h
|
||||
mov ah,38
|
||||
int 47h
|
||||
mov ah,35
|
||||
int 47h
|
||||
mov ah,37
|
||||
int 47h
|
||||
xor cx,cx
|
||||
xor bx,bx
|
||||
call showbmp
|
||||
mov ah,36
|
||||
int 47h
|
||||
mov ax,0
|
||||
int 16h
|
||||
db 0CBH
|
||||
|
||||
loadbmp:
|
||||
push ax bx cx dx bp ds
|
||||
mov ax,6
|
||||
int 47h
|
||||
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 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
|
||||
|
||||
mov ah,39
|
||||
int 47h
|
||||
mov ax,0004
|
||||
int 47h
|
||||
db 0CBH
|
||||
logo db 'cos.rip',0
|
||||
end start
|
||||
|
|
217
lpt.asm
217
lpt.asm
|
@ -5,7 +5,7 @@ smart
|
|||
org 0100h
|
||||
start:
|
||||
jmp tsr
|
||||
db 'LPT'
|
||||
drv db 'LPT ',0
|
||||
Tsr:
|
||||
cli
|
||||
cmp ax,1234h
|
||||
|
@ -13,7 +13,17 @@ jne nomore
|
|||
mov ax,4321h
|
||||
jmp itsok
|
||||
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
|
||||
xor bh,bh
|
||||
shl bx,1
|
||||
|
@ -37,8 +47,12 @@ 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
|
||||
|
@ -59,6 +73,127 @@ tables dw getlptin
|
|||
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
|
||||
|
@ -84,31 +219,63 @@ 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 es
|
||||
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]
|
||||
pop es di cx bx ax
|
||||
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]
|
||||
|
@ -119,6 +286,30 @@ 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
|
||||
|
@ -130,18 +321,12 @@ onesec equ 18
|
|||
tensec equ 182
|
||||
Ack equ 00
|
||||
Nack equ 0FFh
|
||||
maxtry equ 10
|
||||
tokenstart equ 0
|
||||
tokennext equ 1
|
||||
tokenstop equ 2
|
||||
tokenbad equ 3
|
||||
tokenresend equ 4
|
||||
|
||||
maxtry equ 10
|
||||
|
||||
Initlpt:
|
||||
push ax ecx
|
||||
call StartTimer
|
||||
cmp emettor,0
|
||||
cmp cs:emettor,0
|
||||
je receptinit
|
||||
mov al,10000b
|
||||
call SetLptOut
|
||||
|
@ -269,7 +454,7 @@ Emettor db 0
|
|||
|
||||
SetReceptor:
|
||||
mov cs:Emettor,0
|
||||
ret
|
||||
ret
|
||||
|
||||
;->bx Nøport->Adresse dx
|
||||
GetLpt:
|
||||
|
@ -320,7 +505,6 @@ mov ax,Bios
|
|||
mov ds,ax
|
||||
mov ecx,ds:[timer]
|
||||
sub ecx,cs:times
|
||||
mov ecx,0
|
||||
pop ds ax
|
||||
ret
|
||||
|
||||
|
@ -510,5 +694,6 @@ mov bl,ah
|
|||
xor bh,bh
|
||||
cmp bp,bx
|
||||
pop bp si dx bx
|
||||
ret
|
||||
ret
|
||||
video db 0
|
||||
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:
|
||||
mov si,offset video
|
||||
mov bx,8400h
|
||||
mov bx,400h
|
||||
mov ax,47h
|
||||
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 bx,7800h
|
||||
mov bx,900h
|
||||
mov ax,8h
|
||||
call replacehandler
|
||||
mov si,offset pic
|
||||
mov bx,950h
|
||||
mov ax,50h
|
||||
call installhandler
|
||||
mov si,offset drive
|
||||
mov bx,9000h
|
||||
mov bx,1020h
|
||||
mov ax,48h
|
||||
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:
|
||||
push cs
|
||||
push cs
|
||||
|
@ -398,6 +454,7 @@ ret
|
|||
;Recherchele fichier et retourne sont path et en cx sont debut
|
||||
Searchfile:
|
||||
push bx dx si di ds es
|
||||
xor dx,dx
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset temp
|
||||
|
@ -540,6 +597,8 @@ extsize equ 5
|
|||
|
||||
|
||||
nbfit equ 255
|
||||
mouse db 'mouse.sys',0
|
||||
pic db 'pic8259a.sys',0
|
||||
drive db 'drive.sys',0
|
||||
timer db 'timer.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 es,ax
|
||||
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
|
||||
sti
|
||||
iret
|
||||
|
|
495
video.asm
495
video.asm
|
@ -77,6 +77,58 @@ tables dw setvideomode
|
|||
dw changelineattr
|
||||
dw waitretrace
|
||||
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
|
||||
changefont:
|
||||
|
@ -186,7 +238,7 @@ mode1 DB 67H,00H, 03H,00H,03H,00H,02H
|
|||
db 80,25
|
||||
|
||||
;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 00H,9CH,8EH,8FH,28H,1FH,96H,0B9H,0A3H,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
|
||||
|
||||
;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 00H,0E7H,8EH,0DFH,32H,1FH,0DFH,0E5H,0A3H,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 100,60
|
||||
|
||||
|
||||
;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 9CH,8EH,8FH,14H,00H,96H,0B9H,0E3H,0FFH
|
||||
DB 00H,00H,00H,00H,00H,00H,05H,0FH,0FFH
|
||||
|
@ -222,8 +273,8 @@ mode4 DB 63H,00H, 03H,09H,0FH,00H,06H
|
|||
DB 41H,00H,0FH,00H,00H
|
||||
db 40,25
|
||||
|
||||
;320*200 256 couleurs
|
||||
mode5 DB 63H, 00H, 03H,01H,0FH,00H,0EH
|
||||
;320*200 256 couleurs
|
||||
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 9CH,0EH,8FH,28H,40H,96H,0B9H,0A3H,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 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
|
||||
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 9CH,0EH,8FH,28H,40H,96H,0B9H,0A3H,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
|
||||
|
||||
;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 9CH,0EH,8FH,50H,00H,8FH,0C0H,0E3H,0FFH
|
||||
DB 00H,00H,00H,00H,00H,40H,05H,0FH,0FFH
|
||||
|
@ -368,7 +428,7 @@ out dx,ax
|
|||
inc al
|
||||
inc di
|
||||
cmp al,9
|
||||
jb initgraphic
|
||||
jb initgraphic
|
||||
mov dx,statut
|
||||
in al,dx
|
||||
mov dx,attribs
|
||||
|
@ -453,6 +513,7 @@ mov bl,cs:y
|
|||
xor bh,bh
|
||||
mov cl,cs:lines
|
||||
dec cl
|
||||
dec cl
|
||||
cmp bl,cl
|
||||
jne scro
|
||||
dec bl
|
||||
|
@ -572,6 +633,19 @@ SaveScreen:
|
|||
pop es ds di si cx
|
||||
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================
|
||||
Savepage1:
|
||||
push cx si di ds es
|
||||
|
@ -604,6 +678,19 @@ RestoreScreen:
|
|||
pop es ds di si cx
|
||||
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:
|
||||
push cx si di ds es
|
||||
|
@ -912,6 +999,392 @@ rep movsb
|
|||
pop ds di si cx
|
||||
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
|
||||
columns db 0
|
||||
x db 0
|
||||
|
@ -923,7 +1396,7 @@ pagesize dw 0
|
|||
font equ $
|
||||
copy equ $+4000
|
||||
copy2 equ $+8000
|
||||
|
||||
endofme equ $ +12000
|
||||
dac equ $+12000
|
||||
endofme equ $ +12768
|
||||
|
||||
end start
|
||||
|
|
Loading…
Reference in New Issue