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!
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября