ZXNet эхоконференция «code.zx»


тема: Turbo loader



от: Oleg Grigoriev
кому: Yuri Nazarenko
дата: 25 Jul 1999

Пусть враги твои, Yuri, умрут без сыновей!

Thu 15 Jul 1999 at 23:01, Yuri Nazarenko ═> Oleg Grigoriev:

OG>> Обычным способом. Только прерывания не запрещаются никогда. После
OG>> чтения
OG>> сектора
OG>> проверяешь "а не было ли потери данных?".

YN> Обычным способом это через #3d13 ? И как сделать чтоб
YN> прерывания никогда не запрещались. Я пробовал так делать
YN> следующим образом :
YN> org 23746
YN> ei
YN> ret
YN> тоесть по адресу 23746 ставил разрешение прерываний. А как я
YN> знаю к этому дресу тр-дос обращается регулярно.

Это бессмысленно. Они в досе где попало запрещаются. Через #3d2f,
естественно.

YN> И как можно проверить "а не было ли потери данных?"

Проверив соответствующий бит регистра состояния. Впрочем, достаточно
выяснить, что была ошибка. Какая - не важно. #2099 в этом плане достаточно
универсальная точка входа.

OG>> Или тебе именно исходник надо? Hу, минут на десять работы. :)

YN> Hу если можно, то хотелось бы увидеть.
YN> Заранее спасибо.

Hу, заняло это таки не десять минут (в основном из-за бордюра), да и
потормозил я капитально; но - вот:

────[ Здесь начинается файл multi_ld.C ]───────────────────────
DRIVE EQU #00

ORG #6000
LD HL,#BE00
LD (HL),H:INC (HL),L:JR NZ,$-#03
LD A,H,I,A
INC H:LD (HL),H,L,H
LD (HL),#C3:INC L
LD (HL),INT]:INC L
LD (HL),INT[
IM 2
EI

LD A,#3C!DRIVE:CALL TOPRFF
LD A,#08:CALL COMWG

LD B,#01,DE,#2604

LOOP PUSH BC
LD B,#1B,HL,#4000

LOOP1 CALL RSEC:JR C,LOOP1
INC H,E:BIT 4,E:JR Z,$+#05
LD E,#00:INC D
DJNZ LOOP1

POP BC
DJNZ LOOP

HALT
XOR A:IN (#FE):CPL:AND #1F
JR Z,$-#07
RET

;***************************************
;
INT PUSH AF,BC

LD A,#01:OUT (#FE)
INTD LD B,#3E
INTD1 LD A,#0E:DEC A:JP NZ,$-#01
NOP
DEC B:JR NZ,INTD1

LD A,#04:DEC A:JP NZ,$-#01
LD A,#07:OUT (#FE)
.3 NOP
RLCA:DEC A:JP NZ,$-#01
OUT (#FE)

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

INTT LD A,#00:OR A
LD A,(INTD+#01):JR NZ,INTT0
INC A:CP #3F:JR NZ,INTT1
LD (INTT+#01),A
JR INT1

INTT0 DEC A:JR NZ,INTT1
LD (INTT+#01),A
JR INT1

INTT1 LD (INTD+#01),A

INT1 POP BC,AF
EI
JP #3D2F

;***************************************
;
RSEC PUSH HL,DE,BC
SRL D
LD A,#3C!DRIVE:JR NC,$+#04
LD A,#2C!DRIVE
CALL TOPRFF
LD A,D:CALL TOPR7F
LD A,#18:CALL COMWG

LD A,(#5CD6):PUSH AF
LD A,E:INC A:CALL TOPR5F
LD BC,RSEC1:PUSH BC
LD BC,$:PUSH BC
LD B,#01:PUSH BC
LD BC,#2099:PUSH BC
LD BC,#3FD7:PUSH BC
LD A,#80:CALL TOPR1F
LD BC,#017F,D,C
JP #3D2F

RSEC1 POP BC:LD A,(#5CD6)
CP B
LD A,B,(#5CD6),A
POP BC,DE,HL
SCF:RET NZ
CCF:RET

;---------------------------------------
;
COMWG CALL TOPR1F
INTRQ LD IX,#3FE5:JR DOS

TOPR1F LD C,#1F:JR TOPR
TOPR5F LD C,#5F:JR TOPR
TOPR7F LD C,#7F:JR TOPR
TOPRFF LD C,#FF
TOPR LD IX,#2A53
DOS PUSH IX:JP #3D2F




────[ Здесь кончается файл multi_ld.C ]────────────────────────

Бордюрное барахло фиксено под вэйтовый в нетурбе скорп. Мой скорп. :)

[ WBR, Oleg. ]
[ 19:39 25 July XXXIV A.S. ]




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

Похожие статьи:
Millennium 2003 - Как вы уже догадались, сегодня наша цель - Millеnnium 2ОО3.
Hint - как трахнуть пилота в Sea Quest.
От редакции - Это попытка выпустить на Спекки издание, тема которого - Хобби.
Реклама - Реклама и объявления ...
Юмор - Эротические анекдоты.

В этот день...   20 апреля