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 TARGET := SpeccySE
export TOPDIR := $(CURDIR) 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" 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) void DisplayStatusLine(bool bForce)
{ {
//if (myGlobalConfig.emuText == 0) return;
if ((speccy_mode != last_speccy_mode) || bForce) if ((speccy_mode != last_speccy_mode) || bForce)
{ {
last_speccy_mode = speccy_mode; last_speccy_mode = speccy_mode;
@ -469,12 +467,6 @@ void DisplayStatusLine(bool bForce)
DSPrint(2, 21, 2, "$%&"); DSPrint(2, 21, 2, "$%&");
DSPrint(2, 22, 2, "DEF"); DSPrint(2, 22, 2, "DEF");
} }
if (myGlobalConfig.emuText)
{
sprintf(tmp, "TAPE %-6d", tape_bytes_processed);
DSPrint(5,0,6, tmp);
}
} }
else else
{ {
@ -482,9 +474,7 @@ void DisplayStatusLine(bool bForce)
{ {
DSPrint(2, 21, 2, "!\"#"); DSPrint(2, 21, 2, "!\"#");
DSPrint(2, 22, 2, "ABC"); 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].id = BLOCK_ID_STANDARD;
TapeBlocks[num_blocks_available].gap_delay_after = DEFAULT_TAPE_GAP_DELAY_MS; 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_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].sync1_width = DEFAULT_SYNC_PULSE1_WIDTH;
TapeBlocks[num_blocks_available].sync2_width = DEFAULT_SYNC_PULSE2_WIDTH; TapeBlocks[num_blocks_available].sync2_width = DEFAULT_SYNC_PULSE2_WIDTH;
TapeBlocks[num_blocks_available].data_one_width = DEFAULT_DATA_ONE_PULSE_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_data_len = block_len;
TapeBlocks[num_blocks_available].block_flag = block_flag; 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); 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].gap_delay_after = gap_len;
TapeBlocks[num_blocks_available].pilot_length = DEFAULT_PILOT_LENGTH; 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].sync1_width = DEFAULT_SYNC_PULSE1_WIDTH;
TapeBlocks[num_blocks_available].sync2_width = DEFAULT_SYNC_PULSE2_WIDTH; TapeBlocks[num_blocks_available].sync2_width = DEFAULT_SYNC_PULSE2_WIDTH;
TapeBlocks[num_blocks_available].data_one_width = DEFAULT_DATA_ONE_PULSE_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_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; 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); 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_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; 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); 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 // Called every frame
u8 show_tape_counter = 0;
void tape_frame(void) 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; last_edge = CPU.TStates;
tape_state = TAPE_DELAY_AFTER; // We're done with this block... delay after 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... else // We've got another byte to process...
{ {
@ -781,7 +795,7 @@ ITCM_CODE u8 tape_pulse(void)
break; break;
case TAPE_DELAY_AFTER: // Normally ~1 second but can be different for custom tapes 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 else
{ {
tape_search_for_loader(); tape_search_for_loader();