fx_twin.asm
上传用户:xiaoan1112
上传日期:2013-04-11
资源大小:19621k
文件大小:5k
源码类别:

操作系统开发

开发平台:

Visual C++

  1. ;*
  2. ;* CW : Character Windows Drivers
  3. ;*
  4. ;* fx_ega.asm : CSD for IBM version with screen saving
  5. ;*      (code taken from twin.asm for QC/QB)
  6. ;* * DOES NOT INCLUDE "csd_code"
  7. ;*************************************************************************
  8. BUILTIN_SNOW = 1 ;* builtin snow control
  9. TWINCSD = 1
  10. include csd_head.inc
  11. include fxdrv.inc
  12. include csd_data.inc
  13. ;*****************************************************************************
  14. include fx_data.asm
  15. ;*****************************************************************************
  16. sBegin DRV
  17.     assumes CS,DRV
  18.     assumes ds,NOTHING
  19.     assumes ss,NOTHING
  20. ;*****************************************************************************
  21. ;* * There is no low memory structure for the linked driver
  22. OFF_lpwDataCsd DW dataOffset rgwDataCsd
  23. include saveega.inc ;* screen save specifics
  24. ;*****************************************************************************
  25. MDACSD = 1 ;enable all drivers
  26. CGACSD = 1
  27. EGACSD = 1
  28. MCGACSD = 1
  29. VGACSD = 1
  30. include genmodes.asm ;* modes table
  31. ;*****************************************************************************
  32. NonStandard FInitCsd
  33. ;********** FInitCsd **********
  34. ;* entry:
  35. ;* pinch = near pointer to INCH structure to fill
  36. ;* * Initialize the screen to the given mode
  37. ;* exit: AX != 0 if ok
  38. cProc FInitCsd, <FAR, PUBLIC, ATOMIC>, <ds,di>
  39.     parmDP pinst
  40.     parmDP pinch
  41.     localB modeCur
  42.     localB fscanset
  43. cBegin FInitCsd
  44. mov di,OFF_lpwDataCsd ;* Data in data segment
  45. ;* * save old mode
  46. cCall ModeGetCur ;* al = mode, ah = ayMac
  47. mov modeCur,al ;* current mode
  48. mov bx,pinst
  49. cmp ds:[bx].ayMacInst,ah
  50. je @F ;* same resolution
  51. mov modeCur,0 ;* cause mode reset
  52. @@:
  53. ;* * set mode
  54. mov [di].pinstDrv,bx
  55. mov bx,ds:[bx].pdmInst ;* CS:BX => DM info
  56. ;* * copy mode info into driver globals
  57. mov ax,cs:[bx].vparmCursOnDm
  58. mov [di].vparmCursOn,ax ;initialize underline cursor
  59. mov [di].vparmCursSize,ax
  60. mov ax,cs:[bx].wExtraDm
  61. mov [di].wExtra,ax
  62. mov al,cs:[bx].modeDm
  63. cmp al,modeCur
  64. jne @F
  65. jmp finitdone ;same mode, no reset
  66. @@:
  67. mov fscanset,0
  68. test [di].fvmCurAdap,fvmVGA  ;Test for VGA
  69. jz initvideomode
  70. mov al,2 ;default 400 scan lines
  71. cmp cs:[bx].modeDm,7
  72. je @F
  73. cmp cs:[bx].ayMacDm,43 ;80x43 text ?
  74. jne not43line
  75. @@:
  76. dec al ;350 lines (EGA)
  77. mov fscanset,al
  78. not43line:
  79. mov ah,12h ;set vertical scan line for VGA
  80. push bx
  81. mov bl,30h
  82. int 10h
  83. pop bx
  84. initvideomode:
  85. xor ah,ah ;* set mode
  86. mov al,cs:[bx].modeDm
  87. or al,80h ;* don't clear REGEN
  88. int 10h
  89. test ss:[bx].fvmCurAdap, fvmEGA or fvmVGA or fvm64KEGA or fvmMCGA or fvmEGAM
  90. jz @F
  91. ;* Clear the "don't clear regen" bit in the BIOS image
  92. xor ax,ax
  93. mov es,ax
  94. and byte ptr es:[BIOS_info],7fH ;487H
  95. @@:
  96. mov ax,40H
  97. mov es,ax
  98. mov al,cs:[bx].ayMacDm
  99. dec al ; rows - 1
  100. mov byte ptr es:[0084H],al ;* update BIOS rows
  101. test [di].fvmCurAdap,fvmCGA  
  102. jnz finitdone
  103. mov al,12h ;8x8 fonts
  104. mov ah,8
  105. cmp cs:[bx].ayMacDm,25
  106. jne @F
  107. test [di].fvmCurAdap,fvmEGA or fvmEGAM or fvm64KEGA  
  108. jnz finitdone
  109. mov al,14h ;8x16
  110. mov ah,16
  111. cmp fscanset,1
  112. jne @F
  113. mov al,11h ;8x14 (VGA 350 scan mode)
  114. mov ah,14
  115. @@:
  116. push bx
  117. xor bl,bl
  118. mov bh,ah
  119. mov ah,11h ;load char set
  120. int 10h
  121. pop bx
  122. cmp cs:[bx].ayMacDm,50 ;* 50 line mode ?
  123. jne finitdone
  124. test [di].fvmCurAdap,fvmMCGA  
  125. jz finitdone
  126. ;extra works for MCGA 50 line mode
  127. mov ax,1103h ;load font page
  128. xor bx,bx
  129. int 10h
  130. mov dx,3D4h ;program CRT
  131. mov ax,309h
  132. out dx,ax
  133. mov al,0Ah
  134. out dx,ax
  135. mov al,0Bh
  136. out dx,ax
  137. push ds
  138. mov ax,40h ;update video Bios data segment
  139. mov ds,ax
  140. mov word ptr ds:[4Ch],1F40h ;80x50x2
  141. mov byte ptr ds:[84h],31h ;50-1 rows
  142. mov word ptr ds:[85h],8 ;points
  143. pop ds
  144. finitdone:
  145. ;* * normally the INCH array would be copied (but since it is already
  146. ;* *  setup in DATA just leave it alone).
  147. ;* * Do other diddling
  148. cCall DiddleBlinkBit
  149. mov [di].fBlinkEnable,0 ;disable blink attribute
  150. mov ax,sp ;* success
  151. cEnd FInitCsd
  152. ;*****************************************************************************
  153. IFDEF PROJECT_LQB
  154. include saveega.new ;* save stuff + bug fix
  155. ELSE ;PROJECT_LQB
  156. include saveega.asm ;* save stuff
  157. ENDIF ;PROJECT_LQB
  158. ;*****************************************************************************
  159. include csd_std.asm ;* standard init/term
  160. include csd_ibm.asm ;* IBM specific routines
  161. ;*****************************************************************************
  162. include csd_vram.asm ;* default procs for direct video I/O
  163. include csd_save.asm ;* default screen save (none)
  164. ;*****************************************************************************
  165. include csd_tail.asm ;* tail file
  166. ;*****************************************************************************
  167. END