Improved DSK handling from Mike Douglas and bug fix in URLContens.
This commit is contained in:
parent
8b19805f04
commit
899b7a654e
2 changed files with 29 additions and 11 deletions
|
@ -103,7 +103,7 @@
|
||||||
X = Not used
|
X = Not used
|
||||||
Sector number = binary of the sector number currently under the
|
Sector number = binary of the sector number currently under the
|
||||||
head, 0-31.
|
head, 0-31.
|
||||||
T = Sector True, is a 1 when the sector is positioned to read or
|
T = Sector True, is a 0 when the sector is positioned to read or
|
||||||
write.
|
write.
|
||||||
|
|
||||||
----------------------------------------------------------
|
----------------------------------------------------------
|
||||||
|
@ -111,9 +111,23 @@
|
||||||
5/22/2014 - Updated by Mike Douglas to support the Altair Minidisk.
|
5/22/2014 - Updated by Mike Douglas to support the Altair Minidisk.
|
||||||
This disk uses 35 (vs 70) tracks of 16 (vs 32) sectors
|
This disk uses 35 (vs 70) tracks of 16 (vs 32) sectors
|
||||||
of 137 bytes each.
|
of 137 bytes each.
|
||||||
|
|
||||||
6/30/2014 - When the disk is an Altair Minidisk, load the head as
|
6/30/2014 - When the disk is an Altair Minidisk, load the head as
|
||||||
soon as the disk is enabled, and ignore the head
|
soon as the disk is enabled, and ignore the head
|
||||||
unload command (both like the real hardware).
|
unload command (both like the real hardware).
|
||||||
|
|
||||||
|
7/13/2014 - This code previously returned zero when the sector position
|
||||||
|
register was read with the head not loaded. This zero looks
|
||||||
|
like an asserted "Sector True" flag for sector zero. The real
|
||||||
|
hardware returns 0xff in this case. The same problem occurs
|
||||||
|
when the drive is deselected - the sector position register
|
||||||
|
returned zero instead of 0xff. These have been corrected.
|
||||||
|
|
||||||
|
7/13/2014 Some software for the Altair skips a sector by verifying
|
||||||
|
that "Sector True" goes false. Previously, this code
|
||||||
|
returned "Sector True" every time the sector register
|
||||||
|
was read. Now the flag alternates true and false on
|
||||||
|
subsequent reads of the sector register.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "altairz80_defs.h"
|
#include "altairz80_defs.h"
|
||||||
|
@ -187,6 +201,7 @@ static int32 warnDSK10 = 0;
|
||||||
static int32 warnDSK11 = 0;
|
static int32 warnDSK11 = 0;
|
||||||
static int32 warnDSK12 = 0;
|
static int32 warnDSK12 = 0;
|
||||||
static int8 dskbuf[DSK_SECTSIZE]; /* data Buffer */
|
static int8 dskbuf[DSK_SECTSIZE]; /* data Buffer */
|
||||||
|
static int32 sector_true = 0; /* sector true flag for sector register read */
|
||||||
|
|
||||||
const static int32 alt_bootrom_dsk[BOOTROM_SIZE_DSK] = { // boot ROM for mini disk support
|
const static int32 alt_bootrom_dsk[BOOTROM_SIZE_DSK] = { // boot ROM for mini disk support
|
||||||
0x21, 0x13, 0xff, 0x11, 0x00, 0x4c, 0x0e, 0xe3, /* ff00-ff07 */
|
0x21, 0x13, 0xff, 0x11, 0x00, 0x4c, 0x0e, 0xe3, /* ff00-ff07 */
|
||||||
|
@ -556,7 +571,7 @@ int32 dsk11(const int32 port, const int32 io, const int32 data) {
|
||||||
" Attempt of %s 0x09 on unattached disk - ignored.\n",
|
" Attempt of %s 0x09 on unattached disk - ignored.\n",
|
||||||
current_disk, PCX, selectInOut(io));
|
current_disk, PCX, selectInOut(io));
|
||||||
}
|
}
|
||||||
return 0; /* no drive selected - can do nothing */
|
return 0xff; /* no drive selected - can do nothing */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* now current_disk < NUM_OF_DSK */
|
/* now current_disk < NUM_OF_DSK */
|
||||||
|
@ -572,14 +587,17 @@ int32 dsk11(const int32 port, const int32 io, const int32 data) {
|
||||||
if (dirty) /* implies that current_disk < NUM_OF_DSK */
|
if (dirty) /* implies that current_disk < NUM_OF_DSK */
|
||||||
writebuf();
|
writebuf();
|
||||||
if (current_flag[current_disk] & 0x04) { /* head loaded? */
|
if (current_flag[current_disk] & 0x04) { /* head loaded? */
|
||||||
|
sector_true ^= 1; /* return sector true every other entry */
|
||||||
|
if (sector_true == 0) { /* true when zero */
|
||||||
current_sector[current_disk]++;
|
current_sector[current_disk]++;
|
||||||
if (current_sector[current_disk] >= sectors_per_track[current_disk])
|
if (current_sector[current_disk] >= sectors_per_track[current_disk])
|
||||||
current_sector[current_disk] = 0;
|
current_sector[current_disk] = 0;
|
||||||
current_byte[current_disk] = 0xff;
|
current_byte[current_disk] = 0xff;
|
||||||
return (((current_sector[current_disk] << 1) & 0x3e) /* return 'sector true' bit = 0 (true) */
|
}
|
||||||
| 0xc0); /* set on 'unused' bits */
|
return (((current_sector[current_disk] << 1) & 0x3e) /* return sector number and...) */
|
||||||
|
| 0xc0 | sector_true); /* sector true, and set 'unused' bits */
|
||||||
} else
|
} else
|
||||||
return 0; /* head not loaded - return 0 */
|
return 0xff; /* head not loaded - return 0xff */
|
||||||
}
|
}
|
||||||
|
|
||||||
in9_count = 0;
|
in9_count = 0;
|
||||||
|
|
|
@ -72,7 +72,7 @@ uint8 *URLContents(const char *URL, uint32 *length) {
|
||||||
char *result;
|
char *result;
|
||||||
strncat(str, URL, RESULT_BUFFER_LENGTH - strlen(RESULT_LEAD_IN) - strlen(RESULT_LEAD_OUT) - 1);
|
strncat(str, URL, RESULT_BUFFER_LENGTH - strlen(RESULT_LEAD_IN) - strlen(RESULT_LEAD_OUT) - 1);
|
||||||
strcat(str, RESULT_LEAD_OUT);
|
strcat(str, RESULT_LEAD_OUT);
|
||||||
result = (char*)malloc(strlen(str));
|
result = (char*)malloc(strlen(str) + 1);
|
||||||
strcpy(result, str);
|
strcpy(result, str);
|
||||||
*length = strlen(str);
|
*length = strlen(str);
|
||||||
return (uint8*)result;
|
return (uint8*)result;
|
||||||
|
|
Loading…
Add table
Reference in a new issue