Exemplo n.º 1
0
        private void got_ram(byte[] data, object none)
        {
            C64RAM ram = C64RAM.getInstace();

            ram.injectBinaryData(m_startAddress + 0x2000, data);
            renderSprites();
        }
Exemplo n.º 2
0
        private void got_ram(byte[] data, object none)
        {
            C64RAM ram = C64RAM.getInstace();

            ram.injectBinaryData(m_startAddress, data);
            renderChars(m_startAddress);
        }
Exemplo n.º 3
0
 public static C64RAM getInstace()
 {
     if (g_64RAM == null)
     {
         g_64RAM = new C64RAM();
     }
     return(g_64RAM);
 }
Exemplo n.º 4
0
        private void got_screen(byte[] data, object none)
        {
            C64RAM ram = C64RAM.getInstace();

            ram.injectBinaryData(m_screenAddress, data);
            VICECOMManager vcom = VICECOMManager.getVICEComManager();

            vcom.addBinaryMemCommand(m_screenAddress, m_charAddress + 0x800, new CommandStruct.CS_BinaryDelegate(got_char), null, this.Dispatcher);
        }
Exemplo n.º 5
0
        private void got_char(byte[] data, object none)
        {
            C64RAM ram = C64RAM.getInstace();

            ram.injectBinaryData(m_screenAddress, data);
            VICECOMManager vcom = VICECOMManager.getVICEComManager();

            vcom.addTextCommand("bank cpu", CommandStruct.eMode.DoCommandThrowAwayResults, null, null, null);
            renderScreen();
        }
Exemplo n.º 6
0
        public void renderBitmap()
        {
            //byte[] imageArray = new byte[(16 * 24) * (16 * 21) * 4]; //16x16 with 4 bits per pixel

            m_wb = new WriteableBitmap(640, 200, 96, 96, PixelFormats.Bgra32, BitmapPalettes.WebPalette);

            int width  = Convert.ToInt32(widthBox.Text);
            int stride = Convert.ToInt32(strideBox.Text);
            int height = Convert.ToInt32(heightBox.Text);

            int bytesPerLines = width + stride;

            Int32Rect rect = new Int32Rect();

            if (doubleCheck.IsChecked ?? true)
            {
                rect.Width = 2;
            }
            else
            {
                rect.Width = 1;
            }
            rect.Height = 1;

            C64RAM ramObjc = C64RAM.getInstace();

            byte[] ram = ramObjc.getRAM();

            for (int y = 0; y < height * 8; ++y)
            {
                int startAddress = m_startAddress + (y * bytesPerLines);
                rect.Y = y;
                for (int x = 0; x < width; ++x)
                {
                    byte r = ram[startAddress + x];
                    for (int p = 0; p < 8; p += 1)
                    {
                        rect.X = x * 8 * rect.Width + p * rect.Width;

                        if ((r & 128) == 128)
                        {
                            m_wb.WritePixels(rect, VICPallete.getSafePalBGR32(1), 8 /*4*rect.Width*/, 0);
                        }
                        else
                        {
                            m_wb.WritePixels(rect, VICPallete.getSafePalBGR32(0), 8 /*4*rect.Width*/, 0);
                        }
                        r = (byte)(r << 1); //get next pixel
                    } // p
                }
            }

            canvas.Source = m_wb;
        }
Exemplo n.º 7
0
        private void canvas_ToolTipOpening(object sender, ToolTipEventArgs e)
        {
            Point  mouse = Mouse.GetPosition(canvas);
            double x     = mouse.X / 8.0;
            double y     = mouse.Y / 8.0;

            int charX = (int)Math.Floor(x);
            int charY = (int)Math.Floor(y);

            C64RAM ram = C64RAM.getInstace();

            byte[] RAM         = ram.getRAM();
            int    rowPtr      = m_screenAddress + (charY * 40);
            byte   c           = RAM[rowPtr + charX];
            int    charAddress = m_charAddress + ((int)c * 8);

            hoverTip.Content = string.Format("{0},{1}@{2:X04}({3:X02})", charX, charY, rowPtr + charX, c);
        }
Exemplo n.º 8
0
        private void renderScreen()
        {
            C64RAM ram = C64RAM.getInstace();

            byte[] RAM = ram.getRAM();
            m_wb = new WriteableBitmap(320, 200, 96, 96, PixelFormats.Bgra32, BitmapPalettes.WebPalette);
            for (int y = 0; y < 25; ++y)
            {
                int rowPtr = m_screenAddress + (y * 40);
                for (int x = 0; x < 40; ++x)
                {
                    byte c           = RAM[rowPtr + x];
                    int  charAddress = m_charAddress + ((int)c * 8);
                    VICIIRenderer.renderChar(charAddress, x, y, m_hiresOrMulti[x, y], m_charColour, m_backgroundColour, m_mulCol0, m_mulCol1, m_wb);
                } //x
            }     //y
            canvas.Source = m_wb;
        }
Exemplo n.º 9
0
        private void canvas_ToolTipOpening(object sender, ToolTipEventArgs e)
        {
            Point  mouse = Mouse.GetPosition(canvas);
            double x     = mouse.X / 24.0;
            double y     = mouse.Y / 21.0;

            int SpriteX = (int)Math.Floor(x);
            int SpriteY = (int)Math.Floor(y);

            C64RAM ram = C64RAM.getInstace();

            byte[] RAM = ram.getRAM();

            int dataPtr = (m_startBank * (64 * 1024)) + m_startAddress;

            dataPtr += SpriteY * (16 * 64);
            dataPtr += SpriteX * 64;

            hoverTip.Content = string.Format("{0:X02}@{1:X04}", SpriteY * 16 + SpriteX, dataPtr);
        }
Exemplo n.º 10
0
        private void canvas_MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed && e.ClickCount == 2)
            {
                Point  clickPoint = e.GetPosition(canvas);
                double x          = clickPoint.X / 8.0;
                double y          = clickPoint.Y / 8.0;

                int CharX = (int)Math.Floor(x);
                int CharY = (int)Math.Floor(y);

                m_hiresOrMulti[CharX, CharY] = !m_hiresOrMulti[CharX, CharY];

                int    CharPtr = m_screenAddress + (CharY * 40) + CharX;
                C64RAM ram     = C64RAM.getInstace();
                byte[] RAM     = ram.getRAM();
                int    dataPtr = m_charAddress + (8 * RAM[CharPtr]);

                VICIIRenderer.renderChar(dataPtr, CharX, CharY, m_hiresOrMulti[CharX, CharY], m_charColour, m_backgroundColour, m_mulCol0, m_mulCol1, m_wb);
            }
        }
Exemplo n.º 11
0
        public static void renderChar(int addr, int charX, int charY, bool multicolour, int charColour, int backgroundColour, int mulCol0, int mulCol1, WriteableBitmap wb)
        {
            byte[] ram;

            //check to see if we are using an extra charset
            if (addr < (int)eExtraCharsets.extraCharsetStart)
            {
                C64RAM ramObjc = C64RAM.getInstace();
                ram = ramObjc.getRAM();
            }
            else
            {
                if (addr >= (int)eExtraCharsets.hexCharset1 && addr < (int)eExtraCharsets.hexCharset1 + 0x800)
                {
                    ram   = charsetHex1;
                    addr &= 0x7ff;
                }
                else if (addr >= (int)eExtraCharsets.hexCharset2 && addr < (int)eExtraCharsets.hexCharset2 + 0x800)
                {
                    ram   = charsetHex2;
                    addr &= 0x7ff;
                }
                else if (addr >= (int)eExtraCharsets.hexCharset3 && addr < (int)eExtraCharsets.hexCharset3 + 0x800)
                {
                    ram   = charsetHex3;
                    addr &= 0x7ff;
                }
                else if (addr >= (int)eExtraCharsets.charrom_lo && addr < (int)eExtraCharsets.charrom_hi + 0x800)
                {
                    ram   = charsetCHARROM;
                    addr &= 0xfff;
                }
                else
                {
                    C64RAM ramObjc = C64RAM.getInstace();
                    ram = ramObjc.getRAM();
                }
            }


            Int32Rect rect = new Int32Rect();

            if (multicolour)
            {
                rect.Width = 2;
            }
            else
            {
                rect.Width = 1;
            }
            rect.Height = 1;
            int spriteTLX = charX * 8;
            int spriteTLY = charY * 8;


            for (int sy = 0; sy < 8; ++sy)
            {
                rect.Y = spriteTLY + sy;
                for (int sx = 0; sx < 1; ++sx)
                {
                    byte r = ram[addr];
                    //int bitmapIndex = ((spriteTLY + sy) * (24 * 4)) + ((spriteTLX + (sx*8)) * 4);
                    if (multicolour)
                    {
                        for (int p = 0; p < 8; p += 2)
                        {
                            rect.X = spriteTLX + (sx * 8) + p;
                            switch (r & 192)
                            {
                            default:
                            case 0:      //%00
                                wb.WritePixels(rect, VICPallete.getSafePalBGR32(backgroundColour), 8, 0);
                                break;

                            case 64:     //%01
                                wb.WritePixels(rect, VICPallete.getSafePalBGR32(mulCol0), 8, 0);
                                break;

                            case 128:     //%10
                                wb.WritePixels(rect, VICPallete.getSafePalBGR32(mulCol1), 8, 0);
                                break;

                            case 192:     //%11
                                wb.WritePixels(rect, VICPallete.getSafePalBGR32(charColour), 8, 0);
                                break;
                            }
                            r = (byte)(r << 2); //get next pixel
                        }
                    }
                    else
                    {
                        for (int p = 0; p < 8; ++p)
                        {
                            rect.X = spriteTLX + (sx * 8) + p;

                            if ((r & 128) == 128)
                            {
                                wb.WritePixels(rect, VICPallete.getSafePalBGR32(charColour), 4, 0);
                            }
                            else
                            {
                                wb.WritePixels(rect, VICPallete.getSafePalBGR32(backgroundColour), 4, 0);
                            }
                            r = (byte)(r << 1); //get next pixel
                        } // p
                    }
                    addr++;
                } //sx
            }     //sy
        }
Exemplo n.º 12
0
        void renderSprite(int addr, int spriteX, int spriteY, bool multicolour, int sprColour, WriteableBitmap wb)
        {
            C64RAM ramObjc = C64RAM.getInstace();

            byte[] ram = ramObjc.getRAM();

            Int32Rect rect = new Int32Rect();

            if (multicolour)
            {
                rect.Width = 2;
            }
            else
            {
                rect.Width = 1;
            }
            rect.Height = 1;
            int spriteTLX = spriteX * 24;
            int spriteTLY = spriteY * 21;


            for (int sy = 0; sy < 21; ++sy)
            {
                rect.Y = spriteTLY + sy;
                for (int sx = 0; sx < 3; ++sx)
                {
                    byte r = ram[addr];
                    //int bitmapIndex = ((spriteTLY + sy) * (24 * 4)) + ((spriteTLX + (sx*8)) * 4);
                    if (multicolour)
                    {
                        for (int p = 0; p < 8; p += 2)
                        {
                            rect.X = spriteTLX + (sx * 8) + p;
                            switch (r & 192)
                            {
                            default:
                            case 0:                                      //%00
                                wb.WritePixels(rect, VICPallete.getSafePalBGR32(m_backgroundColour), 8, 0);
                                break;

                            case 64:                                     //%01
                                wb.WritePixels(rect, VICPallete.getSafePalBGR32(m_mulCol0), 8, 0);
                                break;

                            case 128:                                     //%10
                                wb.WritePixels(rect, VICPallete.getSafePalBGR32(sprColour), 8, 0);
                                break;

                            case 192:                                     //%11
                                wb.WritePixels(rect, VICPallete.getSafePalBGR32(m_mulCol1), 8, 0);
                                break;
                            }
                            r = (byte)(r << 2);                             //get next pixel
                        }
                    }
                    else
                    {
                        for (int p = 0; p < 8; ++p)
                        {
                            rect.X = spriteTLX + (sx * 8) + p;

                            if ((r & 128) == 128)
                            {
                                wb.WritePixels(rect, VICPallete.getSafePalBGR32(sprColour), 4, 0);
                            }
                            else
                            {
                                wb.WritePixels(rect, VICPallete.getSafePalBGR32(m_backgroundColour), 4, 0);
                            }
                            r = (byte)(r << 1);   //get next pixel
                        }                         // p
                    }
                    addr++;
                }         //sx
            }             //sy
        }