
Сообщение от
Sandro
Исключено.
Ну тогда у меня есть такое предположение.
Вот как читает байт классическая п/п драйвера магнитофона БК10:
Код:
; Вход: R1 - адрес ОЗУ
; R2 - длина блока
PCTBL: mov #10, R0
3$: call PCTBIT ; читаем бит
cmp R4, GRDL0
bhi 1$
clc
br 2$
1$: sec
2$: rorb (R1)
sob R0, 3$
add INCADR, R1
sob R2, PCTBL
return
; End of function PCTBL
Вот как читает байт п/п драйвера магнитофона БК11:
Код:
GetDaX: Add IncADR,R1 ;Go next Address
Bit #140000,R1
Beq 10$
Add #2,AdrSel
Mov @AdrSel,@R3 ;Set New Sel1 Value
10$:
GetDat: Bic #140000,R1
Mov #8.,R0 ;Bit per Byte Counter
10$: Call GetBit ;Get Data bit
Cmp R4,BitLng ;Check bit Value
Bhi 20$
Tst (PC)+ ;Zero, Clear Carry
20$: SeC ;One, Set Carry
30$: RorB Window(R1) ;Shift Data bit in
Sob R0,10$ ;Byte loop
Sob R2,GetDaX ;Data Block Loop
Return
переключение страниц делается между прочитанными байтами
А вот как читает байт п/п драйвера магнитофона БК11М:
Код:
; Чтение блока.
; Вход: R1 - адрес
; R2 - длина в байтах
ReadBlk1$: ; CODE XREF: ReadFile$+46P
; ReadBlk1$+44j
mov #10, R0
loc_156354: ; CODE XREF: ReadBlk1$+36j
call CalcPulse$ ; счёт импульсов
; Выход: R4 - длительность импульса
cmp R4, 42676 ; это что?
bhi loc_156370 ; "1"
tst (PC)+ ; "0"
; ───────────────────────────────────────────────────────────────────────────
loc_156370: ; CODE XREF: ReadBlk1$+14j
sec
loc_156372: ; CODE XREF: ReadBlk1$+16^
mov @#114, @R3 ; подключаем страницы из БП
mov @R3, R4
rorb @R1 ; сохраняем бит
mov #54002, @R3 ; восстанавливаем ПЗУ
sob R0, loc_156354 ; и так все 8 битов
add 42674, R1 ; изменение адреса
sob R2, ReadBlk1$ ; и так весь блок
return
ненужное переключение страниц делается каждый бит. Из-за чего быстродействия может тупо не хватить.