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. ]
|