opusdump - marinus-lab/z88dk GitHub Wiki
{{:examples:snippets:zxspectrum:opusdump.gif|}}
{{:examples:snippets:zxspectrum: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);
}