home *** CD-ROM | disk | FTP | other *** search
- /*
- cOMMODORE 64 eMULATOR V0.4 eARLE f. pHILHOWER iii
- cOPYRIGHT (c) 1993-4 (ST916W9R@DUNX1.OCS.DREXEL.EDU)
-
- tHIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
- IT UNDER THE TERMS OF THE gnu gENERAL pUBLIC lICENSE AS PUBLISHED BY
- THE fREE sOFTWARE fOUNDATION; EITHER VERSION 2 OF THE lICENSE, OR
- (AT YOUR OPTION) ANY LATER VERSION.
-
- tHIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
- BUT without any warranty; WITHOUT EVEN THE IMPLIED WARRANTY OF
- merchantability OR fitness for a particular purpose. sEE THE
- gnu gENERAL pUBLIC lICENSE FOR MORE DETAILS.
-
- yOU SHOULD HAVE RECEIVED A COPY OF THE gnu gENERAL pUBLIC lICENSE
- ALONG WITH THIS PROGRAM; IF NOT, WRITE TO THE fREE sOFTWARE
- fOUNDATION, iNC., 675 mASS aVE, cAMBRIDGE, ma 02139, usa.
- */
-
- #INCLUDE "pROCESSOR.H"
- #INCLUDE "mEMORY.H"
- #INCLUDE "eRROR.H"
- #INCLUDE "rESOURCES.H"
- #INCLUDE "pREFERENCES.H"
-
- BYTE victEXT[1024], vicrEGISTER[0X2F];
- WORD vicaDDRbASE, vicsCREENpAGE, viccHARbASE;
- BYTE vicbANK, *viccHARdEFS;
-
- rECT COLORwINDrECT, BWwINDrECT, COLORfULLrECT, BWfULLrECT;
-
- STATIC INT COLORiNITIALIZED=0;
-
- wINDOWpTR bwvicwIND;
- cwINDOWpTR cOLORvicwIND;
-
- VOID vicaDDRaDJUST()
- {$7b}
- vicbANK=(ram[0XDD00]&3)^3;
- vicaDDRbASE=vicbANK*16384;
- vicsCREENpAGE=((ram[0XD018]&0XF0)>>4)*0X0400+vicaDDRbASE;
- viccHARbASE=((ram[0XD018]&0X0E)*1024);
- IF ((vicbANK==1){$7c}{$7c}(vicbANK==3))
- viccHARdEFS=ram+(vicaDDRbASE+viccHARbASE);
- ELSE
- IF (viccHARbASE==4096) viccHARdEFS=CHARrom;
- ELSE IF (viccHARbASE==6144) viccHARdEFS=CHARrom+0X0800;
- ELSE viccHARdEFS=ram+(vicaDDRbASE+viccHARbASE);
- {$7d}
-
- BYTE nOTsAMEvic()
- {$7b}
- REGISTER BYTE ADDR;
- REGISTER BYTE *RAMrEGISTER;
- REGISTER BYTE *VICrEGISTER;
-
- RAMrEGISTER=&ram[0XD000];
- VICrEGISTER=&vicrEGISTER[0];
-
- FOR (ADDR=0; ADDR<0X2F; ADDR++)
- {$7b}
- IF (ADDR==0X11)
- {$7b}
- IF ((*RAMrEGISTER++ & 127) != (*VICrEGISTER++ & 127)) RETURN 1;
- {$7d}
- ELSE IF (ADDR==0X12);
- ELSE IF (*RAMrEGISTER++ != *VICrEGISTER++) RETURN 1;
- {$7d}
- RETURN 0;
- {$7d}
-
-
-
- VOID tOTALrEDRAWvic()
- {$7b}
- REGISTER BYTE ADDR;
-
- FOR (ADDR=0; ADDR<0X2F; ADDR++)
- vicrEGISTER[ADDR]=ram[0XD000+ADDR];
- vicaDDRaDJUST();
-
-
- IF ((GLOBALpREF.COLORvic==0){$7c}{$7c}(COLORiNITIALIZED==0)) bwtOTALrEDRAWvic();
- ELSE cOLORtOTALrEDRAWvic();
- {$7d}
-
- VOID rEDRAWvic()
- {$7b}
- IF (nOTsAMEvic())
- {$7b}
- tOTALrEDRAWvic();
- RETURN;
- {$7d}
- vicaDDRaDJUST();
-
- IF ((GLOBALpREF.COLORvic==0){$7c}{$7c}(COLORiNITIALIZED==0)) bwrEDRAWvic();
- ELSE cOLORrEDRAWvic();
- {$7d}
-
- INT viciNITIALIZE()
- {$7b}
- INT ERR;
-
- IF (ERR=bwviciNITIALIZE()!=KnOeRROR) RETURN ERR;
- ERR=cOLORviciNITIALIZE();
- IF (ERR==KnOcOLORsUPPORT)
- {$7b}
- COLORiNITIALIZED=0;
- ERR=KnOeRROR;
- {$7d}
- ELSE
- {$7b}
- COLORiNITIALIZED=1;
- ERR=KnOeRROR;
- {$7d}
-
- RETURN ERR;
- {$7d}
-
- VOID sETvictITLE(sTR255 STR)
- {$7b}
- sETwtITLE(bwvicwIND, STR);
- IF (COLORiNITIALIZED) sETwtITLE((wINDOWpTR)cOLORvicwIND, STR);
- {$7d}
-
- VOID sHOWvicwINDOW()
- {$7b}
- IF (GLOBALpREF.DOUBLEsIZE==1)
- {$7b}
- COLORwINDrECT.TOP = COLORfULLrECT.TOP * 2;
- COLORwINDrECT.BOTTOM = COLORfULLrECT.BOTTOM * 2;
- COLORwINDrECT.LEFT = COLORfULLrECT.LEFT * 2;
- COLORwINDrECT.RIGHT = COLORfULLrECT.RIGHT * 2;
-
- BWwINDrECT.TOP = BWfULLrECT.TOP * 2;
- BWwINDrECT.BOTTOM = BWfULLrECT.BOTTOM * 2;
- BWwINDrECT.LEFT = BWfULLrECT.LEFT * 2;
- BWwINDrECT.RIGHT = BWfULLrECT.RIGHT * 2;
- {$7d}
- ELSE
- {$7b}
- COLORwINDrECT=COLORfULLrECT;
- BWwINDrECT=BWfULLrECT;
- {$7d}
-
- IF (COLORiNITIALIZED)
- sIZEwINDOW((wINDOWpTR)cOLORvicwIND, COLORwINDrECT.RIGHT-COLORwINDrECT.LEFT,
- COLORwINDrECT.BOTTOM-COLORwINDrECT.TOP, TRUE);
- sIZEwINDOW(bwvicwIND, BWwINDrECT.RIGHT-BWwINDrECT.LEFT, BWwINDrECT.BOTTOM-BWwINDrECT.TOP, TRUE);
-
-
- IF ((GLOBALpREF.COLORvic==0){$7c}{$7c}(COLORiNITIALIZED==0))
- {$7b}
- IF (COLORiNITIALIZED) hIDEcOLORvic();
- sHOWbwvic();
- {$7d}
- ELSE
- {$7b}
- hIDEbwvic();
- sHOWcOLORvic();
- {$7d}
- tOTALrEDRAWvic();
- {$7d}
-
- VOID dRAGvicwINDOW(eVENTrECORD *EVENT)
- {$7b}
- gRAFpTR GP;
- pOINT X;
- wINDOWpTR THEwIND;
- EXTERN rECT DRAGrECT;
-
- fINDwINDOW(EVENT->WHERE, &THEwIND);
- dRAGwINDOW(THEwIND, EVENT->WHERE, &DRAGrECT);
-
- IF (GLOBALpREF.BYTEaLIGN!=0)
- {$7b}
- gETpORT(&GP);
- sETpORT(THEwIND);
- X.H=X.V=0;
- lOCALtOgLOBAL(&X);
- X.H&=0XFFF8;
- mOVEwINDOW(THEwIND, X.H, X.V, true);
- sETpORT(GP);
- {$7d}
-
- gETpORT(&GP);
- sETpORT(THEwIND);
- X.H=X.V=0;
- lOCALtOgLOBAL(&X);
- mOVEwINDOW(bwvicwIND, X.H, X.V, true);
- IF (COLORiNITIALIZED) mOVEwINDOW((wINDOWpTR)cOLORvicwIND, X.H, X.V, true);
- IF (GLOBALpREF.COLORvic==0) sELECTwINDOW(bwvicwIND);
- sETpORT(GP);
- {$7d}