(C) 1997 CARDINAL
IM 2 mode when working TR-DOS.
__________________________________________
*
Today we talk about disk loader. If you do not understand my
point, I will explain. Who saw INSULT MEGADEMO or BATTLE
COMMAND (cracked by STALKER), they probably noticed that there
LOADER'y music, precisely on such LOADER'ah go to our
conversation. Combine music, begushku and others bells and
whistles to boot is not as difficult as I think. It should be
music and other bells and whistles to put on break and leave as
LOADER there. What should be LOADER? He
should work with the ports of the SH is not directly
disable interruptions during the work, and
on a technical matter. Although there is a caveat
in this case. It is necessary to organize
interruption, and as I shall now explain. At the time of
arrival of the next pulse interrupt rests on a stack return
address, if this point was included ROM TR-DOS, then
it turns off and begins to work our
interrupt handler. When our
programm interrupt will
their job, then she returns to the main
program on RET or RETI. And that was not
calving when you return it in the ROM TR-DOS,
should instead RET or RETI should be put JP
# 3D2F. Below is an approximate version
LOADER'a.
ORG 25000
DI
LD SP, 24999
CALL 49152; initialize
DI; music
LD HL, # BE00; organize
LD D, H; interrupt
LD E, L
LD B, L
LD C, L
INC E
INC B
LD (HL), # BF
LD A, H
IM 2
LD I, A
LDIR
EI
LD DE, # 0100; put in DE
; Track and sector
LD HL, # 4000; in HL address
LD B, # 1B; length in B
CALL LOADER; launch
JOY1 LD A, # 7F
IN A, (254), after loading
RRCA; waits
JR C, JOY1; SPACE
CALL 49152; extinguish music
DI
RET; Returns
LOADER LD A, (# 5CF6)
INC E
LD (PUT_DR +1), A
LD A, I
LD A, # F3
JP PO, INT
LD A, # FB
INT LD (PUT_INT), A
LOOP LD A, D
AND A
RRA
LD C, # 7F
CALL DOS
LD A, # 3C
JR NC, PUT_DR
LD A, # 2C
PUT_DR OR 0
LD C, # FF
CALL DOS
LD A, # 18
PUSH BC
PUSH DE
LD BC, # 011F
CALL DOS
LD IX, # 3EF5
CALL TRDOS
LD D, A
LD IX, # 20B1
CALL TRDOS
POP DE
POP BC
LOOP1 PUSH BC
PUSH DE
LD A, E
LD C, # 5F
CALL DOS
LOOP2 PUSH HL
LD C, # 1F
LD A, # 80
CALL DOS
LD C, # 7F
LD IX, # 3FD5
CALL TRDOS
JP P, REPEAT
CALL CH_REG
PUT_IN NOP
POP HL
LD A, (# 5CD6)
OR A
JR NZ, LOOP2
LD A, # 7F; Examine the cluster
IN A, (254); hang in SPACE
RRCA; load time
CALL NC, KON; call podprog
; FRAMEWORK if it was
; Depression
POP DE
POP BC
INC H
BIT 4, E
JR NZ, N_TR
INC E
DJNZ LOOP1
JR OK_QUIT
N_TR LD E, # 01
INC D
DJNZ LOOP
OK_QUIT DEC E
LD (# 5CF4), DE; before leaving
; Keep track
; And Gaza
RET
KON DI; prohibit interrupt
; Tion
LD A, # F3; put byte # F3
LD (PUT_INT), A; in cell PUT_INT
XOR A; restore
LD I, A; the former regime
IM 1; interrupt
LD C, # FD; purify AY CHIP
LD H, A
QUIT1 LD B, # FF
OUT (C), A
LD B, # BF
OUT (C), H
INC A
CP 1916
RET Z
JR QUIT1
RET; curves. of podprog
; FRAMEWORK
; All this wash is needed to ensure that when
; Pressing SPACE at boot time, distance, Shai download went at
normal speed
CH_REG XOR A; read register
LD (# 5CD6), A; state
LD HL, # 0007
PUSH HL
INC A
PUSH AF
LD IX, # 2099
JR TRDOS
REPEAT POP HL
POP DE
POP BC
JP LOOP
DOS LD IX, # 2A53
TRDOS PUSH IX
JP # 3D2F
ORG # BFBF; interrupt processing
PUSH AF; tion
PUSH HL
PUSH DE
PUSH BC
PUSH IX
PUSH IY
CALL 49158; launch music
POP IY
POP IX
POP BC
POP DE
POP HL
POP AF
EI
JP # 3D2F; transition to address
; # 3D2F where there is
; RET
And now a brief comment. Do not hang a lot of bells and
whistles to interrupt, otherwise the download will be slower,
than with the deck. Last track and
sector is stored in cell # 5CF4. All addresses in the listing
are arbitrary, and in this change them into convenient for you,
in the case necessary. Actually LOADER can be
any, if only he did not forbid interrupts and
do not crash when an error reading.
END ...