feat: version bêta 1.3.2fr
This commit is contained in:
parent
8d0fd22134
commit
e8f7d8a1e7
|
@ -0,0 +1,23 @@
|
|||
asm= lzasm /z/t
|
||||
lnk= elink
|
||||
|
||||
all: exem-lib.lib exem-ce.ce pmode.ce isa.ce editeur.ce volume.ce test.ce verifier.ce gestion.ce logo.ce souris.ce
|
||||
|
||||
.asm.obj:
|
||||
$(asm) $<
|
||||
|
||||
.obj.ce:
|
||||
$(lnk) $< $*.ce
|
||||
|
||||
.obj.lib:
|
||||
$(lnk) $< $*.lib
|
||||
|
||||
clean:
|
||||
del *.obj
|
||||
del *.ce
|
||||
del *.bak
|
||||
del *.lib
|
||||
del *.com
|
||||
del *.bin
|
||||
del *.sys
|
||||
del *.err
|
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
|
@ -0,0 +1,355 @@
|
|||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
include "..\include\graphic.h"
|
||||
|
||||
org 0h
|
||||
|
||||
start:
|
||||
header exe <"CE",1,0,0,,offset imports,,offset realstart>
|
||||
|
||||
realstart:
|
||||
mov ax,0305h
|
||||
mov bx,0008h
|
||||
int 16h
|
||||
call [savestate]
|
||||
call [setvideomode],2
|
||||
xor ebp,ebp
|
||||
xor ax,ax
|
||||
mov fs,ax
|
||||
call [disablescroll]
|
||||
adres:
|
||||
call [saveparamto],offset infos
|
||||
mov al,[infos.lines]
|
||||
dec al
|
||||
mov [lastline],al
|
||||
mov al,[infos.columns]
|
||||
sub al,16
|
||||
mov bl,al
|
||||
shr al,2
|
||||
mov [sizex],al
|
||||
and bl,11b
|
||||
mov [sizex2],bl
|
||||
mov al,[infos.mode]
|
||||
cmp al,[oldmode]
|
||||
je noinit
|
||||
call [clearscreen]
|
||||
mov [oldmode],al
|
||||
noinit:
|
||||
call [setxy],0,0
|
||||
mov edi,ebp
|
||||
mov bh,[lastline]
|
||||
lines:
|
||||
xor edx,edx
|
||||
mov dx,di
|
||||
push edx
|
||||
mov edx,edi
|
||||
shr edx,4*4
|
||||
shl edx,4*3
|
||||
push edx
|
||||
push offset spaces
|
||||
call [print]
|
||||
mov dx,di
|
||||
mov al,[sizex]
|
||||
mov esi,edi
|
||||
doaline:
|
||||
mov edx,edi
|
||||
shr edx,4*4
|
||||
shl edx,4*3
|
||||
mov fs,dx
|
||||
push [dword ptr fs:di]
|
||||
push 8
|
||||
call [showhex]
|
||||
call [showchar],' '
|
||||
inc edi
|
||||
dec al
|
||||
jnz doaline
|
||||
mov edi,esi
|
||||
push offset spaces2
|
||||
call [print]
|
||||
mov al,[sizex]
|
||||
doaline2:
|
||||
mov edx,edi
|
||||
shr edx,4*4
|
||||
shl edx,4*3
|
||||
mov fs,dx
|
||||
push [word ptr fs:di]
|
||||
call [showchar]
|
||||
inc edi
|
||||
dec al
|
||||
jnz doaline2
|
||||
dec bh
|
||||
je outes
|
||||
cmp [sizex2],0
|
||||
je lines
|
||||
call [addline]
|
||||
jmp lines
|
||||
outes:
|
||||
call [setxy],0,[word ptr lastline]
|
||||
call [print],offset menu
|
||||
waitkey:
|
||||
mov ax,0
|
||||
int 16h
|
||||
cmp ax,3B00h
|
||||
jne suit
|
||||
inc ebp
|
||||
jmp adres
|
||||
suit:
|
||||
cmp ax,3C00h
|
||||
jne suit2
|
||||
dec ebp
|
||||
jmp adres
|
||||
suit2:
|
||||
cmp ax,3D00h
|
||||
jne suit3
|
||||
add ebp,24*16
|
||||
jmp adres
|
||||
suit3:
|
||||
cmp ax,3E00h
|
||||
jne suit4
|
||||
sub ebp,24*16
|
||||
jmp adres
|
||||
suit4:
|
||||
cmp ax,3F00h
|
||||
jne suit5
|
||||
add ebp,010000h
|
||||
jmp adres
|
||||
suit5:
|
||||
cmp ax,4000h
|
||||
jne suit6
|
||||
sub ebp,010000h
|
||||
jmp adres
|
||||
suit6:
|
||||
cmp ax,4100h
|
||||
jne suit7
|
||||
mov [dword ptr pope],'TIDE'
|
||||
call [setxy],0,[word ptr lastline]
|
||||
call [print],offset menu
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
mov [xxyy2],3
|
||||
mov [xxyy],3
|
||||
call calc1
|
||||
call calc2
|
||||
waitst:
|
||||
mov ax,0
|
||||
int 16h
|
||||
cmp ah,41h
|
||||
jne tre
|
||||
mov [dword ptr pope],' EUV'
|
||||
push cs
|
||||
pop es
|
||||
jmp adres
|
||||
tre:
|
||||
cmp al,0
|
||||
jne write
|
||||
cmp ah,48h
|
||||
jne tre1
|
||||
cmp [yy],0
|
||||
je waitst
|
||||
dec [yy]
|
||||
jmp cursor
|
||||
tre1:
|
||||
cmp ah,50h
|
||||
jne tre2
|
||||
mov al,[lastline]
|
||||
dec al
|
||||
xor ah,ah
|
||||
cmp [yy],ax
|
||||
je waitst
|
||||
inc [yy]
|
||||
jmp cursor
|
||||
tre2:
|
||||
cmp ah,4Dh
|
||||
jne tre4
|
||||
cmp [xx],15
|
||||
je waitst
|
||||
inc [xx]
|
||||
jmp cursor
|
||||
tre4:
|
||||
cmp ah,4Bh
|
||||
jne waitst
|
||||
cmp [xx],0
|
||||
je waitst
|
||||
dec [xx]
|
||||
jmp cursor
|
||||
write:
|
||||
call asciihex2dec
|
||||
cmp cl,15
|
||||
ja waitst
|
||||
call calc1
|
||||
call calc2
|
||||
mov edi,[es:bx-1]
|
||||
mov dx,[es:si-1]
|
||||
mov [byte ptr es:bx],0112
|
||||
mov [es:bx-1],al
|
||||
writs:
|
||||
mov ax,0
|
||||
int 16H
|
||||
mov ch,cl
|
||||
call asciihex2dec
|
||||
cmp cl,15
|
||||
ja writs
|
||||
shl ch,4
|
||||
add ch,cl
|
||||
mov [es:bx+1],al
|
||||
mov [es:si-1],ch
|
||||
mov ax,bx
|
||||
call calc3
|
||||
mov [gs:bx],ch
|
||||
pusha
|
||||
popa
|
||||
mov cl,[gs:bx]
|
||||
cmp ch,cl
|
||||
je no
|
||||
push si ax
|
||||
call [setxy],0,[word ptr lastline]
|
||||
call [print],offset msg
|
||||
mov ax,0
|
||||
int 16h
|
||||
call [setxy],0,[word ptr lastline]
|
||||
call [print],offset menu
|
||||
pop bx si
|
||||
mov [es:bx-1],edi
|
||||
mov [es:si-1],dx
|
||||
no:
|
||||
inc [xx]
|
||||
cmp [xx],16
|
||||
jne pasde
|
||||
inc [yy]
|
||||
mov [xx],0h
|
||||
pasde:
|
||||
call calc1
|
||||
call calc2
|
||||
jmp waitst
|
||||
cursor:
|
||||
call calc1
|
||||
call calc2
|
||||
jmp waitst
|
||||
suit7:
|
||||
cmp ax,4200h
|
||||
jne adres
|
||||
call [restorestate]
|
||||
retf
|
||||
calc1:
|
||||
push ax dx si
|
||||
mov ax,[xx]
|
||||
mov dx,[xx]
|
||||
shl ax,2
|
||||
shl dx,1
|
||||
add ax,dx
|
||||
add ax,27
|
||||
mov bx,[yy]
|
||||
mov dx,[yy]
|
||||
shl bx,5
|
||||
shl dx,7
|
||||
add bx,dx
|
||||
add bx,ax
|
||||
mov [byte ptr es:bx],112
|
||||
mov [byte ptr es:bx+2],112
|
||||
mov si,[xxyy]
|
||||
mov [byte ptr es:si],07
|
||||
mov [byte ptr es:si+2],07
|
||||
mov [xxyy],bx
|
||||
pop si dx ax
|
||||
ret
|
||||
calc2:
|
||||
push ax bx dx
|
||||
mov si,[yy]
|
||||
mov dx,[yy]
|
||||
shl si,5
|
||||
shl dx,7
|
||||
add si,dx
|
||||
mov dx,[xx]
|
||||
shl dx,1
|
||||
add si,dx
|
||||
add si,129
|
||||
mov [byte ptr es:si],112
|
||||
mov bx,[xxyy2]
|
||||
mov [byte ptr es:bx],07
|
||||
mov [xxyy2],si
|
||||
pop dx bx ax
|
||||
ret
|
||||
calc3:
|
||||
push dx
|
||||
xor ebx,ebx
|
||||
mov bx,[xx]
|
||||
mov dx,[yy]
|
||||
shl dx,4
|
||||
add bx,dx
|
||||
add ebx,ebp
|
||||
mov edx,ebx
|
||||
shr edx,4*4
|
||||
shl edx,4*3
|
||||
mov gs,dx
|
||||
pop dx
|
||||
ret
|
||||
asciihex2dec:
|
||||
cmp al,'a'
|
||||
jb nomin
|
||||
cmp al,'f'
|
||||
ja nomin
|
||||
sub al,'a'-'A'
|
||||
jmp ismaj
|
||||
nomin:
|
||||
cmp al,'A'
|
||||
jb nomaj
|
||||
cmp al,'F'
|
||||
ja nomaj
|
||||
ismaj:
|
||||
mov cl,al
|
||||
sub cl,'A'-10
|
||||
jmp endt
|
||||
nomaj:
|
||||
mov cl,al
|
||||
sub cl,'0'
|
||||
endt:
|
||||
ret
|
||||
|
||||
xx dw 0
|
||||
yy dw 0
|
||||
xxyy dw 3
|
||||
xxyy2 dw 3
|
||||
|
||||
lastline db 0
|
||||
sizex db 0
|
||||
sizex2 db 0
|
||||
|
||||
dep db ':',0
|
||||
msg db '\c74Erreur : zone non modifiable (ROM) pressez une touche pour continuer ',0
|
||||
menu db '\c70haut/bas [F1/2] Offset [F3/4] Segment [F5/6] Mode F7, Quitter F8 MODE '
|
||||
pope db 'VUE ',0
|
||||
spaces db '\c02%hW:%hW \c04| \c07',0
|
||||
spaces2 db '\c04 | \c07',0
|
||||
|
||||
showbuffer db 35 dup (0FFh)
|
||||
oldmode db 0
|
||||
infos vgainf <>
|
||||
|
||||
importing
|
||||
use VIDEO,setvideomode
|
||||
use VIDEO,savestate
|
||||
use VIDEO,restorestate
|
||||
use VIDEO,setxy
|
||||
use VIDEO,addline
|
||||
use VIDEO,saveparamto
|
||||
use VIDEO,disablescroll
|
||||
use VIDEO,clearscreen
|
||||
use VIDEO.LIB,print
|
||||
use VIDEO.LIB,showhex
|
||||
use VIDEO.LIB,showchar
|
||||
endi
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
|
||||
org 0h
|
||||
|
||||
start:
|
||||
header exe <"CE",1,0,0,,offset imports,,offset realstart>
|
||||
|
||||
realstart:
|
||||
call [print],offset message
|
||||
call [waitkey]
|
||||
retf
|
||||
|
||||
message db 'Appel de la librairie \c02video\c07 et de la librairie \c02EXEM-LIB.LIB\c07 !',0
|
||||
|
||||
importing
|
||||
use VIDEO.LIB,print
|
||||
use EXEM-LIB.LIB,waitkey
|
||||
endi
|
|
@ -0,0 +1,24 @@
|
|||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
|
||||
org 0h
|
||||
|
||||
start:
|
||||
header exe <"CE",1,0,0,offset exports,,,>
|
||||
|
||||
waitkey:
|
||||
mov ax,0
|
||||
int 16h
|
||||
retf
|
||||
|
||||
exporting
|
||||
|
||||
declare waitkey
|
||||
ende
|
|
@ -0,0 +1,117 @@
|
|||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\fat.h"
|
||||
include "..\include\divers.h"
|
||||
include "..\include\graphic.h"
|
||||
|
||||
org 0h
|
||||
|
||||
start:
|
||||
header exe <"CE",1,0,0,,offset imports,,offset realstart>
|
||||
|
||||
realstart:
|
||||
call [saveparamto],offset infos
|
||||
call [print],offset msg1
|
||||
call [initdrive]
|
||||
xor bp,bp
|
||||
call [findfirstfile],offset bufferentry
|
||||
jc nofiles
|
||||
go:
|
||||
push [word bufferentry.result.fileattr]
|
||||
push [bufferentry.result.filesize]
|
||||
push [bufferentry.result.filetime]
|
||||
push [bufferentry.result.filedate]
|
||||
push [bufferentry.result.filetimecrea]
|
||||
push [bufferentry.result.filedatecrea]
|
||||
mov bx,offset bufferentry.result.filename
|
||||
push bx
|
||||
push offset line
|
||||
call [print]
|
||||
|
||||
call [findnextfile],offset bufferentry
|
||||
jc nofiles
|
||||
inc bp
|
||||
jmp go
|
||||
nofiles:
|
||||
call [print],offset menu
|
||||
mov [xx],1
|
||||
call changelineattr,[xx],112
|
||||
endof:
|
||||
mov ax,0
|
||||
int 16h
|
||||
cmp ah,50h
|
||||
jne tre1
|
||||
cmp [xx],bp
|
||||
ja endof
|
||||
call changelineattr,[xx],7
|
||||
inc [xx]
|
||||
call changelineattr,[xx],112
|
||||
jmp endof
|
||||
tre1:
|
||||
cmp ah,48h
|
||||
jne tre2
|
||||
cmp [xx],1
|
||||
je endof
|
||||
call changelineattr,[xx],7
|
||||
dec [xx]
|
||||
call changelineattr,[xx],112
|
||||
jmp endof
|
||||
tre2:
|
||||
cmp al,0Dh
|
||||
jne tre3
|
||||
tre3:
|
||||
cmp ah,59
|
||||
jne tre4
|
||||
jmp realstart
|
||||
tre4:
|
||||
cmp ah,67
|
||||
jne endof
|
||||
retf
|
||||
|
||||
;couleur al pour ligne %0 en %1
|
||||
PROC changelineattr near
|
||||
USES ax,bx,di,es
|
||||
ARG @line:word,@attr:word
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
mov ax,[@line]
|
||||
add ax,3
|
||||
mul [cs:infos.columns]
|
||||
mov di,ax
|
||||
shl di,1
|
||||
mov al,[cs:infos.columns]
|
||||
inc di
|
||||
mov bx,[@attr]
|
||||
@@popep:
|
||||
mov [es:di],bl
|
||||
add di,2
|
||||
dec al
|
||||
jnz @@popep
|
||||
ret
|
||||
endp changelineattr
|
||||
|
||||
xx dw 1
|
||||
xxold dw 0
|
||||
menu db '\c70 [F1] Lire disque [F9] Quitter \c07',0
|
||||
msg1 db '\e\g00,00\c70 Gestionnaire de fichier Version 1.5 '
|
||||
db '\g00,01\c07--------------------------------------------------------------------------------'
|
||||
db '\g00,02Nom Ext. Date creation Date modification Taille Attributs'
|
||||
db '\g00,03-------------------------------------------------------------------------------\l',0
|
||||
line db '\c07%n %d %t %d %t %z %a\l',0
|
||||
bufferentry find <>
|
||||
infos vgainf <>
|
||||
|
||||
importing
|
||||
use VIDEO.LIB,print
|
||||
use VIDEO,saveparamto
|
||||
use DISQUE,initdrive
|
||||
use DISQUE,findfirstfile
|
||||
use DISQUE,findnextfile
|
||||
endi
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
|
||||
org 0h
|
||||
|
||||
start:
|
||||
header exe <"CE",1,0,0,,,,offset realstart>
|
||||
|
||||
realstart:
|
||||
retf
|
||||
|
||||
PNP_ADR_PORT equ 0x279
|
||||
PNP_WRITE_PORT equ 0xA79
|
||||
;MIN and MAX READ_ADDR must have the bottom two bits set
|
||||
MIN_READ_ADDR equ 0x203
|
||||
MAX_READ_ADDR equ 0x3FF
|
||||
;READ_ADDR_STEP must be a multiple of 4
|
||||
READ_ADDR_STEP equ 8
|
||||
|
||||
;bits
|
||||
CONFIG_WAIT_FOR_KEY equ 0x02
|
||||
CONFIG_RESET_CSN equ 0x04
|
||||
IDENT_LEN equ 9
|
||||
|
||||
;renvoie le timer en ax
|
||||
ctc:
|
||||
cli
|
||||
mov dx,043h
|
||||
mov al,0
|
||||
out dx,al
|
||||
mov dx,40h
|
||||
in al,dx
|
||||
mov ah,al
|
||||
in al,dx
|
||||
sti
|
||||
ret
|
||||
|
||||
;attend pendant ax microsecondes
|
||||
usleep:
|
|
@ -0,0 +1,91 @@
|
|||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
|
||||
org 0h
|
||||
|
||||
start:
|
||||
header exe <"CE",1,0,0,,offset imports,,offset realstart>
|
||||
|
||||
realstart:
|
||||
call [cs:mballoc],65535
|
||||
jc problem3
|
||||
push ax
|
||||
pop es
|
||||
call [cs:projfile],offset logo
|
||||
jc problem
|
||||
mov ecx,eax
|
||||
call [cs:mbfind],offset logo
|
||||
jc problem
|
||||
call [cs:decompressrle],ax,0,es,0,cx
|
||||
jc problem2
|
||||
push es
|
||||
pop ds
|
||||
call [cs:savestate]
|
||||
call [cs:setvideomode],word 8
|
||||
call [cs:clearscreen]
|
||||
call [cs:loadbmppalet],word 0
|
||||
call [cs:showbmp],word 0,word 20,word 150
|
||||
jc problem4
|
||||
push cs
|
||||
pop ds
|
||||
call [cs:print],offset poper
|
||||
endofit:
|
||||
xor ax,ax
|
||||
int 16h
|
||||
call [cs:restorestate]
|
||||
retf
|
||||
|
||||
problem:
|
||||
push cs
|
||||
pop ds
|
||||
call [cs:print],offset error
|
||||
jmp endofit
|
||||
|
||||
problem2:
|
||||
push cs
|
||||
pop ds
|
||||
call [cs:print],offset error2
|
||||
jmp endofit
|
||||
|
||||
problem3:
|
||||
push cs
|
||||
pop ds
|
||||
call [cs:print],offset error3
|
||||
jmp endofit
|
||||
|
||||
problem4:
|
||||
push cs
|
||||
pop ds
|
||||
call [cs:print],offset error4
|
||||
jmp endofit
|
||||
|
||||
poper db '\c0BC\c0CO\c0DS\c0E2\c0E0\c0E0\c0F0 en mode graphique',0
|
||||
logo db 'COS.RIP',0
|
||||
ok1 db 'Chargement de l''image OK',0
|
||||
ok2 db 'Decompression de l''image OK',0
|
||||
error3 db '\c04Une erreur est apparue lors de l''allocation de mémoire',0
|
||||
error db '\c04Une erreur est apparue lors du chargement de l''image',0
|
||||
error2 db '\c04Une erreur est apparue lors de la decompression de l''image',0
|
||||
error4 db '\c0FUne erreur est apparue lors de l''affichage de l''image',0
|
||||
|
||||
|
||||
importing
|
||||
use VIDEO,restorestate
|
||||
use VIDEO,savestate
|
||||
use VIDEO,setvideomode
|
||||
use VIDEO,clearscreen
|
||||
use DISQUE,decompressrle
|
||||
use DISQUE,projfile
|
||||
use SYSTEME,mbfind
|
||||
use SYSTEME,mballoc
|
||||
use VIDEO.LIB,print
|
||||
use BMP.LIB,showbmp
|
||||
use BMP.LIB,loadbmppalet
|
||||
endi
|
|
@ -0,0 +1,471 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0100h
|
||||
start:
|
||||
;call setemettor
|
||||
call getfirstlpt
|
||||
call initlpt
|
||||
call receivecommand
|
||||
ret
|
||||
|
||||
|
||||
|
||||
gogo db 'Salut'
|
||||
gotoz db 23 dup (0)
|
||||
|
||||
;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 [bx]
|
||||
pop es di cx ax
|
||||
ret
|
||||
command db 25 dup (0)
|
||||
cmd dw nothings
|
||||
dw sendram
|
||||
|
||||
nothings:
|
||||
ret
|
||||
|
||||
Sendram:
|
||||
push ax cx si ds
|
||||
mov ax,es:[di]
|
||||
mov si,ax
|
||||
mov ax,es:[di+2]
|
||||
mov ds,ax
|
||||
mov cx,es:[di+2]
|
||||
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,ax
|
||||
ret
|
||||
|
||||
timeout dw tensec
|
||||
|
||||
getTimeout:
|
||||
mov ax,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 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,times
|
||||
mov ecx,0
|
||||
pop ds ax
|
||||
ret
|
||||
|
||||
;->
|
||||
GetLptOut:
|
||||
push dx
|
||||
mov dx,lpt
|
||||
in al,dx
|
||||
pop dx
|
||||
ret
|
||||
|
||||
GetLptIn:
|
||||
push dx
|
||||
mov dx,lpt
|
||||
inc dx
|
||||
in al,dx
|
||||
shr al,3
|
||||
pop dx
|
||||
ret
|
||||
|
||||
GetLptInOut:
|
||||
push dx
|
||||
mov dx,lpt
|
||||
add dx,2
|
||||
in al,dx
|
||||
and al,11111b
|
||||
pop dx
|
||||
ret
|
||||
|
||||
SetLptOut:
|
||||
push dx
|
||||
mov dx,lpt
|
||||
out dx,al
|
||||
pop dx
|
||||
ret
|
||||
|
||||
SetLptIn:
|
||||
push dx
|
||||
mov dx,lpt
|
||||
inc dx
|
||||
out dx,al
|
||||
pop dx
|
||||
ret
|
||||
|
||||
SetLptInOut:
|
||||
push dx
|
||||
mov dx,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 ax 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 ax
|
||||
ret
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
end start;
|
|
@ -0,0 +1,12 @@
|
|||
program Project1;
|
||||
|
||||
uses
|
||||
Forms,
|
||||
Unit1 in 'UNIT1.PAS' {Form1};
|
||||
|
||||
{$R *.RES}
|
||||
|
||||
begin
|
||||
Application.CreateForm(TForm1, Form1);
|
||||
Application.Run;
|
||||
end.
|
|
@ -0,0 +1,34 @@
|
|||
[Compiler]
|
||||
A=1
|
||||
B=0
|
||||
D=1
|
||||
F=0
|
||||
I=1
|
||||
K=1
|
||||
L=1
|
||||
P=1
|
||||
Q=0
|
||||
R=0
|
||||
S=1
|
||||
T=0
|
||||
U=1
|
||||
V=1
|
||||
W=0
|
||||
X=1
|
||||
Y=1
|
||||
|
||||
[Linker]
|
||||
MapFile=0
|
||||
LinkBuffer=0
|
||||
DebugInfo=0
|
||||
OptimizeExe=0
|
||||
StackSize=16384
|
||||
HeapSize=8192
|
||||
|
||||
[Directories]
|
||||
OutputDir=
|
||||
SearchPath=
|
||||
Conditionals=
|
||||
|
||||
[Parameters]
|
||||
RunParams=
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,517 @@
|
|||
unit Unit1;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
|
||||
Forms, Dialogs, StdCtrls, Grids, Outline, DirOutln, FileCtrl, Buttons,
|
||||
Gauges, ExtCtrls, Spin, Mask;
|
||||
|
||||
type
|
||||
TForm1 = class(TForm)
|
||||
DriveComboBox1: TDriveComboBox;
|
||||
FilterComboBox1: TFilterComboBox;
|
||||
FileListBox1: TFileListBox;
|
||||
DirectoryListBox1: TDirectoryListBox;
|
||||
SpeedButton1: TSpeedButton;
|
||||
SpeedButton2: TSpeedButton;
|
||||
Memo1: TMemo;
|
||||
Memo2: TMemo;
|
||||
Memo3: TMemo;
|
||||
SpeedButton3: TSpeedButton;
|
||||
SpeedButton4: TSpeedButton;
|
||||
Gauge1: TGauge;
|
||||
SpeedButton5: TSpeedButton;
|
||||
SpeedButton6: TSpeedButton;
|
||||
SpinButton1: TSpinButton;
|
||||
MaskEdit1: TMaskEdit;
|
||||
SpeedButton8: TSpeedButton;
|
||||
SpinButton2: TSpinButton;
|
||||
okm: TCheckBox;
|
||||
Label1: TLabel;
|
||||
procedure FormActivate(Sender: TObject);
|
||||
procedure SpinButton1DownClick(Sender: TObject);
|
||||
procedure SpinButton1UpClick(Sender: TObject);
|
||||
procedure showadress(Sender: TObject);
|
||||
procedure SpeedButton6Click(Sender: TObject);
|
||||
procedure SpeedButton8Click(Sender: TObject);
|
||||
procedure MaskEdit1Change(Sender: TObject);
|
||||
procedure SpinButton2DownClick(Sender: TObject);
|
||||
procedure SpinButton2UpClick(Sender: TObject);
|
||||
procedure SpeedButton3Click(Sender: TObject);
|
||||
procedure Memo2Click(Sender: TObject);
|
||||
|
||||
private
|
||||
{ Private-déclarations }
|
||||
public
|
||||
{ Public-déclarations }
|
||||
end;
|
||||
|
||||
const UNESEC = 1000;
|
||||
DIXSEC = 4000;
|
||||
ACK = $00;
|
||||
NAK = $FF;
|
||||
MAXTRY = 5;
|
||||
|
||||
type DBloc = array[ 1..15534 ] of byte;
|
||||
type BHEADER = record
|
||||
case boolean of
|
||||
true : ( Checksum:byte;
|
||||
Lenb : byte;
|
||||
Lenh : byte;
|
||||
Token : byte;
|
||||
|
||||
);
|
||||
false : ( Champ : array[ 0..3 ] of byte );
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
Inlpt : word;
|
||||
Outlpt : word;
|
||||
times : longint;
|
||||
Block : DBLOC;
|
||||
adress :longint;
|
||||
errors: boolean;
|
||||
reste:integer;
|
||||
pop:boolean;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.DFM}
|
||||
|
||||
function Getlpt( Number : integer ) : boolean;
|
||||
begin
|
||||
Outlpt := MemW[ $0040: 6 + Number * 2 ];
|
||||
if ( Outlpt <> 0 ) then
|
||||
begin
|
||||
Inlpt := Outlpt + 1;
|
||||
Getlpt := TRUE;
|
||||
end
|
||||
else
|
||||
Getlpt := FALSE;
|
||||
end;
|
||||
|
||||
function getfirstlpt:byte;
|
||||
var i:integer;
|
||||
begin
|
||||
i:=1;
|
||||
while (not(getlpt(i)) or (i>4)) do inc(i);
|
||||
if (getlpt(i)=false) then i:=0;
|
||||
getfirstlpt:= i;
|
||||
end;
|
||||
|
||||
function getb:byte;
|
||||
begin
|
||||
getb:=port[inlpt] and $F8
|
||||
end;
|
||||
|
||||
procedure putb(what:byte);
|
||||
begin
|
||||
port[outlpt]:=what;
|
||||
end;
|
||||
|
||||
procedure starttimer;
|
||||
begin
|
||||
times:=GetTickCount;
|
||||
end;
|
||||
|
||||
function endtimer:longint;
|
||||
begin
|
||||
endtimer:=getTickCount-times;
|
||||
end;
|
||||
|
||||
function Initlpt( Emetteur : boolean ) : boolean;
|
||||
begin
|
||||
errors:=false;
|
||||
putb($10);
|
||||
putb($18);
|
||||
putb($10);
|
||||
starttimer;
|
||||
if ( Emetteur ) then
|
||||
begin
|
||||
while ( ( GetB <> $00 ) and ( Endtimer <= DIXSEC ) ) do;
|
||||
end
|
||||
else
|
||||
begin
|
||||
while ( ( GetB <> $00 ) and ( Endtimer <= DIXSEC ) ) do;
|
||||
PutB( $10 );
|
||||
end;
|
||||
Initlpt := ( Endtimer <= DIXSEC );
|
||||
end;
|
||||
|
||||
function sendlpt( Wert : byte ) : boolean;
|
||||
var Retour : byte;
|
||||
label fin;
|
||||
begin
|
||||
if errors then goto fin;
|
||||
Starttimer;
|
||||
PutB( Wert and $0F );
|
||||
while ( ( ( GetB and 128 ) = 0 ) and ( Endtimer <= DIXSEC )) do;
|
||||
if ( Endtimer > DIXSEC ) then
|
||||
begin
|
||||
errors:=true;
|
||||
goto fin;
|
||||
end;
|
||||
Retour := ( GetB shr 3 ) and $0F;
|
||||
Starttimer;
|
||||
PutB( ( Wert shr 4 ) or $10 );
|
||||
while ( ( ( GetB and 128 ) <> 0 ) and ( Endtimer <= DIXSEC ) ) do
|
||||
if ( Endtimer > DIXSEC ) then
|
||||
begin
|
||||
errors:=true;
|
||||
goto fin;
|
||||
end;
|
||||
Retour := Retour or ( ( GetB shl 1 ) and $F0 );
|
||||
fin:
|
||||
sendlpt := ( Wert = Retour );
|
||||
end;
|
||||
|
||||
function receivelpt : byte;
|
||||
var LoNib,
|
||||
HiNib : byte;
|
||||
label fin;
|
||||
begin
|
||||
if errors then goto fin;
|
||||
Starttimer;
|
||||
while ( ( ( GetB and 128 ) = 0 ) and ( Endtimer <= DIXSEC )) do;
|
||||
if ( Endtimer > DIXSEC ) then
|
||||
begin
|
||||
errors:=true;
|
||||
goto fin;
|
||||
end;
|
||||
LoNib := ( GetB shr 3 ) and $0F;
|
||||
PutB( LoNib );
|
||||
Starttimer;
|
||||
while ( ( ( GetB and 128 ) <> 0 ) and ( Endtimer <= DIXSEC ) ) do;
|
||||
if ( Endtimer > DIXSEC ) then
|
||||
begin
|
||||
errors:=true;
|
||||
goto fin;
|
||||
end;
|
||||
HiNib := ( GetB shl 1 ) and $F0;
|
||||
PutB( ( HiNib shr 4 ) or $10 );
|
||||
fin:
|
||||
receivelpt := ( LoNib or HiNib );
|
||||
end;
|
||||
|
||||
function checksum8(Nombre:word;Dptr : pointer):byte ;
|
||||
var donnees : ^DBloc ;
|
||||
i:word;
|
||||
ch:byte;
|
||||
begin
|
||||
ch:=0;
|
||||
donnees:=dptr;
|
||||
for i:=1 to Nombre do ch:=ch + Donnees^[ i ];
|
||||
checksum8:=ch;
|
||||
end;
|
||||
|
||||
function SendlptBlock( Token : byte;
|
||||
Nombre : word;
|
||||
Dptr : pointer ):boolean;
|
||||
var header : BHEADER;
|
||||
ok : boolean;
|
||||
i : word;
|
||||
trys : word;
|
||||
Donnees : ^DBloc;
|
||||
label fin;
|
||||
begin
|
||||
form1.gauge1.visible:=true;
|
||||
header.Token := Token;
|
||||
header.Lenb := (Nombre and $FF00) shr 8;
|
||||
header.Lenh := Nombre and $FF;
|
||||
header.Checksum:=checksum8(nombre,Dptr);
|
||||
trys := MAXTRY;
|
||||
repeat
|
||||
ok := TRUE;
|
||||
for i := 0 to 3 do
|
||||
ok := ok and sendlpt( Header.Champ[ i ] );
|
||||
if ( ok ) then
|
||||
ok := ok and sendlpt( ACK )
|
||||
else
|
||||
ok := ok and sendlpt( NAK );
|
||||
if ( not ok ) then
|
||||
dec( trys );
|
||||
until ( ( ok ) or ( trys = 0 ) or (errors));
|
||||
if ( (trys = 0) or (errors)) then
|
||||
begin
|
||||
goto fin;
|
||||
SendlptBlock:=false;
|
||||
end;
|
||||
if ( Nombre > 0 ) then
|
||||
begin
|
||||
Donnees := DPTR;
|
||||
trys := MAXTRY;
|
||||
repeat
|
||||
ok := TRUE;
|
||||
for i := Nombre downto 1 do
|
||||
begin
|
||||
ok := ok and sendlpt( Donnees^[ i ] );
|
||||
reste:=trunc(100-i/nombre*100);
|
||||
form1.gauge1.progress:=reste
|
||||
end;
|
||||
if ( ok ) then
|
||||
ok := ok and sendlpt( ACK )
|
||||
else
|
||||
ok := ok and sendlpt( NAK );
|
||||
if ( not ok ) then
|
||||
dec( trys );
|
||||
until ( ( ok ) or ( trys = 0 ) or (errors));
|
||||
if ( (trys = 0) or (errors)) then
|
||||
begin
|
||||
goto fin;
|
||||
SendlptBlock:=false;
|
||||
end;
|
||||
end;
|
||||
SendlptBlock:=true;
|
||||
fin:
|
||||
form1.gauge1.visible:=false;
|
||||
end;
|
||||
|
||||
function ReceivelptBlock( var Token : byte;
|
||||
var Len : word;
|
||||
Dptr : pointer ):boolean;
|
||||
var header : BHEADER;
|
||||
ok : boolean;
|
||||
i : word;
|
||||
trys : word;
|
||||
EscapeStatus : boolean;
|
||||
ByteBuffer : byte;
|
||||
Donnees : ^DBloc;
|
||||
label fin,good;
|
||||
begin
|
||||
form1.gauge1.visible:=true;
|
||||
trys := MAXTRY;
|
||||
repeat
|
||||
for i:= 0 to 3 do
|
||||
Header.Champ[ i ] := receivelpt;
|
||||
ByteBuffer := receivelpt;
|
||||
if ( ByteBuffer <> ACK ) then
|
||||
dec( trys );
|
||||
until ( ( trys = 0 ) or ( ByteBuffer = ACK ) or (errors));
|
||||
if ( (trys = 0) or (errors)) then
|
||||
begin
|
||||
goto fin;
|
||||
receivelptblock:=false;
|
||||
end;
|
||||
Token := Header.Token;
|
||||
Len := Header.Lenh+(Header.Lenb shl 8);
|
||||
if ( Len > 0 ) then
|
||||
begin
|
||||
Donnees := Dptr;
|
||||
trys := MAXTRY;
|
||||
repeat
|
||||
for i := len downto 1 do
|
||||
begin
|
||||
Donnees^[ i ] := receivelpt;
|
||||
reste:=trunc(100-i/len*100);
|
||||
form1.gauge1.progress:=reste
|
||||
end;
|
||||
ByteBuffer := receivelpt;
|
||||
if ( ByteBuffer <> ACK ) then
|
||||
dec( trys );
|
||||
until ( ( trys = 0 ) or ( ByteBuffer = ACK ) );
|
||||
if ( trys = 0 ) then
|
||||
begin
|
||||
goto fin;
|
||||
receivelptblock:=false;
|
||||
end;
|
||||
end;
|
||||
receivelptblock:=true;
|
||||
fin:
|
||||
form1.gauge1.visible:=false;
|
||||
end;
|
||||
|
||||
|
||||
function Sendfile(name:string):boolean;
|
||||
var lus:word;
|
||||
Fichier:file;
|
||||
begin
|
||||
assign( Fichier, Name );
|
||||
reset( Fichier, 1 );
|
||||
Blockread( Fichier, Block, 15000, Lus );
|
||||
if lus>0 then
|
||||
Sendfile:=SendlptBlock( 1, Lus, @Block )
|
||||
else
|
||||
Sendfile:=false;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormActivate(Sender: TObject);
|
||||
begin
|
||||
adress:=0;
|
||||
showadress(sender);
|
||||
Memo2Click(Sender);
|
||||
SpeedButton8Click(Sender);
|
||||
pop:=true;
|
||||
end;
|
||||
|
||||
procedure TForm1.SpinButton1DownClick(Sender: TObject);
|
||||
begin
|
||||
if (adress>0) and okm.checked then
|
||||
begin
|
||||
dec(adress);
|
||||
SpeedButton6Click(Sender);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.SpinButton1UpClick(Sender: TObject);
|
||||
begin
|
||||
if (adress<65536*16) and okm.checked then
|
||||
begin
|
||||
inc(adress);
|
||||
SpeedButton6Click(Sender);
|
||||
end;
|
||||
end;
|
||||
|
||||
function hextoint(hex:string;n:word):longint;
|
||||
var
|
||||
resu,exp:longint;
|
||||
i:word;
|
||||
begin
|
||||
hex :=UpperCase(hex);
|
||||
resu:=0;
|
||||
exp:=1;
|
||||
for i:=n downto 1 do
|
||||
begin
|
||||
resu:=resu+(Pos(hex[i],'0123456789ABCDEF')-1)*(exp);
|
||||
exp:=exp*16
|
||||
end;
|
||||
hextoint:=resu;
|
||||
end ;
|
||||
|
||||
function adresstoint(hex:string):longint;
|
||||
begin
|
||||
adresstoint:=hextoint(Copy(hex, 1, 4),4)shl 4 + hextoint(Copy(hex, length(hex)-3, 4),4)
|
||||
end;
|
||||
|
||||
procedure TForm1.showadress(Sender: TObject);
|
||||
var i,j,adh,adl:word;
|
||||
adress2:longint;
|
||||
old,old2:string;
|
||||
begin
|
||||
memo1.clear;
|
||||
memo2.clear;
|
||||
memo3.clear;
|
||||
for i:=0 to 29 do
|
||||
begin
|
||||
adress2:=adress+i*16;
|
||||
adl:=adress2 and $FFFF;
|
||||
adh:=(adress2 and $F0000) shr 4;
|
||||
memo1.lines.add(IntToHex(adh,4)+':'+IntToHex(adl,4)) ;
|
||||
old:='';
|
||||
old2:='';
|
||||
for j:=1 to 16 do
|
||||
begin
|
||||
old:=old+inttohex(block[i*16+j],2);
|
||||
if block[i*16+j]=0 then
|
||||
old2:=old2+'.'
|
||||
else
|
||||
old2:=old2+char(block[i*16+j]) ;
|
||||
if j mod 2=0 then old:=old+' ';
|
||||
end;
|
||||
memo2.lines.add(old) ;
|
||||
memo3.lines.add(old2) ;
|
||||
end
|
||||
end;
|
||||
|
||||
procedure TForm1.SpeedButton8Click(Sender: TObject);
|
||||
begin
|
||||
if getfirstlpt=0 then showmessage('Pas de port parallèle détecté');
|
||||
errors:=false;
|
||||
end;
|
||||
|
||||
procedure TForm1.SpeedButton6Click(Sender: TObject);
|
||||
var adl,adh,good:word;
|
||||
tok:byte;
|
||||
ok:boolean;
|
||||
begin
|
||||
if (inlpt=0) then SpeedButton8Click(sender);
|
||||
if ((inlpt<>0) and (initlpt(true))) then
|
||||
begin
|
||||
adl:=adress and $FFFF;
|
||||
adh:=(adress and $F0000) shr 4;
|
||||
Block[1]:=lo(adl);
|
||||
Block[2]:= hi(adl);
|
||||
Block[3]:= lo(adh);
|
||||
Block[4]:= hi(adh);
|
||||
Block[5]:= lo(512);
|
||||
Block[6]:= hi(512) ;
|
||||
ok:=false;
|
||||
if SendlptBlock( 1,6,@Block) then ok:=receivelptBlock(tok,good ,@Block); {demande de RAM}
|
||||
if not(ok) or errors then Showmessage('Erreur de transmission !!!!!!!!!!');
|
||||
showadress(sender);
|
||||
end
|
||||
else
|
||||
Showmessage('Pas de PC distant');
|
||||
putb($08);
|
||||
errors:=false;
|
||||
end;
|
||||
|
||||
procedure TForm1.MaskEdit1Change(Sender: TObject);
|
||||
begin
|
||||
if pop then
|
||||
begin
|
||||
adress:=adresstoint(maskedit1.text);
|
||||
if okm.checked=true then SpeedButton6Click(sender);
|
||||
showadress(sender);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.SpinButton2DownClick(Sender: TObject);
|
||||
begin
|
||||
if (adress+16*30<=65536*16) and okm.checked then
|
||||
begin
|
||||
adress:=adress+16*30;
|
||||
SpeedButton6Click(Sender);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.SpinButton2UpClick(Sender: TObject);
|
||||
begin
|
||||
if (adress-16*30>=0) and okm.checked then
|
||||
begin
|
||||
adress:=adress-16*30;
|
||||
SpeedButton6Click(Sender);
|
||||
end;
|
||||
end;
|
||||
procedure TForm1.SpeedButton3Click(Sender: TObject);
|
||||
var adl,adh,good:word;
|
||||
adress2:longint;
|
||||
tok:byte;
|
||||
ok:boolean;
|
||||
begin
|
||||
if (inlpt=0) then SpeedButton8Click(sender);
|
||||
if ((inlpt<>0) and (initlpt(true))) then
|
||||
begin
|
||||
adress2 :=adresstoint(maskedit1.text);
|
||||
adl:=adress2 and $FFFF;
|
||||
adh:=(adress2 and $F0000) shr 4;
|
||||
Block[1]:=lo(adl);
|
||||
Block[2]:= hi(adl);
|
||||
Block[3]:= lo(adh);
|
||||
Block[4]:= hi(adh);
|
||||
ok:=SendlptBlock( 7,4,@Block);
|
||||
if not(ok) or errors then Showmessage('Erreur de transmission !!!!!!!!!!');
|
||||
end
|
||||
else
|
||||
Showmessage('Pas de PC distant');
|
||||
putb($18);
|
||||
errors:=false;
|
||||
end;
|
||||
procedure TForm1.Memo2Click(Sender: TObject);
|
||||
var ligne,col,pos,adl,adh:word;
|
||||
adress2:longint;
|
||||
begin
|
||||
ligne:=memo2.selstart div 42;
|
||||
col:= (trunc((memo2.selstart mod 42+1) / 2.5));
|
||||
pos:=16*ligne+col;
|
||||
label1.caption:=inttostr(ligne)+':'+inttostr(col)+':'+inttostr(pos);
|
||||
adress2:=pos+adress;
|
||||
adl:=adress2 and $FFFF;
|
||||
adh:=(adress2 and $F0000) shr 4;
|
||||
pop:=false;
|
||||
maskedit1.text:=inttohex(adh,4)+':'+inttohex(adl,4);
|
||||
pop:=true;
|
||||
end;
|
||||
|
||||
end.
|
|
@ -0,0 +1,22 @@
|
|||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
|
||||
org 0h
|
||||
|
||||
start:
|
||||
header exe <"CE",1,0,0,,,,offset realstart>
|
||||
|
||||
realstart:
|
||||
mov eax,cr0
|
||||
or al,1
|
||||
mov cr0,eax
|
||||
retf
|
||||
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
|
||||
org 0h
|
||||
|
||||
start:
|
||||
header exe <"CE",1,0,0,,offset imports,,offset realstart>
|
||||
|
||||
realstart:
|
||||
call [mouseon]
|
||||
jc errormouse
|
||||
call [print],offset message
|
||||
retf
|
||||
|
||||
errormouse:
|
||||
call [print],offset errormessage
|
||||
retf
|
||||
|
||||
message db 'Activation de la souris\l',0
|
||||
errormessage db 'impossible d''activer la souris\l',0
|
||||
|
||||
importing
|
||||
use VIDEO.LIB,print
|
||||
use MOUSE.SYS,mouseon
|
||||
endi
|
|
@ -0,0 +1,169 @@
|
|||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
|
||||
org 0h
|
||||
|
||||
start:
|
||||
header exe <"CE",1,0,0,,offset imports,,offset realstart>
|
||||
|
||||
realstart:
|
||||
call [savestate]
|
||||
push 0FFFFh
|
||||
pushd 652201
|
||||
pushd 1545454545
|
||||
push 1523
|
||||
push 2041
|
||||
push offset zero
|
||||
push offset fixe
|
||||
push 5
|
||||
push 'i'
|
||||
push 'a'
|
||||
pushd 5041
|
||||
pushd 125645
|
||||
pushd 5041
|
||||
pushd 125645
|
||||
pushd 5041
|
||||
pushd 125645
|
||||
push offset message
|
||||
call [print]
|
||||
xor ax,ax
|
||||
int 16h
|
||||
call [clearscreen]
|
||||
call [xchgpages]
|
||||
call [clearscreen]
|
||||
mov cx,200
|
||||
go1:
|
||||
call [xchgpages]
|
||||
call [waitretrace]
|
||||
call [print],offset textdemo1
|
||||
call put
|
||||
call [xchgpages]
|
||||
call [waitretrace]
|
||||
dec cx
|
||||
jnz go1
|
||||
mov cx,200
|
||||
go2:
|
||||
call [xchgpages]
|
||||
call [waitretrace]
|
||||
call [print],offset textdemo2
|
||||
call put
|
||||
call [xchgpages]
|
||||
call [waitretrace]
|
||||
dec cx
|
||||
jnz go2
|
||||
mov cx,200
|
||||
go3:
|
||||
call [xchgpages]
|
||||
call [waitretrace]
|
||||
call [print],offset textdemo3
|
||||
call put
|
||||
call [xchgpages]
|
||||
call [waitretrace]
|
||||
dec cx
|
||||
jnz go3
|
||||
call [xchgpages]
|
||||
call [clearscreen]
|
||||
call [print],offset texte2
|
||||
call [xchgpages]
|
||||
call [clearscreen]
|
||||
call [xchgpages]
|
||||
mov bp,255
|
||||
xor edx,edx
|
||||
go4:
|
||||
call [xchgpages]
|
||||
call [waitretrace]
|
||||
inc edx
|
||||
push edx
|
||||
push offset texte3
|
||||
call [print]
|
||||
call [xchgpages]
|
||||
call [waitretrace]
|
||||
dec bp
|
||||
jnz go4
|
||||
push offset texte4
|
||||
call [print]
|
||||
mov ax,0
|
||||
int 16h
|
||||
call [restorestate]
|
||||
retf
|
||||
put:
|
||||
call random
|
||||
mov di,dx
|
||||
and di,4096-2
|
||||
mov si,offset fond
|
||||
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
|
||||
|
||||
zero db 'Chaine a z‚ro terminal',0
|
||||
fixe db 20,'Chaine a taille fixe'
|
||||
message db "\m01\e\c07\h01D‚monstration de la librairie VIDEO.LIB\l\l"
|
||||
db "\c01Nombres entiers ou sign‚s (%%u/%%i):\l%u\l%iD\l"
|
||||
db "\c02Nombre hexad‚cimaux (%%h):\l%hD\l%hW\l"
|
||||
db "\c03Nombres Binaires (%%b):\l%bD\l%bB\l"
|
||||
db "\c04Caracteres simples ou multiples (%%c/%%cM):\l%c\l%cM\l"
|
||||
db "\c05Chaines a z‚ro terminal ou fixes (%%0/%%s):\l%s\l%0\l"
|
||||
db "\c06Dates et heures (%%t/%%d):\l%t\l%d\l"
|
||||
db "\c07Nombre a echelle automatique (%%z):\l%z\l%z\l"
|
||||
db "\c08Attributs de fichiers (%%a):\l%a",0
|
||||
|
||||
fond db 16,'Ceci est un fond'
|
||||
textdemo1 db '\c05Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling\l',0
|
||||
textdemo2 db '\c07Vertical Vertical Vertical Vertical Vertical Vertical Vertical Vertical\l',0
|
||||
textdemo3 db '\c09Rapide Rapide Rapide Rapide Rapide Rapide Rapide Rapide\l',0
|
||||
texte1 db 'Echange rapide de pages Vid‚o',0
|
||||
texte2 db '\g04,13Routine d''affichage Ultra Rapide Agissant sur le Mat‚riel'
|
||||
db '\g04,14Possibilit‚ de r‚aliser des effets de superposition',0
|
||||
texte3 db '\c04%bD\l',0
|
||||
texte4 db '\g01,00Sauvegarde et restauration de l''ecran (%%s/%%r)',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
|
||||
|
||||
|
||||
importing
|
||||
use VIDEO.LIB,print
|
||||
use VIDEO,xchgpages
|
||||
use VIDEO,setvideomode
|
||||
use VIDEO,clearscreen
|
||||
use VIDEO,savestate
|
||||
use VIDEO,restorestate
|
||||
use VIDEO,waitretrace
|
||||
endi
|
|
@ -0,0 +1,106 @@
|
|||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
|
||||
org 0h
|
||||
|
||||
start:
|
||||
header exe <"CE",1,0,0,,offset imports,,offset realstart>
|
||||
|
||||
realstart:
|
||||
call [savestate]
|
||||
call [print],offset msg
|
||||
mov bp,1000h
|
||||
xor di,di
|
||||
xor cx,cx
|
||||
xor edx,edx
|
||||
verifall:
|
||||
mov ah,1
|
||||
int 16h
|
||||
jz nokey
|
||||
cmp al,' '
|
||||
je enend
|
||||
nokey:
|
||||
mov dx,di
|
||||
push edx
|
||||
mov dx,cx
|
||||
inc dx
|
||||
push edx
|
||||
mov ax,cx
|
||||
inc ax
|
||||
mov si,100
|
||||
mul si
|
||||
mov si,2880
|
||||
div si
|
||||
mov dx,ax
|
||||
push edx
|
||||
call [print],offset msg2
|
||||
call gauge
|
||||
call [verifysector],cx
|
||||
jc errors
|
||||
je noprob
|
||||
inc di
|
||||
noprob:
|
||||
inc cx
|
||||
cmp cx,2880
|
||||
jnz verifall
|
||||
enend:
|
||||
cmp di,0
|
||||
je noatall
|
||||
call [print],offset error2
|
||||
jmp someof
|
||||
noatall:
|
||||
call [print],offset noerror
|
||||
someof:
|
||||
mov ah,0
|
||||
int 16h
|
||||
call [restorestate]
|
||||
retf
|
||||
errors:
|
||||
call [print],offset error
|
||||
mov ah,0
|
||||
int 16h
|
||||
call [restorestate]
|
||||
retf
|
||||
|
||||
error db '\g10,10Erreur avec le lecteur de disquette !',0
|
||||
error2 db '\g10,10Le disque est defectueux, appuyez sur une touche pour quitter',0
|
||||
noerror db '\g10,10Pas de secteurs defectueux, appuyez sur une touche pour continuer',0
|
||||
msg db '\m02\e\c07\g29,00- Test de surface du disque -\g02,49<Pressez espace pour quitter>',0
|
||||
msg2 db '\g10,20%u %%\g10,16%u cluster testes. \h34%u cluster defectueux. ',0
|
||||
|
||||
gauge:
|
||||
push ax dx
|
||||
mov ax,cx
|
||||
mul [sizeof]
|
||||
div [max]
|
||||
xor edx,edx
|
||||
mov dx,[sizeof]
|
||||
sub dx,ax
|
||||
push dx
|
||||
push 'Û'
|
||||
mov dx,ax
|
||||
push dx
|
||||
push 'Û'
|
||||
push offset gauges
|
||||
call [print]
|
||||
pop dx ax
|
||||
retn
|
||||
|
||||
max dw 2879
|
||||
sizeof dw 50
|
||||
|
||||
gauges db '\g10,18\c05%cM\c07%cM',0
|
||||
|
||||
importing
|
||||
use VIDEO.LIB,print
|
||||
use VIDEO,savestate
|
||||
use VIDEO,restorestate
|
||||
use DISQUE,verifysector
|
||||
endi
|
|
@ -0,0 +1,351 @@
|
|||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
include "..\include\graphic.h"
|
||||
|
||||
org 0h
|
||||
|
||||
start:
|
||||
header exe <"CE",1,0,0,,offset imports,,offset realstart>
|
||||
|
||||
realstart:
|
||||
mov ax,0305h
|
||||
mov bx,0008h
|
||||
int 16h
|
||||
call [savestate]
|
||||
call [setvideomode],2
|
||||
xor ebp,ebp
|
||||
xor ax,ax
|
||||
mov fs,ax
|
||||
call [disablescroll]
|
||||
adres:
|
||||
call [saveparamto],offset infos
|
||||
call [readsector],[sect],offset buffer
|
||||
jnc adres2
|
||||
errtr:
|
||||
call [setxy],0,[word ptr lastline]
|
||||
call [print],offset errordisk
|
||||
xor ax,ax
|
||||
int 16h
|
||||
adres2:
|
||||
call [saveparamto],offset infos
|
||||
mov al,[infos.lines]
|
||||
dec al
|
||||
mov [lastline],al
|
||||
mov al,[infos.columns]
|
||||
sub al,16
|
||||
mov bl,al
|
||||
shr al,2
|
||||
mov [sizex],al
|
||||
and bl,11b
|
||||
mov [sizex2],bl
|
||||
mov al,[infos.mode]
|
||||
cmp al,[oldmode]
|
||||
je noinit
|
||||
call [clearscreen]
|
||||
mov [oldmode],al
|
||||
noinit:
|
||||
call [setxy],0,0
|
||||
mov edi,ebp
|
||||
mov bh,[lastline]
|
||||
lines:
|
||||
xor edx,edx
|
||||
mov dx,di
|
||||
push edx
|
||||
mov edx,edi
|
||||
mov dx,[sect]
|
||||
push edx
|
||||
push offset spaces
|
||||
call [print]
|
||||
mov dx,di
|
||||
mov al,[sizex]
|
||||
mov esi,edi
|
||||
doaline:
|
||||
push [dword ptr di+offset buffer]
|
||||
push 8
|
||||
call [showhex]
|
||||
call [showchar],' '
|
||||
inc edi
|
||||
dec al
|
||||
jnz doaline
|
||||
mov edi,esi
|
||||
push offset spaces2
|
||||
call [print]
|
||||
mov al,[sizex]
|
||||
doaline2:
|
||||
push [word ptr di+offset buffer]
|
||||
call [showchar]
|
||||
inc edi
|
||||
dec al
|
||||
jnz doaline2
|
||||
dec bh
|
||||
je outes
|
||||
cmp [sizex2],0
|
||||
je lines
|
||||
call [addline]
|
||||
jmp lines
|
||||
outes:
|
||||
call [setxy],0,[word ptr lastline]
|
||||
call [print],offset menu
|
||||
waitkey:
|
||||
mov ax,0
|
||||
int 16h
|
||||
cmp ax,3B00h
|
||||
jne suit
|
||||
cmp bp,8*16
|
||||
jae waitkey
|
||||
add bp,16
|
||||
jmp adres2
|
||||
suit:
|
||||
cmp ax,3C00h
|
||||
jne suit2
|
||||
cmp bp,0
|
||||
je waitkey
|
||||
sub bp,16
|
||||
jmp adres2
|
||||
suit2:
|
||||
cmp ax,3D00h
|
||||
jne suit3
|
||||
cmp [sect],2880
|
||||
ja waitkey
|
||||
inc [sect]
|
||||
jmp adres
|
||||
suit3:
|
||||
cmp ax,3E00h
|
||||
jne suit4
|
||||
cmp [sect],0
|
||||
je waitkey
|
||||
dec [sect]
|
||||
jmp adres
|
||||
suit4:
|
||||
cmp ax,3F00h
|
||||
jne suit5
|
||||
jmp adres2
|
||||
suit5:
|
||||
cmp ax,4000h
|
||||
jne suit6
|
||||
call [writesector],[sect],offset buffer
|
||||
jnc waitkey
|
||||
jmp errtr
|
||||
suit6:
|
||||
cmp ax,4100h
|
||||
jne suit7
|
||||
mov [dword ptr pope],'TIDE'
|
||||
call [setxy],0,[word ptr lastline]
|
||||
call [print],offset menu
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
mov [xxyy2],3
|
||||
mov [xxyy],3
|
||||
call calc1
|
||||
call calc2
|
||||
waitst:
|
||||
mov ax,0
|
||||
int 16h
|
||||
cmp ah,41h
|
||||
jne tre
|
||||
mov [dword ptr pope],' EUV'
|
||||
push cs
|
||||
pop es
|
||||
call [writesector],[sect],offset buffer
|
||||
jnc waitkey
|
||||
jmp errtr
|
||||
tre:
|
||||
cmp al,0
|
||||
jne write
|
||||
cmp ah,48h
|
||||
jne tre1
|
||||
cmp [yy],0
|
||||
je waitst
|
||||
dec [yy]
|
||||
jmp cursor
|
||||
tre1:
|
||||
cmp ah,50h
|
||||
jne tre2
|
||||
mov al,[lastline]
|
||||
dec al
|
||||
xor ah,ah
|
||||
cmp [yy],ax
|
||||
je waitst
|
||||
inc [yy]
|
||||
jmp cursor
|
||||
tre2:
|
||||
cmp ah,4Dh
|
||||
jne tre4
|
||||
cmp [xx],15
|
||||
je waitst
|
||||
inc [xx]
|
||||
jmp cursor
|
||||
tre4:
|
||||
cmp ah,4Bh
|
||||
jne waitst
|
||||
cmp [xx],0
|
||||
je waitst
|
||||
dec [xx]
|
||||
jmp cursor
|
||||
write:
|
||||
call asciihex2dec
|
||||
cmp cl,15
|
||||
ja waitst
|
||||
call calc1
|
||||
call calc2
|
||||
mov edi,[es:bx-1]
|
||||
mov dx,[es:si-1]
|
||||
mov [byte ptr es:bx],0112
|
||||
mov [es:bx-1],al
|
||||
writs:
|
||||
mov ax,0
|
||||
int 16h
|
||||
mov ch,cl
|
||||
call asciihex2dec
|
||||
cmp cl,15
|
||||
ja writs
|
||||
shl ch,4
|
||||
add ch,cl
|
||||
mov [es:bx+1],al
|
||||
mov [es:si-1],ch
|
||||
mov ax,bx
|
||||
call calc3
|
||||
mov [bx],ch
|
||||
inc [xx]
|
||||
cmp [xx],16
|
||||
jne pasde
|
||||
inc [yy]
|
||||
mov [xx],0h
|
||||
pasde:
|
||||
call calc1
|
||||
call calc2
|
||||
jmp waitst
|
||||
cursor:
|
||||
call calc1
|
||||
call calc2
|
||||
jmp waitst
|
||||
suit7:
|
||||
cmp ax,4200h
|
||||
jne adres
|
||||
call [restorestate]
|
||||
retf
|
||||
calc1:
|
||||
push ax dx si
|
||||
mov ax,[xx]
|
||||
mov dx,[xx]
|
||||
shl ax,2
|
||||
shl dx,1
|
||||
add ax,dx
|
||||
add ax,27
|
||||
mov bx,[yy]
|
||||
mov dx,[yy]
|
||||
shl bx,5
|
||||
shl dx,7
|
||||
add bx,dx
|
||||
add bx,ax
|
||||
mov [byte ptr es:bx],112
|
||||
mov [byte ptr es:bx+2],112
|
||||
mov si,[xxyy]
|
||||
mov [byte ptr es:si],07
|
||||
mov [byte ptr es:si+2],07
|
||||
mov [xxyy],bx
|
||||
pop si dx ax
|
||||
ret
|
||||
calc2:
|
||||
push ax bx dx
|
||||
mov si,[yy]
|
||||
mov dx,[yy]
|
||||
shl si,5
|
||||
shl dx,7
|
||||
add si,dx
|
||||
mov dx,[xx]
|
||||
shl dx,1
|
||||
add si,dx
|
||||
add si,129
|
||||
mov [byte ptr es:si],112
|
||||
mov bx,[xxyy2]
|
||||
mov [byte ptr es:bx],07
|
||||
mov [xxyy2],si
|
||||
pop dx bx ax
|
||||
ret
|
||||
calc3:
|
||||
push dx
|
||||
xor bx,bx
|
||||
mov bx,[xx]
|
||||
mov dx,[yy]
|
||||
shl dx,4
|
||||
add bx,dx
|
||||
add bx,bp
|
||||
add bx,offset buffer
|
||||
pop dx
|
||||
ret
|
||||
|
||||
asciihex2dec:
|
||||
cmp al,'a'
|
||||
jb nomin
|
||||
cmp al,'f'
|
||||
ja nomin
|
||||
sub al,'a'-'A'
|
||||
jmp ismaj
|
||||
nomin:
|
||||
cmp al,'A'
|
||||
jb nomaj
|
||||
cmp al,'F'
|
||||
ja nomaj
|
||||
ismaj:
|
||||
mov cl,al
|
||||
sub cl,'A'-10
|
||||
jmp endt
|
||||
nomaj:
|
||||
mov cl,al
|
||||
sub cl,'0'
|
||||
endt:
|
||||
ret
|
||||
|
||||
xx dw 0
|
||||
yy dw 0
|
||||
xxyy dw 3
|
||||
xxyy2 dw 3
|
||||
|
||||
lastline db 0
|
||||
sizex db 0
|
||||
sizex2 db 0
|
||||
buffer db 2048 dup (0)
|
||||
|
||||
dep db ':',0
|
||||
errordisk db '\c74Une erreur est apparue sur le lecteur, appuyez sur une touche ',0
|
||||
menu db '\c70Haut&Bas [F1/2] Secteur [F3/4] Charger/Sauver [F5/6] Mode [F7] Quit. [F8] '
|
||||
pope db 'VUE ',0
|
||||
spaces db '\c02%hW:%hW \c04| \c07',0
|
||||
spaces2 db '\c04 | \c07',0
|
||||
|
||||
showbuffer db 35 dup (0FFh)
|
||||
oldmode db 0
|
||||
sect dw 0
|
||||
infos vgainf <>
|
||||
|
||||
importing
|
||||
use DISQUE,readsector
|
||||
use DISQUE,writesector
|
||||
use VIDEO,setvideomode
|
||||
use VIDEO,savestate
|
||||
use VIDEO,restorestate
|
||||
use VIDEO,setxy
|
||||
use VIDEO,addline
|
||||
use VIDEO,saveparamto
|
||||
use VIDEO,disablescroll
|
||||
use VIDEO,clearscreen
|
||||
use VIDEO.LIB,print
|
||||
use VIDEO.LIB,showhex
|
||||
use VIDEO.LIB,showchar
|
||||
endi
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue