home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ARM Club 3
/
TheARMClub_PDCD3.iso
/
programs
/
emulaton
/
trash80
/
!Trash80
/
c
/
EmuWriteT
< prev
next >
Wrap
Text File
|
1992-10-08
|
2KB
|
116 lines
#include <stdio.h>
#include <string.h>
#include "bbc.h"
#include "general.h"
#include "Externals.h"
/* Ecran texte Apple */
#define MODE_TRS 0
#define MODE_TRS32 4
BOOL UpdWInter(u_int ad, u_char vx)
{
switch(ad & 0xff)
{
extern void SelK7(u_char vx), WrDisk(u_char lad, u_char vx);
case 0xe4:
SelK7(vx);
return(FALSE);
case 0xe1: /* Drive selection 1 <= vx <= 4 */
case 0xec: /* command */
case 0xed: /* track */
case 0xee: /* sector */
case 0xef: /* data */
WrDisk(ad & 0xff, vx);
return(TRUE);
}
return(FALSE);
}
BOOL (*EmuWrite[SIZE_CODE>>8])(u_int ax, u_char vx);
void RafEcrAC64(void);
void RafEcrAC32(void);
void (*RafEcr3264)(void)= RafEcrAC64;
BOOL UpdScreen64(u_int ax, u_char vx);
static int offset[8] =
{
0x40, 0x00, 0x00, 0x00,
-0x40, -0x60, -0x80, -0xa0
};
BOOL UpdScreen64(u_int ad, u_char vx)
{
bbc_tab(ad & 0x3f, (ad - 0x3c00)>>6);
bbc_vdu(vx+offset[vx>>5]);
return(FALSE);
}
BOOL UpdScreen32(u_int ad,u_char vx)
{
if(!(ad & 1))
{
bbc_tab((ad & 0x3f)>>1,(ad - 0x3c00)>>6);
bbc_vdu(vx+offset[vx>>5]);
}
return(FALSE);
}
void RafEcrAC64()
{
u_int ad;
u_int p;
for(ad=0x3c00; ad< 0x4000; ad+= 0x40)
{
bbc_tab(0, (ad - 0x3c00)>>6);
for(p=0; p<0x40; p++)
{
u_char vx= TRSCode->bytes[ad+p];
bbc_vdu(vx+offset[vx>>5]);
}
}
}
void RafEcrAC32()
{
u_int ad;
u_int p;
for(ad=0x3c00; ad< 0x4000; ad+= 0x40)
{
bbc_tab(0, (ad - 0x3c00)>>6);
for(p=0; p<0x40; p+= 2)
{
u_char vx= TRSCode->bytes[ad+p];
bbc_vdu(vx+offset[vx>>5]);
}
}
}
void SRd32vidTrue()
{
extern void French_bbc_mode(u_char mode);
French_bbc_mode(MODE_TRS32);
RafEcr3264= RafEcrAC32;
EmuWrite[0x3c] = EmuWrite[0x3d] =
EmuWrite[0x3e] = EmuWrite[0x3f] = UpdScreen32;
(*RafEcr3264)();
}
void SRd32vidFalse()
{
extern void French_bbc_mode(u_char mode);
French_bbc_mode(MODE_TRS);
RafEcr3264= RafEcrAC64;
EmuWrite[0x3c] = EmuWrite[0x3d] =
EmuWrite[0x3e] = EmuWrite[0x3f] = UpdScreen64;
(*RafEcr3264)();
}