ULONG iobase = SHArg(IOBASE) ? *SHArg(IOBASE) : SAGA_SD_BASE; ULONG pattern = SHArg(PATTERN) ? *SHArg(PATTERN) : 0x5af00000; BOOL readTest = SHArg(READ); BOOL writeTest = SHArg(WRITE); ULONG retry = SHArg(RETRY) ? *SHArg(RETRY) : 5; int i; ULONG test_block; UBYTE err; struct sdcmd sd = {}; setBases(SysBase, DOSBase); DebugLevel = SHArg(DEBUG) ? *SHArg(DEBUG) : 0; Printf("DebugLevel: %ld\n", DebugLevel); sd.iobase = iobase; sd.retry.read = retry; sd.retry.write = retry; sd.func.log = sdcmd_log; err = sdcmd_detect(&sd); if (!err) { Printf("SD Card Detected on $0x%lx:\n", iobase); Printf("Block Size: %ld\n", sd.info.block_size); Printf("Blocks: %ld\n", sd.info.blocks); Printf("Capacity: "); if (sd.info.blocks < 1024*2) { Printf("%ldK\n", (sd.info.blocks + 1) / 2); } else if (sd.info.blocks < 1024*1024*2) { Printf("%ldM\n", (sd.info.blocks + 1024*2-1) / 1024 / 2); } else { Printf("%ldG\n", (sd.info.blocks + 1024*1024*2-1) / 1024 / 1024 / 2); } Printf("OCR: %08lx\n", sd.info.ocr); Printf("CID:"); for (i = 0; i < 16; i++) Printf(" %02lx", sd.info.cid[i]); Printf("\n"); Printf("CSD:"); for (i = 0; i < 16; i++) Printf(" %02lx", sd.info.csd[i]); Printf("\n"); } else { Printf("SD Card Detection Error: %lx\n", err); return RETURN_FAIL; } test_block = sd.info.blocks - 16; if (writeTest) { for (i = 0; i < ARRAY_SIZE(write_buffer); i++) write_buffer[i] = pattern + i; Printf("WRITE Test: %ld bytes, at block %ld: ", 512, test_block); err = sdcmd_write_block(&sd, test_block, (UBYTE *)&write_buffer[0]); if (err) { Printf("FAILED WRITE, err=0x%02lx\n", err); return RETURN_FAIL; } err = sdcmd_read_block(&sd, test_block, (UBYTE *)&read_buffer[0]); if (err) { Printf("FAILED READBACK, err=0x%02lx\n", err); return RETURN_FAIL; } err = 0; for (i = 0; i < 512/sizeof(ULONG); i++) { if (read_buffer[i] != write_buffer[i]) { if (!err) { Printf("FAILED DATA:\n"); } err++; Printf("$%04lx: $%08lx [expected $%08lx]\n", i*sizeof(ULONG), read_buffer[i], write_buffer[i]); } } if (err) return RETURN_FAIL; Printf("PASSED\n"); Printf("WRITE Test: %ld bytes, at block %ld: ", 512*15, test_block); err = sdcmd_write_blocks(&sd, test_block+1, (UBYTE *)&write_buffer[512/sizeof(ULONG)], 15); if (err) { Printf("FAILED WRITE, err=0x%02lx\n", err); return RETURN_FAIL; } err = sdcmd_read_blocks(&sd, test_block+1, (UBYTE *)&read_buffer[512/sizeof(ULONG)], 15); if (err) { Printf("FAILED READBACK, err=0x%02lx\n", err); return RETURN_FAIL; } err = 0; for (i = 0; i < 15 * 512/sizeof(ULONG); i++) { if (read_buffer[512/sizeof(ULONG) + i] != write_buffer[512/sizeof(ULONG) + i]) { if (!err) { Printf("FAILED DATA:\n"); } err++; Printf("$%04lx: $%08lx [expected $%08lx]\n", i*sizeof(ULONG), read_buffer[512/sizeof(ULONG) + i], write_buffer[512/sizeof(ULONG) + i]); } } if (err) return RETURN_FAIL; Printf("PASSED\n"); } if (readTest) { Printf("READ Test: %ld bytes, at block %ld: ", 512, test_block); err = sdcmd_read_block(&sd, test_block, (UBYTE *)&read_buffer[0]); if (err) { Printf("FAILED READ, err=0x%02lx\n", err); return RETURN_FAIL; } Printf("PASSED\n"); Printf("READ Test: %ld bytes, at block %ld: ", 512*15, test_block); err = sdcmd_read_blocks(&sd, test_block+1, (UBYTE *)&read_buffer[512/sizeof(ULONG)], 15); if (err) { Printf("FAILED READ, err=0x%02lx\n", err); return RETURN_FAIL; } Printf("PASSED\n"); } return RETURN_OK; AROS_SHCOMMAND_EXIT }
#include <proto/dos.h> #include <string.h> #define SH_GLOBAL_SYSBASE 1 /* for kprintf() */ #include <aros/shcommands.h> AROS_SH2(KEcho, 41.1, AROS_SHA(STRPTR *, , STRINGS, /M, NULL), AROS_SHA(BOOL, , NOLINE, /S, FALSE)) { AROS_SHCOMMAND_INIT LONG error = 0; STRPTR *a; a = SHArg(STRINGS); if (a) while (*a != NULL) { kprintf("%s", *a); a++; if (*a) kprintf(" "); } if (!SHArg(NOLINE)) kprintf("\n"); return error; AROS_SHCOMMAND_EXIT
static void printProcess(struct DosLibrary *DOSBase, BOOL full, BOOL tcb, struct Process *process); static void PrintF(struct DosLibrary *DOSBase, STRPTR format, ...); AROS_SH5(Status,41.1, AROS_SHA(LONG *, ,PROCESS,/N,NULL), AROS_SHA(BOOL, , FULL,/S,FALSE), AROS_SHA(BOOL, , TCB,/S,FALSE), AROS_SHA(BOOL,CLI=,ALL,/S,FALSE), AROS_SHA(STRPTR,COM=,COMMAND,/K,NULL)) { AROS_SHCOMMAND_INIT struct RootNode *root = ((struct DosLibrary *)DOSBase)->dl_Root; int retval = RETURN_OK; BOOL full = SHArg(FULL); BOOL tcb = SHArg(TCB); BOOL all = SHArg(ALL); ULONG processNum = 0; STRPTR command = SHArg(COMMAND); if (SHArg(PROCESS) != NULL) { processNum = *SHArg(PROCESS); } if (!full && !tcb && processNum == 0 && command == NULL) { all = TRUE; }