User Tag List

Показано с 1 по 10 из 336

Тема: SD-контроллер от vinxru

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11
    Activist
    Регистрация
    02.01.2021
    Адрес
    г. Дмитров
    Сообщений
    322
    Спасибо Благодарностей отдано 
    77
    Спасибо Благодарностей получено 
    58
    Поблагодарили
    24 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Насколько я помню это просто загрузчик от оригинального проекта. И возможно там добавлен какой то кусок кода от ркшного монитора, на который ссылается потом sdbios и которого небыло в микроше

    ; SD BIOS for Computer "Radio 86RK" / "Apogee BK01"
    ; (c) 09-10-2014 vinxru ([email protected])

    .org 0e000h

    MONITOR equ 0F89dh ; Адрес собрата в Монитор
    USER_PORT equ 0f000H ; Адрес КР580ВВ55
    SEND_MODE equ 10000000b ; Режим передачи (1 0 0 A СH 0 B CL)
    RECV_MODE equ 10010000b ; Режим приема (1 0 0 A СH 0 B CL)

    ; Коды передаваемые микроконтроллером

    ERR_START equ 040h ; МК переключен в режим приема команд
    ERR_WAIT equ 041h ; МК выполняет команду
    ERR_OK_DISK equ 042h ; Накопитель исправен, микроконтроллер готов к приему команды
    ERR_OK equ 043h ; Команда выполнена
    ERR_OK_READ equ 044h ; МК готов передать следующий блок данных
    ERR_OK_ADDR equ 047h ; МК готов передать адрес загрузки
    ERR_OK_BLOCK equ 04Fh

    ;----------------------------------------------------------------------------
    ; Точка входа

    Entry:
    ; Первым этапом происходит синхронизация с контроллером
    ; 256 попыток. Для этого в регистр C заносится 0
    MVI C, 0

    Boot:
    ; Режим передачи (освобождаем шину) и инициализируем HL
    CALL RecvMode

    JMP Boot2

    ;----------------------------------------------------------------------------
    ; Отправка и прием байта (в HL должен находится USER_PORT)

    Rst1:
    ; Шина адреса используется как тактовый сигнал
    INX H
    MVI M, 20h
    MVI M, 0
    DCX H
    ; Прием байта
    MOV A, M
    RET

    ;----------------------------------------------------------------------------
    ; Ожидание готовности МК

    Rst2:
    WaitForReady:
    call Rst1
    CPI ERR_WAIT
    JZ WaitForReady
    RET

    ;----------------------------------------------------------------------------

    ; Начало любой команды (это шина адреса)
    Boot2:
    INR L
    MVI M, 0
    MVI M, 44h
    MVI M, 40h
    MVI M, 0h
    DCR L

    ; Если есть синхронизация, то контроллер ответит ERR_START по шине данных
    call Rst1
    CPI ERR_START
    JNZ RetrySync

    ; Инициализация флешки
    call Rst2
    CPI ERR_OK_DISK
    JNZ RetrySync

    ; Режим передачи
    call Rst1
    MVI A, SEND_MODE
    CALL SetMode

    ; Код команды BOOT
    MVI M, 0
    call Rst1

    ; Режим приема
    CALL RecvMode

    ; Это ответ команды BOOT
    call Rst2
    CPI ERR_OK_ADDR
    JNZ RetrySync

    ; Адрес загрузки в BC
    call Rst1
    MOV C, A
    call Rst1
    MOV B, A

    ; Сохраняем в стек адрес запуска
    PUSH B

    ; Файл может быть разбит на несколько частей
    RecvLoop:
    ; Все части загружены, можно запускать файл.
    call Rst2
    CPI ERR_OK_READ
    JZ Rst1

    ; Если МК прочитал блок без ошибок, будет передан ERR_OK_BLOCK
    CPI ERR_OK_BLOCK
    JNZ PrintError

    ; Размер блока данных
    call Rst1
    MOV E, A
    call Rst1
    MOV D, A

    ; Принимаем блок данных
    RecvBlock:
    MOV A, E
    ORA D
    JZ RecvLoop
    call Rst1
    STAX B
    INX B
    DCX D
    JMP RecvBlock

    ;----------------------------------------------------------------------------
    ; Повторные попыки

    RetrySync:
    ; Попытки
    DCR C
    JNZ Boot

    ;----------------------------------------------------------------------------
    ; Вывод кода ошибки

    PrintError:
    CALL 0F815h
    JMP MONITOR
    ;----------------------------------------------------------------------------
    ; Установка режима приема или передачи

    RecvMode:
    MVI A, RECV_MODE

    SetMode:
    LXI H, USER_PORT+3
    MOV M, A
    MVI L, 0
    RET

    .End
    Последний раз редактировалось sd; 13.04.2024 в 11:49.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Демка "Звёздные войны" для Апогея от Vinxru
    от Kakos_nonos в разделе Радио-86РК
    Ответов: 4
    Последнее: 12.07.2014, 21:57
  2. весточка от Vinxru
    от dk_spb в разделе Орион
    Ответов: 6
    Последнее: 15.03.2014, 19:12

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •