Version 0.8b with minor tape handling cleanup and some keyboard graphic improvements.

This commit is contained in:
Dave Bernazzani 2025-04-11 07:08:49 -04:00
parent f33b052da6
commit f69f805179
5 changed files with 24 additions and 20 deletions

View File

@ -15,7 +15,7 @@ include $(DEVKITARM)/ds_rules
export TARGET := SpeccySE
export TOPDIR := $(CURDIR)
export VERSION := 0.8a
export VERSION := 0.8b
ICON := -b $(CURDIR)/logo.bmp "SpeccySE $(VERSION);wavemotion-dave;https://github.com/wavemotion-dave/SpeccySE"

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 37 KiB

View File

@ -448,8 +448,6 @@ void ShowDebugZ80(void)
// ------------------------------------------------------------
void DisplayStatusLine(bool bForce)
{
//if (myGlobalConfig.emuText == 0) return;
if ((speccy_mode != last_speccy_mode) || bForce)
{
last_speccy_mode = speccy_mode;
@ -469,12 +467,6 @@ void DisplayStatusLine(bool bForce)
DSPrint(2, 21, 2, "$%&");
DSPrint(2, 22, 2, "DEF");
}
if (myGlobalConfig.emuText)
{
sprintf(tmp, "TAPE %-6d", tape_bytes_processed);
DSPrint(5,0,6, tmp);
}
}
else
{
@ -482,9 +474,7 @@ void DisplayStatusLine(bool bForce)
{
DSPrint(2, 21, 2, "!\"#");
DSPrint(2, 22, 2, "ABC");
}
DSPrint(5,0,6, " ");
}
}
}

View File

@ -207,7 +207,7 @@ void tape_parse_blocks(int tapeSize)
TapeBlocks[num_blocks_available].id = BLOCK_ID_STANDARD;
TapeBlocks[num_blocks_available].gap_delay_after = DEFAULT_TAPE_GAP_DELAY_MS;
TapeBlocks[num_blocks_available].pilot_length = DEFAULT_PILOT_LENGTH;
TapeBlocks[num_blocks_available].pilot_pulses = ((block_flag < 128) ? DEFAULT_HEADER_PULSE_TOGGLES : DEFAULT_DATA_PULSE_TOGGLES);
TapeBlocks[num_blocks_available].pilot_pulses = ((block_flag & 0x80) ? DEFAULT_DATA_PULSE_TOGGLES : DEFAULT_HEADER_PULSE_TOGGLES);
TapeBlocks[num_blocks_available].sync1_width = DEFAULT_SYNC_PULSE1_WIDTH;
TapeBlocks[num_blocks_available].sync2_width = DEFAULT_SYNC_PULSE2_WIDTH;
TapeBlocks[num_blocks_available].data_one_width = DEFAULT_DATA_ONE_PULSE_WIDTH;
@ -222,7 +222,7 @@ void tape_parse_blocks(int tapeSize)
TapeBlocks[num_blocks_available].block_data_len = block_len;
TapeBlocks[num_blocks_available].block_flag = block_flag;
if ((block_flag < 128) || (block_len == 19)) // Header
if (!(block_flag & 0x80) || (block_len == 19)) // Header
{
memcpy(TapeBlocks[num_blocks_available].block_filename, &ROM_Memory[idx+4], 10);
}
@ -256,7 +256,7 @@ void tape_parse_blocks(int tapeSize)
TapeBlocks[num_blocks_available].gap_delay_after = gap_len;
TapeBlocks[num_blocks_available].pilot_length = DEFAULT_PILOT_LENGTH;
TapeBlocks[num_blocks_available].pilot_pulses = ((block_flag < 128) ? DEFAULT_DATA_PULSE_TOGGLES : DEFAULT_HEADER_PULSE_TOGGLES);
TapeBlocks[num_blocks_available].pilot_pulses = ((block_flag & 0x80) ? DEFAULT_DATA_PULSE_TOGGLES : DEFAULT_HEADER_PULSE_TOGGLES);
TapeBlocks[num_blocks_available].sync1_width = DEFAULT_SYNC_PULSE1_WIDTH;
TapeBlocks[num_blocks_available].sync2_width = DEFAULT_SYNC_PULSE2_WIDTH;
TapeBlocks[num_blocks_available].data_one_width = DEFAULT_DATA_ONE_PULSE_WIDTH;
@ -269,7 +269,7 @@ void tape_parse_blocks(int tapeSize)
TapeBlocks[num_blocks_available].data_one_widthX2 = TapeBlocks[num_blocks_available].data_one_width << 1;
TapeBlocks[num_blocks_available].data_zero_widthX2 = TapeBlocks[num_blocks_available].data_zero_width << 1;
if ((block_flag < 128) || (block_len == 19)) // Header
if (!(block_flag & 0x80) || (block_len == 19)) // Header
{
memcpy(TapeBlocks[num_blocks_available].block_filename, &ROM_Memory[idx+4+2], 10);
}
@ -305,7 +305,7 @@ void tape_parse_blocks(int tapeSize)
TapeBlocks[num_blocks_available].data_one_widthX2 = TapeBlocks[num_blocks_available].data_one_width << 1;
TapeBlocks[num_blocks_available].data_zero_widthX2 = TapeBlocks[num_blocks_available].data_zero_width << 1;
if ((block_flag < 128) || (block_len == 19)) // Header
if (!(block_flag & 0x80) || (block_len == 19)) // Header
{
memcpy(TapeBlocks[num_blocks_available].block_filename, &ROM_Memory[idx+18+2], 10);
}
@ -480,9 +480,23 @@ void tape_position(u8 newPos)
}
// Called every frame
u8 show_tape_counter = 0;
void tape_frame(void)
{
// Not sure if we need this yet... called after every 1 frame of timing in the main loop
char tmp[5];
if (tape_state)
{
sprintf(tmp, "%03d", (tape_bytes_processed/1000) % 1000);
DSPrint(2, 20, 0, tmp);
show_tape_counter = 60;
}
else if (show_tape_counter)
{
if (--show_tape_counter == 0)
{
DSPrint(2, 20, 0, " ");
}
}
}
// -----------------------------------------------------------------------------
@ -735,7 +749,7 @@ ITCM_CODE u8 tape_pulse(void)
{
last_edge = CPU.TStates;
tape_state = TAPE_DELAY_AFTER; // We're done with this block... delay after
return 0x00; // But make at least one transition back to 'low'
// Do not return here... if delay is zero we don't want to perform any transition
}
else // We've got another byte to process...
{
@ -781,7 +795,7 @@ ITCM_CODE u8 tape_pulse(void)
break;
case TAPE_DELAY_AFTER: // Normally ~1 second but can be different for custom tapes
if ((CPU.TStates-last_edge) <= (TapeBlocks[current_block].gap_delay_after * 3500)) return 0x00;
if ((CPU.TStates-last_edge) < (TapeBlocks[current_block].gap_delay_after * 3500)) return 0x00; // Must be < so we do nothing if delay is zero
else
{
tape_search_for_loader();