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