Echo #01
31 октября 1996

Ассемблер - Turbo Loader с полным контролем ошибок.

<b>Ассемблер</b> - Turbo Loader с полным контролем ошибок.
(C) VfNG/NEW

   Предлагаю  к всяческому юзанию разрабо-
таный  мною  Turbo Loader с полным контро-
лем ошибок. Он проверен на всех попавшихся
мне  под  руку  машинах  (Profi, Pentagon,
'Ленинград',  'Байт')  и отлично работает!
Просьба, только, не исправлять в нем неко-
торые  'очевидные  глупости'.  Дело в том,
что  тот  дисковый  интерфейс,  которым мы
пользуемся  в Бресте, занимается эмуляцией
TR-DOS, посему некоторые процедуры ПЗУ ра-
ботают не совсем так, как положено, а ино-
гда  портят некоторые регистры... Например
в  #2A53  у  нас торчит JP <кое-куда>, где
находится  конвертер.  Отдельное обращение
ко  всей  братии:  не  лезьте  в  TR-DOS с
регистром  R (разве что в #3D2F,#3D30 мож-
но)-помрэць.

;-----------------------------------------
;'NEW' TURBO LOADER BY VfNG'96
;NEW ORIGINAL CONCEPTION + FULL ERROR
;CONTROL!
;-----------------------------------------
RETRY   EQU     3 ;Число попыток чтения
                  ;сбойного сектора до
                  ;перепозиционирования
;-----------------------------------------
        ORG     #8000
;-----------------------------------------
;Секция инициализации. Достаточно выз-
;вать один раз.
;-----------------------------------------
INIT    DI
        LD      A,#3F ;Установка вектора
        LD      I,A   ;I в 'быструю' па-
                      ;мять.

        LD      A,(#5D16)  ;определение
        AND     3          ;типа диско-
        LD      (REG+1),A  ;вода.
        LD      HL,#5CC8   ;
        ADD     A,L
        LD      L,A
        BIT     1,(HL)
        JR      NZ,LOAD8
        LD      HL,#A700
        LD      (POKE1),HL
        LD      (POKE2),HL
        LD      (POKE3),HL
        LD      A,#37
        LD      (POKE4),A
;-----------------------------------------
;Позиционирование. DE-трек/сектор. Если
;уже торчите на этой дорожке, то можно и
;не вызывать
;-----------------------------------------
LOAD8   CALL    POSIT
        RET
;-----------------------------------------
;Окончание инициализации. Теперь собст-
;венно загрузчик:
;HL-куда, B-сколько, DE-откуда
;возврат: DE-текущие трек/сектор
;         HL-адрес, куда был загружен
;         последний байт+1
;-----------------------------------------
LOAD    DI
LOAD5   PUSH    DE
        CALL    SECTOR
        POP     DE
        INC     H
        INC     E
        LD      A,E
        CP      #10
        JR      Z,LOAD2
LOAD6   DJNZ    LOAD5
        RET
LOAD2   LD      A,D
POKE4   RRA
        PUSH    AF
        LD      A,#3C
        JR      C,LOAD1
        LD      A,#2C
LOAD1   CALL    REG
        POP     AF
        LD      C,#3F
        CALL    PORT
        INC     D
        LD      E,0
        LD      A,D
POKE1   SRL     A
        LD      C,#7F
        CALL    PORT
        LD      A,#18
        LD      IX,#2FC3
        CALL    DOS
        JR      LOAD6
;-----------------------------------------
SECTOR  LD      C,RETRY
SECTOR1 PUSH    BC
        LD      A,E
        INC     A
        LD      C,#5F
        CALL    PORT
        LD      A,#80
        LD      C,#1F
        CALL    PORT
        PUSH    HL
        LD      C,#7F
        LD      IX,#3FE5
        CALL    DOS
        CALL    STATUS
        POP     HL
        POP     BC
        RET     Z
        DEC     C
        JR      NZ,SECTOR1
        CALL    REPOS
        JR      SECTOR
;-----------------------------------------
STATUS  PUSH    DE
        XOR     A
        LD      C,#3F
        CALL    PORT
        LD      A,#0A
        LD      C,#5F
        CALL    PORT
        LD      D,1
        LD      IX,#3F33
        CALL    DOS
        POP     DE
        LD      A,B
        AND     #7F
        PUSH    AF
        LD      A,D
POKE2   SRL     A
        LD      C,#3F
        CALL    PORT
        POP     AF
        RET
;-----------------------------------------
REPOS   LD      A,%11011000
        CALL    COMM2
        LD      A,8
        CALL    COMM3
;-----------------------------------------
POSIT   LD      A,D  ;Позиционирование
POKE3   SRL     A
        PUSH    AF
        LD      A,#2C
        JR      C,REPOS1
        LD      A,#3C
REPOS1  CALL    REG
        POP     AF
        LD      C,#7F
        CALL    PORT
        LD      A,#18
        JR      COMM3
;-----------------------------------------
REG     OR      0
        LD      IX,#1FF3
DOS     PUSH    IX
        JP      #3D30
PORT    LD      IX,#2A53
        JR      DOS
COMM2   LD      IX,#2F57
        JR      DOS
COMM3   CALL    COMM2
        LD      C,5       ;очень, кажет-
;ся, большая пауза, но иначе эта хрень не
;будет работать на 'Байте'.

COMM3_1 PUSH    BC
        LD      IX,#3DFD
        CALL    DOS
        POP     BC
        DEC     C
        JR      NZ,COMM3_1
        RET
;-----------------------------------------

   Вот  и  все! Убедительная просьба, если
у  кого-либо штучка сия не заработает, пи-
шите немедленно в Echo!



Другие статьи номера:

Введение - Об управлении интерфейсом газеты.

Ассемблер - Turbo Loader с полным контролем ошибок.

Интервью - Интервью с художником белоруссии - KAMIKAZE.

Фантастика - Эрис Лоренс "Этот проклятый компьютер".

HELP - Описание игры LORDS OF CHAOS.

ZX-PROFI - Управление ресурсами. Карта компьютера в системе SP-DOS. Подключение дисководов 5.25/1.2Мб, 3.5/1.44 к SPECCY.

Ассемблер - Изображение трехмерных объектов. Быстрый вывод точки AT X,Y. Процедура умножения.

Музыкальная плата - Azuru SounDrive v8.6 (QUADRO) - музыкальная плата для Спектрума - технические характеристики, программирование платы, схема подключения.

Приколы - Описание ЕСННС (Единый Стандарт на Совкового СисОпа).

Прогноз - Астрологический прогноз на SPECCY.

Реклама - Реклама и объявления ...

Credits - авторы газеты.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Очумелые ручки - Слотовая система.
От авторов - Авторы и контакты.
Перед судом истории - О себе, о "Страннике", и о тех, кто рядом.
Найдено в интернете - Hacker online: Какинг.
INTRO - Юбилейный выпуск

В этот день...   21 ноября