dio_test.c (3021B)
1 /* 2 * Copyright 2021 Gerd Beuster (gerd@frombelow.net). This is free 3 * software under the GNU GPL v3 license or any later version. See 4 * COPYING in the root directory for details. 5 */ 6 7 #include <stdio.h> 8 #include <stdlib.h> 9 #include <conio.h> 10 #include <errno.h> 11 #include <dio.h> 12 #include "../cc65_eris/os.h" 13 14 void print_stack_pointers() { 15 unsigned cc65_sp, eris_sp; 16 unsigned char hw_sp; 17 get_stack_pointers(&hw_sp, &eris_sp, &cc65_sp); 18 cprintf("CC65 SP: %04X Eris SP: %04X HW SP: %02X\r\n", cc65_sp, eris_sp, hw_sp); 19 } 20 21 void print_buffer(unsigned char *buffer) { 22 23 unsigned i; 24 25 for (i = 0; i < 512; i++) { 26 cprintf("%02X ", buffer[i]); 27 } 28 cputs("\r\n"); 29 } 30 31 void read_test(dhandle_t handle) { 32 33 unsigned sect_num; 34 unsigned *irq; 35 unsigned char *buffer; 36 buffer = malloc(512); 37 38 handle = (void *) 0x0000; 39 for(sect_num = 0; sect_num < 5; sect_num++) { 40 irq = (unsigned *) 0x7FFE; 41 cprintf("IRQ vector: %04X\r\n", *irq); 42 cprintf("Reading handle sector %d %d.\r\n", handle, sect_num); 43 print_stack_pointers(); 44 dio_read(handle, sect_num, buffer); 45 print_stack_pointers(); 46 if(_oserror != 0) { 47 cprintf("_oserror is %d\r\n", _oserror); 48 } 49 else { 50 print_buffer(buffer); 51 } 52 cputs("\r\n"); 53 } 54 } 55 56 void write_test(dhandle_t handle) { 57 58 unsigned sect_num; 59 unsigned i; 60 unsigned *irq; 61 unsigned char *buffer; 62 buffer = malloc(512); 63 64 handle = (void *) 0x000F; 65 sect_num = 0x0010; 66 irq = (unsigned *) 0x7FFE; 67 cprintf("IRQ vector: %04X\r\n", *irq); 68 cprintf("Reading handle sector %d %d.\r\n", handle, sect_num); 69 print_stack_pointers(); 70 dio_read(handle, sect_num, buffer); 71 if(_oserror != 0) 72 goto error; 73 print_buffer(buffer); 74 for (i = 0; i < 512; i ++) { 75 buffer[i] = 0xAA; 76 } 77 cputs("Writing to SD card.\r\n"); 78 dio_write(handle, sect_num, buffer); 79 if(_oserror != 0) 80 goto error; 81 cputs("Reading SD card.\r\n"); 82 dio_read(handle, sect_num, buffer); 83 if(_oserror != 0) 84 goto error; 85 print_buffer(buffer); 86 for (i = 0; i < 512; i ++) { 87 buffer[i] = 0xBB; 88 } 89 cputs("Writing to SD card.\r\n"); 90 dio_write(handle, sect_num, buffer); 91 if(_oserror != 0) 92 goto error; 93 cputs("Reading SD card.\r\n"); 94 dio_read(handle, sect_num, buffer); 95 if(_oserror != 0) 96 goto error; 97 print_buffer(buffer); 98 for (i = 0; i < 512; i ++) { 99 buffer[i] = i; 100 } 101 dio_write(handle, sect_num, buffer); 102 irq = (unsigned *) 0x7FFE; 103 cprintf("IRQ vector: %04X\r\n", *irq); 104 print_stack_pointers(); 105 return; 106 107 error: 108 cprintf("_oserror is %d\r\n", _oserror); 109 } 110 111 void main(unsigned char app_number) { 112 113 dhandle_t handle; 114 115 cgetc(); 116 clrscr(); 117 cputs("DIO test.\r\n"); 118 cprintf("My application number is %d.\r\n", app_number); 119 cgetc(); 120 print_stack_pointers(); 121 cputs("Opening card\r\n"); 122 handle = dio_open(app_number); 123 if(_oserror != 0) { 124 cprintf("_oserror is %d\r\n", _oserror); 125 goto done; 126 } 127 read_test(handle); 128 write_test(handle); 129 dio_close(handle); 130 done: 131 cputs("Done.\r\n"); 132 cgetc(); 133 };