А, всё, понял.
В бутсекторе записан формат диска
0000000010: 28 00 04 0F 00 8C 01 7F 00 C0 00 20 00 02
28 00 - это 40 секторов
04 - размер кластера
и дак далее все параметры диска в формате CP/M
Но все равно читается только первые 2 Кб
---------- Post added at 16:38 ---------- Previous post was at 15:49 ----------
Очепятка в программе была, вот и не читалось.
Вроде бы работает. Теперь можно писать CP/M BIOS для SD-карты. Только не сегодня.

Что бы мне было проще, я изменил конфигурацию компьютера в эмуляторе. Добавил еще один порт, в который записывается номер сектора. А через стандартный порт мы читаем сам сектор.
Код:
app : K580ww55 {
portA=romdisk.data
portB[0-6]=romdisk.addr[0-6]
}
app2 : K580ww55 {
portB[0-7]=romdisk.addr[7-E]
portC[0-7]=romdisk.addr[F-16]
}
mm : MemMap {
...
map[0][FF00-FFFF].wo=app2.data
}
А в CP/M написал
Код:
_READ: ; Отладочная информация
; ld c, '('
; call 0F809h
; ld a, (bios_track)
; call 0F815h
; ld a, (bios_sector)
; call 0F815h
; ld c, ')'
; call 0F809h
; Включаем второй порт
ld hl, 0FFF3h
ld (hl), 90h
; hl = bios_track * 40
ld a, (bios_track)
ld l, a
ld h, 0
add hl, hl
add hl, hl
ld bc, hl
add hl, hl
add hl, hl
add hl, bc
add hl, hl
; hl += bios_sector-1
ld a, (bios_sector)
dec a
ld c, a
ld b, 0
add hl, bc
; Пишем номер сектора
ld (0FFF1h), hl
; Загружаем сектор в ОЗУ
ld hl, (bios_addr)
ex hl, de
ld hl, 0
ld b, 128
ll: ld (0EE01h), hl
ld a, (0EE00h)
ld (de), a
inc hl
inc de
dec b
jp nz, ll
; Все ок
xor a
ret