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 (firstname.lastname@example.org) 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.