home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / crossplatform / emulators / MacOS / mac64-04.hqx / MAC64-04.SEA / C64 / SOURCE / VIC.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-03  |  4.3 KB  |  194 lines  |  [TEXT/KAHL]

  1. /*
  2.     cOMMODORE 64 eMULATOR V0.4      eARLE f. pHILHOWER iii 
  3.     cOPYRIGHT (c) 1993-4            (ST916W9R@DUNX1.OCS.DREXEL.EDU)
  4.  
  5.     tHIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
  6.     IT UNDER THE TERMS OF THE gnu gENERAL pUBLIC lICENSE AS PUBLISHED BY
  7.     THE fREE sOFTWARE fOUNDATION; EITHER VERSION 2 OF THE lICENSE, OR
  8.     (AT YOUR OPTION) ANY LATER VERSION.
  9.  
  10.     tHIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
  11.     BUT without any warranty; WITHOUT EVEN THE IMPLIED WARRANTY OF
  12.     merchantability OR fitness for a particular purpose.  sEE THE
  13.     gnu gENERAL pUBLIC lICENSE FOR MORE DETAILS.
  14.  
  15.     yOU SHOULD HAVE RECEIVED A COPY OF THE gnu gENERAL pUBLIC lICENSE
  16.     ALONG WITH THIS PROGRAM; IF NOT, WRITE TO THE fREE sOFTWARE
  17.     fOUNDATION, iNC., 675 mASS aVE, cAMBRIDGE, ma 02139, usa.
  18. */
  19.  
  20. #INCLUDE "pROCESSOR.H"
  21. #INCLUDE "mEMORY.H"
  22. #INCLUDE "eRROR.H"
  23. #INCLUDE "rESOURCES.H"
  24. #INCLUDE "pREFERENCES.H"
  25.  
  26. BYTE victEXT[1024], vicrEGISTER[0X2F];
  27. WORD vicaDDRbASE, vicsCREENpAGE, viccHARbASE;
  28. BYTE vicbANK, *viccHARdEFS;
  29.  
  30. rECT COLORwINDrECT, BWwINDrECT, COLORfULLrECT, BWfULLrECT;
  31.  
  32. STATIC INT COLORiNITIALIZED=0;
  33.  
  34. wINDOWpTR bwvicwIND;
  35. cwINDOWpTR cOLORvicwIND;
  36.  
  37. VOID vicaDDRaDJUST()
  38. {$7b}
  39. vicbANK=(ram[0XDD00]&3)^3;
  40. vicaDDRbASE=vicbANK*16384;
  41. vicsCREENpAGE=((ram[0XD018]&0XF0)>>4)*0X0400+vicaDDRbASE;
  42. viccHARbASE=((ram[0XD018]&0X0E)*1024);
  43. IF ((vicbANK==1){$7c}{$7c}(vicbANK==3))
  44. viccHARdEFS=ram+(vicaDDRbASE+viccHARbASE);
  45. ELSE
  46. IF (viccHARbASE==4096) viccHARdEFS=CHARrom;
  47. ELSE IF (viccHARbASE==6144) viccHARdEFS=CHARrom+0X0800;
  48.  ELSE viccHARdEFS=ram+(vicaDDRbASE+viccHARbASE);
  49. {$7d}
  50.  
  51. BYTE nOTsAMEvic()
  52. {$7b}
  53. REGISTER BYTE ADDR;
  54. REGISTER BYTE *RAMrEGISTER;
  55. REGISTER BYTE *VICrEGISTER;
  56.  
  57. RAMrEGISTER=&ram[0XD000];
  58. VICrEGISTER=&vicrEGISTER[0];
  59.  
  60. FOR (ADDR=0; ADDR<0X2F; ADDR++)
  61. {$7b}
  62. IF (ADDR==0X11)
  63. {$7b}
  64. IF ((*RAMrEGISTER++ & 127) != (*VICrEGISTER++ & 127)) RETURN 1;
  65. {$7d}
  66. ELSE IF (ADDR==0X12);
  67.  ELSE IF (*RAMrEGISTER++ != *VICrEGISTER++) RETURN 1;
  68. {$7d}
  69. RETURN 0;
  70. {$7d}
  71.  
  72.  
  73.  
  74. VOID tOTALrEDRAWvic()
  75. {$7b}
  76. REGISTER BYTE ADDR;
  77.  
  78. FOR (ADDR=0; ADDR<0X2F; ADDR++)
  79. vicrEGISTER[ADDR]=ram[0XD000+ADDR];
  80. vicaDDRaDJUST();
  81.  
  82.  
  83. IF ((GLOBALpREF.COLORvic==0){$7c}{$7c}(COLORiNITIALIZED==0)) bwtOTALrEDRAWvic();
  84. ELSE cOLORtOTALrEDRAWvic();
  85. {$7d}
  86.  
  87. VOID rEDRAWvic()
  88. {$7b}
  89. IF (nOTsAMEvic())
  90. {$7b}
  91. tOTALrEDRAWvic();
  92. RETURN;
  93. {$7d}
  94. vicaDDRaDJUST();
  95.  
  96. IF ((GLOBALpREF.COLORvic==0){$7c}{$7c}(COLORiNITIALIZED==0)) bwrEDRAWvic();
  97. ELSE cOLORrEDRAWvic();
  98. {$7d}
  99.  
  100. INT viciNITIALIZE()
  101. {$7b}
  102. INT ERR;
  103.  
  104. IF (ERR=bwviciNITIALIZE()!=KnOeRROR) RETURN ERR;
  105. ERR=cOLORviciNITIALIZE();
  106. IF (ERR==KnOcOLORsUPPORT)
  107. {$7b}
  108. COLORiNITIALIZED=0;
  109. ERR=KnOeRROR;
  110. {$7d}
  111. ELSE
  112. {$7b}
  113. COLORiNITIALIZED=1;
  114. ERR=KnOeRROR;
  115. {$7d}
  116.  
  117. RETURN ERR;
  118. {$7d}
  119.  
  120. VOID sETvictITLE(sTR255 STR)
  121. {$7b}
  122. sETwtITLE(bwvicwIND, STR);
  123. IF (COLORiNITIALIZED) sETwtITLE((wINDOWpTR)cOLORvicwIND, STR);
  124. {$7d}
  125.  
  126. VOID sHOWvicwINDOW()
  127. {$7b}
  128. IF (GLOBALpREF.DOUBLEsIZE==1)
  129. {$7b}
  130. COLORwINDrECT.TOP = COLORfULLrECT.TOP * 2;
  131. COLORwINDrECT.BOTTOM = COLORfULLrECT.BOTTOM * 2;
  132. COLORwINDrECT.LEFT = COLORfULLrECT.LEFT * 2;
  133. COLORwINDrECT.RIGHT = COLORfULLrECT.RIGHT * 2;
  134.  
  135. BWwINDrECT.TOP = BWfULLrECT.TOP * 2;
  136. BWwINDrECT.BOTTOM = BWfULLrECT.BOTTOM * 2;
  137. BWwINDrECT.LEFT = BWfULLrECT.LEFT * 2;
  138. BWwINDrECT.RIGHT = BWfULLrECT.RIGHT * 2;
  139. {$7d}
  140. ELSE
  141. {$7b}
  142. COLORwINDrECT=COLORfULLrECT;
  143. BWwINDrECT=BWfULLrECT;
  144. {$7d}
  145.  
  146. IF (COLORiNITIALIZED)
  147. sIZEwINDOW((wINDOWpTR)cOLORvicwIND, COLORwINDrECT.RIGHT-COLORwINDrECT.LEFT,
  148. COLORwINDrECT.BOTTOM-COLORwINDrECT.TOP, TRUE);
  149. sIZEwINDOW(bwvicwIND, BWwINDrECT.RIGHT-BWwINDrECT.LEFT, BWwINDrECT.BOTTOM-BWwINDrECT.TOP, TRUE);
  150.  
  151.  
  152. IF ((GLOBALpREF.COLORvic==0){$7c}{$7c}(COLORiNITIALIZED==0))
  153. {$7b}
  154. IF (COLORiNITIALIZED) hIDEcOLORvic();
  155. sHOWbwvic();
  156. {$7d}
  157. ELSE
  158. {$7b}
  159. hIDEbwvic();
  160. sHOWcOLORvic();
  161. {$7d}
  162. tOTALrEDRAWvic();
  163. {$7d}
  164.  
  165. VOID dRAGvicwINDOW(eVENTrECORD *EVENT)
  166. {$7b}
  167. gRAFpTR GP;
  168. pOINT X;
  169. wINDOWpTR THEwIND;
  170. EXTERN rECT DRAGrECT;
  171.  
  172. fINDwINDOW(EVENT->WHERE, &THEwIND);
  173. dRAGwINDOW(THEwIND, EVENT->WHERE, &DRAGrECT);
  174.  
  175. IF (GLOBALpREF.BYTEaLIGN!=0)
  176. {$7b}
  177. gETpORT(&GP);
  178. sETpORT(THEwIND);
  179. X.H=X.V=0;
  180. lOCALtOgLOBAL(&X);
  181. X.H&=0XFFF8;
  182. mOVEwINDOW(THEwIND, X.H, X.V, true);
  183. sETpORT(GP);
  184. {$7d}
  185.  
  186. gETpORT(&GP);
  187. sETpORT(THEwIND);
  188. X.H=X.V=0;
  189. lOCALtOgLOBAL(&X);
  190. mOVEwINDOW(bwvicwIND, X.H, X.V, true);
  191. IF (COLORiNITIALIZED) mOVEwINDOW((wINDOWpTR)cOLORvicwIND, X.H, X.V, true);
  192. IF (GLOBALpREF.COLORvic==0) sELECTwINDOW(bwvicwIND);
  193. sETpORT(GP);
  194. {$7d}