[abc80] ABC80 kasettrutiner

juhasz at abc.se juhasz at abc.se
Mon Okt 12 02:31:12 PDT 2009


Nu läste jag ditt svar ordentligt, och jag ser att jag har lite annorlunda
uppbyggnad av recordarna i mitt program abccas. Frågan är vad som är
rätt..... Jag har tagit mina uppgifter ur "Mikrodatorns ABC".... Se koden
nedan (den är testad OK mot en "fysisk" ABC80...)

Robert

void blockout(FILE *f)
{
int i,csum;
for (i=0;i<32;i++) byteout(0,f); // 32 0 bytes
for (i=0;i<3;i++) byteout(0x16,f); // 3 sync bytes 16H
byteout(0x2,f); //STX
for (i=0;i<256;i++) byteout(buffer[i],f); // output the buffer
byteout(0x3,f); // ETX
csum=0;
for (i=0;i<256;i++) csum+=buffer[i]; // calculate the checksum
csum+=3; // csum includes ETX char!!! (as correctly stated in Mikrodatorns
ABC)
byteout(csum & 0xff,f);
byteout((csum >> 8) & 0xff,f);
}

void nameblockout(FILE *f)
{
	int i;
for (i=0;i<3;i++) buffer[i]=0xff; // Header
for (i=3;i<11;i++) buffer[i]=name[i-3]; // Name
for (i=11;i<14;i++) buffer[i]=ext[i-11]; // Ext
for (i=14;i<256;i++) buffer[i]=0; // zeroes
blockout(f);
}

void datablockout(FILE *fin,FILE *fout)
{
int blcnt;
blcnt=0;
while (!feof(fin))
	{
	buffer[0]=0;
	buffer[1]=blcnt & 0xff;
	buffer[2]=(blcnt >> 8) & 0xff;
	fread(&buffer[3],253,1,fin);
	blockout(fout);
	blcnt++;
	printf("Block out #%d\n",blcnt);
	}

}

> Hej!
>
> Skickar du ut signalen till en riktig ABC80 när du testar? Blir det samma
> sak om du skriver "LOAD CAS:filnamn" ?
>
> Jag har Arne Stockmans disassemblering med kommentarer. Om jag förstår
> kommentarerna rätt för "prepare" och "skriv record" så
> består kasettfiler av records med följande format (se nedan). Men jag kan
> ha missuppfattat ett och annat så det är nog bättre jag
> skickar kopior så får du kolla själv.
>
> CAS_record:
> 1 byte 0x00
> 32 byte 0xFF
> 3 byte 0x16 <SYN>
> 1 byte 0x02 <STX>
> 256 bytes Record_buffer
> 1 byte 0x03 <ETX>
> 1 byte checksumma
> 1 byte 0x00
>
> Record_buffer för filnamsrecord:
> 3 byte 0xFF
> 11 byte filnamn
> resten 0x00
>
> Record_buffer för datarecord:
> 2 bytes recordnummer (startar på 0x0000)
> 1 byte 0x00 (filnummer)
> 252 bytes data
> 1 byte 0x03 <ETX> (ger dubbelt ETX?)
>
> Koden för inläsning tycks leta efter record som startar med 3 bytes 0xFF
> och sedan jämförs filnamnet med angivet filnamn. Om
> första tecknet i angivet filnamn är ascii(32) utgår filnamnstestet. Detta
> händer när inget filnamn är angivet, tex LOAD CAS:.
>
> Hälsn.
> Anders
>
>
>
> ----- Original Message -----
> From: "Erik Isaksson" <exon at lysator.liu.se>
> To: <abc80 at abc80.org>
> Sent: Sunday, October 11, 2009 4:08 PM
> Subject: [abc80] ABC80 kasettrutiner
>
>
> Hej listan!
>
> Är det någon som har bra koll på hur ABC80s kassettrutiner fungerar i
> detalj? Jag försöker få emulatorn att läsa och skriva via CAS:, men det
> går inget vidare. 'Mikrodatorns ABC' har en hyfsad beskrivning av
> elektroniken och formaten, så jag trodde det skulle vara en kakbit att
> implementera, men någonstans går det fel. Inspelning funkar troligen,
> jag har fått ut en CAS:-fil i något vi kan kalla raw-format genom att
> sampla PIO CHB bit 6 i 15,6kHz (en gång per scan-line), och den både ser
> och låter OK ut. Avspelning funkar däremot inte alls, troligtvis hittar
> den inte ens SYN-bytarna i början av blocken eftersom jag bara får
> "HITTAR EJ FILEN" ett tag efter "LOAD CAS:" (annars borde det väl bli
> checksummefel eller liknande). I princip triggar jag en PIO
> CHB-interrupt på varje flank i insignalen genom att dra bit 7 låg, och
> det ser ut som om rutinerna reagerar på rätt sätt och nollställer
> latchen som de ska. Ibland ser jag dock att jag får en "extra"
> nollställning utan synbar anledning. Jag har ingen större lust att börja
> disassemblera kassettrutinerna för att lista ut vad som går fel, så om
> någon kan komma med lite input vore det trevligt!
>
> Tack på förhand
> / E
>
> _______________________________________________
> ABC80 mailing list
> ABC80 at abc80.org
> http://www.abc80.org/mailman/listinfo/abc80
>
> _______________________________________________
> ABC80 mailing list
> ABC80 at abc80.org
> http://www.abc80.org/mailman/listinfo/abc80
>



More information about the ABC80 mailing list