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

操作系统开发

开发平台:

Visual C++

  1. ;*
  2. ;* CW : Character Windows
  3. ;*
  4. ;* csd_std.asm : standard defaults
  5. ;* (not machine specific)
  6. ifndef ImodeGuessCurrentCsd_NonDefault
  7. ;*****************************************************************************
  8. ;********** ImodeGuessCurrentCsd **********
  9. ;* * CSD entry point (see documentation for interface)
  10. cProc ImodeGuessCurrentCsd, <FAR, PUBLIC, ATOMIC>, <SI,DI>
  11. cBegin ImodeGuessCurrentCsd
  12. mov di,OFF_lpwDataCsd
  13. cCall FvmGetCur ;* get fvm
  14. push ax
  15. cCall ModeGetCur ;* al = mode, ah = ayMac (0=>unknown)
  16. pop bx ;* bx = fvm
  17. ;* * Search for current mode and fvm in rgdm
  18. mov si,drvOffset rgdm
  19. mov cx,cdmMax
  20. xor dx,dx
  21. ;* * al = current mode, ah = ayMac (or 0=>unknown)
  22. ;* * bx = fvm
  23. ;* * si = pdm
  24. ;* * dx = idm = imode
  25. ;* * cx = loop count
  26. imgc_next:
  27. cmp al,cs:[si].modeDm
  28. jne @F
  29. test bl,cs:[si].fvmReqAdapDm
  30. jz @F
  31. test bh,cs:[si].fvmReqDispDm
  32. jz @F ;* not available
  33. or ah,ah
  34. jz imgc_end ;* height unknown => use this one
  35. cmp ah,cs:[si].ayMacDm
  36. jz imgc_end ;* same height => use this one
  37. @@:
  38. add si,size DM
  39. inc dx
  40. loop imgc_next
  41. mov dx,-1 ;* unknown
  42. imgc_end: ;* dx = imode
  43. mov ax,dx ;* guess this mode
  44. cEnd ImodeGuessCurrentCsd
  45. ;*****************************************************************************
  46. endif ;* ImodeGuessCurrentCsd_NonDefault
  47. ifndef FQueryInstCsd_NonDefault
  48. ;*****************************************************************************
  49. ;********** FQueryInstCsd **********
  50. ;* * CSD entry point (see documentation for interface)
  51. cProc FQueryInstCsd, <FAR, PUBLIC, ATOMIC>, <si, di>
  52.     parmDP pinst
  53.     parmW imode
  54.     localW fvm
  55. cBegin FQueryInstCsd
  56. mov di,OFF_lpwDataCsd
  57. cCall FvmGetCur ;* find out what we got ...
  58. ;* will query hardware at first call
  59. mov fvm,ax
  60. mov si,imode
  61. cmp si,cdmMax
  62. jb got_imode
  63. fail_query:
  64. xor ax,ax ;* failure
  65. jmp end_qmode
  66. got_imode: ;* si = imode
  67. mov ax,SIZE DM
  68. mul si
  69. mov si,ax
  70. add si,drvOffset rgdm ;* CS:SI => INST info
  71. ;* * copy DM info into INST
  72. mov di,pinst ;* ds:di => dest
  73. ;* * clear out the INST structure
  74. push di
  75. push ds
  76. pop es
  77. mov cx,cbInstMin / 2
  78. xor ax,ax
  79. rep stosw
  80. pop di
  81. ;* * move information from DM to INST
  82. ;* finst
  83. mov ax,fvm ;* al=adapter, ah=monitor
  84. mov dx,cs:[si].finstDm
  85. test al,cs:[si].fvmReqAdapDm
  86. jz @F
  87. test ah,cs:[si].fvmReqDispDm
  88. jz @F
  89. or dx,finstAvailable ;* this mode is currently available
  90. @@: ;* dx = finst
  91. IFDEF BUILTIN_SNOW
  92. ;* * KLUDGE: set finstQuestionable for a builtin CGA.
  93. test al,fvmCGA
  94. jz @F
  95. or dx,finstQuestionable
  96. @@:
  97. ENDIF ;BUILTIN_SNOW
  98. mov ds:[di].finstInst,dx
  99. IFDEF EARLIER
  100. Assert <ayMacDm EQ axMacDm+1>
  101. Assert <ayMacInst EQ axMacInst+1>
  102. ;* axMac, ayMac
  103. mov dx,word ptr cs:[si].axMacDm
  104. ELSE
  105. mov dl,cs:[si].axMacDm
  106. mov dh,cs:[si].ayMacDm
  107. ENDIF
  108. mov wo ds:[di].axMacInst,dx ;* move both axMac and ayMac
  109. ;* mode index
  110. mov dx,imode
  111. mov ds:[di].imodeInst,dx
  112. ;* coMac, covMac, coiMac
  113. mov dl,cs:[si].coMacDm
  114. mov ds:[di].coMacInst,dl
  115. cCall CoiCovFromFvm ;* al = fvm
  116. mov ds:[di].covMacInst,ah
  117. mov ds:[di].coiMacInst,dx
  118. ;* INFT information
  119. Assert <dyCharDm EQ dxCharDm+1>
  120. Assert <dyCharInft EQ dxCharInft+1>
  121. mov dx,word ptr cs:[si].dxCharDm
  122. mov word ptr ds:[di].inftInst.dxCharInft,dx
  123. ;* move both dxChar and dyChar
  124. mov dl,cs:[si].dyBaseDm
  125. mov ds:[di].inftInst.dyBaseLineInft,dl
  126. mov dl,cs:[si].ifontDm
  127. mov ds:[di].inftInst.ifontInft,dl
  128. mov dx,0FFFFh ;default ffont values
  129. mov ds:[di].ffontSupportedInst,dx
  130. ;* Buffer info
  131. mov ax,cs:[si].psVideoDm
  132. mov ds:[di].psPrimInst,ax
  133. AssertEQ ds:[di].psSecInst,0
  134. AssertEQ ds:[di].cwExtraInst,0
  135. ;* * set private info (store pointer to DM in the INST structure)
  136. mov [di].pdmInst,si
  137. mov ax,sp ;* ok
  138. end_qmode:
  139. cEnd FQueryInstCsd
  140. ;*****************************************************************************
  141. endif ;* FQueryInstCsd_NonDefault
  142. ifndef TermCsd_NonDefault
  143. ;*****************************************************************************
  144. ;********** TermCsd **********
  145. ;* * CSD entry point (see documentation for interface)
  146. ;* * normally a no-op
  147. cProc TermCsd, <FAR, PUBLIC, ATOMIC>
  148. cBegin TermCsd
  149. ifdef KANJI
  150. cCall EnableBlinkBit
  151. endif ; KANJI
  152. cEnd TermCsd
  153. ;*****************************************************************************
  154. endif ;* TermCsd_NonDefault