sdctMain:
       ld      hl, .sWriting
       call    printstr
       ld      hl, 0
       ld      de, SDCT_RAMSTART
wLoop:
       ld      a, (de)
       ; To avoid overwriting important data and to test the 24-bit addressing,
       ; we set DE to 12 instead of zero
       push    de              ; <|
       ld      de, 12          ;  |
       call    sdcPutB         ;  |
       pop     de              ; <|
       jr      nz, .error
       inc     hl
       inc     de
       ; Stop looping if DE == 0
       xor     a
       cp      e
       jr      nz, .wLoop
       ; print some kind of progress
       call    printHexPair
       cp      d
       jr      nz, .wLoop
       ; Finished writing
       ld      hl, .sReading
       call    printstr
       ld      hl, 0
       ld      de, SDCT_RAMSTART
rLoop:
       push    de              ; <|
       ld      de, 12          ;  |
       call    sdcGetB         ;  |
       pop     de              ; <|
       jr      nz, .error
       ex      de, hl
       cp      (hl)
       ex      de, hl
       jr      nz, .notMatching
       inc     hl
       inc     de
       ; Stop looping if DE == 0
       xor     a
       cp      d
       jr      nz, .rLoop
       cp      e
       jr      nz, .rLoop
       ; Finished checking
       xor     a
       ld      hl, .sOk
       jp      printstr        ; returns
notMatching:
       ; error position is in HL, let's preserve it
       ex      de, hl
       ld      hl, .sNotMatching
       call    printstr
       ex      de, hl
       jp      printHexPair    ; returns
error:
       ld      hl, .sErr
       jp      printstr        ; returns

sWriting:
       .db     "Writing", 0xd, 0xa, 0
sReading:
       .db     "Reading", 0xd, 0xa, 0
sNotMatching:
       .db     "Not matching at pos ", 0xd, 0xa, 0
sErr:
       .db     "Error", 0xd, 0xa, 0
sOk:
       .db     "OK", 0xd, 0xa, 0