eris2010

Documentation: http://frombelow.net/projects/eris2010/
Clone: git clone https://git.frombelow.net/eris2010.git
Log | Files | Refs | Submodules | README | LICENSE

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 };