feat: ajout de fonction permettant de communiquer avec le port LPT (imprimante) et fonction timer.
This commit is contained in:
parent
4c3f72e0ce
commit
163064bbb7
4
asm.bat
4
asm.bat
|
@ -9,6 +9,10 @@ util\tlink %1.obj /x/t
|
||||||
if errorlevel 1 goto end
|
if errorlevel 1 goto end
|
||||||
echo Copying file %1...
|
echo Copying file %1...
|
||||||
if "%1"=="video" goto video
|
if "%1"=="video" goto video
|
||||||
|
if "%1"=="lpt" goto system
|
||||||
|
if "%1"=="keyboard" goto system
|
||||||
|
if "%1"=="timer" goto system
|
||||||
|
if "%1"=="drive" goto system
|
||||||
if "%1"=="system" goto system
|
if "%1"=="system" goto system
|
||||||
if "%1"=="setup" goto setup
|
if "%1"=="setup" goto setup
|
||||||
copy %1.com ..\data\%1.exe>nul
|
copy %1.com ..\data\%1.exe>nul
|
||||||
|
|
90
disk.asm
90
disk.asm
|
@ -24,7 +24,8 @@ Adres:
|
||||||
pop es
|
pop es
|
||||||
mov cx,sect
|
mov cx,sect
|
||||||
mov bx,offset buffer
|
mov bx,offset buffer
|
||||||
call readsector
|
mov ax,0001h
|
||||||
|
int 48h
|
||||||
jnc noerror
|
jnc noerror
|
||||||
errtr:
|
errtr:
|
||||||
mov ah,25
|
mov ah,25
|
||||||
|
@ -153,7 +154,8 @@ doaline2:
|
||||||
jne suit6
|
jne suit6
|
||||||
mov cx,sect
|
mov cx,sect
|
||||||
mov bx,offset buffer
|
mov bx,offset buffer
|
||||||
call writesector
|
mov ah,1
|
||||||
|
int 48h
|
||||||
jnc waitkey
|
jnc waitkey
|
||||||
jmp errtr
|
jmp errtr
|
||||||
suit6:
|
suit6:
|
||||||
|
@ -189,7 +191,8 @@ waitst:
|
||||||
pop es
|
pop es
|
||||||
mov cx,sect
|
mov cx,sect
|
||||||
mov bx,offset buffer
|
mov bx,offset buffer
|
||||||
call writesector
|
mov ah,1
|
||||||
|
int 48h
|
||||||
jnc adres
|
jnc adres
|
||||||
jmp errtr
|
jmp errtr
|
||||||
tre:
|
tre:
|
||||||
|
@ -356,88 +359,9 @@ pope db 'VIEW ',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
|
|
||||||
oldmode db 0
|
oldmode db 0
|
||||||
DiskSectorsPerTrack dw 18
|
|
||||||
DiskTracksPerHead dw 80
|
|
||||||
DiskHeads dw 2
|
|
||||||
|
|
||||||
infos db 10 dup (0)
|
infos db 10 dup (0)
|
||||||
|
buffer equ $
|
||||||
buffer equ $+4000
|
|
||||||
|
|
||||||
|
|
||||||
end start
|
end start
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,398 @@
|
||||||
|
.model tiny
|
||||||
|
.486
|
||||||
|
smart
|
||||||
|
.code
|
||||||
|
|
||||||
|
org 0100h
|
||||||
|
|
||||||
|
start:
|
||||||
|
jmp tsr
|
||||||
|
db 'DRIVE'
|
||||||
|
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 readsector
|
||||||
|
dw writesector
|
||||||
|
dw verifysector2
|
||||||
|
dw loadfatway
|
||||||
|
dw loadfile
|
||||||
|
|
||||||
|
;cx entr‚e -> fatway chemin
|
||||||
|
getfatway:
|
||||||
|
push bx cx es
|
||||||
|
mov bx,offset fatway
|
||||||
|
fatagain:
|
||||||
|
mov cs:[bx],cx
|
||||||
|
add bx,2
|
||||||
|
cmp cx,0FFF0h
|
||||||
|
jae finishload
|
||||||
|
call getfat
|
||||||
|
jnc fatagain
|
||||||
|
finishload:
|
||||||
|
pop es cx bx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Charge le fichier de chemin cx
|
||||||
|
loadfatway:
|
||||||
|
push ax bx cx di
|
||||||
|
call getfatway
|
||||||
|
jc endload
|
||||||
|
mov di,offset fatway
|
||||||
|
loadagain:
|
||||||
|
mov cx,cs:[di]
|
||||||
|
cmp cx,0FFF0h
|
||||||
|
jae endload
|
||||||
|
add di,2
|
||||||
|
xor al,al
|
||||||
|
call readsector
|
||||||
|
jc endload
|
||||||
|
add bx,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 es
|
||||||
|
call readsector
|
||||||
|
jc errorgetfat
|
||||||
|
shl dx,1
|
||||||
|
add bx,dx
|
||||||
|
mov cx,cs:[bx]
|
||||||
|
errorgetfat:
|
||||||
|
pop dx bx ax es
|
||||||
|
ret
|
||||||
|
|
||||||
|
ReadSector:
|
||||||
|
push ax cx dx si
|
||||||
|
cmp al,1
|
||||||
|
je pr
|
||||||
|
cmp cx,cs:lastread
|
||||||
|
je done
|
||||||
|
pr:
|
||||||
|
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
|
||||||
|
|
||||||
|
Lastread dw 0FFFFh
|
||||||
|
|
||||||
|
Inverse:
|
||||||
|
mov si,512/4
|
||||||
|
invert:
|
||||||
|
shl si,2
|
||||||
|
not dword ptr [bx+si-4]
|
||||||
|
shr si,2
|
||||||
|
dec si
|
||||||
|
jnz invert
|
||||||
|
ret
|
||||||
|
|
||||||
|
VerifySector:
|
||||||
|
push bx cx si di ds es
|
||||||
|
push cs
|
||||||
|
pop es
|
||||||
|
push cs
|
||||||
|
pop ds
|
||||||
|
mov bx,offset buffer
|
||||||
|
call ReadSector
|
||||||
|
jc errorverify
|
||||||
|
call inverse
|
||||||
|
call WriteSector
|
||||||
|
jc errorverify
|
||||||
|
mov bx,offset buffer2
|
||||||
|
call ReadSector
|
||||||
|
call inverse
|
||||||
|
jc errorverify
|
||||||
|
mov bx,offset buffer
|
||||||
|
call inverse
|
||||||
|
call WriteSector
|
||||||
|
jc errorverify
|
||||||
|
mov cx,512/4
|
||||||
|
mov si,offset buffer
|
||||||
|
mov di,offset buffer2
|
||||||
|
cld
|
||||||
|
rep cmpsd
|
||||||
|
errorverify:
|
||||||
|
pop es ds di si cx bx
|
||||||
|
ret
|
||||||
|
|
||||||
|
VerifySector2:
|
||||||
|
call verifysector
|
||||||
|
jne nook
|
||||||
|
or byte ptr [bp+6],10b
|
||||||
|
nook:
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Charge le fichier Ds:si en es:di
|
||||||
|
loadfile:
|
||||||
|
push bx cx
|
||||||
|
call searchfile
|
||||||
|
mov bx,di
|
||||||
|
call loadfatway
|
||||||
|
pop cx 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
|
||||||
|
mov di,offset temp
|
||||||
|
call asciiztofit
|
||||||
|
mov bx,offset buffer
|
||||||
|
push cs
|
||||||
|
pop ds
|
||||||
|
mov cx,13
|
||||||
|
check:
|
||||||
|
call readsector
|
||||||
|
jc errorboot
|
||||||
|
xor di,di
|
||||||
|
findnext:
|
||||||
|
cmp byte ptr [bx+di],0
|
||||||
|
je errorboot
|
||||||
|
push si di cx
|
||||||
|
mov si,di
|
||||||
|
add si,bx
|
||||||
|
mov di,offset temp
|
||||||
|
mov cx,12+4
|
||||||
|
rep cmpsb
|
||||||
|
pop cx di si
|
||||||
|
je oksystem
|
||||||
|
add di,32
|
||||||
|
inc dx
|
||||||
|
cmp dx,nbfit
|
||||||
|
ja errorboot
|
||||||
|
cmp di,sizec
|
||||||
|
jb findnext
|
||||||
|
inc cx
|
||||||
|
jmp Check
|
||||||
|
oksystem:
|
||||||
|
mov cx,[di+BX+26]
|
||||||
|
errorboot:
|
||||||
|
pop es ds di si dx bx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;->name ds:si ->es:di
|
||||||
|
AsciiZtoFit:
|
||||||
|
push ax bx cx dx si di ds es
|
||||||
|
xor bx,bx
|
||||||
|
mov dx,di
|
||||||
|
noextens:
|
||||||
|
mov al,[si+bx]
|
||||||
|
cmp al,'.'
|
||||||
|
je extens
|
||||||
|
call Issystchar
|
||||||
|
jc errortranslate
|
||||||
|
mov es:[di],al
|
||||||
|
inc di
|
||||||
|
inc bx
|
||||||
|
cmp bx,namesize ;(.)
|
||||||
|
jne noextens
|
||||||
|
erro:
|
||||||
|
stc
|
||||||
|
jmp errortranslate
|
||||||
|
extens:
|
||||||
|
add si,bx
|
||||||
|
inc si
|
||||||
|
sub bx,namesize
|
||||||
|
neg bx
|
||||||
|
mov al,0
|
||||||
|
mov cx,bx
|
||||||
|
cld
|
||||||
|
rep stosb
|
||||||
|
xor bx,bx
|
||||||
|
wasextens:
|
||||||
|
mov al,[si+bx]
|
||||||
|
cmp al,0
|
||||||
|
je endextens
|
||||||
|
call Issystchar
|
||||||
|
jc errortranslate
|
||||||
|
mov es:[di],al
|
||||||
|
inc di
|
||||||
|
inc bx
|
||||||
|
cmp bx,extsize
|
||||||
|
jne wasextens
|
||||||
|
jmp erro
|
||||||
|
endextens:
|
||||||
|
sub bx,extsize
|
||||||
|
neg bx
|
||||||
|
mov al,0
|
||||||
|
mov cx,bx
|
||||||
|
cld
|
||||||
|
rep stosb
|
||||||
|
mov si,dx
|
||||||
|
mov di,dx
|
||||||
|
push es
|
||||||
|
pop ds
|
||||||
|
mov cx,extsize+namesize
|
||||||
|
call uppercaseMEM
|
||||||
|
clc
|
||||||
|
endtranslate:
|
||||||
|
pop es ds di si dx cx bx ax
|
||||||
|
ret
|
||||||
|
errortranslate:
|
||||||
|
stc
|
||||||
|
jmp endtranslate
|
||||||
|
|
||||||
|
;Carry si al = caractŠre systŠme
|
||||||
|
isSystchar:
|
||||||
|
push di
|
||||||
|
mov di,offset exeptchar
|
||||||
|
isexcept:
|
||||||
|
cmp al,[di]
|
||||||
|
je nogood
|
||||||
|
inc di
|
||||||
|
cmp byte ptr [di],0
|
||||||
|
jne isexcept
|
||||||
|
endanal:
|
||||||
|
pop di
|
||||||
|
ret
|
||||||
|
exeptchar db '/\<>:|.',01,0,0
|
||||||
|
nogood:
|
||||||
|
stc
|
||||||
|
jmp endanal
|
||||||
|
|
||||||
|
;Transforme les x caractŠres de la mem en ds:si en maj
|
||||||
|
uppercaseMEM:
|
||||||
|
push si di cx ax
|
||||||
|
mov di,si
|
||||||
|
uppercaser:
|
||||||
|
mov al,ds:[si]
|
||||||
|
inc si
|
||||||
|
cmp al,'A'
|
||||||
|
jb nonmaj
|
||||||
|
cmp al,'Z'
|
||||||
|
ja nonmaj
|
||||||
|
add al,'a'-'A'
|
||||||
|
nonmaj:
|
||||||
|
mov es:[di],al
|
||||||
|
inc di
|
||||||
|
dec cx
|
||||||
|
jnz uppercaser
|
||||||
|
enduppercase:
|
||||||
|
clc
|
||||||
|
pop ax cx di si
|
||||||
|
ret
|
||||||
|
|
||||||
|
nbfit equ 255
|
||||||
|
namesize equ 12
|
||||||
|
extsize equ 5
|
||||||
|
|
||||||
|
|
||||||
|
temp db 12+5+1 dup (0)
|
||||||
|
|
||||||
|
DiskSectorsPerTrack dw 18
|
||||||
|
DiskTracksPerHead dw 80
|
||||||
|
DiskHeads dw 2
|
||||||
|
|
||||||
|
fatway equ $
|
||||||
|
|
||||||
|
buffer equ $+3000
|
||||||
|
buffer2 equ $+512
|
||||||
|
end start
|
237
keyboard.asm
237
keyboard.asm
|
@ -2,83 +2,178 @@
|
||||||
.486
|
.486
|
||||||
smart
|
smart
|
||||||
.code
|
.code
|
||||||
|
|
||||||
org 0100h
|
org 0100h
|
||||||
|
|
||||||
start:
|
start:
|
||||||
mov al,0D0h
|
|
||||||
call keybcmd
|
|
||||||
in al,60h
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
;============= PPI port A (Programmable Peripheral interface) ================
|
|
||||||
;8048 (old XT) 8042 (old AT) 8741 8742 (with PS2 mouse)
|
|
||||||
; R/W
|
|
||||||
;Port 60h : Scancode & keyboarddata
|
|
||||||
overrun equ 000h ;Error too many keys pressed
|
|
||||||
BATend equ 0AAh ;End of the test BAT (basic test assurance)
|
|
||||||
MF2code equ 0ABh ;Code send by MF2 keyboard
|
|
||||||
MF2code2 equ 041h ;Code send by MF2 keyboard
|
|
||||||
echo equ 0EEh ;Send by echo command
|
|
||||||
Ack equ 0FAh ;Send by every comman exept EEh et FEh (Aknoledge)
|
|
||||||
BATerror equ 0FCh ;BAT failed
|
|
||||||
Resend equ 0FEh ;Resend data please
|
|
||||||
Error equ 0FFh ;Error of keyboard
|
|
||||||
|
|
||||||
;Port 60h : command data
|
|
||||||
led equ 0EDh ;set the led like you want
|
|
||||||
echo equ 0EEh ;Echo byte for diagnostic
|
|
||||||
Set equ 0F0h ;Choose the Set of scancode
|
|
||||||
Id equ 0F2h ;Identify the keyboard
|
|
||||||
rate equ 0F3h ;Set the specified typematic rate
|
|
||||||
enable equ 0F4h ;clear buffer and scan
|
|
||||||
reset equ 0F5h ;Reset and no scan
|
|
||||||
reset2 equ 0F6h ;Reset and scan
|
|
||||||
|
|
||||||
;============= PPI port A (Programmable Peripheral interface) ================
|
|
||||||
;8048 (old XT) 8042 (old AT) 8741 8742 (with PS2 mouse)
|
|
||||||
; R/W
|
|
||||||
;Port 61h
|
|
||||||
|
|
||||||
;==================== Data and control keyboard registers ===================
|
|
||||||
;8042 (old AT) 8741 8742 (with PS2 mouse)
|
|
||||||
; R/W
|
|
||||||
;Port 64h
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;Envoie la commande AL aux clavier et si besoin est la donn‚e DL
|
|
||||||
Keybcmd:
|
|
||||||
push ax
|
|
||||||
xchg al,ah
|
|
||||||
xor cx,cx
|
|
||||||
clearbuffer:
|
|
||||||
in al,64h
|
|
||||||
test al,02h
|
|
||||||
loopnz clearbuffer
|
|
||||||
jnz errorkb
|
|
||||||
xchg al,ah
|
|
||||||
out 64h,al
|
|
||||||
clearbuffer2:
|
|
||||||
in al,64h
|
|
||||||
test al,02h
|
|
||||||
loopnz clearbuffer2
|
|
||||||
jnz errorkb
|
|
||||||
cmp dl,0
|
|
||||||
je endkeyb
|
|
||||||
mov al,dl
|
|
||||||
out 60h,al
|
|
||||||
endkeyb:
|
|
||||||
clc
|
|
||||||
pop ax
|
|
||||||
ret
|
|
||||||
errorkb:
|
|
||||||
stc
|
|
||||||
pop ax
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
jmp tsr
|
||||||
|
offsets dd 0
|
||||||
|
db 'KEYBOARD'
|
||||||
|
tsr:
|
||||||
|
pushf
|
||||||
|
db 2eh,0ffh,1eh
|
||||||
|
dw offsets
|
||||||
|
cli
|
||||||
|
pusha
|
||||||
|
in al,60h
|
||||||
|
cmp cs:isstate,1
|
||||||
|
jne nostate
|
||||||
|
cmp al,57
|
||||||
|
jne nof12
|
||||||
|
mov cs:isstate,0
|
||||||
|
jmp noF12
|
||||||
|
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:
|
||||||
|
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:
|
||||||
|
push ds es
|
||||||
|
push ss
|
||||||
|
push gs
|
||||||
|
push fs
|
||||||
|
push es
|
||||||
|
push ds
|
||||||
|
push cs
|
||||||
|
pushad
|
||||||
|
pushfd
|
||||||
|
|
||||||
|
push cs
|
||||||
|
push cs
|
||||||
|
pop es
|
||||||
|
pop ds
|
||||||
|
mov ah,2
|
||||||
|
int 47h
|
||||||
|
mov ah,21
|
||||||
|
mov cl,4
|
||||||
|
int 47h
|
||||||
|
mov ah,13
|
||||||
|
mov si,offset reg
|
||||||
|
int 47h
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
mov ah,21
|
||||||
|
mov cl,7
|
||||||
|
int 47h
|
||||||
|
mov ah,13
|
||||||
|
mov si,offset fla
|
||||||
|
int 47h
|
||||||
|
pop edx
|
||||||
|
mov cx,32
|
||||||
|
mov ah,11
|
||||||
|
int 47h
|
||||||
|
mov ah,5
|
||||||
|
int 47h
|
||||||
|
mov ah,10
|
||||||
|
int 47h
|
||||||
|
mov si,offset regs
|
||||||
|
mov bx,8+6
|
||||||
|
mov ah,21
|
||||||
|
mov cl,6
|
||||||
|
int 47h
|
||||||
|
showallREG:
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
cmp bx,7
|
||||||
|
jb nodr
|
||||||
|
pop edx
|
||||||
|
jmp popo
|
||||||
|
nodr:
|
||||||
|
mov ah,21
|
||||||
|
mov cl,1
|
||||||
|
int 47h
|
||||||
|
xor edx,edx
|
||||||
|
pop dx
|
||||||
|
popo:
|
||||||
|
mov ah,13
|
||||||
|
int 47h
|
||||||
|
mov ah,10
|
||||||
|
mov cx,32
|
||||||
|
int 47h
|
||||||
|
mov ah,5
|
||||||
|
int 47h
|
||||||
|
push si
|
||||||
|
mov si,offset gr
|
||||||
|
mov ah,13
|
||||||
|
int 47h
|
||||||
|
mov ah,8
|
||||||
|
int 47h
|
||||||
|
mov si,offset dr
|
||||||
|
mov ah,13
|
||||||
|
int 47h
|
||||||
|
pop si
|
||||||
|
add si,5
|
||||||
|
dec bx
|
||||||
|
jnz showallreg
|
||||||
|
mov ah,34
|
||||||
|
mov di,offset infos
|
||||||
|
int 47h
|
||||||
|
mov ah,25
|
||||||
|
mov bl,cs:infos
|
||||||
|
xor bh,bh
|
||||||
|
dec bl
|
||||||
|
int 47h
|
||||||
|
mov si,offset app
|
||||||
|
mov ah,13
|
||||||
|
int 47h
|
||||||
|
mov ah,32
|
||||||
|
mov bl,cs:infos
|
||||||
|
xor bh,bh
|
||||||
|
mov di,ax
|
||||||
|
dec di
|
||||||
|
mov cl,116
|
||||||
|
int 47h
|
||||||
|
pop es ds
|
||||||
|
ret
|
||||||
|
|
||||||
|
reg db 'State of registers',0
|
||||||
|
fla db 'Flags:',0
|
||||||
|
regs db 'EDI:',0
|
||||||
|
db 'ESI:',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
|
||||||
|
gr db '(',0
|
||||||
|
dr db ')',0
|
||||||
|
app db 'Press space to quit...',0
|
||||||
|
|
||||||
end start
|
end start
|
||||||
|
|
260
logo.asm
260
logo.asm
|
@ -6,11 +6,11 @@ org 0100h
|
||||||
|
|
||||||
start:
|
start:
|
||||||
mov si,offset logo
|
mov si,offset logo
|
||||||
call searchfile
|
mov ah,4
|
||||||
|
xor di,di
|
||||||
mov bx,6000h
|
mov bx,6000h
|
||||||
mov es,bx
|
mov es,bx
|
||||||
mov bx,0h
|
int 48h
|
||||||
call loadfatway
|
|
||||||
push es
|
push es
|
||||||
pop ds
|
pop ds
|
||||||
mov bx,5000h
|
mov bx,5000h
|
||||||
|
@ -120,202 +120,6 @@ shl cx,2
|
||||||
add si,cx
|
add si,cx
|
||||||
jmp no
|
jmp no
|
||||||
|
|
||||||
Searchfile:
|
|
||||||
push bx dx si di ds es
|
|
||||||
mov di,offset temp
|
|
||||||
mov bx,offset buffer
|
|
||||||
call asciiztofit
|
|
||||||
mov cx,13
|
|
||||||
check:
|
|
||||||
call readsector
|
|
||||||
jc errorboot
|
|
||||||
xor di,di
|
|
||||||
findnext:
|
|
||||||
cmp byte ptr [bx+di],0
|
|
||||||
je errorboot
|
|
||||||
push si di cx
|
|
||||||
mov si,di
|
|
||||||
add si,bx
|
|
||||||
mov di,offset temp
|
|
||||||
mov cx,12+4
|
|
||||||
rep cmpsb
|
|
||||||
pop cx di si
|
|
||||||
je oksystem
|
|
||||||
add di,32
|
|
||||||
inc dx
|
|
||||||
cmp dx,nbfit
|
|
||||||
ja errorboot
|
|
||||||
cmp di,sizec
|
|
||||||
jb findnext
|
|
||||||
inc cx
|
|
||||||
jmp Check
|
|
||||||
oksystem:
|
|
||||||
mov cx,[di+BX+26]
|
|
||||||
errorboot:
|
|
||||||
pop es ds di si dx bx
|
|
||||||
ret
|
|
||||||
|
|
||||||
;->name ds:si ->es:di
|
|
||||||
AsciiZtoFit:
|
|
||||||
push ax bx cx dx si di ds es
|
|
||||||
xor bx,bx
|
|
||||||
mov dx,di
|
|
||||||
noextens:
|
|
||||||
mov al,[si+bx]
|
|
||||||
cmp al,'.'
|
|
||||||
je extens
|
|
||||||
call Issystchar
|
|
||||||
jc errortranslate
|
|
||||||
mov es:[di],al
|
|
||||||
inc di
|
|
||||||
inc bx
|
|
||||||
cmp bx,namesize ;(.)
|
|
||||||
jne noextens
|
|
||||||
erro:
|
|
||||||
stc
|
|
||||||
jmp errortranslate
|
|
||||||
extens:
|
|
||||||
add si,bx
|
|
||||||
inc si
|
|
||||||
sub bx,namesize
|
|
||||||
neg bx
|
|
||||||
mov al,0
|
|
||||||
mov cx,bx
|
|
||||||
cld
|
|
||||||
rep stosb
|
|
||||||
xor bx,bx
|
|
||||||
wasextens:
|
|
||||||
mov al,[si+bx]
|
|
||||||
cmp al,0
|
|
||||||
je endextens
|
|
||||||
call Issystchar
|
|
||||||
jc errortranslate
|
|
||||||
mov es:[di],al
|
|
||||||
inc di
|
|
||||||
inc bx
|
|
||||||
cmp bx,extsize
|
|
||||||
jne wasextens
|
|
||||||
jmp erro
|
|
||||||
endextens:
|
|
||||||
sub bx,extsize
|
|
||||||
neg bx
|
|
||||||
mov al,0
|
|
||||||
mov cx,bx
|
|
||||||
cld
|
|
||||||
rep stosb
|
|
||||||
mov si,dx
|
|
||||||
mov di,dx
|
|
||||||
push es
|
|
||||||
pop ds
|
|
||||||
mov cx,extsize+namesize
|
|
||||||
call uppercaseMEM
|
|
||||||
clc
|
|
||||||
endtranslate:
|
|
||||||
pop es ds di si dx cx bx ax
|
|
||||||
ret
|
|
||||||
errortranslate:
|
|
||||||
stc
|
|
||||||
jmp endtranslate
|
|
||||||
|
|
||||||
;Carry si al = caractŠre systŠme
|
|
||||||
isSystchar:
|
|
||||||
push di
|
|
||||||
mov di,offset exeptchar
|
|
||||||
isexcept:
|
|
||||||
cmp al,cs:[di]
|
|
||||||
je nogood
|
|
||||||
inc di
|
|
||||||
cmp byte ptr cs:[di],0
|
|
||||||
jne isexcept
|
|
||||||
endanal:
|
|
||||||
pop di
|
|
||||||
ret
|
|
||||||
exeptchar db '/\<>:|.',01,0,0
|
|
||||||
nogood:
|
|
||||||
stc
|
|
||||||
jmp endanal
|
|
||||||
|
|
||||||
;Transforme les x caractŠres de la mem en ds:si en maj
|
|
||||||
uppercaseMEM:
|
|
||||||
push si di cx ax
|
|
||||||
mov di,si
|
|
||||||
uppercaser:
|
|
||||||
mov al,ds:[si]
|
|
||||||
inc si
|
|
||||||
cmp al,'A'
|
|
||||||
jb nonmaj
|
|
||||||
cmp al,'Z'
|
|
||||||
ja nonmaj
|
|
||||||
add al,'a'-'A'
|
|
||||||
nonmaj:
|
|
||||||
mov es:[di],al
|
|
||||||
inc di
|
|
||||||
dec cx
|
|
||||||
jnz uppercaser
|
|
||||||
enduppercase:
|
|
||||||
clc
|
|
||||||
pop ax cx di si
|
|
||||||
ret
|
|
||||||
|
|
||||||
nbfit equ 255
|
|
||||||
|
|
||||||
|
|
||||||
namesize equ 12
|
|
||||||
extsize equ 5
|
|
||||||
|
|
||||||
;cx entr‚e -> fatway chemin
|
|
||||||
getfatway:
|
|
||||||
push bx cx es
|
|
||||||
mov bx,offset fatway
|
|
||||||
fatagain:
|
|
||||||
mov cs:[bx],cx
|
|
||||||
add bx,2
|
|
||||||
cmp cx,0FFF0h
|
|
||||||
jae finishload
|
|
||||||
call getfat
|
|
||||||
jnc fatagain
|
|
||||||
finishload:
|
|
||||||
pop es cx bx
|
|
||||||
ret
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
DecompressRle:
|
DecompressRle:
|
||||||
push cx dx si di
|
push cx dx si di
|
||||||
mov dx,cx
|
mov dx,cx
|
||||||
|
@ -354,63 +158,5 @@ neg bp
|
||||||
pop di si dx cx
|
pop di si dx cx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
dot db '.',0
|
|
||||||
|
|
||||||
loadfatway:
|
|
||||||
push bx di
|
|
||||||
call getfatway
|
|
||||||
jc endload
|
|
||||||
mov di,offset fatway
|
|
||||||
mov si,offset dot
|
|
||||||
mov ah,13
|
|
||||||
loadagain:
|
|
||||||
mov cx,cs:[di]
|
|
||||||
cmp cx,0FFF0h
|
|
||||||
jae endload
|
|
||||||
add di,2
|
|
||||||
call readsector
|
|
||||||
jc endload
|
|
||||||
int 47h
|
|
||||||
add bx,cs:sizec
|
|
||||||
jmp loadagain
|
|
||||||
endload:
|
|
||||||
mov cx,bx
|
|
||||||
pop di bx
|
|
||||||
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 es
|
|
||||||
call readsector
|
|
||||||
jc errorgetfat
|
|
||||||
shl dx,1
|
|
||||||
add bx,dx
|
|
||||||
mov cx,cs:[bx]
|
|
||||||
errorgetfat:
|
|
||||||
pop dx bx ax es
|
|
||||||
ret
|
|
||||||
|
|
||||||
logo db 'cos.rip',0
|
logo db 'cos.rip',0
|
||||||
temp db 12+5+1 dup (0)
|
|
||||||
|
|
||||||
DiskSectorsPerTrack dw 18
|
|
||||||
DiskTracksPerHead dw 80
|
|
||||||
DiskHeads dw 2
|
|
||||||
|
|
||||||
fatway equ $
|
|
||||||
|
|
||||||
buffer equ $+5000
|
|
||||||
end start
|
end start
|
||||||
|
|
|
@ -0,0 +1,514 @@
|
||||||
|
.model tiny
|
||||||
|
.486
|
||||||
|
smart
|
||||||
|
.code
|
||||||
|
org 0100h
|
||||||
|
start:
|
||||||
|
jmp tsr
|
||||||
|
db 'LPT'
|
||||||
|
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 getlptin
|
||||||
|
dw getlptout
|
||||||
|
dw getlptinout
|
||||||
|
dw setlptin
|
||||||
|
dw setlptout
|
||||||
|
dw setlptinout
|
||||||
|
dw getlpt
|
||||||
|
dw getfirstlpt
|
||||||
|
dw setemettor
|
||||||
|
dw setreceptor
|
||||||
|
dw settimeout
|
||||||
|
dw gettimeout
|
||||||
|
dw receivelpt
|
||||||
|
dw sendlpt
|
||||||
|
dw receivelptblock
|
||||||
|
dw sendlptblock
|
||||||
|
dw receivecommand
|
||||||
|
dw sendcommand
|
||||||
|
|
||||||
|
;envois une commande al
|
||||||
|
sendcommand:
|
||||||
|
push ax bx cx di
|
||||||
|
mov bl,al
|
||||||
|
xor bh,bh
|
||||||
|
shl bx,1
|
||||||
|
add bx,offset cmde
|
||||||
|
call cs:[bx]
|
||||||
|
pop di cx bx ax
|
||||||
|
ret
|
||||||
|
cmde dw nothing
|
||||||
|
dw getram
|
||||||
|
|
||||||
|
;recupŠre la ram en ds:si de cx distant caractŠres en es:di local
|
||||||
|
getram:
|
||||||
|
push ax bx cx ds
|
||||||
|
mov bx,offset command
|
||||||
|
mov cs:[bx+2],ds
|
||||||
|
mov cs:[bx],si
|
||||||
|
mov cs:[bx+4],cx
|
||||||
|
push cs
|
||||||
|
pop ds
|
||||||
|
mov si,bx
|
||||||
|
mov cx,6
|
||||||
|
call sendlptblock
|
||||||
|
call receivelptblock
|
||||||
|
pop ds cx bx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Re‡ois une commande et l'execute
|
||||||
|
Receivecommand:
|
||||||
|
push ax bx cx di es
|
||||||
|
push cs
|
||||||
|
pop es
|
||||||
|
mov di,offset command
|
||||||
|
call receivelptblock
|
||||||
|
mov bl,al
|
||||||
|
xor bh,bh
|
||||||
|
shl bx,1
|
||||||
|
add bx,offset cmd
|
||||||
|
call cs:[bx]
|
||||||
|
pop es di cx bx ax
|
||||||
|
ret
|
||||||
|
command db 25 dup (0)
|
||||||
|
cmd dw nothings
|
||||||
|
dw sendram
|
||||||
|
|
||||||
|
nothings:
|
||||||
|
ret
|
||||||
|
|
||||||
|
Sendram:
|
||||||
|
push ax cx si ds
|
||||||
|
mov si,es:[di]
|
||||||
|
mov ax,es:[di+2]
|
||||||
|
mov ds,ax
|
||||||
|
mov cx,es:[di+4]
|
||||||
|
call sendlptblock
|
||||||
|
pop ds si cx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
;---------Segment Adress-----------
|
||||||
|
Bios equ 040h
|
||||||
|
;---------Offset Adress------------
|
||||||
|
Lptadr equ 008h
|
||||||
|
Timer equ 06Ch
|
||||||
|
;---------Constant-----------------
|
||||||
|
onesec equ 18
|
||||||
|
tensec equ 182
|
||||||
|
Ack equ 00
|
||||||
|
Nack equ 0FFh
|
||||||
|
maxtry equ 10
|
||||||
|
tokenstart equ 0
|
||||||
|
tokennext equ 1
|
||||||
|
tokenstop equ 2
|
||||||
|
tokenbad equ 3
|
||||||
|
tokenresend equ 4
|
||||||
|
|
||||||
|
|
||||||
|
Initlpt:
|
||||||
|
push ax ecx
|
||||||
|
call StartTimer
|
||||||
|
cmp emettor,0
|
||||||
|
je receptinit
|
||||||
|
mov al,10000b
|
||||||
|
call SetLptOut
|
||||||
|
waitinit1:
|
||||||
|
call EndTimer
|
||||||
|
cmp cx,cs:timeout
|
||||||
|
ja errorinit
|
||||||
|
call getlptIn
|
||||||
|
cmp al,00000b
|
||||||
|
jnz waitinit1
|
||||||
|
jmp endinit
|
||||||
|
receptinit:
|
||||||
|
call EndTimer
|
||||||
|
cmp cx,cs:timeout
|
||||||
|
ja errorinit
|
||||||
|
call getlptIn
|
||||||
|
cmp al,00000b
|
||||||
|
jnz receptinit
|
||||||
|
mov al,10000b
|
||||||
|
call SetLptOut
|
||||||
|
endinit:
|
||||||
|
clc
|
||||||
|
pop ecx ax
|
||||||
|
ret
|
||||||
|
errorinit:
|
||||||
|
stc
|
||||||
|
pop ecx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
;-Envoie DL (dh) JNE si problŠme JNC error timeout
|
||||||
|
Sendlpt:
|
||||||
|
push ax bx ecx
|
||||||
|
call StartTimer
|
||||||
|
mov dh,dl
|
||||||
|
mov al,dl
|
||||||
|
and al,0Fh
|
||||||
|
call SetLptOut
|
||||||
|
waitSend:
|
||||||
|
call EndTimer
|
||||||
|
cmp cx,cs:timeout
|
||||||
|
ja errorsend
|
||||||
|
call getlptIn
|
||||||
|
bt ax,4
|
||||||
|
jnc waitsend
|
||||||
|
and al,0Fh
|
||||||
|
mov bl,al
|
||||||
|
call StartTimer ;/////
|
||||||
|
mov al,dh
|
||||||
|
shr al,4
|
||||||
|
or al,10000b
|
||||||
|
call SetLptOut
|
||||||
|
waitSend2:
|
||||||
|
call EndTimer
|
||||||
|
cmp cx,cs:timeout
|
||||||
|
ja errorsend
|
||||||
|
call getlptIn
|
||||||
|
bt ax,4
|
||||||
|
jc waitsend2
|
||||||
|
and al,0Fh
|
||||||
|
shl al,4
|
||||||
|
add bl,al
|
||||||
|
cmp dl,bl
|
||||||
|
pop ecx bx ax
|
||||||
|
clc
|
||||||
|
ret
|
||||||
|
errorsend:
|
||||||
|
pop ecx bx ax
|
||||||
|
stc
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
;-Re‡ois DL (dh)
|
||||||
|
Receivelpt:
|
||||||
|
push ax bx ecx
|
||||||
|
call StartTimer
|
||||||
|
waitreceive:
|
||||||
|
call EndTimer
|
||||||
|
cmp cx,cs:timeout
|
||||||
|
ja errorreceive
|
||||||
|
call getlptIn
|
||||||
|
bt ax,4
|
||||||
|
jnc waitreceive
|
||||||
|
and al,0Fh
|
||||||
|
mov dl,al
|
||||||
|
call SetLptOut
|
||||||
|
call StartTimer ;/////
|
||||||
|
waitreceive2:
|
||||||
|
call EndTimer
|
||||||
|
cmp cx,cs:timeout
|
||||||
|
ja errorreceive
|
||||||
|
call getlptIn
|
||||||
|
bt ax,4
|
||||||
|
jc waitreceive2
|
||||||
|
and al,0Fh
|
||||||
|
mov dh,al
|
||||||
|
shl dh,4
|
||||||
|
add dl,dh
|
||||||
|
or al,10000b
|
||||||
|
call SetlptOut
|
||||||
|
clc
|
||||||
|
pop ecx bx ax
|
||||||
|
ret
|
||||||
|
errorreceive:
|
||||||
|
stc
|
||||||
|
pop ecx bx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;-AX
|
||||||
|
SetTimeout:
|
||||||
|
mov cs:Timeout,dx
|
||||||
|
ret
|
||||||
|
|
||||||
|
timeout dw tensec
|
||||||
|
|
||||||
|
getTimeout:
|
||||||
|
mov dx,cs:Timeout
|
||||||
|
ret
|
||||||
|
|
||||||
|
SetEmettor:
|
||||||
|
mov cs:Emettor,1
|
||||||
|
ret
|
||||||
|
|
||||||
|
Emettor db 0
|
||||||
|
|
||||||
|
SetReceptor:
|
||||||
|
mov cs:Emettor,0
|
||||||
|
ret
|
||||||
|
|
||||||
|
;->bx Nøport->Adresse dx
|
||||||
|
GetLpt:
|
||||||
|
push ax bx ds
|
||||||
|
mov ax,bios
|
||||||
|
mov ds,ax
|
||||||
|
dec bx
|
||||||
|
shl bx,1
|
||||||
|
mov dx,ds:[Lptadr+bx]
|
||||||
|
mov cs:lpt,dx
|
||||||
|
pop ds bx ax
|
||||||
|
ret
|
||||||
|
lpt dw 0
|
||||||
|
|
||||||
|
;->bx Nøport->Adresse dx
|
||||||
|
GetFirstLpt:
|
||||||
|
push ax ds
|
||||||
|
mov ax,bios
|
||||||
|
mov ds,ax
|
||||||
|
xor bx,bx
|
||||||
|
findlpt:
|
||||||
|
mov dx,ds:[Lptadr+bx]
|
||||||
|
cmp dx,0
|
||||||
|
jne oklpt
|
||||||
|
add bx,2
|
||||||
|
cmp bx,4
|
||||||
|
jbe findlpt
|
||||||
|
oklpt:
|
||||||
|
mov cs:lpt,dx
|
||||||
|
pop ds ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;->
|
||||||
|
StartTimer:
|
||||||
|
push ax ecx ds
|
||||||
|
mov ax,Bios
|
||||||
|
mov ds,ax
|
||||||
|
mov ecx,ds:[timer]
|
||||||
|
mov cs:times,ecx
|
||||||
|
pop ds ecx ax
|
||||||
|
ret
|
||||||
|
times dd 0
|
||||||
|
|
||||||
|
;->Ecx time elapsed
|
||||||
|
EndTimer:
|
||||||
|
push ax ds
|
||||||
|
mov ax,Bios
|
||||||
|
mov ds,ax
|
||||||
|
mov ecx,ds:[timer]
|
||||||
|
sub ecx,cs:times
|
||||||
|
mov ecx,0
|
||||||
|
pop ds ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;->
|
||||||
|
GetLptOut:
|
||||||
|
push dx
|
||||||
|
mov dx,cs:lpt
|
||||||
|
in al,dx
|
||||||
|
pop dx
|
||||||
|
ret
|
||||||
|
|
||||||
|
GetLptIn:
|
||||||
|
push dx
|
||||||
|
mov dx,cs:lpt
|
||||||
|
inc dx
|
||||||
|
in al,dx
|
||||||
|
shr al,3
|
||||||
|
pop dx
|
||||||
|
ret
|
||||||
|
|
||||||
|
GetLptInOut:
|
||||||
|
push dx
|
||||||
|
mov dx,cs:lpt
|
||||||
|
add dx,2
|
||||||
|
in al,dx
|
||||||
|
and al,11111b
|
||||||
|
pop dx
|
||||||
|
ret
|
||||||
|
|
||||||
|
SetLptOut:
|
||||||
|
push dx
|
||||||
|
mov dx,cs:lpt
|
||||||
|
out dx,al
|
||||||
|
pop dx
|
||||||
|
ret
|
||||||
|
|
||||||
|
SetLptIn:
|
||||||
|
push dx
|
||||||
|
mov dx,cs:lpt
|
||||||
|
inc dx
|
||||||
|
out dx,al
|
||||||
|
pop dx
|
||||||
|
ret
|
||||||
|
|
||||||
|
SetLptInOut:
|
||||||
|
push dx
|
||||||
|
mov dx,cs:lpt
|
||||||
|
add dx,2
|
||||||
|
out dx,al
|
||||||
|
pop dx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;R‚alise un checksum 8 bits sur donn‚es DS:SI, nb CX r‚sultat dans dl
|
||||||
|
Checksum8:
|
||||||
|
push cx si
|
||||||
|
check:
|
||||||
|
add dl,[si]
|
||||||
|
inc si
|
||||||
|
dec cx
|
||||||
|
jnz check
|
||||||
|
pop si cx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;DS:SI pointeur sur donn‚es, CX nombres de donn‚es, AL token
|
||||||
|
SendLptBlock:
|
||||||
|
push ax bx cx edx si edi bp
|
||||||
|
mov dx,cx
|
||||||
|
shl edx,16
|
||||||
|
mov dh,al
|
||||||
|
call checksum8
|
||||||
|
mov edi,edx
|
||||||
|
xor dh,dh
|
||||||
|
mov bp,dx
|
||||||
|
mov ah,maxtry
|
||||||
|
retry:
|
||||||
|
mov bl,4
|
||||||
|
xor al,al
|
||||||
|
header:
|
||||||
|
mov dx,di
|
||||||
|
call sendlpt
|
||||||
|
setne al
|
||||||
|
jc outt
|
||||||
|
rol edi,8
|
||||||
|
dec bl
|
||||||
|
jnz header
|
||||||
|
cmp al,0
|
||||||
|
jne notgood
|
||||||
|
mov dl,ACK
|
||||||
|
jmp allsend
|
||||||
|
notgood:
|
||||||
|
mov dl,NACK
|
||||||
|
allsend:
|
||||||
|
call sendlpt
|
||||||
|
setne al
|
||||||
|
jc outt
|
||||||
|
cmp al,0
|
||||||
|
je okheader
|
||||||
|
dec ah
|
||||||
|
jnz retry
|
||||||
|
jmp outt
|
||||||
|
okheader:
|
||||||
|
cmp cx,0
|
||||||
|
je endoftrans
|
||||||
|
mov di,maxtry
|
||||||
|
retry2:
|
||||||
|
mov bx,cx
|
||||||
|
xor ax,ax
|
||||||
|
body:
|
||||||
|
mov dl,[si+bx-1]
|
||||||
|
add ah,dl
|
||||||
|
call sendlpt
|
||||||
|
setne al
|
||||||
|
jc outt
|
||||||
|
dec bx
|
||||||
|
jnz body
|
||||||
|
cmp al,0
|
||||||
|
jne notgood2
|
||||||
|
mov dl,ACK
|
||||||
|
jmp allisend
|
||||||
|
notgood2:
|
||||||
|
mov dl,NACK
|
||||||
|
allisend:
|
||||||
|
call sendlpt
|
||||||
|
setne al
|
||||||
|
jc outt
|
||||||
|
cmp al,0
|
||||||
|
je endoftrans
|
||||||
|
dec di
|
||||||
|
jnz retry2
|
||||||
|
outt:
|
||||||
|
stc
|
||||||
|
endoftrans:
|
||||||
|
mov al,ah
|
||||||
|
xor ah,ah
|
||||||
|
cmp bp,ax
|
||||||
|
pop bp edi si edx cx bx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Receptionne en es:di les donn‚es au nombres de CX token AL (AH) (ECX)
|
||||||
|
receiveLptBlock:
|
||||||
|
push bx dx si bp
|
||||||
|
mov ah,maxtry
|
||||||
|
retrye:
|
||||||
|
mov bl,4
|
||||||
|
headere:
|
||||||
|
call receivelpt
|
||||||
|
jc outte
|
||||||
|
mov cl,dl
|
||||||
|
rol ecx,8
|
||||||
|
dec bl
|
||||||
|
jnz headere
|
||||||
|
call receivelpt
|
||||||
|
jc outte
|
||||||
|
cmp dl,ACK
|
||||||
|
je okheadere
|
||||||
|
dec ah
|
||||||
|
jnz retrye
|
||||||
|
jmp outte
|
||||||
|
okheadere:
|
||||||
|
mov al,ch
|
||||||
|
xor ch,ch
|
||||||
|
mov bp,cx
|
||||||
|
rol ecx,16
|
||||||
|
cmp cx,0
|
||||||
|
je endoftranse
|
||||||
|
mov si,maxtry
|
||||||
|
retrye2:
|
||||||
|
mov bx,cx
|
||||||
|
xor ah,ah
|
||||||
|
bodye:
|
||||||
|
call receivelpt
|
||||||
|
jc outte
|
||||||
|
mov es:[di+bx-1],dl
|
||||||
|
add ah,dl
|
||||||
|
dec bx
|
||||||
|
jnz bodye
|
||||||
|
call receivelpt
|
||||||
|
jc outte
|
||||||
|
cmp dl,ACK
|
||||||
|
je endoftranse
|
||||||
|
dec si
|
||||||
|
jnz retrye2
|
||||||
|
outte:
|
||||||
|
stc
|
||||||
|
endoftranse:
|
||||||
|
mov bl,ah
|
||||||
|
xor bh,bh
|
||||||
|
cmp bp,bx
|
||||||
|
pop bp si dx bx
|
||||||
|
ret
|
||||||
|
end start
|
262
system.asm
262
system.asm
|
@ -5,27 +5,27 @@ smart
|
||||||
|
|
||||||
org 0100h
|
org 0100h
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
start:
|
start:
|
||||||
mov si,offset video
|
mov si,offset video
|
||||||
call searchfile
|
|
||||||
mov bx,8400h
|
mov bx,8400h
|
||||||
mov es,bx
|
mov ax,47h
|
||||||
mov bx,100h
|
call installhandler
|
||||||
call loadfatway
|
mov si,offset lpt
|
||||||
mov di,bx
|
mov bx,7400h
|
||||||
mov bx,47h
|
mov ax,49h
|
||||||
call setint
|
call installhandler
|
||||||
ret
|
mov si,offset keyboard
|
||||||
mov bx,9
|
mov bx,7000h
|
||||||
call getint
|
mov ax,9h
|
||||||
mov cs:int9seg,ds
|
call replacehandler
|
||||||
mov cs:int9off,si
|
mov si,offset timer
|
||||||
push cs
|
mov bx,7800h
|
||||||
pop es
|
mov ax,8h
|
||||||
mov di,offset int9
|
call replacehandler
|
||||||
call setint
|
mov si,offset drive
|
||||||
|
mov bx,9000h
|
||||||
|
mov ax,48h
|
||||||
|
call installhandler
|
||||||
start2:
|
start2:
|
||||||
push cs
|
push cs
|
||||||
push cs
|
push cs
|
||||||
|
@ -53,9 +53,10 @@ int 47h
|
||||||
mov ah,6
|
mov ah,6
|
||||||
int 47h
|
int 47h
|
||||||
xor di,di
|
xor di,di
|
||||||
|
mov ax,0001h
|
||||||
mov bx,offset buffer
|
mov bx,offset buffer
|
||||||
mov cx,13
|
mov cx,13
|
||||||
call readsector
|
int 48h
|
||||||
xor bp,bp
|
xor bp,bp
|
||||||
showall:
|
showall:
|
||||||
cmp byte ptr [bx+di],0
|
cmp byte ptr [bx+di],0
|
||||||
|
@ -189,7 +190,7 @@ pop es cx bx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
loadfatway:
|
loadfatway:
|
||||||
push bx cx di
|
push ax bx cx di
|
||||||
call getfatway
|
call getfatway
|
||||||
jc endload
|
jc endload
|
||||||
mov di,offset fatway
|
mov di,offset fatway
|
||||||
|
@ -206,7 +207,7 @@ int 47h
|
||||||
add bx,cs:sizec
|
add bx,cs:sizec
|
||||||
jmp loadagain
|
jmp loadagain
|
||||||
endload:
|
endload:
|
||||||
pop di cx bx
|
pop di cx bx ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
sizec dw 512
|
sizec dw 512
|
||||||
|
@ -253,9 +254,9 @@ ret
|
||||||
xx dw 1
|
xx dw 1
|
||||||
xxold dw 0
|
xxold dw 0
|
||||||
menu db 'F1 Read disk F2 Read file F9 Quit F11 Change video F12 Debug ',0
|
menu db 'F1 Read disk F2 Read file F9 Quit F11 Change video F12 Debug ',0
|
||||||
msg1 db 'Cos 2000 menu loader release 1.0',0
|
msg1 db ' Cos 2000 menu loader release 1.0',0
|
||||||
msg2 db 'The program is loading',0
|
msg2 db 'The program is loading',0
|
||||||
msg3 db 'Cos will restart your computer, eject the floppy disk and press a key',0
|
msg3 db ' Cos will restart your computer, eject the floppy disk and press a key',0
|
||||||
prompt db '>',0
|
prompt db '>',0
|
||||||
spaces db ' ',0
|
spaces db ' ',0
|
||||||
dot db '.',0
|
dot db '.',0
|
||||||
|
@ -297,6 +298,7 @@ Done:
|
||||||
pop si dx cx ax
|
pop si dx cx ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
WriteSector:
|
||||||
push ax cx dx si
|
push ax cx dx si
|
||||||
cmp cs:Lastread,cx
|
cmp cs:Lastread,cx
|
||||||
jne nodestruct
|
jne nodestruct
|
||||||
|
@ -333,8 +335,41 @@ Done2:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
Lastread dw 0FFFFh
|
Lastread dw 0FFFFh
|
||||||
WriteSector:
|
|
||||||
|
|
||||||
|
;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
|
||||||
|
call loadfile
|
||||||
|
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
|
||||||
|
call loadfile
|
||||||
|
mov bx,ax
|
||||||
|
call setint
|
||||||
|
pop es di bx
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
;Charge le fichier Ds:si en es:di
|
||||||
|
loadfile:
|
||||||
|
push bx cx
|
||||||
|
call searchfile
|
||||||
|
mov bx,di
|
||||||
|
call loadfatway
|
||||||
|
pop cx bx
|
||||||
|
ret
|
||||||
|
|
||||||
;met es:di le handle de l'int bx
|
;met es:di le handle de l'int bx
|
||||||
setint:
|
setint:
|
||||||
|
@ -352,188 +387,19 @@ ret
|
||||||
;met ds:si le handle de l'int bx
|
;met ds:si le handle de l'int bx
|
||||||
getint:
|
getint:
|
||||||
push ax bx es
|
push ax bx es
|
||||||
cli
|
|
||||||
shl bx,2
|
shl bx,2
|
||||||
xor ax,ax
|
xor ax,ax
|
||||||
mov es,ax
|
mov es,ax
|
||||||
mov si,es:[bx]
|
mov si,es:[bx]
|
||||||
mov ds,es:[bx+2]
|
mov ds,es:[bx+2]
|
||||||
pop es bx ax
|
pop es bx ax
|
||||||
sti
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
int9off dw 0
|
;Recherchele fichier et retourne sont path et en cx sont debut
|
||||||
int9seg dw 0
|
|
||||||
|
|
||||||
int9:
|
|
||||||
pushf
|
|
||||||
db 2eh,0ffh,1eh
|
|
||||||
dw int9off
|
|
||||||
cli
|
|
||||||
pusha
|
|
||||||
in al,60h
|
|
||||||
cmp cs:isstate,1
|
|
||||||
jne nostate
|
|
||||||
cmp al,57
|
|
||||||
jne nof12
|
|
||||||
mov cs:isstate,0
|
|
||||||
jmp noF12
|
|
||||||
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:
|
|
||||||
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:
|
|
||||||
push ds es
|
|
||||||
push ss
|
|
||||||
push gs
|
|
||||||
push fs
|
|
||||||
push es
|
|
||||||
push ds
|
|
||||||
push cs
|
|
||||||
pushad
|
|
||||||
pushfd
|
|
||||||
|
|
||||||
push cs
|
|
||||||
push cs
|
|
||||||
pop es
|
|
||||||
pop ds
|
|
||||||
mov ah,2
|
|
||||||
int 47h
|
|
||||||
mov ah,21
|
|
||||||
mov cl,4
|
|
||||||
int 47h
|
|
||||||
mov ah,13
|
|
||||||
mov si,offset reg
|
|
||||||
int 47h
|
|
||||||
mov ah,6
|
|
||||||
int 47h
|
|
||||||
mov ah,21
|
|
||||||
mov cl,7
|
|
||||||
int 47h
|
|
||||||
mov ah,13
|
|
||||||
mov si,offset fla
|
|
||||||
int 47h
|
|
||||||
pop edx
|
|
||||||
mov cx,32
|
|
||||||
mov ah,11
|
|
||||||
int 47h
|
|
||||||
mov ah,5
|
|
||||||
int 47h
|
|
||||||
mov ah,10
|
|
||||||
int 47h
|
|
||||||
mov si,offset regs
|
|
||||||
mov bx,8+6
|
|
||||||
mov ah,21
|
|
||||||
mov cl,6
|
|
||||||
int 47h
|
|
||||||
showallREG:
|
|
||||||
mov ah,6
|
|
||||||
int 47h
|
|
||||||
cmp bx,7
|
|
||||||
jb nodr
|
|
||||||
pop edx
|
|
||||||
jmp popo
|
|
||||||
nodr:
|
|
||||||
mov ah,21
|
|
||||||
mov cl,1
|
|
||||||
int 47h
|
|
||||||
xor edx,edx
|
|
||||||
pop dx
|
|
||||||
popo:
|
|
||||||
mov ah,13
|
|
||||||
int 47h
|
|
||||||
mov ah,10
|
|
||||||
mov cx,32
|
|
||||||
int 47h
|
|
||||||
mov ah,5
|
|
||||||
int 47h
|
|
||||||
push si
|
|
||||||
mov si,offset gr
|
|
||||||
mov ah,13
|
|
||||||
int 47h
|
|
||||||
mov ah,8
|
|
||||||
int 47h
|
|
||||||
mov si,offset dr
|
|
||||||
mov ah,13
|
|
||||||
int 47h
|
|
||||||
pop si
|
|
||||||
add si,5
|
|
||||||
dec bx
|
|
||||||
jnz showallreg
|
|
||||||
mov ah,34
|
|
||||||
mov di,offset infos
|
|
||||||
int 47h
|
|
||||||
mov ah,25
|
|
||||||
mov bl,cs:infos
|
|
||||||
xor bh,bh
|
|
||||||
dec bl
|
|
||||||
int 47h
|
|
||||||
mov si,offset app
|
|
||||||
mov ah,13
|
|
||||||
int 47h
|
|
||||||
mov ah,32
|
|
||||||
mov bl,cs:infos
|
|
||||||
xor bh,bh
|
|
||||||
mov di,ax
|
|
||||||
dec di
|
|
||||||
mov cl,116
|
|
||||||
int 47h
|
|
||||||
pop es ds
|
|
||||||
ret
|
|
||||||
|
|
||||||
reg db 'State of registers',0
|
|
||||||
fla db 'Flags:',0
|
|
||||||
regs db 'EDI:',0
|
|
||||||
db 'ESI:',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
|
|
||||||
gr db '(',0
|
|
||||||
dr db ')',0
|
|
||||||
app db 'Press space to quit...',0
|
|
||||||
|
|
||||||
Searchfile:
|
Searchfile:
|
||||||
push bx dx si di ds es
|
push bx dx si di ds es
|
||||||
|
push cs
|
||||||
|
pop es
|
||||||
mov di,offset temp
|
mov di,offset temp
|
||||||
mov bx,offset buffer
|
mov bx,offset buffer
|
||||||
call asciiztofit
|
call asciiztofit
|
||||||
|
@ -674,7 +540,11 @@ extsize equ 5
|
||||||
|
|
||||||
|
|
||||||
nbfit equ 255
|
nbfit equ 255
|
||||||
|
drive db 'drive.sys',0
|
||||||
|
timer db 'timer.sys',0
|
||||||
|
lpt db 'lpt.sys',0
|
||||||
video db 'video.sys',0
|
video db 'video.sys',0
|
||||||
|
keyboard db 'keyboard.sys',0
|
||||||
temp db 12+5+1 dup (0)
|
temp db 12+5+1 dup (0)
|
||||||
|
|
||||||
DiskSectorsPerTrack dw 18
|
DiskSectorsPerTrack dw 18
|
||||||
|
|
274
test.asm
274
test.asm
|
@ -1,274 +0,0 @@
|
||||||
.model tiny
|
|
||||||
.486
|
|
||||||
smart
|
|
||||||
.code
|
|
||||||
|
|
||||||
org 0100h
|
|
||||||
|
|
||||||
start:
|
|
||||||
go:
|
|
||||||
call calc
|
|
||||||
jmp go
|
|
||||||
ret
|
|
||||||
|
|
||||||
calc:
|
|
||||||
pusha
|
|
||||||
mov ah,2Ch
|
|
||||||
int 21h
|
|
||||||
mov bh,dh
|
|
||||||
xor ebp,ebp
|
|
||||||
wait2:
|
|
||||||
xor bl,bl
|
|
||||||
waits:
|
|
||||||
mov dx,3dah
|
|
||||||
in al,dx
|
|
||||||
and al,1000b
|
|
||||||
jz wait2
|
|
||||||
cmp bl,1
|
|
||||||
je waits
|
|
||||||
inc ebp
|
|
||||||
inc bl
|
|
||||||
cmp ebp,300
|
|
||||||
jne waits
|
|
||||||
mov ah,2Ch
|
|
||||||
int 21h
|
|
||||||
sub dh,bh
|
|
||||||
mov bl,dh
|
|
||||||
xor bh,bh
|
|
||||||
mov ax,bp
|
|
||||||
shr ebp,16
|
|
||||||
mov dx,bp
|
|
||||||
div bx
|
|
||||||
xor edx,edx
|
|
||||||
mov dx,ax
|
|
||||||
call showint
|
|
||||||
popa
|
|
||||||
ret
|
|
||||||
|
|
||||||
;===================================Afficher un int EDX a l'‚cran en ah,al================
|
|
||||||
ShowInt:
|
|
||||||
push eax bx cx edx esi di es ds
|
|
||||||
mov di,0
|
|
||||||
mov cx,0B800h
|
|
||||||
mov es,cx
|
|
||||||
xor cx,cx
|
|
||||||
mov eax,edx
|
|
||||||
mov esi,10
|
|
||||||
mov bx,offset showbuffer+27
|
|
||||||
decint3:
|
|
||||||
xor edx,edx
|
|
||||||
div esi
|
|
||||||
add dl,'0'
|
|
||||||
mov dh,cs:colors
|
|
||||||
sub bx,2
|
|
||||||
add cx,2
|
|
||||||
mov cs:[bx],dx
|
|
||||||
cmp ax,0
|
|
||||||
jne decint3
|
|
||||||
mov si,bx
|
|
||||||
push cs
|
|
||||||
pop ds
|
|
||||||
cld
|
|
||||||
rep movsb
|
|
||||||
pop ds es di esi edx cx bx eax
|
|
||||||
ret
|
|
||||||
showbuffer db 35 dup (0FFh)
|
|
||||||
|
|
||||||
colors equ 1
|
|
||||||
|
|
||||||
|
|
||||||
;40*25 16 couleurs
|
|
||||||
mode0 DB 67H,00H, 03H,08H,03H,00H,02H
|
|
||||||
DB 2DH,27H,28H,90H,2BH,0A0H,0BFH,01FH,00H,4FH,0DH,0EH,00H,00H,00H,00H
|
|
||||||
DB 9CH,8EH,8FH,14H,1FH,96H,0B9H,0A3H,0FFH
|
|
||||||
DB 00H,00H,00H,00H,00H,10H,0EH,00H,0FFH
|
|
||||||
DB 00H,01H,02H,03H,04H,05H,14H,01H,38H,39H,3AH,3BH,3CH,3DH,3EH,3FH
|
|
||||||
DB 0CH,00H,0FH,08H,00H
|
|
||||||
db 40,25
|
|
||||||
|
|
||||||
;80*25 16 couleurs
|
|
||||||
mode1 DB 67H,00H, 03H,00H,03H,00H,02H
|
|
||||||
DB 5FH,4FH,50H,82H,55H,81H,0BFH,1FH,00H,4FH,0DH,0EH,00H,00H,00H,00H
|
|
||||||
DB 9CH,0EH,8FH,28H,1FH,96H,0B9H,0A3h,0FFH
|
|
||||||
DB 00H,00H,00H,00H,00H,10H,0EH,00H,0FFH
|
|
||||||
DB 00H,01H,02H,03H,04H,05H,6H,7H,8H,9H,0AH,0BH,0CH,0DH,0EH,0FH
|
|
||||||
DB 0CH,00H,0FH,08H,00H
|
|
||||||
db 80,25
|
|
||||||
|
|
||||||
;80*50 16 couleurs
|
|
||||||
mode2 DB 67H, 00H, 03H,00H,03H,00H,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
|
|
||||||
DB 00H,01H,02H,03H,04H,05H,14H,07H,10H,11H,3AH,3BH,3CH,3DH,3EH,3FH
|
|
||||||
DB 0CH,00H,0FH,00H,00H
|
|
||||||
db 80,50
|
|
||||||
|
|
||||||
;100*50 16 couleurs
|
|
||||||
mode3 DB 067H , 00H, 03H,01H,03H,00H,02H
|
|
||||||
DB 70H, 63H , 64H ,85H,68H,84H,0BFH,1FH,00H,47H,06H,07H,00H,00H,00H
|
|
||||||
DB 00H,9Ch, 08EH ,8FH, 32H ,1FH,96H,0B9H,0A3H,0FFH
|
|
||||||
DB 00H,00H,00H,00H,00H,10H,0EH,00H,0FFH
|
|
||||||
DB 00H,01H,02H,03H,04H,05H,14H,07H,10H,11H,3AH,3BH,3CH,3DH,3EH,3FH
|
|
||||||
DB 0CH,00H,0FH,00H,00H
|
|
||||||
db 100,50
|
|
||||||
|
|
||||||
|
|
||||||
;100*60 16 couleurs
|
|
||||||
mode22 DB 067H , 00H, 03H,01H,03H,00H,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
|
|
||||||
DB 00H,01H,02H,03H,04H,05H,14H,07H,10H,11H,3AH,3BH,3CH,3DH,3EH,3FH
|
|
||||||
DB 0CH,00H,0FH,00H,00H
|
|
||||||
db 100,60
|
|
||||||
|
|
||||||
|
|
||||||
Sequencer equ 03C4h
|
|
||||||
misc equ 03C2h
|
|
||||||
misc2 equ 03CCh
|
|
||||||
CCRT equ 03D4h
|
|
||||||
Attribs equ 03C0h
|
|
||||||
graphic equ 03CEh
|
|
||||||
statut equ 3DAh
|
|
||||||
|
|
||||||
;====Met les cl registres cons‚cutif … ds:si du port dx
|
|
||||||
Setregs:
|
|
||||||
push ax
|
|
||||||
xor ax,ax
|
|
||||||
initreg:
|
|
||||||
mov ah,[si]
|
|
||||||
out dx,ax
|
|
||||||
inc al
|
|
||||||
inc si
|
|
||||||
cmp al,cl
|
|
||||||
jb initreg
|
|
||||||
pop ax
|
|
||||||
ret
|
|
||||||
|
|
||||||
;met une serie de registres Cl a partir du port dx
|
|
||||||
Setlowregs:
|
|
||||||
push ax bx
|
|
||||||
xor bx,bx
|
|
||||||
cmp cl,0
|
|
||||||
je only
|
|
||||||
initreg2:
|
|
||||||
mov al,bl
|
|
||||||
out dx,al
|
|
||||||
only:
|
|
||||||
mov al,[si]
|
|
||||||
out dx,al
|
|
||||||
inc bl
|
|
||||||
inc si
|
|
||||||
cmp bl,cl
|
|
||||||
jb initreg2
|
|
||||||
pop bx ax
|
|
||||||
ret
|
|
||||||
|
|
||||||
Setvideomode:
|
|
||||||
push ax cx dx si
|
|
||||||
xor ah,ah
|
|
||||||
mov si,ax
|
|
||||||
shl si,6
|
|
||||||
add si,offset mode0
|
|
||||||
xor cx,cx
|
|
||||||
mov dx,misc
|
|
||||||
call setlowregs
|
|
||||||
mov dx,statut
|
|
||||||
call setlowregs
|
|
||||||
mov dx,sequencer
|
|
||||||
mov cl,5
|
|
||||||
call setregs
|
|
||||||
mov ax,0E11h
|
|
||||||
mov dx,ccrt
|
|
||||||
out dx,ax
|
|
||||||
mov cl,25
|
|
||||||
call setregs
|
|
||||||
mov dx,graphic
|
|
||||||
mov cl,9
|
|
||||||
call setregs
|
|
||||||
mov dx,attribs
|
|
||||||
mov cl,20
|
|
||||||
call setlowregs
|
|
||||||
mov al,20h
|
|
||||||
out dx,al
|
|
||||||
pop dx cx ax si
|
|
||||||
ret
|
|
||||||
|
|
||||||
;====Met les cl registres cons‚cutif … en es:DI du port dx TOUT REGISTRES
|
|
||||||
getregs:
|
|
||||||
push ax bx dx
|
|
||||||
xor bx,bx
|
|
||||||
cmp cl,0
|
|
||||||
je only2
|
|
||||||
initreg4:
|
|
||||||
mov al,bl
|
|
||||||
out dx,al
|
|
||||||
cmp dx,3C1h
|
|
||||||
je only2
|
|
||||||
inc dx
|
|
||||||
only2:
|
|
||||||
in al,dx
|
|
||||||
mov es:[di],al
|
|
||||||
dec dx
|
|
||||||
inc bl
|
|
||||||
inc di
|
|
||||||
cmp bl,cl
|
|
||||||
jb initreg4
|
|
||||||
pop dx bx ax
|
|
||||||
ret
|
|
||||||
|
|
||||||
;====Met le mode video present dans Es:di
|
|
||||||
getvideomode:
|
|
||||||
push ax cx dx di
|
|
||||||
xor cx,cx
|
|
||||||
mov dx,misc2
|
|
||||||
call getregs
|
|
||||||
mov dx,statut
|
|
||||||
call getregs
|
|
||||||
mov dx,sequencer
|
|
||||||
mov cl,5
|
|
||||||
call getregs
|
|
||||||
mov dx,ccrt
|
|
||||||
mov cl,25
|
|
||||||
call getregs
|
|
||||||
mov dx,graphic
|
|
||||||
mov cl,9
|
|
||||||
call getregs
|
|
||||||
mov dx,attribs
|
|
||||||
mov cl,20
|
|
||||||
call getregs
|
|
||||||
mov al,20h
|
|
||||||
out dx,al
|
|
||||||
pop di dx cx ax
|
|
||||||
ret
|
|
||||||
|
|
||||||
;mode s‚curis‚ al
|
|
||||||
Safemode:
|
|
||||||
push cx si di ds es
|
|
||||||
call setvideomode
|
|
||||||
mov di,offset buffer
|
|
||||||
push cs
|
|
||||||
pop es
|
|
||||||
push cs
|
|
||||||
pop ds
|
|
||||||
call getvideomode
|
|
||||||
mov byte ptr es:[di+1],0
|
|
||||||
mov si,offset mode1
|
|
||||||
mov di,offset buffer
|
|
||||||
mov cx,62
|
|
||||||
rep cmpsb
|
|
||||||
jne errormode
|
|
||||||
clc
|
|
||||||
endsafe:
|
|
||||||
pop ds es di si cx
|
|
||||||
ret
|
|
||||||
errormode:
|
|
||||||
stc
|
|
||||||
jmp endsafe
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
buffer db 0
|
|
||||||
|
|
||||||
end start
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
.model tiny
|
||||||
|
.486
|
||||||
|
smart
|
||||||
|
.code
|
||||||
|
|
||||||
|
org 0100h
|
||||||
|
|
||||||
|
start:
|
||||||
|
|
||||||
|
jmp tsr
|
||||||
|
offsets dd 0
|
||||||
|
db 'TIMER'
|
||||||
|
tsr:
|
||||||
|
pushf
|
||||||
|
db 2eh,0ffh,1eh
|
||||||
|
dw offsets
|
||||||
|
cli
|
||||||
|
push ax bx es
|
||||||
|
mov bx,cs:compteur
|
||||||
|
inc bx
|
||||||
|
and bx,11b
|
||||||
|
mov cs:compteur,bx
|
||||||
|
mov bx,cs:[offset fig+bx]
|
||||||
|
mov ax,0B800h
|
||||||
|
mov es,ax
|
||||||
|
mov es:[0],bl
|
||||||
|
pop es bx ax
|
||||||
|
sti
|
||||||
|
iret
|
||||||
|
compteur dw 0
|
||||||
|
fig db 'Ä\³/'
|
||||||
|
end start
|
115
verif.asm
115
verif.asm
|
@ -58,7 +58,8 @@ VerifAll:
|
||||||
mov si,offset Msg3
|
mov si,offset Msg3
|
||||||
int 47h
|
int 47h
|
||||||
call gauge
|
call gauge
|
||||||
call verifysector
|
mov ah,2
|
||||||
|
int 48h
|
||||||
jc errors
|
jc errors
|
||||||
je noprob
|
je noprob
|
||||||
inc di
|
inc di
|
||||||
|
@ -147,116 +148,4 @@ max dw 2880
|
||||||
sizes dw 50
|
sizes dw 50
|
||||||
xy dw 0A12h
|
xy dw 0A12h
|
||||||
gaugetxt db 'ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ',0
|
gaugetxt db 'ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ',0
|
||||||
|
|
||||||
Inverse:
|
|
||||||
mov si,512/4
|
|
||||||
invert:
|
|
||||||
shl si,2
|
|
||||||
not dword ptr [bx+si-4]
|
|
||||||
shr si,2
|
|
||||||
dec si
|
|
||||||
jnz invert
|
|
||||||
ret
|
|
||||||
|
|
||||||
VerifySector:
|
|
||||||
push bx cx si di ds es
|
|
||||||
push cs
|
|
||||||
pop es
|
|
||||||
push cs
|
|
||||||
pop ds
|
|
||||||
mov bx,offset buffer
|
|
||||||
call ReadSector
|
|
||||||
jc errorverify
|
|
||||||
call inverse
|
|
||||||
call WriteSector
|
|
||||||
jc errorverify
|
|
||||||
mov bx,offset buffer2
|
|
||||||
call ReadSector
|
|
||||||
call inverse
|
|
||||||
jc errorverify
|
|
||||||
mov bx,offset buffer
|
|
||||||
call inverse
|
|
||||||
call WriteSector
|
|
||||||
jc errorverify
|
|
||||||
mov cx,512/4
|
|
||||||
mov si,offset buffer
|
|
||||||
mov di,offset buffer2
|
|
||||||
cld
|
|
||||||
rep cmpsd
|
|
||||||
errorverify:
|
|
||||||
pop es ds di si cx bx
|
|
||||||
ret
|
|
||||||
|
|
||||||
ReadSector:
|
|
||||||
push ax cx dx si
|
|
||||||
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
|
|
||||||
Done:
|
|
||||||
pop si dx cx ax
|
|
||||||
ret
|
|
||||||
|
|
||||||
WriteSector:
|
|
||||||
push ax cx dx si
|
|
||||||
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
|
|
||||||
|
|
||||||
Buffer equ $
|
|
||||||
Buffer2 equ $+512
|
|
||||||
|
|
||||||
|
|
||||||
End Start
|
End Start
|
||||||
|
|
|
@ -6,7 +6,8 @@ smart
|
||||||
org 0100h
|
org 0100h
|
||||||
|
|
||||||
start:
|
start:
|
||||||
|
jmp tsr
|
||||||
|
db 'VIDEO'
|
||||||
Tsr:
|
Tsr:
|
||||||
cli
|
cli
|
||||||
cmp ax,1234h
|
cmp ax,1234h
|
||||||
|
@ -185,7 +186,7 @@ mode1 DB 67H,00H, 03H,00H,03H,00H,02H
|
||||||
db 80,25
|
db 80,25
|
||||||
|
|
||||||
;80*50 16 couleurs
|
;80*50 16 couleurs
|
||||||
mode2 DB 67H, 00H, 03H,00H,03H,01H,02H
|
mode1b 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
|
||||||
|
@ -202,7 +203,6 @@ mode3 DB 067H,00H,03H,01H,03H,01H,02H
|
||||||
DB 0CH,00H,0FH,00H,00H
|
DB 0CH,00H,0FH,00H,00H
|
||||||
db 100,50
|
db 100,50
|
||||||
|
|
||||||
|
|
||||||
;100*60 16 couleurs
|
;100*60 16 couleurs
|
||||||
mode4b DB 067H,00H,03H,01H,03H,01H,02H
|
mode4b DB 067H,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
|
||||||
|
|
Loading…
Reference in New Issue