]> git.sur5r.net Git - cc65/blobdiff - samples/plasma.c
Since we have now builtin search paths, we need to be able to forget them,
[cc65] / samples / plasma.c
index fd8b0f97b1ffc73d062c111c7fc663603dca3416..37514ecd40996feb6bc03d2015d4966c39033e6a 100644 (file)
 #  define CHARSET               0xE000
 #  define outb(addr,val)       pokebsys ((unsigned)(addr), val)
 #  define inb(addr)             peekbsys ((unsigned)(addr))
+#elif defined(__PLUS4__)
+#  define SCREEN1               0x6400
+#  define SCREEN2               0x6C00
+#  define CHARSET               0x7000
+#  define outb(addr,val)               (*(addr)) = (val)
+#  define inb(addr)             (*(addr))
 #endif
 
 
 
 /* Values for the VIC address register to switch between the two pages */
+#if defined(__PLUS4__)
+#define PAGE1                   ((SCREEN1 >> 8) & 0xF8)
+#define PAGE2                   ((SCREEN2 >> 8) & 0xF8)
+#define CHARADR                        ((CHARSET >> 8) & 0xFC)
+#else
 #define PAGE1                   ((SCREEN1 >> 6) & 0xF0) | ((CHARSET >> 10) & 0x0E)
 #define PAGE2                   ((SCREEN2 >> 6) & 0xF0) | ((CHARSET >> 10) & 0x0E)
+#endif
 
 
 
 /* Use static local variables for speed */
-#pragma staticlocals (1);
+#pragma staticlocals (1); 
 
 
 
@@ -79,19 +91,15 @@ static const unsigned char sinustable[0x100] = {
 
 
 
-static unsigned char *scrn;
-
-
-
-static void doplasma (void)
+static void doplasma (register unsigned char* scrn)
 {
     unsigned char xbuf[40];
     unsigned char ybuf[25];
-    unsigned char i,ii;
     unsigned char c1a,c1b;
     unsigned char c2a,c2b;
     unsigned char c1A,c1B;
     unsigned char c2A,c2B;
+    register unsigned char i, ii;
 
     c1a = c1A;
     c1b = c1B;
@@ -165,6 +173,7 @@ int main (void)
     unsigned long fps;
     unsigned      fps10;
 
+
 #if defined(__C64__)
     unsigned char block;
 #endif
@@ -173,6 +182,10 @@ int main (void)
     unsigned char initflag;
     unsigned char graphflag;
 #endif
+#if defined(__PLUS4__)
+    unsigned int i;
+    unsigned char v2;
+#endif
 
     clrscr ();
     cprintf ("Making charset, mompls");
@@ -200,20 +213,39 @@ int main (void)
 #endif
 
     /* Remember the VIC address register */
+#if defined(__PLUS4__)
+    v = inb (&TED.char_addr);
+    v2 = inb (&TED.video_addr);
+#else
     v = inb (&VIC.addr);
+#endif
+
+#if defined(__PLUS4__)
+    for (i=0;i<1000;i++) {
+       ((unsigned char *) (SCREEN1-0x0400))[i] = 0;
+       ((unsigned char *) (SCREEN2-0x0400))[i] = 0;
+    }
+    outb (&TED.char_addr, CHARADR);
+#endif
 
     /* Run the demo until a key was hit */
     t = clock ();
     while (!kbhit()) {
        /* Build page 1, then make it visible */
-        scrn = (unsigned char*)SCREEN1;
-        doplasma ();
+        doplasma ((unsigned char*)SCREEN1);
+#if defined(__PLUS4__)
+       outb (&TED.video_addr, PAGE1);
+#else
        outb (&VIC.addr, PAGE1);
+#endif
 
        /* Build page 2, then make it visible */
-        scrn = (unsigned char*)SCREEN2;
-        doplasma ();
+        doplasma ((unsigned char*)SCREEN2);
+#if defined(__PLUS4__)
+       outb (&TED.video_addr, PAGE2);
+#else
        outb (&VIC.addr, PAGE2);
+#endif
 
        /* Count frames */
         f += 2;
@@ -221,7 +253,12 @@ int main (void)
     t = clock() - t;
 
     /* Switch back the VIC screen */
+#if defined(__PLUS4__)
+    outb (&TED.video_addr, v2);
+    outb (&TED.char_addr, v);
+#else
     outb (&VIC.addr, v);
+#endif
 
 #if defined(__C64__) || defined(__C128__)
     /* Move back the VIC 16K block */