home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / doc / graphdoc / vesalie.as < prev    next >
Text File  |  1994-01-16  |  4KB  |  233 lines

  1.  
  2. O    EQU OFFSET
  3. SYS  EQU INT 021
  4. STOP EQU INT 020
  5. TSR  EQU INT 027
  6.  
  7.  
  8.    ;USE PSP FOR DATA
  9.  
  10.  
  11. SIGN    EQU  0F7   ;Signature 'FTH' (46h,54h,48h)
  12. OLDINT  EQU  0FA    ;OLD INT 10h VECTOR
  13. VERSION EQU  0FE   ;Version Number to force (0102) DEFAULT
  14. MEMORYS EQU 0100   ;Memory size in 64K units (4=256K)
  15. CONTROL EQU 0102   ;CONTROL WORD. BIT FLAGS:
  16.                    ; BIT 0: Disable VESA if set
  17.                    ;     7: Terminate TSR if set
  18.  
  19. CT_NOVESA EQU   1  ;SET TO DISABLE ANY PREVIOUS VESA DRIVER
  20. CT_NEW    EQU 040  ;SET IF NO PREVIOUS "vesalie" INSTALLED
  21. CT_STOP   EQU 080  ;SET TO TERMINATE AND UNINSTALL
  22.  
  23.  ORG 0100
  24.  JMP START
  25.  
  26. INT10:
  27.  PUSHF
  28.  CS TEST B[CONTROL],CT_STOP
  29.  JNZ >L7
  30.  CMP AH,04F
  31.  JNZ >L8
  32.  CS TEST B[CONTROL],CT_NOVESA
  33.  JNZ >L9
  34.  CMP AL,0
  35.  JNZ >L8            ;NOW 04F00
  36.  CS CALL D[OLDINT]  ;FLAGS ALREADY ON STACK
  37.  PUSH BP
  38.  MOV BP,SP
  39.  PUSH AX
  40.  LAHF
  41.  MOV [BP+6],AH  ;CHANGE OLD FLAGS ON STACK
  42.  CS MOV AX,[VERSION]
  43.  OR AX,AX
  44.  IF NE ES MOV [DI+4],AX
  45.  CS MOV AX,[MEMORYS]
  46.  OR AX,AX
  47.  IF NE ES MOV [DI+012],AX
  48.  POP AX,BP
  49.  IRET
  50.  
  51. L9:   ;KILL ANY VESA QUERIES
  52.  POPF
  53.  IRET
  54. L8:   ;LET SOMEONE ELSE HANDLE THIS
  55.  POPF
  56.  CS JMP D[OLDINT]
  57.  
  58. L7:   ;TERMINATE
  59.  PUSH ES,AX
  60.  XOR AX,AX
  61.  MOV ES,AX
  62.  CS MOV AX,[OLDINT]
  63.  ES MOV [040],AX
  64.  CS MOV AX,[OLDINT+2]
  65.  ES MOV [042],AX
  66.  
  67.  MOV AH,049
  68.  MOV ES,CS
  69.  SYS
  70.  POP AX,ES
  71.  POPF
  72.  IRET
  73.  
  74.  
  75. START:
  76.  MOV W[VERSION],0
  77.  MOV W[MEMORYS],0
  78.  MOV B[CONTROL],0
  79.  
  80.  XOR AX,AX
  81.  MOV ES,AX
  82.  ES LES DI,[040]    ;INT 10h VECTOR
  83.  MOV [OLDINT],DI
  84.  MOV [OLDINT+2],ES
  85.  CMP DI,O INT10
  86.  JNZ >L2
  87.  ES CMP W[SIGN],05446
  88.  JNZ >L2
  89.  ES CMP B[SIGN+2],048
  90.  JZ >L3
  91. L2:
  92.  MOV ES,CS
  93.  OR B[CONTROL],CT_NEW
  94. L3:
  95.  MOV SI,080
  96.  LODSB
  97.  MOV AH,0
  98.  ADD AX,SI
  99.  MOV DI,AX
  100.  MOV B[DI],0
  101. L0:
  102.  LODSB
  103.  OR AL,AL
  104.  IF Z JMP PROCESS
  105.  CMP AL,'/'
  106.  IF NE CMP AL,'-'
  107.  JZ >L1
  108.  CMP AL,' '
  109.  JZ L0
  110.  CMP AL,9
  111.  JZ L0
  112.  CMP AL,0D
  113.  JZ L0
  114.  JMP USAGE
  115.  
  116. L1:
  117.  LODSB
  118.  OR AL,020    ;LOWER CASE
  119.  CMP AL,'o'
  120.  JNZ >L1
  121.  LODSB
  122.  OR AL,020
  123.  CMP AL,'n'
  124.  JNE >L2
  125.  ES AND B[CONTROL],NOT CT_NOVESA
  126.  JMP L0
  127. L2:
  128.  CMP AL,'f'
  129.  IF E ES OR B[CONTROL],CT_NOVESA
  130.  LODSB
  131.  CMP AL,'f'
  132.  IF NE CMP AL,'F'
  133.  IF NE DEC SI
  134.  JMP L0
  135. L1:
  136.  CMP AL,'?'
  137.  JNZ >l2
  138. USAGE:
  139.  MOV AH,9
  140.  MOV DX,O USE
  141.  SYS
  142.  STOP
  143.  
  144.  
  145. L2:
  146.  CMP AL,'m'
  147.  JNZ >L3
  148.  MOV BX,0
  149. L22:
  150.  LODSB
  151.  CMP AL,'0'
  152.  JB >L7
  153.  CMP AL,'9'
  154.  JA >L7
  155.  XCHG AX,BX
  156.  MOV DX,10
  157.  MUL DX
  158.  AND BX,0F
  159.  ADD BX,AX
  160.  JMP L22
  161. L7:
  162.  ADD BX,63
  163.  MOV CL,6
  164.  SHR BX,CL
  165.  ES MOV [MEMORYS],BX
  166.  JMP L0
  167. L3:
  168.  CMP AL,'u'
  169.  JNZ >L4
  170.  ES OR B[CONTROL],CT_STOP
  171.  OR B[CONTROL],CT_STOP
  172.  JMP L0
  173. L4:
  174.  MOV BX,0
  175.  CMP AL,'0'
  176.  IF E MOV BX,0100
  177.  CMP AL,'1'
  178.  IF E MOV BX,0101
  179.  CMP AL,'2'
  180.  IF E MOV BX,0102
  181.  OR BX,BX
  182.  JZ USAGE
  183.  ES MOV W[VERSION],BX
  184.  JMP L0
  185.  
  186. PROCESS:
  187.  TEST B[CONTROL],CT_STOP
  188.  JZ >L6
  189.  MOV DX,O UNLOAD
  190.  MOV AH,9
  191.  SYS
  192.  STOP
  193.  
  194. L6: 
  195.  TEST B[CONTROL],CT_NEW
  196.  JNZ >L5
  197.  MOV DX,O ALLOK
  198.  MOV AH,9
  199.  SYS
  200.  STOP
  201.  
  202. L5:  ;INSTALL
  203.  MOV W[SIGN],05446
  204.  MOV B[SIGN+2],'H'
  205.  XOR AX,AX
  206.  MOV ES,AX
  207.  ES MOV W[040],O INT10
  208.  ES MOV W[042],CS
  209.  MOV ES,[02C]     ;Environment
  210.  MOV AH,049
  211.  SYS
  212.  MOV DX,O LOAD
  213.  MOV AH,9
  214.  SYS
  215.  MOV DX,O START
  216.  TSR        ;GO TSR, KEEP UNTIL START
  217.  
  218. BUF:
  219. ALLOK:
  220.  DB 13,10,'VESALIE: Parameters have been changed.',13,10,'$'
  221. UNLOAD:
  222.  DB 13,10,'VESALIE has been uninstalled',13,10,'$'
  223. LOAD:
  224.  DB 13,10,'VESALIE has been installed.',13,10,'$'
  225.  
  226. USE:
  227.  DB 13,10,'Usage: VESALIE [/0|/1|/2] [/ON|/OFF] [/Mxx] [/U]',13,10
  228.  DB 13,10,'Where /0 /1 /2 selects VESA version 1.00, 1.01 or 1.02'
  229.  DB 13,10,'      /ON /OFF turns the VESA driver on and off'
  230.  DB 13,10,'      /Mxx     sets the memory size returned by the driver'
  231.  DB 13,10,'      /U       Uninstalls the VESA "Cheat" facility'
  232.  DB 13,10,'$'
  233.