20 #define RELFILENAME_MAX (FILENAME_MAX + 4) // FOO,L,\xFF\0
22 uint8_t relfile_open(struct relfile *rf, char* name)
24 char namebuf[RELFILENAME_MAX];
26 if(strlen(name) > FILENAME_MAX)
28 snprintf(namebuf,RELFILENAME_MAX,"%s,l,%c",name,rf->recsize);
29 cbm_open(rf->fd, rf->devnr, rf->sa, namebuf);
33 cbm_open(rf->cmdfd,rf->devnr,15,NULL);
38 uint8_t relfile_is_split_record(struct relfile *rf, uint16_t recnum)
40 return ((recnum * rf->recsize) % 254) < rf->recsize;
43 uint8_t relfile_pos(struct relfile *rf, uint16_t recnum, uint8_t offset)
45 char cmdbuf[5]; // 'P' (SA) (RECLO) (RECHI) (OFFSET)
48 cmdbuf[1]=rf->sa + 0x60;
49 cmdbuf[2]=(uint8_t)(recnum & 0x00FF);
50 cmdbuf[3]=(uint8_t)(recnum >> 8);
53 //cprintf("CMD: %2X %2X %2X %2X %2X\r\n", cmdbuf[0], cmdbuf[1], cmdbuf[2], cmdbuf[3], cmdbuf[4]);
55 cbm_write(rf->cmdfd,cmdbuf, 5);
59 uint8_t relfile_read(struct relfile *rf, uint8_t *buf)
61 cbm_read(rf->fd, buf, rf->recsize);
65 uint8_t relfile_write(struct relfile *rf, uint8_t *buf)
67 cbm_write(rf->fd, buf, rf->recsize);
71 uint8_t relfile_clear(struct relfile *rf)
73 cbm_write(rf->fd, "\xFF", 1);
77 void relfile_close(struct relfile *rf)
83 void c128_perror(uint8_t c, char *msg) {
84 cprintf("\r\nError (Code %d) while: %s\r\nOS Error = %d\r\n", c, msg,
93 uint8_t start_sec, start_tenth;
94 uint8_t end_sec, end_tenth;
97 videomode(VIDEOMODE_80x25);
100 __asm__("jsr initsystime");
107 if(relfile_open(&rf, "reldata"))
109 c128_perror(c, "relfile_open");
113 start_tenth = CIA1.tod_10;
114 start_sec = CIA1.tod_sec;
121 if(relfile_pos(&rf, i, 0))
123 c128_perror(c, "relfile_pos1");
127 if(relfile_is_split_record(&rf, i))
129 cprintf("\r\nSPLIT: %d!\r\n",i);
132 if(relfile_pos(&rf, i, 0))
134 c128_perror(c, "relfile_pos2");
138 if(relfile_clear(&rf))
140 c128_perror(c, "relfile_clear");
145 for(j=0;j<rf.recsize;j++)
146 bla[j]=rand() & 0x00ff;
149 if(relfile_pos(&rf, i, 0))
151 c128_perror(c, "relfile_pos3");
154 if(relfile_write(&rf, bla))
156 c128_perror(c, "relfile_write");
162 end_tenth = CIA1.tod_10;
163 end_sec = CIA1.tod_sec;
164 cprintf("\r\n%d.%d -> %d.%d\r\n",start_sec,start_tenth,end_sec,end_tenth);
167 if(relfile_open(&rf, "reldata"))
169 c128_perror(0, "relfile_open");
172 start_tenth = CIA1.tod_10;
173 start_sec = CIA1.tod_sec;
178 if(relfile_pos(&rf, i, 0))
180 c128_perror(0, "relfile_pos");
183 if(relfile_is_split_record(&rf, i))
185 cprintf("\r\nSPLIT!\r\n");
188 if(relfile_read(&rf, bla))
190 c128_perror(0, "relfile_read");
196 for(j=0;j<rf.recsize;j++)
198 uint8_t exp = rand() & 0x00ff;
201 cprintf("\r\nMISMATCH(%2d): IS: %2X EXP: %2X\r\n",j,bla[j],exp);
208 end_tenth = CIA1.tod_10;
209 end_sec = CIA1.tod_sec;
210 cprintf("\r\n%d.%d -> %d.%d\r\n",start_sec,start_tenth,end_sec,end_tenth);