|
Echo
#01
31 октября 1996 |
|
Ассемблер - 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!
Другие статьи номера:
Похожие статьи:
В этот день... 15 ноября