Code: Select all
ÖÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ·
º TR-Dos system functions. º
ÓÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĽ
The system functions work with file and logical level of
disk structure. The entry point for system functions call is
15635. If TR-Dos is not initialized, init. subroutine
(15649) must be called before system calls. Function number
is placed in C register.
ÖÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ·
º C ³Function º
ÇÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
º Start of work with disk º
º #00 ³Microcontroller reset º
º #01 ³Read drive parameters. A=drive No. (0-3) º
º #18 ³Read disk parameters. 9th sector is read into buffer º
º ³placed after TR-Dos variables º
º Logical level º
º #05 ³Read sectors. HL=memory address, DE=start sector/trackº
º ³B=number of sectors º
º #06 ³Write sectors. Parameters are the same º
º File level º
º #07 ³Write current disk catalog into stream (number in A) º
º #08 ³Read catalogue entry (A=No.) into descriptor º
º #09 ³Write catalogue entry from descriptor º
º #0A ³Find entry, placed in descriptor, in disk catalog. º
º ³#23814-number of bytes to match. Returns:C=entry º
º ³found, #FF, if no º
º #0B ³Create file. HL=start address, DE=length, name and º
º ³type are in descriptor. º
º #0C ³Create BASIC-program (detailed previous function) º
º #0E ³Read/verify file. #23801:#00-read, #FF-verify. Also º
º ³can be given: HL-start, DE-length. If A=0, start and º
º ³length are taken from catalog, A=3 - only length is º
º ³taken from catalog, other cases - both HL and DE are º
º ³significant. º
º #12 ³Erase file. Name, type etc. are in descriptor. º
º Service functions º
º #13 ³Copy 16b from HL to descriptor º
º #14 ³Copy 16b from descriptor to HL º
º #17 ³Choose bottom disk side º
º #15 ³Test physical track while formatting. Track is given º
º ³in D, side - with previous operation. 23766 - number º
º ³of bad sectors on track º
ÓÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĽ
Other functions are used by TR-Dos and are useless for
programmer.
Other themes: TR-Dos system variables, BetaDisk
microcontroller programming.
Igor Yudincev ([email protected])
Text is written in IS-Editor v.1.1, 1.06.97
Code: Select all
15 MACHINE CODE PROGRAMMING
The inclusion of TRDOS routines in machine code programs are
relativey straightforward.
There are 3 elements required for the program:
(1) The machine code equivalent of the BASIC TRDOS command.
(2) The machine code routine to implement 1 above.
(3) The machine code routine to restore the system to its original
state before calling and executing the command.
The actual memory locations used will depend upon the program as a
whole. For the purpose of this example the location of the
routines will be at 49000 for the SAVE, at 49500 for the LOAD and
at 50000 for the instructions calling them. Thus item 1 will be at
either 49000 or 49500 and items 2 and 3 at 50000.
EXAMPLE:
Address Code Basic Comment
49000 234 REM Codes as in Appx A of Spectrum
49001 58 : manual
49002 248 SAVE
49003 34 "
49004 69 E
49005 120 x
49006 97 a
49007 109 m File name "Example"
49008 112 p
49009 108 l
49010 101 e
49011 34 "
49012 13 ENTER Always end with ENTER
The code for the LOAD commences at 49500 and is eaxctly the same
as above except that address 49502 will contain 239 (LOAD) instead
of 248 (SAVE).
These two routines, LOAD, and SAVE can be located anywhere, but
the initiator which we are locating at 50000 requires changing at
addresses 50007-50008 (Save routine address) and 50025 - 50026
(LOAD routine address) to point to the new addresses.
To relocate, the initiator itself requires reassembly. For that
reason the Z80 mnemonics only are given below.
CHADD EQU 23645 Location of SOS variable CHADD
ORG XXXXX XXXX=address of this code
LD HL,(CHADD) Start to save true CHADD
LD (TEMP), HL Temporary store of true CHADD
LD HL,49000 Address of SAVE routine
LD (CHADD),HL CHADD now points to our routine
CALL 15363 ENTER TRDOS SAVE via chadd
JP BACK Jump to program point from which
the whole routine was called
LD HL,(CHADD)
LD (TEMP),HL The routine for LOAD now repeats
LD HL,49500 the above with just the address
LD (CHADD),HL changed.
CALL 15363
BACK LD HL,(TEMP) Start to restore CHADD
LD (CHADD),HL Reload original CHADD
RET Return from where you came
TEMP Label allocating memory for
temporary storage
The whole routine pointing to both the SAVE and LOAD routines,
together with the "return to point of entry" ending routine
occupies only 47 bytes.