mirror of
https://github.com/edmccard/twoapple-reboot.git
synced 2024-06-14 10:29:31 +00:00
98 lines
2.4 KiB
D
98 lines
2.4 KiB
D
/+
|
|
+ video/base.d
|
|
+
|
|
+ Copyright: 2007 Gerald Stocker
|
|
+
|
|
+ This file is part of twoapple-reboot.
|
|
+
|
|
+ twoapple-reboot 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.
|
|
+
|
|
+ twoapple-reboot 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 twoapple-reboot; if not, write to the Free Software
|
|
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
+/
|
|
|
|
module video.base;
|
|
|
|
import memory;
|
|
|
|
enum Mode
|
|
{
|
|
TEXT,
|
|
LORES,
|
|
HIRES
|
|
}
|
|
|
|
class ScannerBase
|
|
{
|
|
abstract ubyte* getData(uint vidClock);
|
|
abstract ubyte* getData(uint line, uint col);
|
|
abstract ubyte* getData80(uint vidClock);
|
|
abstract ubyte* getData80(uint line, uint col);
|
|
abstract bool shouldUpdate();
|
|
abstract uint currentLine();
|
|
abstract uint currentCol();
|
|
abstract Mode getMode();
|
|
abstract bool checkColorBurst();
|
|
abstract ubyte floatingBus(ushort addr);
|
|
abstract void page2SwitchOn();
|
|
abstract void page2SwitchOff();
|
|
abstract void hiresSwitchOn();
|
|
abstract void hiresSwitchOff();
|
|
}
|
|
|
|
class PatternGenerator
|
|
{
|
|
ScannerBase scanner;
|
|
abstract void initPatterns();
|
|
abstract void initPatterns(ubyte[] rom);
|
|
abstract void update(ubyte* signal, int scanLine, int startCol,
|
|
uint len);
|
|
abstract void update80(ubyte* signal, int scanLine, int startCol,
|
|
uint len);
|
|
}
|
|
|
|
class SignalBase
|
|
{
|
|
abstract void update();
|
|
abstract void update(Mode mode, bool col80, bool colorBurst,
|
|
int startLine, int stopLine, int startCol, int stopCol);
|
|
abstract void dHGRChange(bool newdHGR);
|
|
}
|
|
|
|
class Screen
|
|
{
|
|
ushort* data;
|
|
int width, height;
|
|
ScannerBase scanner;
|
|
|
|
bool isColor;
|
|
|
|
abstract void draw(bool col80, bool colorBurst, ubyte* bitmap,
|
|
int scanLine, int scanStart, int scanEnd);
|
|
}
|
|
|
|
struct VideoPages
|
|
{
|
|
DataMem lores1;
|
|
DataMem lores2;
|
|
DataMem hires1;
|
|
DataMem hires2;
|
|
|
|
void reboot()
|
|
{
|
|
lores1.reboot();
|
|
lores2.reboot();
|
|
hires1.reboot();
|
|
hires2.reboot();
|
|
}
|
|
}
|