mirror of
https://github.com/mauiaaron/apple2.git
synced 2025-02-21 05:29:07 +00:00
Add more tests for save/restore feature
This commit is contained in:
parent
1be2c6fd27
commit
a417249691
@ -35,7 +35,7 @@
|
||||
|
||||
// [AppleWin-TC] From FUSE's sound.c module
|
||||
|
||||
#if !defined(APPLE2IX)
|
||||
#if 0 // !defined(APPLE2IX)
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include <windows.h>
|
||||
@ -50,6 +50,9 @@
|
||||
# include "common.h"
|
||||
# include "audio/AY8910.h"
|
||||
# include "audio/mockingboard.h" // For g_uTimer1IrqCount
|
||||
# if TESTING
|
||||
# include "greatest.h"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* The AY white noise RNG algorithm is based on info from MAME's ay8910.c -
|
||||
@ -1302,6 +1305,74 @@ static bool _loadState(StateHelper_s *helper, struct CAY8910 *_this) {
|
||||
|
||||
return loaded;
|
||||
}
|
||||
|
||||
# if TESTING
|
||||
int _testStateA2V2(struct CAY8910 *_this, uint8_t **exData) {
|
||||
|
||||
unsigned int *p32 = (unsigned int *)(*exData);
|
||||
|
||||
ASSERT(_this->ay_tone_tick[0] == *p32++);
|
||||
ASSERT(_this->ay_tone_tick[1] == *p32++);
|
||||
ASSERT(_this->ay_tone_tick[2] == *p32++);
|
||||
ASSERT(_this->ay_tone_high[0] == *p32++);
|
||||
ASSERT(_this->ay_tone_high[1] == *p32++);
|
||||
ASSERT(_this->ay_tone_high[2] == *p32++);
|
||||
|
||||
ASSERT(_this->ay_noise_tick == *p32++);
|
||||
ASSERT(_this->ay_tone_subcycles == *p32++);
|
||||
ASSERT(_this->ay_env_subcycles == *p32++);
|
||||
ASSERT(_this->ay_env_internal_tick == *p32++);
|
||||
ASSERT(_this->ay_env_tick == *p32++);
|
||||
ASSERT(_this->ay_tick_incr == *p32++);
|
||||
|
||||
ASSERT(_this->ay_tone_period[0] == *p32++);
|
||||
ASSERT(_this->ay_tone_period[1] == *p32++);
|
||||
ASSERT(_this->ay_tone_period[2] == *p32++);
|
||||
|
||||
ASSERT(_this->ay_noise_period == *p32++);
|
||||
ASSERT(_this->ay_env_period == *p32++);
|
||||
ASSERT(_this->rng == *p32++);
|
||||
ASSERT(_this->noise_toggle == *p32++);
|
||||
ASSERT(_this->env_first == *p32++);
|
||||
ASSERT(_this->env_rev == *p32++);
|
||||
ASSERT(_this->env_counter == *p32++);
|
||||
|
||||
// Registers
|
||||
uint8_t *p8 = (uint8_t *)p32;
|
||||
for (unsigned int i=0; i<16; i++) {
|
||||
ASSERT(_this->sound_ay_registers[i] == *p8++);
|
||||
}
|
||||
|
||||
p32 = (unsigned int *)p8;
|
||||
|
||||
int changeCount = _this->ay_change_count;
|
||||
ASSERT(changeCount == *p32++);
|
||||
ASSERT(changeCount >= 0);
|
||||
|
||||
p8 = (uint8_t *)p32;
|
||||
|
||||
if (changeCount) {
|
||||
for (int i=0; i<changeCount; i++) {
|
||||
unsigned long *pL = (unsigned long *)p8;
|
||||
ASSERT(_this->ay_change[i].tstates == *pL++);
|
||||
p8 = (uint8_t *)pL;
|
||||
|
||||
unsigned short *pS = (unsigned short *)p8;
|
||||
ASSERT(_this->ay_change[i].ofs == *pS++);
|
||||
p8 = (uint8_t *)pS;
|
||||
|
||||
ASSERT(_this->ay_change[i].reg == *p8++);
|
||||
ASSERT(_this->ay_change[i].val == *p8++);
|
||||
}
|
||||
}
|
||||
|
||||
*exData = p8;
|
||||
|
||||
PASS();
|
||||
}
|
||||
# endif
|
||||
|
||||
|
||||
#else
|
||||
void CAY8910::SaveSnapshot(YamlSaveHelper& yamlSaveHelper, std::string& suffix)
|
||||
{
|
||||
@ -1564,6 +1635,13 @@ bool _ay8910_loadState(StateHelper_s *helper, unsigned int chip) {
|
||||
assert(chip < MAX_8910);
|
||||
return _loadState(helper, &g_AY8910[chip]);
|
||||
}
|
||||
|
||||
# if TESTING
|
||||
int _ay8910_testAssertA2V2(unsigned int chip, uint8_t **exData) {
|
||||
return _testStateA2V2(&g_AY8910[chip], exData);
|
||||
}
|
||||
# endif
|
||||
|
||||
#else
|
||||
UINT AY8910_SaveSnapshot(YamlSaveHelper& yamlSaveHelper, UINT uChip, std::string& suffix)
|
||||
{
|
||||
|
@ -35,6 +35,9 @@ void AY8910UpdateSetCycles();
|
||||
#if 1 // APPLE2IX
|
||||
bool _ay8910_saveState(StateHelper_s *helper, unsigned int chip);
|
||||
bool _ay8910_loadState(StateHelper_s *helper, unsigned int chip);
|
||||
# if TESTING
|
||||
int _ay8910_testAssertA2V2(unsigned int chip, uint8_t **exData);
|
||||
# endif
|
||||
#else
|
||||
UINT AY8910_SaveSnapshot(class YamlSaveHelper& yamlSaveHelper, UINT uChip, std::string& suffix);
|
||||
UINT AY8910_LoadSnapshot(class YamlLoadHelper& yamlLoadHelper, UINT uChip, std::string& suffix);
|
||||
|
@ -114,6 +114,9 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
# if defined(__linux) && !defined(ANDROID)
|
||||
# include <sys/io.h>
|
||||
# endif
|
||||
# if TESTING
|
||||
# include "greatest.h"
|
||||
# endif
|
||||
|
||||
#if defined(FAILED)
|
||||
#undef FAILED
|
||||
@ -2885,7 +2888,83 @@ exit_load:
|
||||
return loaded;
|
||||
}
|
||||
|
||||
#else
|
||||
# if TESTING
|
||||
static int _sy6522_testAssertA2V2(SY6522 *sy6522, uint8_t **exData) {
|
||||
|
||||
uint8_t *expected = *exData;
|
||||
|
||||
ASSERT(sy6522->ORA == *expected++);
|
||||
ASSERT(sy6522->ORB == *expected++);
|
||||
ASSERT(sy6522->DDRA == *expected++);
|
||||
ASSERT(sy6522->DDRB == *expected++);
|
||||
|
||||
uint16_t *expected16 = (uint16_t *)expected;
|
||||
|
||||
ASSERT(sy6522->TIMER1_COUNTER.w == *expected16++);
|
||||
ASSERT(sy6522->TIMER1_LATCH.w == *expected16++);
|
||||
ASSERT(sy6522->TIMER2_COUNTER.w == *expected16++);
|
||||
ASSERT(sy6522->TIMER2_LATCH.w == *expected16++);
|
||||
|
||||
expected = (uint8_t *)expected16;
|
||||
|
||||
ASSERT(sy6522->SERIAL_SHIFT == *expected++);
|
||||
ASSERT(sy6522->ACR == *expected++);
|
||||
ASSERT(sy6522->PCR == *expected++);
|
||||
ASSERT(sy6522->IFR == *expected++);
|
||||
ASSERT(sy6522->IER == *expected++);
|
||||
|
||||
*exData = expected;
|
||||
|
||||
PASS();
|
||||
}
|
||||
|
||||
static int _ssi263_testAssertA2V2(SSI263A *ssi263, uint8_t **exData) {
|
||||
|
||||
uint8_t *expected = *exData;
|
||||
|
||||
ASSERT(ssi263->DurationPhoneme == *expected++);
|
||||
ASSERT(ssi263->Inflection == *expected++);
|
||||
ASSERT(ssi263->RateInflection == *expected++);
|
||||
ASSERT(ssi263->CtrlArtAmp == *expected++);
|
||||
ASSERT(ssi263->FilterFreq == *expected++);
|
||||
ASSERT(ssi263->CurrentMode == *expected++);
|
||||
|
||||
*exData = expected;
|
||||
|
||||
PASS();
|
||||
}
|
||||
|
||||
int mb_testAssertA2V2(uint8_t *exData, size_t dataSiz) {
|
||||
|
||||
uint8_t *exStart = exData;
|
||||
|
||||
for (unsigned int i=0; i<NUM_DEVS_PER_MB; i++) {
|
||||
for (unsigned int j=0; j<NUM_MB; j++) {
|
||||
unsigned int idx = (i<<1) + j;
|
||||
SY6522_AY8910 *mb = &g_MB[idx];
|
||||
|
||||
_sy6522_testAssertA2V2(&(mb->sy6522), &exData);
|
||||
_ay8910_testAssertA2V2(idx, &exData);
|
||||
_ssi263_testAssertA2V2(&(mb->SpeechChip), &exData);
|
||||
|
||||
ASSERT(mb->nAYCurrentRegister == *exData);
|
||||
++exData;
|
||||
|
||||
// TIMER1 IRQ
|
||||
// TIMER2 IRQ
|
||||
// SPEECH IRQ
|
||||
|
||||
++mb;
|
||||
}
|
||||
}
|
||||
|
||||
ASSERT(exData - exStart == dataSiz);
|
||||
|
||||
PASS();
|
||||
}
|
||||
# endif // TESTING
|
||||
|
||||
#else // !APPLE2IX
|
||||
|
||||
static UINT DoWriteFile(const HANDLE hFile, const void* const pData, const UINT Length)
|
||||
{
|
||||
|
@ -117,6 +117,9 @@ void MB_SetVolume(unsigned long dwVolume, unsigned long dwVolumeMax);
|
||||
#if 1 // APPLE2IX
|
||||
bool mb_saveState(StateHelper_s *helper);
|
||||
bool mb_loadState(StateHelper_s *helper);
|
||||
# if TESTING
|
||||
int mb_testAssertA2V2(uint8_t *exData, size_t dataSiz);
|
||||
# endif
|
||||
#else
|
||||
void MB_GetSnapshot_v1(struct SS_CARD_MOCKINGBOARD_v1* const pSS, const DWORD dwSlot); // For debugger
|
||||
int MB_SetSnapshot_v1(const struct SS_CARD_MOCKINGBOARD_v1* const pSS, const DWORD dwSlot);
|
||||
|
13724
src/test/a2v2-good1.h
Normal file
13724
src/test/a2v2-good1.h
Normal file
File diff suppressed because it is too large
Load Diff
13666
src/test/a2vm-good1.h
Normal file
13666
src/test/a2vm-good1.h
Normal file
File diff suppressed because it is too large
Load Diff
@ -42,12 +42,14 @@ static void testui_teardown(void *arg) {
|
||||
# define BLANK_TRACK_WIDTH 6040
|
||||
#endif
|
||||
|
||||
extern uint8_t (*iie_read_peripheral_card)(uint16_t);
|
||||
|
||||
static int _assert_blank_boot(void) {
|
||||
// Disk6 ...
|
||||
ASSERT(disk6.motor_off == 1);
|
||||
ASSERT(disk6.drive == 0);
|
||||
ASSERT(disk6.ddrw == 0);
|
||||
ASSERT(disk6.disk_byte == 0x0);
|
||||
ASSERT(disk6.disk_byte == 0xAA);
|
||||
extern int stepper_phases;
|
||||
ASSERT(stepper_phases == 0x0);
|
||||
ASSERT(disk6.disk[0].is_protected);
|
||||
@ -65,7 +67,7 @@ static int _assert_blank_boot(void) {
|
||||
ASSERT(!disk6.disk[0].track_dirty);
|
||||
extern int skew_table_6_do[16];
|
||||
ASSERT(disk6.disk[0].skew_table == skew_table_6_do);
|
||||
|
||||
|
||||
// VM ...
|
||||
ASSERT(softswitches == 0x000140d1);
|
||||
ASSERT_SHA_BIN("97AADDDF5D20B793C4558A8928227F0B52565A98", apple_ii_64k[0], /*len:*/sizeof(apple_ii_64k));
|
||||
@ -79,12 +81,12 @@ static int _assert_blank_boot(void) {
|
||||
ASSERT(base_hgrwrt == apple_ii_64k[0]);
|
||||
ASSERT(base_stackzp == apple_ii_64k[0]);
|
||||
ASSERT(base_c3rom == apple_ii_64k[1]);
|
||||
ASSERT(base_cxrom == apple_ii_64k[0]);
|
||||
ASSERT(base_cxrom == (void *)&iie_read_peripheral_card);
|
||||
ASSERT(base_d000_rd == apple_ii_64k[0]);
|
||||
ASSERT(base_d000_wrt == language_banks[0] - 0xD000);
|
||||
ASSERT(base_e000_rd == apple_ii_64k[0]);
|
||||
ASSERT(base_e000_wrt == language_card[0] - 0xE000);
|
||||
|
||||
|
||||
// CPU ...
|
||||
ASSERT(cpu65_pc == 0xE783);
|
||||
ASSERT(cpu65_ea == 0x1F33);
|
||||
@ -93,7 +95,7 @@ static int _assert_blank_boot(void) {
|
||||
ASSERT(cpu65_x == 0xFF);
|
||||
ASSERT(cpu65_y == 0x00);
|
||||
ASSERT(cpu65_sp == 0xF6);
|
||||
|
||||
|
||||
PASS();
|
||||
}
|
||||
|
||||
@ -103,7 +105,7 @@ TEST test_save_state_1() {
|
||||
BOOT_TO_DOS();
|
||||
|
||||
_assert_blank_boot();
|
||||
|
||||
|
||||
char *savFile = NULL;
|
||||
ASPRINTF(&savFile, "%s/emulator-test.state", HOMEDIR);
|
||||
|
||||
@ -116,6 +118,13 @@ TEST test_save_state_1() {
|
||||
|
||||
TEST test_load_state_1() {
|
||||
|
||||
// ensure stable test
|
||||
disk6_eject(0);
|
||||
c_debugger_set_timeout(1);
|
||||
c_debugger_clear_watchpoints();
|
||||
c_debugger_go();
|
||||
c_debugger_set_timeout(0);
|
||||
|
||||
char *savFile = NULL;
|
||||
ASPRINTF(&savFile, "%s/emulator-test.state", HOMEDIR);
|
||||
|
||||
@ -133,15 +142,679 @@ TEST test_load_state_1() {
|
||||
PASS();
|
||||
}
|
||||
|
||||
TEST test_load_A2VM_1() {
|
||||
TEST test_load_A2VM_good1() {
|
||||
|
||||
// test A2VM original format
|
||||
// ensure stable test
|
||||
disk6_eject(0);
|
||||
c_debugger_set_timeout(1);
|
||||
c_debugger_clear_watchpoints();
|
||||
c_debugger_go();
|
||||
c_debugger_set_timeout(0);
|
||||
|
||||
////#include "test/a2vm-sample.h"
|
||||
// write saved state to disk
|
||||
|
||||
#warning save the binary data to state file, then load and assert various stuff-n-things
|
||||
#include "test/a2vm-good1.h"
|
||||
|
||||
FAIL();
|
||||
const char *homedir = HOMEDIR;
|
||||
char *savData = NULL;
|
||||
ASPRINTF(&savData, "%s/a2_emul_a2vm.dat", homedir);
|
||||
if (savData) {
|
||||
unlink(savData);
|
||||
}
|
||||
|
||||
FILE *fp = fopen(savData, "w");
|
||||
ASSERT(fp);
|
||||
size_t dataSiz = sizeof(data);
|
||||
if (fwrite(data, 1, dataSiz, fp) != dataSiz) {
|
||||
ASSERT(false);
|
||||
}
|
||||
fflush(fp); fclose(fp); fp = NULL;
|
||||
|
||||
// load state and assert
|
||||
|
||||
bool ret = emulator_loadState(savData);
|
||||
ASSERT(ret);
|
||||
|
||||
// ASSERT framebuffer matches expected
|
||||
ASSERT_SHA("9C654FEF2A672E16D89ED2FB80C593CD2005A026");
|
||||
|
||||
// Disk6 ...
|
||||
ASSERT(disk6.motor_off == 1);
|
||||
ASSERT(disk6.drive == 0);
|
||||
ASSERT(disk6.ddrw == 0);
|
||||
ASSERT(disk6.disk_byte == 0xAA);
|
||||
extern int stepper_phases;
|
||||
ASSERT(stepper_phases == 0x0);
|
||||
ASSERT(disk6.disk[0].is_protected);
|
||||
const char *file_name = strrchr(disk6.disk[0].file_name, '/');
|
||||
ASSERT(strcmp(file_name, "/testdisplay1.dsk") == 0);
|
||||
ASSERT(disk6.disk[0].phase == 34);
|
||||
ASSERT(disk6.disk[0].run_byte == 2000);
|
||||
ASSERT(disk6.disk[0].fd > 0);
|
||||
ASSERT(disk6.disk[0].mmap_image != 0);
|
||||
ASSERT(disk6.disk[0].mmap_image != MAP_FAILED);
|
||||
ASSERT(disk6.disk[0].whole_len == 143360);
|
||||
ASSERT(disk6.disk[0].whole_image != NULL);
|
||||
ASSERT(disk6.disk[0].track_width == BLANK_TRACK_WIDTH);
|
||||
ASSERT(!disk6.disk[0].nibblized);
|
||||
ASSERT(!disk6.disk[0].track_dirty);
|
||||
extern int skew_table_6_do[16];
|
||||
ASSERT(disk6.disk[0].skew_table == skew_table_6_do);
|
||||
|
||||
// VM ...
|
||||
ASSERT(softswitches == 0x000343d1);
|
||||
ASSERT_SHA_BIN("2E3C6163EEAA817B02B00766B9E118D3197D16AF", apple_ii_64k[0], /*len:*/sizeof(apple_ii_64k));
|
||||
ASSERT_SHA_BIN("2C82E33E964936187CA1DABF71AE6148916BD131", language_card[0], /*len:*/sizeof(language_card));
|
||||
ASSERT_SHA_BIN("36F1699537024EC6017A22641FF0EC277AFFD49D", language_banks[0], /*len:*/sizeof(language_banks));
|
||||
ASSERT(base_ramrd == apple_ii_64k[0]);
|
||||
ASSERT(base_ramwrt == apple_ii_64k[0]);
|
||||
ASSERT(base_textrd == apple_ii_64k[0]);
|
||||
ASSERT(base_textwrt == apple_ii_64k[0]);
|
||||
ASSERT(base_hgrrd == apple_ii_64k[0]);
|
||||
ASSERT(base_hgrwrt == apple_ii_64k[0]);
|
||||
ASSERT(base_stackzp == apple_ii_64k[0]);
|
||||
ASSERT(base_c3rom == apple_ii_64k[1]);
|
||||
ASSERT(base_cxrom == (void *)&iie_read_peripheral_card);
|
||||
ASSERT(base_d000_rd == apple_ii_64k[0]);
|
||||
ASSERT(base_d000_wrt == language_banks[0] - 0xD000);
|
||||
ASSERT(base_e000_rd == apple_ii_64k[0]);
|
||||
ASSERT(base_e000_wrt == language_card[0] - 0xE000);
|
||||
|
||||
// CPU ...
|
||||
ASSERT(cpu65_pc == 0xC83D);
|
||||
ASSERT(cpu65_ea == 0x004E);
|
||||
ASSERT(cpu65_a == 0x0D);
|
||||
ASSERT(cpu65_f == 0x35);
|
||||
ASSERT(cpu65_x == 0x09);
|
||||
ASSERT(cpu65_y == 0x01);
|
||||
ASSERT(cpu65_sp == 0xEA);
|
||||
|
||||
unlink(savData);
|
||||
FREE(savData);
|
||||
|
||||
PASS();
|
||||
}
|
||||
|
||||
TEST test_load_A2V2_good1() {
|
||||
|
||||
// ensure stable test
|
||||
disk6_eject(0);
|
||||
c_debugger_set_timeout(1);
|
||||
c_debugger_clear_watchpoints();
|
||||
c_debugger_go();
|
||||
c_debugger_set_timeout(0);
|
||||
|
||||
// write saved state to disk
|
||||
|
||||
#include "test/a2v2-good1.h"
|
||||
|
||||
const char *homedir = HOMEDIR;
|
||||
char *savData = NULL;
|
||||
ASPRINTF(&savData, "%s/a2_emul_a2v2.dat", homedir);
|
||||
if (savData) {
|
||||
unlink(savData);
|
||||
}
|
||||
|
||||
FILE *fp = fopen(savData, "w");
|
||||
ASSERT(fp);
|
||||
size_t dataSiz = sizeof(data);
|
||||
if (fwrite(data, 1, dataSiz, fp) != dataSiz) {
|
||||
ASSERT(false);
|
||||
}
|
||||
fflush(fp); fclose(fp); fp = NULL;
|
||||
|
||||
// load state and assert
|
||||
|
||||
bool ret = emulator_loadState(savData);
|
||||
ASSERT(ret);
|
||||
|
||||
// ASSERT framebuffer matches expected
|
||||
ASSERT_SHA("EE8AF0ADB3AF477A713B9E5FD02D655CF8371F7B");
|
||||
|
||||
// Disk6 ...
|
||||
ASSERT(disk6.motor_off == 1);
|
||||
ASSERT(disk6.drive == 0);
|
||||
ASSERT(disk6.ddrw == 0);
|
||||
ASSERT(disk6.disk_byte == 0x96);
|
||||
extern int stepper_phases;
|
||||
ASSERT(stepper_phases == 0x0);
|
||||
ASSERT(disk6.disk[0].is_protected);
|
||||
const char *file_name = strrchr(disk6.disk[0].file_name, '/');
|
||||
ASSERT(strcmp(file_name, "/NSCT.dsk") == 0);
|
||||
ASSERT(disk6.disk[0].phase == 26);
|
||||
ASSERT(disk6.disk[0].run_byte == 5562);
|
||||
ASSERT(disk6.disk[0].fd > 0);
|
||||
ASSERT(disk6.disk[0].mmap_image != 0);
|
||||
ASSERT(disk6.disk[0].mmap_image != MAP_FAILED);
|
||||
ASSERT(disk6.disk[0].whole_len == 143360);
|
||||
ASSERT(disk6.disk[0].whole_image != NULL);
|
||||
ASSERT(disk6.disk[0].track_width == BLANK_TRACK_WIDTH);
|
||||
ASSERT(!disk6.disk[0].nibblized);
|
||||
ASSERT(!disk6.disk[0].track_dirty);
|
||||
extern int skew_table_6_do[16];
|
||||
ASSERT(disk6.disk[0].skew_table == skew_table_6_do);
|
||||
|
||||
// VM ...
|
||||
ASSERT(softswitches == 0x000140f5);
|
||||
ASSERT_SHA_BIN("0AEA333FBDAE26959719E3BDD6AEFA408784F614", apple_ii_64k[0], /*len:*/sizeof(apple_ii_64k));
|
||||
ASSERT_SHA_BIN("6D54FC0A19EC396113863C15D607EAE55F369C0D", language_card[0], /*len:*/sizeof(language_card));
|
||||
ASSERT_SHA_BIN("36F1699537024EC6017A22641FF0EC277AFFD49D", language_banks[0], /*len:*/sizeof(language_banks));
|
||||
ASSERT(base_ramrd == apple_ii_64k[0]);
|
||||
ASSERT(base_ramwrt == apple_ii_64k[0]);
|
||||
ASSERT(base_textrd == apple_ii_64k[0]);
|
||||
ASSERT(base_textwrt == apple_ii_64k[0]);
|
||||
ASSERT(base_hgrrd == apple_ii_64k[0]);
|
||||
ASSERT(base_hgrwrt == apple_ii_64k[0]);
|
||||
ASSERT(base_stackzp == apple_ii_64k[0]);
|
||||
ASSERT(base_c3rom == apple_ii_64k[1]);
|
||||
ASSERT(base_cxrom == (void *)&iie_read_peripheral_card);
|
||||
ASSERT(base_d000_rd == language_banks[0]-0xD000);
|
||||
ASSERT(base_d000_wrt == language_banks[0]-0xD000);
|
||||
ASSERT(base_e000_rd == language_card[0]-0xE000);
|
||||
ASSERT(base_e000_wrt == language_card[0]-0xE000);
|
||||
|
||||
// CPU ...
|
||||
ASSERT(cpu65_pc == 0xF30F);
|
||||
ASSERT(cpu65_ea == 0xF30E);
|
||||
ASSERT(cpu65_a == 0x01);
|
||||
ASSERT(cpu65_f == 0x30);
|
||||
ASSERT(cpu65_x == 0x0D);
|
||||
ASSERT(cpu65_y == 0x03);
|
||||
ASSERT(cpu65_sp == 0xFC);
|
||||
|
||||
// Timing ...
|
||||
long scaleFactor = (long)(cpu_scale_factor * 100.);
|
||||
ASSERT(scaleFactor = 100);
|
||||
long altScaleFactor = (long)(cpu_altscale_factor * 100.);
|
||||
ASSERT(altScaleFactor = 200);
|
||||
ASSERT(alt_speed_enabled);
|
||||
|
||||
// Mockingboard ...
|
||||
{
|
||||
uint8_t *exData = MALLOC(1024);
|
||||
uint8_t *p8 = exData;
|
||||
uint16_t *p16 = 0;
|
||||
unsigned int *p32 = 0;
|
||||
unsigned int changeCount = 0;
|
||||
unsigned long *pL = 0;
|
||||
unsigned short *pS = 0;
|
||||
|
||||
// ----------------------------------------------------------------- 00
|
||||
|
||||
// --------------- SY6522
|
||||
|
||||
*p8++ = 0x00; // ORA
|
||||
*p8++ = 0x04; // ORB
|
||||
*p8++ = 0xFF; // DDRA
|
||||
*p8++ = 0x07; // DDRB
|
||||
|
||||
p16 = (uint16_t *)p8;
|
||||
|
||||
*p16++ = 0x02EC; // TIMER1_COUNTER
|
||||
*p16++ = 0x4FBA; // TIMER1_LATCH
|
||||
*p16++ = 0xDFDF; // TIMER2_COUNTER
|
||||
*p16++ = 0x0000; // TIMER2_LATCH
|
||||
|
||||
p8 = (uint8_t *)p16;
|
||||
|
||||
*p8++ = 0x00; // SERIAL_SHIFT
|
||||
*p8++ = 0x40; // ACR
|
||||
*p8++ = 0x00; // PCR
|
||||
*p8++ = 0x00; // IFR
|
||||
*p8++ = 0x40; // IER
|
||||
|
||||
// --------------- AY8910
|
||||
|
||||
p32 = (unsigned int *)p8;
|
||||
|
||||
*p32++ = (unsigned int)105; // ay_tone_tick[0]
|
||||
*p32++ = (unsigned int)35; // ay_tone_tick[1]
|
||||
*p32++ = (unsigned int)43; // ay_tone_tick[2]
|
||||
*p32++ = (unsigned int)1; // ay_tone_high[0]
|
||||
*p32++ = (unsigned int)0; // ay_tone_high[1]
|
||||
*p32++ = (unsigned int)0; // ay_tone_high[2]
|
||||
|
||||
*p32++ = (unsigned int)1; // ay_noise_tick
|
||||
*p32++ = (unsigned int)152756; // ay_tone_subcycles
|
||||
*p32++ = (unsigned int)677044; // ay_env_subcycles
|
||||
*p32++ = (unsigned int)5; // ay_env_internal_tick
|
||||
*p32++ = (unsigned int)12; // ay_env_tick
|
||||
*p32++ = (unsigned int)3033035; // ay_tick_incr
|
||||
|
||||
*p32++ = (unsigned int)162; // ay_tone_period[0]
|
||||
*p32++ = (unsigned int)460; // ay_tone_period[1]
|
||||
*p32++ = (unsigned int)60; // ay_tone_period[2]
|
||||
|
||||
*p32++ = (unsigned int)5; // ay_noise_period
|
||||
*p32++ = (unsigned int)15; // ay_env_period
|
||||
*p32++ = (unsigned int)71674; // rng
|
||||
*p32++ = (unsigned int)1; // noise_toggle
|
||||
*p32++ = (unsigned int)0; // env_first
|
||||
*p32++ = (unsigned int)0; // env_rev
|
||||
*p32++ = (unsigned int)0; // env_counter
|
||||
|
||||
p8 = (uint8_t *)p32;
|
||||
*p8++ = 0xA2; // sound_ay_registers[0]
|
||||
*p8++ = 0x00; // sound_ay_registers[1]
|
||||
*p8++ = 0xCC; // sound_ay_registers[2]
|
||||
*p8++ = 0x01; // sound_ay_registers[3]
|
||||
*p8++ = 0x3C; // sound_ay_registers[4]
|
||||
*p8++ = 0x00; // sound_ay_registers[5]
|
||||
*p8++ = 0x05; // sound_ay_registers[6]
|
||||
*p8++ = 0xF8; // sound_ay_registers[7]
|
||||
*p8++ = 0x0D; // sound_ay_registers[8]
|
||||
*p8++ = 0x0E; // sound_ay_registers[9]
|
||||
*p8++ = 0x04; // sound_ay_registers[10]
|
||||
*p8++ = 0x0F; // sound_ay_registers[11]
|
||||
*p8++ = 0x00; // sound_ay_registers[12]
|
||||
*p8++ = 0x00; // sound_ay_registers[13]
|
||||
*p8++ = 0x00; // sound_ay_registers[14]
|
||||
*p8++ = 0x00; // sound_ay_registers[15]
|
||||
|
||||
p32 = (unsigned int *)p8;
|
||||
changeCount = 13;
|
||||
*p32++ = changeCount; // ay_change_count
|
||||
|
||||
pL = (unsigned long *)p32;
|
||||
*pL++ = 102; // ay_change[0].tstates
|
||||
pS = (uint16_t *)pL;
|
||||
*pS++ = 2; // ay_change[0].ofs
|
||||
p8 = (uint8_t *)pS;
|
||||
*p8++ = 0; // ay_change[0].reg
|
||||
*p8++ = 102; // ay_change[0].val
|
||||
|
||||
pL = (unsigned long *)p8;
|
||||
*pL++ = 159; // ay_change[1].tstates
|
||||
pS = (uint16_t *)pL;
|
||||
*pS++ = 3; // ay_change[1].ofs
|
||||
p8 = (uint8_t *)pS;
|
||||
*p8++ = 1; // ay_change[1].reg
|
||||
*p8++ = 0; // ay_change[1].val
|
||||
|
||||
pL = (unsigned long *)p8;
|
||||
*pL++ = 216; // ay_change[2].tstates
|
||||
pS = (uint16_t *)pL;
|
||||
*pS++ = 4; // ay_change[2].ofs
|
||||
p8 = (uint8_t *)pS;
|
||||
*p8++ = 2; // ay_change[2].reg
|
||||
*p8++ = 102; // ay_change[2].val
|
||||
|
||||
pL = (unsigned long *)p8;
|
||||
*pL++ = 273; // ay_change[3].tstates
|
||||
pS = (uint16_t *)pL;
|
||||
*pS++ = 5; // ay_change[3].ofs
|
||||
p8 = (uint8_t *)pS;
|
||||
*p8++ = 3; // ay_change[3].reg
|
||||
*p8++ = 2; // ay_change[3].val
|
||||
|
||||
pL = (unsigned long *)p8;
|
||||
*pL++ = 330; // ay_change[4].tstates
|
||||
pS = (uint16_t *)pL;
|
||||
*pS++ = 7; // ay_change[4].ofs
|
||||
p8 = (uint8_t *)pS;
|
||||
*p8++ = 4; // ay_change[4].reg
|
||||
*p8++ = 60; // ay_change[4].val
|
||||
|
||||
pL = (unsigned long *)p8;
|
||||
*pL++ = 387; // ay_change[5].tstates
|
||||
pS = (uint16_t *)pL;
|
||||
*pS++ = 8; // ay_change[5].ofs
|
||||
p8 = (uint8_t *)pS;
|
||||
*p8++ = 5; // ay_change[5].reg
|
||||
*p8++ = 0; // ay_change[5].val
|
||||
|
||||
pL = (unsigned long *)p8;
|
||||
*pL++ = 444; // ay_change[6].tstates
|
||||
pS = (uint16_t *)pL;
|
||||
*pS++ = 9; // ay_change[6].ofs
|
||||
p8 = (uint8_t *)pS;
|
||||
*p8++ = 6; // ay_change[6].reg
|
||||
*p8++ = 5; // ay_change[6].val
|
||||
|
||||
pL = (unsigned long *)p8;
|
||||
*pL++ = 501; // ay_change[7].tstates
|
||||
pS = (uint16_t *)pL;
|
||||
*pS++ = 10; // ay_change[7].ofs
|
||||
p8 = (uint8_t *)pS;
|
||||
*p8++ = 7; // ay_change[7].reg
|
||||
*p8++ = 248; // ay_change[7].val
|
||||
|
||||
pL = (unsigned long *)p8;
|
||||
*pL++ = 563; // ay_change[8].tstates
|
||||
pS = (uint16_t *)pL;
|
||||
*pS++ = 12; // ay_change[8].ofs
|
||||
p8 = (uint8_t *)pS;
|
||||
*p8++ = 8; // ay_change[8].reg
|
||||
*p8++ = 13; // ay_change[8].val
|
||||
|
||||
pL = (unsigned long *)p8;
|
||||
*pL++ = 621; // ay_change[9].tstates
|
||||
pS = (uint16_t *)pL;
|
||||
*pS++ = 13; // ay_change[9].ofs
|
||||
p8 = (uint8_t *)pS;
|
||||
*p8++ = 9; // ay_change[9].reg
|
||||
*p8++ = 14; // ay_change[9].val
|
||||
|
||||
pL = (unsigned long *)p8;
|
||||
*pL++ = 679; // ay_change[10].tstates
|
||||
pS = (uint16_t *)pL;
|
||||
*pS++ = 14; // ay_change[10].ofs
|
||||
p8 = (uint8_t *)pS;
|
||||
*p8++ = 10; // ay_change[10].reg
|
||||
*p8++ = 3; // ay_change[10].val
|
||||
|
||||
pL = (unsigned long *)p8;
|
||||
*pL++ = 731; // ay_change[11].tstates
|
||||
pS = (uint16_t *)pL;
|
||||
*pS++ = 15; // ay_change[11].ofs
|
||||
p8 = (uint8_t *)pS;
|
||||
*p8++ = 11; // ay_change[11].reg
|
||||
*p8++ = 15; // ay_change[11].val
|
||||
|
||||
pL = (unsigned long *)p8;
|
||||
*pL++ = 788; // ay_change[12].tstates
|
||||
pS = (uint16_t *)pL;
|
||||
*pS++ = 17; // ay_change[12].ofs
|
||||
p8 = (uint8_t *)pS;
|
||||
*p8++ = 12; // ay_change[12].reg
|
||||
*p8++ = 0; // ay_change[12].val
|
||||
|
||||
// --------------- SSI263
|
||||
|
||||
*p8++ = 0x00; // DurationPhoneme
|
||||
*p8++ = 0x00; // Inflection
|
||||
*p8++ = 0x00; // RateInflection
|
||||
*p8++ = 0x00; // CtrlArtAmp
|
||||
*p8++ = 0x00; // FilterFreq
|
||||
*p8++ = 0x00; // CurrentMode
|
||||
|
||||
// ---------------
|
||||
|
||||
*p8++ = 0x0C; // nAYCurrentRegister
|
||||
|
||||
// ----------------------------------------------------------------- 01
|
||||
|
||||
// --------------- SY6522
|
||||
|
||||
*p8++ = 0x00; // ORA
|
||||
*p8++ = 0x04; // ORB
|
||||
*p8++ = 0xFF; // DDRA
|
||||
*p8++ = 0x07; // DDRB
|
||||
|
||||
p16 = (uint16_t *)p8;
|
||||
|
||||
*p16++ = 0xDFDF; // TIMER1_COUNTER
|
||||
*p16++ = 0x0000; // TIMER1_LATCH
|
||||
*p16++ = 0xDFDF; // TIMER2_COUNTER
|
||||
*p16++ = 0x0000; // TIMER2_LATCH
|
||||
|
||||
p8 = (uint8_t *)p16;
|
||||
|
||||
*p8++ = 0x00; // SERIAL_SHIFT
|
||||
*p8++ = 0x00; // ACR
|
||||
*p8++ = 0x00; // PCR
|
||||
*p8++ = 0x00; // IFR
|
||||
*p8++ = 0x00; // IER
|
||||
|
||||
// --------------- AY8910
|
||||
|
||||
p32 = (unsigned int *)p8;
|
||||
|
||||
*p32++ = (unsigned int)17; // ay_tone_tick[0]
|
||||
*p32++ = (unsigned int)416; // ay_tone_tick[1]
|
||||
*p32++ = (unsigned int)27; // ay_tone_tick[2]
|
||||
*p32++ = (unsigned int)1; // ay_tone_high[0]
|
||||
*p32++ = (unsigned int)0; // ay_tone_high[1]
|
||||
*p32++ = (unsigned int)0; // ay_tone_high[2]
|
||||
|
||||
*p32++ = (unsigned int)0; // ay_noise_tick
|
||||
*p32++ = (unsigned int)152756; // ay_tone_subcycles
|
||||
*p32++ = (unsigned int)677044; // ay_env_subcycles
|
||||
*p32++ = (unsigned int)10; // ay_env_internal_tick
|
||||
*p32++ = (unsigned int)13; // ay_env_tick
|
||||
*p32++ = (unsigned int)3033035; // ay_tick_incr
|
||||
|
||||
*p32++ = (unsigned int)121; // ay_tone_period[0]
|
||||
*p32++ = (unsigned int)547; // ay_tone_period[1]
|
||||
*p32++ = (unsigned int)60; // ay_tone_period[2]
|
||||
|
||||
*p32++ = (unsigned int)5; // ay_noise_period
|
||||
*p32++ = (unsigned int)15; // ay_env_period
|
||||
*p32++ = (unsigned int)55289; // rng
|
||||
*p32++ = (unsigned int)0; // noise_toggle
|
||||
*p32++ = (unsigned int)0; // env_first
|
||||
*p32++ = (unsigned int)0; // env_rev
|
||||
*p32++ = (unsigned int)0; // env_counter
|
||||
|
||||
p8 = (uint8_t *)p32;
|
||||
*p8++ = 0x79; // sound_ay_registers[0]
|
||||
*p8++ = 0x00; // sound_ay_registers[1]
|
||||
*p8++ = 0x23; // sound_ay_registers[2]
|
||||
*p8++ = 0x02; // sound_ay_registers[3]
|
||||
*p8++ = 0x3C; // sound_ay_registers[4]
|
||||
*p8++ = 0x00; // sound_ay_registers[5]
|
||||
*p8++ = 0x05; // sound_ay_registers[6]
|
||||
*p8++ = 0xF8; // sound_ay_registers[7]
|
||||
*p8++ = 0x0D; // sound_ay_registers[8]
|
||||
*p8++ = 0x0E; // sound_ay_registers[9]
|
||||
*p8++ = 0x04; // sound_ay_registers[10]
|
||||
*p8++ = 0x0F; // sound_ay_registers[11]
|
||||
*p8++ = 0x00; // sound_ay_registers[12]
|
||||
*p8++ = 0x00; // sound_ay_registers[13]
|
||||
*p8++ = 0x00; // sound_ay_registers[14]
|
||||
*p8++ = 0x00; // sound_ay_registers[15]
|
||||
|
||||
p32 = (unsigned int *)p8;
|
||||
changeCount = 0;
|
||||
*p32++ = changeCount; // ay_change_count
|
||||
p8 = (uint8_t *)p32;
|
||||
|
||||
// --------------- SSI263
|
||||
|
||||
*p8++ = 0x00; // DurationPhoneme
|
||||
*p8++ = 0x00; // Inflection
|
||||
*p8++ = 0x00; // RateInflection
|
||||
*p8++ = 0x00; // CtrlArtAmp
|
||||
*p8++ = 0x00; // FilterFreq
|
||||
*p8++ = 0x00; // CurrentMode
|
||||
|
||||
// ---------------
|
||||
|
||||
*p8++ = 0x0C; // nAYCurrentRegister
|
||||
|
||||
// ----------------------------------------------------------------- 02
|
||||
|
||||
// --------------- SY6522
|
||||
|
||||
*p8++ = 0x00; // ORA
|
||||
*p8++ = 0x00; // ORB
|
||||
*p8++ = 0x00; // DDRA
|
||||
*p8++ = 0x00; // DDRB
|
||||
|
||||
p16 = (uint16_t *)p8;
|
||||
|
||||
*p16++ = 0xDFDF; // TIMER1_COUNTER
|
||||
*p16++ = 0x0000; // TIMER1_LATCH
|
||||
*p16++ = 0xDFDF; // TIMER2_COUNTER
|
||||
*p16++ = 0x0000; // TIMER2_LATCH
|
||||
|
||||
p8 = (uint8_t *)p16;
|
||||
|
||||
*p8++ = 0x00; // SERIAL_SHIFT
|
||||
*p8++ = 0x00; // ACR
|
||||
*p8++ = 0x00; // PCR
|
||||
*p8++ = 0x00; // IFR
|
||||
*p8++ = 0x00; // IER
|
||||
|
||||
// --------------- AY8910
|
||||
|
||||
p32 = (unsigned int *)p8;
|
||||
|
||||
*p32++ = (unsigned int)0; // ay_tone_tick[0]
|
||||
*p32++ = (unsigned int)0; // ay_tone_tick[1]
|
||||
*p32++ = (unsigned int)0; // ay_tone_tick[2]
|
||||
*p32++ = (unsigned int)1; // ay_tone_high[0]
|
||||
*p32++ = (unsigned int)1; // ay_tone_high[1]
|
||||
*p32++ = (unsigned int)1; // ay_tone_high[2]
|
||||
|
||||
*p32++ = (unsigned int)3529473; // ay_noise_tick
|
||||
*p32++ = (unsigned int)234404; // ay_tone_subcycles
|
||||
*p32++ = (unsigned int)758692; // ay_env_subcycles
|
||||
*p32++ = (unsigned int)1; // ay_env_internal_tick
|
||||
*p32++ = (unsigned int)3529473; // ay_env_tick
|
||||
*p32++ = (unsigned int)3033035; // ay_tick_incr
|
||||
|
||||
*p32++ = (unsigned int)1; // ay_tone_period[0]
|
||||
*p32++ = (unsigned int)1; // ay_tone_period[1]
|
||||
*p32++ = (unsigned int)1; // ay_tone_period[2]
|
||||
|
||||
*p32++ = (unsigned int)0; // ay_noise_period
|
||||
*p32++ = (unsigned int)0; // ay_env_period
|
||||
*p32++ = (unsigned int)71376; // rng
|
||||
*p32++ = (unsigned int)1; // noise_toggle
|
||||
*p32++ = (unsigned int)0; // env_first
|
||||
*p32++ = (unsigned int)0; // env_rev
|
||||
*p32++ = (unsigned int)0; // env_counter
|
||||
|
||||
p8 = (uint8_t *)p32;
|
||||
*p8++ = 0x00; // sound_ay_registers[0]
|
||||
*p8++ = 0x00; // sound_ay_registers[1]
|
||||
*p8++ = 0x00; // sound_ay_registers[2]
|
||||
*p8++ = 0x00; // sound_ay_registers[3]
|
||||
*p8++ = 0x00; // sound_ay_registers[4]
|
||||
*p8++ = 0x00; // sound_ay_registers[5]
|
||||
*p8++ = 0x00; // sound_ay_registers[6]
|
||||
*p8++ = 0x00; // sound_ay_registers[7]
|
||||
*p8++ = 0x00; // sound_ay_registers[8]
|
||||
*p8++ = 0x00; // sound_ay_registers[9]
|
||||
*p8++ = 0x00; // sound_ay_registers[10]
|
||||
*p8++ = 0x00; // sound_ay_registers[11]
|
||||
*p8++ = 0x00; // sound_ay_registers[12]
|
||||
*p8++ = 0x00; // sound_ay_registers[13]
|
||||
*p8++ = 0x00; // sound_ay_registers[14]
|
||||
*p8++ = 0x00; // sound_ay_registers[15]
|
||||
|
||||
p32 = (unsigned int *)p8;
|
||||
changeCount = 0;
|
||||
*p32++ = changeCount; // ay_change_count
|
||||
p8 = (uint8_t *)p32;
|
||||
|
||||
// --------------- SSI263
|
||||
|
||||
*p8++ = 0x00; // DurationPhoneme
|
||||
*p8++ = 0x00; // Inflection
|
||||
*p8++ = 0x00; // RateInflection
|
||||
*p8++ = 0x00; // CtrlArtAmp
|
||||
*p8++ = 0x00; // FilterFreq
|
||||
*p8++ = 0x00; // CurrentMode
|
||||
|
||||
// ---------------
|
||||
|
||||
*p8++ = 0x00; // nAYCurrentRegister
|
||||
|
||||
// ----------------------------------------------------------------- 03
|
||||
|
||||
// --------------- SY6522
|
||||
|
||||
*p8++ = 0x00; // ORA
|
||||
*p8++ = 0x00; // ORB
|
||||
*p8++ = 0x00; // DDRA
|
||||
*p8++ = 0x00; // DDRB
|
||||
|
||||
p16 = (uint16_t *)p8;
|
||||
|
||||
*p16++ = 0xDFDF; // TIMER1_COUNTER
|
||||
*p16++ = 0x0000; // TIMER1_LATCH
|
||||
*p16++ = 0xDFDF; // TIMER2_COUNTER
|
||||
*p16++ = 0x0000; // TIMER2_LATCH
|
||||
|
||||
p8 = (uint8_t *)p16;
|
||||
|
||||
*p8++ = 0x00; // SERIAL_SHIFT
|
||||
*p8++ = 0x00; // ACR
|
||||
*p8++ = 0x00; // PCR
|
||||
*p8++ = 0x00; // IFR
|
||||
*p8++ = 0x00; // IER
|
||||
|
||||
// --------------- AY8910
|
||||
|
||||
p32 = (unsigned int *)p8;
|
||||
|
||||
*p32++ = (unsigned int)0; // ay_tone_tick[0]
|
||||
*p32++ = (unsigned int)0; // ay_tone_tick[1]
|
||||
*p32++ = (unsigned int)0; // ay_tone_tick[2]
|
||||
*p32++ = (unsigned int)1; // ay_tone_high[0]
|
||||
*p32++ = (unsigned int)1; // ay_tone_high[1]
|
||||
*p32++ = (unsigned int)1; // ay_tone_high[2]
|
||||
|
||||
*p32++ = (unsigned int)3529473; // ay_noise_tick
|
||||
*p32++ = (unsigned int)234404; // ay_tone_subcycles
|
||||
*p32++ = (unsigned int)758692; // ay_env_subcycles
|
||||
*p32++ = (unsigned int)1; // ay_env_internal_tick
|
||||
*p32++ = (unsigned int)3529473; // ay_env_tick
|
||||
*p32++ = (unsigned int)3033035; // ay_tick_incr
|
||||
|
||||
*p32++ = (unsigned int)1; // ay_tone_period[0]
|
||||
*p32++ = (unsigned int)1; // ay_tone_period[1]
|
||||
*p32++ = (unsigned int)1; // ay_tone_period[2]
|
||||
|
||||
*p32++ = (unsigned int)0; // ay_noise_period
|
||||
*p32++ = (unsigned int)0; // ay_env_period
|
||||
*p32++ = (unsigned int)71376; // rng
|
||||
*p32++ = (unsigned int)1; // noise_toggle
|
||||
*p32++ = (unsigned int)0; // env_first
|
||||
*p32++ = (unsigned int)0; // env_rev
|
||||
*p32++ = (unsigned int)0; // env_counter
|
||||
|
||||
p8 = (uint8_t *)p32;
|
||||
*p8++ = 0x00; // sound_ay_registers[0]
|
||||
*p8++ = 0x00; // sound_ay_registers[1]
|
||||
*p8++ = 0x00; // sound_ay_registers[2]
|
||||
*p8++ = 0x00; // sound_ay_registers[3]
|
||||
*p8++ = 0x00; // sound_ay_registers[4]
|
||||
*p8++ = 0x00; // sound_ay_registers[5]
|
||||
*p8++ = 0x00; // sound_ay_registers[6]
|
||||
*p8++ = 0x00; // sound_ay_registers[7]
|
||||
*p8++ = 0x00; // sound_ay_registers[8]
|
||||
*p8++ = 0x00; // sound_ay_registers[9]
|
||||
*p8++ = 0x00; // sound_ay_registers[10]
|
||||
*p8++ = 0x00; // sound_ay_registers[11]
|
||||
*p8++ = 0x00; // sound_ay_registers[12]
|
||||
*p8++ = 0x00; // sound_ay_registers[13]
|
||||
*p8++ = 0x00; // sound_ay_registers[14]
|
||||
*p8++ = 0x00; // sound_ay_registers[15]
|
||||
|
||||
p32 = (unsigned int *)p8;
|
||||
changeCount = 0;
|
||||
*p32++ = changeCount; // ay_change_count
|
||||
p8 = (uint8_t *)p32;
|
||||
|
||||
// --------------- SSI263
|
||||
|
||||
*p8++ = 0x00; // DurationPhoneme
|
||||
*p8++ = 0x00; // Inflection
|
||||
*p8++ = 0x00; // RateInflection
|
||||
*p8++ = 0x00; // CtrlArtAmp
|
||||
*p8++ = 0x00; // FilterFreq
|
||||
*p8++ = 0x00; // CurrentMode
|
||||
|
||||
// ---------------
|
||||
|
||||
*p8++ = 0x00; // nAYCurrentRegister
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
size_t exSiz = p8 - exData;
|
||||
ASSERT(exSiz <= 1024);
|
||||
mb_testAssertA2V2(exData, exSiz);
|
||||
|
||||
FREE(exData);
|
||||
}
|
||||
|
||||
unlink(savData);
|
||||
FREE(savData);
|
||||
|
||||
PASS();
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@ -151,7 +824,7 @@ GREATEST_SUITE(test_suite_ui) {
|
||||
pthread_mutex_lock(&interface_mutex);
|
||||
|
||||
test_thread_running = true;
|
||||
|
||||
|
||||
GREATEST_SET_SETUP_CB(testui_setup, NULL);
|
||||
GREATEST_SET_TEARDOWN_CB(testui_teardown, NULL);
|
||||
GREATEST_SET_BREAKPOINT_CB(test_breakpoint, NULL);
|
||||
@ -161,7 +834,9 @@ GREATEST_SUITE(test_suite_ui) {
|
||||
RUN_TESTp(test_save_state_1);
|
||||
RUN_TESTp(test_load_state_1);
|
||||
|
||||
RUN_TESTp(test_load_A2VM_1); // legacy A2VM ...
|
||||
RUN_TESTp(test_load_A2VM_good1);
|
||||
|
||||
RUN_TESTp(test_load_A2V2_good1);
|
||||
|
||||
#if INTERFACE_TOUCH
|
||||
# warning TODO : touch joystick(s), keyboard, mouse, menu
|
||||
|
Loading…
x
Reference in New Issue
Block a user