User Tag List

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

Тема: Вектор-06Ц: Операционные системы

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    06.02.2018
    Адрес
    г. Волгоград
    Сообщений
    1,065
    Спасибо Благодарностей отдано 
    582
    Спасибо Благодарностей получено 
    471
    Поблагодарили
    253 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    electroscat, для большего понимания (или запутывания) работы инициализатора могу привести его дизассемблированный код:

    mdos31h.asm

    Код:
            ORG    00100h
    L_0100: JMP     L_0210
    ;---------------------
    L_0103: LHLD    L_0201 ; загрузить в HL данные с адреса L_0201 (= 2000h)
            MOV  B, H
            MOV  C, L      ; в BC -- сколько
            LDA     00002h ; в А из памяти с адр.00002h
            SUB  B         ; вычесть B из А
            MOV  D, A
            MVI  E, 000h   ; в DE -- куда
            PUSH D
            PUSH B
            PUSH D
            LXI  H, L_0300 ; откуда
    L_0115: MOV  A, B
            ORA  C
            JZ      L_0122
            DCX  B
            MOV  A, M      ; считать по адресу в HL
            STAX D         ; записать по адресу в DE
            INX  D
            INX  H
            JMP     L_0115
    ;
    L_0122: POP  D
            POP  B
            PUSH H
            MOV  H, D
            DCR  H
    L_0127: MOV  A, B
            ORA  C
            JZ      L_0145 ; ---------->>>>>>>>
            DCX  B
            MOV  A, E
            ANI     007h
            JNZ     L_0138
            XTHL
            MOV  A, M      ; ?????? (02300h...026FFh)
            INX  H
            XTHL
            MOV  L, A
    L_0138: MOV  A, L
            RAL
            MOV  L, A
            JNC     L_0141
            LDAX D
            ADD  H
            STAX D
    L_0141: INX  D
            JMP     L_0127
    ;
    L_0145: POP  H
            RET            ; ==============>>>>>>>>>>>>>>> запуск (0B500h)
    ; --- вырезано цензурой --------------------------------------------
    L_0200: db 000h	; <_> - |        | (offset 0100h)
    L_0201: db 000h	; <_> - |        | (offset 0101h)
            db 020h	; < > - |  ■     | (offset 0102h)
    ; --- вырезано цензурой --------------------------------------------
    ;
    L_0210:	DI
            LXI  SP,0100h  ; стек == 0100h
            LXI  H, 0D00h  ; сколько
            LXI  D, L_2700 ; откуда
            LXI  B, 0F300h ; куда
            CALL    L_02A6 ; переброска данных
            CALL    0F800h ; вызов START BIOS (в т.ч. включение КД)
            PUSH H	; ??? -- он и так сохранится...
            MVI  A, 0C0h
            LXI  B, 0A020h
            MVI  B, 0A0h   ; почему не LXI B,0A020h ???
            MVI  C, 020h
    ;;;     LXI  B, 0A020h
    L_022A: MVI  D, 008h   ; от HL=0EF00h до HL=0F100h
    L_022C: MOV  M, A      ; заполняем "C0 A0...", "C1 A1...", ...
            INX  H
            MOV  M, B
            INX  H
            DCR  D
            JNZ     L_022C
            INR  A
            INR  B
            DCR  C
            JNZ     L_022A
            POP  H         ; восстанавливаем HL (0EF00h)
            LXI  B, 00200h
            DAD  B         ; HL = HL+DE = 0F100h
            MVI  A, 080h
            MVI  C, 000h
    L_0243: MOV  M, A      ; от HL=0F100h до HL=0F300h
            INX  H         ; заполняем строки "80 80 40 40 ... 01 01"
            MOV  M, A
            INX  H
            RRC
            DCR  C
            JNZ     L_0243
            MVI  C, 01Bh   ; символ очистки экрана
            CALL    0F809h ;-BIOS-(вывод символа)----->>>>>>>>>>
            MVI  C, 045h   ; установка латинской клавиатуры
            CALL    0F809h ;-BIOS-(вывод символа)----->>>>>>>>>>
            LXI  H, 128Eh  ; сколько
            LXI  D, L_3400 ; откуда
            LXI  B, 0D800h ; куда
            CALL    L_02A6 ; переброска данных (часть 2)
            CALL    L_468E ; инициализация НЖМД
            LXI  H, 0D500h ;
            SHLD    00001h ; заносим 00 по адресу 0001 и 0D5h по адресу 0002
            MVI  A, 0F7h
            STA     00000h ; заносим RST 6 по адресу 0000
            LXI  D, L_029E ; откуда
            LXI  B, 00030h ; куда
            LXI  H, 00008h ; сколько
            CALL    L_02A6 ; переброска данных (для RST 6)
            IN      001h
            ANI     040h   ; нажата клавиша УС?
            CZ      0D81Bh ; форматнуть КД
            MVI  A, 081h
            OUT     004h
            MVI  A, 0FFh
            OUT     005h
            OUT     006h
            MVI  A, 00Dh
            OUT     007h
            MVI  A, 0EFh
            OUT     005h
            MVI  A, 0FFh
            OUT     005h
            OUT     007h
            JMP     L_0103
    ;
    L_029E: db 03Eh	; <>> - |  ■■■■■ | (offset 019Eh) (для RST)
            db 023h	; <#> - |  ■   ■■| (offset 019Fh)
            db 0D3h	; <╙> - |■■ ■  ■■| (offset 01A0h)
            db 010h	; <_> - |   ■    | (offset 01A1h)
            db 02Ah	; <*> - |  ■ ■ ■ | (offset 01A2h)
            db 001h	; <_> - |       ■| (offset 01A3h)
            db 000h	; <_> - |        | (offset 01A4h)
            db 0E9h	; <щ> - |■■■ ■  ■| (offset 01A5h)
    ;
    L_02A6: LDAX D         ; ПП переброски данных
            STAX B
            INX  D
            INX  B
            DCX  H
            MOV  A, L
            ORA  H
            JNZ     L_02A6
            RET
    ;
    ; --- вырезано цензурой --------------------------------------------
    L_0300: db 021h	; <!> - |  ■    ■| (offset 0200h)
    ; --- вырезано цензурой --------------------------------------------
    L_0D00: db 00Dh	; <_> - |    ■■ ■| (offset 0C00h)
            db 03Ah	; <:> - |  ■■■ ■ | (offset 0C01h)
    ; --- вырезано цензурой --------------------------------------------
            db 000h	; <_> - |        | (offset 21FFh)
    ;
            db 020h	; < > - |  ■     | (offset 2200h)
            db 002h	; <_> - |      ■ | (offset 2201h)
    ; --- вырезано цензурой --------------------------------------------
            db 000h	; <_> - |        | (offset 25FEh)
            db 000h	; <_> - |        | (offset 25FFh)
    ;
    L_2700: db 000h	;(offset 2600h) BIOS >>> F300h
    ;==== вырезано цензурой =============================================
    ;
    L_3400: db 0C3h	;(offset 3300h) часть 2 >>> D800h
    ;==== вырезано цензурой =============================================
    ;
    L_468E: XRA  A
            STA     0E86Fh	; дорожка, =0
            MVI  A, 0FFh
            STA     0E86Dh	; сектор, =-1 (FFh)
            CALL    0D82Dh	; ---------->>>>>>>>>>>> грузит сектор в EB00-ED00
            JNZ     L_468E
            LDA     0EB80h	; читает из буфера EB00-ED00 количество секторов
            MOV  L, A
            MVI  H, 000h
            PUSH H		; (в стек сектора)
            SHLD    0D88Dh	; -- сохр. количество секторов НЖМД
            CALL    L_46CD	; HL = -(HL * 10h) + 1
            SHLD    0D887h	; -- патч драйвера НЖМД
            POP  D		; (сектора из стека)
            LXI  H, 00000h
            LDA     0EB81h	; читает из буфера EB00-ED00 количество головок
    L_46B4: DAD  D
            DCR  A
            JNZ     L_46B4	; HL = секторов * головок
            SHLD    0D8FAh	; -- патч драйвера НЖМД
            CALL    L_46CD	; HL = -(HL * 10h) + 1
            SHLD    0D8F4h	; -- патч драйвера НЖМД
            LHLD    0EB84h	; читает из буфера EB00-ED00 количество дискет на НЖМД
            CALL    L_46D8	; инверсия HL
            DCX  H
            SHLD    0D920h	; -- патч на максимальное количество дискет НЖМД
            RET
    ;
    L_46CD: MVI  B, 010h
            XCHG
            LXI  H, 00000h
    L_46D3: DAD  D
            DCR  B
            JNZ     L_46D3
    L_46D8: MOV  A, H
            CMA
            MOV  H, A
            MOV  A, L
            CMA
            MOV  L, A
            INX  H
            RET
    ;
            END
    [свернуть]
    Это всё получено из файла с Базиса, большие части файла, состоящие из наборов данных (DB...) из текста я просто вырезал, их я дизассемблирвал только частично, в отличие от Т-34 и Т-72, приведённых тут ранее. При необходимости можете посмотреть и восстановить их из исходного файла mdos31h.com...
    Последний раз редактировалось Improver; 30.03.2020 в 09:55.

    Этот пользователь поблагодарил Improver за это полезное сообщение:

    electroscat(30.03.2020)

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

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

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

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

Похожие темы

  1. Ответов: 213
    Последнее: 13.06.2022, 14:02
  2. Ответов: 4
    Последнее: 20.08.2007, 16:14
  3. Организация plug-in'нной системы
    от CityAceE в разделе Программирование
    Ответов: 9
    Последнее: 20.09.2005, 12:45
  4. Описание системы команд - давайте централизуем ;)
    от Alex/AT в разделе Программирование
    Ответов: 42
    Последнее: 09.07.2005, 22:34
  5. Инициализация системы
    от breeze в разделе Программирование
    Ответов: 13
    Последнее: 24.03.2005, 10:03

Ваши права

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