This wiki is being migrated to http://www.github.com/z88dk/z88dk/wiki

User Tools

Site Tools


examples:snippets:zxspectrum:opusdump

opusdump.zip

/*
	Opus Discovery disk dump tool
	
	zcc +zx -lndos -create-app -lrs232plus opusdump.c
	
	$Id:$
  • /
#include <spectrum.h>
#include <zxopus.h>
#include <stdio.h>
#include <games.h>
#include <graphics.h>
#include <rs232.h>
char floppy[] =
{ 24, 24, 0x7F , 0xFF , 0xFC , 0x84 , 0x00 , 0x12 , 0x84 , 0x03 , 0x91 , 0x84 , 0x03 
, 0x91 , 0x84 , 0x03 , 0x91 , 0x84 , 0x03 , 0x91 , 0x84 , 0x00 , 0x11 , 0x83 
, 0xFF , 0xE1 , 0x80 , 0x00 , 0x01 , 0x80 , 0x00 , 0x01 , 0x87 , 0xFF , 0xE1 
, 0x88 , 0x00 , 0x11 , 0x90 , 0x00 , 0x09 , 0x90 , 0x00 , 0x09 , 0x90 , 0x00 
, 0x09 , 0x91 , 0xEC , 0x09 , 0x90 , 0x00 , 0x09 , 0x90 , 0x00 , 0x09 , 0x91 
, 0xD7 , 0x89 , 0x90 , 0x00 , 0x09 , 0x90 , 0x00 , 0x09 , 0x90 , 0x00 , 0x09 
, 0x90 , 0x00 , 0x09 , 0x7F , 0xFF , 0xFE  };
char arrow[] = { 8, 7, 0x00 , 0x08 , 0x7C , 0x7E , 0x7C , 0x08 , 0x00  };
char arrow_mask[] = { 8, 7, 0x08 , 0xFC , 0xFE , 0xFF , 0xFE , 0xFC , 0x08  };
char arrow_mask2[] = { 8, 7, 0xFF , 0xFF , 0x00 , 0x00 , 0x00 , 0xFF , 0xFF  };
char cassette[] = { 24, 14, 0x7F , 0xFF , 0xFE , 0xC0 , 0x00 , 0x03 , 0x80 , 0x00 , 0x01 , 0xFF , 0xFF 
, 0xFF , 0xF3 , 0xFF , 0xCF , 0xED , 0x81 , 0xB7 , 0xED , 0x81 , 0xB7 , 0xF3 
, 0xFF , 0xCF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xC0 , 0x00 , 0x03 
, 0x94 , 0x00 , 0x29 , 0x80 , 0x00 , 0x01 , 0xFF , 0xFF , 0xFF  };
char rs232[] = { 27, 13, 0x0F , 0xFF , 0xFF , 0xE0 , 0x0F , 0xFF , 0xFF , 0xE0 , 0x3C , 0x00 , 0x00 
, 0x60 , 0x30 , 0x00 , 0x00 , 0x60 , 0xF0 , 0x00 , 0x00 , 0x60 , 0xC0 , 0x00 
, 0x00 , 0x60 , 0xC1 , 0x24 , 0x92 , 0x60 , 0xC2 , 0x49 , 0x24 , 0x60 , 0xF2 
, 0x49 , 0x24 , 0x60 , 0x31 , 0x24 , 0x92 , 0x60 , 0x3D , 0x24 , 0x92 , 0x60 
, 0x0F , 0xFF , 0xFF , 0xE0 , 0x0F , 0xFF , 0xFF , 0xE0  };
char lpt[] = { 22, 8, 0x3F , 0xFF , 0xF0 , 0x40 , 0x00 , 0x08 , 0x92 , 0x49 , 0x24 , 0x80 , 0x00 
, 0x04 , 0x80 , 0x00 , 0x04 , 0x49 , 0x24 , 0x88 , 0x20 , 0x00 , 0x10 , 0x1F 
, 0xFF , 0xE0  };
unsigned long sectors;
unsigned int blocksize;
//char BUFFER[550];
extern unsigned char * BUFFER @50000;
extern unsigned char * window_bk @55000;
unsigned int b, k, o;
unsigned long s;
char presskey_msg[] = { 145, 30, 0x92 , 0x49 , 0x24 , 0x92 , 0x49 , 0x24 , 0x92 , 0x49 , 0x24 , 0x92 , 0x49 
, 0x24 , 0x92 , 0x49 , 0x24 , 0x92 , 0x49 , 0x24 , 0x80 , 0x7F , 0xFF , 0xFF 
, 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF 
, 0xFF , 0xFF , 0xFF , 0xFE , 0x80 , 0x40 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x01 , 0x80 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x40 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x01 , 0xFF , 0xFF , 0xF0 , 0x80 , 0x40 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 
, 0x07 , 0xFF , 0xF1 , 0x80 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x07 , 0xFF , 0xF0 
, 0x80 , 0x40 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x07 , 0xE1 , 0xF0 , 0x80 , 0x40 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x01 , 0x07 , 0x80 , 0x71 , 0x80 , 0xC1 , 0xF8 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x20 , 0x00 , 0x00 , 0x00 , 0x08 , 0x00 , 0x00 , 0x00 , 0x01 , 0x27 
, 0x00 , 0x30 , 0x80 , 0x41 , 0x04 , 0x00 , 0x00 , 0x00 , 0x00 , 0x20 , 0x00 
, 0x00 , 0x80 , 0x08 , 0x00 , 0x00 , 0x80 , 0x01 , 0x06 , 0x00 , 0x30 , 0x80 
, 0x41 , 0x04 , 0x00 , 0x00 , 0x00 , 0x00 , 0x20 , 0x00 , 0x00 , 0x80 , 0x08 
, 0x00 , 0x00 , 0x00 , 0x01 , 0x06 , 0x00 , 0x11 , 0x80 , 0xC1 , 0x05 , 0xCE 
, 0x38 , 0xE0 , 0x70 , 0x24 , 0x72 , 0x20 , 0xCE , 0x0F , 0x8E , 0x3E , 0x97 
, 0x01 , 0x06 , 0x6B , 0x10 , 0x80 , 0x41 , 0xF9 , 0x11 , 0x45 , 0x10 , 0x08 
, 0x28 , 0x8A , 0x20 , 0x91 , 0x08 , 0x51 , 0x42 , 0x98 , 0x81 , 0x06 , 0x00 
, 0x10 , 0x80 , 0x41 , 0x01 , 0x1F , 0x30 , 0xC0 , 0x78 , 0x30 , 0xFA , 0x20 
, 0x91 , 0x08 , 0x5F , 0x42 , 0x90 , 0x81 , 0x06 , 0x6B , 0x11 , 0x80 , 0xC1 
, 0x01 , 0x10 , 0x08 , 0x20 , 0x88 , 0x28 , 0x82 , 0x20 , 0x91 , 0x08 , 0x50 
, 0x42 , 0x90 , 0x81 , 0x06 , 0x00 , 0x10 , 0x80 , 0x41 , 0x01 , 0x11 , 0x45 
, 0x10 , 0x88 , 0x24 , 0x89 , 0x40 , 0x91 , 0x08 , 0x51 , 0x46 , 0x90 , 0x81 
, 0x06 , 0x66 , 0x10 , 0x80 , 0x41 , 0x01 , 0x0E , 0x38 , 0xE0 , 0x78 , 0x22 
, 0x70 , 0x80 , 0x4E , 0x0F , 0x8E , 0x3A , 0x90 , 0x81 , 0x3E , 0x00 , 0x11 
, 0x80 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x02 , 0x00 , 0x01 , 0x1E , 0x6D , 0x10 , 0x80 , 0x40 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x02 , 0x00 , 0x00 , 0x00 , 0x00 , 0x7C 
, 0x00 , 0x01 , 0x1E , 0x00 , 0x30 , 0x80 , 0x40 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x1E 
, 0x00 , 0x31 , 0x80 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x78 , 0x00 , 0xF0 , 0x80 
, 0x40 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x01 , 0x1F , 0xFF , 0xF0 , 0x80 , 0x40 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x01 , 0x1F , 0xFF , 0xF1 , 0x80 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0xFF , 0xFF 
, 0xF0 , 0x80 , 0x40 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x40 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x80 , 0xC0 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x80 , 0x12 , 0x49 , 0x24 , 0x92 , 0x49 , 0x24 , 0x92 
, 0x49 , 0x24 , 0x92 , 0x49 , 0x24 , 0x92 , 0x49 , 0x24 , 0x92 , 0x49 , 0x24 
, 0x80 , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF 
, 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0x80  };
char overwrite_msg[] = { 145, 30, 0x92 , 0x49 , 0x24 , 0x92 , 0x49 , 0x24 , 0x92 , 0x49 , 0x24 , 0x92 , 0x49 
, 0x24 , 0x92 , 0x49 , 0x24 , 0x92 , 0x49 , 0x24 , 0x80 , 0x7F , 0xFF , 0xFF 
, 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF 
, 0xFF , 0xFF , 0xFF , 0xFE , 0x80 , 0x40 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x01 , 0x80 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x40 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x01 , 0x00 , 0x00 , 0x80 , 0x40 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x03 , 0x80 , 0x01 , 0x80 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x06 , 0xC0 , 0x00 
, 0x80 , 0x40 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0C , 0x60 , 0x00 , 0x80 , 0x40 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x08 , 0x20 , 0x01 , 0x80 , 0xC0 , 0x3F , 0x00 , 0x00 , 0x00 
, 0x02 , 0x00 , 0x00 , 0x80 , 0x00 , 0x05 , 0x00 , 0x80 , 0x38 , 0x00 , 0x1B 
, 0xB0 , 0x00 , 0x80 , 0x40 , 0x40 , 0x80 , 0x00 , 0x00 , 0x00 , 0x40 , 0x04 
, 0x80 , 0x00 , 0x04 , 0x00 , 0x80 , 0x44 , 0x00 , 0x13 , 0x90 , 0x00 , 0x80 
, 0x40 , 0x40 , 0x80 , 0x00 , 0x00 , 0x00 , 0x40 , 0x04 , 0x80 , 0x00 , 0x04 
, 0x00 , 0x80 , 0x04 , 0x00 , 0x33 , 0x98 , 0x01 , 0x80 , 0xC0 , 0x40 , 0xA2 
, 0x73 , 0xA4 , 0xBA , 0x67 , 0x06 , 0xB8 , 0xE0 , 0x7D , 0x1C , 0x90 , 0x04 
, 0x00 , 0x23 , 0x88 , 0x00 , 0x80 , 0x40 , 0x40 , 0xA2 , 0x8A , 0x24 , 0xA2 
, 0x48 , 0x84 , 0xC5 , 0x10 , 0x85 , 0x22 , 0xA0 , 0x08 , 0x00 , 0x63 , 0x8C 
, 0x00 , 0x80 , 0x40 , 0x40 , 0x94 , 0xFA , 0x2A , 0xA2 , 0x4F , 0x84 , 0x85 
, 0xF0 , 0x85 , 0x18 , 0xC0 , 0x10 , 0x00 , 0x43 , 0x84 , 0x01 , 0x80 , 0xC0 
, 0x40 , 0x94 , 0x82 , 0x2A , 0xA2 , 0x48 , 0x04 , 0x85 , 0x00 , 0x85 , 0x04 
, 0xA0 , 0x10 , 0x00 , 0xC3 , 0x86 , 0x00 , 0x80 , 0x40 , 0x40 , 0x88 , 0x8A 
, 0x11 , 0x22 , 0x48 , 0x84 , 0x85 , 0x10 , 0x85 , 0x22 , 0x90 , 0x00 , 0x00 
, 0x83 , 0x82 , 0x00 , 0x80 , 0x40 , 0x3F , 0x08 , 0x72 , 0x11 , 0x22 , 0x27 
, 0x02 , 0x84 , 0xE0 , 0x7D , 0x1C , 0x88 , 0x10 , 0x01 , 0x83 , 0x83 , 0x01 
, 0x80 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x01 , 0x01 , 0x00 , 0x80 , 0x40 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x03 , 0x00 , 0x01 , 0x80 , 0x80 , 0x40 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x02 , 0x03 
, 0x80 , 0x81 , 0x80 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x06 , 0x03 , 0x80 , 0xC0 , 0x80 
, 0x40 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x04 , 0x03 , 0x80 , 0x40 , 0x80 , 0x40 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x0C , 0x00 , 0x00 , 0x61 , 0x80 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0F , 0xFF , 0xFF 
, 0xE0 , 0x80 , 0x40 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x07 , 0xFF , 0xFF , 0x80 , 0x80 , 0x40 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x80 , 0xC0 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 
, 0x00 , 0x00 , 0x00 , 0x80 , 0x12 , 0x49 , 0x24 , 0x92 , 0x49 , 0x24 , 0x92 
, 0x49 , 0x24 , 0x92 , 0x49 , 0x24 , 0x92 , 0x49 , 0x24 , 0x92 , 0x49 , 0x24 
, 0x80 , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF 
, 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0x80  };
unsigned char checksum;
int main()
{
	printf ("%cOpus Discovery disk backup tool\n\n",12);
	if (!zx_opus()) {
		printf("\nError: Opus Discovery interface is not present.\n");
		return(1);
	}
	
	putsprite(spr_or, 230, 2, floppy);
	sectors=opus_getblocks(1);
	blocksize=opus_getblocksize(1);
	putsprite(spr_and, 230, 2, floppy);
	printf ("Total disk sector count: %u, sector size: %u\n", (int)sectors, (int)blocksize);
	printf ("\n    1)  Backup to tape (500 bps)\n");
	printf ("\n    2)  Backup to RS232 (9600 bps)\n");
	printf ("\n    3)  Backup to LPT (faster)\n");
	printf ("\n    4)  Restore from tape (500 bps)\n");
	printf ("\n    5)  Restore from rs232 (9600 bps)\n");
	printf ("\n    6)  Restore from LPT (faster)\n");
	printf ("\n    7)  Send to RS232 (9600 bps, X-Modem)\n\n");
	k=getkey();
	while (k<'1' || k>'7') k=getkey();
	
	xorborder(12, 10+(k-'0')*16, 200, 20);
	putsprite(spr_and, 7, 17+(k-'0')*16, arrow_mask);
	putsprite(spr_or, 7, 17+(k-'0')*16, arrow);
	window_bk[0]=145;
	window_bk[1]=30;
	bksave(55,60,&window_bk);
	clga(55,60,145,30);
	if ((k<'4')||(k=='7')) {
		putsprite(spr_or, 55, 60, presskey_msg);
		fgetc_cons();
		if (k=='7') {
			clga(55,60,145,30);
			drawb(55,60,145,30);
			putsprite(spr_or, 80, 70, rs232);
			putsprite(spr_or, 150, 70, rs232);
			putsprite(spr_or, 130, 72, arrow);
			putsprite(spr_or, 115, 72, arrow);
			BUFFER[520]=0;
			while (BUFFER[520]!=NAK)
				rs232_get(&BUFFER[520]);
		}
	} else {
		putsprite(spr_or, 55, 60, overwrite_msg);
		while (o!='y' && o!='n') o=getkey();
		if (o=='n') {
			bkrestore(&window_bk);
			return(3);
		}
	}
	bkrestore(&window_bk);
	if (k=='1') {
		putsprite(spr_or, 200, 146, cassette);
		putsprite(spr_or, 20, 140, floppy);
	}
	if (k=='4') {
		putsprite(spr_or, 200, 140, floppy);
		putsprite(spr_or, 20, 146, cassette);
	}
	if (k=='2') {
		putsprite(spr_or, 200, 146, rs232);
		putsprite(spr_or, 20, 140, floppy);
	}
	if (k=='5') {
		putsprite(spr_or, 200, 140, floppy);
		putsprite(spr_or, 20, 146, rs232);
	}
	if ((k=='2') || (k=='5') || (k=='7')) {
		if (rs232_init() != RS_ERR_OK) {
			printf ("  RS232 Initialization error.  Exiting...\n");
			return(2);
		}
		if (rs232_params(RS_BAUD_9600, RS_PAR_NONE) != RS_ERR_OK) {
			printf ("  RS232 parameters setting error.  Exiting...\n");
			return(2);
		}
	}
	if (k=='3') {
		putsprite(spr_or, 200, 146, lpt);
		putsprite(spr_or, 20, 140, floppy);
	}
	if (k=='6') {
		putsprite(spr_or, 200, 140, floppy);
		putsprite(spr_or, 20, 146, lpt);
	}
	if ((k<'4') || (k=='7')) {
	// BACKUP
		for (s=0L;s<sectors;s++) {
			putsprite(spr_or, 44+(148L*s)/sectors, 146, arrow);
			opus_getsect(1,(int)s,&BUFFER);
			if (k=='7') {
				rs232_put(SOH);
				rs232_put((unsigned char)(s+1));
				rs232_put(-(unsigned char)s);
				checksum = 0;
			}
			if (k=='1')
				tape_save_block(&BUFFER, (int)blocksize, 123);
			else
				for (b=0; b<blocksize; b++)
					if ((k=='2')||(k=='7')) {
						rs232_put(BUFFER[b]);
						checksum = (checksum + BUFFER[b]) & 0xff;
					} else {
						opus_lptwrite(BUFFER[b]);
					}
			if (k=='7')	{
				rs232_put(checksum);
				BUFFER[520]=0;
				while (BUFFER[520]!=ACK)
					rs232_get(&BUFFER[520]);
				}
			putsprite(spr_and, 44+(148L*s)/sectors, 146, arrow_mask2);
		}
		if (k=='7')	{
			rs232_put(EOT);
			BUFFER[520]=0;
			while (BUFFER[520]!=ACK)
				rs232_get(&BUFFER[520]);
		}
	} else {
	// RESTORE
		for (s=0L;s<sectors;s++) {
			putsprite(spr_or, 44+(148L*s)/sectors, 146, arrow);
			if (k=='4')
				tape_load_block(&BUFFER, (int)blocksize, 123);
			else
				for (b=0; b<blocksize; b++)
					if (k=='5')
						rs232_get(&BUFFER[b]);
					else
						BUFFER[b]=opus_lptread();
						opus_putsect(1,(int)s,&BUFFER);
			putsprite(spr_and, 44+(148L*s)/sectors, 146, arrow_mask2);
		}
	}
	printf ("\n\n Transfer complete. \n");
	return(0);
}
examples/snippets/zxspectrum/opusdump.txt · Last modified: 2014/12/11 20:08 (external edit)