
Сообщение от
AFZ
Прилетел тебе номер блока для ZF6:, и ты отдал его прямо в регистры CF-карты? А потом для ZF0:...
Код:
LET R5 := CFCQE ; Get current queue element
LET CMD := #CS.RD ; Read command
LET R1 := Q$WCNT(R5) ; Word count (positive - reading, negative - writing)
IF RESULT IS MI THEN ; Reading?
LET R1 := - R1 ; No, writing, invert word count
LET CMD := #CS.WT ; Write command
END
LET R4 := R4 + #P$STAT-P$CSR2
CALL CFWAIT
; 1. P$DH - 34
.ASSUME P$CMD EQ P$STAT
.ASSUME P$DH EQ <P$CMD-2>
LET -(R4) := #DH.PRM ; Master
; 2. P$CYLH - 32
LET R0 :B= Q$UNIT(R5) ; Unit
LET R0 := R0 OFF.BY #^C<7> ; number
LET R3 :B= Q$2UNI(R5) ; 10..77 ?
IF RESULT IS MI THEN ; MI - yes
LET R3 :B= NOT R3
END
LET R3 := R3 OFF.BY #^C<Q.2MSK> R.SHIFT 1 ; High 3 bits of unit number mask
; to proper position
LET R0 :B= R0 SET.BY R3 ; High and low bits of unit number
.ASSUME P$CYLH EQ <P$DH-2>
LET -(R4) := R0 ;
.ASSUME Q$BLKN EQ 0
LET R0 := (R5) ; Block number
; 4. P$CYLL - 30
.ASSUME P$CYLL EQ <P$CYLH-2>
SWAB R0 ; Block number - cyl low - high byte .. to low byte
LET -(R4) := R0
; 3. P$SNUM - 26
.ASSUME P$SNUM EQ <P$CYLL-2>
SWAB R0 ; Block number - sector - high byte .. to low byte
LET -(R4) := R0 ; Block number - sector - low byte
; 5. P$SCNT - 24
LET R2 := R1 + #^O<377> ; round up to next sector count
SWAB R2 ; .. to low byte
.ASSUME P$SCNT EQ <P$SNUM-2>
LET -(R4) := R2
LET R2 := Q$BUFF(R5) ; Buffer address
; 6. P$CMD - 36
LET R4 := R4 + #P$STAT-P$SCNT
LET (R4) := CMD ; 36
Ты как обычно - не знаешь, о чём говоришь
- - - Добавлено - - -

Сообщение от
AFZ
Так обидно же. Замечательный проект, а с дисками какие-то допотопные решения...
Представляешь - ещё и самодостаточный - человек берет одну(!) плату - и получает готовый комп. И с драйверами под не одну систему. Кроме графики - ничего докупать не надо. Но и над графикой ведётся работа.