mirror of
https://github.com/robmcmullen/apple2.git
synced 2024-06-01 17:41:36 +00:00
Miscellaneous sound engine fixes (still needs fixing!), floppy diagnostics
This commit is contained in:
parent
09edc12bc4
commit
2cd6e924eb
10
apple2.cfg
10
apple2.cfg
|
@ -23,9 +23,10 @@ autoSaveState = 1
|
|||
# Yes
|
||||
#floppyImage1 = ./disks/bt1_boot.dsk
|
||||
# Yes
|
||||
floppyImage1 = ./disks/bt2_boot.dsk
|
||||
# No (gets stuck on 1st track)
|
||||
#floppyImage1 = ./disks/bt3_boot.dsk
|
||||
#floppyImage1 = ./disks/bt2_boot.dsk
|
||||
# No (PRODOS 8 V1.4 - UNABLE TO LOAD ATINIT FILE)
|
||||
floppyImage1 = ./disks/bt3_boot_fixed.dsk
|
||||
#floppyImage1 = ./disks/Bard's Tale III - The Thief of Fate (Boot) (Disk 1 of 4).dsk
|
||||
# Yes
|
||||
#floppyImage1 = ./disks/Sabotage.dsk
|
||||
# ??? (//c or //e w/128K required)
|
||||
|
@ -48,8 +49,9 @@ floppyImage1 = ./disks/bt2_boot.dsk
|
|||
#floppyImage1 = ./disks/wind_walker_1.dsk
|
||||
# Yes
|
||||
#floppyImage1 = ./disks/dino_eggs.dsk
|
||||
# ??? 1, yes; 2, no
|
||||
#floppyImage1 = ./disks/mockingboard1.dsk
|
||||
#floppyImage1 = ./disks/mockingboard2.dsk
|
||||
#floppyImage2 = ./disks/mockingboard2.dsk
|
||||
# Yes, but have to load manually
|
||||
#floppyImage1 = ./disks/ultima_ii-1.dsk
|
||||
#floppyImage2 = ./disks/ultima_ii-2.dsk
|
||||
|
|
156
src/apple2.cpp
156
src/apple2.cpp
|
@ -14,7 +14,7 @@
|
|||
// WHO WHEN WHAT
|
||||
// --- ---------- ------------------------------------------------------------
|
||||
// JLH 11/12/2005 Initial port to SDL
|
||||
// JLH 11/18/2005 Wired up graphic soft switches
|
||||
// JLH 11/18/2005 Wired up graphic soft switches
|
||||
// JLH 12/02/2005 Setup timer subsystem for more accurate time keeping
|
||||
// JLH 12/12/2005 Added preliminary state saving support
|
||||
//
|
||||
|
@ -223,8 +223,45 @@ deltaT to zero. In the sound IRQ, if deltaT > buffer size, then subtract buffer
|
|||
//OK! This switch selects bank 2 of the 4K bank at $D000-$DFFF. One access makes it
|
||||
//visible, two makes it R/W.
|
||||
|
||||
/*
|
||||
301 LDA $E000
|
||||
304 PHA
|
||||
305 LDA $C081
|
||||
308 PLA
|
||||
309 PHA
|
||||
30A CMP $E000
|
||||
30D BNE $332
|
||||
30F LDA $C083
|
||||
312 LDA $C083
|
||||
315 LDA #$A5
|
||||
317 STA $D000
|
||||
31A CMP $D000
|
||||
31D BNE $332
|
||||
31F LSR A
|
||||
320 STA $D000
|
||||
323 CMP $D000
|
||||
326 BNE $332
|
||||
328 LDA $C081
|
||||
32B LDA $C081
|
||||
32E LDA #$01
|
||||
330 BNE $334
|
||||
332 LDA #$00
|
||||
334 STA $300
|
||||
337 PLA
|
||||
338 CMP $E000
|
||||
33B BEQ $340
|
||||
33D LDA $C080
|
||||
340 RTS
|
||||
|
||||
A = PEEK($C082)
|
||||
*/
|
||||
|
||||
#define DEBUG_LC
|
||||
else if ((addr & 0xFFFB) == 0xC080)
|
||||
{
|
||||
#ifdef DEBUG_LC
|
||||
WriteLog("LC(R): $C080 49280 OECG R Read RAM bank 2; no write\n");
|
||||
#endif
|
||||
//$C080 49280 OECG R Read RAM bank 2; no write
|
||||
visibleBank = LC_BANK_2;
|
||||
readRAM = true;
|
||||
|
@ -232,6 +269,9 @@ deltaT to zero. In the sound IRQ, if deltaT > buffer size, then subtract buffer
|
|||
}
|
||||
else if ((addr & 0xFFFB) == 0xC081)
|
||||
{
|
||||
#ifdef DEBUG_LC
|
||||
WriteLog("LC(R): $C081 49281 OECG RR Read ROM; write RAM bank 2\n");
|
||||
#endif
|
||||
//$C081 49281 ROMIN OECG RR Read ROM; write RAM bank 2
|
||||
visibleBank = LC_BANK_2;
|
||||
readRAM = false;
|
||||
|
@ -239,6 +279,9 @@ deltaT to zero. In the sound IRQ, if deltaT > buffer size, then subtract buffer
|
|||
}
|
||||
else if ((addr & 0xFFFB) == 0xC082)
|
||||
{
|
||||
#ifdef DEBUG_LC
|
||||
WriteLog("LC(R): $C082 49282 OECG R Read ROM; no write\n");
|
||||
#endif
|
||||
//$C082 49282 OECG R Read ROM; no write
|
||||
visibleBank = LC_BANK_2;
|
||||
readRAM = false;
|
||||
|
@ -246,6 +289,9 @@ deltaT to zero. In the sound IRQ, if deltaT > buffer size, then subtract buffer
|
|||
}
|
||||
else if ((addr & 0xFFFB) == 0xC083)
|
||||
{
|
||||
#ifdef DEBUG_LC
|
||||
WriteLog("LC(R): $C083 49283 OECG RR Read/Write RAM bank 2\n");
|
||||
#endif
|
||||
//$C083 49283 LCBANK2 OECG RR Read/write RAM bank 2
|
||||
visibleBank = LC_BANK_2;
|
||||
readRAM = true;
|
||||
|
@ -253,13 +299,21 @@ deltaT to zero. In the sound IRQ, if deltaT > buffer size, then subtract buffer
|
|||
}
|
||||
else if ((addr & 0xFFFB) == 0xC088)
|
||||
{
|
||||
#ifdef DEBUG_LC
|
||||
WriteLog("LC(R): $%04X 49288 OECG R Read RAM bank 1; no write\n", addr);
|
||||
#endif
|
||||
//$C088 49288 OECG R Read RAM bank 1; no write
|
||||
visibleBank = LC_BANK_1;
|
||||
readRAM = true;
|
||||
writeRAM = false;
|
||||
//Hm. Some stuff seems to want this.
|
||||
//nope, was looking at $C0E8... return 0xFF;
|
||||
}
|
||||
else if ((addr & 0xFFFB) == 0xC089)
|
||||
{
|
||||
#ifdef DEBUG_LC
|
||||
WriteLog("LC(R): $C089 49289 OECG RR Read ROM; write RAM bank 1\n");
|
||||
#endif
|
||||
//$C089 49289 OECG RR Read ROM; write RAM bank 1
|
||||
visibleBank = LC_BANK_1;
|
||||
readRAM = false;
|
||||
|
@ -267,6 +321,9 @@ deltaT to zero. In the sound IRQ, if deltaT > buffer size, then subtract buffer
|
|||
}
|
||||
else if ((addr & 0xFFFB) == 0xC08A)
|
||||
{
|
||||
#ifdef DEBUG_LC
|
||||
WriteLog("LC(R): $C08A 49290 OECG R Read ROM; no write\n");
|
||||
#endif
|
||||
//$C08A 49290 OECG R Read ROM; no write
|
||||
visibleBank = LC_BANK_1;
|
||||
readRAM = false;
|
||||
|
@ -274,6 +331,9 @@ deltaT to zero. In the sound IRQ, if deltaT > buffer size, then subtract buffer
|
|||
}
|
||||
else if ((addr & 0xFFFB) == 0xC08B)
|
||||
{
|
||||
#ifdef DEBUG_LC
|
||||
WriteLog("LC(R): $C08B 49291 OECG RR Read/Write RAM bank 1\n");
|
||||
#endif
|
||||
//$C08B 49291 OECG RR Read/write RAM bank 1
|
||||
visibleBank = LC_BANK_1;
|
||||
readRAM = true;
|
||||
|
@ -294,6 +354,9 @@ deltaT to zero. In the sound IRQ, if deltaT > buffer size, then subtract buffer
|
|||
else if (addr == 0xC0EC)
|
||||
{
|
||||
return floppyDrive.ReadWrite();
|
||||
//Hm, some stuff is looking at the return value. Dunno what it *should* be...
|
||||
// OK, it's from the ReadWrite routine...
|
||||
//return 0xFF;
|
||||
}
|
||||
else if (addr == 0xC0ED)
|
||||
{
|
||||
|
@ -437,7 +500,9 @@ SETALTCH = $C00F ;use alt char set- norm inverse, LC; no Flash (WR-only)
|
|||
}
|
||||
else if ((addr & 0xFFF0) == 0xC010) // Keyboard strobe
|
||||
{
|
||||
keyDown = false;
|
||||
//Actually, according to the A2 ref, this should do nothing since a write
|
||||
//is immediately preceded by a read leaving it in the same state it was...
|
||||
// keyDown = false;
|
||||
}
|
||||
else if (addr == 0xC050)
|
||||
{
|
||||
|
@ -471,6 +536,87 @@ SETALTCH = $C00F ;use alt char set- norm inverse, LC; no Flash (WR-only)
|
|||
{
|
||||
hiRes = true;
|
||||
}
|
||||
else if ((addr & 0xFFFB) == 0xC080)
|
||||
{
|
||||
#ifdef DEBUG_LC
|
||||
WriteLog("LC(R): $C080 49280 OECG R Read RAM bank 2; no write\n");
|
||||
#endif
|
||||
//$C080 49280 OECG R Read RAM bank 2; no write
|
||||
visibleBank = LC_BANK_2;
|
||||
readRAM = true;
|
||||
writeRAM = false;
|
||||
}
|
||||
else if ((addr & 0xFFFB) == 0xC081)
|
||||
{
|
||||
#ifdef DEBUG_LC
|
||||
WriteLog("LC(R): $C081 49281 OECG RR Read ROM; write RAM bank 2\n");
|
||||
#endif
|
||||
//$C081 49281 ROMIN OECG RR Read ROM; write RAM bank 2
|
||||
visibleBank = LC_BANK_2;
|
||||
readRAM = false;
|
||||
writeRAM = true;
|
||||
}
|
||||
else if ((addr & 0xFFFB) == 0xC082)
|
||||
{
|
||||
#ifdef DEBUG_LC
|
||||
WriteLog("LC(R): $C082 49282 OECG R Read ROM; no write\n");
|
||||
#endif
|
||||
//$C082 49282 OECG R Read ROM; no write
|
||||
visibleBank = LC_BANK_2;
|
||||
readRAM = false;
|
||||
writeRAM = false;
|
||||
}
|
||||
else if ((addr & 0xFFFB) == 0xC083)
|
||||
{
|
||||
#ifdef DEBUG_LC
|
||||
WriteLog("LC(R): $C083 49283 OECG RR Read/Write RAM bank 2\n");
|
||||
#endif
|
||||
//$C083 49283 LCBANK2 OECG RR Read/write RAM bank 2
|
||||
visibleBank = LC_BANK_2;
|
||||
readRAM = true;
|
||||
writeRAM = true;
|
||||
}
|
||||
else if ((addr & 0xFFFB) == 0xC088)
|
||||
{
|
||||
#ifdef DEBUG_LC
|
||||
WriteLog("LC(R): $C088 49288 OECG R Read RAM bank 1; no write\n");
|
||||
#endif
|
||||
//$C088 49288 OECG R Read RAM bank 1; no write
|
||||
visibleBank = LC_BANK_1;
|
||||
readRAM = true;
|
||||
writeRAM = false;
|
||||
}
|
||||
else if ((addr & 0xFFFB) == 0xC089)
|
||||
{
|
||||
#ifdef DEBUG_LC
|
||||
WriteLog("LC(R): $C089 49289 OECG RR Read ROM; write RAM bank 1\n");
|
||||
#endif
|
||||
//$C089 49289 OECG RR Read ROM; write RAM bank 1
|
||||
visibleBank = LC_BANK_1;
|
||||
readRAM = false;
|
||||
writeRAM = true;
|
||||
}
|
||||
else if ((addr & 0xFFFB) == 0xC08A)
|
||||
{
|
||||
#ifdef DEBUG_LC
|
||||
WriteLog("LC(R): $C08A 49290 OECG R Read ROM; no write\n");
|
||||
#endif
|
||||
//$C08A 49290 OECG R Read ROM; no write
|
||||
visibleBank = LC_BANK_1;
|
||||
readRAM = false;
|
||||
writeRAM = false;
|
||||
}
|
||||
else if ((addr & 0xFFFB) == 0xC08B)
|
||||
{
|
||||
#ifdef DEBUG_LC
|
||||
WriteLog("LC(R): $C08B 49291 OECG RR Read/Write RAM bank 1\n");
|
||||
#endif
|
||||
//$C08B 49291 OECG RR Read/write RAM bank 1
|
||||
visibleBank = LC_BANK_1;
|
||||
readRAM = true;
|
||||
writeRAM = true;
|
||||
}
|
||||
//This is determined by which slot it is in--this assumes slot 6. !!! FIX !!!
|
||||
else if ((addr & 0xFFF8) == 0xC0E0)
|
||||
{
|
||||
floppyDrive.ControlStepper(addr & 0x07);
|
||||
|
@ -578,7 +724,7 @@ int main(int /*argc*/, char * /*argv*/[])
|
|||
|
||||
//Load up disk image from config file (for now)...
|
||||
floppyDrive.LoadImage(settings.diskImagePath1, 0);
|
||||
floppyDrive.LoadImage(settings.diskImagePath2, 1);
|
||||
// floppyDrive.LoadImage(settings.diskImagePath2, 1);
|
||||
// floppyDrive.LoadImage("./disks/temp.nib", 1); // Load temp .nib file into second drive...
|
||||
|
||||
//Kill the DOS ROM in slot 6 for now...
|
||||
|
@ -663,6 +809,8 @@ memcpy(ram + 0xD000, ram + 0xC000, 0x1000);
|
|||
//(Fix so that this is not a requirement!)
|
||||
//Fixed, but mainCPU.clock is destroyed in the bargain. Oh well.
|
||||
// mainCPU.clock -= USEC_TO_M6502_CYCLES(timeToNextEvent);
|
||||
// Handle CPU time delta for sound...
|
||||
AddToSoundTimeBase(USEC_TO_M6502_CYCLES(timeToNextEvent));
|
||||
HandleNextEvent();
|
||||
}
|
||||
|
||||
|
@ -809,7 +957,7 @@ else if (event.key.keysym.sym == SDLK_F10)
|
|||
}
|
||||
}
|
||||
|
||||
HandleSoundAtFrameEdge(); // Sound stuff... (ick)
|
||||
//ick. HandleSoundAtFrameEdge(); // Sound stuff... (ick)
|
||||
RenderVideoFrame();
|
||||
SetCallbackTime(FrameCallback, 16666.66666667);
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#include "log.h"
|
||||
#include "applevideo.h" // For message spawning... Though there's probably a better approach than this!
|
||||
|
||||
using namespace std;
|
||||
//using namespace std;
|
||||
|
||||
// Useful enums
|
||||
|
||||
|
@ -60,6 +60,8 @@ FloppyDrive::~FloppyDrive()
|
|||
|
||||
bool FloppyDrive::LoadImage(const char * filename, uint8 driveNum/*= 0*/)
|
||||
{
|
||||
WriteLog("FLOPPY: Attempting to load image '%s' in drive #%u.\n", filename, driveNum);
|
||||
|
||||
if (driveNum > 1)
|
||||
{
|
||||
WriteLog("FLOPPY: Attempted to load image to drive #%u!\n", driveNum);
|
||||
|
@ -90,6 +92,20 @@ bool FloppyDrive::LoadImage(const char * filename, uint8 driveNum/*= 0*/)
|
|||
DetectImageType(filename, driveNum);
|
||||
strcpy(imageName[driveNum], filename);
|
||||
|
||||
#if 0
|
||||
WriteLog("FLOPPY: Opening image for drive #%u.\n", driveNum);
|
||||
FILE * fp2 = fopen("bt-nybblized.nyb", "wb");
|
||||
|
||||
if (fp2 == NULL)
|
||||
WriteLog("FLOPPY: Failed to open image file 'bt-nybblized.nyb' for writing...\n");
|
||||
else
|
||||
{
|
||||
fwrite(nybblizedImage[driveNum], 1, 232960, fp2);
|
||||
fclose(fp2);
|
||||
}
|
||||
#endif
|
||||
WriteLog("FLOPPY: Loaded image '%s' for drive #%u.\n", filename, driveNum);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -227,8 +243,16 @@ WRT to the disk image itself.
|
|||
//*/
|
||||
}
|
||||
|
||||
// Actually, it just might matter WRT to nybblyzing/denybblyzing
|
||||
// Here, we check for BT3
|
||||
//Nope, no change...
|
||||
//diskType[driveNum] = DT_PRODOS;
|
||||
|
||||
NybblizeImage(driveNum);
|
||||
}
|
||||
|
||||
#warning "Should we attempt to nybblize unknown images here? Definitely SHOULD issue a warning!"
|
||||
|
||||
WriteLog("FLOPPY: Detected image type %s...\n", (diskType[driveNum] == DT_NYBBLE ?
|
||||
"Nybble image" : (diskType[driveNum] == DT_DOS33 ?
|
||||
"DOS 3.3 image" : (diskType[driveNum] == DT_PRODOS ? "ProDOS image" : "unknown"))));
|
||||
|
@ -317,8 +341,16 @@ void FloppyDrive::NybblizeImage(uint8 driveNum)
|
|||
// Using a lookup table, convert the 6-bit bytes into disk bytes.
|
||||
|
||||
for(uint16 i=0; i<343; i++)
|
||||
//#define TEST_NYBBLIZATION
|
||||
#ifdef TEST_NYBBLIZATION
|
||||
{
|
||||
WriteLog("FL: i = %u, img[i] = %02X, diskbyte = %02X\n", i, img[i], diskbyte[img[i] >> 2]);
|
||||
#endif
|
||||
img[i] = diskbyte[img[i] >> 2];
|
||||
|
||||
#ifdef TEST_NYBBLIZATION
|
||||
//WriteLog(" img[i] = %02X\n", img[i]);
|
||||
}
|
||||
#endif
|
||||
img += 343;
|
||||
|
||||
// Done with the nybblization, now for the epilogue...
|
||||
|
@ -488,7 +520,8 @@ void FloppyDrive::DriveEnable(uint8 addr)
|
|||
|
||||
uint8 FloppyDrive::ReadWrite(void)
|
||||
{
|
||||
SpawnMessage("%sing %s track %u, sector %u...", (ioMode == IO_MODE_READ ? "Read" : "Write"),
|
||||
SpawnMessage("%u:%sing %s track %u, sector %u...", activeDrive,
|
||||
(ioMode == IO_MODE_READ ? "Read" : "Write"),
|
||||
(ioMode == IO_MODE_READ ? "from" : "to"), track, currentPos / 396);
|
||||
// $C0EC
|
||||
/*
|
||||
|
@ -506,6 +539,7 @@ Which we now do. :-)
|
|||
uint8 diskByte = nybblizedImage[activeDrive][(track * 6656) + currentPos];
|
||||
currentPos = (currentPos + 1) % 6656;
|
||||
|
||||
//WriteLog("FL: diskByte=%02X, currentPos=%u\n", diskByte, currentPos);
|
||||
return diskByte;
|
||||
}
|
||||
|
||||
|
|
|
@ -208,20 +208,20 @@ uint8 closeBox[] = {
|
|||
15 / 256, 15 % 256, // width (HI byte, LO byte)
|
||||
15 / 256, 15 % 256, // height (HI byte, LO byte)
|
||||
|
||||
0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
|
@ -229,20 +229,20 @@ uint8 closeBoxHover[] = {
|
|||
15 / 256, 15 % 256, // width (HI byte, LO byte)
|
||||
15 / 256, 15 % 256, // height (HI byte, LO byte)
|
||||
|
||||
0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xBE, 0x63, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xBE, 0x63, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xBE, 0x63, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xBE, 0x63, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xBE, 0x63, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xBE, 0x63, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xBE, 0x63, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xBE, 0x63, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
|
@ -250,20 +250,20 @@ uint8 closeBoxDown[] = {
|
|||
15 / 256, 15 % 256, // width (HI byte, LO byte)
|
||||
15 / 256, 15 % 256, // height (HI byte, LO byte)
|
||||
|
||||
0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xE2, 0x1D, 0x1D, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xE2, 0x1D, 0x1D, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xBD, 0x6E, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xBD, 0x6E, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xBD, 0x6E, 0x00, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xBD, 0x6E, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xE2, 0x1D, 0x1D, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xE2, 0x1D, 0x1D, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xE2, 0x1D, 0x1D, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xE2, 0x1D, 0x1D, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xBD, 0x6E, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xBD, 0x6E, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xBD, 0x6E, 0x00, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xBD, 0x6E, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0xED, 0x38, 0x38, 0xFF, 0xE2, 0x1D, 0x1D, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xE2, 0x1D, 0x1D, 0xFF, 0xED, 0x38, 0x38, 0xFF,
|
||||
0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
|
@ -346,7 +346,7 @@ int stringCmpi(const string &s1, const string &s2)
|
|||
// Select the first element of each string:
|
||||
string::const_iterator p1 = s1.begin(), p2 = s2.begin();
|
||||
|
||||
while (p1 != s1.end() && p2 != s2.end()) // Don稚 run past the end
|
||||
while (p1 != s1.end() && p2 != s2.end()) // Don<EFBFBD>t run past the end
|
||||
{
|
||||
if (toupper(*p1) != toupper(*p2)) // Compare upper-cased chars
|
||||
return (toupper(*p1) < toupper(*p2) ? -1 : 1);// Report which was lexically greater
|
||||
|
@ -482,7 +482,7 @@ void Button::Draw(uint32 offsetX/*= 0*/, uint32 offsetY/*= 0*/)
|
|||
{
|
||||
// Doesn't clip in y axis! !!! FIX !!!
|
||||
if (extents.x + x < pitch)
|
||||
screenBuffer[addr + x + (y * pitch)]
|
||||
screenBuffer[addr + x + (y * pitch)]
|
||||
// = (clicked && inside ? fgColor : (inside ? 0x43F0 : bgColor));
|
||||
//43F0 -> 010000 11111 10000 -> 0100 0001 1111 1111 1000 0100 -> 41 FF 84
|
||||
= (clicked && inside ? fgColor : (inside ? 0xFF84FF41 : bgColor));
|
||||
|
@ -595,7 +595,7 @@ void PushButton::Draw(uint32 offsetX/*= 0*/, uint32 offsetY/*= 0*/)
|
|||
{
|
||||
// Doesn't clip in y axis! !!! FIX !!!
|
||||
if (extents.x + x < pitch)
|
||||
screenBuffer[addr + x + (y * pitch)]
|
||||
screenBuffer[addr + x + (y * pitch)]
|
||||
= (clicked && inside ? fgColor : (inside ? 0x43F0 : bgColor));
|
||||
}
|
||||
}*/
|
||||
|
@ -891,7 +891,7 @@ void TextEdit::HandleKey(SDLKey key)
|
|||
}
|
||||
else if (key == SDLK_BACKSPACE)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
else if (key == SDLK_DELETE)
|
||||
{
|
||||
|
@ -1213,14 +1213,14 @@ FileList::FileList(uint32 x, uint32 y, uint32 w, uint32 h): Window(x, y, w, h)
|
|||
while ((de = readdir(dp)) != NULL)
|
||||
{
|
||||
char * ext = strrchr(de->d_name, '.');
|
||||
|
||||
|
||||
if (ext != NULL)
|
||||
if (strcasecmp(ext, ".zip") == 0 || strcasecmp(ext, ".j64") == 0
|
||||
|| strcasecmp(ext, ".abs") == 0 || strcasecmp(ext, ".jag") == 0
|
||||
|| strcasecmp(ext, ".rom") == 0)
|
||||
files->AddItem(string(de->d_name));
|
||||
}
|
||||
|
||||
|
||||
closedir(dp);
|
||||
}
|
||||
else
|
||||
|
@ -1309,7 +1309,7 @@ class MenuItems
|
|||
class Menu: public Element
|
||||
{
|
||||
public:
|
||||
// 1CFF -> 0 001 11 00 111 1 1111
|
||||
// 1CFF -> 0 001 11 00 111 1 1111
|
||||
// 421F -> 0 100 00 10 000 1 1111
|
||||
Menu(uint32 x = 0, uint32 y = 0, uint32 w = 0, uint32 h = FONT_HEIGHT,
|
||||
/* uint16 fgc = 0x1CFF, uint16 bgc = 0x000F, uint16 fgch = 0x421F,
|
||||
|
@ -1951,7 +1951,7 @@ Bitmap ptr = { 6, 8, 4,
|
|||
//"000011112222333344445555"
|
||||
//"000011112222333344445555"
|
||||
//"000011112222333344445555"
|
||||
};//*/
|
||||
};//*/
|
||||
uint32 * overlayPixels = (uint32 *)sdlemuGetOverlayPixels();
|
||||
uint32 count = 2;
|
||||
|
||||
|
@ -2264,7 +2264,7 @@ return NULL;//*/
|
|||
DrawStringTrans(backbuffer, 8, 27*8, 0xFF1FFF3F, transparency, "CRC: %08X", jaguar_mainRom_crc32);
|
||||
|
||||
if (showMsgFrames == 0)
|
||||
{
|
||||
{
|
||||
transparency++;
|
||||
|
||||
if (transparency == 33)
|
||||
|
@ -2375,7 +2375,7 @@ else
|
|||
DrawString2(overlayPixels, 8, 27*FONT_HEIGHT, 0x001FFF3F, transparency, "CRC: %08X", jaguar_mainRom_crc32);
|
||||
|
||||
if (showMsgFrames == 0)
|
||||
{
|
||||
{
|
||||
transparency--;
|
||||
|
||||
if (transparency == 0)
|
||||
|
|
137
src/sound.cpp
137
src/sound.cpp
|
@ -28,9 +28,9 @@
|
|||
|
||||
#define SAMPLE_RATE (44100.0)
|
||||
#define SAMPLES_PER_FRAME (SAMPLE_RATE / 60.0)
|
||||
#define CYCLES_PER_SAMPLE ((1024000.0 / 60.0) / (SAMPLES_PER_FRAME))
|
||||
#define SOUND_BUFFER_SIZE 8192
|
||||
#define AMPLITUDE (32) // -32 - +32 seems to be plenty loud!
|
||||
#define CYCLES_PER_SAMPLE (1024000.0 / SAMPLE_RATE)
|
||||
#define SOUND_BUFFER_SIZE (8192)
|
||||
#define AMPLITUDE (32) // -32 - +32 seems to be plenty loud!
|
||||
|
||||
// Global variables
|
||||
|
||||
|
@ -39,12 +39,13 @@
|
|||
|
||||
static SDL_AudioSpec desired;
|
||||
static bool soundInitialized = false;
|
||||
static bool speakerState;
|
||||
static bool speakerState = false;
|
||||
static uint8 soundBuffer[SOUND_BUFFER_SIZE];
|
||||
static uint32 soundBufferPos;
|
||||
static uint32 sampleBase;
|
||||
static SDL_cond * conditional = NULL;
|
||||
static SDL_mutex * mutex = NULL;
|
||||
static SDL_mutex * mutex2 = NULL;
|
||||
|
||||
// Private function prototypes
|
||||
|
||||
|
@ -77,6 +78,7 @@ return;
|
|||
|
||||
conditional = SDL_CreateCond();
|
||||
mutex = SDL_CreateMutex();
|
||||
mutex2 = SDL_CreateMutex();// Let's try real signalling...
|
||||
SDL_mutexP(mutex); // Must lock the mutex for the cond to work properly...
|
||||
soundBufferPos = 0;
|
||||
sampleBase = 0;
|
||||
|
@ -97,6 +99,7 @@ void SoundDone(void)
|
|||
SDL_CloseAudio();
|
||||
SDL_DestroyCond(conditional);
|
||||
SDL_DestroyMutex(mutex);
|
||||
SDL_DestroyMutex(mutex2);
|
||||
WriteLog("Sound: Done.\n");
|
||||
}
|
||||
}
|
||||
|
@ -112,6 +115,9 @@ static void SDLSoundCallback(void * userdata, Uint8 * buffer, int length)
|
|||
// (But, then again, if the sound hasn't been toggled for a while, then this
|
||||
// makes perfect sense as the buffer won't have been filled at all!)
|
||||
|
||||
// Let's try using a mutex for shared resource consumption...
|
||||
SDL_mutexP(mutex2);
|
||||
|
||||
if (soundBufferPos < (uint32)length) // The sound buffer is starved...
|
||||
{
|
||||
//printf("Sound buffer starved!\n");
|
||||
|
@ -124,23 +130,26 @@ static void SDLSoundCallback(void * userdata, Uint8 * buffer, int length)
|
|||
soundBufferPos = 0; // Reset soundBufferPos to start of buffer...
|
||||
sampleBase = 0; // & sampleBase...
|
||||
//Ick. This should never happen!
|
||||
SDL_CondSignal(conditional); // Wake up any threads waiting for the buffer to drain...
|
||||
return; // & bail!
|
||||
//Actually, this probably happens a lot. (?)
|
||||
// SDL_CondSignal(conditional); // Wake up any threads waiting for the buffer to drain...
|
||||
// return; // & bail!
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fill sound buffer with frame buffered sound
|
||||
memcpy(buffer, soundBuffer, length);
|
||||
soundBufferPos -= length;
|
||||
sampleBase -= length;
|
||||
|
||||
// Move current buffer down to start
|
||||
for(uint32 i=0; i<soundBufferPos; i++)
|
||||
soundBuffer[i] = soundBuffer[length + i];
|
||||
}
|
||||
|
||||
memcpy(buffer, soundBuffer, length); // Fill sound buffer with frame buffered sound
|
||||
soundBufferPos -= length;
|
||||
sampleBase -= length;
|
||||
|
||||
// if (soundBufferPos > 0)
|
||||
// memcpy(soundBuffer, soundBuffer + length, soundBufferPos); // Move current buffer down to start
|
||||
// memcpy(soundBuffer, soundBuffer + length, length);
|
||||
// Move current buffer down to start
|
||||
for(uint32 i=0; i<soundBufferPos; i++)
|
||||
soundBuffer[i] = soundBuffer[length + i];
|
||||
|
||||
// lastValue = buffer[length - 1];
|
||||
SDL_CondSignal(conditional); // Wake up any threads waiting for the buffer to drain...
|
||||
// Free the mutex...
|
||||
SDL_mutexV(mutex2);
|
||||
// Wake up any threads waiting for the buffer to drain...
|
||||
// SDL_CondSignal(conditional);
|
||||
}
|
||||
|
||||
// Need some interface functions here to take care of flipping the
|
||||
|
@ -176,7 +185,8 @@ if (time > 95085)//(time & 0x80000000)
|
|||
// Need the last frame position in order to calculate correctly...
|
||||
// (or do we?)
|
||||
|
||||
SDL_LockAudio();
|
||||
// SDL_LockAudio();
|
||||
SDL_mutexP(mutex2);
|
||||
uint32 currentPos = sampleBase + (uint32)((double)time / CYCLES_PER_SAMPLE);
|
||||
|
||||
if (currentPos > SOUND_BUFFER_SIZE - 1)
|
||||
|
@ -196,10 +206,10 @@ And it still thrashed the sound even though it didn't run into a spinlock...
|
|||
|
||||
Seems like it's OK now that I've fixed the buffer-less-than-length bug...
|
||||
*/
|
||||
SDL_UnlockAudio();
|
||||
SDL_CondWait(conditional, mutex);
|
||||
SDL_LockAudio();
|
||||
currentPos = sampleBase + (uint32)((double)time / 23.2199);
|
||||
// SDL_UnlockAudio();
|
||||
// SDL_CondWait(conditional, mutex);
|
||||
// SDL_LockAudio();
|
||||
currentPos = sampleBase + (uint32)((double)time / CYCLES_PER_SAMPLE);
|
||||
#if 0
|
||||
WriteLog("--> after spinlock (sampleBase=%u)...\n", sampleBase);
|
||||
#endif
|
||||
|
@ -210,35 +220,90 @@ WriteLog("--> after spinlock (sampleBase=%u)...\n", sampleBase);
|
|||
while (soundBufferPos < currentPos)
|
||||
soundBuffer[soundBufferPos++] = (uint8)sample;
|
||||
|
||||
// This is done *after* in case the buffer had a long dead spot (I think...)
|
||||
speakerState = !speakerState;
|
||||
SDL_UnlockAudio();
|
||||
SDL_mutexV(mutex2);
|
||||
// SDL_UnlockAudio();
|
||||
}
|
||||
|
||||
void HandleSoundAtFrameEdge(void)
|
||||
void AddToSoundTimeBase(uint32 cycles)
|
||||
{
|
||||
if (!soundInitialized)
|
||||
return;
|
||||
|
||||
SDL_LockAudio();
|
||||
sampleBase += SAMPLES_PER_FRAME;
|
||||
SDL_UnlockAudio();
|
||||
// SDL_LockAudio();
|
||||
SDL_mutexP(mutex2);
|
||||
sampleBase += (uint32)((double)cycles / CYCLES_PER_SAMPLE);
|
||||
SDL_mutexV(mutex2);
|
||||
// SDL_UnlockAudio();
|
||||
}
|
||||
|
||||
/*
|
||||
HOW IT WORKS
|
||||
|
||||
the main thread adds the amount of cpu time elapsed to samplebase. togglespeaker uses
|
||||
samplebase + current cpu time to find appropriate spot in buffer. it then fills the
|
||||
buffer up to the current time with the old toggle value before flipping it. the sound
|
||||
irq takes what it needs from the sound buffer and then adjusts both the buffer and
|
||||
samplebase back the appropriate amount.
|
||||
|
||||
|
||||
A better way might be as follows:
|
||||
|
||||
Keep timestamp array of speaker toggle times. In the sound routine, unpack as many as will fit
|
||||
into the given buffer and keep going. Have the toggle function check to see if the buffer is full,
|
||||
and if it is, way for a signal from the interrupt that there's room for more. Can keep a circular
|
||||
buffer. Also, would need a timestamp buffer on the order of 2096 samples *in theory* could toggle
|
||||
each sample
|
||||
Keep timestamp array of speaker toggle times. In the sound routine, unpack as many as will
|
||||
fit into the given buffer and keep going. Have the toggle function check to see if the
|
||||
buffer is full, and if it is, way for a signal from the interrupt that there's room for
|
||||
more. Can keep a circular buffer. Also, would need a timestamp buffer on the order of 2096
|
||||
samples *in theory* could toggle each sample
|
||||
|
||||
Instead of a timestamp, just keep a delta. That way, don't need to deal with wrapping and all that
|
||||
(though the timestamp could wrap--need to check into that)
|
||||
Instead of a timestamp, just keep a delta. That way, don't need to deal with wrapping and
|
||||
all that (though the timestamp could wrap--need to check into that)
|
||||
|
||||
Need to consider corner cases where a sound IRQ happens but no speaker toggle happened.
|
||||
|
||||
If (delta > SAMPLES_PER_FRAME) then
|
||||
|
||||
Here's the relevant cases:
|
||||
|
||||
delta < SAMPLES_PER_FRAME -> Change happened within this time frame, so change buffer
|
||||
frame came and went, no change -> fill buffer with last value
|
||||
How to detect: Have bool bufferWasTouched = true when ToggleSpeaker() is called.
|
||||
Clear bufferWasTouched each frame.
|
||||
|
||||
Two major cases here:
|
||||
|
||||
o Buffer is touched on current frame
|
||||
o Buffer is untouched on current frame
|
||||
|
||||
In the first case, it doesn't matter too much if the previous frame was touched or not,
|
||||
we don't really care except in finding the correct spot in the buffer to put our change
|
||||
in. In the second case, we need to tell the IRQ that nothing happened and to continue
|
||||
to output the same value.
|
||||
|
||||
SO: How to synchronize the regular frame buffer with the IRQ buffer?
|
||||
|
||||
What happens:
|
||||
Sound IRQ --> Every 1024 sample period (@ 44.1 KHz = 0.0232s)
|
||||
Emulation --> Render a frame --> 1/60 sec --> 735 samples
|
||||
--> sound buffer is filled
|
||||
|
||||
Since the emulation is faster than the SIRQ the sound buffer should fill up
|
||||
prior to dumping it to the sound card.
|
||||
|
||||
Problem is this: If silence happens for a long time then ToggleSpeaker is never
|
||||
called and the sound buffer has stale data; at least until soundBufferPos goes to
|
||||
zero and stays there...
|
||||
|
||||
BUT this should be handled correctly by toggling the speaker value *after* filling
|
||||
the sound buffer...
|
||||
|
||||
Still getting random clicks when running...
|
||||
(This may be due to the lock/unlock sound happening in ToggleSpeaker()...)
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -18,6 +18,6 @@
|
|||
void SoundInit(void);
|
||||
void SoundDone(void);
|
||||
void ToggleSpeaker(uint32 time);
|
||||
void HandleSoundAtFrameEdge(void);
|
||||
void AddToSoundTimeBase(uint32 cycles);
|
||||
|
||||
#endif // __SOUND_H__
|
||||
|
|
|
@ -2310,7 +2310,7 @@ if (dumpDis)
|
|||
regs.clock += CPUCycles[opcode];
|
||||
#ifdef __DEBUG__
|
||||
if (dumpDis)
|
||||
WriteLog(" [PC=%04X, SP=%04X, CC=%s%s-%s%s%s%s%s, A=%02X, X=%02X, Y=%02X]\n",
|
||||
WriteLog(" [PC=%04X, SP=%04X, CC=%s%s.%s%s%s%s%s, A=%02X, X=%02X, Y=%02X]\n",
|
||||
regs.pc, 0x0100 + regs.sp,
|
||||
(regs.cc & FLAG_N ? "N" : "-"), (regs.cc & FLAG_V ? "V" : "-"),
|
||||
(regs.cc & FLAG_B ? "B" : "-"), (regs.cc & FLAG_D ? "D" : "-"),
|
||||
|
|
Loading…
Reference in New Issue
Block a user