Dodajem knjige
This commit is contained in:
@@ -0,0 +1,232 @@
|
||||
|
||||
O EQU OFFSET
|
||||
SYS EQU INT 021
|
||||
STOP EQU INT 020
|
||||
TSR EQU INT 027
|
||||
|
||||
|
||||
;USE PSP FOR DATA
|
||||
|
||||
|
||||
SIGN EQU 0F7 ;Signature 'FTH' (46h,54h,48h)
|
||||
OLDINT EQU 0FA ;OLD INT 10h VECTOR
|
||||
VERSION EQU 0FE ;Version Number to force (0102) DEFAULT
|
||||
MEMORYS EQU 0100 ;Memory size in 64K units (4=256K)
|
||||
CONTROL EQU 0102 ;CONTROL WORD. BIT FLAGS:
|
||||
; BIT 0: Disable VESA if set
|
||||
; 7: Terminate TSR if set
|
||||
|
||||
CT_NOVESA EQU 1 ;SET TO DISABLE ANY PREVIOUS VESA DRIVER
|
||||
CT_NEW EQU 040 ;SET IF NO PREVIOUS "vesalie" INSTALLED
|
||||
CT_STOP EQU 080 ;SET TO TERMINATE AND UNINSTALL
|
||||
|
||||
ORG 0100
|
||||
JMP START
|
||||
|
||||
INT10:
|
||||
PUSHF
|
||||
CS TEST B[CONTROL],CT_STOP
|
||||
JNZ >L7
|
||||
CMP AH,04F
|
||||
JNZ >L8
|
||||
CS TEST B[CONTROL],CT_NOVESA
|
||||
JNZ >L9
|
||||
CMP AL,0
|
||||
JNZ >L8 ;NOW 04F00
|
||||
CS CALL D[OLDINT] ;FLAGS ALREADY ON STACK
|
||||
PUSH BP
|
||||
MOV BP,SP
|
||||
PUSH AX
|
||||
LAHF
|
||||
MOV [BP+6],AH ;CHANGE OLD FLAGS ON STACK
|
||||
CS MOV AX,[VERSION]
|
||||
OR AX,AX
|
||||
IF NE ES MOV [DI+4],AX
|
||||
CS MOV AX,[MEMORYS]
|
||||
OR AX,AX
|
||||
IF NE ES MOV [DI+012],AX
|
||||
POP AX,BP
|
||||
IRET
|
||||
|
||||
L9: ;KILL ANY VESA QUERIES
|
||||
POPF
|
||||
IRET
|
||||
L8: ;LET SOMEONE ELSE HANDLE THIS
|
||||
POPF
|
||||
CS JMP D[OLDINT]
|
||||
|
||||
L7: ;TERMINATE
|
||||
PUSH ES,AX
|
||||
XOR AX,AX
|
||||
MOV ES,AX
|
||||
CS MOV AX,[OLDINT]
|
||||
ES MOV [040],AX
|
||||
CS MOV AX,[OLDINT+2]
|
||||
ES MOV [042],AX
|
||||
|
||||
MOV AH,049
|
||||
MOV ES,CS
|
||||
SYS
|
||||
POP AX,ES
|
||||
POPF
|
||||
IRET
|
||||
|
||||
|
||||
START:
|
||||
MOV W[VERSION],0
|
||||
MOV W[MEMORYS],0
|
||||
MOV B[CONTROL],0
|
||||
|
||||
XOR AX,AX
|
||||
MOV ES,AX
|
||||
ES LES DI,[040] ;INT 10h VECTOR
|
||||
MOV [OLDINT],DI
|
||||
MOV [OLDINT+2],ES
|
||||
CMP DI,O INT10
|
||||
JNZ >L2
|
||||
ES CMP W[SIGN],05446
|
||||
JNZ >L2
|
||||
ES CMP B[SIGN+2],048
|
||||
JZ >L3
|
||||
L2:
|
||||
MOV ES,CS
|
||||
OR B[CONTROL],CT_NEW
|
||||
L3:
|
||||
MOV SI,080
|
||||
LODSB
|
||||
MOV AH,0
|
||||
ADD AX,SI
|
||||
MOV DI,AX
|
||||
MOV B[DI],0
|
||||
L0:
|
||||
LODSB
|
||||
OR AL,AL
|
||||
IF Z JMP PROCESS
|
||||
CMP AL,'/'
|
||||
IF NE CMP AL,'-'
|
||||
JZ >L1
|
||||
CMP AL,' '
|
||||
JZ L0
|
||||
CMP AL,9
|
||||
JZ L0
|
||||
CMP AL,0D
|
||||
JZ L0
|
||||
JMP USAGE
|
||||
|
||||
L1:
|
||||
LODSB
|
||||
OR AL,020 ;LOWER CASE
|
||||
CMP AL,'o'
|
||||
JNZ >L1
|
||||
LODSB
|
||||
OR AL,020
|
||||
CMP AL,'n'
|
||||
JNE >L2
|
||||
ES AND B[CONTROL],NOT CT_NOVESA
|
||||
JMP L0
|
||||
L2:
|
||||
CMP AL,'f'
|
||||
IF E ES OR B[CONTROL],CT_NOVESA
|
||||
LODSB
|
||||
CMP AL,'f'
|
||||
IF NE CMP AL,'F'
|
||||
IF NE DEC SI
|
||||
JMP L0
|
||||
L1:
|
||||
CMP AL,'?'
|
||||
JNZ >l2
|
||||
USAGE:
|
||||
MOV AH,9
|
||||
MOV DX,O USE
|
||||
SYS
|
||||
STOP
|
||||
|
||||
|
||||
L2:
|
||||
CMP AL,'m'
|
||||
JNZ >L3
|
||||
MOV BX,0
|
||||
L22:
|
||||
LODSB
|
||||
CMP AL,'0'
|
||||
JB >L7
|
||||
CMP AL,'9'
|
||||
JA >L7
|
||||
XCHG AX,BX
|
||||
MOV DX,10
|
||||
MUL DX
|
||||
AND BX,0F
|
||||
ADD BX,AX
|
||||
JMP L22
|
||||
L7:
|
||||
ADD BX,63
|
||||
MOV CL,6
|
||||
SHR BX,CL
|
||||
ES MOV [MEMORYS],BX
|
||||
JMP L0
|
||||
L3:
|
||||
CMP AL,'u'
|
||||
JNZ >L4
|
||||
ES OR B[CONTROL],CT_STOP
|
||||
OR B[CONTROL],CT_STOP
|
||||
JMP L0
|
||||
L4:
|
||||
MOV BX,0
|
||||
CMP AL,'0'
|
||||
IF E MOV BX,0100
|
||||
CMP AL,'1'
|
||||
IF E MOV BX,0101
|
||||
CMP AL,'2'
|
||||
IF E MOV BX,0102
|
||||
OR BX,BX
|
||||
JZ USAGE
|
||||
ES MOV W[VERSION],BX
|
||||
JMP L0
|
||||
|
||||
PROCESS:
|
||||
TEST B[CONTROL],CT_STOP
|
||||
JZ >L6
|
||||
MOV DX,O UNLOAD
|
||||
MOV AH,9
|
||||
SYS
|
||||
STOP
|
||||
|
||||
L6:
|
||||
TEST B[CONTROL],CT_NEW
|
||||
JNZ >L5
|
||||
MOV DX,O ALLOK
|
||||
MOV AH,9
|
||||
SYS
|
||||
STOP
|
||||
|
||||
L5: ;INSTALL
|
||||
MOV W[SIGN],05446
|
||||
MOV B[SIGN+2],'H'
|
||||
XOR AX,AX
|
||||
MOV ES,AX
|
||||
ES MOV W[040],O INT10
|
||||
ES MOV W[042],CS
|
||||
MOV ES,[02C] ;Environment
|
||||
MOV AH,049
|
||||
SYS
|
||||
MOV DX,O LOAD
|
||||
MOV AH,9
|
||||
SYS
|
||||
MOV DX,O START
|
||||
TSR ;GO TSR, KEEP UNTIL START
|
||||
|
||||
BUF:
|
||||
ALLOK:
|
||||
DB 13,10,'VESALIE: Parameters have been changed.',13,10,'$'
|
||||
UNLOAD:
|
||||
DB 13,10,'VESALIE has been uninstalled',13,10,'$'
|
||||
LOAD:
|
||||
DB 13,10,'VESALIE has been installed.',13,10,'$'
|
||||
|
||||
USE:
|
||||
DB 13,10,'Usage: VESALIE [/0|/1|/2] [/ON|/OFF] [/Mxx] [/U]',13,10
|
||||
DB 13,10,'Where /0 /1 /2 selects VESA version 1.00, 1.01 or 1.02'
|
||||
DB 13,10,' /ON /OFF turns the VESA driver on and off'
|
||||
DB 13,10,' /Mxx sets the memory size returned by the driver'
|
||||
DB 13,10,' /U Uninstalls the VESA "Cheat" facility'
|
||||
DB 13,10,'$'
|
||||
Reference in New Issue
Block a user