233 lines
3.4 KiB
ActionScript 3
233 lines
3.4 KiB
ActionScript 3
|
|
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,'$'
|