-
Notifications
You must be signed in to change notification settings - Fork 1
/
multiface.c
118 lines (103 loc) · 3.71 KB
/
multiface.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include "multiface.h"
#include "crtc.h"
#include "vga.h"
#include "ppi.h"
#include "config.h"
#ifdef USE_MULTIFACE
/********************************************************* !NAME! **************
* Nom : MultifaceEnable
********************************************************** !PATHS! *************
* !./V1!\!./V2!\!./V3!\!./V4!\Variables Globales
********************************************************** !1! *****************
*
* Fichier : !./FPTH\/FLE!, ligne : !./LN!
*
* Description : Multiface activée ou non
*
********************************************************** !0! ****************/
int MultifaceEnable = 0;
/********************************************************* !NAME! **************
* Nom : MULTIFACE_ROM
********************************************************** !PATHS! *************
* !./V1!\!./V2!\!./V3!\!./V4!\Variables Globales
********************************************************** !1! *****************
*
* Fichier : !./FPTH\/FLE!, ligne : !./LN!
*
* Description : Rom/ram multiface
*
********************************************************** !0! ****************/
UBYTE MULTIFACE_ROM[ 0x4000 ];
/********************************************************* !NAME! **************
* Nom : InitMultiface
********************************************************** !PATHS! *************
* !./V1!\!./V2!\!./V3!\!./V4!\Fonctions
********************************************************** !1! *****************
*
* Fichier : !./FPTH\/FLE!, ligne : !./LN!
*
* Description : Initialisation de la multiface : lecture de la rom multiface
*
* Résultat : TRUE si ok, FALSE sinon.
*
* Variables globales modifiées : MULTIFACE_ROM
*
********************************************************** !0! ****************/
BOOL InitMultiface( void )
{
FILE * fp = fopen( LocRomMulti, "rb" );
if ( fp )
{
fread( MULTIFACE_ROM, 0x2000, 1, fp );
fclose( fp );
return( TRUE );
}
return( FALSE );
}
/********************************************************* !NAME! **************
* Nom : MultifaceWriteIO
********************************************************** !PATHS! *************
* !./V1!\!./V2!\!./V3!\!./V4!\Fonctions
********************************************************** !1! *****************
*
* Fichier : !./FPTH\/FLE!, ligne : !./LN!
*
* Description : Interception des écritures ports pour mémorisation par la
* multiface
*
* Résultat : /
*
* Variables globales modifiées : MULTIFACE_ROM
*
********************************************************** !0! ****************/
void MultifaceWriteIO( int Port, int Data )
{
UBYTE PortHighByte = ( UBYTE )( Port >> 8 );
if ( ( Port & 0xFFFD ) == 0xFEE8 )
{
MultifaceEnable = ! ( Port & 2 );
WriteROM( RomExt );
}
if ( PortHighByte == ( UBYTE )0x7F )
{
if ( ( Data & 0xC0 ) == 0x40 )
{
int PenIndex = MULTIFACE_ROM[ 0x3FCF ];
MULTIFACE_ROM[ 0x3F90 | ( ( PenIndex & 0x10 ) << 2 ) | ( PenIndex & 0x0F ) ] = ( UBYTE )Data;
}
else
MULTIFACE_ROM[ 0x3FCF | ( ( Data & 0xC0 ) >> 2 ) ] = ( UBYTE )Data;
}
if ( PortHighByte == ( UBYTE )0xBC )
MULTIFACE_ROM[ 0x3CFF ] = ( UBYTE )Data;
if ( PortHighByte == ( UBYTE )0xBD )
{
int CRTCRegIndex = MULTIFACE_ROM[ 0x3CFF ];
MULTIFACE_ROM[ ( 0x3DB0 + ( CRTCRegIndex & 0x0F ) ) ] = ( UBYTE )Data;
}
if ( PortHighByte == ( UBYTE )0xF7 )
MULTIFACE_ROM[ 0x37FF ] = ( UBYTE )Data;
if ( PortHighByte == ( UBYTE )0xDF )
MULTIFACE_ROM[ 0x3AAC ] = ( UBYTE )Data;
}
#endif